01bc5177dbc96e658d4c6a3add7adf4eeda059cc
[quassel.git] / src / qtui / settingspages / colorsettingspage.cpp
1 /***************************************************************************
2  *   Copyright (C) 2005-09 by the Quassel Project                          *
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 "qtuistyle.h"
26 #include "colorbutton.h"
27
28 #include <QColorDialog>
29 #include <QPainter>
30
31 ColorSettingsPage::ColorSettingsPage(QWidget *parent)
32   : SettingsPage(tr("Appearance"), tr("Color settings"), parent),
33     mapper(new QSignalMapper(this))
34 {
35   ui.setupUi(this);
36
37   foreach(ColorButton *button, findChildren<ColorButton *>()) {
38     connect(button, SIGNAL(clicked()), mapper, SLOT(map()));
39     mapper->setMapping(button, button);
40   }
41   foreach(QCheckBox *checkBox, findChildren<QCheckBox *>()) {
42     connect(checkBox, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
43   }
44
45   connect(mapper, SIGNAL(mapped(QWidget *)), this, SLOT(chooseColor(QWidget *)));
46
47   foreach(QWidget *widget, findChildren<QWidget *>()) {
48     if(widget->property("NotInUse").toBool()) {
49       widget->setEnabled(false);
50       widget->hide();
51     }
52   }
53 }
54
55 bool ColorSettingsPage::hasDefaults() const {
56   return true;
57 }
58
59 void ColorSettingsPage::defaults() {
60   defaultBufferview();
61   defaultServerActivity();
62   defaultUserActivity();
63   defaultMessage();
64   defaultMircColorCodes();
65
66   widgetHasChanged();
67   bufferviewPreview();
68   chatviewPreview();
69 }
70
71 void ColorSettingsPage::defaultBufferview() {
72   ui.highlightActivityFG->setColor(QColor(Qt::magenta));
73   ui.highlightActivityBG->setColor(QColor(Qt::white));
74   ui.highlightActivityBG->setEnabled(false);
75   ui.highlightActivityUseBG->setChecked(false);
76   ui.newMessageActivityFG->setColor(QColor(Qt::green));
77   ui.newMessageActivityBG->setColor(QColor(Qt::white));
78   ui.newMessageActivityBG->setEnabled(false);
79   ui.newMessageActivityUseBG->setChecked(false);
80   ui.otherActivityFG->setColor(QColor(Qt::darkGreen));
81   ui.otherActivityBG->setColor(QColor(Qt::white));
82   ui.otherActivityBG->setEnabled(false);
83   ui.otherActivityUseBG->setChecked(false);
84 }
85
86 void ColorSettingsPage::defaultServerActivity() {
87   ui.errorMessageFG->setColor(QtUi::style()->format(UiStyle::ErrorMsg, Settings::Default).foreground().color());
88   ui.errorMessageBG->setColor(QColor("white"));
89   ui.errorMessageBG->setEnabled(false);
90   ui.errorMessageUseBG->setChecked(false);
91   ui.noticeMessageFG->setColor(QtUi::style()->format(UiStyle::NoticeMsg, Settings::Default).foreground().color());
92   ui.noticeMessageBG->setColor(QColor("white"));
93   ui.noticeMessageBG->setEnabled(false);
94   ui.noticeMessageUseBG->setChecked(false);
95   ui.plainMessageFG->setColor(QtUi::style()->format(UiStyle::PlainMsg, Settings::Default).foreground().color());
96   ui.plainMessageBG->setColor(QColor("white"));
97   ui.plainMessageBG->setEnabled(false);
98   ui.plainMessageUseBG->setChecked(false);
99   ui.serverMessageFG->setColor(QtUi::style()->format(UiStyle::ServerMsg, Settings::Default).foreground().color());
100   ui.serverMessageBG->setColor(QColor("white"));
101   ui.serverMessageBG->setEnabled(false);
102   ui.serverMessageUseBG->setChecked(false);
103   ui.highlightColor->setColor(QColor("lightcoral"));
104 }
105
106 void ColorSettingsPage::defaultUserActivity() {
107   ui.actionMessageFG->setColor(QtUi::style()->format(UiStyle::ActionMsg, Settings::Default).foreground().color());
108   ui.actionMessageBG->setColor(QColor("white"));
109   ui.actionMessageBG->setEnabled(false);
110   ui.actionMessageUseBG->setChecked(false);
111   ui.joinMessageFG->setColor(QtUi::style()->format(UiStyle::JoinMsg, Settings::Default).foreground().color());
112   ui.joinMessageBG->setColor(QColor("white"));
113   ui.joinMessageBG->setEnabled(false);
114   ui.joinMessageUseBG->setChecked(false);
115   ui.kickMessageFG->setColor(QtUi::style()->format(UiStyle::KickMsg, Settings::Default).foreground().color());
116   ui.kickMessageBG->setColor(QColor("white"));
117   ui.kickMessageBG->setEnabled(false);
118   ui.kickMessageUseBG->setChecked(false);
119   ui.modeMessageFG->setColor(QtUi::style()->format(UiStyle::ModeMsg, Settings::Default).foreground().color());
120   ui.modeMessageBG->setColor(QColor("white"));
121   ui.modeMessageBG->setEnabled(false);
122   ui.modeMessageUseBG->setChecked(false);
123   ui.partMessageFG->setColor(QtUi::style()->format(UiStyle::PartMsg, Settings::Default).foreground().color());
124   ui.partMessageBG->setColor(QColor("white"));
125   ui.partMessageBG->setEnabled(false);
126   ui.partMessageUseBG->setChecked(false);
127   ui.quitMessageFG->setColor(QtUi::style()->format(UiStyle::QuitMsg, Settings::Default).foreground().color());
128   ui.quitMessageBG->setColor(QColor("white"));
129   ui.quitMessageBG->setEnabled(false);
130   ui.quitMessageUseBG->setChecked(false);
131   ui.renameMessageFG->setColor(QtUi::style()->format(UiStyle::RenameMsg, Settings::Default).foreground().color());
132   ui.renameMessageBG->setColor(QColor("white"));
133   ui.renameMessageBG->setEnabled(false);
134   ui.renameMessageUseBG->setChecked(false);
135 }
136
137 void ColorSettingsPage::defaultMessage() {
138   ui.timestampFG->setColor(QtUi::style()->format(UiStyle::Timestamp, Settings::Default).foreground().color());
139   ui.timestampBG->setColor(QColor("white"));
140   ui.timestampBG->setEnabled(false);
141   ui.timestampUseBG->setChecked(false);
142   ui.senderFG->setColor(QtUi::style()->format(UiStyle::Sender, Settings::Default).foreground().color());
143   ui.senderBG->setColor(QColor("white"));
144   ui.senderBG->setEnabled(false);
145   ui.senderUseBG->setChecked(false);
146   ui.newMsgMarkerFG->setColor(Qt::red);
147
148   /*
149   ui.nickFG->setColor(QColor("black"));
150   ui.nickBG->setColor(QColor("white"));
151   ui.nickBG->setEnabled(false);
152   ui.nickUseBG->setChecked(false);
153   ui.hostmaskFG->setColor(QColor("black"));
154   ui.hostmaskBG->setColor(QColor("white"));
155   ui.hostmaskBG->setEnabled(false);
156   ui.hostmaskUseBG->setChecked(false);
157   ui.channelnameFG->setColor(QColor("black"));
158   ui.channelnameBG->setColor(QColor("white"));
159   ui.channelnameBG->setEnabled(false);
160   ui.channelnameUseBG->setChecked(false);
161   ui.modeFlagsFG->setColor(QColor("black"));
162   ui.modeFlagsBG->setColor(QColor("white"));
163   ui.modeFlagsBG->setEnabled(false);
164   ui.modeFlagsUseBG->setChecked(false);
165   ui.urlFG->setColor(QColor("black"));
166   ui.urlBG->setColor(QColor("white"));
167   ui.urlBG->setEnabled(false);
168   ui.urlUseBG->setChecked(false);
169   */
170 }
171
172 void ColorSettingsPage::defaultMircColorCodes() {
173   ui.color0->setColor(QtUi::style()->format(UiStyle::FgCol00, Settings::Default).foreground().color());
174   ui.color1->setColor(QtUi::style()->format(UiStyle::FgCol01, Settings::Default).foreground().color());
175   ui.color2->setColor(QtUi::style()->format(UiStyle::FgCol02, Settings::Default).foreground().color());
176   ui.color3->setColor(QtUi::style()->format(UiStyle::FgCol03, Settings::Default).foreground().color());
177   ui.color4->setColor(QtUi::style()->format(UiStyle::FgCol04, Settings::Default).foreground().color());
178   ui.color5->setColor(QtUi::style()->format(UiStyle::FgCol05, Settings::Default).foreground().color());
179   ui.color6->setColor(QtUi::style()->format(UiStyle::FgCol06, Settings::Default).foreground().color());
180   ui.color7->setColor(QtUi::style()->format(UiStyle::FgCol07, Settings::Default).foreground().color());
181   ui.color8->setColor(QtUi::style()->format(UiStyle::FgCol08, Settings::Default).foreground().color());
182   ui.color9->setColor(QtUi::style()->format(UiStyle::FgCol09, Settings::Default).foreground().color());
183   ui.color10->setColor(QtUi::style()->format(UiStyle::FgCol10, Settings::Default).foreground().color());
184   ui.color11->setColor(QtUi::style()->format(UiStyle::FgCol11, Settings::Default).foreground().color());
185   ui.color12->setColor(QtUi::style()->format(UiStyle::FgCol12, Settings::Default).foreground().color());
186   ui.color13->setColor(QtUi::style()->format(UiStyle::FgCol13, Settings::Default).foreground().color());
187   ui.color14->setColor(QtUi::style()->format(UiStyle::FgCol14, Settings::Default).foreground().color());
188   ui.color15->setColor(QtUi::style()->format(UiStyle::FgCol15, Settings::Default).foreground().color());
189 }
190
191 void ColorSettingsPage::load() {
192   QtUiStyleSettings s("Colors");
193   settings["HighlightActivityFG"] = s.value("highlightActivityFG", QVariant(QColor(Qt::magenta)));
194   ui.highlightActivityFG->setColor(settings["HighlightActivityFG"].value<QColor>());
195   settings["HighlightActivityBG"] = s.value("highlightActivityBG", QVariant(QColor(Qt::white)));
196   ui.highlightActivityBG->setColor(settings["HighlightActivityBG"].value<QColor>());
197   settings["HighlightActivityUseBG"] = s.value("highlightActivityUseBG");
198   ui.highlightActivityUseBG->setChecked(settings["HighlightActivityUseBG"].toBool());
199
200   settings["NewMessageActivityFG"] = s.value("newMessageActivityFG", QVariant(QColor(Qt::green)));
201   ui.newMessageActivityFG->setColor(settings["NewMessageActivityFG"].value<QColor>());
202   settings["NewMessageActivityBG"] = s.value("newMessageActivityBG", QVariant(QColor(Qt::white)));
203   ui.newMessageActivityBG->setColor(settings["NewMessageActivityBG"].value<QColor>());
204   settings["NewMessageActivityUseBG"] = s.value("newMessageActivityUseBG");
205   ui.newMessageActivityUseBG->setChecked(settings["NewMessageActivityUseBG"].toBool());
206
207   settings["OtherActivityFG"] = s.value("otherActivityFG", QVariant(QColor(Qt::darkGreen)));
208   ui.otherActivityFG->setColor(settings["OtherActivityFG"].value<QColor>());
209   settings["OtherActivityBG"] = s.value("otherActivityBG", QVariant(QColor(Qt::white)));
210   ui.otherActivityBG->setColor(settings["OtherActivityBG"].value<QColor>());
211   settings["OtherActivityUseBG"] = s.value("otherActivityUseBG");
212   ui.otherActivityUseBG->setChecked(settings["OtherActivityUseBG"].toBool());
213
214   ui.actionMessageFG->setColor(QtUi::style()->format(UiStyle::ActionMsg).foreground().color());
215   ui.errorMessageFG->setColor(QtUi::style()->format(UiStyle::ErrorMsg).foreground().color());
216   ui.joinMessageFG->setColor(QtUi::style()->format(UiStyle::JoinMsg).foreground().color());
217   ui.kickMessageFG->setColor(QtUi::style()->format(UiStyle::KickMsg).foreground().color());
218   ui.modeMessageFG->setColor(QtUi::style()->format(UiStyle::ModeMsg).foreground().color());
219   ui.noticeMessageFG->setColor(QtUi::style()->format(UiStyle::NoticeMsg).foreground().color());
220   ui.partMessageFG->setColor(QtUi::style()->format(UiStyle::PartMsg).foreground().color());
221   ui.plainMessageFG->setColor(QtUi::style()->format(UiStyle::PlainMsg).foreground().color());
222   ui.quitMessageFG->setColor(QtUi::style()->format(UiStyle::QuitMsg).foreground().color());
223   ui.renameMessageFG->setColor(QtUi::style()->format(UiStyle::RenameMsg).foreground().color());
224   ui.serverMessageFG->setColor(QtUi::style()->format(UiStyle::ServerMsg).foreground().color());
225
226   ui.actionMessageBG->setColor(QtUi::style()->format(UiStyle::ActionMsg).background().color());
227   ui.errorMessageBG->setColor(QtUi::style()->format(UiStyle::ErrorMsg).background().color());
228   ui.joinMessageBG->setColor(QtUi::style()->format(UiStyle::JoinMsg).background().color());
229   ui.kickMessageBG->setColor(QtUi::style()->format(UiStyle::KickMsg).background().color());
230   ui.modeMessageBG->setColor(QtUi::style()->format(UiStyle::ModeMsg).background().color());
231   ui.noticeMessageBG->setColor(QtUi::style()->format(UiStyle::NoticeMsg).background().color());
232   ui.partMessageBG->setColor(QtUi::style()->format(UiStyle::PartMsg).background().color());
233   ui.plainMessageBG->setColor(QtUi::style()->format(UiStyle::PlainMsg).background().color());
234   ui.quitMessageBG->setColor(QtUi::style()->format(UiStyle::QuitMsg).background().color());
235   ui.renameMessageBG->setColor(QtUi::style()->format(UiStyle::RenameMsg).background().color());
236   ui.serverMessageBG->setColor(QtUi::style()->format(UiStyle::ServerMsg).background().color());
237
238   // FIXME set to false if appropriate
239   settings["ActionMessageUseBG"] = s.value("actionMessageUseBG", QVariant(false));
240   if(settings["ActionMessageUseBG"].toBool()) {
241     ui.actionMessageUseBG->setChecked(true);
242     ui.actionMessageBG->setEnabled(true);
243   }
244   settings["ErrorMessageUseBG"] = s.value("errorMessageUseBG", QVariant(false));
245   if(settings["ErrorMessageUseBG"].toBool()) {
246     ui.errorMessageUseBG->setChecked(true);
247     ui.errorMessageBG->setEnabled(true);
248   }
249   settings["JoinMessageUseBG"] = s.value("joinMessageUseBG", QVariant(false));
250   if(settings["JoinMessageUseBG"].toBool()) {
251     ui.joinMessageUseBG->setChecked(true);
252     ui.joinMessageBG->setEnabled(true);
253   }
254   settings["KickMessageUseBG"] = s.value("kickMessageUseBG", QVariant(false));
255   if(settings["KickMessageUseBG"].toBool()) {
256     ui.kickMessageUseBG->setChecked(true);
257     ui.kickMessageBG->setEnabled(true);
258   }
259   settings["ModeMessageUseBG"] = s.value("modeMessageUseBG", QVariant(false));
260   if(settings["ModeMessageUseBG"].toBool()) {
261     ui.modeMessageUseBG->setChecked(true);
262     ui.modeMessageBG->setEnabled(true);
263   }
264   settings["NoticeMessageUseBG"] = s.value("noticeMessageUseBG", QVariant(false));
265   if(settings["NoticeMessageUseBG"].toBool()) {
266     ui.noticeMessageUseBG->setChecked(true);
267     ui.noticeMessageBG->setEnabled(true);
268   }
269   settings["PartMessageUseBG"] = s.value("partMessageUseBG", QVariant(false));
270   if(settings["PartMessageUseBG"].toBool()) {
271     ui.partMessageUseBG->setChecked(true);
272     ui.partMessageBG->setEnabled(true);
273   }
274   settings["PlainMessageUseBG"] = s.value("plainMessageUseBG", QVariant(false));
275   if(settings["PlainMessageUseBG"].toBool()) {
276     ui.plainMessageUseBG->setChecked(true);
277     ui.plainMessageBG->setEnabled(true);
278   }
279   settings["QuitMessageUseBG"] = s.value("quitMessageUseBG", QVariant(false));
280   if(settings["QuitMessageUseBG"].toBool()) {
281     ui.quitMessageUseBG->setChecked(true);
282     ui.quitMessageBG->setEnabled(true);
283   }
284   settings["RenameMessageUseBG"] = s.value("renameMessageUseBG", QVariant(false));
285   if(settings["RenameMessageUseBG"].toBool()) {
286     ui.renameMessageUseBG->setChecked(true);
287     ui.renameMessageBG->setEnabled(true);
288   }
289   settings["ServerMessageUseBG"] = s.value("serverMessageUseBG", QVariant(false));
290   if(settings["ServerMessageUseBG"].toBool()) {
291     ui.serverMessageUseBG->setChecked(true);
292     ui.serverMessageBG->setEnabled(true);
293   }
294
295   ui.timestampFG->setColor(QtUi::style()->format(UiStyle::Timestamp).foreground().color());
296   ui.timestampBG->setColor(QtUi::style()->format(UiStyle::Timestamp).background().color());
297   ui.senderFG->setColor(QtUi::style()->format(UiStyle::Sender).foreground().color());
298   ui.senderBG->setColor(QtUi::style()->format(UiStyle::Sender).background().color());
299   settings["NewMsgMarkerFG"] = s.value("newMsgMarkerFG", QColor(Qt::red));
300   ui.newMsgMarkerFG->setColor(settings["NewMsgMarkerFG"].value<QColor>());
301
302   settings["TimestampUseBG"] = s.value("timestampUseBG", QVariant(false));
303   if(settings["TimestampUseBG"].toBool()) {
304     ui.timestampUseBG->setChecked(true);
305     ui.timestampBG->setEnabled(true);
306   }
307   settings["SenderUseBG"] = s.value("senderUseBG", QVariant(false));
308   if(settings["SenderUseBG"].toBool()) {
309     ui.senderUseBG->setChecked(true);
310     ui.senderBG ->setEnabled(true);
311   }
312
313   ui.nickFG->setColor(QtUi::style()->format(UiStyle::Nick).foreground().color());
314   ui.nickBG->setColor(QtUi::style()->format(UiStyle::Nick).background().color());
315   ui.hostmaskFG->setColor(QtUi::style()->format(UiStyle::Hostmask).foreground().color());
316   ui.hostmaskBG->setColor(QtUi::style()->format(UiStyle::Hostmask).background().color());
317   ui.channelnameFG->setColor(QtUi::style()->format(UiStyle::ChannelName).foreground().color());
318   ui.channelnameBG->setColor(QtUi::style()->format(UiStyle::ChannelName).background().color());
319   ui.modeFlagsFG->setColor(QtUi::style()->format(UiStyle::ModeFlags).foreground().color());
320   ui.modeFlagsBG->setColor(QtUi::style()->format(UiStyle::ModeFlags).background().color());
321   ui.urlFG->setColor(QtUi::style()->format(UiStyle::Url).foreground().color());
322   ui.urlBG->setColor(QtUi::style()->format(UiStyle::Url).background().color());
323
324   ui.highlightColor->setColor(QtUi::style()->highlightColor());
325
326   ui.color0->setColor(QtUi::style()->format(UiStyle::FgCol00).foreground().color());
327   ui.color1->setColor(QtUi::style()->format(UiStyle::FgCol01).foreground().color());
328   ui.color2->setColor(QtUi::style()->format(UiStyle::FgCol02).foreground().color());
329   ui.color3->setColor(QtUi::style()->format(UiStyle::FgCol03).foreground().color());
330   ui.color4->setColor(QtUi::style()->format(UiStyle::FgCol04).foreground().color());
331   ui.color5->setColor(QtUi::style()->format(UiStyle::FgCol05).foreground().color());
332   ui.color6->setColor(QtUi::style()->format(UiStyle::FgCol06).foreground().color());
333   ui.color7->setColor(QtUi::style()->format(UiStyle::FgCol07).foreground().color());
334   ui.color8->setColor(QtUi::style()->format(UiStyle::FgCol08).foreground().color());
335   ui.color9->setColor(QtUi::style()->format(UiStyle::FgCol09).foreground().color());
336   ui.color10->setColor(QtUi::style()->format(UiStyle::FgCol10).foreground().color());
337   ui.color11->setColor(QtUi::style()->format(UiStyle::FgCol11).foreground().color());
338   ui.color12->setColor(QtUi::style()->format(UiStyle::FgCol12).foreground().color());
339   ui.color13->setColor(QtUi::style()->format(UiStyle::FgCol13).foreground().color());
340   ui.color14->setColor(QtUi::style()->format(UiStyle::FgCol14).foreground().color());
341   ui.color15->setColor(QtUi::style()->format(UiStyle::FgCol15).foreground().color());
342
343   setChangedState(false);
344   bufferviewPreview();
345   chatviewPreview();
346 }
347
348 void ColorSettingsPage::save() {
349   QtUiStyleSettings s("Colors");
350   s.setValue("highlightActivityFG", ui.highlightActivityFG->color());
351   s.setValue("highlightActivityBG", ui.highlightActivityBG->color());
352   s.setValue("highlightActivityUseBG", ui.highlightActivityUseBG->isChecked());
353   s.setValue("newMessageActivityFG", ui.newMessageActivityFG->color());
354   s.setValue("newMessageActivityBG", ui.newMessageActivityBG->color());
355   s.setValue("newMessageActivityUseBG", ui.newMessageActivityUseBG->isChecked());
356   s.setValue("otherActivityFG", ui.otherActivityFG->color());
357   s.setValue("otherActivityBG", ui.otherActivityBG->color());
358   s.setValue("otherActivityUseBG", ui.otherActivityUseBG->isChecked());
359
360   saveColor(UiStyle::ErrorMsg, ui.errorMessageFG->color(), ui.errorMessageBG->color(), ui.errorMessageUseBG->isChecked());
361   s.setValue("errorMessageUseBG", ui.errorMessageUseBG->isChecked());
362   saveColor(UiStyle::NoticeMsg, ui.noticeMessageFG->color(), ui.noticeMessageBG->color(), ui.noticeMessageUseBG->isChecked());
363   s.setValue("noticeMessageUseBG", ui.noticeMessageUseBG->isChecked());
364   saveColor(UiStyle::PlainMsg, ui.plainMessageFG->color(), ui.plainMessageBG->color(), ui.plainMessageUseBG->isChecked());
365   s.setValue("plainMessageUseBG", ui.plainMessageUseBG->isChecked());
366   saveColor(UiStyle::ServerMsg, ui.serverMessageFG->color(), ui.serverMessageBG->color(), ui.serverMessageUseBG->isChecked());
367   s.setValue("serverMessageUseBG", ui.serverMessageUseBG->isChecked());
368   saveColor(UiStyle::ActionMsg, ui.actionMessageFG->color(), ui.actionMessageBG->color(), ui.actionMessageUseBG->isChecked());
369   s.setValue("actionMessageUseBG", ui.actionMessageUseBG->isChecked());
370   saveColor(UiStyle::JoinMsg, ui.joinMessageFG->color(), ui.joinMessageBG->color(), ui.joinMessageUseBG->isChecked());
371   s.setValue("joinMessageUseBG", ui.joinMessageUseBG->isChecked());
372   saveColor(UiStyle::KickMsg, ui.kickMessageFG->color(), ui.kickMessageBG->color(), ui.kickMessageUseBG->isChecked());
373   s.setValue("kickMessageUseBG", ui.kickMessageUseBG->isChecked());
374   saveColor(UiStyle::ModeMsg, ui.modeMessageFG->color(), ui.modeMessageBG->color(), ui.modeMessageUseBG->isChecked());
375   s.setValue("modeMessageUseBG", ui.modeMessageUseBG->isChecked());
376   saveColor(UiStyle::NoticeMsg, ui.noticeMessageFG->color(), ui.noticeMessageBG->color(), ui.noticeMessageUseBG->isChecked());
377   s.setValue("noticeMessageUseBG", ui.noticeMessageUseBG->isChecked());
378   saveColor(UiStyle::PartMsg, ui.partMessageFG->color(), ui.partMessageBG->color(), ui.partMessageUseBG->isChecked());
379   s.setValue("partMessageUseBG", ui.partMessageUseBG->isChecked());
380   saveColor(UiStyle::QuitMsg, ui.quitMessageFG->color(), ui.quitMessageBG->color(), ui.quitMessageUseBG->isChecked());
381   s.setValue("quitMessageUseBG", ui.quitMessageUseBG->isChecked());
382   saveColor(UiStyle::RenameMsg, ui.renameMessageFG->color(), ui.renameMessageBG->color(), ui.renameMessageUseBG->isChecked());
383   s.setValue("renameMessageUseBG", ui.renameMessageUseBG->isChecked());
384
385   QtUi::style()->setHighlightColor(ui.highlightColor->color());
386
387   saveColor(UiStyle::Timestamp, ui.timestampFG->color(), ui.timestampBG->color(), ui.timestampUseBG->isChecked());
388   s.setValue("timestampUseBG", ui.timestampUseBG->isChecked());
389   saveColor(UiStyle::Sender, ui.senderFG->color(), ui.senderBG->color(), ui.senderUseBG->isChecked());
390   s.setValue("senderUseBG", ui.senderUseBG->isChecked());
391   s.setValue("newMsgMarkerFG", ui.newMsgMarkerFG->color());
392
393   /*
394   saveColor(UiStyle::Nick, ui.nickFG->color(), ui.nickBG->color(), ui.nickUseBG->isChecked());
395   s.setValue("nickUseBG", ui.nickUseBG->isChecked());
396   saveColor(UiStyle::Hostmask, ui.hostmaskFG->color(), ui.hostmaskBG->color(), ui.hostmaskUseBG->isChecked());
397   s.setValue("hostmaskUseBG", ui.hostmaskUseBG->isChecked());
398   saveColor(UiStyle::ChannelName, ui.channelnameFG->color(), ui.channelnameBG->color(), ui.channelnameUseBG->isChecked());
399   s.setValue("channelnameUseBG", ui.channelnameUseBG->isChecked());
400   saveColor(UiStyle::ModeFlags, ui.modeFlagsFG->color(), ui.modeFlagsBG->color(), ui.modeFlagsUseBG->isChecked());
401   s.setValue("modeFlagsUseBG", ui.modeFlagsUseBG->isChecked());
402   saveColor(UiStyle::Url, ui.urlFG->color(), ui.urlBG->color(), ui.urlUseBG->isChecked());
403   s.setValue("urlUseBG", ui.urlUseBG->isChecked());
404   */
405
406   saveMircColor(0, ui.color0->color());
407   saveMircColor(1, ui.color1->color());
408   saveMircColor(2, ui.color2->color());
409   saveMircColor(3, ui.color3->color());
410   saveMircColor(4, ui.color4->color());
411   saveMircColor(5, ui.color5->color());
412   saveMircColor(6, ui.color6->color());
413   saveMircColor(7, ui.color7->color());
414   saveMircColor(8, ui.color8->color());
415   saveMircColor(9, ui.color9->color());
416   saveMircColor(10, ui.color10->color());
417   saveMircColor(11, ui.color11->color());
418   saveMircColor(12, ui.color12->color());
419   saveMircColor(13, ui.color13->color());
420   saveMircColor(14, ui.color14->color());
421   saveMircColor(15, ui.color15->color());
422
423   load(); //TODO: remove when settings hash map is unnescessary
424   setChangedState(false);
425 }
426
427 void ColorSettingsPage::saveColor(UiStyle::FormatType formatType, const QColor &foreground, const QColor &background, bool enableBG) {
428   QTextCharFormat format = QtUi::style()->format(formatType);
429   format.setForeground(QBrush(foreground));
430   if(enableBG)
431     format.setBackground(QBrush(background));
432   else
433     format.clearBackground();
434   QtUi::style()->setFormat(formatType, format, Settings::Custom);
435 }
436
437 void ColorSettingsPage::saveMircColor(int num, const QColor &col) {
438   QTextCharFormat fgf, bgf;
439   fgf.setForeground(QBrush(col)); QtUi::style()->setFormat((UiStyle::FormatType)(UiStyle::FgCol00 | num<<24), fgf, Settings::Custom);
440   bgf.setBackground(QBrush(col)); QtUi::style()->setFormat((UiStyle::FormatType)(UiStyle::BgCol00 | num<<28), bgf, Settings::Custom);
441 }
442
443 void ColorSettingsPage::widgetHasChanged() {
444   bool changed = testHasChanged();
445   if(changed != hasChanged()) {
446     setChangedState(changed);
447   }
448   bufferviewPreview();
449   chatviewPreview();
450 }
451
452 bool ColorSettingsPage::testHasChanged() {
453   if(settings["HighlightActivityFG"].value<QColor>() != ui.highlightActivityFG->color()) return true;
454   if(settings["HighlightActivityBG"].value<QColor>() != ui.highlightActivityBG->color()) return true;
455   if(settings["HighlightActivityUseBG"].toBool() != ui.highlightActivityUseBG->isChecked()) return true;
456   if(settings["NewMessageActivityFG"].value<QColor>() != ui.newMessageActivityFG->color()) return true;
457   if(settings["NewMessageActivityBG"].value<QColor>() != ui.newMessageActivityBG->color()) return true;
458   if(settings["NewMessageActivityUseBG"].toBool() != ui.newMessageActivityUseBG->isChecked()) return true;
459   if(settings["OtherActivityFG"].value<QColor>() != ui.otherActivityFG->color()) return true;
460   if(settings["OtherActivityBG"].value<QColor>() != ui.otherActivityBG->color()) return true;
461   if(settings["OtherActivityUseBG"].toBool() != ui.otherActivityUseBG->isChecked()) return true;
462
463   if(QtUi::style()->format(UiStyle::ErrorMsg).foreground().color() != ui.errorMessageFG->color()) return true;
464   if(QtUi::style()->format(UiStyle::ErrorMsg).background().color() != ui.errorMessageBG->color()) return true;
465   if(settings["ErrorMessageUseBG"].toBool() != ui.errorMessageUseBG->isChecked()) return true;
466   if(QtUi::style()->format(UiStyle::ErrorMsg).foreground().color() != ui.errorMessageFG->color()) return true;
467   if(QtUi::style()->format(UiStyle::ErrorMsg).background().color() != ui.errorMessageBG->color()) return true;
468   if(settings["NoticeMessageUseBG"].toBool() != ui.noticeMessageUseBG->isChecked()) return true;
469   if(QtUi::style()->format(UiStyle::PlainMsg).foreground().color() != ui.plainMessageFG->color()) return true;
470   if(QtUi::style()->format(UiStyle::PlainMsg).background().color() != ui.plainMessageBG->color()) return true;
471   if(settings["PlainMessageUseBG"].toBool() != ui.plainMessageUseBG->isChecked()) return true;
472   if(QtUi::style()->format(UiStyle::ServerMsg).foreground().color() != ui.serverMessageFG->color()) return true;
473   if(QtUi::style()->format(UiStyle::ServerMsg).background().color() != ui.serverMessageBG->color()) return true;
474   if(settings["ServerMessageUseBG"].toBool() != ui.serverMessageUseBG->isChecked()) return true;
475   if(QtUi::style()->format(UiStyle::ActionMsg).foreground().color() != ui.actionMessageFG->color()) return true;
476   if(QtUi::style()->format(UiStyle::ActionMsg).background().color() != ui.actionMessageBG->color()) return true;
477   if(settings["ActionMessageUseBG"].toBool() != ui.actionMessageUseBG->isChecked()) return true;
478   if(QtUi::style()->format(UiStyle::JoinMsg).foreground().color() != ui.joinMessageFG->color()) return true;
479   if(QtUi::style()->format(UiStyle::JoinMsg).background().color() != ui.joinMessageBG->color()) return true;
480   if(settings["JoinMessageUseBG"].toBool() != ui.joinMessageUseBG->isChecked()) return true;
481   if(QtUi::style()->format(UiStyle::KickMsg).foreground().color() != ui.kickMessageFG->color()) return true;
482   if(QtUi::style()->format(UiStyle::KickMsg).background().color() != ui.joinMessageBG->color()) return true;
483   if(settings["KickMessageUseBG"].toBool() != ui.kickMessageUseBG->isChecked()) return true;
484   if(QtUi::style()->format(UiStyle::ModeMsg).foreground().color() != ui.modeMessageFG->color()) return true;
485   if(QtUi::style()->format(UiStyle::ModeMsg).background().color() != ui.modeMessageBG->color()) return true;
486   if(settings["ModeMessageUseBG"].toBool() != ui.modeMessageUseBG->isChecked()) return true;
487   if(QtUi::style()->format(UiStyle::NoticeMsg).foreground().color() != ui.noticeMessageFG->color()) return true;
488   if(QtUi::style()->format(UiStyle::NoticeMsg).background().color() != ui.noticeMessageBG->color()) return true;
489   if(settings["NoticeMessageUseBG"].toBool() != ui.noticeMessageUseBG->isChecked()) return true;
490   if(QtUi::style()->format(UiStyle::PartMsg).foreground().color() != ui.partMessageFG->color()) return true;
491   if(QtUi::style()->format(UiStyle::PartMsg).background().color() != ui.partMessageBG->color()) return true;
492   if(settings["PartMessageUseBG"].toBool() != ui.partMessageUseBG->isChecked()) return true;
493   if(QtUi::style()->format(UiStyle::QuitMsg).foreground().color() != ui.quitMessageFG->color()) return true;
494   if(QtUi::style()->format(UiStyle::QuitMsg).background().color() != ui.quitMessageBG->color()) return true;
495   if(settings["QuitMessageUseBG"].toBool() != ui.quitMessageUseBG->isChecked()) return true;
496   if(QtUi::style()->format(UiStyle::RenameMsg).foreground().color() != ui.renameMessageFG->color()) return true;
497   if(QtUi::style()->format(UiStyle::RenameMsg).background().color() != ui.renameMessageBG->color()) return true;
498   if(settings["RenameMessageUseBG"].toBool() != ui.renameMessageUseBG->isChecked()) return true;
499
500   if(QtUi::style()->highlightColor() != ui.highlightColor->color()) return true;
501
502   if(QtUi::style()->format(UiStyle::Timestamp).foreground().color() != ui.timestampFG->color()) return true;
503   if(QtUi::style()->format(UiStyle::Timestamp).background().color() != ui.timestampBG->color()) return true;
504   if(settings["TimestampUseBG"].toBool() != ui.timestampUseBG->isChecked()) return true;
505   if(QtUi::style()->format(UiStyle::Sender).foreground().color() != ui.senderFG->color()) return true;
506   if(QtUi::style()->format(UiStyle::Sender).background().color() != ui.senderBG->color()) return true;
507   if(settings["SenderUseBG"].toBool() != ui.senderUseBG->isChecked()) return true;
508   if(settings["NewMsgMarkerFG"].value<QColor>() != ui.newMsgMarkerFG->color()) return true;
509
510   /*
511   if(QtUi::style()->format(UiStyle::Nick).foreground().color() != ui.nickFG->color()) return true;
512   if(QtUi::style()->format(UiStyle::Nick).background().color() != ui.nickBG->color()) return true;
513   if(settings["nickUseBG"].toBool() != ui.nickUseBG->isChecked()) return true;
514   if(QtUi::style()->format(UiStyle::Hostmask).foreground().color() != ui.hostmaskFG->color()) return true;
515   if(QtUi::style()->format(UiStyle::Hostmask).background().color() != ui.hostmaskBG->color()) return true;
516   if(settings["hostmaskUseBG"].toBool() != ui.hostmaskUseBG->isChecked()) return true;
517   if(QtUi::style()->format(UiStyle::ChannelName).foreground().color() != ui.channelnameFG->color()) return true;
518   if(QtUi::style()->format(UiStyle::ChannelName).background().color() != ui.channelnameBG->color()) return true;
519   if(settings["channelnameUseBG"].toBool() != ui.channelnameUseBG->isChecked()) return true;
520   if(QtUi::style()->format(UiStyle::ModeFlags).foreground().color() != ui.modeFlagsFG->color()) return true;
521   if(QtUi::style()->format(UiStyle::ModeFlags).background().color() != ui.modeFlagsBG->color()) return true;
522   if(settings["modeFlagsUseBG"].toBool() != ui.modeFlagsUseBG->isChecked()) return true;
523   if(QtUi::style()->format(UiStyle::Url).foreground().color() != ui.urlFG->color()) return true;
524   if(QtUi::style()->format(UiStyle::Url).background().color() != ui.urlBG->color()) return true;
525   if(settings["urlUseBG"].toBool() != ui.urlUseBG->isChecked()) return true;
526   */
527
528   if(QtUi::style()->format(UiStyle::FgCol00).foreground().color() != ui.color0->color()) return true;
529   if(QtUi::style()->format(UiStyle::FgCol01).foreground().color() != ui.color1->color()) return true;
530   if(QtUi::style()->format(UiStyle::FgCol02).foreground().color() != ui.color2->color()) return true;
531   if(QtUi::style()->format(UiStyle::FgCol03).foreground().color() != ui.color3->color()) return true;
532   if(QtUi::style()->format(UiStyle::FgCol04).foreground().color() != ui.color4->color()) return true;
533   if(QtUi::style()->format(UiStyle::FgCol05).foreground().color() != ui.color5->color()) return true;
534   if(QtUi::style()->format(UiStyle::FgCol06).foreground().color() != ui.color6->color()) return true;
535   if(QtUi::style()->format(UiStyle::FgCol07).foreground().color() != ui.color7->color()) return true;
536   if(QtUi::style()->format(UiStyle::FgCol08).foreground().color() != ui.color8->color()) return true;
537   if(QtUi::style()->format(UiStyle::FgCol09).foreground().color() != ui.color9->color()) return true;
538   if(QtUi::style()->format(UiStyle::FgCol10).foreground().color() != ui.color10->color()) return true;
539   if(QtUi::style()->format(UiStyle::FgCol11).foreground().color() != ui.color11->color()) return true;
540   if(QtUi::style()->format(UiStyle::FgCol12).foreground().color() != ui.color12->color()) return true;
541   if(QtUi::style()->format(UiStyle::FgCol13).foreground().color() != ui.color13->color()) return true;
542   if(QtUi::style()->format(UiStyle::FgCol14).foreground().color() != ui.color14->color()) return true;
543   if(QtUi::style()->format(UiStyle::FgCol15).foreground().color() != ui.color15->color()) return true;
544
545   return false;
546 }
547
548 void ColorSettingsPage::chooseColor(QWidget *widget) {
549   ColorButton *button = qobject_cast<ColorButton *>(widget);
550   Q_ASSERT(button);
551   QColor color = QColorDialog::getColor(button->color(), this);
552   if(color.isValid()) {
553     button->setColor(color);
554   }
555   widgetHasChanged();
556 }
557
558 void ColorSettingsPage::chatviewPreview() {
559   //TODO: update chatviewPreview
560 }
561
562 void ColorSettingsPage::bufferviewPreview() {
563   ui.bufferviewPreview->clear();
564   ui.bufferviewPreview->setColumnCount(1);
565   ui.bufferviewPreview->setHeaderLabels(QStringList(tr("Buffers")));
566
567   QTreeWidgetItem *topLevelItem = new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("Network")));
568   ui.bufferviewPreview->insertTopLevelItem(0, topLevelItem);
569
570   QList<QTreeWidgetItem *> items;
571   QTreeWidgetItem *inactiveActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("#incative")));
572   items.append(inactiveActivity);
573   inactiveActivity->setForeground(0, QPalette().color(QPalette::Dark));
574
575   QTreeWidgetItem *noActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("#regular")));
576   items.append(noActivity);
577
578   QTreeWidgetItem *highlightActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("#highlight")));
579   items.append(highlightActivity);
580   highlightActivity->setForeground(0, QBrush(ui.highlightActivityFG->color()));
581   if(ui.highlightActivityUseBG->isChecked())
582     highlightActivity->setBackground(0, QBrush(ui.highlightActivityBG->color()));
583
584   QTreeWidgetItem *newMessageActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("#new message")));
585   items.append(newMessageActivity);
586   newMessageActivity->setForeground(0, QBrush(ui.newMessageActivityFG->color()));
587   if(ui.newMessageActivityUseBG->isChecked())
588     newMessageActivity->setBackground(0, QBrush(ui.newMessageActivityBG->color()));
589
590   QTreeWidgetItem *otherActivity = new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("#other activity")));
591   items.append(otherActivity);
592   otherActivity->setForeground(0, QBrush(ui.otherActivityFG->color()));
593   if(ui.otherActivityUseBG->isChecked())
594     otherActivity->setBackground(0, QBrush(ui.otherActivityBG->color()));
595
596   topLevelItem->insertChildren(0, items);
597   ui.bufferviewPreview->expandItem(topLevelItem);
598 }
599