Categories in the settings dialog are now clickable
[quassel.git] / src / qtui / settingspages / chatmonitorsettingspage.cpp
index cbfa26e..855c218 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   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  *
@@ -32,7 +32,7 @@
 #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"));
@@ -59,7 +59,9 @@ ChatMonitorSettingsPage::ChatMonitorSettingsPage(QWidget *parent)
   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 {
@@ -69,6 +71,7 @@ bool ChatMonitorSettingsPage::hasDefaults() const {
 void ChatMonitorSettingsPage::defaults() {
   settings["OperationMode"] = ChatViewSettings::OptOut;
   settings["ShowHighlights"] = false;
+  settings["ShowOwnMsgs"] = false;
   settings["Buffers"] = QVariant();
   settings["Default"] = true;
   load();
@@ -81,8 +84,10 @@ void ChatMonitorSettingsPage::load() {
   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());
 
   // get all available buffer Ids
   QList<BufferId> allBufferIds = Client::networkModel()->allBufferIds();
@@ -94,12 +99,12 @@ void ChatMonitorSettingsPage::load() {
       bufferIdsFromConfig << v.value<BufferId>();
       allBufferIds.removeAll(v.value<BufferId>());
     }
-    qSort(bufferIdsFromConfig.begin(), bufferIdsFromConfig.end(), bufferIdLessThan);
+    Client::networkModel()->sortBufferIds(bufferIdsFromConfig);
     _configActive->initSetBufferList(bufferIdsFromConfig);
   }
   ui.activeBuffers->setFilteredModel(Client::bufferModel(), _configActive);
 
-  qSort(allBufferIds.begin(), allBufferIds.end(), bufferIdLessThan);
+  Client::networkModel()->sortBufferIds(allBufferIds);
   _configAvailable->initSetBufferList(allBufferIds);
   ui.availableBuffers->setFilteredModel(Client::bufferModel(), _configAvailable);
 
@@ -108,22 +113,19 @@ void ChatMonitorSettingsPage::load() {
 
 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;
@@ -142,7 +144,23 @@ void ChatMonitorSettingsPage::widgetHasChanged() {
 }
 
 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;
 }
 
@@ -208,28 +226,17 @@ void ChatMonitorSettingsPage::on_deactivateBuffer_clicked() {
   }
 }
 
-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();
 }