2 #include <kapplication.h>
5 #if KDE_IS_VERSION(3,1,92)
17 KSOptions
*KSOptions::s_options
= 0;
18 bool KSOChannel::applyGlobally
= false;
20 KSOGeneral::KSOGeneral()
24 autoCreateWinForNotice
= false;
25 nickCompletion
= true;
38 useColourNickList
= false;
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)
59 nick
= user
.loginName();
60 userID
= user
.loginName();
61 realName
= user
.fullName();
63 struct passwd
*pw
= getpwuid( getuid() );
66 nick
= QString::fromLocal8Bit( pw
->pw_name
);
67 userID
= QString::fromLocal8Bit( pw
->pw_name
);
68 realName
= QString::fromLocal8Bit( pw
->pw_gecos
).section( ',', 0, 0 );
74 KSOColors::KSOColors()
76 textColor
= Qt::black
;
79 channelColor
= Qt::green
;
84 nickColourization
= 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
;
114 for(i
= 0; i
< numColors
; i
++){
115 nickHighlight
[i
] = true;
118 colourTheme
= "Custom";
121 KSORMBMenu::KSORMBMenu()
125 KSOServChan::KSOServChan()
129 KSOChannel::KSOChannel()
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
) );
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
);
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
) {
235 conf
->readColorEntry(QString::fromLatin1( "IRC-%1" ).arg( i
),
238 conf
->readBoolEntry(QString::fromLatin1( "nickHighlight-%1" ).arg( 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" );
254 if(channel
.contains("global") == FALSE
){
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
++){
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"))
285 ksoc
= channel
["global"]["global"];
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" );
318 if(server
.contains("global") == FALSE
){
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
++){
341 ksos
= server
["global"];
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
)
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
)
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)
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
);
491 void KSOptions::channelSetup(QString serv
, QString chan
)
493 if(channel
.contains(serv
) == FALSE
){
495 channel
.insert(serv
, coMap
);
497 if(channel
[serv
].contains(chan
) == FALSE
){
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();
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"))
519 chan
.data() = channel
["global"]["global"];
525 void KSOptions::serverSetup(QString serv
)
527 if(server
.contains(serv
) == FALSE
){
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();
536 server
[serv
].lastUsed
= QDateTime::currentDateTime();