11ac57c5e223847f5ed01059aebc52266e453491
[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.noticeMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
70   connect(ui.noticeMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
71   connect(ui.plainMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
72   connect(ui.plainMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
73   connect(ui.serverMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
74   connect(ui.serverMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
75   connect(ui.actionMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
76   connect(ui.actionMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
77   connect(ui.joinMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
78   connect(ui.joinMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
79   connect(ui.kickMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
80   connect(ui.kickMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
81   connect(ui.modeMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
82   connect(ui.modeMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
83   connect(ui.partMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
84   connect(ui.partMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
85   connect(ui.quitMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
86   connect(ui.quitMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
87   connect(ui.renameMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
88   connect(ui.renameMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
89
90   mapper->setMapping(ui.errorMessageFG, ui.errorMessageFG);
91   mapper->setMapping(ui.errorMessageBG, ui.errorMessageBG);
92   mapper->setMapping(ui.noticeMessageFG, ui.noticeMessageFG);
93   mapper->setMapping(ui.noticeMessageBG, ui.noticeMessageBG);
94   mapper->setMapping(ui.plainMessageFG, ui.plainMessageFG);
95   mapper->setMapping(ui.plainMessageBG, ui.plainMessageBG);
96   mapper->setMapping(ui.serverMessageFG, ui.serverMessageFG);
97   mapper->setMapping(ui.serverMessageBG, ui.serverMessageBG);
98   mapper->setMapping(ui.actionMessageFG, ui.actionMessageFG);
99   mapper->setMapping(ui.actionMessageBG, ui.actionMessageBG);
100   mapper->setMapping(ui.joinMessageFG, ui.joinMessageFG);
101   mapper->setMapping(ui.joinMessageBG, ui.joinMessageBG);
102   mapper->setMapping(ui.kickMessageFG, ui.kickMessageFG);
103   mapper->setMapping(ui.kickMessageBG, ui.kickMessageBG);
104   mapper->setMapping(ui.modeMessageFG, ui.modeMessageFG);
105   mapper->setMapping(ui.modeMessageBG, ui.modeMessageBG);
106   mapper->setMapping(ui.partMessageFG, ui.partMessageFG);
107   mapper->setMapping(ui.partMessageBG, ui.partMessageBG);
108   mapper->setMapping(ui.quitMessageFG, ui.quitMessageFG);
109   mapper->setMapping(ui.quitMessageBG, ui.quitMessageBG);
110   mapper->setMapping(ui.renameMessageFG, ui.renameMessageFG);
111   mapper->setMapping(ui.renameMessageBG, ui.renameMessageBG);
112
113   //Message Layout tab:
114   connect(ui.timestampFG, SIGNAL(clicked()), mapper, SLOT(map()));
115   connect(ui.timestampBG, SIGNAL(clicked()), mapper, SLOT(map()));
116   connect(ui.senderFG, SIGNAL(clicked()), mapper, SLOT(map()));
117   connect(ui.senderBG, SIGNAL(clicked()), mapper, SLOT(map()));
118   connect(ui.nickFG, SIGNAL(clicked()), mapper, SLOT(map()));
119   connect(ui.nickBG, SIGNAL(clicked()), mapper, SLOT(map()));
120   connect(ui.hostmaskFG, SIGNAL(clicked()), mapper, SLOT(map()));
121   connect(ui.hostmaskBG, SIGNAL(clicked()), mapper, SLOT(map()));
122   connect(ui.channelnameFG, SIGNAL(clicked()), mapper, SLOT(map()));
123   connect(ui.channelnameBG, SIGNAL(clicked()), mapper, SLOT(map()));
124   connect(ui.modeFlagsFG, SIGNAL(clicked()), mapper, SLOT(map()));
125   connect(ui.modeFlagsBG, SIGNAL(clicked()), mapper, SLOT(map()));
126   connect(ui.urlFG, SIGNAL(clicked()), mapper, SLOT(map()));
127   connect(ui.urlBG, SIGNAL(clicked()), mapper, SLOT(map()));
128
129   mapper->setMapping(ui.timestampFG, ui.timestampFG);
130   mapper->setMapping(ui.timestampBG, ui.timestampBG);
131   mapper->setMapping(ui.senderFG, ui.senderFG);
132   mapper->setMapping(ui.senderBG, ui.senderBG);
133   mapper->setMapping(ui.nickFG, ui.nickFG);
134   mapper->setMapping(ui.nickBG, ui.nickBG);
135   mapper->setMapping(ui.hostmaskFG, ui.hostmaskFG);
136   mapper->setMapping(ui.hostmaskBG, ui.hostmaskBG);
137   mapper->setMapping(ui.channelnameFG, ui.channelnameFG);
138   mapper->setMapping(ui.channelnameBG, ui.channelnameBG);
139   mapper->setMapping(ui.modeFlagsFG, ui.modeFlagsFG);
140   mapper->setMapping(ui.modeFlagsBG, ui.modeFlagsBG);
141   mapper->setMapping(ui.urlFG, ui.urlFG);
142   mapper->setMapping(ui.urlBG, ui.urlBG);
143
144   //Mirc Color Codes tab:
145   connect(ui.color0, SIGNAL(clicked()), mapper, SLOT(map()));
146   connect(ui.color1, SIGNAL(clicked()), mapper, SLOT(map()));
147   connect(ui.color2, SIGNAL(clicked()), mapper, SLOT(map()));
148   connect(ui.color3, SIGNAL(clicked()), mapper, SLOT(map()));
149   connect(ui.color4, SIGNAL(clicked()), mapper, SLOT(map()));
150   connect(ui.color5, SIGNAL(clicked()), mapper, SLOT(map()));
151   connect(ui.color6, SIGNAL(clicked()), mapper, SLOT(map()));
152   connect(ui.color7, SIGNAL(clicked()), mapper, SLOT(map()));
153   connect(ui.color8, SIGNAL(clicked()), mapper, SLOT(map()));
154   connect(ui.color9, SIGNAL(clicked()), mapper, SLOT(map()));
155   connect(ui.color10, SIGNAL(clicked()), mapper, SLOT(map()));
156   connect(ui.color11, SIGNAL(clicked()), mapper, SLOT(map()));
157   connect(ui.color12, SIGNAL(clicked()), mapper, SLOT(map()));
158   connect(ui.color13, SIGNAL(clicked()), mapper, SLOT(map()));
159   connect(ui.color14, SIGNAL(clicked()), mapper, SLOT(map()));
160   connect(ui.color15, SIGNAL(clicked()), mapper, SLOT(map()));
161
162   mapper->setMapping(ui.color0, ui.color0);
163   mapper->setMapping(ui.color1, ui.color1);
164   mapper->setMapping(ui.color2, ui.color2);
165   mapper->setMapping(ui.color3, ui.color3);
166   mapper->setMapping(ui.color4, ui.color4);
167   mapper->setMapping(ui.color5, ui.color5);
168   mapper->setMapping(ui.color6, ui.color6);
169   mapper->setMapping(ui.color7, ui.color7);
170   mapper->setMapping(ui.color8, ui.color8);
171   mapper->setMapping(ui.color9, ui.color9);
172   mapper->setMapping(ui.color10, ui.color10);
173   mapper->setMapping(ui.color11, ui.color11);
174   mapper->setMapping(ui.color12, ui.color12);
175   mapper->setMapping(ui.color13, ui.color13);
176   mapper->setMapping(ui.color14, ui.color14);
177   mapper->setMapping(ui.color15, ui.color15);
178
179   //NickView tab:
180   connect(ui.onlineStatusFG, SIGNAL(clicked()), mapper, SLOT(map()));
181   connect(ui.onlineStatusBG, SIGNAL(clicked()), mapper, SLOT(map()));
182   connect(ui.onlineStatusBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
183   connect(ui.awayStatusFG, SIGNAL(clicked()), mapper, SLOT(map()));
184   connect(ui.awayStatusBG, SIGNAL(clicked()), mapper, SLOT(map()));
185   connect(ui.awayStatusBG, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
186
187   mapper->setMapping(ui.onlineStatusFG, ui.onlineStatusFG);
188   mapper->setMapping(ui.onlineStatusBG, ui.onlineStatusBG);
189   mapper->setMapping(ui.awayStatusFG, ui.awayStatusFG);
190   mapper->setMapping(ui.awayStatusBG, ui.awayStatusBG);
191
192   connect(mapper, SIGNAL(mapped(QWidget *)), this, SLOT(chooseColor(QWidget *)));
193
194   //disable unused buttons:
195 #ifndef PHONDEV
196   ui.inactiveActivityUseBG->setEnabled(false);
197   ui.noActivityUseBG->setEnabled(false);
198   ui.highlightActivityUseBG->setEnabled(false);
199   ui.newMessageActivityUseBG->setEnabled(false);
200   ui.otherActivityUseBG->setEnabled(false);
201
202   ui.errorMessageUseBG->setEnabled(false);
203   ui.noticeMessageUseBG->setEnabled(false);
204   ui.plainMessageUseBG->setEnabled(false);
205   ui.serverMessageUseBG->setEnabled(false);
206   ui.actionMessageUseBG->setEnabled(false);
207   ui.joinMessageUseBG->setEnabled(false);
208   ui.kickMessageUseBG->setEnabled(false);
209   ui.modeMessageUseBG->setEnabled(false);
210   ui.partMessageUseBG->setEnabled(false);
211   ui.quitMessageUseBG->setEnabled(false);
212   ui.renameMessageUseBG->setEnabled(false);
213
214   ui.timestampUseBG->setEnabled(false);
215   ui.senderUseBG->setEnabled(false);
216   ui.nickFG->setEnabled(false);
217   ui.nickUseBG->setEnabled(false);
218   ui.hostmaskFG->setEnabled(false);
219   ui.hostmaskUseBG->setEnabled(false);
220   ui.channelnameFG->setEnabled(false);
221   ui.channelnameUseBG->setEnabled(false);
222   ui.modeFlagsFG->setEnabled(false);
223   ui.modeFlagsUseBG->setEnabled(false);
224   ui.urlFG->setEnabled(false);
225   ui.urlUseBG->setEnabled(false);
226
227   ui.onlineStatusUseBG->setEnabled(false);
228   ui.awayStatusUseBG->setEnabled(false);
229 #endif
230 }
231
232 bool ColorSettingsPage::hasDefaults() const {
233   return true;
234 }
235
236 void ColorSettingsPage::defaults() {
237   defaultBufferview();
238   defaultServerActivity();
239   defaultUserActivity();
240   defaultMessage();
241   defaultMircColorCodes();
242   defaultNickview();
243 }
244
245 void ColorSettingsPage::defaultBufferview() {
246   ui.inactiveActivityFG->setColor(QColor(Qt::gray));
247   ui.inactiveActivityBG->setColor(QColor(Qt::white));
248   ui.inactiveActivityBG->setEnabled(false);
249   ui.inactiveActivityUseBG->setChecked(false);
250   ui.noActivityFG->setColor(QColor(Qt::black));
251   ui.noActivityBG->setColor(QColor(Qt::white));
252   ui.noActivityBG->setEnabled(false);
253   ui.noActivityUseBG->setChecked(false);
254   ui.highlightActivityFG->setColor(QColor(Qt::magenta));
255   ui.highlightActivityBG->setColor(QColor(Qt::white));
256   ui.highlightActivityBG->setEnabled(false);
257   ui.highlightActivityUseBG->setChecked(false);
258   ui.newMessageActivityFG->setColor(QColor(Qt::green));
259   ui.newMessageActivityBG->setColor(QColor(Qt::white));
260   ui.newMessageActivityBG->setEnabled(false);
261   ui.newMessageActivityUseBG->setChecked(false);
262   ui.otherActivityFG->setColor(QColor(Qt::darkGreen));
263   ui.otherActivityBG->setColor(QColor(Qt::white));
264   ui.otherActivityBG->setEnabled(false);
265   ui.otherActivityUseBG->setChecked(false);
266
267   widgetHasChanged();
268   bufferviewPreview();
269 }
270
271 void ColorSettingsPage::defaultServerActivity() {
272   ui.errorMessageFG->setColor(QtUi::style()->format(UiStyle::ErrorMsg, Settings::Default).foreground().color());
273   ui.errorMessageBG->setColor(QColor("white"));
274   ui.errorMessageBG->setEnabled(false);
275   ui.errorMessageUseBG->setChecked(false);
276   ui.noticeMessageFG->setColor(QtUi::style()->format(UiStyle::NoticeMsg, Settings::Default).foreground().color());
277   ui.noticeMessageBG->setColor(QColor("white"));
278   ui.noticeMessageBG->setEnabled(false);
279   ui.noticeMessageUseBG->setChecked(false);
280   ui.plainMessageFG->setColor(QtUi::style()->format(UiStyle::PlainMsg, Settings::Default).foreground().color());
281   ui.plainMessageBG->setColor(QColor("white"));
282   ui.plainMessageBG->setEnabled(false);
283   ui.plainMessageUseBG->setChecked(false);
284   ui.serverMessageFG->setColor(QtUi::style()->format(UiStyle::ServerMsg, Settings::Default).foreground().color());
285   ui.serverMessageBG->setColor(QColor("white"));
286   ui.serverMessageBG->setEnabled(false);
287   ui.serverMessageUseBG->setChecked(false);
288
289   widgetHasChanged();
290   chatviewPreview();
291 }
292
293 void ColorSettingsPage::defaultUserActivity() {
294   ui.actionMessageFG->setColor(QtUi::style()->format(UiStyle::ActionMsg, Settings::Default).foreground().color());
295   ui.actionMessageBG->setColor(QColor("white"));
296   ui.actionMessageBG->setEnabled(false);
297   ui.actionMessageUseBG->setChecked(false);
298   ui.joinMessageFG->setColor(QtUi::style()->format(UiStyle::JoinMsg, Settings::Default).foreground().color());
299   ui.joinMessageBG->setColor(QColor("white"));
300   ui.joinMessageBG->setEnabled(false);
301   ui.joinMessageUseBG->setChecked(false);
302   ui.kickMessageFG->setColor(QtUi::style()->format(UiStyle::KickMsg, Settings::Default).foreground().color());
303   ui.kickMessageBG->setColor(QColor("white"));
304   ui.kickMessageBG->setEnabled(false);
305   ui.kickMessageUseBG->setChecked(false);
306   ui.modeMessageFG->setColor(QtUi::style()->format(UiStyle::ModeMsg, Settings::Default).foreground().color());
307   ui.modeMessageBG->setColor(QColor("white"));
308   ui.modeMessageBG->setEnabled(false);
309   ui.modeMessageUseBG->setChecked(false);
310   ui.partMessageFG->setColor(QtUi::style()->format(UiStyle::PartMsg, Settings::Default).foreground().color());
311   ui.partMessageBG->setColor(QColor("white"));
312   ui.partMessageBG->setEnabled(false);
313   ui.partMessageUseBG->setChecked(false);
314   ui.quitMessageFG->setColor(QtUi::style()->format(UiStyle::QuitMsg, Settings::Default).foreground().color());
315   ui.quitMessageBG->setColor(QColor("white"));
316   ui.quitMessageBG->setEnabled(false);
317   ui.quitMessageUseBG->setChecked(false);
318   ui.renameMessageFG->setColor(QtUi::style()->format(UiStyle::RenameMsg, Settings::Default).foreground().color());
319   ui.renameMessageBG->setColor(QColor("white"));
320   ui.renameMessageBG->setEnabled(false);
321   ui.renameMessageUseBG->setChecked(false);
322
323   widgetHasChanged();
324   chatviewPreview();
325 }
326
327 void ColorSettingsPage::defaultMessage() {
328   ui.timestampFG->setColor(QtUi::style()->format(UiStyle::Timestamp, Settings::Default).foreground().color());
329   ui.timestampBG->setColor(QColor("white"));
330   ui.timestampBG->setEnabled(false);
331   ui.timestampUseBG->setChecked(false);
332   ui.senderFG->setColor(QtUi::style()->format(UiStyle::Sender, Settings::Default).foreground().color());
333   ui.senderBG->setColor(QColor("white"));
334   ui.senderBG->setEnabled(false);
335   ui.senderUseBG->setChecked(false);
336   ui.nickFG->setColor(QColor("black"));
337   ui.nickBG->setColor(QColor("white"));
338   ui.nickBG->setEnabled(false);
339   ui.nickUseBG->setChecked(false);
340   ui.hostmaskFG->setColor(QColor("black"));
341   ui.hostmaskBG->setColor(QColor("white"));
342   ui.hostmaskBG->setEnabled(false);
343   ui.hostmaskUseBG->setChecked(false);
344   ui.channelnameFG->setColor(QColor("black"));
345   ui.channelnameBG->setColor(QColor("white"));
346   ui.channelnameBG->setEnabled(false);
347   ui.channelnameUseBG->setChecked(false);
348   ui.modeFlagsFG->setColor(QColor("black"));
349   ui.modeFlagsBG->setColor(QColor("white"));
350   ui.modeFlagsBG->setEnabled(false);
351   ui.modeFlagsUseBG->setChecked(false);
352   ui.urlFG->setColor(QColor("black"));
353   ui.urlBG->setColor(QColor("white"));
354   ui.urlBG->setEnabled(false);
355   ui.urlUseBG->setChecked(false);
356
357   widgetHasChanged();
358   chatviewPreview();
359 }
360
361 void ColorSettingsPage::defaultMircColorCodes() {
362   ui.color0->setColor(QtUi::style()->format(UiStyle::FgCol00, Settings::Default).foreground().color());
363   ui.color1->setColor(QtUi::style()->format(UiStyle::FgCol01, Settings::Default).foreground().color());
364   ui.color2->setColor(QtUi::style()->format(UiStyle::FgCol02, Settings::Default).foreground().color());
365   ui.color3->setColor(QtUi::style()->format(UiStyle::FgCol03, Settings::Default).foreground().color());
366   ui.color4->setColor(QtUi::style()->format(UiStyle::FgCol04, Settings::Default).foreground().color());
367   ui.color5->setColor(QtUi::style()->format(UiStyle::FgCol05, Settings::Default).foreground().color());
368   ui.color6->setColor(QtUi::style()->format(UiStyle::FgCol06, Settings::Default).foreground().color());
369   ui.color7->setColor(QtUi::style()->format(UiStyle::FgCol07, Settings::Default).foreground().color());
370   ui.color8->setColor(QtUi::style()->format(UiStyle::FgCol08, Settings::Default).foreground().color());
371   ui.color9->setColor(QtUi::style()->format(UiStyle::FgCol09, Settings::Default).foreground().color());
372   ui.color10->setColor(QtUi::style()->format(UiStyle::FgCol10, Settings::Default).foreground().color());
373   ui.color11->setColor(QtUi::style()->format(UiStyle::FgCol11, Settings::Default).foreground().color());
374   ui.color12->setColor(QtUi::style()->format(UiStyle::FgCol12, Settings::Default).foreground().color());
375   ui.color13->setColor(QtUi::style()->format(UiStyle::FgCol13, Settings::Default).foreground().color());
376   ui.color14->setColor(QtUi::style()->format(UiStyle::FgCol14, Settings::Default).foreground().color());
377   ui.color15->setColor(QtUi::style()->format(UiStyle::FgCol15, Settings::Default).foreground().color());
378
379   widgetHasChanged();
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   widgetHasChanged();
393 }
394
395 void ColorSettingsPage::load() {
396   QtUiSettings s("QtUi/Colors");
397   settings["InactiveActivityFG"] = s.value("inactiveActivityFG", QVariant(QColor(Qt::gray)));
398   ui.inactiveActivityFG->setColor(settings["InactiveActivityFG"].value<QColor>());
399   settings["InactiveActivityBG"] = s.value("inactiveActivityBG", QVariant(QColor(Qt::white)));
400   ui.inactiveActivityBG->setColor(settings["InactiveActivityBG"].value<QColor>());
401   settings["InactiveActivityUseBG"] = s.value("inactiveActivityUseBG");
402   ui.inactiveActivityUseBG->setChecked(settings["InactiveActivityUseBG"].toBool());
403
404   settings["NoActivityFG"] = s.value("noActivityFG", QVariant(QColor(Qt::black)));
405   ui.noActivityFG->setColor(settings["NoActivityFG"].value<QColor>());
406   settings["NoActivityBG"] = s.value("noActivityBG", QVariant(QColor(Qt::white)));
407   ui.noActivityBG->setColor(settings["NoActivityBG"].value<QColor>());
408   settings["NoActivityUseBG"] = s.value("noActivityUseBG");
409   ui.noActivityUseBG->setChecked(settings["NoActivityUseBG"].toBool());
410
411   settings["HighlightActivityFG"] = s.value("highlightActivityFG", QVariant(QColor(Qt::magenta)));
412   ui.highlightActivityFG->setColor(settings["HighlightActivityFG"].value<QColor>());
413   settings["HighlightActivityBG"] = s.value("highlightActivityBG", QVariant(QColor(Qt::white)));
414   ui.highlightActivityBG->setColor(settings["HighlightActivityBG"].value<QColor>());
415   settings["HighlightActivityUseBG"] = s.value("highlightActivityUseBG");
416   ui.highlightActivityUseBG->setChecked(settings["HighlightActivityUseBG"].toBool());
417
418   settings["NewMessageActivityFG"] = s.value("newMessageActivityFG", QVariant(QColor(Qt::green)));
419   ui.newMessageActivityFG->setColor(settings["NewMessageActivityFG"].value<QColor>());
420   settings["NewMessageActivityBG"] = s.value("newMessageActivityBG", QVariant(QColor(Qt::white)));
421   ui.newMessageActivityBG->setColor(settings["NewMessageActivityBG"].value<QColor>());
422   settings["NewMessageActivityUseBG"] = s.value("newMessageActivityUseBG");
423   ui.newMessageActivityUseBG->setChecked(settings["NewMessageActivityUseBG"].toBool());
424
425   settings["OtherActivityFG"] = s.value("otherActivityFG", QVariant(QColor(Qt::darkGreen)));
426   ui.otherActivityFG->setColor(settings["OtherActivityFG"].value<QColor>());
427   settings["OtherActivityBG"] = s.value("otherActivityBG", QVariant(QColor(Qt::white)));
428   ui.otherActivityBG->setColor(settings["OtherActivityBG"].value<QColor>());
429   settings["OtherActivityUseBG"] = s.value("otherActivityUseBG");
430   ui.otherActivityUseBG->setChecked(settings["OtherActivityUseBG"].toBool());
431
432   ui.actionMessageFG->setColor(QtUi::style()->format(UiStyle::ActionMsg).foreground().color());
433   ui.errorMessageFG->setColor(QtUi::style()->format(UiStyle::ErrorMsg).foreground().color());
434   ui.joinMessageFG->setColor(QtUi::style()->format(UiStyle::JoinMsg).foreground().color());
435   ui.kickMessageFG->setColor(QtUi::style()->format(UiStyle::KickMsg).foreground().color());
436   ui.modeMessageFG->setColor(QtUi::style()->format(UiStyle::ModeMsg).foreground().color());
437   ui.noticeMessageFG->setColor(QtUi::style()->format(UiStyle::NoticeMsg).foreground().color());
438   ui.partMessageFG->setColor(QtUi::style()->format(UiStyle::PartMsg).foreground().color());
439   ui.plainMessageFG->setColor(QtUi::style()->format(UiStyle::PlainMsg).foreground().color());
440   ui.quitMessageFG->setColor(QtUi::style()->format(UiStyle::QuitMsg).foreground().color());
441   ui.renameMessageFG->setColor(QtUi::style()->format(UiStyle::RenameMsg).foreground().color());
442   ui.serverMessageFG->setColor(QtUi::style()->format(UiStyle::ServerMsg).foreground().color());
443
444   settings["ActionMessageBG"] = s.value("actionMessageBG", QVariant(QColor("white")));
445   ui.actionMessageBG->setColor(settings["ActionMessageBG"].value<QColor>());
446   settings["ErrorMessageBG"] = s.value("errorMessageBG", QVariant(QColor("white")));
447   ui.errorMessageBG->setColor(settings["ErrorMessageBG"].value<QColor>());
448   settings["JoinMessageBG"] = s.value("joinMessageBG", QVariant(QColor("white")));
449   ui.joinMessageBG->setColor(settings["JoinMessageBG"].value<QColor>());
450   settings["KickMessageBG"] = s.value("kickMessageBG", QVariant(QColor("white")));
451   ui.kickMessageBG->setColor(settings["KickMessageBG"].value<QColor>());
452   settings["ModeMessageBG"] = s.value("modeMessageBG", QVariant(QColor("white")));
453   ui.modeMessageBG->setColor(settings["ModeMessageBG"].value<QColor>());
454   settings["NoticeMessageBG"] = s.value("noticeMessageBG", QVariant(QColor("white")));
455   ui.noticeMessageBG->setColor(settings["NoticeMessageBG"].value<QColor>());
456   settings["PartMessageBG"] = s.value("partMessageBG", QVariant(QColor("white")));
457   ui.partMessageBG->setColor(settings["PartMessageBG"].value<QColor>());
458   settings["PlainMessageBG"] = s.value("plainMessageBG", QVariant(QColor("white")));
459   ui.plainMessageBG->setColor(settings["PlainMessageBG"].value<QColor>());
460   settings["QuitMessageBG"] = s.value("quitMessageBG", QVariant(QColor("white")));
461   ui.quitMessageBG->setColor(settings["QuitMessageBG"].value<QColor>());
462   settings["RenameMessageBG"] = s.value("renameMessageBG", QVariant(QColor("white")));
463   ui.renameMessageBG->setColor(settings["RenameMessageBG"].value<QColor>());
464   settings["ServerMessageBG"] = s.value("serverMessageBG", QVariant(QColor("white")));
465   ui.serverMessageBG->setColor(settings["ServerMessageBG"].value<QColor>());
466
467   ui.timestampFG->setColor(QtUi::style()->format(UiStyle::Timestamp).foreground().color());
468   ui.senderFG->setColor(QtUi::style()->format(UiStyle::Sender).foreground().color());
469
470   settings["TimestampBG"] = s.value("timestampBG", QVariant(QColor("white")));
471   ui.timestampBG->setColor(settings["TimestampBG"].value<QColor>());
472   settings["SenderBG"] = s.value("senderBG", QVariant(QColor("white")));
473   ui.senderBG->setColor(settings["SenderBG"].value<QColor>());
474   settings["NickFG"] = s.value("nickFG", QVariant(QColor("black")));
475   ui.nickFG->setColor(settings["NickFG"].value<QColor>());
476   settings["NickBG"] = s.value("nickBG", QVariant(QColor("white")));
477   ui.nickBG->setColor(settings["NickBG"].value<QColor>());
478   settings["HostmaskFG"] = s.value("hostmaskFG", QVariant(QColor("black")));
479   ui.hostmaskFG->setColor(settings["HostmaskFG"].value<QColor>());
480   settings["HostmaskBG"] = s.value("hostmaskBG", QVariant(QColor("white")));
481   ui.hostmaskBG->setColor(settings["HostmaskBG"].value<QColor>());
482   settings["ChannelnameFG"] = s.value("channelnameFG", QVariant(QColor("black")));
483   ui.channelnameFG->setColor(settings["ChannelnameFG"].value<QColor>());
484   settings["ChannelnameBG"] = s.value("channelnameBG", QVariant(QColor("white")));
485   ui.channelnameBG->setColor(settings["ChannelnameBG"].value<QColor>());
486   settings["ModeFlagsFG"] = s.value("modeFlagsFG", QVariant(QColor("black")));
487   ui.modeFlagsFG->setColor(settings["ModeFlagsFG"].value<QColor>());
488   settings["ModeFlagsBG"] = s.value("modeFlagsBG", QVariant(QColor("white")));
489   ui.modeFlagsBG->setColor(settings["ModeFlagsBG"].value<QColor>());
490   settings["UrlFG"] = s.value("urlFG", QVariant(QColor("black")));
491   ui.urlFG->setColor(settings["UrlFG"].value<QColor>());
492   settings["UrlBG"] = s.value("urlBG", QVariant(QColor("white")));
493   ui.urlBG->setColor(settings["UrlBG"].value<QColor>());
494
495   ui.color0->setColor(QtUi::style()->format(UiStyle::FgCol00).foreground().color());
496   ui.color1->setColor(QtUi::style()->format(UiStyle::FgCol01).foreground().color());
497   ui.color2->setColor(QtUi::style()->format(UiStyle::FgCol02).foreground().color());
498   ui.color3->setColor(QtUi::style()->format(UiStyle::FgCol03).foreground().color());
499   ui.color4->setColor(QtUi::style()->format(UiStyle::FgCol04).foreground().color());
500   ui.color5->setColor(QtUi::style()->format(UiStyle::FgCol05).foreground().color());
501   ui.color6->setColor(QtUi::style()->format(UiStyle::FgCol06).foreground().color());
502   ui.color7->setColor(QtUi::style()->format(UiStyle::FgCol07).foreground().color());
503   ui.color8->setColor(QtUi::style()->format(UiStyle::FgCol08).foreground().color());
504   ui.color9->setColor(QtUi::style()->format(UiStyle::FgCol09).foreground().color());
505   ui.color10->setColor(QtUi::style()->format(UiStyle::FgCol10).foreground().color());
506   ui.color11->setColor(QtUi::style()->format(UiStyle::FgCol11).foreground().color());
507   ui.color12->setColor(QtUi::style()->format(UiStyle::FgCol12).foreground().color());
508   ui.color13->setColor(QtUi::style()->format(UiStyle::FgCol13).foreground().color());
509   ui.color14->setColor(QtUi::style()->format(UiStyle::FgCol14).foreground().color());
510   ui.color15->setColor(QtUi::style()->format(UiStyle::FgCol15).foreground().color());
511
512   settings["OnlineStatusFG"] = s.value("onlineStatusFG", QVariant(QColor(Qt::black)));
513   ui.onlineStatusFG->setColor(settings["OnlineStatusFG"].value<QColor>());
514   settings["OnlineStatusBG"] = s.value("onlineStatusBG", QVariant(QColor(Qt::white)));
515   ui.onlineStatusBG->setColor(settings["OnlineStatusBG"].value<QColor>());
516   settings["OnlineStatusUseBG"] = s.value("onlineStatusUseBG");
517   ui.onlineStatusUseBG->setChecked(settings["OnlineStatusUseBG"].toBool());
518
519   settings["AwayStatusFG"] = s.value("awayStatusFG", QVariant(QColor(Qt::gray)));
520   ui.awayStatusFG->setColor(settings["AwayStatusFG"].value<QColor>());
521   settings["AwayStatusBG"] = s.value("awayStatusBG", QVariant(QColor(Qt::white)));
522   ui.awayStatusBG->setColor(settings["AwayStatusBG"].value<QColor>());
523   settings["AwayStatusUseBG"] = s.value("awayStatusUseBG");
524   ui.awayStatusUseBG->setChecked(settings["AwayStatusUseBG"].toBool());
525   setChangedState(false);
526
527   bufferviewPreview();
528   chatviewPreview();
529 }
530
531 void ColorSettingsPage::save() {
532   QtUiSettings s("QtUi/Colors");
533   s.setValue("noActivityFG", ui.noActivityFG->color());
534   s.setValue("noActivityBG", ui.noActivityBG->color());
535   s.setValue("noActivityUseBG", ui.noActivityUseBG->isChecked());
536   s.setValue("inactiveActivityFG", ui.inactiveActivityFG->color());
537   s.setValue("inactiveActivityBG", ui.inactiveActivityBG->color());
538   s.setValue("inactiveActivityUseBG", ui.inactiveActivityUseBG->isChecked());
539   s.setValue("highlightActivityFG", ui.highlightActivityFG->color());
540   s.setValue("highlightActivityBG", ui.highlightActivityBG->color());
541   s.setValue("highlightActivityUseBG", ui.highlightActivityUseBG->isChecked());
542   s.setValue("newMessageActivityFG", ui.newMessageActivityFG->color());
543   s.setValue("newMessageActivityBG", ui.newMessageActivityBG->color());
544   s.setValue("newMessageActivityUseBG", ui.newMessageActivityUseBG->isChecked());
545   s.setValue("otherActivityFG", ui.otherActivityFG->color());
546   s.setValue("otherActivityBG", ui.otherActivityBG->color());
547   s.setValue("otherActivityUseBG", ui.otherActivityUseBG->isChecked());
548
549   saveColor(UiStyle::ErrorMsg, ui.errorMessageFG->color());
550   s.setValue("errorMessageBG", ui.errorMessageBG->color());
551   s.setValue("errorMessageUseBG", ui.errorMessageUseBG->isChecked());
552   saveColor(UiStyle::NoticeMsg, ui.noticeMessageFG->color());
553   s.setValue("noticeMessageBG", ui.noticeMessageBG->color());
554   s.setValue("noticeMessageUseBG", ui.noticeMessageUseBG->isChecked());
555   saveColor(UiStyle::PlainMsg, ui.plainMessageFG->color());
556   s.setValue("plainMessageBG", ui.plainMessageBG->color());
557   s.setValue("plainMessageUseBG", ui.plainMessageUseBG->isChecked());
558   saveColor(UiStyle::ServerMsg, ui.serverMessageFG->color());
559   s.setValue("serverMessageBG", ui.serverMessageBG->color());
560   s.setValue("serverMessageUseBG", ui.serverMessageUseBG->isChecked());
561   saveColor(UiStyle::ActionMsg, ui.actionMessageFG->color());
562   s.setValue("actionMessageBG", ui.actionMessageBG->color());
563   s.setValue("actionMessageUseBG", ui.actionMessageUseBG->isChecked());
564   saveColor(UiStyle::JoinMsg, ui.joinMessageFG->color());
565   s.setValue("joinMessageBG", ui.joinMessageBG->color());
566   s.setValue("joinMessageUseBG", ui.joinMessageUseBG->isChecked());
567   saveColor(UiStyle::KickMsg, ui.kickMessageFG->color());
568   s.setValue("kickMessageBG", ui.kickMessageBG->color());
569   s.setValue("kickMessageUseBG", ui.kickMessageUseBG->isChecked());
570   saveColor(UiStyle::ModeMsg, ui.modeMessageFG->color());
571   s.setValue("modeMessageBG", ui.modeMessageBG->color());
572   s.setValue("modeMessageUseBG", ui.modeMessageUseBG->isChecked());
573   saveColor(UiStyle::PartMsg, ui.partMessageFG->color());
574   s.setValue("partMessageBG", ui.partMessageBG->color());
575   s.setValue("partMessageUseBG", ui.partMessageUseBG->isChecked());
576   saveColor(UiStyle::QuitMsg, ui.quitMessageFG->color());
577   s.setValue("quitMessageBG", ui.quitMessageBG->color());
578   s.setValue("quitMessageUseBG", ui.quitMessageUseBG->isChecked());
579   saveColor(UiStyle::RenameMsg, ui.renameMessageFG->color());
580   s.setValue("renameMessageBG", ui.renameMessageBG->color());
581   s.setValue("renameMessageUseBG", ui.renameMessageUseBG->isChecked());
582
583   saveColor(UiStyle::Timestamp, ui.timestampFG->color());
584   s.setValue("timestampBG", ui.timestampBG->color());
585   s.setValue("timestampUseBG", ui.timestampUseBG->isChecked());
586   saveColor(UiStyle::Sender, ui.senderFG->color());
587   s.setValue("senderBG", ui.senderBG->color());
588   s.setValue("senderUseBG", ui.senderUseBG->isChecked());
589   s.setValue("nickFG", ui.nickFG->color());
590   s.setValue("nickBG", ui.nickBG->color());
591   s.setValue("nickUseBG", ui.nickUseBG->isChecked());
592   s.setValue("hostmaskFG", ui.hostmaskFG->color());
593   s.setValue("hostmaskBG", ui.hostmaskBG->color());
594   s.setValue("hostmaskUseBG", ui.hostmaskUseBG->isChecked());
595   s.setValue("channelnameFG", ui.channelnameFG->color());
596   s.setValue("channelnameBG", ui.channelnameBG->color());
597   s.setValue("channelnameUseBG", ui.channelnameUseBG->isChecked());
598   s.setValue("modeFlagsFG", ui.modeFlagsFG->color());
599   s.setValue("modeFlagsBG", ui.modeFlagsBG->color());
600   s.setValue("modeFlagsUseBG", ui.modeFlagsUseBG->isChecked());
601   s.setValue("urlFG", ui.urlFG->color());
602   s.setValue("urlBG", ui.urlBG->color());
603   s.setValue("urlUseBG", ui.urlUseBG->isChecked());
604
605   /* This ain't working!
606   saveColor(UiStyle::FgCol00, ui.color0->color());
607   saveColor(UiStyle::FgCol01, ui.color1->color());
608   saveColor(UiStyle::FgCol02, ui.color2->color());
609   saveColor(UiStyle::FgCol03, ui.color3->color());
610   saveColor(UiStyle::FgCol04, ui.color4->color());
611   saveColor(UiStyle::FgCol05, ui.color5->color());
612   saveColor(UiStyle::FgCol06, ui.color6->color());
613   saveColor(UiStyle::FgCol07, ui.color7->color());
614   saveColor(UiStyle::FgCol08, ui.color8->color());
615   saveColor(UiStyle::FgCol09, ui.color9->color());
616   saveColor(UiStyle::FgCol10, ui.color10->color());
617   saveColor(UiStyle::FgCol11, ui.color11->color());
618   saveColor(UiStyle::FgCol12, ui.color12->color());
619   saveColor(UiStyle::FgCol13, ui.color13->color());
620   saveColor(UiStyle::FgCol14, ui.color14->color());
621   saveColor(UiStyle::FgCol15, ui.color15->color());
622
623   saveColor(UiStyle::BgCol00, ui.color0->color());
624   saveColor(UiStyle::BgCol01, ui.color1->color());
625   saveColor(UiStyle::BgCol02, ui.color2->color());
626   saveColor(UiStyle::BgCol03, ui.color3->color());
627   saveColor(UiStyle::BgCol04, ui.color4->color());
628   saveColor(UiStyle::BgCol05, ui.color5->color());
629   saveColor(UiStyle::BgCol06, ui.color6->color());
630   saveColor(UiStyle::BgCol07, ui.color7->color());
631   saveColor(UiStyle::BgCol08, ui.color8->color());
632   saveColor(UiStyle::BgCol09, ui.color9->color());
633   saveColor(UiStyle::BgCol10, ui.color10->color());
634   saveColor(UiStyle::BgCol11, ui.color11->color());
635   saveColor(UiStyle::BgCol12, ui.color12->color());
636   saveColor(UiStyle::BgCol13, ui.color13->color());
637   saveColor(UiStyle::BgCol14, ui.color14->color());
638   saveColor(UiStyle::BgCol15, ui.color15->color());
639 */
640
641   s.setValue("onlineStatusFG", ui.onlineStatusFG->color());
642   s.setValue("onlineStatusBG", ui.onlineStatusBG->color());
643   s.setValue("onlineStatusUseBG", ui.onlineStatusUseBG->isChecked());
644   s.setValue("awayStatusFG", ui.awayStatusFG->color());
645   s.setValue("awayStatusBG", ui.awayStatusBG->color());
646   s.setValue("awayStatusUseBG", ui.awayStatusUseBG->isChecked());
647
648   load(); //TODO: remove when settings hash map is unnescessary
649   setChangedState(false);
650 }
651
652 void ColorSettingsPage::saveColor(UiStyle::FormatType formatType, const QColor &color) {
653   QTextCharFormat format = QtUi::style()->format(formatType);
654   format.setForeground(QBrush(color));
655   QtUi::style()->setFormat(formatType, format, Settings::Custom);
656 }
657
658 void ColorSettingsPage::widgetHasChanged() {
659   bool changed = testHasChanged();
660   if(changed != hasChanged()) {
661     setChangedState(changed);
662   }
663   bufferviewPreview();
664   chatviewPreview();
665 }
666
667 bool ColorSettingsPage::testHasChanged() {
668   if(settings["InactiveActivityFG"].value<QColor>() != ui.inactiveActivityFG->color()) return true;
669   if(settings["InactiveActivityBG"].value<QColor>() != ui.inactiveActivityBG->color()) return true;
670   if(settings["InactiveActivityUseBG"].toBool() != ui.inactiveActivityUseBG->isChecked()) return true;
671   if(settings["NoActivityFG"].value<QColor>() != ui.noActivityFG->color()) return true;
672   if(settings["NoActivityBG"].value<QColor>() != ui.noActivityBG->color()) return true;
673   if(settings["NoActivityUseBG"].toBool() != ui.noActivityUseBG->isChecked()) return true;
674   if(settings["HighlightActivityFG"].value<QColor>() != ui.highlightActivityFG->color()) return true;
675   if(settings["HighlightActivityBG"].value<QColor>() != ui.highlightActivityBG->color()) return true;
676   if(settings["HighlightActivityUseBG"].toBool() != ui.highlightActivityUseBG->isChecked()) return true;
677   if(settings["NewMessageActivityFG"].value<QColor>() != ui.newMessageActivityFG->color()) return true;
678   if(settings["NewMessageActivityBG"].value<QColor>() != ui.newMessageActivityBG->color()) return true;
679   if(settings["NewMessageActivityUseBG"].toBool() != ui.newMessageActivityUseBG->isChecked()) return true;
680   if(settings["OtherActivityFG"].value<QColor>() != ui.otherActivityFG->color()) return true;
681   if(settings["OtherActivityBG"].value<QColor>() != ui.otherActivityBG->color()) return true;
682   if(settings["OtherActivityUseBG"].toBool() != ui.otherActivityUseBG->isChecked()) return true;
683
684   if(QtUi::style()->format(UiStyle::ErrorMsg).foreground().color() != ui.errorMessageFG->color()) return true;
685   if(settings["ErrorMessageBG"].value<QColor>() != ui.errorMessageBG->color()) return true;
686   if(QtUi::style()->format(UiStyle::NoticeMsg).foreground().color() != ui.noticeMessageFG->color()) return true;
687   if(settings["NoticeMessageBG"].value<QColor>() != ui.noticeMessageBG->color()) return true;
688   if(QtUi::style()->format(UiStyle::PlainMsg).foreground().color() != ui.plainMessageFG->color()) return true;
689   if(settings["PlainMessageBG"].value<QColor>() != ui.plainMessageBG->color()) return true;
690   if(QtUi::style()->format(UiStyle::ServerMsg).foreground().color() != ui.serverMessageFG->color()) return true;
691   if(settings["ServerMessageBG"].value<QColor>() != ui.serverMessageBG->color()) return true;
692   if(QtUi::style()->format(UiStyle::ActionMsg).foreground().color() != ui.actionMessageFG->color()) return true;
693   if(settings["ActionMessageBG"].value<QColor>() != ui.actionMessageBG->color()) return true;
694   if(QtUi::style()->format(UiStyle::JoinMsg).foreground().color() != ui.joinMessageFG->color()) return true;
695   if(settings["JoinMessageBG"].value<QColor>() != ui.joinMessageBG->color()) return true;
696   if(QtUi::style()->format(UiStyle::KickMsg).foreground().color() != ui.kickMessageFG->color()) return true;
697   if(settings["KickMessageBG"].value<QColor>() != ui.kickMessageBG->color()) return true;
698   if(QtUi::style()->format(UiStyle::ModeMsg).foreground().color() != ui.modeMessageFG->color()) return true;
699   if(settings["ModeMessageBG"].value<QColor>() != ui.modeMessageBG->color()) return true;
700   if(QtUi::style()->format(UiStyle::PartMsg).foreground().color() != ui.partMessageFG->color()) return true;
701   if(settings["PartMessageBG"].value<QColor>() != ui.partMessageBG->color()) return true;
702   if(QtUi::style()->format(UiStyle::QuitMsg).foreground().color() != ui.quitMessageFG->color()) return true;
703   if(settings["QuitMessageBG"].value<QColor>() != ui.quitMessageBG->color()) return true;
704   if(QtUi::style()->format(UiStyle::RenameMsg).foreground().color() != ui.renameMessageFG->color()) return true;
705   if(settings["RenameMessageBG"].value<QColor>() != ui.renameMessageBG->color()) return true;
706
707   if(QtUi::style()->format(UiStyle::Timestamp).foreground().color() != ui.timestampFG->color()) return true;
708   if(QtUi::style()->format(UiStyle::Sender).foreground().color() != ui.senderFG->color()) return true;
709
710   if(settings["TimestampBG"].value<QColor>() != ui.timestampBG->color()) return true;
711   if(settings["SenderBG"].value<QColor>() != ui.senderBG->color()) return true;
712   if(settings["NickFG"].value<QColor>() != ui.nickFG->color()) return true;
713   if(settings["NickBG"].value<QColor>() != ui.nickBG->color()) return true;
714   if(settings["HostmaskFG"].value<QColor>() != ui.hostmaskFG->color()) return true;
715   if(settings["HostmaskBG"].value<QColor>() != ui.hostmaskBG->color()) return true;
716   if(settings["ChannelnameFG"].value<QColor>() != ui.channelnameFG->color()) return true;
717   if(settings["ChannelnameBG"].value<QColor>() != ui.channelnameBG->color()) return true;
718   if(settings["ModeFlagsFG"].value<QColor>() != ui.modeFlagsFG->color()) return true;
719   if(settings["ModeFlagsBG"].value<QColor>() != ui.modeFlagsBG->color()) return true;
720   if(settings["UrlFG"].value<QColor>() != ui.urlFG->color()) return true;
721   if(settings["UrlBG"].value<QColor>() != ui.urlBG->color()) return true;
722
723   if(QtUi::style()->format(UiStyle::FgCol00).foreground().color() != ui.color0->color()) return true;
724   if(QtUi::style()->format(UiStyle::FgCol01).foreground().color() != ui.color1->color()) return true;
725   if(QtUi::style()->format(UiStyle::FgCol02).foreground().color() != ui.color2->color()) return true;
726   if(QtUi::style()->format(UiStyle::FgCol03).foreground().color() != ui.color3->color()) return true;
727   if(QtUi::style()->format(UiStyle::FgCol04).foreground().color() != ui.color4->color()) return true;
728   if(QtUi::style()->format(UiStyle::FgCol05).foreground().color() != ui.color5->color()) return true;
729   if(QtUi::style()->format(UiStyle::FgCol06).foreground().color() != ui.color6->color()) return true;
730   if(QtUi::style()->format(UiStyle::FgCol07).foreground().color() != ui.color7->color()) return true;
731   if(QtUi::style()->format(UiStyle::FgCol08).foreground().color() != ui.color8->color()) return true;
732   if(QtUi::style()->format(UiStyle::FgCol09).foreground().color() != ui.color9->color()) return true;
733   if(QtUi::style()->format(UiStyle::FgCol10).foreground().color() != ui.color10->color()) return true;
734   if(QtUi::style()->format(UiStyle::FgCol11).foreground().color() != ui.color11->color()) return true;
735   if(QtUi::style()->format(UiStyle::FgCol12).foreground().color() != ui.color12->color()) return true;
736   if(QtUi::style()->format(UiStyle::FgCol13).foreground().color() != ui.color13->color()) return true;
737   if(QtUi::style()->format(UiStyle::FgCol14).foreground().color() != ui.color14->color()) return true;
738   if(QtUi::style()->format(UiStyle::FgCol15).foreground().color() != ui.color15->color()) return true;
739
740   if(settings["OnlineStatusFG"].value<QColor>() != ui.onlineStatusFG->color()) return true;
741   if(settings["OnlineStatusBG"].value<QColor>() != ui.onlineStatusBG->color()) return true;
742   if(settings["OnlineStatusUseBG"].toBool() != ui.onlineStatusUseBG->isChecked()) return true;
743   if(settings["AwayStatusFG"].value<QColor>() != ui.awayStatusFG->color()) return true;
744   if(settings["AwayStatusBG"].value<QColor>() != ui.awayStatusBG->color()) return true;
745   if(settings["AwayStatusUseBG"].toBool() != ui.awayStatusUseBG->isChecked()) return true;
746
747   return false;
748 }
749
750 void ColorSettingsPage::chooseColor(QWidget *widget) {
751   ColorButton *button = qobject_cast<ColorButton *>(widget);
752   Q_ASSERT(button);
753   QColor color = QColorDialog::getColor(button->color(), this);
754   if(color.isValid()) {
755     button->setColor(color);
756   }
757   widgetHasChanged();
758 }
759
760 void ColorSettingsPage::chatviewPreview() {
761   //TODO: update chatviewPreview
762 }
763
764 void ColorSettingsPage::bufferviewPreview() {
765   ui.bufferviewPreview->clear();
766   ui.bufferviewPreview->setColumnCount(1);
767   ui.bufferviewPreview->setHeaderLabels(QStringList("Buffers"));
768
769   QTreeWidgetItem *topLevelItem = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("network")));
770   ui.bufferviewPreview->insertTopLevelItem(0, topLevelItem);
771   topLevelItem->setForeground(0, QBrush(ui.noActivityFG->color()));
772   if(ui.noActivityUseBG->isChecked())
773     topLevelItem->setBackground(0, QBrush(ui.noActivityBG->color()));
774
775
776   QList<QTreeWidgetItem *> items;
777   QTreeWidgetItem *statusBuffer = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("Status Buffer")));
778   items.append(statusBuffer);
779   statusBuffer->setForeground(0, QBrush(ui.noActivityFG->color()));
780   if(ui.noActivityUseBG->isChecked())
781     statusBuffer->setBackground(0, QBrush(ui.noActivityBG->color()));
782
783   QTreeWidgetItem *inactiveActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#inactive channel")));
784   items.append(inactiveActivity);
785   inactiveActivity->setForeground(0, QBrush(ui.inactiveActivityFG->color()));
786   if(ui.inactiveActivityUseBG->isChecked())
787     inactiveActivity->setBackground(0, QBrush(ui.inactiveActivityBG->color()));
788
789   QTreeWidgetItem *noActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#channel with no activity")));
790   items.append(noActivity);
791   noActivity->setForeground(0, QBrush(ui.noActivityFG->color()));
792   if(ui.noActivityUseBG->isChecked())
793     noActivity->setBackground(0, QBrush(ui.noActivityBG->color()));
794
795   QTreeWidgetItem *highlightActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#channel with highlight")));
796   items.append(highlightActivity);
797   highlightActivity->setForeground(0, QBrush(ui.highlightActivityFG->color()));
798   if(ui.highlightActivityUseBG->isChecked())
799     highlightActivity->setBackground(0, QBrush(ui.highlightActivityBG->color()));
800
801   QTreeWidgetItem *newMessageActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#channel with new message")));
802   items.append(newMessageActivity);
803   newMessageActivity->setForeground(0, QBrush(ui.newMessageActivityFG->color()));
804   if(ui.newMessageActivityUseBG->isChecked())
805     newMessageActivity->setBackground(0, QBrush(ui.newMessageActivityBG->color()));
806
807   QTreeWidgetItem *otherActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#channel with other activity")));
808   items.append(otherActivity);
809   otherActivity->setForeground(0, QBrush(ui.otherActivityFG->color()));
810   if(ui.otherActivityUseBG->isChecked())
811     otherActivity->setBackground(0, QBrush(ui.otherActivityBG->color()));
812
813   topLevelItem->insertChildren(0, items);
814   ui.bufferviewPreview->expandItem(topLevelItem);
815 }
816