Disable unused color settings in ColorSettingsPage
[quassel.git] / src / qtui / settingspages / colorsettingspage.cpp
1 /***************************************************************************
2  *   Copyright (C) 2005-08 by the Quassel IRC Team                         *
3  *   devel@quassel-irc.org                                                 *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) version 3.                                           *
9  *                                                                         *
10  *   This program is distributed in the hope that it will be useful,       *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with this program; if not, write to the                         *
17  *   Free Software Foundation, Inc.,                                       *
18  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19  ***************************************************************************/
20
21 #include "colorsettingspage.h"
22
23 #include "qtui.h"
24 #include "qtuisettings.h"
25 #include "colorbutton.h"
26
27 #include <QColorDialog>
28 #include <QPainter>
29
30 // #define PHONDEV
31
32 ColorSettingsPage::ColorSettingsPage(QWidget *parent)
33   : SettingsPage(tr("Appearance"), tr("Color settings"), parent) {
34   ui.setupUi(this);
35
36   mapper = new QSignalMapper(this);
37   //Bufferview tab:
38   connect(ui.inactiveActivityFG, SIGNAL(clicked()), mapper, SLOT(map()));
39   connect(ui.inactiveActivityBG, SIGNAL(clicked()), mapper, SLOT(map()));
40   connect(ui.inactiveActivityUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
41   connect(ui.noActivityFG, SIGNAL(clicked()), mapper, SLOT(map()));
42   connect(ui.noActivityBG, SIGNAL(clicked()), mapper, SLOT(map()));
43   connect(ui.noActivityUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
44   connect(ui.highlightActivityFG, SIGNAL(clicked()), mapper, SLOT(map()));
45   connect(ui.highlightActivityBG, SIGNAL(clicked()), mapper, SLOT(map()));
46   connect(ui.highlightActivityUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
47   connect(ui.newMessageActivityFG, SIGNAL(clicked()), mapper, SLOT(map()));
48   connect(ui.newMessageActivityBG, SIGNAL(clicked()), mapper, SLOT(map()));
49   connect(ui.newMessageActivityUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
50   connect(ui.otherActivityFG, SIGNAL(clicked()), mapper, SLOT(map()));
51   connect(ui.otherActivityBG, SIGNAL(clicked()), mapper, SLOT(map()));
52   connect(ui.otherActivityUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
53
54   mapper->setMapping(ui.inactiveActivityFG, ui.inactiveActivityFG);
55   mapper->setMapping(ui.inactiveActivityBG, ui.inactiveActivityBG);
56   mapper->setMapping(ui.highlightActivityFG, ui.highlightActivityFG);
57   mapper->setMapping(ui.highlightActivityBG, ui.highlightActivityBG);
58   mapper->setMapping(ui.newMessageActivityFG, ui.newMessageActivityFG);
59   mapper->setMapping(ui.newMessageActivityBG, ui.newMessageActivityBG);
60   mapper->setMapping(ui.noActivityFG, ui.noActivityFG);
61   mapper->setMapping(ui.noActivityBG, ui.noActivityBG);
62   mapper->setMapping(ui.otherActivityFG, ui.otherActivityFG);
63   mapper->setMapping(ui.otherActivityBG, ui.otherActivityBG);
64
65
66   //Chatview tab:
67   connect(ui.errorMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
68   connect(ui.errorMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
69   connect(ui.errorMessageUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
70   connect(ui.noticeMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
71   connect(ui.noticeMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
72   connect(ui.noticeMessageUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
73   connect(ui.plainMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
74   connect(ui.plainMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
75   connect(ui.plainMessageUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
76   connect(ui.serverMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
77   connect(ui.serverMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
78   connect(ui.serverMessageUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
79   connect(ui.actionMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
80   connect(ui.actionMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
81   connect(ui.actionMessageUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
82   connect(ui.joinMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
83   connect(ui.joinMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
84   connect(ui.joinMessageUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
85   connect(ui.kickMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
86   connect(ui.kickMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
87   connect(ui.kickMessageUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
88   connect(ui.modeMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
89   connect(ui.modeMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
90   connect(ui.modeMessageUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
91   connect(ui.partMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
92   connect(ui.partMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
93   connect(ui.partMessageUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
94   connect(ui.quitMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
95   connect(ui.quitMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
96   connect(ui.quitMessageUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
97   connect(ui.renameMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
98   connect(ui.renameMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
99   connect(ui.renameMessageUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
100   connect(ui.highlightColor, SIGNAL(clicked()), mapper, SLOT(map()));
101
102   mapper->setMapping(ui.errorMessageFG, ui.errorMessageFG);
103   mapper->setMapping(ui.errorMessageBG, ui.errorMessageBG);
104   mapper->setMapping(ui.noticeMessageFG, ui.noticeMessageFG);
105   mapper->setMapping(ui.noticeMessageBG, ui.noticeMessageBG);
106   mapper->setMapping(ui.plainMessageFG, ui.plainMessageFG);
107   mapper->setMapping(ui.plainMessageBG, ui.plainMessageBG);
108   mapper->setMapping(ui.serverMessageFG, ui.serverMessageFG);
109   mapper->setMapping(ui.serverMessageBG, ui.serverMessageBG);
110   mapper->setMapping(ui.actionMessageFG, ui.actionMessageFG);
111   mapper->setMapping(ui.actionMessageBG, ui.actionMessageBG);
112   mapper->setMapping(ui.joinMessageFG, ui.joinMessageFG);
113   mapper->setMapping(ui.joinMessageBG, ui.joinMessageBG);
114   mapper->setMapping(ui.kickMessageFG, ui.kickMessageFG);
115   mapper->setMapping(ui.kickMessageBG, ui.kickMessageBG);
116   mapper->setMapping(ui.modeMessageFG, ui.modeMessageFG);
117   mapper->setMapping(ui.modeMessageBG, ui.modeMessageBG);
118   mapper->setMapping(ui.partMessageFG, ui.partMessageFG);
119   mapper->setMapping(ui.partMessageBG, ui.partMessageBG);
120   mapper->setMapping(ui.quitMessageFG, ui.quitMessageFG);
121   mapper->setMapping(ui.quitMessageBG, ui.quitMessageBG);
122   mapper->setMapping(ui.renameMessageFG, ui.renameMessageFG);
123   mapper->setMapping(ui.renameMessageBG, ui.renameMessageBG);
124   mapper->setMapping(ui.highlightColor, ui.highlightColor);
125
126   //Message Layout tab:
127   connect(ui.timestampFG, SIGNAL(clicked()), mapper, SLOT(map()));
128   connect(ui.timestampBG, SIGNAL(clicked()), mapper, SLOT(map()));
129   connect(ui.timestampUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
130   connect(ui.senderFG, SIGNAL(clicked()), mapper, SLOT(map()));
131   connect(ui.senderBG, SIGNAL(clicked()), mapper, SLOT(map()));
132   connect(ui.senderUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
133   connect(ui.nickFG, SIGNAL(clicked()), mapper, SLOT(map()));
134   connect(ui.nickBG, SIGNAL(clicked()), mapper, SLOT(map()));
135   connect(ui.nickUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
136   connect(ui.hostmaskFG, SIGNAL(clicked()), mapper, SLOT(map()));
137   connect(ui.hostmaskBG, SIGNAL(clicked()), mapper, SLOT(map()));
138   connect(ui.hostmaskUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
139   connect(ui.channelnameFG, SIGNAL(clicked()), mapper, SLOT(map()));
140   connect(ui.channelnameBG, SIGNAL(clicked()), mapper, SLOT(map()));
141   connect(ui.channelnameUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
142   connect(ui.modeFlagsFG, SIGNAL(clicked()), mapper, SLOT(map()));
143   connect(ui.modeFlagsBG, SIGNAL(clicked()), mapper, SLOT(map()));
144   connect(ui.modeFlagsUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
145   connect(ui.urlFG, SIGNAL(clicked()), mapper, SLOT(map()));
146   connect(ui.urlBG, SIGNAL(clicked()), mapper, SLOT(map()));
147   connect(ui.urlUseBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
148
149   mapper->setMapping(ui.timestampFG, ui.timestampFG);
150   mapper->setMapping(ui.timestampBG, ui.timestampBG);
151   mapper->setMapping(ui.senderFG, ui.senderFG);
152   mapper->setMapping(ui.senderBG, ui.senderBG);
153   mapper->setMapping(ui.nickFG, ui.nickFG);
154   mapper->setMapping(ui.nickBG, ui.nickBG);
155   mapper->setMapping(ui.hostmaskFG, ui.hostmaskFG);
156   mapper->setMapping(ui.hostmaskBG, ui.hostmaskBG);
157   mapper->setMapping(ui.channelnameFG, ui.channelnameFG);
158   mapper->setMapping(ui.channelnameBG, ui.channelnameBG);
159   mapper->setMapping(ui.modeFlagsFG, ui.modeFlagsFG);
160   mapper->setMapping(ui.modeFlagsBG, ui.modeFlagsBG);
161   mapper->setMapping(ui.urlFG, ui.urlFG);
162   mapper->setMapping(ui.urlBG, ui.urlBG);
163
164   //Mirc Color Codes tab:
165   connect(ui.color0, SIGNAL(clicked()), mapper, SLOT(map()));
166   connect(ui.color1, SIGNAL(clicked()), mapper, SLOT(map()));
167   connect(ui.color2, SIGNAL(clicked()), mapper, SLOT(map()));
168   connect(ui.color3, SIGNAL(clicked()), mapper, SLOT(map()));
169   connect(ui.color4, SIGNAL(clicked()), mapper, SLOT(map()));
170   connect(ui.color5, SIGNAL(clicked()), mapper, SLOT(map()));
171   connect(ui.color6, SIGNAL(clicked()), mapper, SLOT(map()));
172   connect(ui.color7, SIGNAL(clicked()), mapper, SLOT(map()));
173   connect(ui.color8, SIGNAL(clicked()), mapper, SLOT(map()));
174   connect(ui.color9, SIGNAL(clicked()), mapper, SLOT(map()));
175   connect(ui.color10, SIGNAL(clicked()), mapper, SLOT(map()));
176   connect(ui.color11, SIGNAL(clicked()), mapper, SLOT(map()));
177   connect(ui.color12, SIGNAL(clicked()), mapper, SLOT(map()));
178   connect(ui.color13, SIGNAL(clicked()), mapper, SLOT(map()));
179   connect(ui.color14, SIGNAL(clicked()), mapper, SLOT(map()));
180   connect(ui.color15, SIGNAL(clicked()), mapper, SLOT(map()));
181
182   mapper->setMapping(ui.color0, ui.color0);
183   mapper->setMapping(ui.color1, ui.color1);
184   mapper->setMapping(ui.color2, ui.color2);
185   mapper->setMapping(ui.color3, ui.color3);
186   mapper->setMapping(ui.color4, ui.color4);
187   mapper->setMapping(ui.color5, ui.color5);
188   mapper->setMapping(ui.color6, ui.color6);
189   mapper->setMapping(ui.color7, ui.color7);
190   mapper->setMapping(ui.color8, ui.color8);
191   mapper->setMapping(ui.color9, ui.color9);
192   mapper->setMapping(ui.color10, ui.color10);
193   mapper->setMapping(ui.color11, ui.color11);
194   mapper->setMapping(ui.color12, ui.color12);
195   mapper->setMapping(ui.color13, ui.color13);
196   mapper->setMapping(ui.color14, ui.color14);
197   mapper->setMapping(ui.color15, ui.color15);
198
199   //NickView tab:
200   connect(ui.onlineStatusFG, SIGNAL(clicked()), mapper, SLOT(map()));
201   connect(ui.onlineStatusBG, SIGNAL(clicked()), mapper, SLOT(map()));
202   connect(ui.onlineStatusBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
203   connect(ui.awayStatusFG, SIGNAL(clicked()), mapper, SLOT(map()));
204   connect(ui.awayStatusBG, SIGNAL(clicked()), mapper, SLOT(map()));
205   connect(ui.awayStatusBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
206
207   mapper->setMapping(ui.onlineStatusFG, ui.onlineStatusFG);
208   mapper->setMapping(ui.onlineStatusBG, ui.onlineStatusBG);
209   mapper->setMapping(ui.awayStatusFG, ui.awayStatusFG);
210   mapper->setMapping(ui.awayStatusBG, ui.awayStatusBG);
211
212   connect(mapper, SIGNAL(mapped(QWidget *)), this, SLOT(chooseColor(QWidget *)));
213
214   //disable unused buttons:
215 #ifndef PHONDEV
216   ui.inactiveActivityUseBG->setEnabled(false);
217   ui.noActivityUseBG->setEnabled(false);
218   ui.highlightActivityUseBG->setEnabled(false);
219   ui.newMessageActivityUseBG->setEnabled(false);
220   ui.otherActivityUseBG->setEnabled(false);
221
222   ui.nickFG->setEnabled(false);
223   ui.nickUseBG->setEnabled(false);
224   ui.hostmaskFG->setEnabled(false);
225   ui.hostmaskUseBG->setEnabled(false);
226   ui.channelnameFG->setEnabled(false);
227   ui.channelnameUseBG->setEnabled(false);
228   ui.modeFlagsFG->setEnabled(false);
229   ui.modeFlagsUseBG->setEnabled(false);
230   ui.urlFG->setEnabled(false);
231   ui.urlUseBG->setEnabled(false);
232
233   ui.onlineStatusUseBG->setEnabled(false);
234   ui.awayStatusUseBG->setEnabled(false);
235 #endif
236 }
237
238 bool ColorSettingsPage::hasDefaults() const {
239   return true;
240 }
241
242 void ColorSettingsPage::defaults() {
243   defaultBufferview();
244   defaultServerActivity();
245   defaultUserActivity();
246   defaultMessage();
247   defaultMircColorCodes();
248   defaultNickview();
249
250   widgetHasChanged();
251   bufferviewPreview();
252   chatviewPreview();
253 }
254
255 void ColorSettingsPage::defaultBufferview() {
256   ui.inactiveActivityFG->setColor(QColor(Qt::gray));
257   ui.inactiveActivityBG->setColor(QColor(Qt::white));
258   ui.inactiveActivityBG->setEnabled(false);
259   ui.inactiveActivityUseBG->setChecked(false);
260   ui.noActivityFG->setColor(QColor(Qt::black));
261   ui.noActivityBG->setColor(QColor(Qt::white));
262   ui.noActivityBG->setEnabled(false);
263   ui.noActivityUseBG->setChecked(false);
264   ui.highlightActivityFG->setColor(QColor(Qt::magenta));
265   ui.highlightActivityBG->setColor(QColor(Qt::white));
266   ui.highlightActivityBG->setEnabled(false);
267   ui.highlightActivityUseBG->setChecked(false);
268   ui.newMessageActivityFG->setColor(QColor(Qt::green));
269   ui.newMessageActivityBG->setColor(QColor(Qt::white));
270   ui.newMessageActivityBG->setEnabled(false);
271   ui.newMessageActivityUseBG->setChecked(false);
272   ui.otherActivityFG->setColor(QColor(Qt::darkGreen));
273   ui.otherActivityBG->setColor(QColor(Qt::white));
274   ui.otherActivityBG->setEnabled(false);
275   ui.otherActivityUseBG->setChecked(false);
276 }
277
278 void ColorSettingsPage::defaultServerActivity() {
279   ui.errorMessageFG->setColor(QtUi::style()->format(UiStyle::ErrorMsg, Settings::Default).foreground().color());
280   ui.errorMessageBG->setColor(QColor("white"));
281   ui.errorMessageBG->setEnabled(false);
282   ui.errorMessageUseBG->setChecked(false);
283   ui.noticeMessageFG->setColor(QtUi::style()->format(UiStyle::NoticeMsg, Settings::Default).foreground().color());
284   ui.noticeMessageBG->setColor(QColor("white"));
285   ui.noticeMessageBG->setEnabled(false);
286   ui.noticeMessageUseBG->setChecked(false);
287   ui.plainMessageFG->setColor(QtUi::style()->format(UiStyle::PlainMsg, Settings::Default).foreground().color());
288   ui.plainMessageBG->setColor(QColor("white"));
289   ui.plainMessageBG->setEnabled(false);
290   ui.plainMessageUseBG->setChecked(false);
291   ui.serverMessageFG->setColor(QtUi::style()->format(UiStyle::ServerMsg, Settings::Default).foreground().color());
292   ui.serverMessageBG->setColor(QColor("white"));
293   ui.serverMessageBG->setEnabled(false);
294   ui.serverMessageUseBG->setChecked(false);
295   ui.highlightColor->setColor(QColor("lightcoral"));
296 }
297
298 void ColorSettingsPage::defaultUserActivity() {
299   ui.actionMessageFG->setColor(QtUi::style()->format(UiStyle::ActionMsg, Settings::Default).foreground().color());
300   ui.actionMessageBG->setColor(QColor("white"));
301   ui.actionMessageBG->setEnabled(false);
302   ui.actionMessageUseBG->setChecked(false);
303   ui.joinMessageFG->setColor(QtUi::style()->format(UiStyle::JoinMsg, Settings::Default).foreground().color());
304   ui.joinMessageBG->setColor(QColor("white"));
305   ui.joinMessageBG->setEnabled(false);
306   ui.joinMessageUseBG->setChecked(false);
307   ui.kickMessageFG->setColor(QtUi::style()->format(UiStyle::KickMsg, Settings::Default).foreground().color());
308   ui.kickMessageBG->setColor(QColor("white"));
309   ui.kickMessageBG->setEnabled(false);
310   ui.kickMessageUseBG->setChecked(false);
311   ui.modeMessageFG->setColor(QtUi::style()->format(UiStyle::ModeMsg, Settings::Default).foreground().color());
312   ui.modeMessageBG->setColor(QColor("white"));
313   ui.modeMessageBG->setEnabled(false);
314   ui.modeMessageUseBG->setChecked(false);
315   ui.partMessageFG->setColor(QtUi::style()->format(UiStyle::PartMsg, Settings::Default).foreground().color());
316   ui.partMessageBG->setColor(QColor("white"));
317   ui.partMessageBG->setEnabled(false);
318   ui.partMessageUseBG->setChecked(false);
319   ui.quitMessageFG->setColor(QtUi::style()->format(UiStyle::QuitMsg, Settings::Default).foreground().color());
320   ui.quitMessageBG->setColor(QColor("white"));
321   ui.quitMessageBG->setEnabled(false);
322   ui.quitMessageUseBG->setChecked(false);
323   ui.renameMessageFG->setColor(QtUi::style()->format(UiStyle::RenameMsg, Settings::Default).foreground().color());
324   ui.renameMessageBG->setColor(QColor("white"));
325   ui.renameMessageBG->setEnabled(false);
326   ui.renameMessageUseBG->setChecked(false);
327 }
328
329 void ColorSettingsPage::defaultMessage() {
330   ui.timestampFG->setColor(QtUi::style()->format(UiStyle::Timestamp, Settings::Default).foreground().color());
331   ui.timestampBG->setColor(QColor("white"));
332   ui.timestampBG->setEnabled(false);
333   ui.timestampUseBG->setChecked(false);
334   ui.senderFG->setColor(QtUi::style()->format(UiStyle::Sender, Settings::Default).foreground().color());
335   ui.senderBG->setColor(QColor("white"));
336   ui.senderBG->setEnabled(false);
337   ui.senderUseBG->setChecked(false);
338
339   /*
340   ui.nickFG->setColor(QColor("black"));
341   ui.nickBG->setColor(QColor("white"));
342   ui.nickBG->setEnabled(false);
343   ui.nickUseBG->setChecked(false);
344   ui.hostmaskFG->setColor(QColor("black"));
345   ui.hostmaskBG->setColor(QColor("white"));
346   ui.hostmaskBG->setEnabled(false);
347   ui.hostmaskUseBG->setChecked(false);
348   ui.channelnameFG->setColor(QColor("black"));
349   ui.channelnameBG->setColor(QColor("white"));
350   ui.channelnameBG->setEnabled(false);
351   ui.channelnameUseBG->setChecked(false);
352   ui.modeFlagsFG->setColor(QColor("black"));
353   ui.modeFlagsBG->setColor(QColor("white"));
354   ui.modeFlagsBG->setEnabled(false);
355   ui.modeFlagsUseBG->setChecked(false);
356   ui.urlFG->setColor(QColor("black"));
357   ui.urlBG->setColor(QColor("white"));
358   ui.urlBG->setEnabled(false);
359   ui.urlUseBG->setChecked(false);
360   */
361 }
362
363 void ColorSettingsPage::defaultMircColorCodes() {
364   ui.color0->setColor(QtUi::style()->format(UiStyle::FgCol00, Settings::Default).foreground().color());
365   ui.color1->setColor(QtUi::style()->format(UiStyle::FgCol01, Settings::Default).foreground().color());
366   ui.color2->setColor(QtUi::style()->format(UiStyle::FgCol02, Settings::Default).foreground().color());
367   ui.color3->setColor(QtUi::style()->format(UiStyle::FgCol03, Settings::Default).foreground().color());
368   ui.color4->setColor(QtUi::style()->format(UiStyle::FgCol04, Settings::Default).foreground().color());
369   ui.color5->setColor(QtUi::style()->format(UiStyle::FgCol05, Settings::Default).foreground().color());
370   ui.color6->setColor(QtUi::style()->format(UiStyle::FgCol06, Settings::Default).foreground().color());
371   ui.color7->setColor(QtUi::style()->format(UiStyle::FgCol07, Settings::Default).foreground().color());
372   ui.color8->setColor(QtUi::style()->format(UiStyle::FgCol08, Settings::Default).foreground().color());
373   ui.color9->setColor(QtUi::style()->format(UiStyle::FgCol09, Settings::Default).foreground().color());
374   ui.color10->setColor(QtUi::style()->format(UiStyle::FgCol10, Settings::Default).foreground().color());
375   ui.color11->setColor(QtUi::style()->format(UiStyle::FgCol11, Settings::Default).foreground().color());
376   ui.color12->setColor(QtUi::style()->format(UiStyle::FgCol12, Settings::Default).foreground().color());
377   ui.color13->setColor(QtUi::style()->format(UiStyle::FgCol13, Settings::Default).foreground().color());
378   ui.color14->setColor(QtUi::style()->format(UiStyle::FgCol14, Settings::Default).foreground().color());
379   ui.color15->setColor(QtUi::style()->format(UiStyle::FgCol15, Settings::Default).foreground().color());
380 }
381
382 void ColorSettingsPage::defaultNickview() {
383   ui.onlineStatusFG->setColor(QColor(Qt::black));
384   ui.onlineStatusBG->setColor(QColor("white"));
385   ui.onlineStatusBG->setEnabled(false);
386   ui.onlineStatusUseBG->setChecked(false);
387   ui.awayStatusFG->setColor(QColor(Qt::gray));
388   ui.awayStatusBG->setColor(QColor("white"));
389   ui.awayStatusBG->setEnabled(false);
390   ui.awayStatusUseBG->setChecked(false);
391 }
392
393 void ColorSettingsPage::load() {
394   QtUiSettings s("QtUiStyle/Colors");
395   settings["InactiveActivityFG"] = s.value("inactiveActivityFG", QVariant(QColor(Qt::gray)));
396   ui.inactiveActivityFG->setColor(settings["InactiveActivityFG"].value<QColor>());
397   settings["InactiveActivityBG"] = s.value("inactiveActivityBG", QVariant(QColor(Qt::white)));
398   ui.inactiveActivityBG->setColor(settings["InactiveActivityBG"].value<QColor>());
399   settings["InactiveActivityUseBG"] = s.value("inactiveActivityUseBG");
400   ui.inactiveActivityUseBG->setChecked(settings["InactiveActivityUseBG"].toBool());
401
402   settings["NoActivityFG"] = s.value("noActivityFG", QVariant(QColor(Qt::black)));
403   ui.noActivityFG->setColor(settings["NoActivityFG"].value<QColor>());
404   settings["NoActivityBG"] = s.value("noActivityBG", QVariant(QColor(Qt::white)));
405   ui.noActivityBG->setColor(settings["NoActivityBG"].value<QColor>());
406   settings["NoActivityUseBG"] = s.value("noActivityUseBG");
407   ui.noActivityUseBG->setChecked(settings["NoActivityUseBG"].toBool());
408
409   settings["HighlightActivityFG"] = s.value("highlightActivityFG", QVariant(QColor(Qt::magenta)));
410   ui.highlightActivityFG->setColor(settings["HighlightActivityFG"].value<QColor>());
411   settings["HighlightActivityBG"] = s.value("highlightActivityBG", QVariant(QColor(Qt::white)));
412   ui.highlightActivityBG->setColor(settings["HighlightActivityBG"].value<QColor>());
413   settings["HighlightActivityUseBG"] = s.value("highlightActivityUseBG");
414   ui.highlightActivityUseBG->setChecked(settings["HighlightActivityUseBG"].toBool());
415
416   settings["NewMessageActivityFG"] = s.value("newMessageActivityFG", QVariant(QColor(Qt::green)));
417   ui.newMessageActivityFG->setColor(settings["NewMessageActivityFG"].value<QColor>());
418   settings["NewMessageActivityBG"] = s.value("newMessageActivityBG", QVariant(QColor(Qt::white)));
419   ui.newMessageActivityBG->setColor(settings["NewMessageActivityBG"].value<QColor>());
420   settings["NewMessageActivityUseBG"] = s.value("newMessageActivityUseBG");
421   ui.newMessageActivityUseBG->setChecked(settings["NewMessageActivityUseBG"].toBool());
422
423   settings["OtherActivityFG"] = s.value("otherActivityFG", QVariant(QColor(Qt::darkGreen)));
424   ui.otherActivityFG->setColor(settings["OtherActivityFG"].value<QColor>());
425   settings["OtherActivityBG"] = s.value("otherActivityBG", QVariant(QColor(Qt::white)));
426   ui.otherActivityBG->setColor(settings["OtherActivityBG"].value<QColor>());
427   settings["OtherActivityUseBG"] = s.value("otherActivityUseBG");
428   ui.otherActivityUseBG->setChecked(settings["OtherActivityUseBG"].toBool());
429
430   ui.actionMessageFG->setColor(QtUi::style()->format(UiStyle::ActionMsg).foreground().color());
431   ui.errorMessageFG->setColor(QtUi::style()->format(UiStyle::ErrorMsg).foreground().color());
432   ui.joinMessageFG->setColor(QtUi::style()->format(UiStyle::JoinMsg).foreground().color());
433   ui.kickMessageFG->setColor(QtUi::style()->format(UiStyle::KickMsg).foreground().color());
434   ui.modeMessageFG->setColor(QtUi::style()->format(UiStyle::ModeMsg).foreground().color());
435   ui.noticeMessageFG->setColor(QtUi::style()->format(UiStyle::NoticeMsg).foreground().color());
436   ui.partMessageFG->setColor(QtUi::style()->format(UiStyle::PartMsg).foreground().color());
437   ui.plainMessageFG->setColor(QtUi::style()->format(UiStyle::PlainMsg).foreground().color());
438   ui.quitMessageFG->setColor(QtUi::style()->format(UiStyle::QuitMsg).foreground().color());
439   ui.renameMessageFG->setColor(QtUi::style()->format(UiStyle::RenameMsg).foreground().color());
440   ui.serverMessageFG->setColor(QtUi::style()->format(UiStyle::ServerMsg).foreground().color());
441
442   ui.actionMessageBG->setColor(QtUi::style()->format(UiStyle::ActionMsg).background().color());
443   ui.errorMessageBG->setColor(QtUi::style()->format(UiStyle::ErrorMsg).background().color());
444   ui.joinMessageBG->setColor(QtUi::style()->format(UiStyle::JoinMsg).background().color());
445   ui.kickMessageBG->setColor(QtUi::style()->format(UiStyle::KickMsg).background().color());
446   ui.modeMessageBG->setColor(QtUi::style()->format(UiStyle::ModeMsg).background().color());
447   ui.noticeMessageBG->setColor(QtUi::style()->format(UiStyle::NoticeMsg).background().color());
448   ui.partMessageBG->setColor(QtUi::style()->format(UiStyle::PartMsg).background().color());
449   ui.plainMessageBG->setColor(QtUi::style()->format(UiStyle::PlainMsg).background().color());
450   ui.quitMessageBG->setColor(QtUi::style()->format(UiStyle::QuitMsg).background().color());
451   ui.renameMessageBG->setColor(QtUi::style()->format(UiStyle::RenameMsg).background().color());
452   ui.serverMessageBG->setColor(QtUi::style()->format(UiStyle::ServerMsg).background().color());
453
454   // FIXME set to false if appropriate
455   settings["ActionMessageUseBG"] = s.value("actionMessageUseBG", QVariant(false));
456   if(settings["ActionMessageUseBG"].toBool()) {
457     ui.actionMessageUseBG->setChecked(true);
458     ui.actionMessageBG->setEnabled(true);
459   }
460   settings["ErrorMessageUseBG"] = s.value("errorMessageUseBG", QVariant(false));
461   if(settings["ErrorMessageUseBG"].toBool()) {
462     ui.errorMessageUseBG->setChecked(true);
463     ui.errorMessageBG->setEnabled(true);
464   }
465   settings["JoinMessageUseBG"] = s.value("joinMessageUseBG", QVariant(false));
466   if(settings["JoinMessageUseBG"].toBool()) {
467     ui.joinMessageUseBG->setChecked(true);
468     ui.joinMessageBG->setEnabled(true);
469   }
470   settings["KickMessageUseBG"] = s.value("kickMessageUseBG", QVariant(false));
471   if(settings["KickMessageUseBG"].toBool()) {
472     ui.kickMessageUseBG->setChecked(true);
473     ui.kickMessageBG->setEnabled(true);
474   }
475   settings["ModeMessageUseBG"] = s.value("modeMessageUseBG", QVariant(false));
476   if(settings["ModeMessageUseBG"].toBool()) {
477     ui.modeMessageUseBG->setChecked(true);
478     ui.modeMessageBG->setEnabled(true);
479   }
480   settings["NoticeMessageUseBG"] = s.value("noticeMessageUseBG", QVariant(false));
481   if(settings["NoticeMessageUseBG"].toBool()) {
482     ui.noticeMessageUseBG->setChecked(true);
483     ui.noticeMessageBG->setEnabled(true);
484   }
485   settings["PartMessageUseBG"] = s.value("partMessageUseBG", QVariant(false));
486   if(settings["PartMessageUseBG"].toBool()) {
487     ui.partMessageUseBG->setChecked(true);
488     ui.partMessageBG->setEnabled(true);
489   }
490   settings["PlainMessageUseBG"] = s.value("plainMessageUseBG", QVariant(false));
491   if(settings["PlainMessageUseBG"].toBool()) {
492     ui.plainMessageUseBG->setChecked(true);
493     ui.plainMessageBG->setEnabled(true);
494   }
495   settings["QuitMessageUseBG"] = s.value("quitMessageUseBG", QVariant(false));
496   if(settings["QuitMessageUseBG"].toBool()) {
497     ui.quitMessageUseBG->setChecked(true);
498     ui.quitMessageBG->setEnabled(true);
499   }
500   settings["RenameMessageUseBG"] = s.value("renameMessageUseBG", QVariant(false));
501   if(settings["RenameMessageUseBG"].toBool()) {
502     ui.renameMessageUseBG->setChecked(true);
503     ui.renameMessageBG->setEnabled(true);
504   }
505   settings["ServerMessageUseBG"] = s.value("serverMessageUseBG", QVariant(false));
506   if(settings["ServerMessageUseBG"].toBool()) {
507     ui.serverMessageUseBG->setChecked(true);
508     ui.serverMessageBG->setEnabled(true);
509   }
510
511   ui.timestampFG->setColor(QtUi::style()->format(UiStyle::Timestamp).foreground().color());
512   ui.timestampBG->setColor(QtUi::style()->format(UiStyle::Timestamp).background().color());
513   ui.senderFG->setColor(QtUi::style()->format(UiStyle::Sender).foreground().color());
514   ui.senderBG->setColor(QtUi::style()->format(UiStyle::Sender).background().color());
515
516   settings["TimestampUseBG"] = s.value("timestampUseBG", QVariant(false));
517   if(settings["TimestampUseBG"].toBool()) {
518     ui.timestampUseBG->setChecked(true);
519     ui.timestampBG->setEnabled(true);
520   }
521   settings["SenderUseBG"] = s.value("senderUseBG", QVariant(false));
522   if(settings["SenderUseBG"].toBool()) {
523     ui.senderUseBG->setChecked(true);
524     ui.senderBG ->setEnabled(true);
525   }
526
527   ui.nickFG->setColor(QtUi::style()->format(UiStyle::Nick).foreground().color());
528   ui.nickBG->setColor(QtUi::style()->format(UiStyle::Nick).background().color());
529   ui.hostmaskFG->setColor(QtUi::style()->format(UiStyle::Hostmask).foreground().color());
530   ui.hostmaskBG->setColor(QtUi::style()->format(UiStyle::Hostmask).background().color());
531   ui.channelnameFG->setColor(QtUi::style()->format(UiStyle::ChannelName).foreground().color());
532   ui.channelnameBG->setColor(QtUi::style()->format(UiStyle::ChannelName).background().color());
533   ui.modeFlagsFG->setColor(QtUi::style()->format(UiStyle::ModeFlags).foreground().color());
534   ui.modeFlagsBG->setColor(QtUi::style()->format(UiStyle::ModeFlags).background().color());
535   ui.urlFG->setColor(QtUi::style()->format(UiStyle::Url).foreground().color());
536   ui.urlBG->setColor(QtUi::style()->format(UiStyle::Url).background().color());
537
538   settings["HighlightColor"] = s.value("highlightColor", QVariant(QColor("lightcoral")));
539   ui.highlightColor->setColor(settings["HighlightColor"].value<QColor>());
540
541   ui.color0->setColor(QtUi::style()->format(UiStyle::FgCol00).foreground().color());
542   ui.color1->setColor(QtUi::style()->format(UiStyle::FgCol01).foreground().color());
543   ui.color2->setColor(QtUi::style()->format(UiStyle::FgCol02).foreground().color());
544   ui.color3->setColor(QtUi::style()->format(UiStyle::FgCol03).foreground().color());
545   ui.color4->setColor(QtUi::style()->format(UiStyle::FgCol04).foreground().color());
546   ui.color5->setColor(QtUi::style()->format(UiStyle::FgCol05).foreground().color());
547   ui.color6->setColor(QtUi::style()->format(UiStyle::FgCol06).foreground().color());
548   ui.color7->setColor(QtUi::style()->format(UiStyle::FgCol07).foreground().color());
549   ui.color8->setColor(QtUi::style()->format(UiStyle::FgCol08).foreground().color());
550   ui.color9->setColor(QtUi::style()->format(UiStyle::FgCol09).foreground().color());
551   ui.color10->setColor(QtUi::style()->format(UiStyle::FgCol10).foreground().color());
552   ui.color11->setColor(QtUi::style()->format(UiStyle::FgCol11).foreground().color());
553   ui.color12->setColor(QtUi::style()->format(UiStyle::FgCol12).foreground().color());
554   ui.color13->setColor(QtUi::style()->format(UiStyle::FgCol13).foreground().color());
555   ui.color14->setColor(QtUi::style()->format(UiStyle::FgCol14).foreground().color());
556   ui.color15->setColor(QtUi::style()->format(UiStyle::FgCol15).foreground().color());
557
558   settings["OnlineStatusFG"] = s.value("onlineStatusFG", QVariant(QColor(Qt::black)));
559   ui.onlineStatusFG->setColor(settings["OnlineStatusFG"].value<QColor>());
560   settings["OnlineStatusBG"] = s.value("onlineStatusBG", QVariant(QColor(Qt::white)));
561   ui.onlineStatusBG->setColor(settings["OnlineStatusBG"].value<QColor>());
562   settings["OnlineStatusUseBG"] = s.value("onlineStatusUseBG");
563   ui.onlineStatusUseBG->setChecked(settings["OnlineStatusUseBG"].toBool());
564
565   settings["AwayStatusFG"] = s.value("awayStatusFG", QVariant(QColor(Qt::gray)));
566   ui.awayStatusFG->setColor(settings["AwayStatusFG"].value<QColor>());
567   settings["AwayStatusBG"] = s.value("awayStatusBG", QVariant(QColor(Qt::white)));
568   ui.awayStatusBG->setColor(settings["AwayStatusBG"].value<QColor>());
569   settings["AwayStatusUseBG"] = s.value("awayStatusUseBG");
570   ui.awayStatusUseBG->setChecked(settings["AwayStatusUseBG"].toBool());
571
572   setChangedState(false);
573   bufferviewPreview();
574   chatviewPreview();
575 }
576
577 void ColorSettingsPage::save() {
578   QtUiSettings s("QtUiStyle/Colors");
579   s.setValue("noActivityFG", ui.noActivityFG->color());
580   s.setValue("noActivityBG", ui.noActivityBG->color());
581   s.setValue("noActivityUseBG", ui.noActivityUseBG->isChecked());
582   s.setValue("inactiveActivityFG", ui.inactiveActivityFG->color());
583   s.setValue("inactiveActivityBG", ui.inactiveActivityBG->color());
584   s.setValue("inactiveActivityUseBG", ui.inactiveActivityUseBG->isChecked());
585   s.setValue("highlightActivityFG", ui.highlightActivityFG->color());
586   s.setValue("highlightActivityBG", ui.highlightActivityBG->color());
587   s.setValue("highlightActivityUseBG", ui.highlightActivityUseBG->isChecked());
588   s.setValue("newMessageActivityFG", ui.newMessageActivityFG->color());
589   s.setValue("newMessageActivityBG", ui.newMessageActivityBG->color());
590   s.setValue("newMessageActivityUseBG", ui.newMessageActivityUseBG->isChecked());
591   s.setValue("otherActivityFG", ui.otherActivityFG->color());
592   s.setValue("otherActivityBG", ui.otherActivityBG->color());
593   s.setValue("otherActivityUseBG", ui.otherActivityUseBG->isChecked());
594
595   saveColor(UiStyle::ErrorMsg, ui.errorMessageFG->color(), ui.errorMessageBG->color(), ui.errorMessageUseBG->isChecked());
596   s.setValue("errorMessageUseBG", ui.errorMessageUseBG->isChecked());
597   saveColor(UiStyle::NoticeMsg, ui.noticeMessageFG->color(), ui.noticeMessageBG->color(), ui.noticeMessageUseBG->isChecked());
598   s.setValue("noticeMessageUseBG", ui.noticeMessageUseBG->isChecked());
599   saveColor(UiStyle::PlainMsg, ui.plainMessageFG->color(), ui.plainMessageBG->color(), ui.plainMessageUseBG->isChecked());
600   s.setValue("plainMessageUseBG", ui.plainMessageUseBG->isChecked());
601   saveColor(UiStyle::ServerMsg, ui.serverMessageFG->color(), ui.serverMessageBG->color(), ui.serverMessageUseBG->isChecked());
602   s.setValue("serverMessageUseBG", ui.serverMessageUseBG->isChecked());
603   saveColor(UiStyle::ActionMsg, ui.actionMessageFG->color(), ui.actionMessageBG->color(), ui.actionMessageUseBG->isChecked());
604   s.setValue("actionMessageUseBG", ui.actionMessageUseBG->isChecked());
605   saveColor(UiStyle::JoinMsg, ui.joinMessageFG->color(), ui.joinMessageBG->color(), ui.joinMessageUseBG->isChecked());
606   s.setValue("joinMessageUseBG", ui.joinMessageUseBG->isChecked());
607   saveColor(UiStyle::KickMsg, ui.kickMessageFG->color(), ui.kickMessageBG->color(), ui.kickMessageUseBG->isChecked());
608   s.setValue("kickMessageUseBG", ui.kickMessageUseBG->isChecked());
609   saveColor(UiStyle::ModeMsg, ui.modeMessageFG->color(), ui.modeMessageBG->color(), ui.modeMessageUseBG->isChecked());
610   s.setValue("modeMessageUseBG", ui.modeMessageUseBG->isChecked());
611   saveColor(UiStyle::NoticeMsg, ui.noticeMessageFG->color(), ui.noticeMessageBG->color(), ui.noticeMessageUseBG->isChecked());
612   s.setValue("noticeMessageUseBG", ui.noticeMessageUseBG->isChecked());
613   saveColor(UiStyle::PartMsg, ui.partMessageFG->color(), ui.partMessageBG->color(), ui.partMessageUseBG->isChecked());
614   s.setValue("partMessageUseBG", ui.partMessageUseBG->isChecked());
615   saveColor(UiStyle::QuitMsg, ui.quitMessageFG->color(), ui.quitMessageBG->color(), ui.quitMessageUseBG->isChecked());
616   s.setValue("quitMessageUseBG", ui.quitMessageUseBG->isChecked());
617   saveColor(UiStyle::RenameMsg, ui.renameMessageFG->color(), ui.renameMessageBG->color(), ui.renameMessageUseBG->isChecked());
618   s.setValue("renameMessageUseBG", ui.renameMessageUseBG->isChecked());
619
620   s.setValue("highlightColor", ui.highlightColor->color());
621
622   saveColor(UiStyle::Timestamp, ui.timestampFG->color(), ui.timestampBG->color(), ui.timestampUseBG->isChecked());
623   s.setValue("timestampUseBG", ui.timestampUseBG->isChecked());
624   saveColor(UiStyle::Sender, ui.senderFG->color(), ui.senderBG->color(), ui.senderUseBG->isChecked());
625   s.setValue("senderUseBG", ui.senderUseBG->isChecked());
626
627   /*
628   saveColor(UiStyle::Nick, ui.nickFG->color(), ui.nickBG->color(), ui.nickUseBG->isChecked());
629   s.setValue("nickUseBG", ui.nickUseBG->isChecked());
630   saveColor(UiStyle::Hostmask, ui.hostmaskFG->color(), ui.hostmaskBG->color(), ui.hostmaskUseBG->isChecked());
631   s.setValue("hostmaskUseBG", ui.hostmaskUseBG->isChecked());
632   saveColor(UiStyle::ChannelName, ui.channelnameFG->color(), ui.channelnameBG->color(), ui.channelnameUseBG->isChecked());
633   s.setValue("channelnameUseBG", ui.channelnameUseBG->isChecked());
634   saveColor(UiStyle::ModeFlags, ui.modeFlagsFG->color(), ui.modeFlagsBG->color(), ui.modeFlagsUseBG->isChecked());
635   s.setValue("modeFlagsUseBG", ui.modeFlagsUseBG->isChecked());
636   saveColor(UiStyle::Url, ui.urlFG->color(), ui.urlBG->color(), ui.urlUseBG->isChecked());
637   s.setValue("urlUseBG", ui.urlUseBG->isChecked());
638   */
639
640   saveMircColor(0, ui.color0->color());
641   saveMircColor(1, ui.color1->color());
642   saveMircColor(2, ui.color2->color());
643   saveMircColor(3, ui.color3->color());
644   saveMircColor(4, ui.color4->color());
645   saveMircColor(5, ui.color5->color());
646   saveMircColor(6, ui.color6->color());
647   saveMircColor(7, ui.color7->color());
648   saveMircColor(8, ui.color8->color());
649   saveMircColor(9, ui.color9->color());
650   saveMircColor(10, ui.color10->color());
651   saveMircColor(11, ui.color11->color());
652   saveMircColor(12, ui.color12->color());
653   saveMircColor(13, ui.color13->color());
654   saveMircColor(14, ui.color14->color());
655   saveMircColor(15, ui.color15->color());
656
657   s.setValue("onlineStatusFG", ui.onlineStatusFG->color());
658   s.setValue("onlineStatusBG", ui.onlineStatusBG->color());
659   s.setValue("onlineStatusUseBG", ui.onlineStatusUseBG->isChecked());
660   s.setValue("awayStatusFG", ui.awayStatusFG->color());
661   s.setValue("awayStatusBG", ui.awayStatusBG->color());
662   s.setValue("awayStatusUseBG", ui.awayStatusUseBG->isChecked());
663
664   load(); //TODO: remove when settings hash map is unnescessary
665   setChangedState(false);
666 }
667
668 void ColorSettingsPage::saveColor(UiStyle::FormatType formatType, const QColor &foreground, const QColor &background, bool enableBG) {
669   QTextCharFormat format = QtUi::style()->format(formatType);
670   format.setForeground(QBrush(foreground));
671   if(enableBG)
672     format.setBackground(QBrush(background));
673   else
674     format.clearBackground();
675   QtUi::style()->setFormat(formatType, format, Settings::Custom);
676 }
677
678 void ColorSettingsPage::saveMircColor(int num, const QColor &col) {
679   QTextCharFormat fgf, bgf;
680   fgf.setForeground(QBrush(col)); QtUi::style()->setFormat((UiStyle::FormatType)(UiStyle::FgCol00 | num<<24), fgf, Settings::Custom);
681   bgf.setBackground(QBrush(col)); QtUi::style()->setFormat((UiStyle::FormatType)(UiStyle::BgCol00 | num<<28), bgf, Settings::Custom);
682 }
683
684 void ColorSettingsPage::widgetHasChanged() {
685   bool changed = testHasChanged();
686   if(changed != hasChanged()) {
687     setChangedState(changed);
688   }
689   bufferviewPreview();
690   chatviewPreview();
691 }
692
693 bool ColorSettingsPage::testHasChanged() {
694   if(settings["InactiveActivityFG"].value<QColor>() != ui.inactiveActivityFG->color()) return true;
695   if(settings["InactiveActivityBG"].value<QColor>() != ui.inactiveActivityBG->color()) return true;
696   if(settings["InactiveActivityUseBG"].toBool() != ui.inactiveActivityUseBG->isChecked()) return true;
697   if(settings["NoActivityFG"].value<QColor>() != ui.noActivityFG->color()) return true;
698   if(settings["NoActivityBG"].value<QColor>() != ui.noActivityBG->color()) return true;
699   if(settings["NoActivityUseBG"].toBool() != ui.noActivityUseBG->isChecked()) return true;
700   if(settings["HighlightActivityFG"].value<QColor>() != ui.highlightActivityFG->color()) return true;
701   if(settings["HighlightActivityBG"].value<QColor>() != ui.highlightActivityBG->color()) return true;
702   if(settings["HighlightActivityUseBG"].toBool() != ui.highlightActivityUseBG->isChecked()) return true;
703   if(settings["NewMessageActivityFG"].value<QColor>() != ui.newMessageActivityFG->color()) return true;
704   if(settings["NewMessageActivityBG"].value<QColor>() != ui.newMessageActivityBG->color()) return true;
705   if(settings["NewMessageActivityUseBG"].toBool() != ui.newMessageActivityUseBG->isChecked()) return true;
706   if(settings["OtherActivityFG"].value<QColor>() != ui.otherActivityFG->color()) return true;
707   if(settings["OtherActivityBG"].value<QColor>() != ui.otherActivityBG->color()) return true;
708   if(settings["OtherActivityUseBG"].toBool() != ui.otherActivityUseBG->isChecked()) return true;
709
710   if(QtUi::style()->format(UiStyle::ErrorMsg).foreground().color() != ui.errorMessageFG->color()) return true;
711   if(QtUi::style()->format(UiStyle::ErrorMsg).background().color() != ui.errorMessageBG->color()) return true;
712   if(settings["ErrorMessageUseBG"].toBool() != ui.errorMessageUseBG->isChecked()) return true;
713   if(QtUi::style()->format(UiStyle::ErrorMsg).foreground().color() != ui.errorMessageFG->color()) return true;
714   if(QtUi::style()->format(UiStyle::ErrorMsg).background().color() != ui.errorMessageBG->color()) return true;
715   if(settings["NoticeMessageUseBG"].toBool() != ui.noticeMessageUseBG->isChecked()) return true;
716   if(QtUi::style()->format(UiStyle::PlainMsg).foreground().color() != ui.plainMessageFG->color()) return true;
717   if(QtUi::style()->format(UiStyle::PlainMsg).background().color() != ui.plainMessageBG->color()) return true;
718   if(settings["PlainMessageUseBG"].toBool() != ui.plainMessageUseBG->isChecked()) return true;
719   if(QtUi::style()->format(UiStyle::ServerMsg).foreground().color() != ui.serverMessageFG->color()) return true;
720   if(QtUi::style()->format(UiStyle::ServerMsg).background().color() != ui.serverMessageBG->color()) return true;
721   if(settings["ServerMessageUseBG"].toBool() != ui.serverMessageUseBG->isChecked()) return true;
722   if(QtUi::style()->format(UiStyle::ActionMsg).foreground().color() != ui.actionMessageFG->color()) return true;
723   if(QtUi::style()->format(UiStyle::ActionMsg).background().color() != ui.actionMessageBG->color()) return true;
724   if(settings["ActionMessageUseBG"].toBool() != ui.actionMessageUseBG->isChecked()) return true;
725   if(QtUi::style()->format(UiStyle::JoinMsg).foreground().color() != ui.joinMessageFG->color()) return true;
726   if(QtUi::style()->format(UiStyle::JoinMsg).background().color() != ui.joinMessageBG->color()) return true;
727   if(settings["JoinMessageUseBG"].toBool() != ui.joinMessageUseBG->isChecked()) return true;
728   if(QtUi::style()->format(UiStyle::KickMsg).foreground().color() != ui.kickMessageFG->color()) return true;
729   if(QtUi::style()->format(UiStyle::KickMsg).background().color() != ui.joinMessageBG->color()) return true;
730   if(settings["KickMessageUseBG"].toBool() != ui.kickMessageUseBG->isChecked()) return true;
731   if(QtUi::style()->format(UiStyle::ModeMsg).foreground().color() != ui.modeMessageFG->color()) return true;
732   if(QtUi::style()->format(UiStyle::ModeMsg).background().color() != ui.modeMessageBG->color()) return true;
733   if(settings["ModeMessageUseBG"].toBool() != ui.modeMessageUseBG->isChecked()) return true;
734   if(QtUi::style()->format(UiStyle::NoticeMsg).foreground().color() != ui.noticeMessageFG->color()) return true;
735   if(QtUi::style()->format(UiStyle::NoticeMsg).background().color() != ui.noticeMessageBG->color()) return true;
736   if(settings["NoticeMessageUseBG"].toBool() != ui.noticeMessageUseBG->isChecked()) return true;
737   if(QtUi::style()->format(UiStyle::PartMsg).foreground().color() != ui.partMessageFG->color()) return true;
738   if(QtUi::style()->format(UiStyle::PartMsg).background().color() != ui.partMessageBG->color()) return true;
739   if(settings["PartMessageUseBG"].toBool() != ui.partMessageUseBG->isChecked()) return true;
740   if(QtUi::style()->format(UiStyle::QuitMsg).foreground().color() != ui.quitMessageFG->color()) return true;
741   if(QtUi::style()->format(UiStyle::QuitMsg).background().color() != ui.quitMessageBG->color()) return true;
742   if(settings["QuitMessageUseBG"].toBool() != ui.quitMessageUseBG->isChecked()) return true;
743   if(QtUi::style()->format(UiStyle::RenameMsg).foreground().color() != ui.renameMessageFG->color()) return true;
744   if(QtUi::style()->format(UiStyle::RenameMsg).background().color() != ui.renameMessageBG->color()) return true;
745   if(settings["RenameMessageUseBG"].toBool() != ui.renameMessageUseBG->isChecked()) return true;
746
747   if(settings["HighlightColor"].value<QColor>() != ui.highlightColor->color()) return true;
748
749   if(QtUi::style()->format(UiStyle::Timestamp).foreground().color() != ui.timestampFG->color()) return true;
750   if(QtUi::style()->format(UiStyle::Timestamp).background().color() != ui.timestampBG->color()) return true;
751   if(settings["TimestampUseBG"].toBool() != ui.timestampUseBG->isChecked()) return true;
752   if(QtUi::style()->format(UiStyle::Sender).foreground().color() != ui.senderFG->color()) return true;
753   if(QtUi::style()->format(UiStyle::Sender).background().color() != ui.senderBG->color()) return true;
754   if(settings["SenderUseBG"].toBool() != ui.senderUseBG->isChecked()) return true;
755
756   /*
757   if(QtUi::style()->format(UiStyle::Nick).foreground().color() != ui.nickFG->color()) return true;
758   if(QtUi::style()->format(UiStyle::Nick).background().color() != ui.nickBG->color()) return true;
759   if(settings["nickUseBG"].toBool() != ui.nickUseBG->isChecked()) return true;
760   if(QtUi::style()->format(UiStyle::Hostmask).foreground().color() != ui.hostmaskFG->color()) return true;
761   if(QtUi::style()->format(UiStyle::Hostmask).background().color() != ui.hostmaskBG->color()) return true;
762   if(settings["hostmaskUseBG"].toBool() != ui.hostmaskUseBG->isChecked()) return true;
763   if(QtUi::style()->format(UiStyle::ChannelName).foreground().color() != ui.channelnameFG->color()) return true;
764   if(QtUi::style()->format(UiStyle::ChannelName).background().color() != ui.channelnameBG->color()) return true;
765   if(settings["channelnameUseBG"].toBool() != ui.channelnameUseBG->isChecked()) return true;
766   if(QtUi::style()->format(UiStyle::ModeFlags).foreground().color() != ui.modeFlagsFG->color()) return true;
767   if(QtUi::style()->format(UiStyle::ModeFlags).background().color() != ui.modeFlagsBG->color()) return true;
768   if(settings["modeFlagsUseBG"].toBool() != ui.modeFlagsUseBG->isChecked()) return true;
769   if(QtUi::style()->format(UiStyle::Url).foreground().color() != ui.urlFG->color()) return true;
770   if(QtUi::style()->format(UiStyle::Url).background().color() != ui.urlBG->color()) return true;
771   if(settings["urlUseBG"].toBool() != ui.urlUseBG->isChecked()) return true;
772   */
773
774   if(QtUi::style()->format(UiStyle::FgCol00).foreground().color() != ui.color0->color()) return true;
775   if(QtUi::style()->format(UiStyle::FgCol01).foreground().color() != ui.color1->color()) return true;
776   if(QtUi::style()->format(UiStyle::FgCol02).foreground().color() != ui.color2->color()) return true;
777   if(QtUi::style()->format(UiStyle::FgCol03).foreground().color() != ui.color3->color()) return true;
778   if(QtUi::style()->format(UiStyle::FgCol04).foreground().color() != ui.color4->color()) return true;
779   if(QtUi::style()->format(UiStyle::FgCol05).foreground().color() != ui.color5->color()) return true;
780   if(QtUi::style()->format(UiStyle::FgCol06).foreground().color() != ui.color6->color()) return true;
781   if(QtUi::style()->format(UiStyle::FgCol07).foreground().color() != ui.color7->color()) return true;
782   if(QtUi::style()->format(UiStyle::FgCol08).foreground().color() != ui.color8->color()) return true;
783   if(QtUi::style()->format(UiStyle::FgCol09).foreground().color() != ui.color9->color()) return true;
784   if(QtUi::style()->format(UiStyle::FgCol10).foreground().color() != ui.color10->color()) return true;
785   if(QtUi::style()->format(UiStyle::FgCol11).foreground().color() != ui.color11->color()) return true;
786   if(QtUi::style()->format(UiStyle::FgCol12).foreground().color() != ui.color12->color()) return true;
787   if(QtUi::style()->format(UiStyle::FgCol13).foreground().color() != ui.color13->color()) return true;
788   if(QtUi::style()->format(UiStyle::FgCol14).foreground().color() != ui.color14->color()) return true;
789   if(QtUi::style()->format(UiStyle::FgCol15).foreground().color() != ui.color15->color()) return true;
790
791   if(settings["OnlineStatusFG"].value<QColor>() != ui.onlineStatusFG->color()) return true;
792   if(settings["OnlineStatusBG"].value<QColor>() != ui.onlineStatusBG->color()) return true;
793   if(settings["OnlineStatusUseBG"].toBool() != ui.onlineStatusUseBG->isChecked()) return true;
794   if(settings["AwayStatusFG"].value<QColor>() != ui.awayStatusFG->color()) return true;
795   if(settings["AwayStatusBG"].value<QColor>() != ui.awayStatusBG->color()) return true;
796   if(settings["AwayStatusUseBG"].toBool() != ui.awayStatusUseBG->isChecked()) return true;
797
798   return false;
799 }
800
801 void ColorSettingsPage::chooseColor(QWidget *widget) {
802   ColorButton *button = qobject_cast<ColorButton *>(widget);
803   Q_ASSERT(button);
804   QColor color = QColorDialog::getColor(button->color(), this);
805   if(color.isValid()) {
806     button->setColor(color);
807   }
808   widgetHasChanged();
809 }
810
811 void ColorSettingsPage::chatviewPreview() {
812   //TODO: update chatviewPreview
813 }
814
815 void ColorSettingsPage::bufferviewPreview() {
816   ui.bufferviewPreview->clear();
817   ui.bufferviewPreview->setColumnCount(1);
818   ui.bufferviewPreview->setHeaderLabels(QStringList("Buffers"));
819
820   QTreeWidgetItem *topLevelItem = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("network")));
821   ui.bufferviewPreview->insertTopLevelItem(0, topLevelItem);
822   topLevelItem->setForeground(0, QBrush(ui.noActivityFG->color()));
823   if(ui.noActivityUseBG->isChecked())
824     topLevelItem->setBackground(0, QBrush(ui.noActivityBG->color()));
825
826
827   QList<QTreeWidgetItem *> items;
828   QTreeWidgetItem *statusBuffer = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("Status Buffer")));
829   items.append(statusBuffer);
830   statusBuffer->setForeground(0, QBrush(ui.noActivityFG->color()));
831   if(ui.noActivityUseBG->isChecked())
832     statusBuffer->setBackground(0, QBrush(ui.noActivityBG->color()));
833
834   QTreeWidgetItem *inactiveActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#inactive channel")));
835   items.append(inactiveActivity);
836   inactiveActivity->setForeground(0, QBrush(ui.inactiveActivityFG->color()));
837   if(ui.inactiveActivityUseBG->isChecked())
838     inactiveActivity->setBackground(0, QBrush(ui.inactiveActivityBG->color()));
839
840   QTreeWidgetItem *noActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#channel with no activity")));
841   items.append(noActivity);
842   noActivity->setForeground(0, QBrush(ui.noActivityFG->color()));
843   if(ui.noActivityUseBG->isChecked())
844     noActivity->setBackground(0, QBrush(ui.noActivityBG->color()));
845
846   QTreeWidgetItem *highlightActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#channel with highlight")));
847   items.append(highlightActivity);
848   highlightActivity->setForeground(0, QBrush(ui.highlightActivityFG->color()));
849   if(ui.highlightActivityUseBG->isChecked())
850     highlightActivity->setBackground(0, QBrush(ui.highlightActivityBG->color()));
851
852   QTreeWidgetItem *newMessageActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#channel with new message")));
853   items.append(newMessageActivity);
854   newMessageActivity->setForeground(0, QBrush(ui.newMessageActivityFG->color()));
855   if(ui.newMessageActivityUseBG->isChecked())
856     newMessageActivity->setBackground(0, QBrush(ui.newMessageActivityBG->color()));
857
858   QTreeWidgetItem *otherActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#channel with other activity")));
859   items.append(otherActivity);
860   otherActivity->setForeground(0, QBrush(ui.otherActivityFG->color()));
861   if(ui.otherActivityUseBG->isChecked())
862     otherActivity->setBackground(0, QBrush(ui.otherActivityBG->color()));
863
864   topLevelItem->insertChildren(0, items);
865   ui.bufferviewPreview->expandItem(topLevelItem);
866 }
867