/***************************************************************************
- * Copyright (C) 2005-08 by the Quassel IRC Team *
+ * Copyright (C) 2005-09 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QVariant>
ChatMonitorSettingsPage::ChatMonitorSettingsPage(QWidget *parent)
- : SettingsPage(tr("General"), tr("Chat Monitor"), parent) {
+ : SettingsPage(tr("Appearance"), tr("Chat Monitor"), parent) {
ui.setupUi(this);
ui.activateBuffer->setIcon(SmallIcon("go-next"));
ui.deactivateBuffer->setIcon(SmallIcon("go-previous"));
- // initialize pointers
- configAvailable = 0;
- configActive = 0;
+
+ // setup available buffers config (for the bufferview on the left)
+ _configAvailable = new BufferViewConfig(-667, this);
+ _configAvailable->setBufferViewName("tmpChatMonitorAvailableBuffers");
+ _configAvailable->setSortAlphabetically(true);
+ _configAvailable->setDisableDecoration(true);
+ _configAvailable->setNetworkId(NetworkId());
+ _configAvailable->setInitialized();
+
+ // setup active buffers config (for the bufferview on the right)
+ _configActive = new BufferViewConfig(-666, this);
+ _configActive->setBufferViewName("tmpChatMonitorActiveBuffers");
+ _configActive->setSortAlphabetically(true);
+ _configActive->setDisableDecoration(true);
+ _configActive->setNetworkId(NetworkId());
+ _configActive->setInitialized();
// fill combobox with operation modes
ui.operationMode->addItem(tr("Opt In"), ChatViewSettings::OptIn);
ui.operationMode->addItem(tr("Opt Out"), ChatViewSettings::OptOut);
// connect slots
- connect(ui.operationMode, SIGNAL(currentIndexChanged(int)), this, SLOT(switchOperationMode(int)));
+ connect(ui.operationMode, SIGNAL(currentIndexChanged(int)), SLOT(switchOperationMode(int)));
+ connect(ui.showHighlights, SIGNAL(toggled(bool)), SLOT(widgetHasChanged()));
+ connect(ui.showOwnMessages, SIGNAL(toggled(bool)), SLOT(widgetHasChanged()));
}
bool ChatMonitorSettingsPage::hasDefaults() const {
void ChatMonitorSettingsPage::defaults() {
settings["OperationMode"] = ChatViewSettings::OptOut;
settings["ShowHighlights"] = false;
+ settings["ShowOwnMsgs"] = false;
settings["Buffers"] = QVariant();
settings["Default"] = true;
load();
}
void ChatMonitorSettingsPage::load() {
- delete configAvailable;
- delete configActive;
-
- if (settings.contains("Default"))
+ if(settings.contains("Default"))
settings.remove("Default");
else
loadSettings();
+ switchOperationMode(settings["OperationMode"].toInt() - 1);
ui.operationMode->setCurrentIndex(settings["OperationMode"].toInt() - 1);
ui.showHighlights->setChecked(settings["ShowHighlights"].toBool());
+ ui.showOwnMessages->setChecked(settings["ShowOwnMsgs"].toBool());
- // setup available buffers config (for the bufferview on the left)
- configAvailable = new BufferViewConfig(-667);
- configAvailable->setBufferViewName("tmpChatMonitorAvailableBuffers");
- configAvailable->sortAlphabetically();
- configAvailable->setNetworkId(NetworkId());
- configAvailable->setInitialized();
-
- // setup active buffers config (for the bufferview on the right)
- configActive = new BufferViewConfig(-666);
- configActive->setBufferViewName("tmpChatMonitorActiveBuffers");
- configActive->setSortAlphabetically(true);
- configActive->setNetworkId(NetworkId());
- configActive->setInitialized();
-
- // get all available buffer Ids
+ // get all available buffer Ids
QList<BufferId> allBufferIds = Client::networkModel()->allBufferIds();
if(!settings["Buffers"].toList().isEmpty()) {
// remove all active buffers from the available config
foreach(QVariant v, settings["Buffers"].toList()) {
bufferIdsFromConfig << v.value<BufferId>();
- allBufferIds.removeOne(v.value<BufferId>());
+ allBufferIds.removeAll(v.value<BufferId>());
}
- configActive->initSetBufferList(bufferIdsFromConfig);
+ Client::networkModel()->sortBufferIds(bufferIdsFromConfig);
+ _configActive->initSetBufferList(bufferIdsFromConfig);
}
- ui.activeBuffers->setFilteredModel(Client::bufferModel(), configActive);
+ ui.activeBuffers->setFilteredModel(Client::bufferModel(), _configActive);
- configAvailable->initSetBufferList(allBufferIds);
- ui.availableBuffers->setFilteredModel(Client::bufferModel(), configAvailable);
+ Client::networkModel()->sortBufferIds(allBufferIds);
+ _configAvailable->initSetBufferList(allBufferIds);
+ ui.availableBuffers->setFilteredModel(Client::bufferModel(), _configAvailable);
setChangedState(false);
}
void ChatMonitorSettingsPage::loadSettings() {
ChatViewSettings chatViewSettings("ChatMonitor");
- settings["OperationMode"] = static_cast<ChatViewSettings::OperationMode>(chatViewSettings.value("OperationMode", QVariant()).toInt());
+ settings["OperationMode"] = (ChatViewSettings::OperationMode)chatViewSettings.value("OperationMode", ChatViewSettings::OptOut).toInt();
- // Load default behavior if no or invalid settings found
- if (settings["OperationMode"] == ChatViewSettings::InvalidMode) {
- switchOperationMode(ui.operationMode->findData(ChatViewSettings::OptOut));
- settings["OperationMode"] == ChatViewSettings::OptOut;
- }
settings["ShowHighlights"] = chatViewSettings.value("ShowHighlights", false);
+ settings["ShowOwnMsgs"] = chatViewSettings.value("ShowOwnMsgs", false);
settings["Buffers"] = chatViewSettings.value("Buffers", QVariantList());
}
void ChatMonitorSettingsPage::save() {
ChatViewSettings chatViewSettings("ChatMonitor");
// save operation mode
- chatViewSettings.setValue("OperationMode", settings["OperationMode"]);
- chatViewSettings.setValue("ShowHighlights", settings["ShowHighlights"]);
+ chatViewSettings.setValue("OperationMode", ui.operationMode->currentIndex() + 1);
+ chatViewSettings.setValue("ShowHighlights", ui.showHighlights->isChecked());
+ chatViewSettings.setValue("ShowOwnMsgs", ui.showOwnMessages->isChecked());
// save list of active buffers
QVariantList saveableBufferIdList;
- foreach(BufferId id, configActive->bufferList()) {
+ foreach(BufferId id, _configActive->bufferList()) {
saveableBufferIdList << QVariant::fromValue<BufferId>(id);
}
}
bool ChatMonitorSettingsPage::testHasChanged() {
- if (configAvailable != configActive) return true;
+ if(settings["OperationMode"].toInt() != ui.operationMode->currentIndex() + 1)
+ return true;
+ if(settings["ShowHighlights"].toBool() != ui.showHighlights->isChecked())
+ return true;
+ if(settings["ShowOwnMsgs"].toBool() != ui.showOwnMessages->isChecked())
+ return true;
+
+ if(_configActive->bufferList().count() != settings["Buffers"].toList().count())
+ return true;
+
+ QSet<BufferId> uiBufs = _configActive->bufferList().toSet();
+ QSet<BufferId> settingsBufs;
+ foreach(QVariant v, settings["Buffers"].toList())
+ settingsBufs << v.value<BufferId>();
+ if(uiBufs != settingsBufs)
+ return true;
+
return false;
}
// Fill QMap with selected items ordered by selection row
QMap<int, QList<BufferId> > selectedBuffers;
- foreach (QModelIndex index, inView->selectionModel()->selectedIndexes()) {
+ foreach(QModelIndex index, inView->selectionModel()->selectedIndexes()) {
BufferId inBufferId = index.data(NetworkModel::BufferIdRole).value<BufferId>();
if(index.data(NetworkModel::ItemTypeRole) == NetworkModel::NetworkItemType) {
// TODO:
// If item is a network: move over all children and skip other selected items of this node
}
- else if (index.data(NetworkModel::ItemTypeRole) == NetworkModel::BufferItemType) {
+ else if(index.data(NetworkModel::ItemTypeRole) == NetworkModel::BufferItemType) {
selectedBuffers[index.parent().row()] << inBufferId;
}
}
void ChatMonitorSettingsPage::on_activateBuffer_clicked() {
if (ui.availableBuffers->currentIndex().isValid() && ui.availableBuffers->selectionModel()->hasSelection()) {
- toggleBuffers(ui.availableBuffers, configAvailable, ui.activeBuffers, configActive);
+ toggleBuffers(ui.availableBuffers, _configAvailable, ui.activeBuffers, _configActive);
widgetHasChanged();
}
}
void ChatMonitorSettingsPage::on_deactivateBuffer_clicked() {
if (ui.activeBuffers->currentIndex().isValid() && ui.activeBuffers->selectionModel()->hasSelection()) {
- toggleBuffers(ui.activeBuffers, configActive, ui.availableBuffers, configAvailable);
+ toggleBuffers(ui.activeBuffers, _configActive, ui.availableBuffers, _configAvailable);
widgetHasChanged();
}
}
-void ChatMonitorSettingsPage::on_showHighlights_toggled(bool state)
-{
- settings["ShowHighlights"] = state;
- widgetHasChanged();
-}
-
/*
switchOperationMode gets called on combobox signal currentIndexChanged.
modeIndex is the row id in combobox itemlist
*/
-void ChatMonitorSettingsPage::switchOperationMode(int modeIndex) {
- ChatViewSettings::OperationMode newMode = static_cast<ChatViewSettings::OperationMode>(ui.operationMode->itemData(modeIndex).toInt());
-
- if(newMode == ChatViewSettings::OptIn) {
+void ChatMonitorSettingsPage::switchOperationMode(int idx) {
+ ChatViewSettings::OperationMode mode = (ChatViewSettings::OperationMode)(idx + 1);
+ if(mode == ChatViewSettings::OptIn) {
ui.labelActiveBuffers->setText(tr("Show:"));
}
- else if(newMode == ChatViewSettings::OptOut) {
+ else if(mode == ChatViewSettings::OptOut) {
ui.labelActiveBuffers->setText(tr("Ignore:"));
}
-
- if(settings["OperationMode"] != newMode) {
- setChangedState(true);
- }
- settings["OperationMode"] = newMode;
+ widgetHasChanged();
}