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); }
};
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();
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 {
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<BufferId>())) {
+ if(redirectionTarget & BufferSettings::CurrentBuffer && !(flags & Message::Backlog)) {
BufferId redirectedTo = sourceModel()->data(sourceIdx, MessageModel::RedirectedToRole).value<BufferId>();
if(!redirectedTo.isValid()) {
- sourceModel()->setData(sourceIdx, QVariant::fromValue<BufferId>(singleBufferId()), MessageModel::RedirectedToRole);
- _redirectedMsgs << msgId;
- return true;
- } else if(_validBuffers.contains(redirectedTo)) {
- return true;
+ BufferId redirectedTo = Client::bufferModel()->currentIndex().data(NetworkModel::BufferIdRole).value<BufferId>();
+ if(redirectedTo.isValid())
+ sourceModel()->setData(sourceIdx, QVariant::fromValue<BufferId>(redirectedTo), MessageModel::RedirectedToRole);
}
- }
- QSet<BufferId>::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<BufferId>::const_iterator idIter = _validBuffers.constBegin();
+ while(idIter != _validBuffers.constEnd()) {
+ if(Client::networkModel()->bufferType(*idIter) == BufferInfo::StatusBuffer)
+ return true;
+ idIter++;
+ }
}
return false;
void init();
QSet<BufferId> _validBuffers;
- mutable QSet<MsgId> _redirectedMsgs;
QMultiHash<QString, uint> _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
// 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));
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());