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