src: Yearly copyright bump
[quassel.git] / src / qtui / settingspages / chatviewsettingspage.cpp
index 924474c..d55f201 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2016 by the Quassel Project                        *
+ *   Copyright (C) 2005-2019 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  ***************************************************************************/
 
 #include "chatviewsettingspage.h"
+
+#include "chatviewsettings.h"
 #include "client.h"
 #include "qtui.h"
 #include "qtuistyle.h"
+#include "uistyle.h"
 
-ChatViewSettingsPage::ChatViewSettingsPage(QWidget *parent)
+ChatViewSettingsPage::ChatViewSettingsPage(QWidgetparent)
     : SettingsPage(tr("Interface"), tr("Chat View"), parent)
 {
     ui.setupUi(this);
@@ -33,22 +36,49 @@ ChatViewSettingsPage::ChatViewSettingsPage(QWidget *parent)
     ui.showWebPreview->setEnabled(false);
 #endif
 
+    // Handle UI dependent on core feature flags here
     // FIXME remove with protocol v11
-    if (!(Client::coreFeatures() & Quassel::SynchronizedMarkerLine)) {
+    if (!Client::isCoreFeatureEnabled(Quassel::Feature::SynchronizedMarkerLine)) {
         ui.autoMarkerLine->setEnabled(false);
         ui.autoMarkerLine->setChecked(true);
-        ui.autoMarkerLine->setToolTip(tr("You need at least version 0.6 of quasselcore to use this feature"));
+        ui.autoMarkerLine->setToolTip(tr("You need at least version 0.6 of Quassel Core to use this feature"));
+    }
+    if (!Client::isCoreFeatureEnabled(Quassel::Feature::SenderPrefixes)) {
+        // Sender prefixes are not supported, disallow toggling
+        ui.senderPrefixComboBox->setEnabled(false);
+        // Split up the message to allow re-using translations:
+        // [Original tool-tip]
+        // [Bold 'does not support feature' message]
+        // [Specific version needed and feature details]
+        ui.senderPrefixComboBox->setToolTip(QString("<b>%2</b><br/>%3")
+                                                .arg(tr("Your Quassel core does not support this feature"),
+                                                     tr("You need a Quassel core v0.13.0 or newer in order to show sender "
+                                                        "modes before nicknames.")));
     }
-
     initAutoWidgets();
+    initSenderPrefixComboBox();
 }
 
+void ChatViewSettingsPage::initSenderPrefixComboBox()
+{
+    // Fill combobox with sender prefix modes
+    // Do not change ComboBox ordering without also adjusting chatviewsettingspage.ui "defaultValue"
+    // and UiStyle::SenderPrefixMode
+    ui.senderPrefixComboBox->addItem(tr("No modes"), static_cast<int>(UiStyle::SenderPrefixMode::NoModes));
+    ui.senderPrefixComboBox->addItem(tr("Highest mode"), static_cast<int>(UiStyle::SenderPrefixMode::HighestMode));
+    ui.senderPrefixComboBox->addItem(tr("All modes"), static_cast<int>(UiStyle::SenderPrefixMode::AllModes));
+}
 
 void ChatViewSettingsPage::save()
 {
+    bool needsStyleReload = SettingsPage::hasChanged(ui.customChatViewFont) || SettingsPage::hasChanged(ui.chatViewFont);
+
     // Save the general settings
     SettingsPage::save();
-    // Update the stylesheet in case fonts are changed
-    QtUi::style()->generateSettingsQss();
-    QtUi::style()->reload();
+
+    // Update the stylesheet if fonts are changed
+    if (needsStyleReload) {
+        QtUi::style()->generateSettingsQss();
+        QtUi::style()->reload();
+    }
 }