Now the systrayicon change it's color when a download is in progress. I simply change...
[kdenetwork.git] / ksirc / ksopts.cpp
blob11b25ad8596a8554717b9aca1a51b45206c347e6
2 #include <kapplication.h>
3 #include <kconfig.h>
5 #if KDE_IS_VERSION(3,1,92)
6 #include <kuser.h>
7 #else
8 #include <unistd.h>
9 #include <pwd.h>
10 #endif
12 #include <kdebug.h>
14 #include "ksopts.h"
17 KSOptions *KSOptions::s_options = 0;
18 bool KSOChannel::applyGlobally = false;
20 KSOGeneral::KSOGeneral()
22 displayMode = MDI;
23 autoCreateWin = true;
24 autoCreateWinForNotice = false;
25 nickCompletion = true;
26 displayTopic = true;
27 oneLineEntry = true;
28 runDocked = false;
29 // timeStamp = true;
30 // beepNotify = true;
31 colorPicker = true;
32 autoRejoin = false;
33 windowLength = 200;
34 // logging = false;
35 // beepOnMsg = false;
36 publicAway = true;
37 // topicShow = true;
38 useColourNickList = false;
39 dockPopups = true;
40 autoSaveHistory = true;
44 QPixmap KSOGeneral::backgroundPixmap()
46 if ( m_backgroundPixmap.isNull() && !backgroundFile.isEmpty() )
47 m_backgroundPixmap = QPixmap( backgroundFile );
48 return m_backgroundPixmap;
51 KSOStartup::KSOStartup()
55 KSOServer::KSOServer()
57 #if KDE_IS_VERSION(3,1,92)
58 KUser user;
59 nick = user.loginName();
60 userID = user.loginName();
61 realName = user.fullName();
62 #else
63 struct passwd *pw = getpwuid( getuid() );
64 if ( pw )
66 nick = QString::fromLocal8Bit( pw->pw_name );
67 userID = QString::fromLocal8Bit( pw->pw_name );
68 realName = QString::fromLocal8Bit( pw->pw_gecos ).section( ',', 0, 0 );
70 #endif
74 KSOColors::KSOColors()
76 textColor = Qt::black;
77 linkColor = Qt::blue;
78 infoColor = Qt::blue;
79 channelColor = Qt::green;
80 errorColor = Qt::red;
82 ksircColors = true;
83 mircColors = false;
84 nickColourization = false;
85 ownNickBold = false;
86 ownNickUl = true;
87 ownNickRev = false;
89 msg1Regex = false;
90 msg2Regex = false;
92 backgroundColor = kapp->palette().color( QPalette::Active, QColorGroup::Mid );
93 selBackgroundColor = kapp->palette().color( QPalette::Active, QColorGroup::Highlight );
94 selForegroundColor = kapp->palette().color( QPalette::Active, QColorGroup::HighlightedText );
96 ircColors[0] = Qt::white;
97 ircColors[1] = Qt::black;
98 ircColors[2] = Qt::darkBlue;
99 ircColors[3] = Qt::darkGreen;
100 ircColors[4] = Qt::red;
101 ircColors[5] = QColor ( 165, 42, 42 );
102 ircColors[6] = Qt::darkMagenta;
103 ircColors[7] = QColor( 255, 0x7b, 00 );
104 ircColors[8] = Qt::yellow;
105 ircColors[9] = Qt::green;
106 ircColors[10] = Qt::darkCyan;
107 ircColors[11] = Qt::cyan;
108 ircColors[12] = Qt::blue;
109 ircColors[13] = QColor( 255, 0, 255 );
110 ircColors[14] = Qt::gray;
111 ircColors[15] = Qt::lightGray;
113 uint i;
114 for(i = 0; i < numColors; i++){
115 nickHighlight[i] = true;
118 colourTheme = "Custom";
121 KSORMBMenu::KSORMBMenu()
125 KSOServChan::KSOServChan()
129 KSOChannel::KSOChannel()
131 timeStamp = false;
132 beepNotify = false;
133 beepOnMsg = false;
134 logging = false;
135 topicShow = true;
136 filterJoinPart = false;
137 applyGlobally = false;
138 encoding = "Default";
141 void KSOptions::load( int sections )
143 KConfig *conf = kapp->config();
144 conf->setGroup( "ServerController" );
145 geometry = conf->readRectEntry( "Size" );
147 // Using the fields itself as default values as they are already
148 // set to the defaults.
149 if ( sections & General )
151 conf->setGroup( "General" );
152 int mode = conf->readNumEntry( "DisplayMode", static_cast<int>(displayMode) );
153 if (mode == 0)
154 displayMode = SDI;
155 else
156 displayMode = MDI;
158 autoCreateWin = conf->readBoolEntry( "AutoCreateWin", autoCreateWin );
159 autoCreateWinForNotice = conf->readBoolEntry( "AutoCreateWinForNotice", autoCreateWinForNotice );
160 nickCompletion = conf->readBoolEntry( "NickCompletion", nickCompletion );
161 displayTopic = conf->readBoolEntry( "DisplayTopic", displayTopic );
162 oneLineEntry = conf->readBoolEntry( "OneLineEntry", oneLineEntry );
163 runDocked = conf->readBoolEntry( "runDocked", runDocked );
164 // timeStamp = conf->readBoolEntry( "TimeStamp", timeStamp );
165 // beepNotify = conf->readBoolEntry( "BeepNotify", beepNotify );
166 colorPicker = conf->readBoolEntry( "ColourPicker", colorPicker );
167 autoRejoin = conf->readBoolEntry( "AutoRejoin", autoRejoin );
168 windowLength = conf->readNumEntry( "WindowLength", windowLength );
169 backgroundFile = conf->readPathEntry( "BackgroundFile", backgroundFile );
170 // logging = conf->readBoolEntry( "Logging", logging );
171 // beepOnMsg = conf->readBoolEntry( "BeepOnMessage", false );
172 publicAway = conf->readBoolEntry( "PublicAway", publicAway );
173 // topicShow = conf->readBoolEntry("TopicShow", topicShow);
174 useColourNickList = conf->readBoolEntry("ColourNickList", useColourNickList);
175 dockPopups = conf->readBoolEntry("dockPopups", dockPopups);
176 autoSaveHistory = conf->readBoolEntry("autoSaveHistory", autoSaveHistory);
179 if ( sections & Startup )
181 conf->setGroup( "StartUp" );
185 if ( sections & Colors )
187 if ( !conf->hasGroup( "ColorScheme" ) && conf->hasGroup( "Colours" ) )
189 conf->setGroup( "Colours" );
190 textColor = conf->readColorEntry( "text", &textColor );
191 infoColor = conf->readColorEntry( "info", &infoColor );
192 channelColor = conf->readColorEntry( "chan", &channelColor );
193 errorColor = conf->readColorEntry( "error", &errorColor );
194 int c = conf->readNumEntry( "uscolour", -1 );
195 if ( c >= 0 && c < 16 )
196 ownNickColor = ircColors[c];
197 c = conf->readNumEntry( "nickfcolour", -1 );
198 if ( c >= 0 && c < 16 )
199 nickForeground = ircColors[c];
200 c = conf->readNumEntry( "nickbcolour", -1 );
201 if ( c >= 0 && c < 16 )
202 nickBackground = ircColors[c];
203 backgroundColor = conf->readColorEntry( "Background", &backgroundColor );
205 else
207 conf->setGroup( "ColorScheme" );
208 textColor = conf->readColorEntry( "Text", &textColor );
209 linkColor = conf->readColorEntry( "Link", &linkColor );
210 infoColor = conf->readColorEntry( "Info", &infoColor );
211 channelColor = conf->readColorEntry( "Channel", &channelColor );
212 errorColor = conf->readColorEntry( "Error", &errorColor );
213 ownNickColor = conf->readColorEntry( "OwnNick", &ownNickColor );
214 ownNickBold = conf->readBoolEntry( "OwnNickBold", ownNickBold );
215 ownNickUl = conf->readBoolEntry( "OwnNickUnderline", ownNickUl );
216 ownNickRev = conf->readBoolEntry( "OwnNickReverse", ownNickRev );
217 msgContainNick = conf->readColorEntry( "msgContainNick", &ownNickColor ); // default to the ownNick colour
218 msg1Contain = conf->readColorEntry( "msg1Contain", &msg1Contain );
219 msg1String = conf->readEntry( "msg1String", msg1String );
220 msg1Regex = conf->readBoolEntry( "msg1Regex", msg1Regex );
221 msg2Contain = conf->readColorEntry( "msg2Contain", &msg2Contain );
222 msg2String = conf->readEntry( "msg2String", msg2String );
223 msg2Regex = conf->readBoolEntry( "msg2Regex", msg2Regex );
224 nickForeground = conf->readColorEntry( "NickForeground", &nickForeground );
225 nickBackground = conf->readColorEntry( "NickBackground", &nickBackground );
226 backgroundColor = conf->readColorEntry( "Background", &backgroundColor );
227 selBackgroundColor = conf->readColorEntry( "SelBackground", &selBackgroundColor );
228 selForegroundColor = conf->readColorEntry( "SelForeground", &selForegroundColor );
229 ksircColors = conf->readBoolEntry( "ksircColors", ksircColors );
230 mircColors = conf->readBoolEntry( "mircColors", mircColors );
231 nickColourization = conf->readBoolEntry( "nickColourization", mircColors );
232 colourTheme = conf->readEntry("ColourTheme", colourTheme );
233 for ( int i = 0; i < 16; ++i ) {
234 ircColors[i] =
235 conf->readColorEntry(QString::fromLatin1( "IRC-%1" ).arg( i ),
236 &ircColors[i] );
237 nickHighlight[i] =
238 conf->readBoolEntry(QString::fromLatin1( "nickHighlight-%1" ).arg( i ),
239 &nickHighlight[i] );
242 conf->setGroup( "GlobalOptions" );
243 QFont df = kapp->font(0);
244 defaultFont = conf->readFontEntry( "MainFont", &df);
245 QApplication::setFont( defaultFont, true, "KSirc::TextView" );
247 if ( sections & Channels )
249 conf->setGroup( "Channel" );
252 * do global first
254 if(channel.contains("global") == FALSE){
255 KSOChannel global;
256 ChannelOpMap coMap;
257 channel.insert(QString("global"), coMap);
258 channel["global"].insert("global", global);
259 channel["global"]["global"].server = "global";
260 channel["global"]["global"].channel = "global";
261 channel["global"]["global"].timeStamp = conf->readBoolEntry("globalglobalTimeStamp", false);
262 channel["global"]["global"].beepNotify = conf->readBoolEntry("globalglobalBeepNotify", false);
263 channel["global"]["global"].beepOnMsg = conf->readBoolEntry("globalglobalBeepOnMsg", false);
264 channel["global"]["global"].logging = conf->readBoolEntry("globalglobalLogging", false);
265 channel["global"]["global"].topicShow = conf->readBoolEntry("globalglobalTopicShow", true);
266 channel["global"]["global"].filterJoinPart = conf->readBoolEntry("globalglobalFilterJoinPart", false);
267 channel["global"]["global"].applyGlobally = conf->readBoolEntry("globalglobalApplyGlobally", false);
268 channel["global"]["global"].encoding = conf->readEntry("globalglobalEncoding", "Default");
271 QDateTime now(QDateTime::currentDateTime());
272 QStringList servers = conf->readListEntry("Servers");
273 QStringList::ConstIterator ser = servers.begin();
274 for( ; ser != servers.end(); ser++){
275 ChannelOpMap coMap;
276 channel.insert(*ser, coMap);
277 QStringList channels = conf->readListEntry(*ser);
278 QStringList::ConstIterator chan = channels.begin();
279 for( ; chan != channels.end(); chan++){
280 QDateTime lastUsed = conf->readDateTimeEntry(*ser + *chan + "lastUsed", &now);
281 if((lastUsed.daysTo(now) < 30 )||
282 (*chan == "global" && *ser == "global"))
284 KSOChannel ksoc;
285 ksoc = channel["global"]["global"];
286 ksoc.server = *ser;
287 ksoc.channel = *chan;
288 ksoc.timeStamp = conf->readBoolEntry(*ser + *chan + "TimeStamp", ksoc.timeStamp);
289 ksoc.beepNotify = conf->readBoolEntry(*ser + *chan + "BeepNotify", ksoc.beepNotify);
290 ksoc.beepOnMsg = conf->readBoolEntry(*ser + *chan + "BeepOnMsg", ksoc.beepOnMsg);
291 ksoc.logging = conf->readBoolEntry(*ser + *chan + "Logging", ksoc.logging);
292 ksoc.topicShow = conf->readBoolEntry(*ser + *chan + "TopicShow", ksoc.topicShow);
293 ksoc.encoding = conf->readEntry(*ser + *chan + "Encoding", ksoc.encoding);
294 ksoc.filterJoinPart = conf->readBoolEntry(*ser + *chan + "FilterJoinPart", ksoc.filterJoinPart);
295 ksoc.lastUsed = lastUsed;
296 channel[*ser].insert(*chan, ksoc);
298 else { /* expire junk */
299 conf->deleteEntry(*ser + *chan + "TimeStamp");
300 conf->deleteEntry(*ser + *chan + "BeepNotify");
301 conf->deleteEntry(*ser + *chan + "BeepOnMsg");
302 conf->deleteEntry(*ser + *chan + "Logging");
303 conf->deleteEntry(*ser + *chan + "TopicShow");
304 conf->deleteEntry(*ser + *chan + "Encoding");
305 conf->deleteEntry(*ser + *chan + "FilterJoinPart");
306 conf->deleteEntry(*ser + *chan + "lastUsed");
311 if ( sections & Servers )
313 conf->setGroup( "Server" );
316 * do global first
318 if(server.contains("global") == FALSE){
319 KSOServer global;
320 server.insert(QString("global"), global);
321 server["global"].server = "global";
322 server["global"].globalCopy = false;
324 conf->setGroup( "StartUp" );
325 server["global"].nick = conf->readEntry("Nick");
326 server["global"].altNick = conf->readEntry("altNick");
327 server["global"].realName = conf->readEntry("RealName");
328 server["global"].userID = conf->readEntry("userID");
329 server["global"].notifyList = conf->readListEntry("NotifyList");
331 conf->setGroup( "Server" );
334 kdDebug(5008) << "Load: in Server" << endl;
336 QStringList servers = conf->readListEntry("Servers");
338 QStringList::ConstIterator ser = servers.begin();
339 for( ; ser != servers.end(); ser++){
340 KSOServer ksos;
341 ksos = server["global"];
342 ksos.server = *ser;
343 ksos.globalCopy = false;
344 ksos.nick = conf->readEntry(*ser + "nick");
345 ksos.altNick = conf->readEntry(*ser + "altNick");
346 ksos.realName = conf->readEntry(*ser + "realName");
347 ksos.userID = conf->readEntry(*ser + "userID");
348 ksos.notifyList = conf->readListEntry(*ser + "notifyList");
349 kdDebug(5008) << *ser << ": nick: " << ksos.nick << " altNick: " << ksos.altNick << endl;
350 server.insert(*ser, ksos);
353 kdDebug(5008) << "Done full load" << endl;
356 void KSOptions::save( int sections )
358 KConfig *conf = kapp->config();
360 if ( sections & General )
362 conf->setGroup( "General" );
363 conf->writeEntry( "DisplayMode", static_cast<int>(displayMode) );
364 conf->writeEntry( "AutoCreateWin", autoCreateWin );
365 conf->writeEntry( "AutoCreateWinForNotice", autoCreateWinForNotice );
366 conf->writeEntry( "NickCompletion", nickCompletion );
367 conf->writeEntry( "DisplayTopic", displayTopic );
368 conf->writeEntry( "OneLineEntry", oneLineEntry );
369 conf->writeEntry( "runDocked", runDocked );
370 // conf->writeEntry( "TimeStamp", timeStamp );
371 // conf->writeEntry( "BeepNotify", beepNotify );
372 conf->writeEntry( "ColourPicker", colorPicker );
373 conf->writeEntry( "AutoRejoin", autoRejoin );
374 conf->writeEntry( "WindowLength", windowLength );
375 conf->writePathEntry( "BackgroundFile", backgroundFile );
376 // conf->writeEntry( "Logging", logging );
377 // conf->writeEntry( "BeepOnMessage", beepOnMsg );
378 conf->writeEntry( "PublicAway", publicAway );
379 conf->writeEntry( "ColourNickList", useColourNickList );
380 conf->writeEntry( "dockPopups", dockPopups );
381 conf->writeEntry( "autoSaveHistory", autoSaveHistory );
384 if ( sections & Startup )
386 conf->setGroup( "StartUp" );
388 conf->writeEntry( "Nick", nick );
389 conf->writeEntry( "AlternativeNick", altNick );
390 conf->writeEntry( "RealName", realName );
391 conf->writeEntry( "userID", userID );
392 conf->writeEntry( "NotifyList", notifyList );
396 if ( sections & Colors )
398 conf->setGroup( "ColorScheme" );
399 conf->writeEntry( "Text", textColor );
400 conf->writeEntry( "Link", linkColor );
401 conf->writeEntry( "Info", infoColor );
402 conf->writeEntry( "Channel", channelColor );
403 conf->writeEntry( "Error", errorColor );
404 conf->writeEntry( "OwnNick", ownNickColor );
405 conf->writeEntry( "OwnNickBold", ownNickBold );
406 conf->writeEntry( "OwnNickUnderline", ownNickUl );
407 conf->writeEntry( "OwnNickReverse", ownNickRev );
408 conf->writeEntry( "msgContainNick", msgContainNick );
409 conf->writeEntry( "msg1Contain", msg1Contain );
410 conf->writeEntry( "msg1String", msg1String );
411 conf->writeEntry( "msg1Regex", msg1Regex );
412 conf->writeEntry( "msg2Contain", msg2Contain );
413 conf->writeEntry( "msg2String", msg2String );
414 conf->writeEntry( "msg2Regex", msg2Regex );
415 conf->writeEntry( "NickForeground", nickForeground );
416 conf->writeEntry( "NickBackground", nickBackground );
417 conf->writeEntry( "Background", backgroundColor );
418 conf->writeEntry( "SelBackground", selBackgroundColor );
419 conf->writeEntry( "SelForeground", selForegroundColor );
420 conf->writeEntry( "ksircColors", (bool) ksircColors );
421 conf->writeEntry( "mircColors", mircColors );
422 conf->writeEntry( "nickColourization", nickColourization );
423 conf->writeEntry( "ColourTheme", colourTheme );
424 for ( int i = 0; i < 16; ++i ) {
425 conf->writeEntry( QString::fromLatin1( "IRC-%1" ).arg( i ), ircColors[i] );
426 conf->writeEntry( QString::fromLatin1( "nickHighlight-%1" ).arg( i ), nickHighlight[i] );
428 /* Store the font setting */
429 conf->setGroup( "GlobalOptions" );
430 conf->writeEntry("MainFont", defaultFont);
431 /* end of storing the font settings */
433 if ( sections & Channels )
435 QStringList servers;
437 conf->deleteGroup( "Channel" );
439 conf->setGroup( "Channel" );
440 ServerChannelOpMap::Iterator ser;
441 for( ser = channel.begin(); ser != channel.end(); ++ser ){
442 QStringList channels;
444 servers << ser.key();
446 ChannelOpMap::Iterator chan;
447 for( chan = ser.data().begin(); chan != ser.data().end(); ++chan ){
448 channels << chan.key();
449 conf->writeEntry(ser.key() + chan.key() + "TimeStamp", chan.data().timeStamp);
450 conf->writeEntry(ser.key() + chan.key() + "BeepNotify", chan.data().beepNotify);
451 conf->writeEntry(ser.key() + chan.key() + "BeepOnMsg", chan.data().beepOnMsg);
452 conf->writeEntry(ser.key() + chan.key() + "Logging", chan.data().logging);
453 conf->writeEntry(ser.key() + chan.key() + "TopicShow", chan.data().topicShow);
454 conf->writeEntry(ser.key() + chan.key() + "Encoding", chan.data().encoding);
455 conf->writeEntry(ser.key() + chan.key() + "FilterJoinPart", chan.data().filterJoinPart);
456 conf->writeEntry(ser.key() + chan.key() + "lastUsed", chan.data().lastUsed);
458 conf->writeEntry(ser.key(), channels);
460 conf->writeEntry("Servers", servers);
461 conf->writeEntry("globalglobalApplyGlobally", channel["global"]["global"].applyGlobally);
463 if ( sections & Servers )
465 QStringList servers;
467 conf->deleteGroup( "Servers" );
469 conf->setGroup( "Server" );
470 ServerOpMap::Iterator ser;
471 for( ser = server.begin(); ser != server.end(); ++ser ){
472 QStringList channels;
474 if(ser.data().globalCopy == true)
475 continue;
477 servers << ser.key();
479 conf->writeEntry(ser.key() + "nick", ser.data().nick);
480 conf->writeEntry(ser.key() + "altNick", ser.data().altNick);
481 conf->writeEntry(ser.key() + "realName", ser.data().realName);
482 conf->writeEntry(ser.key() + "userID", ser.data().userID);
483 conf->writeEntry(ser.key() + "notifyList", ser.data().notifyList);
485 conf->writeEntry("Servers", servers);
488 conf->sync();
491 void KSOptions::channelSetup(QString serv, QString chan)
493 if(channel.contains(serv) == FALSE){
494 ChannelOpMap coMap;
495 channel.insert(serv, coMap);
497 if(channel[serv].contains(chan) == FALSE){
498 KSOChannel ksoc;
499 ksoc = channel["global"]["global"];
500 channel[serv].insert(chan, ksoc);
501 channel[serv][chan].server = serv;
502 channel[serv][chan].channel = chan;
503 channel[serv][chan].lastUsed = QDateTime::currentDateTime();
505 else {
506 channel[serv][chan].lastUsed = QDateTime::currentDateTime();
510 void KSOptions::applyChannelGlobal(void)
512 ServerChannelOpMap::Iterator ser;
513 for( ser = channel.begin(); ser != channel.end(); ++ser ){
514 ChannelOpMap::Iterator chan;
515 for( chan = ser.data().begin(); chan != ser.data().end(); ++chan ){
516 if((chan.key() == "global") && (ser.key() == "global"))
517 continue;
519 chan.data() = channel["global"]["global"];
525 void KSOptions::serverSetup(QString serv)
527 if(server.contains(serv) == FALSE){
528 KSOServer ksos;
529 ksos = server["global"];
530 server.insert(serv, ksos);
531 server[serv].server = serv;
532 server[serv].globalCopy = true;
533 server[serv].lastUsed = QDateTime::currentDateTime();
535 else {
536 server[serv].lastUsed = QDateTime::currentDateTime();
541 /* vim: et sw=4 ts=4