/***************************************************************************
- * Copyright (C) 2005-2018 by the Quassel Project *
+ * Copyright (C) 2005-2022 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "topicwidget.h"
#include "client.h"
+#include "graphicalui.h"
#include "icon.h"
#include "networkmodel.h"
#include "uisettings.h"
-#include "graphicalui.h"
#include "uistyle.h"
#include "util.h"
-TopicWidget::TopicWidget(QWidget *parent)
+TopicWidget::TopicWidget(QWidget* parent)
: AbstractItemView(parent)
{
ui.setupUi(this);
_readonly = false;
}
-
-void TopicWidget::currentChanged(const QModelIndex ¤t, const QModelIndex &previous)
+void TopicWidget::currentChanged(const QModelIndex& current, const QModelIndex& previous)
{
Q_UNUSED(previous);
setTopic(current);
}
-
-void TopicWidget::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
+void TopicWidget::dataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
QItemSelectionRange changedArea(topLeft, bottomRight);
QModelIndex currentTopicIndex = selectionModel()->currentIndex().sibling(selectionModel()->currentIndex().row(), 1);
setTopic(selectionModel()->currentIndex());
}
-void TopicWidget::setUseCustomFont(const QVariant &v)
+void TopicWidget::setUseCustomFont(const QVariant& v)
{
if (v.toBool()) {
UiStyleSettings fs("Fonts");
setCustomFont(QFont());
}
-
-void TopicWidget::setCustomFont(const QVariant &v)
+void TopicWidget::setCustomFont(const QVariant& v)
{
UiStyleSettings fs("Fonts");
if (!fs.value("UseCustomTopicWidgetFont", false).toBool())
setCustomFont(v.value<QFont>());
}
-
-void TopicWidget::setCustomFont(const QFont &f)
+void TopicWidget::setCustomFont(const QFont& f)
{
QFont font = f;
if (font.family().isEmpty())
ui.topicLabel->setCustomFont(font);
}
-
-void TopicWidget::setTopic(const QModelIndex &index)
+void TopicWidget::setTopic(const QModelIndex& index)
{
QString newtopic;
bool readonly = true;
BufferId id = index.data(NetworkModel::BufferIdRole).value<BufferId>();
if (id.isValid()) {
QModelIndex index0 = index.sibling(index.row(), 0);
- const Network *network = Client::network(Client::networkModel()->networkId(id));
+ const Network* network = Client::network(Client::networkModel()->networkId(id));
switch (Client::networkModel()->bufferType(id)) {
case BufferInfo::StatusBuffer:
if (network) {
newtopic = QString("%1 (%2) | %3 | %4")
- .arg(network->networkName().toHtmlEscaped())
- .arg(network->currentServer().toHtmlEscaped())
- .arg(tr("Users: %1").arg(network->ircUsers().count()))
- .arg(tr("Lag: %1 msecs").arg(network->latency()));
+ .arg(network->networkName().toHtmlEscaped())
+ .arg(network->currentServer().toHtmlEscaped())
+ .arg(tr("Users: %1").arg(network->ircUsers().count()))
+ .arg(tr("Lag: %1 msecs").arg(network->latency()));
}
else {
newtopic = index0.data(Qt::DisplayRole).toString();
readonly = false;
break;
- case BufferInfo::QueryBuffer:
- {
+ case BufferInfo::QueryBuffer: {
QString nickname = index0.data(Qt::DisplayRole).toString();
if (network) {
- const IrcUser *user = network->ircUser(nickname);
+ const IrcUser* user = network->ircUser(nickname);
if (user) {
- newtopic = QString("%1%2%3 | %4@%5").arg(nickname)
- .arg(user->userModes().isEmpty() ? QString() : QString(" (+%1)").arg(user->userModes()))
- .arg(user->realName().isEmpty() ? QString() : QString(" | %1").arg(user->realName()))
- .arg(user->user())
- .arg(user->host());
+ newtopic = QString("%1%2%3 | %4@%5")
+ .arg(nickname)
+ .arg(user->userModes().isEmpty() ? QString() : QString(" (+%1)").arg(user->userModes()))
+ .arg(user->realName().isEmpty() ? QString() : QString(" | %1").arg(user->realName()))
+ .arg(user->user())
+ .arg(user->host());
}
- else { // no such user
+ else { // no such user
newtopic = nickname;
}
}
- else { // no valid Network-Obj.
+ else { // no valid Network-Obj.
newtopic = nickname;
}
break;
}
}
- _topic = sanitizeTopic(newtopic);
- _readonly = readonly;
+ QString sanitizedNewTopic = sanitizeTopic(newtopic);
+ if (readonly != _readonly || sanitizedNewTopic != _topic)
+ {
+ _topic = sanitizedNewTopic;
+ _readonly = readonly;
- ui.topicEditButton->setVisible(!_readonly);
- ui.topicLabel->setText(_topic);
- ui.topicLineEdit->setPlainText(_topic);
- switchPlain();
+ ui.topicEditButton->setVisible(!_readonly);
+ ui.topicLabel->setText(_topic);
+ ui.topicLineEdit->setPlainText(_topic);
+ switchPlain();
+ }
}
-
-void TopicWidget::setReadOnly(const bool &readonly)
+void TopicWidget::setReadOnly(const bool& readonly)
{
if (_readonly == readonly)
return;
_readonly = readonly;
}
-
void TopicWidget::updateResizeMode()
{
StyledLabel::ResizeMode mode = StyledLabel::NoResize;
ui.topicLabel->setResizeMode(mode);
}
-
-void TopicWidget::clickableActivated(const Clickable &click)
+void TopicWidget::clickableActivated(const Clickable& click)
{
NetworkId networkId = selectionModel()->currentIndex().data(NetworkModel::NetworkIdRole).value<NetworkId>();
- UiStyle::StyledString sstr = GraphicalUi::uiStyle()->styleString(GraphicalUi::uiStyle()->mircToInternal(_topic), UiStyle::FormatType::PlainMsg);
+ UiStyle::StyledString sstr = GraphicalUi::uiStyle()->styleString(GraphicalUi::uiStyle()->mircToInternal(_topic),
+ UiStyle::FormatType::PlainMsg);
click.activate(networkId, sstr.plainText);
}
-
void TopicWidget::on_topicLineEdit_textEntered()
{
QModelIndex currentIdx = currentIndex();
switchPlain();
}
-
void TopicWidget::on_topicEditButton_clicked()
{
switchEditable();
}
-
void TopicWidget::switchEditable()
{
ui.stackedWidget->setCurrentIndex(1);
updateGeometry();
}
-
void TopicWidget::switchPlain()
{
ui.stackedWidget->setCurrentIndex(0);
emit switchedPlain();
}
-
// filter for the input widget to switch back to normal mode
-bool TopicWidget::eventFilter(QObject *obj, QEvent *event)
+bool TopicWidget::eventFilter(QObject* obj, QEvent* event)
{
if (event->type() == QEvent::FocusOut && !_mouseEntered) {
switchPlain();
if (event->type() != QEvent::KeyRelease)
return QObject::eventFilter(obj, event);
- auto *keyEvent = static_cast<QKeyEvent *>(event);
+ auto* keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Escape) {
switchPlain();
QString TopicWidget::sanitizeTopic(const QString& topic)
{
// Normally, you don't have new lines in topic messages
- // But the use of "plain text" functionnality from Qt replaces
+ // But the use of "plain text" functionality from Qt replaces
// some unicode characters with a new line, which then triggers
// a stack overflow later
QString result(topic);