enabled custom colors and
[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 ColorSettingsPage::ColorSettingsPage(QWidget *parent)
31   : SettingsPage(tr("Appearance"), tr("Color settings"), parent) {
32   ui.setupUi(this);
33
34   mapper = new QSignalMapper(this);
35   //Bufferview tab:
36   connect(ui.inactiveActivity, SIGNAL(clicked()), mapper, SLOT(map()));
37   connect(ui.noActivity, SIGNAL(clicked()), mapper, SLOT(map()));
38   connect(ui.highlightActivity, SIGNAL(clicked()), mapper, SLOT(map()));
39   connect(ui.newMessageActivity, SIGNAL(clicked()), mapper, SLOT(map()));
40   connect(ui.otherActivity, SIGNAL(clicked()), mapper, SLOT(map()));
41
42   mapper->setMapping(ui.inactiveActivity, ui.inactiveActivity);
43   mapper->setMapping(ui.noActivity, ui.noActivity);
44   mapper->setMapping(ui.highlightActivity, ui.highlightActivity);
45   mapper->setMapping(ui.newMessageActivity, ui.newMessageActivity);
46   mapper->setMapping(ui.otherActivity, ui.otherActivity);
47
48   //Chatview tab:
49   connect(ui.errorMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
50   connect(ui.errorMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
51   connect(ui.noticeMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
52   connect(ui.noticeMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
53   connect(ui.plainMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
54   connect(ui.plainMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
55   connect(ui.serverMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
56   connect(ui.serverMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
57   connect(ui.actionMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
58   connect(ui.actionMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
59   connect(ui.joinMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
60   connect(ui.joinMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
61   connect(ui.kickMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
62   connect(ui.kickMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
63   connect(ui.modeMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
64   connect(ui.modeMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
65   connect(ui.partMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
66   connect(ui.partMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
67   connect(ui.quitMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
68   connect(ui.quitMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
69   connect(ui.renameMessageFG, SIGNAL(clicked()), mapper, SLOT(map()));
70   connect(ui.renameMessageBG, SIGNAL(clicked()), mapper, SLOT(map()));
71
72   mapper->setMapping(ui.errorMessageFG, ui.errorMessageFG);
73   mapper->setMapping(ui.errorMessageBG, ui.errorMessageBG);
74   mapper->setMapping(ui.noticeMessageFG, ui.noticeMessageFG);
75   mapper->setMapping(ui.noticeMessageBG, ui.noticeMessageBG);
76   mapper->setMapping(ui.plainMessageFG, ui.plainMessageFG);
77   mapper->setMapping(ui.plainMessageBG, ui.plainMessageBG);
78   mapper->setMapping(ui.serverMessageFG, ui.serverMessageFG);
79   mapper->setMapping(ui.serverMessageBG, ui.serverMessageBG);
80   mapper->setMapping(ui.actionMessageFG, ui.actionMessageFG);
81   mapper->setMapping(ui.actionMessageBG, ui.actionMessageBG);
82   mapper->setMapping(ui.joinMessageFG, ui.joinMessageFG);
83   mapper->setMapping(ui.joinMessageBG, ui.joinMessageBG);
84   mapper->setMapping(ui.kickMessageFG, ui.kickMessageFG);
85   mapper->setMapping(ui.kickMessageBG, ui.kickMessageBG);
86   mapper->setMapping(ui.modeMessageFG, ui.modeMessageFG);
87   mapper->setMapping(ui.modeMessageBG, ui.modeMessageBG);
88   mapper->setMapping(ui.partMessageFG, ui.partMessageFG);
89   mapper->setMapping(ui.partMessageBG, ui.partMessageBG);
90   mapper->setMapping(ui.quitMessageFG, ui.quitMessageFG);
91   mapper->setMapping(ui.quitMessageBG, ui.quitMessageBG);
92   mapper->setMapping(ui.renameMessageFG, ui.renameMessageFG);
93   mapper->setMapping(ui.renameMessageBG, ui.renameMessageBG);
94
95   //Message Layout tab:
96   connect(ui.timestampFG, SIGNAL(clicked()), mapper, SLOT(map()));
97   connect(ui.timestampBG, SIGNAL(clicked()), mapper, SLOT(map()));
98   connect(ui.senderFG, SIGNAL(clicked()), mapper, SLOT(map()));
99   connect(ui.senderBG, SIGNAL(clicked()), mapper, SLOT(map()));
100   connect(ui.nickFG, SIGNAL(clicked()), mapper, SLOT(map()));
101   connect(ui.nickBG, SIGNAL(clicked()), mapper, SLOT(map()));
102   connect(ui.hostmaskFG, SIGNAL(clicked()), mapper, SLOT(map()));
103   connect(ui.hostmaskBG, SIGNAL(clicked()), mapper, SLOT(map()));
104   connect(ui.channelnameFG, SIGNAL(clicked()), mapper, SLOT(map()));
105   connect(ui.channelnameBG, SIGNAL(clicked()), mapper, SLOT(map()));
106   connect(ui.modeFlagsFG, SIGNAL(clicked()), mapper, SLOT(map()));
107   connect(ui.modeFlagsBG, SIGNAL(clicked()), mapper, SLOT(map()));
108   connect(ui.urlFG, SIGNAL(clicked()), mapper, SLOT(map()));
109   connect(ui.urlBG, SIGNAL(clicked()), mapper, SLOT(map()));
110
111   mapper->setMapping(ui.timestampFG, ui.timestampFG);
112   mapper->setMapping(ui.timestampBG, ui.timestampBG);
113   mapper->setMapping(ui.senderFG, ui.senderFG);
114   mapper->setMapping(ui.senderBG, ui.senderBG);
115   mapper->setMapping(ui.nickFG, ui.nickFG);
116   mapper->setMapping(ui.nickBG, ui.nickBG);
117   mapper->setMapping(ui.hostmaskFG, ui.hostmaskFG);
118   mapper->setMapping(ui.hostmaskBG, ui.hostmaskBG);
119   mapper->setMapping(ui.channelnameFG, ui.channelnameFG);
120   mapper->setMapping(ui.channelnameBG, ui.channelnameBG);
121   mapper->setMapping(ui.modeFlagsFG, ui.modeFlagsFG);
122   mapper->setMapping(ui.modeFlagsBG, ui.modeFlagsBG);
123   mapper->setMapping(ui.urlFG, ui.urlFG);
124   mapper->setMapping(ui.urlBG, ui.urlBG);
125
126   //Mirc Color Codes tab:
127   connect(ui.color0, SIGNAL(clicked()), mapper, SLOT(map()));
128   connect(ui.color1, SIGNAL(clicked()), mapper, SLOT(map()));
129   connect(ui.color2, SIGNAL(clicked()), mapper, SLOT(map()));
130   connect(ui.color3, SIGNAL(clicked()), mapper, SLOT(map()));
131   connect(ui.color4, SIGNAL(clicked()), mapper, SLOT(map()));
132   connect(ui.color5, SIGNAL(clicked()), mapper, SLOT(map()));
133   connect(ui.color6, SIGNAL(clicked()), mapper, SLOT(map()));
134   connect(ui.color7, SIGNAL(clicked()), mapper, SLOT(map()));
135   connect(ui.color8, SIGNAL(clicked()), mapper, SLOT(map()));
136   connect(ui.color9, SIGNAL(clicked()), mapper, SLOT(map()));
137   connect(ui.color10, SIGNAL(clicked()), mapper, SLOT(map()));
138   connect(ui.color11, SIGNAL(clicked()), mapper, SLOT(map()));
139   connect(ui.color12, SIGNAL(clicked()), mapper, SLOT(map()));
140   connect(ui.color13, SIGNAL(clicked()), mapper, SLOT(map()));
141   connect(ui.color14, SIGNAL(clicked()), mapper, SLOT(map()));
142   connect(ui.color15, SIGNAL(clicked()), mapper, SLOT(map()));
143
144   mapper->setMapping(ui.color0, ui.color0);
145   mapper->setMapping(ui.color1, ui.color1);
146   mapper->setMapping(ui.color2, ui.color2);
147   mapper->setMapping(ui.color3, ui.color3);
148   mapper->setMapping(ui.color4, ui.color4);
149   mapper->setMapping(ui.color5, ui.color5);
150   mapper->setMapping(ui.color6, ui.color6);
151   mapper->setMapping(ui.color7, ui.color7);
152   mapper->setMapping(ui.color8, ui.color8);
153   mapper->setMapping(ui.color9, ui.color9);
154   mapper->setMapping(ui.color10, ui.color10);
155   mapper->setMapping(ui.color11, ui.color11);
156   mapper->setMapping(ui.color12, ui.color12);
157   mapper->setMapping(ui.color13, ui.color13);
158   mapper->setMapping(ui.color14, ui.color14);
159   mapper->setMapping(ui.color15, ui.color15);
160
161   connect(mapper, SIGNAL(mapped(QWidget *)), this, SLOT(chooseColor(QWidget *)));
162
163   //disable unused buttons:
164   ui.errorMessageBG->setEnabled(false);
165   ui.noticeMessageBG->setEnabled(false);
166   ui.plainMessageBG->setEnabled(false);
167   ui.serverMessageBG->setEnabled(false);
168   ui.actionMessageBG->setEnabled(false);
169   ui.joinMessageBG->setEnabled(false);
170   ui.kickMessageBG->setEnabled(false);
171   ui.modeMessageBG->setEnabled(false);
172   ui.partMessageBG->setEnabled(false);
173   ui.quitMessageBG->setEnabled(false);
174   ui.renameMessageBG->setEnabled(false);
175
176   ui.timestampBG->setEnabled(false);
177   ui.senderBG->setEnabled(false);
178   ui.nickFG->setEnabled(false);
179   ui.nickBG->setEnabled(false);
180   ui.hostmaskFG->setEnabled(false);
181   ui.hostmaskBG->setEnabled(false);
182   ui.channelnameFG->setEnabled(false);
183   ui.channelnameBG->setEnabled(false);
184   ui.modeFlagsFG->setEnabled(false);
185   ui.modeFlagsBG->setEnabled(false);
186   ui.urlFG->setEnabled(false);
187   ui.urlBG->setEnabled(false);
188 }
189
190 bool ColorSettingsPage::hasDefaults() const {
191   return true;
192 }
193
194 void ColorSettingsPage::defaults() {
195   defaultBufferview();
196   defaultServerActivity();
197   defaultUserActivity();
198   defaultMessage();
199   defaultMircColorCodes();
200 }
201
202 void ColorSettingsPage::defaultBufferview() {
203   ui.inactiveActivity->setColor(QColor(Qt::gray));
204   ui.noActivity->setColor(QColor(Qt::black));
205   ui.highlightActivity->setColor(QColor(Qt::magenta));
206   ui.newMessageActivity->setColor(QColor(Qt::green));
207   ui.otherActivity->setColor(QColor(Qt::darkGreen));
208
209   widgetHasChanged();
210   bufferviewPreview();
211 }
212
213 void ColorSettingsPage::defaultServerActivity() {
214   ui.errorMessageFG->setColor(QtUi::style()->format(UiStyle::ErrorMsg, Settings::Default).foreground().color());
215   ui.errorMessageBG->setColor(QColor("white"));
216   ui.noticeMessageFG->setColor(QtUi::style()->format(UiStyle::NoticeMsg, Settings::Default).foreground().color());
217   ui.noticeMessageBG->setColor(QColor("white"));
218   ui.plainMessageFG->setColor(QtUi::style()->format(UiStyle::PlainMsg, Settings::Default).foreground().color());
219   ui.plainMessageBG->setColor(QColor("white"));
220   ui.serverMessageFG->setColor(QtUi::style()->format(UiStyle::ServerMsg, Settings::Default).foreground().color());
221   ui.serverMessageBG->setColor(QColor("white"));
222
223   widgetHasChanged();
224   chatviewPreview();
225 }
226
227 void ColorSettingsPage::defaultUserActivity() {
228   ui.actionMessageFG->setColor(QtUi::style()->format(UiStyle::ActionMsg, Settings::Default).foreground().color());
229   ui.actionMessageBG->setColor(QColor("white"));
230   ui.joinMessageFG->setColor(QtUi::style()->format(UiStyle::JoinMsg, Settings::Default).foreground().color());
231   ui.joinMessageBG->setColor(QColor("white"));
232   ui.kickMessageFG->setColor(QtUi::style()->format(UiStyle::KickMsg, Settings::Default).foreground().color());
233   ui.kickMessageBG->setColor(QColor("white"));
234   ui.modeMessageFG->setColor(QtUi::style()->format(UiStyle::ModeMsg, Settings::Default).foreground().color());
235   ui.modeMessageBG->setColor(QColor("white"));
236   ui.partMessageFG->setColor(QtUi::style()->format(UiStyle::PartMsg, Settings::Default).foreground().color());
237   ui.partMessageBG->setColor(QColor("white"));
238   ui.quitMessageFG->setColor(QtUi::style()->format(UiStyle::QuitMsg, Settings::Default).foreground().color());
239   ui.quitMessageBG->setColor(QColor("white"));
240   ui.renameMessageFG->setColor(QtUi::style()->format(UiStyle::RenameMsg, Settings::Default).foreground().color());
241   ui.renameMessageBG->setColor(QColor("white"));
242
243   widgetHasChanged();
244   chatviewPreview();
245 }
246
247 void ColorSettingsPage::defaultMessage() {
248   ui.timestampFG->setColor(QtUi::style()->format(UiStyle::Timestamp, Settings::Default).foreground().color());
249   ui.senderFG->setColor(QtUi::style()->format(UiStyle::Sender, Settings::Default).foreground().color());
250
251   ui.timestampBG->setColor(QColor("white"));
252   ui.senderBG->setColor(QColor("white"));
253   ui.nickFG->setColor(QColor("black"));
254   ui.nickBG->setColor(QColor("white"));
255   ui.hostmaskFG->setColor(QColor("black"));
256   ui.hostmaskBG->setColor(QColor("white"));
257   ui.channelnameFG->setColor(QColor("black"));
258   ui.channelnameBG->setColor(QColor("white"));
259   ui.modeFlagsFG->setColor(QColor("black"));
260   ui.modeFlagsBG->setColor(QColor("white"));
261   ui.urlFG->setColor(QColor("black"));
262   ui.urlBG->setColor(QColor("white"));
263
264   widgetHasChanged();
265   chatviewPreview();
266 }
267
268 void ColorSettingsPage::defaultMircColorCodes() {
269   ui.color0->setColor(QtUi::style()->format(UiStyle::FgCol00, Settings::Default).foreground().color());
270   ui.color1->setColor(QtUi::style()->format(UiStyle::FgCol01, Settings::Default).foreground().color());
271   ui.color2->setColor(QtUi::style()->format(UiStyle::FgCol02, Settings::Default).foreground().color());
272   ui.color3->setColor(QtUi::style()->format(UiStyle::FgCol03, Settings::Default).foreground().color());
273   ui.color4->setColor(QtUi::style()->format(UiStyle::FgCol04, Settings::Default).foreground().color());
274   ui.color5->setColor(QtUi::style()->format(UiStyle::FgCol05, Settings::Default).foreground().color());
275   ui.color6->setColor(QtUi::style()->format(UiStyle::FgCol06, Settings::Default).foreground().color());
276   ui.color7->setColor(QtUi::style()->format(UiStyle::FgCol07, Settings::Default).foreground().color());
277   ui.color8->setColor(QtUi::style()->format(UiStyle::FgCol08, Settings::Default).foreground().color());
278   ui.color9->setColor(QtUi::style()->format(UiStyle::FgCol09, Settings::Default).foreground().color());
279   ui.color10->setColor(QtUi::style()->format(UiStyle::FgCol10, Settings::Default).foreground().color());
280   ui.color11->setColor(QtUi::style()->format(UiStyle::FgCol11, Settings::Default).foreground().color());
281   ui.color12->setColor(QtUi::style()->format(UiStyle::FgCol12, Settings::Default).foreground().color());
282   ui.color13->setColor(QtUi::style()->format(UiStyle::FgCol13, Settings::Default).foreground().color());
283   ui.color14->setColor(QtUi::style()->format(UiStyle::FgCol14, Settings::Default).foreground().color());
284   ui.color15->setColor(QtUi::style()->format(UiStyle::FgCol15, Settings::Default).foreground().color());
285
286   widgetHasChanged();
287 }
288
289 void ColorSettingsPage::load() {
290   QtUiSettings s("QtUi/Colors");
291   settings["InactiveActivity"] = s.value("inactiveActivity", QVariant(QColor(Qt::gray)));
292   ui.inactiveActivity->setColor(settings["InactiveActivity"].value<QColor>());
293   settings["NoActivity"] = s.value("noActivity", QVariant(QColor(Qt::black)));
294   ui.noActivity->setColor(settings["NoActivity"].value<QColor>());
295   settings["HighlightActivity"] = s.value("highlightActivity", QVariant(QColor(Qt::magenta)));
296   ui.highlightActivity->setColor(settings["HighlightActivity"].value<QColor>());
297   settings["NewMessageActivity"] = s.value("newMessageActivity", QVariant(QColor(Qt::green)));
298   ui.newMessageActivity->setColor(settings["NewMessageActivity"].value<QColor>());
299   settings["OtherActivity"] = s.value("otherActivity", QVariant(QColor(Qt::darkGreen)));
300   ui.otherActivity->setColor(settings["OtherActivity"].value<QColor>());
301
302   ui.actionMessageFG->setColor(QtUi::style()->format(UiStyle::ActionMsg).foreground().color());
303   ui.errorMessageFG->setColor(QtUi::style()->format(UiStyle::ErrorMsg).foreground().color());
304   ui.joinMessageFG->setColor(QtUi::style()->format(UiStyle::JoinMsg).foreground().color());
305   ui.kickMessageFG->setColor(QtUi::style()->format(UiStyle::KickMsg).foreground().color());
306   ui.modeMessageFG->setColor(QtUi::style()->format(UiStyle::ModeMsg).foreground().color());
307   ui.noticeMessageFG->setColor(QtUi::style()->format(UiStyle::NoticeMsg).foreground().color());
308   ui.partMessageFG->setColor(QtUi::style()->format(UiStyle::PartMsg).foreground().color());
309   ui.plainMessageFG->setColor(QtUi::style()->format(UiStyle::PlainMsg).foreground().color());
310   ui.quitMessageFG->setColor(QtUi::style()->format(UiStyle::QuitMsg).foreground().color());
311   ui.renameMessageFG->setColor(QtUi::style()->format(UiStyle::RenameMsg).foreground().color());
312   ui.serverMessageFG->setColor(QtUi::style()->format(UiStyle::ServerMsg).foreground().color());
313
314   settings["ActionMessageBG"] = s.value("actionMessageBG", QVariant(QColor("white")));
315   ui.actionMessageBG->setColor(settings["ActionMessageBG"].value<QColor>());
316   settings["ErrorMessageBG"] = s.value("errorMessageBG", QVariant(QColor("white")));
317   ui.errorMessageBG->setColor(settings["ErrorMessageBG"].value<QColor>());
318   settings["JoinMessageBG"] = s.value("joinMessageBG", QVariant(QColor("white")));
319   ui.joinMessageBG->setColor(settings["JoinMessageBG"].value<QColor>());
320   settings["KickMessageBG"] = s.value("kickMessageBG", QVariant(QColor("white")));
321   ui.kickMessageBG->setColor(settings["KickMessageBG"].value<QColor>());
322   settings["ModeMessageBG"] = s.value("modeMessageBG", QVariant(QColor("white")));
323   ui.modeMessageBG->setColor(settings["ModeMessageBG"].value<QColor>());
324   settings["NoticeMessageBG"] = s.value("noticeMessageBG", QVariant(QColor("white")));
325   ui.noticeMessageBG->setColor(settings["NoticeMessageBG"].value<QColor>());
326   settings["PartMessageBG"] = s.value("partMessageBG", QVariant(QColor("white")));
327   ui.partMessageBG->setColor(settings["PartMessageBG"].value<QColor>());
328   settings["PlainMessageBG"] = s.value("plainMessageBG", QVariant(QColor("white")));
329   ui.plainMessageBG->setColor(settings["PlainMessageBG"].value<QColor>());
330   settings["QuitMessageBG"] = s.value("quitMessageBG", QVariant(QColor("white")));
331   ui.quitMessageBG->setColor(settings["QuitMessageBG"].value<QColor>());
332   settings["RenameMessageBG"] = s.value("renameMessageBG", QVariant(QColor("white")));
333   ui.renameMessageBG->setColor(settings["RenameMessageBG"].value<QColor>());
334   settings["ServerMessageBG"] = s.value("serverMessageBG", QVariant(QColor("white")));
335   ui.serverMessageBG->setColor(settings["ServerMessageBG"].value<QColor>());
336
337   ui.timestampFG->setColor(QtUi::style()->format(UiStyle::Timestamp).foreground().color());
338   ui.senderFG->setColor(QtUi::style()->format(UiStyle::Sender).foreground().color());
339
340   settings["TimestampBG"] = s.value("timestampBG", QVariant(QColor("white")));
341   ui.timestampBG->setColor(settings["TimestampBG"].value<QColor>());
342   settings["SenderBG"] = s.value("senderBG", QVariant(QColor("white")));
343   ui.senderBG->setColor(settings["SenderBG"].value<QColor>());
344   settings["NickFG"] = s.value("nickFG", QVariant(QColor("black")));
345   ui.nickFG->setColor(settings["NickFG"].value<QColor>());
346   settings["NickBG"] = s.value("nickBG", QVariant(QColor("white")));
347   ui.nickBG->setColor(settings["NickBG"].value<QColor>());
348   settings["HostmaskFG"] = s.value("hostmaskFG", QVariant(QColor("black")));
349   ui.hostmaskFG->setColor(settings["HostmaskFG"].value<QColor>());
350   settings["HostmaskBG"] = s.value("hostmaskBG", QVariant(QColor("white")));
351   ui.hostmaskBG->setColor(settings["HostmaskBG"].value<QColor>());
352   settings["ChannelnameFG"] = s.value("channelnameFG", QVariant(QColor("black")));
353   ui.channelnameFG->setColor(settings["ChannelnameFG"].value<QColor>());
354   settings["ChannelnameBG"] = s.value("channelnameBG", QVariant(QColor("white")));
355   ui.channelnameBG->setColor(settings["ChannelnameBG"].value<QColor>());
356   settings["ModeFlagsFG"] = s.value("modeFlagsFG", QVariant(QColor("black")));
357   ui.modeFlagsFG->setColor(settings["ModeFlagsFG"].value<QColor>());
358   settings["ModeFlagsBG"] = s.value("modeFlagsBG", QVariant(QColor("white")));
359   ui.modeFlagsBG->setColor(settings["ModeFlagsBG"].value<QColor>());
360   settings["UrlFG"] = s.value("urlFG", QVariant(QColor("black")));
361   ui.urlFG->setColor(settings["UrlFG"].value<QColor>());
362   settings["UrlBG"] = s.value("urlBG", QVariant(QColor("white")));
363   ui.urlBG->setColor(settings["UrlBG"].value<QColor>());
364
365   ui.color0->setColor(QtUi::style()->format(UiStyle::FgCol00).foreground().color());
366   ui.color1->setColor(QtUi::style()->format(UiStyle::FgCol01).foreground().color());
367   ui.color2->setColor(QtUi::style()->format(UiStyle::FgCol02).foreground().color());
368   ui.color3->setColor(QtUi::style()->format(UiStyle::FgCol03).foreground().color());
369   ui.color4->setColor(QtUi::style()->format(UiStyle::FgCol04).foreground().color());
370   ui.color5->setColor(QtUi::style()->format(UiStyle::FgCol05).foreground().color());
371   ui.color6->setColor(QtUi::style()->format(UiStyle::FgCol06).foreground().color());
372   ui.color7->setColor(QtUi::style()->format(UiStyle::FgCol07).foreground().color());
373   ui.color8->setColor(QtUi::style()->format(UiStyle::FgCol08).foreground().color());
374   ui.color9->setColor(QtUi::style()->format(UiStyle::FgCol09).foreground().color());
375   ui.color10->setColor(QtUi::style()->format(UiStyle::FgCol10).foreground().color());
376   ui.color11->setColor(QtUi::style()->format(UiStyle::FgCol11).foreground().color());
377   ui.color12->setColor(QtUi::style()->format(UiStyle::FgCol12).foreground().color());
378   ui.color13->setColor(QtUi::style()->format(UiStyle::FgCol13).foreground().color());
379   ui.color14->setColor(QtUi::style()->format(UiStyle::FgCol14).foreground().color());
380   ui.color15->setColor(QtUi::style()->format(UiStyle::FgCol15).foreground().color());
381
382   setChangedState(false);
383
384   bufferviewPreview();
385   chatviewPreview();
386 }
387
388 void ColorSettingsPage::save() {
389   QtUiSettings s("QtUi/Colors");
390   s.setValue("inactiveActivity", ui.inactiveActivity->color());
391   s.setValue("noActivity", ui.noActivity->color());
392   s.setValue("highlightActivity", ui.highlightActivity->color());
393   s.setValue("newMessageActivity", ui.newMessageActivity->color());
394   s.setValue("otherActivity", ui.otherActivity->color());
395
396   saveColor(UiStyle::ErrorMsg, ui.errorMessageFG->color());
397   s.setValue("errorMessageBG", ui.errorMessageBG->color());
398   saveColor(UiStyle::NoticeMsg, ui.noticeMessageFG->color());
399   s.setValue("noticeMessageBG", ui.noticeMessageBG->color());
400   saveColor(UiStyle::PlainMsg, ui.plainMessageFG->color());
401   s.setValue("plainMessageBG", ui.plainMessageBG->color());
402   saveColor(UiStyle::ServerMsg, ui.serverMessageFG->color());
403   s.setValue("serverMessageBG", ui.serverMessageBG->color());
404   saveColor(UiStyle::ActionMsg, ui.actionMessageFG->color());
405   s.setValue("actionMessageBG", ui.actionMessageBG->color());
406   saveColor(UiStyle::JoinMsg, ui.joinMessageFG->color());
407   s.setValue("joinMessageBG", ui.joinMessageBG->color());
408   saveColor(UiStyle::KickMsg, ui.kickMessageFG->color());
409   s.setValue("kickMessageBG", ui.kickMessageBG->color());
410   saveColor(UiStyle::ModeMsg, ui.modeMessageFG->color());
411   s.setValue("modeMessageBG", ui.modeMessageBG->color());
412   saveColor(UiStyle::PartMsg, ui.partMessageFG->color());
413   s.setValue("partMessageBG", ui.partMessageBG->color());
414   saveColor(UiStyle::QuitMsg, ui.quitMessageFG->color());
415   s.setValue("quitMessageBG", ui.quitMessageBG->color());
416   saveColor(UiStyle::RenameMsg, ui.renameMessageFG->color());
417   s.setValue("renameMessageBG", ui.renameMessageBG->color());
418
419   saveColor(UiStyle::Timestamp, ui.timestampFG->color());
420   saveColor(UiStyle::Sender, ui.senderFG->color());
421
422   s.setValue("timestampBG", ui.timestampBG->color());
423   s.setValue("senderBG", ui.senderBG->color());
424   s.setValue("nickFG", ui.nickFG->color());
425   s.setValue("nickBG", ui.nickBG->color());
426   s.setValue("hostmaskFG", ui.hostmaskFG->color());
427   s.setValue("hostmaskBG", ui.hostmaskBG->color());
428   s.setValue("channelnameFG", ui.channelnameFG->color());
429   s.setValue("channelnameBG", ui.channelnameBG->color());
430   s.setValue("modeFlagsFG", ui.modeFlagsFG->color());
431   s.setValue("modeFlagsBG", ui.modeFlagsBG->color());
432   s.setValue("urlFG", ui.urlFG->color());
433   s.setValue("urlBG", ui.urlBG->color());
434
435   saveColor(UiStyle::FgCol00, ui.color0->color());
436   saveColor(UiStyle::FgCol01, ui.color1->color());
437   saveColor(UiStyle::FgCol02, ui.color2->color());
438   saveColor(UiStyle::FgCol03, ui.color3->color());
439   saveColor(UiStyle::FgCol04, ui.color4->color());
440   saveColor(UiStyle::FgCol05, ui.color5->color());
441   saveColor(UiStyle::FgCol06, ui.color6->color());
442   saveColor(UiStyle::FgCol07, ui.color7->color());
443   saveColor(UiStyle::FgCol08, ui.color8->color());
444   saveColor(UiStyle::FgCol09, ui.color9->color());
445   saveColor(UiStyle::FgCol10, ui.color10->color());
446   saveColor(UiStyle::FgCol11, ui.color11->color());
447   saveColor(UiStyle::FgCol12, ui.color12->color());
448   saveColor(UiStyle::FgCol13, ui.color13->color());
449   saveColor(UiStyle::FgCol14, ui.color14->color());
450   saveColor(UiStyle::FgCol15, ui.color15->color());
451
452   saveColor(UiStyle::BgCol00, ui.color0->color());
453   saveColor(UiStyle::BgCol01, ui.color1->color());
454   saveColor(UiStyle::BgCol02, ui.color2->color());
455   saveColor(UiStyle::BgCol03, ui.color3->color());
456   saveColor(UiStyle::BgCol04, ui.color4->color());
457   saveColor(UiStyle::BgCol05, ui.color5->color());
458   saveColor(UiStyle::BgCol06, ui.color6->color());
459   saveColor(UiStyle::BgCol07, ui.color7->color());
460   saveColor(UiStyle::BgCol08, ui.color8->color());
461   saveColor(UiStyle::BgCol09, ui.color9->color());
462   saveColor(UiStyle::BgCol10, ui.color10->color());
463   saveColor(UiStyle::BgCol11, ui.color11->color());
464   saveColor(UiStyle::BgCol12, ui.color12->color());
465   saveColor(UiStyle::BgCol13, ui.color13->color());
466   saveColor(UiStyle::BgCol14, ui.color14->color());
467   saveColor(UiStyle::BgCol15, ui.color15->color());
468
469   load(); //TODO: remove when settings hash map is unnescessary
470   setChangedState(false);
471 }
472
473 void ColorSettingsPage::saveColor(UiStyle::FormatType formatType, const QColor &color) {
474   QTextCharFormat format = QtUi::style()->format(formatType);
475   format.setForeground(QBrush(color));
476   QtUi::style()->setFormat(formatType, format, Settings::Custom);
477 }
478
479 void ColorSettingsPage::widgetHasChanged() {
480   bool changed = testHasChanged();
481   if(changed != hasChanged()) setChangedState(changed);
482 }
483
484 bool ColorSettingsPage::testHasChanged() {
485   if(settings["InactiveActivity"].value<QColor>() != ui.inactiveActivity->color()) return true;
486   if(settings["NoActivity"].value<QColor>() != ui.noActivity->color()) return true;
487   if(settings["HighlightActivity"].value<QColor>() != ui.highlightActivity->color()) return true;
488   if(settings["NewMessageActivity"].value<QColor>() != ui.newMessageActivity->color()) return true;
489   if(settings["OtherActivity"].value<QColor>() != ui.otherActivity->color()) return true;
490
491   if(QtUi::style()->format(UiStyle::ErrorMsg).foreground().color() != ui.errorMessageFG->color()) return true;
492   if(settings["ErrorMessageBG"].value<QColor>() != ui.errorMessageBG->color()) return true;
493   if(QtUi::style()->format(UiStyle::NoticeMsg).foreground().color() != ui.noticeMessageFG->color()) return true;
494   if(settings["NoticeMessageBG"].value<QColor>() != ui.noticeMessageBG->color()) return true;
495   if(QtUi::style()->format(UiStyle::PlainMsg).foreground().color() != ui.plainMessageFG->color()) return true;
496   if(settings["PlainMessageBG"].value<QColor>() != ui.plainMessageBG->color()) return true;
497   if(QtUi::style()->format(UiStyle::ServerMsg).foreground().color() != ui.serverMessageFG->color()) return true;
498   if(settings["ServerMessageBG"].value<QColor>() != ui.serverMessageBG->color()) return true;
499   if(QtUi::style()->format(UiStyle::ActionMsg).foreground().color() != ui.actionMessageFG->color()) return true;
500   if(settings["ActionMessageBG"].value<QColor>() != ui.actionMessageBG->color()) return true;
501   if(QtUi::style()->format(UiStyle::JoinMsg).foreground().color() != ui.joinMessageFG->color()) return true;
502   if(settings["JoinMessageBG"].value<QColor>() != ui.joinMessageBG->color()) return true;
503   if(QtUi::style()->format(UiStyle::KickMsg).foreground().color() != ui.kickMessageFG->color()) return true;
504   if(settings["KickMessageBG"].value<QColor>() != ui.kickMessageBG->color()) return true;
505   if(QtUi::style()->format(UiStyle::ModeMsg).foreground().color() != ui.modeMessageFG->color()) return true;
506   if(settings["ModeMessageBG"].value<QColor>() != ui.modeMessageBG->color()) return true;
507   if(QtUi::style()->format(UiStyle::PartMsg).foreground().color() != ui.partMessageFG->color()) return true;
508   if(settings["PartMessageBG"].value<QColor>() != ui.partMessageBG->color()) return true;
509   if(QtUi::style()->format(UiStyle::QuitMsg).foreground().color() != ui.quitMessageFG->color()) return true;
510   if(settings["QuitMessageBG"].value<QColor>() != ui.quitMessageBG->color()) return true;
511   if(QtUi::style()->format(UiStyle::RenameMsg).foreground().color() != ui.renameMessageFG->color()) return true;
512   if(settings["RenameMessageBG"].value<QColor>() != ui.renameMessageBG->color()) return true;
513
514   if(QtUi::style()->format(UiStyle::Timestamp).foreground().color() != ui.timestampFG->color()) return true;
515   if(QtUi::style()->format(UiStyle::Sender).foreground().color() != ui.senderFG->color()) return true;
516
517   if(settings["TimestampBG"].value<QColor>() != ui.timestampBG->color()) return true;
518   if(settings["SenderBG"].value<QColor>() != ui.senderBG->color()) return true;
519   if(settings["NickFG"].value<QColor>() != ui.nickFG->color()) return true;
520   if(settings["NickBG"].value<QColor>() != ui.nickBG->color()) return true;
521   if(settings["HostmaskFG"].value<QColor>() != ui.hostmaskFG->color()) return true;
522   if(settings["HostmaskBG"].value<QColor>() != ui.hostmaskBG->color()) return true;
523   if(settings["ChannelnameFG"].value<QColor>() != ui.channelnameFG->color()) return true;
524   if(settings["ChannelnameBG"].value<QColor>() != ui.channelnameBG->color()) return true;
525   if(settings["ModeFlagsFG"].value<QColor>() != ui.modeFlagsFG->color()) return true;
526   if(settings["ModeFlagsBG"].value<QColor>() != ui.modeFlagsBG->color()) return true;
527   if(settings["UrlFG"].value<QColor>() != ui.urlFG->color()) return true;
528   if(settings["UrlBG"].value<QColor>() != ui.urlBG->color()) return true;
529
530   if(QtUi::style()->format(UiStyle::FgCol00).foreground().color() != ui.color0->color()) return true;
531   if(QtUi::style()->format(UiStyle::FgCol01).foreground().color() != ui.color1->color()) return true;
532   if(QtUi::style()->format(UiStyle::FgCol02).foreground().color() != ui.color2->color()) return true;
533   if(QtUi::style()->format(UiStyle::FgCol03).foreground().color() != ui.color3->color()) return true;
534   if(QtUi::style()->format(UiStyle::FgCol04).foreground().color() != ui.color4->color()) return true;
535   if(QtUi::style()->format(UiStyle::FgCol05).foreground().color() != ui.color5->color()) return true;
536   if(QtUi::style()->format(UiStyle::FgCol06).foreground().color() != ui.color6->color()) return true;
537   if(QtUi::style()->format(UiStyle::FgCol07).foreground().color() != ui.color7->color()) return true;
538   if(QtUi::style()->format(UiStyle::FgCol08).foreground().color() != ui.color8->color()) return true;
539   if(QtUi::style()->format(UiStyle::FgCol09).foreground().color() != ui.color9->color()) return true;
540   if(QtUi::style()->format(UiStyle::FgCol10).foreground().color() != ui.color10->color()) return true;
541   if(QtUi::style()->format(UiStyle::FgCol11).foreground().color() != ui.color11->color()) return true;
542   if(QtUi::style()->format(UiStyle::FgCol12).foreground().color() != ui.color12->color()) return true;
543   if(QtUi::style()->format(UiStyle::FgCol13).foreground().color() != ui.color13->color()) return true;
544   if(QtUi::style()->format(UiStyle::FgCol14).foreground().color() != ui.color14->color()) return true;
545   if(QtUi::style()->format(UiStyle::FgCol15).foreground().color() != ui.color15->color()) return true;
546
547   return false;
548 }
549
550 void ColorSettingsPage::chooseColor(QWidget *widget) {
551   ColorButton *button = qobject_cast<ColorButton *>(widget);
552   Q_ASSERT(button);
553   QColor color = QColorDialog::getColor(button->color(), this);
554   if(color.isValid()) {
555     button->setColor(color);
556   }
557   widgetHasChanged();
558   bufferviewPreview();
559   chatviewPreview();
560 }
561
562 void ColorSettingsPage::chatviewPreview() {
563   //TODO: update chatviewPreview
564 }
565
566 void ColorSettingsPage::bufferviewPreview() {
567   ui.bufferviewPreview->clear();
568   ui.bufferviewPreview->setColumnCount(1);
569   ui.bufferviewPreview->setHeaderLabels(QStringList("Buffers"));
570
571   QTreeWidgetItem *topLevelItem = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("network")));
572   ui.bufferviewPreview->insertTopLevelItem(0, topLevelItem);
573
574   QList<QTreeWidgetItem *> items;
575   items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("Status Buffer"))));
576
577   QTreeWidgetItem *inactive = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#inactive channel")));
578   items.append(inactive);
579   inactive->setForeground(0, QBrush(ui.inactiveActivity->color()));
580
581   QTreeWidgetItem *noActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#channel with no activity")));
582   items.append(noActivity);
583   noActivity->setForeground(0, QBrush(ui.noActivity->color()));
584
585   QTreeWidgetItem *highlightActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#channel with highlight")));
586   items.append(highlightActivity);
587   highlightActivity->setForeground(0, QBrush(ui.highlightActivity->color()));
588
589   QTreeWidgetItem *newMessageActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#channel with new message")));
590   items.append(newMessageActivity);
591   newMessageActivity->setForeground(0, QBrush(ui.newMessageActivity->color()));
592
593   QTreeWidgetItem *otherActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("#channel with other activity")));
594   items.append(otherActivity);
595   otherActivity->setForeground(0, QBrush(ui.otherActivity->color()));
596
597   topLevelItem->insertChildren(0, items);
598   ui.bufferviewPreview->expandItem(topLevelItem);
599 }
600