- Implemented: Settings option to enable/disable sender auto coloring
authorjakob <jakob@ezekiel.(none)>
Fri, 28 Nov 2008 17:01:40 +0000 (18:01 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sun, 15 Feb 2009 18:09:53 +0000 (19:09 +0100)
src/qtui/settingspages/colorsettingspage.cpp
src/qtui/settingspages/colorsettingspage.ui
src/uisupport/uistyle.cpp
src/uisupport/uistyle.h

index 3038c18..bd4c8c2 100644 (file)
@@ -153,6 +153,7 @@ void ColorSettingsPage::defaultMessage() {
   ui.senderBG->setColor(QColor("white"));
   ui.senderBG->setEnabled(false);
   ui.senderUseBG->setChecked(false);
+  ui.senderAutoColor->setChecked(true);  
   ui.newMsgMarkerFG->setColor(Qt::red);
 
   /*
@@ -331,6 +332,11 @@ void ColorSettingsPage::load() {
   ui.timestampBG->setColor(QtUi::style()->format(UiStyle::Timestamp).background().color());
   ui.senderFG->setColor(QtUi::style()->format(UiStyle::Sender).foreground().color());
   ui.senderBG->setColor(QtUi::style()->format(UiStyle::Sender).background().color());
+  settings["SenderAutoColor"] = s.value("senderAutoColor", QVariant(true));
+  if (settings["SenderAutoColor"].toBool()) {
+    ui.senderAutoColor->setChecked(true);
+    ui.senderFrame->setEnabled(false);
+  }
   settings["NewMsgMarkerFG"] = s.value("newMsgMarkerFG", QColor(Qt::red));
   ui.newMsgMarkerFG->setColor(settings["NewMsgMarkerFG"].value<QColor>());
 
@@ -443,6 +449,8 @@ void ColorSettingsPage::save() {
   s.setValue("timestampUseBG", ui.timestampUseBG->isChecked());
   saveColor(UiStyle::Sender, ui.senderFG->color(), ui.senderBG->color(), ui.senderUseBG->isChecked());
   s.setValue("senderUseBG", ui.senderUseBG->isChecked());
+  s.setValue("senderAutoColor", ui.senderAutoColor->isChecked());
+  QtUi::style()->setSenderAutoColor(ui.senderAutoColor->isChecked());
   s.setValue("newMsgMarkerFG", ui.newMsgMarkerFG->color());
 
   /*
@@ -573,6 +581,7 @@ bool ColorSettingsPage::testHasChanged() {
   if(QtUi::style()->format(UiStyle::Sender).foreground().color() != ui.senderFG->color()) return true;
   if(QtUi::style()->format(UiStyle::Sender).background().color() != ui.senderBG->color()) return true;
   if(settings["SenderUseBG"].toBool() != ui.senderUseBG->isChecked()) return true;
+  if(settings["SenderAutoColor"].toBool() != ui.senderAutoColor->isChecked()) return true;
   if(settings["NewMsgMarkerFG"].value<QColor>() != ui.newMsgMarkerFG->color()) return true;
 
   /*
index bc55f95..453aae4 100644 (file)
@@ -6,7 +6,7 @@
     <x>0</x>
     <y>0</y>
     <width>516</width>
-    <height>401</height>
+    <height>427</height>
    </rect>
   </property>
   <property name="sizePolicy" >
@@ -22,7 +22,7 @@
    <item>
     <widget class="QTabWidget" name="tabWidget" >
      <property name="currentIndex" >
-      <number>0</number>
+      <number>1</number>
      </property>
      <widget class="QWidget" name="bufferview" >
       <attribute name="title" >
           </sizepolicy>
          </property>
          <property name="currentIndex" >
-          <number>0</number>
+          <number>2</number>
          </property>
          <widget class="QWidget" name="tab" >
           <attribute name="title" >
            <string>Server Activity</string>
           </attribute>
           <layout class="QGridLayout" >
+           <item row="6" column="1" >
+            <spacer>
+             <property name="orientation" >
+              <enum>Qt::Vertical</enum>
+             </property>
+             <property name="sizeHint" stdset="0" >
+              <size>
+               <width>20</width>
+               <height>40</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
            <item row="0" column="1" >
             <widget class="QLabel" name="label_44" >
              <property name="text" >
              </property>
             </widget>
            </item>
-           <item row="6" column="1" >
-            <spacer>
-             <property name="orientation" >
-              <enum>Qt::Vertical</enum>
-             </property>
-             <property name="sizeHint" stdset="0" >
-              <size>
-               <width>20</width>
-               <height>40</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
           </layout>
-          <zorder>label_44</zorder>
-          <zorder>label_45</zorder>
-          <zorder>label_7</zorder>
-          <zorder>label_20</zorder>
-          <zorder>errorMessageFG</zorder>
-          <zorder>errorMessageBG</zorder>
-          <zorder>errorMessageUseBG</zorder>
-          <zorder>label_18</zorder>
-          <zorder>noticeMessageFG</zorder>
-          <zorder>noticeMessageBG</zorder>
-          <zorder>noticeMessageUseBG</zorder>
-          <zorder>label_17</zorder>
-          <zorder>plainMessageFG</zorder>
-          <zorder>plainMessageBG</zorder>
-          <zorder>plainMessageUseBG</zorder>
-          <zorder>label_19</zorder>
-          <zorder>serverMessageFG</zorder>
-          <zorder>serverMessageBG</zorder>
-          <zorder>serverMessageUseBG</zorder>
-          <zorder>label_10</zorder>
-          <zorder>highlightColor</zorder>
-          <zorder>groupBox_5</zorder>
          </widget>
          <widget class="QWidget" name="tab_2" >
           <attribute name="title" >
              </property>
             </widget>
            </item>
-           <item row="2" column="1" >
-            <widget class="ColorButton" name="senderFG" >
-             <property name="text" >
-              <string/>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="2" >
-            <widget class="ColorButton" name="senderBG" >
-             <property name="enabled" >
-              <bool>false</bool>
-             </property>
-             <property name="text" >
-              <string/>
-             </property>
-             <property name="NotInUse" stdset="0" >
-              <bool>true</bool>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="3" >
-            <widget class="QCheckBox" name="senderUseBG" >
-             <property name="sizePolicy" >
-              <sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="layoutDirection" >
-              <enum>Qt::LeftToRight</enum>
-             </property>
-             <property name="text" >
-              <string/>
-             </property>
-             <property name="NotInUse" stdset="0" >
-              <bool>true</bool>
-             </property>
-            </widget>
-           </item>
-           <item row="3" column="0" >
+           <item row="5" column="0" >
             <widget class="QLabel" name="label_30" >
              <property name="text" >
               <string>Nick:</string>
              </property>
             </widget>
            </item>
-           <item row="3" column="1" >
+           <item row="5" column="1" >
             <widget class="ColorButton" name="nickFG" >
              <property name="text" >
               <string/>
              </property>
             </widget>
            </item>
-           <item row="3" column="2" >
+           <item row="5" column="2" >
             <widget class="ColorButton" name="nickBG" >
              <property name="enabled" >
               <bool>false</bool>
              </property>
             </widget>
            </item>
-           <item row="3" column="3" >
+           <item row="5" column="3" >
             <widget class="QCheckBox" name="nickUseBG" >
              <property name="sizePolicy" >
               <sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
              </property>
             </widget>
            </item>
-           <item row="4" column="0" >
+           <item row="6" column="0" >
             <widget class="QLabel" name="label_31" >
              <property name="text" >
               <string>Hostmask:</string>
              </property>
             </widget>
            </item>
-           <item row="4" column="1" >
+           <item row="6" column="1" >
             <widget class="ColorButton" name="hostmaskFG" >
              <property name="text" >
               <string/>
              </property>
             </widget>
            </item>
-           <item row="4" column="2" >
+           <item row="6" column="2" >
             <widget class="ColorButton" name="hostmaskBG" >
              <property name="enabled" >
               <bool>false</bool>
              </property>
             </widget>
            </item>
-           <item row="4" column="3" >
+           <item row="6" column="3" >
             <widget class="QCheckBox" name="hostmaskUseBG" >
              <property name="sizePolicy" >
               <sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
              </property>
             </widget>
            </item>
-           <item row="5" column="0" >
+           <item row="7" column="0" >
             <widget class="QLabel" name="label_32" >
              <property name="text" >
               <string>Channelname:</string>
              </property>
             </widget>
            </item>
-           <item row="5" column="1" >
+           <item row="7" column="1" >
             <widget class="ColorButton" name="channelnameFG" >
              <property name="text" >
               <string/>
              </property>
             </widget>
            </item>
-           <item row="5" column="2" >
+           <item row="7" column="2" >
             <widget class="ColorButton" name="channelnameBG" >
              <property name="enabled" >
               <bool>false</bool>
              </property>
             </widget>
            </item>
-           <item row="5" column="3" >
+           <item row="7" column="3" >
             <widget class="QCheckBox" name="channelnameUseBG" >
              <property name="sizePolicy" >
               <sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
              </property>
             </widget>
            </item>
-           <item row="6" column="0" >
+           <item row="8" column="0" >
             <widget class="QLabel" name="label_33" >
              <property name="text" >
               <string>Mode flags:</string>
              </property>
             </widget>
            </item>
-           <item row="6" column="1" >
+           <item row="8" column="1" >
             <widget class="ColorButton" name="modeFlagsFG" >
              <property name="text" >
               <string/>
              </property>
             </widget>
            </item>
-           <item row="6" column="2" >
+           <item row="8" column="2" >
             <widget class="ColorButton" name="modeFlagsBG" >
              <property name="enabled" >
               <bool>false</bool>
              </property>
             </widget>
            </item>
-           <item row="6" column="3" >
+           <item row="8" column="3" >
             <widget class="QCheckBox" name="modeFlagsUseBG" >
              <property name="sizePolicy" >
               <sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
              </property>
             </widget>
            </item>
-           <item row="7" column="0" >
+           <item row="9" column="0" >
             <widget class="QLabel" name="label_34" >
              <property name="text" >
               <string>Url:</string>
              </property>
             </widget>
            </item>
-           <item row="7" column="1" >
+           <item row="9" column="1" >
             <widget class="ColorButton" name="urlFG" >
              <property name="text" >
               <string/>
              </property>
             </widget>
            </item>
-           <item row="7" column="2" >
+           <item row="9" column="2" >
             <widget class="ColorButton" name="urlBG" >
              <property name="enabled" >
               <bool>false</bool>
              </property>
             </widget>
            </item>
-           <item row="7" column="3" >
+           <item row="9" column="3" >
             <widget class="QCheckBox" name="urlUseBG" >
              <property name="sizePolicy" >
               <sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
              </property>
             </widget>
            </item>
-           <item row="8" column="0" >
+           <item row="10" column="0" >
             <widget class="QLabel" name="label_11" >
              <property name="text" >
               <string>New Message Marker:</string>
              </property>
             </widget>
            </item>
-           <item row="8" column="1" >
+           <item row="10" column="1" >
             <widget class="ColorButton" name="newMsgMarkerFG" >
              <property name="text" >
               <string/>
              </property>
             </widget>
            </item>
+           <item row="2" column="1" colspan="3" >
+            <widget class="QFrame" name="senderFrame" >
+             <property name="frameShape" >
+              <enum>QFrame::NoFrame</enum>
+             </property>
+             <property name="frameShadow" >
+              <enum>QFrame::Plain</enum>
+             </property>
+             <layout class="QGridLayout" name="_2" >
+              <property name="leftMargin" >
+               <number>0</number>
+              </property>
+              <property name="topMargin" >
+               <number>0</number>
+              </property>
+              <property name="rightMargin" >
+               <number>18</number>
+              </property>
+              <property name="bottomMargin" >
+               <number>0</number>
+              </property>
+              <item row="0" column="0" >
+               <widget class="ColorButton" name="senderFG" >
+                <property name="text" >
+                 <string/>
+                </property>
+                <property name="flat" >
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="0" column="1" >
+               <widget class="ColorButton" name="senderBG" >
+                <property name="enabled" >
+                 <bool>false</bool>
+                </property>
+                <property name="text" >
+                 <string/>
+                </property>
+               </widget>
+              </item>
+              <item row="0" column="2" >
+               <widget class="QCheckBox" name="senderUseBG" >
+                <property name="sizePolicy" >
+                 <sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="layoutDirection" >
+                 <enum>Qt::LeftToRight</enum>
+                </property>
+                <property name="text" >
+                 <string/>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </widget>
+           </item>
+           <item row="3" column="1" >
+            <widget class="QCheckBox" name="senderAutoColor" >
+             <property name="text" >
+              <string>Enable</string>
+             </property>
+            </widget>
+           </item>
+           <item row="3" column="0" >
+            <widget class="QLabel" name="label_12" >
+             <property name="text" >
+              <string>Sender auto coloring:</string>
+             </property>
+            </widget>
+           </item>
           </layout>
          </widget>
         </widget>
     </hint>
    </hints>
   </connection>
-  <connection>
-   <sender>senderUseBG</sender>
-   <signal>clicked(bool)</signal>
-   <receiver>senderBG</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>372</x>
-     <y>157</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>273</x>
-     <y>157</y>
-    </hint>
-   </hints>
-  </connection>
   <connection>
    <sender>nickUseBG</sender>
    <signal>clicked(bool)</signal>
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>senderUseBG</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>senderBG</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>463</x>
+     <y>143</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>376</x>
+     <y>143</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>senderAutoColor</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>senderFrame</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>232</x>
+     <y>173</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>329</x>
+     <y>143</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
 </ui>
index f610e62..bd3f247 100644 (file)
@@ -48,6 +48,9 @@ UiStyle::UiStyle(const QString &settingsKey) : _settingsKey(settingsKey) {
     _customFormats[type] = s.customFormat(type);
   }
 
+  // Check for the sender auto coloring option
+  _senderAutoColor = s.value("Flags/senderAutoColor", QVariant(true)).toBool();  
+
   // Now initialize the mapping between FormatCodes and FormatTypes...
   _formatCodes["%O"] = None;
   _formatCodes["%B"] = Bold;
@@ -127,11 +130,17 @@ void UiStyle::setFormat(FormatType ftype, QTextCharFormat fmt, Settings::Mode mo
   _cachedFontMetrics.clear();
 }
 
+void UiStyle::setSenderAutoColor( bool state ) {
+  _senderAutoColor = state;
+  UiStyleSettings s(_settingsKey);
+  s.setValue("Flags/senderAutoColor", QVariant(state));
+}
+
 QTextCharFormat UiStyle::format(FormatType ftype, Settings::Mode mode) const {
-  // TODO: implement setting for nick autocoloring and make a check for it here
-  if ( (ftype & 0x00000fff) == Sender 
-  {
-    // If it is not enabled just set ftype to Sender and go on
+  // Check for enabled sender auto coloring
+  if ( (ftype & 0x00000fff) == Sender && !_senderAutoColor ) {
+    // Just use the default sender style if auto coloring is disabled
+    ftype = Sender;
   }
 
   if(mode == Settings::Custom && _customFormats.contains(ftype)) return _customFormats.value(ftype);
@@ -404,11 +413,11 @@ UiStyle::FormatType UiStyle::StyledMessage::senderFormat() const {
   quint16 hash;
   switch(type()) {
     case Message::Plain:
-    // To produce random like but stable nick colorings some sort of hashing should work best.
-    // In this case we just use the qt function qChecksum which produces a
-    // CRC16 hash. This should be fast and 16 bits are more than enough.
-    hash = qChecksum(_sender.toAscii().data(), _sender.toAscii().size());
-    return (UiStyle::FormatType)((((hash % 21) + 1) << 24) + 0x200);
+      // To produce random like but stable nick colorings some sort of hashing should work best.
+      // In this case we just use the qt function qChecksum which produces a
+      // CRC16 hash. This should be fast and 16 bits are more than enough.
+      hash = qChecksum(_sender.toAscii().data(), _sender.toAscii().size());
+      return (UiStyle::FormatType)((((hash % 21) + 1) << 24) + 0x200);
     case Message::Notice:
       return UiStyle::NoticeMsg; break;
     case Message::Server:
index 14d60a1..69947fc 100644 (file)
@@ -152,6 +152,7 @@ public:
   QString mircToInternal(const QString &) const;
 
   void setFormat(FormatType, QTextCharFormat, Settings::Mode mode/* = Settings::Custom*/);
+    void setSenderAutoColor(bool state);
   QTextCharFormat format(FormatType, Settings::Mode mode = Settings::Custom) const;
   QTextCharFormat mergedFormat(quint32 formatType);
   QFontMetricsF *fontMetrics(quint32 formatType);
@@ -164,6 +165,7 @@ public:
   QList<QTextLayout::FormatRange> toTextLayoutList(const FormatList &, int textLength);
 
 protected:
+  bool _senderAutoColor;
 private:
   QFont _defaultFont;
   QTextCharFormat _defaultPlainFormat;