From: Marcus Eggenberger Date: Tue, 13 Jan 2009 17:54:50 +0000 (+0100) Subject: Internal changes to message redirection. As a side effect this will X-Git-Tag: 0.4.0~223 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=aa5df1497a6fca61d6f59be49572799b5c9d93fe Internal changes to message redirection. As a side effect this will reset your redirection settings. Automagicaly fixes #454 --- diff --git a/src/client/buffersettings.h b/src/client/buffersettings.h index a86b12a1..81667d2b 100644 --- a/src/client/buffersettings.h +++ b/src/client/buffersettings.h @@ -27,20 +27,37 @@ class BufferSettings : public ClientSettings { public: + enum RedirectTarget { + DefaultBuffer = 0x01, + StatusBuffer = 0x02, + CurrentBuffer = 0x04 + }; + BufferSettings(const QString &idString = "__default__"); BufferSettings(BufferId bufferId); inline void setValue(const QString &key, const QVariant &data) { setLocalValue(key, data); } inline QVariant value(const QString &key, const QVariant &def = QVariant()) { return localValue(key, def); } + // Message Filter (default and per view) inline bool hasFilter() { return localValue("hasMessageTypeFilter", false).toBool(); } inline int messageFilter() { return localValue("MessageTypeFilter", 0).toInt(); } void setMessageFilter(int filter); void filterMessage(Message::Type msgType, bool filter); void removeFilter(); + // user state icons for query buffers (default) inline bool showUserStateIcons() { return localValue("ShowUserStateIcons", true).toBool(); } inline void enableUserStateIcons(bool enabled) { setLocalValue("ShowUserStateIcons", enabled); } + + + // redirection settings (default) + inline int userNoticesTarget() { return localValue("UserNoticesTarget", DefaultBuffer).toInt(); } + inline void setUserNoticesTarget(int target) { setLocalValue("UserNoticesTarget", target); } + inline int serverNoticesTarget() { return localValue("ServerNoticesTarget", StatusBuffer).toInt(); } + inline void setServerNoticesTarget(int target) { setLocalValue("ServerNoticesTarget", target); } + inline int errorMsgsTarget() { return localValue("ErrorMsgsTarget", DefaultBuffer).toInt(); } + inline void setErrorMsgsTarget(int target) { setLocalValue("ErrorMsgsTarget", target); } }; diff --git a/src/client/messagefilter.cpp b/src/client/messagefilter.cpp index 6a05e9ea..c9c44d16 100644 --- a/src/client/messagefilter.cpp +++ b/src/client/messagefilter.cpp @@ -47,17 +47,9 @@ void MessageFilter::init() { setDynamicSortFilter(true); BufferSettings defaultSettings; - defaultSettings.notify("UserNoticesInDefaultBuffer", this, SLOT(messageRedirectionChanged())); - defaultSettings.notify("UserNoticesInStatusBuffer", this, SLOT(messageRedirectionChanged())); - defaultSettings.notify("UserNoticesInCurrentBuffer", this, SLOT(messageRedirectionChanged())); - - defaultSettings.notify("serverNoticesInDefaultBuffer", this, SLOT(messageRedirectionChanged())); - defaultSettings.notify("serverNoticesInStatusBuffer", this, SLOT(messageRedirectionChanged())); - defaultSettings.notify("serverNoticesInCurrentBuffer", this, SLOT(messageRedirectionChanged())); - - defaultSettings.notify("ErrorMsgsInDefaultBuffer", this, SLOT(messageRedirectionChanged())); - defaultSettings.notify("ErrorMsgsInStatusBuffer", this, SLOT(messageRedirectionChanged())); - defaultSettings.notify("ErrorMsgsInCurrentBuffer", this, SLOT(messageRedirectionChanged())); + defaultSettings.notify("UserNoticesTarget", this, SLOT(messageRedirectionChanged())); + defaultSettings.notify("ServerNoticesTarget", this, SLOT(messageRedirectionChanged())); + defaultSettings.notify("ErrorMsgsTarget", this, SLOT(messageRedirectionChanged())); messageRedirectionChanged(); _messageTypeFilter = defaultSettings.messageFilter(); @@ -88,19 +80,25 @@ void MessageFilter::messageTypeFilterChanged() { void MessageFilter::messageRedirectionChanged() { BufferSettings bufferSettings; - _userNoticesInDefaultBuffer = bufferSettings.value("UserNoticesInDefaultBuffer", QVariant(true)).toBool(); - _userNoticesInStatusBuffer = bufferSettings.value("UserNoticesInStatusBuffer", QVariant(false)).toBool(); - _userNoticesInCurrentBuffer = bufferSettings.value("UserNoticesInCurrentBuffer", QVariant(false)).toBool(); + bool changed = false; + + if(_userNoticesTarget != bufferSettings.userNoticesTarget()) { + _userNoticesTarget = bufferSettings.userNoticesTarget(); + changed = true; + } - _serverNoticesInDefaultBuffer = bufferSettings.value("ServerNoticesInDefaultBuffer", QVariant(false)).toBool(); - _serverNoticesInStatusBuffer = bufferSettings.value("ServerNoticesInStatusBuffer", QVariant(true)).toBool(); - _serverNoticesInCurrentBuffer = bufferSettings.value("ServerNoticesInCurrentBuffer", QVariant(false)).toBool(); + if(_serverNoticesTarget != bufferSettings.serverNoticesTarget()) { + _serverNoticesTarget = bufferSettings.serverNoticesTarget(); + changed = true; + } - _errorMsgsInDefaultBuffer = bufferSettings.value("ErrorMsgsInDefaultBuffer", QVariant(true)).toBool(); - _errorMsgsInStatusBuffer = bufferSettings.value("ErrorMsgsInStatusBuffer", QVariant(false)).toBool(); - _errorMsgsInCurrentBuffer = bufferSettings.value("ErrorMsgsInCurrentBuffer", QVariant(false)).toBool(); + if(_errorMsgsTarget != bufferSettings.errorMsgsTarget()) { + _errorMsgsTarget = bufferSettings.errorMsgsTarget(); + changed = true; + } - invalidateFilter(); + if(changed) + invalidateFilter(); } QString MessageFilter::idString() const { @@ -143,59 +141,51 @@ bool MessageFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourcePar return false; bool redirect = false; - bool inDefaultBuffer; - bool inStatusBuffer; - bool inCurrentBuffer; - + int redirectionTarget = 0; switch(messageType) { case Message::Notice: if(Client::networkModel()->bufferType(bufferId) != BufferInfo::ChannelBuffer) { redirect = true; if(flags & Message::ServerMsg) { // server notice - inDefaultBuffer = _serverNoticesInDefaultBuffer; - inStatusBuffer = _serverNoticesInStatusBuffer; - inCurrentBuffer = _serverNoticesInCurrentBuffer; + redirectionTarget = _serverNoticesTarget; } else { - inDefaultBuffer = _userNoticesInDefaultBuffer; - inStatusBuffer = _userNoticesInStatusBuffer; - inCurrentBuffer = _userNoticesInCurrentBuffer; + redirectionTarget = _userNoticesTarget; } } break; case Message::Error: redirect = true; - inDefaultBuffer = _errorMsgsInDefaultBuffer; - inStatusBuffer = _errorMsgsInStatusBuffer; - inCurrentBuffer = _errorMsgsInCurrentBuffer; + redirectionTarget = _errorMsgsTarget; break; default: break; } if(redirect) { - if(_redirectedMsgs.contains(msgId)) - return true; - if(inDefaultBuffer && _validBuffers.contains(bufferId)) + if(redirectionTarget & BufferSettings::DefaultBuffer && _validBuffers.contains(bufferId)) return true; - if(inCurrentBuffer && !(flags & Message::Backlog) && _validBuffers.contains(Client::bufferModel()->currentIndex().data(NetworkModel::BufferIdRole).value())) { + if(redirectionTarget & BufferSettings::CurrentBuffer && !(flags & Message::Backlog)) { BufferId redirectedTo = sourceModel()->data(sourceIdx, MessageModel::RedirectedToRole).value(); if(!redirectedTo.isValid()) { - sourceModel()->setData(sourceIdx, QVariant::fromValue(singleBufferId()), MessageModel::RedirectedToRole); - _redirectedMsgs << msgId; - return true; - } else if(_validBuffers.contains(redirectedTo)) { - return true; + BufferId redirectedTo = Client::bufferModel()->currentIndex().data(NetworkModel::BufferIdRole).value(); + if(redirectedTo.isValid()) + sourceModel()->setData(sourceIdx, QVariant::fromValue(redirectedTo), MessageModel::RedirectedToRole); } - } - QSet::const_iterator idIter = _validBuffers.constBegin(); - while(idIter != _validBuffers.constEnd()) { - if(inStatusBuffer && Client::networkModel()->bufferType(*idIter) == BufferInfo::StatusBuffer) + if(_validBuffers.contains(redirectedTo)) return true; - idIter++; + } + + if(redirectionTarget & BufferSettings::StatusBuffer) { + QSet::const_iterator idIter = _validBuffers.constBegin(); + while(idIter != _validBuffers.constEnd()) { + if(Client::networkModel()->bufferType(*idIter) == BufferInfo::StatusBuffer) + return true; + idIter++; + } } return false; diff --git a/src/client/messagefilter.h b/src/client/messagefilter.h index 60133d20..84d089f4 100644 --- a/src/client/messagefilter.h +++ b/src/client/messagefilter.h @@ -59,21 +59,12 @@ private: void init(); QSet _validBuffers; - mutable QSet _redirectedMsgs; QMultiHash _filteredQuitMsgs; int _messageTypeFilter; - bool _userNoticesInDefaultBuffer; - bool _userNoticesInStatusBuffer; - bool _userNoticesInCurrentBuffer; - - bool _serverNoticesInDefaultBuffer; - bool _serverNoticesInStatusBuffer; - bool _serverNoticesInCurrentBuffer; - - bool _errorMsgsInDefaultBuffer; - bool _errorMsgsInStatusBuffer; - bool _errorMsgsInCurrentBuffer; + int _userNoticesTarget; + int _serverNoticesTarget; + int _errorMsgsTarget; }; #endif diff --git a/src/qtui/settingspages/generalsettingspage.cpp b/src/qtui/settingspages/generalsettingspage.cpp index 5b44914a..081baa44 100644 --- a/src/qtui/settingspages/generalsettingspage.cpp +++ b/src/qtui/settingspages/generalsettingspage.cpp @@ -109,17 +109,20 @@ void GeneralSettingsPage::load() { // bufferSettings: BufferSettings bufferSettings; - SettingsPage::load(ui.userNoticesInDefaultBuffer, bufferSettings.value("UserNoticesInDefaultBuffer", QVariant(true)).toBool()); - SettingsPage::load(ui.userNoticesInStatusBuffer, bufferSettings.value("UserNoticesInStatusBuffer", QVariant(false)).toBool()); - SettingsPage::load(ui.userNoticesInCurrentBuffer, bufferSettings.value("UserNoticesInCurrentBuffer", QVariant(false)).toBool()); + int redirectTarget = bufferSettings.userNoticesTarget(); + SettingsPage::load(ui.userNoticesInDefaultBuffer, redirectTarget & BufferSettings::DefaultBuffer); + SettingsPage::load(ui.userNoticesInStatusBuffer, redirectTarget & BufferSettings::StatusBuffer); + SettingsPage::load(ui.userNoticesInCurrentBuffer, redirectTarget & BufferSettings::CurrentBuffer); - SettingsPage::load(ui.serverNoticesInDefaultBuffer, bufferSettings.value("ServerNoticesInDefaultBuffer", QVariant(false)).toBool()); - SettingsPage::load(ui.serverNoticesInStatusBuffer, bufferSettings.value("ServerNoticesInStatusBuffer", QVariant(true)).toBool()); - SettingsPage::load(ui.serverNoticesInCurrentBuffer, bufferSettings.value("ServerNoticesInCurrentBuffer", QVariant(false)).toBool()); + redirectTarget = bufferSettings.serverNoticesTarget(); + SettingsPage::load(ui.serverNoticesInDefaultBuffer, redirectTarget & BufferSettings::DefaultBuffer); + SettingsPage::load(ui.serverNoticesInStatusBuffer, redirectTarget & BufferSettings::StatusBuffer); + SettingsPage::load(ui.serverNoticesInCurrentBuffer, redirectTarget & BufferSettings::CurrentBuffer); - SettingsPage::load(ui.errorMsgsInDefaultBuffer, bufferSettings.value("ErrorMsgsInDefaultBuffer", QVariant(true)).toBool()); - SettingsPage::load(ui.errorMsgsInStatusBuffer, bufferSettings.value("ErrorMsgsInStatusBuffer", QVariant(false)).toBool()); - SettingsPage::load(ui.errorMsgsInCurrentBuffer, bufferSettings.value("ErrorMsgsInCurrentBuffer", QVariant(false)).toBool()); + redirectTarget = bufferSettings.errorMsgsTarget(); + SettingsPage::load(ui.errorMsgsInDefaultBuffer, redirectTarget & BufferSettings::DefaultBuffer); + SettingsPage::load(ui.errorMsgsInStatusBuffer, redirectTarget & BufferSettings::StatusBuffer); + SettingsPage::load(ui.errorMsgsInCurrentBuffer, redirectTarget & BufferSettings::CurrentBuffer); settings["DisplayTopicInTooltip"] = bufferSettings.value("DisplayTopicInTooltip", QVariant(false)); @@ -142,17 +145,32 @@ void GeneralSettingsPage::save() { uiSettings.setValue("MouseWheelChangesBuffers", ui.mouseWheelChangesBuffers->isChecked()); BufferSettings bufferSettings; - bufferSettings.setValue("UserNoticesInDefaultBuffer", ui.userNoticesInDefaultBuffer->isChecked()); - bufferSettings.setValue("UserNoticesInStatusBuffer", ui.userNoticesInStatusBuffer->isChecked()); - bufferSettings.setValue("UserNoticesInCurrentBuffer", ui.userNoticesInCurrentBuffer->isChecked()); - - bufferSettings.setValue("ServerNoticesInDefaultBuffer", ui.serverNoticesInDefaultBuffer->isChecked()); - bufferSettings.setValue("ServerNoticesInStatusBuffer", ui.serverNoticesInStatusBuffer->isChecked()); - bufferSettings.setValue("ServerNoticesInCurrentBuffer", ui.serverNoticesInCurrentBuffer->isChecked()); - - bufferSettings.setValue("ErrorMsgsInDefaultBuffer", ui.errorMsgsInDefaultBuffer->isChecked()); - bufferSettings.setValue("ErrorMsgsInStatusBuffer", ui.errorMsgsInStatusBuffer->isChecked()); - bufferSettings.setValue("ErrorMsgsInCurrentBuffer", ui.errorMsgsInCurrentBuffer->isChecked()); + int redirectTarget = 0; + if(ui.userNoticesInDefaultBuffer->isChecked()) + redirectTarget |= BufferSettings::DefaultBuffer; + if(ui.userNoticesInStatusBuffer->isChecked()) + redirectTarget |= BufferSettings::StatusBuffer; + if(ui.userNoticesInCurrentBuffer->isChecked()) + redirectTarget |= BufferSettings::CurrentBuffer; + bufferSettings.setUserNoticesTarget(redirectTarget); + + redirectTarget = 0; + if(ui.serverNoticesInDefaultBuffer->isChecked()) + redirectTarget |= BufferSettings::DefaultBuffer; + if(ui.serverNoticesInStatusBuffer->isChecked()) + redirectTarget |= BufferSettings::StatusBuffer; + if(ui.serverNoticesInCurrentBuffer->isChecked()) + redirectTarget |= BufferSettings::CurrentBuffer; + bufferSettings.setServerNoticesTarget(redirectTarget); + + redirectTarget = 0; + if(ui.errorMsgsInDefaultBuffer->isChecked()) + redirectTarget |= BufferSettings::DefaultBuffer; + if(ui.errorMsgsInStatusBuffer->isChecked()) + redirectTarget |= BufferSettings::StatusBuffer; + if(ui.errorMsgsInCurrentBuffer->isChecked()) + redirectTarget |= BufferSettings::CurrentBuffer; + bufferSettings.setErrorMsgsTarget(redirectTarget); bufferSettings.setValue("DisplayTopicInTooltip", ui.displayTopicInTooltip->isChecked());