1 //=============================================================================
2 //
3 // File : KviOptions.cpp
4 // Creation date : Tue Jun 20 2000 11:42:00 by Szymon Stefanek
5 //
6 // This file is part of the KVIrc IRC client distribution
7 // Copyright (C) 2000-2010 Szymon Stefanek (pragma at kvirc dot net)
8 // Copyright (C) 2014 OmegaPhil (OmegaPhil at startmail dot com)
9 //
10 // This program is FREE software. You can redistribute it and/or
11 // modify it under the terms of the GNU General Public License
12 // as published by the Free Software Foundation; either version 2
13 // of the License, or (at your option) any later version.
14 //
15 // This program is distributed in the HOPE that it will be USEFUL,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 // See the GNU General Public License for more details.
19 //
20 // You should have received a copy of the GNU General Public License
21 // along with this program. If not, write to the Free Software Foundation,
22 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23 //
24 //=============================================================================
25
26 #define _KVI_OPTIONS_CPP_
27
28 #include "KviOptions.h"
29 #include "kvi_confignames.h"
30 #include "kvi_defaults.h"
31 #include "kvi_out.h"
32 #include "kvi_settings.h"
33 #include "KviApplication.h"
34 #include "KviConfigurationFile.h"
35 #include "KviControlCodes.h"
36 #include "KviFileUtils.h"
37 #include "KviIconManager.h"
38 #include "KviInternalCommand.h"
39 #include "KviLocale.h"
40 #include "KviMainWindow.h"
41 #include "KviStringConversion.h"
42 #include "KviTheme.h"
43 #include "KviWindow.h"
44
45 #include <QDir>
46 #include <QMessageBox>
47 #include <QStringList>
48
49 // KviApplication.cpp
50 extern KVIRC_API int g_iIdentDaemonRunningUsers;
51
52 #define RECT_OPTION(_txt, _val, _flags) KviRectOption(KVI_RECT_OPTIONS_PREFIX _txt, _val, _flags)
53
54 KviRectOption g_rectOptionsTable[KVI_NUM_RECT_OPTIONS] = {
55 RECT_OPTION("FrameGeometry", QRect(0, 0, 10, 10), KviOption_sectFlagGeometry),
56 RECT_OPTION("GeneralOptionsDialogGeometry", QRect(50, 50, 600, 450), KviOption_sectFlagGeometry),
57 RECT_OPTION("RegisteredUsersDialogGeometry", QRect(50, 50, 600, 450), KviOption_sectFlagGeometry)
58 };
59
60 #define BOOL_OPTION(_txt, _val, _flags) KviBoolOption(KVI_BOOL_OPTIONS_PREFIX _txt, _val, _flags)
61
62 // NOTICE: REUSE EQUIVALENT UNUSED KviOption_bool in KviOptions.h ENTRIES BEFORE ADDING NEW ENTRIES BELOW
63 KviBoolOption g_boolOptionsTable[KVI_NUM_BOOL_OPTIONS] = {
64 BOOL_OPTION("WindowsRememberProperties", true, KviOption_sectFlagWindows),
65 BOOL_OPTION("IrcViewShowImages", false, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme),
66 BOOL_OPTION("IrcViewTimestamp", true, KviOption_sectFlagIrcView),
67 BOOL_OPTION("IrcViewUrlHighlighting", true, KviOption_sectFlagIrcView | KviOption_groupTheme),
68 BOOL_OPTION("IrcViewWrapMargin", true, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme),
69 BOOL_OPTION("InputHistoryCursorAtEnd", true, KviOption_sectFlagInput),
70 BOOL_OPTION("AvoidParserWarnings", false, KviOption_sectFlagUserParser),
71 BOOL_OPTION("UseProxyHost", false, KviOption_sectFlagConnection),
72 BOOL_OPTION("IgnoreSpecialCharactersInNickCompletion", false, KviOption_sectFlagInput),
73 BOOL_OPTION("ForceBrutalQuit", false, KviOption_sectFlagIrcSocket),
74 BOOL_OPTION("ShowPingPong", true, KviOption_sectFlagConnection),
75 BOOL_OPTION("PopupNotifierOnNewQueryMessages", true, KviOption_sectFlagFrame),
76 BOOL_OPTION("ShowExtendedServerInfo", false, KviOption_sectFlagConnection),
77 BOOL_OPTION("EchoNumericTopic", true, KviOption_sectFlagConnection),
78 BOOL_OPTION("ShowOwnParts", true, KviOption_sectFlagConnection),
79 BOOL_OPTION("UseAntiSpamOnPrivmsg", false, KviOption_sectFlagAntiSpam),
80 BOOL_OPTION("UseExtendedPrivmsgView", false, KviOption_sectFlagIrcView | KviOption_groupTheme),
81 BOOL_OPTION("ShowUserAndHostInPrivmsgView", false, KviOption_sectFlagIrcView | KviOption_groupTheme),
82 BOOL_OPTION("UseWordHighlighting", true, KviOption_sectFlagIrcView), /* _ALL_ newbie users, with who i was taling asks me where can they switch on */
83 BOOL_OPTION("CleanupUnusedModules", true, KviOption_sectFlagModules),
84 BOOL_OPTION("IgnoreCtcpPing", false, KviOption_sectFlagCtcp),
85 BOOL_OPTION("IgnoreCtcpVersion", false, KviOption_sectFlagCtcp),
86 BOOL_OPTION("UseCtcpFloodProtection", true, KviOption_sectFlagCtcp),
87 BOOL_OPTION("DisableBrokenEventHandlers", true, KviOption_sectFlagUserParser),
88 BOOL_OPTION("IgnoreCtcpClientinfo", false, KviOption_sectFlagCtcp),
89 BOOL_OPTION("IgnoreCtcpUserinfo", false, KviOption_sectFlagCtcp),
90 BOOL_OPTION("IgnoreCtcpFinger", true, KviOption_sectFlagCtcp),
91 BOOL_OPTION("IgnoreCtcpSource", false, KviOption_sectFlagCtcp),
92 BOOL_OPTION("IgnoreCtcpTime", false, KviOption_sectFlagCtcp),
93 BOOL_OPTION("RequestMissingAvatars", false, KviOption_sectFlagAvatar),
94 BOOL_OPTION("ShowCompactModeChanges", true, KviOption_sectFlagConnection),
95 BOOL_OPTION("IgnoreCtcpDcc", false, KviOption_sectFlagDcc),
96 BOOL_OPTION("AutoAcceptDccChat", false, KviOption_sectFlagDcc),
97 BOOL_OPTION("AutoAcceptDccSend", false, KviOption_sectFlagDcc),
98 BOOL_OPTION("SendZeroAckInDccRecv", false, KviOption_sectFlagDcc),
99 BOOL_OPTION("UseFastDccSend", true, KviOption_sectFlagDcc),
100 BOOL_OPTION("UseCompositingForTransparency", false, KviOption_sectFlagGui | KviOption_resetUpdatePseudoTransparency | KviOption_groupTheme),
101 BOOL_OPTION("UseWindowListIrcContextIndicator", false, KviOption_sectFlagWindowList | KviOption_resetUpdateGui | KviOption_groupTheme),
102 BOOL_OPTION("UseGlobalApplicationFont", false, KviOption_sectFlagGui | KviOption_resetUpdateAppFont | KviOption_groupTheme),
103 BOOL_OPTION("AlwaysQuitKVIrcClosingLastConsole", false, KviOption_sectFlagFrame),
104 BOOL_OPTION("AlwaysDisconnectClosingConnectedConsole", false, KviOption_sectFlagFrame),
105 BOOL_OPTION("FlashWindowOnHighlightedMessages", true, KviOption_sectFlagFrame),
106 BOOL_OPTION("PopupNotifierOnHighlightedMessages", true, KviOption_sectFlagFrame),
107 BOOL_OPTION("FlashWindowOnNotifyOnLine", true, KviOption_sectFlagConnection),
108 BOOL_OPTION("IrcViewTimestampUTC", false, KviOption_sectFlagIrcView),
109 BOOL_OPTION("UseGlobalPseudoTransparency", false, KviOption_sectFlagGui | KviOption_resetUpdatePseudoTransparency | KviOption_groupTheme),
110 BOOL_OPTION("UseNotifyList", false, KviOption_sectFlagConnection | KviOption_resetRestartNotifyList),
111 BOOL_OPTION("NotifyListChangesToActiveWindow", true, KviOption_sectFlagConnection),
112 BOOL_OPTION("AutoResumeDccSendWhenAutoAccepted", false, KviOption_sectFlagDcc),
113 BOOL_OPTION("LimitOutgoingTraffic", false, KviOption_sectFlagIrcSocket),
114 BOOL_OPTION("SendUnknownCommandsAsRaw", true, KviOption_sectFlagUserParser),
115 BOOL_OPTION("UserListViewDrawGrid", true, KviOption_sectFlagUserListView | KviOption_resetUpdateGui | KviOption_groupTheme),
116 BOOL_OPTION("ShowChannelSyncTime", true, KviOption_sectFlagConnection),
117 BOOL_OPTION("RejoinChannelOnKick", false, KviOption_sectFlagConnection),
118 BOOL_OPTION("KeepChannelOpenOnKick", true, KviOption_sectFlagConnection),
119 BOOL_OPTION("AutoCloseDccSendOnSuccess", false, KviOption_sectFlagDcc),
120 BOOL_OPTION("NotifyDccSendSuccessInConsole", false, KviOption_sectFlagDcc),
121 BOOL_OPTION("CreateMinimizedDccSend", false, KviOption_sectFlagDcc),
122 BOOL_OPTION("CreateMinimizedDccChat", false, KviOption_sectFlagDcc),
123 BOOL_OPTION("AutoAcceptIncomingAvatars", false, KviOption_sectFlagDcc),
124 BOOL_OPTION("UseNickCompletionPostfixForFirstWordOnly", true, KviOption_sectFlagInput),
125 BOOL_OPTION("UseWindowListIcons", true, KviOption_sectFlagWindowList | KviOption_resetUpdateGui | KviOption_groupTheme),
126 BOOL_OPTION("CreateMinimizedDccSendWhenAutoAccepted", true, KviOption_sectFlagDcc),
127 BOOL_OPTION("CreateMinimizedDccChatWhenAutoAccepted", true, KviOption_sectFlagDcc),
128 BOOL_OPTION("DccGuessIpFromServerWhenLocalIsUnroutable", true, KviOption_sectFlagDcc),
129 BOOL_OPTION("ColorNicksWithBackground", false, KviOption_sectFlagIrcView | KviOption_groupTheme),
130 BOOL_OPTION("AutoLogQueries", true, KviOption_sectFlagLogging), /* this options enabled by default in mIRC,XChat and irssi. People are confused while they want to see logs, but see empty dir*/
131 BOOL_OPTION("AutoLogChannels", true, KviOption_sectFlagLogging),
132 BOOL_OPTION("AutoLogDccChat", false, KviOption_sectFlagLogging),
133 BOOL_OPTION("AutoLogConsole", false, KviOption_sectFlagLogging),
134 BOOL_OPTION("SilentAntiSpam", false, KviOption_sectFlagAntiSpam),
135 BOOL_OPTION("UseIncomingDccMediaTypeSavePath", true, KviOption_sectFlagDcc),
136 BOOL_OPTION("NotifyListSendUserhostForOnlineUsers", true, KviOption_sectFlagConnection),
137 BOOL_OPTION("UseIntelligentNotifyListManager", true, KviOption_sectFlagConnection | KviOption_resetRestartNotifyList),
138 BOOL_OPTION("UseWatchListIfAvailable", true, KviOption_sectFlagConnection),
139 BOOL_OPTION("UseTreeWindowList", true, KviOption_sectFlagWindowList | KviOption_resetUpdateWindowList | KviOption_groupTheme),
140 BOOL_OPTION("BindIrcIPv4ConnectionsToSpecifiedAddress", false, KviOption_sectFlagConnection),
141 BOOL_OPTION("BindIrcIPv6ConnectionsToSpecifiedAddress", false, KviOption_sectFlagConnection),
142 BOOL_OPTION("UseAntiSpamOnNotice", false, KviOption_sectFlagAntiSpam),
143 BOOL_OPTION("SetLastAvatarAsDefaultForRegisteredUsers", true, KviOption_sectFlagAvatar),
144 BOOL_OPTION("CantAcceptIncomingDccConnections", false, KviOption_sectFlagDcc),
145 BOOL_OPTION("IgnoreCtcpAvatar", false, KviOption_sectFlagCtcp),
146 BOOL_OPTION("CtcpRepliesToActiveWindow", true, KviOption_sectFlagCtcp),
147 BOOL_OPTION("AutoAcceptDccCanvas", false, KviOption_sectFlagDcc),
148 BOOL_OPTION("NotifyDccSendSuccessInNotifier", true, KviOption_sectFlagDcc),
149 BOOL_OPTION("KillBrokenTimers", true, KviOption_sectFlagUserParser),
150 BOOL_OPTION("DccVoiceVolumeSliderControlsPCM", true, KviOption_sectFlagDcc),
151 BOOL_OPTION("DccVoiceForceHalfDuplex", false, KviOption_sectFlagDcc),
152 BOOL_OPTION("AutoAcceptDccVoice", false, KviOption_sectFlagDcc),
153 BOOL_OPTION("CreateMinimizedDccVoice", false, KviOption_sectFlagDcc),
154 BOOL_OPTION("CreateMinimizedDccVoiceWhenAutoAccepted", true, KviOption_sectFlagDcc),
155 BOOL_OPTION("UseIdentService", false, KviOption_sectFlagConnection | KviOption_resetRestartIdentd),
156 BOOL_OPTION("ShowTipAtStartup", false, KviOption_sectFlagFrame),
157 BOOL_OPTION("IdentdEnableIPv6", false, KviOption_sectFlagConnection | KviOption_resetRestartIdentd),
158 #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
159 BOOL_OPTION("IdentdIPv6ContainsIPv4", false, KviOption_sectFlagConnection | KviOption_resetRestartIdentd),
160 #else
161 BOOL_OPTION("IdentdIPv6ContainsIPv4", true, KviOption_sectFlagConnection | KviOption_resetRestartIdentd),
162 #endif
163 BOOL_OPTION("ScaleAvatars", true, KviOption_sectFlagAvatar | KviOption_resetUpdateGui | KviOption_groupTheme),
164 BOOL_OPTION("ColorNicks", false, KviOption_sectFlagIrcView | KviOption_groupTheme),
165 BOOL_OPTION("BoldedNicks", true, KviOption_sectFlagIrcView | KviOption_groupTheme),
166 BOOL_OPTION("DccListenOnSpecifiedInterfaceByDefault", false, KviOption_sectFlagDcc),
167 BOOL_OPTION("ChangeNickAway", false, KviOption_sectFlagConnection),
168 BOOL_OPTION("AutoGeneratedAwayNick", false, KviOption_sectFlagConnection), /* only ircnet uses 9-symbol nicks */
169 BOOL_OPTION("ExitAwayOnInput", false, KviOption_sectFlagConnection),
170 BOOL_OPTION("AlwaysHighlightNick", true, KviOption_sectFlagIrcView),
171 BOOL_OPTION("ShowChannelsJoinOnIrc", true, KviOption_sectFlagFrame),
172 BOOL_OPTION("ShowChannelsJoinDialogAsToplevel", true, KviOption_sectFlagFrame), //UNUSED
173 BOOL_OPTION("UserDefinedPortRange", false, KviOption_sectFlagDcc),
174 BOOL_OPTION("CreateQueryOnPrivmsg", true, KviOption_sectFlagConnection),
175 BOOL_OPTION("CreateQueryOnNotice", false, KviOption_sectFlagConnection),
176 BOOL_OPTION("CreateIncomingQueriesAsMinimized", true, KviOption_sectFlagConnection),
177 BOOL_OPTION("AutoJoinOnInvite", false, KviOption_sectFlagConnection),
178 BOOL_OPTION("ShowServersConnectDialogOnStart", true, KviOption_sectFlagFrame),
179 BOOL_OPTION("ShowServersConnectDialogAsToplevel", true, KviOption_sectFlagFrame), //UNUSED
180 BOOL_OPTION("AcceptBrokenFileNameDccResumeRequests", true, KviOption_sectFlagDcc),
181 BOOL_OPTION("AutoReconnectOnUnexpectedDisconnect", true, KviOption_sectFlagFrame),
182 BOOL_OPTION("RejoinChannelsAfterReconnect", true, KviOption_sectFlagFrame),
183 BOOL_OPTION("ReopenQueriesAfterReconnect", true, KviOption_sectFlagFrame),
184 BOOL_OPTION("EnableQueryTracing", true, KviOption_sectFlagConnection),
185 BOOL_OPTION("OperatorMessagesToActiveWindow", false, KviOption_sectFlagConnection),
186 BOOL_OPTION("InvitesToActiveWindow", true, KviOption_sectFlagConnection),
187 BOOL_OPTION("ShowChannelUserFlagInPrivmsgView", true, KviOption_sectFlagConnection),
188 BOOL_OPTION("DccSendFakeAddressByDefault", false, KviOption_sectFlagDcc),
189 BOOL_OPTION("UseWindowListActivityMeter", false, KviOption_sectFlagWindowList | KviOption_resetUpdateGui | KviOption_groupTheme),
190 BOOL_OPTION("CloseServerWidgetAfterConnect", false, KviOption_sectFlagFrame),
191 BOOL_OPTION("PrioritizeLastActionTime", false, KviOption_sectFlagInput),
192 BOOL_OPTION("ShowUserChannelIcons", true, KviOption_sectFlagUserListView | KviOption_resetUpdateGui | KviOption_groupTheme),
193 BOOL_OPTION("ShowUserChannelState", false, KviOption_sectFlagUserListView | KviOption_resetUpdateGui | KviOption_groupTheme),
194 BOOL_OPTION("EnableIgnoreOnPrivMsg", true, KviOption_sectFlagConnection),
195 BOOL_OPTION("VerboseIgnore", false, KviOption_sectFlagConnection),
196 BOOL_OPTION("EnableIgnoreOnNotice", true, KviOption_sectFlagConnection),
197 BOOL_OPTION("NotifyFailedDccHandshakes", true, KviOption_sectFlagDcc),
198 BOOL_OPTION("DrawEmoticons", true, KviOption_sectFlagIrcView | KviOption_groupTheme),
199 BOOL_OPTION("IgnoreCtcpPage", false, KviOption_sectFlagCtcp),
200 BOOL_OPTION("ShowDialogOnCtcpPage", true, KviOption_sectFlagCtcp),
201 BOOL_OPTION("BashLikeNickCompletion", false, KviOption_sectFlagInput),
202 BOOL_OPTION("UseSSLCertificate", false, KviOption_sectFlagConnection),
203 BOOL_OPTION("UseSSLPrivateKey", false, KviOption_sectFlagConnection),
204 BOOL_OPTION("WarnAboutPastingMultipleLines", true, KviOption_sectFlagFrame),
205 BOOL_OPTION("KeepChannelsOpenOnUnexpectedDisconnect", true, KviOption_sectFlagFrame),
206 BOOL_OPTION("KeepQueriesOpenOnUnexpectedDisconnect", true, KviOption_sectFlagFrame),
207 BOOL_OPTION("UseLagMeterEngine", true, KviOption_sectFlagConnection | KviOption_resetRestartLagMeter),
208 BOOL_OPTION("ShowLagOnContextDisplay", true, KviOption_sectFlagFrame),
209 BOOL_OPTION("DisableBanListRequestOnJoin", false, KviOption_sectFlagConnection),
210 BOOL_OPTION("DisableBanExceptionListRequestOnJoin", true, KviOption_sectFlagConnection),
211 BOOL_OPTION("DisableInviteListRequestOnJoin", true, KviOption_sectFlagConnection),
212 BOOL_OPTION("DisableWhoRequestOnJoin", false, KviOption_sectFlagConnection),
213 BOOL_OPTION("ShowDockExtension", true, KviOption_sectFlagFrame),
214 BOOL_OPTION("DccAddressByIrcDns", false, KviOption_sectFlagFrame),
215 BOOL_OPTION("HighlightOnlyNormalMsg", false, KviOption_sectFlagFrame),
216 BOOL_OPTION("HighlightOnlyNormalMsgQueryToo", false, KviOption_sectFlagFrame),
217 BOOL_OPTION("HighlightOnlyNormalMsgHighlightInChanToo", false, KviOption_sectFlagFrame),
218 BOOL_OPTION("HighlightOnlyAtCustomHighlightLevel", false, KviOption_sectFlagFrame),
219 BOOL_OPTION("DccBrokenBouncerHack", false, KviOption_sectFlagDcc),
220 BOOL_OPTION("ExternalMessagesToActiveWindow", true, KviOption_sectFlagConnection),
221 BOOL_OPTION("IgnoreChannelAvatarRequestsWhenNoAvatarSet", true, KviOption_sectFlagAvatar),
222 BOOL_OPTION("FlashQueryWindowOnNewMessages", true, KviOption_sectFlagFrame),
223 BOOL_OPTION("ConfirmCloseWhenThereAreConnections", true, KviOption_sectFlagFrame),
224 BOOL_OPTION("UseWindowsDesktopForTransparency", false, KviOption_sectFlagGui | KviOption_resetUpdatePseudoTransparency | KviOption_groupTheme),
225 BOOL_OPTION("CtcpRequestsToActiveWindow", false, KviOption_sectFlagConnection),
226 BOOL_OPTION("ServerRepliesToActiveWindow", true, KviOption_sectFlagConnection),
227 BOOL_OPTION("ServerNoticesToActiveWindow", false, KviOption_sectFlagConnection),
228 BOOL_OPTION("ServicesNoticesToActiveWindow", false, KviOption_sectFlagConnection),
229 BOOL_OPTION("SortWindowListItemsByName", true, KviOption_sectFlagConnection | KviOption_groupTheme),
230 BOOL_OPTION("ShowWindowListToolTips", true, KviOption_sectFlagConnection | KviOption_groupTheme),
231 BOOL_OPTION("ShowUserListViewToolTips", true, KviOption_sectFlagConnection | KviOption_groupTheme),
232 BOOL_OPTION("WhoisRepliesToActiveWindow", true, KviOption_sectFlagConnection),
233 BOOL_OPTION("PopupNotifierOnNotifyOnLine", true, KviOption_sectFlagConnection),
234 BOOL_OPTION("EnableNotifier", true, KviOption_sectFlagConnection),
235 BOOL_OPTION("DccSendForceIdleStep", false, KviOption_sectFlagDcc),
236 BOOL_OPTION("StatusBarVisible", true, KviOption_sectFlagFrame),
237 BOOL_OPTION("TrackLastReadTextViewLine", true, KviOption_sectFlagFrame),
238 BOOL_OPTION("KeepChannelOpenOnPart", false, KviOption_sectFlagFrame),
239 BOOL_OPTION("StripMircColorsInUserMessages", false, KviOption_sectFlagFrame | KviOption_groupTheme),
240 BOOL_OPTION("DoNotSuggestRestoreDefaultScript", false, KviOption_sectFlagFrame),
241 BOOL_OPTION("LimitDccSendSpeed", false, KviOption_sectFlagDcc),
242 BOOL_OPTION("LimitDccRecvSpeed", false, KviOption_sectFlagDcc),
243 BOOL_OPTION("IgnoreModuleVersions", false, KviOption_sectFlagFrame),
244 BOOL_OPTION("EnableInputHistory", true, KviOption_sectFlagInput | KviOption_resetUpdateGui),
245 BOOL_OPTION("UseSpecialColorForTimestamp", true, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme),
246 BOOL_OPTION("EnableAwayListUpdates", true, KviOption_sectFlagFrame),
247 BOOL_OPTION("ShowAvatarsInUserlist", true, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme),
248 BOOL_OPTION("ShowUserListStatisticLabel", true, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme),
249 #ifdef COMPILE_ON_MAC
250 BOOL_OPTION("ShowIconsInPopupMenus", false, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme | KviOption_resetReloadImages),
251 #else
252 BOOL_OPTION("ShowIconsInPopupMenus", true, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme | KviOption_resetReloadImages),
253 #endif
254 BOOL_OPTION("ScriptErrorsToDebugWindow", false, KviOption_sectFlagFrame),
255 BOOL_OPTION("ShowMinimizedDebugWindow", true, KviOption_sectFlagFrame),
256 BOOL_OPTION("ShowExtendedInfoInQueryLabel", true, KviOption_resetUpdateGui),
257 BOOL_OPTION("UseUserListColorsAsNickColors", true, KviOption_sectFlagIrcView | KviOption_groupTheme),
258 BOOL_OPTION("GzipLogs", false, KviOption_sectFlagLogging),
259 BOOL_OPTION("UseFullWordHighlighting", false, KviOption_sectFlagIrcView),
260 BOOL_OPTION("NotifierFlashing", true, KviOption_sectFlagFrame),
261 BOOL_OPTION("CommandlineInUserFriendlyModeByDefault", true, KviOption_sectFlagFrame),
262 BOOL_OPTION("EnableVisualEffects", true, KviOption_resetUpdateGui),
263 BOOL_OPTION("DCCFileTransferReplaceOutgoingSpacesWithUnderscores", true, KviOption_sectFlagDcc),
264 BOOL_OPTION("DoNotUpscaleAvatars", true, KviOption_sectFlagIrcView | KviOption_resetUpdateGui),
265 BOOL_OPTION("UseDifferentColorForOwnNick", false, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme),
266 BOOL_OPTION("CloseInTray", false, KviOption_sectFlagFrame | KviOption_resetUpdateGui),
267 BOOL_OPTION("StartupMinimized", false, KviOption_sectFlagFrame),
268 BOOL_OPTION("SortReceivedByDccFilesByNicks", false, KviOption_sectFlagDcc),
269 BOOL_OPTION("LogChannelHistory", true, KviOption_sectFlagConnection),
270 BOOL_OPTION("ClassicWindowListSetMaximumButtonWidth", true, KviOption_groupTheme | KviOption_sectFlagGeometry | KviOption_resetUpdateGui),
271 BOOL_OPTION("KeepChannelsOpenOnDisconnect", true, KviOption_sectFlagFrame),
272 BOOL_OPTION("KeepQueriesOpenOnDisconnect", true, KviOption_sectFlagFrame),
273 BOOL_OPTION("HideWindowToolButtons", true, KviOption_sectFlagFrame),
274 BOOL_OPTION("HideInputToolButtons", true, KviOption_sectFlagFrame),
275 BOOL_OPTION("StripControlCodesInLogs", false, KviOption_sectFlagLogging),
276 BOOL_OPTION("EnableTrayIconFlashing", true, KviOption_sectFlagFrame),
277 BOOL_OPTION("UseFlatClassicWindowListButtons", false, KviOption_sectFlagWindowList | KviOption_resetUpdateGui | KviOption_groupTheme),
278 BOOL_OPTION("StripMsgTypeInLogs", false, KviOption_sectFlagLogging),
279 BOOL_OPTION("UseLevelBasedTrayNotification", false, KviOption_sectFlagFrame),
280 BOOL_OPTION("MuteAllSounds", false, KviOption_sectFlagFrame),
281 BOOL_OPTION("CreateMinimizedChannels", false, KviOption_sectFlagFrame),
282 BOOL_OPTION("ShowNetworkNameForConsoleWindowListEntry", true, KviOption_sectFlagFrame | KviOption_resetUpdateGui),
283 BOOL_OPTION("DrawGenderIcons", true, KviOption_sectFlagFrame | KviOption_resetUpdateGui | KviOption_groupTheme),
284 BOOL_OPTION("PrependGenderInfoToRealname", true, KviOption_sectFlagConnection),
285 BOOL_OPTION("UseIdentServiceOnlyOnConnect", true, KviOption_sectFlagConnection | KviOption_resetRestartIdentd),
286 BOOL_OPTION("UseSystemUrlHandlers", true, KviOption_sectFlagUrl),
287 BOOL_OPTION("ScaleAvatarsOnLoad", true, KviOption_sectFlagAvatar),
288 BOOL_OPTION("NotifierFading", true, KviOption_sectFlagFrame),
289 BOOL_OPTION("PickRandomIpAddressForRoundRobinServers", true, KviOption_sectFlagConnection),
290 BOOL_OPTION("PrependAvatarInfoToRealname", true, KviOption_sectFlagConnection),
291 BOOL_OPTION("EnableAnimatedAvatars", true, KviOption_sectFlagGui | KviOption_resetUpdateGui),
292 BOOL_OPTION("EnableAnimatedSmiles", true, KviOption_sectFlagGui | KviOption_resetUpdateGui),
293 BOOL_OPTION("PlaceNickWithNonAlphaCharsAtEnd", true, KviOption_sectFlagGui | KviOption_resetUpdateGui),
294 BOOL_OPTION("PasteLastLogOnChannelJoin", false, KviOption_sectFlagLogging),
295 BOOL_OPTION("PasteLastLogOnQueryJoin", false, KviOption_sectFlagLogging),
296 BOOL_OPTION("UseSpecifiedSmartColorForOwnNick", false, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme),
297 BOOL_OPTION("ZshLikeNickCompletion", false, KviOption_sectFlagInput),
298 BOOL_OPTION("AutoAcceptDccVideo", false, KviOption_sectFlagDcc),
299 BOOL_OPTION("CreateMinimizedDccVideo", false, KviOption_sectFlagDcc),
300 BOOL_OPTION("CreateMinimizedDccVideoWhenAutoAccepted", true, KviOption_sectFlagDcc),
301 BOOL_OPTION("ShowTaskBarButton", true, KviOption_sectFlagFrame),
302 BOOL_OPTION("FlashDccChatWindowOnNewMessages", true, KviOption_sectFlagFrame),
303 BOOL_OPTION("PopupNotifierOnNewDccChatMessages", true, KviOption_sectFlagFrame),
304 BOOL_OPTION("UseAwayMessage", true, KviOption_sectFlagConnection),
305 BOOL_OPTION("DisableQuietBanListRequestOnJoin", true, KviOption_sectFlagConnection),
306 BOOL_OPTION("UseWindowListCloseButton", false, KviOption_sectFlagWindowList | KviOption_resetUpdateGui | KviOption_groupTheme),
307 BOOL_OPTION("FrameIsMaximized", false, KviOption_sectFlagGeometry),
308 BOOL_OPTION("PrependNickColorInfoToRealname", true, KviOption_sectFlagConnection),
309 BOOL_OPTION("DontShowNotifierIfActiveWindowIsFullScreen", true, KviOption_sectFlagFrame),
310 BOOL_OPTION("WheelScrollsWindowsList", true, KviOption_sectFlagWindowList),
311 BOOL_OPTION("AcceptMismatchedPortDccResumeRequests", false, KviOption_sectFlagDcc),
312 BOOL_OPTION("EnableUrlLinkToolTip", true, KviOption_sectFlagGui),
313 BOOL_OPTION("EnableHostLinkToolTip", true, KviOption_sectFlagGui),
314 BOOL_OPTION("EnableServerLinkToolTip", true, KviOption_sectFlagGui),
315 BOOL_OPTION("EnableModeLinkToolTip", true, KviOption_sectFlagGui),
316 BOOL_OPTION("EnableNickLinkToolTip", true, KviOption_sectFlagGui),
317 BOOL_OPTION("EnableChannelLinkToolTip", true, KviOption_sectFlagGui),
318 BOOL_OPTION("EnableEscapeLinkToolTip", true, KviOption_sectFlagGui),
319 BOOL_OPTION("UseDBusNotifier", false, KviOption_sectFlagConnection),
320 BOOL_OPTION("UseKDENotifier", false, KviOption_sectFlagConnection),
321 BOOL_OPTION("CaseSensitiveHighlighting", false, KviOption_sectFlagIrcView),
322 BOOL_OPTION("MinimizeInTray", false, KviOption_sectFlagFrame | KviOption_resetUpdateGui),
323 BOOL_OPTION("DisplayNotifierOnPrimaryScreen", true, KviOption_sectFlagFrame),
324 BOOL_OPTION("ShowDialogOnChannelCtcpPage", false, KviOption_sectFlagCtcp),
325 BOOL_OPTION("PopupNotifierOnNewNotices", true, KviOption_sectFlagFrame),
326 BOOL_OPTION("UserListViewUseAwayColor", true, KviOption_sectFlagUserListView | KviOption_resetUpdateGui),
327 BOOL_OPTION("ShowUserFlagForChannelsInWindowList", true, KviOption_sectFlagWindowList | KviOption_resetUpdateGui | KviOption_groupTheme),
328 BOOL_OPTION("EnableCustomCursorWidth", false, KviOption_sectFlagGui | KviOption_resetUpdateGui),
329 BOOL_OPTION("ShowFavoriteServersOnly", false, KviOption_sectFlagFrame),
330 BOOL_OPTION("RequireControlToCopy", false, KviOption_sectFlagIrcView),
331 BOOL_OPTION("Send64BitAckInDccRecv", false, KviOption_sectFlagDcc),
332 BOOL_OPTION("ShowTreeWindowListHandle", true, KviOption_sectFlagWindowList | KviOption_resetUpdateGui | KviOption_groupTheme),
333 BOOL_OPTION("MenuBarVisible", true, KviOption_sectFlagFrame | KviOption_resetUpdateGui),
334 BOOL_OPTION("WarnAboutHidingMenuBar", true, KviOption_sectFlagFrame),
335 BOOL_OPTION("WhoRepliesToActiveWindow", false, KviOption_sectFlagConnection),
336 BOOL_OPTION("DropConnectionOnSaslFailure", false, KviOption_sectFlagConnection)
337 };
338
339 // NOTICE: REUSE EQUIVALENT UNUSED KviOption_bool in KviOptions.h ENTRIES BEFORE ADDING NEW ENTRIES ABOVE
340
341 #define STRING_OPTION(_txt, _val, _flags) KviStringOption(KVI_STRING_OPTIONS_PREFIX _txt, _val, _flags)
342
343 // FIXME: #warning "Remove the unused string options here!"
344
345 #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
346 #define RUN_THE_BROWSER "run cmd.exe /c start \"\" \"$0\""
347 #else
348 #ifdef COMPILE_ON_MAC
349 #define RUN_THE_BROWSER "run open $0"
350 #else
351 #define RUN_THE_BROWSER "run xdg-open $0"
352 #endif
353 #endif
354
355 KviStringOption g_stringOptionsTable[KVI_NUM_STRING_OPTIONS] = {
356 STRING_OPTION("Nickname1", "", KviOption_sectFlagUser),
357 STRING_OPTION("Nickname2", "", KviOption_sectFlagUser),
358 STRING_OPTION("Nickname3", "", KviOption_sectFlagUser),
359 STRING_OPTION("Nickname4", "", KviOption_sectFlagUser),
360 STRING_OPTION("Username", KVI_DEFAULT_USERNAME, KviOption_sectFlagUser),
361 STRING_OPTION("Realname", KVI_DEFAULT_REALNAME, KviOption_sectFlagUser),
362 STRING_OPTION("LocalHostIp", "127.0.0.1", KviOption_sectFlagIrcSocket),
363 STRING_OPTION("PartMessage", KVI_DEFAULT_PART_MESSAGE, KviOption_sectFlagConnection),
364 STRING_OPTION("QuitMessage", KVI_DEFAULT_QUIT_MESSAGE, KviOption_sectFlagConnection),
365 STRING_OPTION("UrlHttpCommand", RUN_THE_BROWSER, KviOption_sectFlagUrl),
366 STRING_OPTION("ExtendedPrivmsgPrefix", "[", KviOption_sectFlagIrcView | KviOption_groupTheme),
367 STRING_OPTION("ExtendedPrivmsgPostfix", "] ", KviOption_sectFlagIrcView | KviOption_groupTheme),
368 STRING_OPTION("CtcpVersionPostfix", "", KviOption_sectFlagCtcp),
369 STRING_OPTION("CtcpUserInfoOther", KVI_DEFAULT_CTCP_USERINFO_REPLY, KviOption_sectFlagUser),
370 STRING_OPTION("CtcpSourcePostfix", "", KviOption_sectFlagCtcp),
371 STRING_OPTION("UrlFtpCommand", RUN_THE_BROWSER, KviOption_sectFlagUrl),
372 STRING_OPTION("UrlHttpsCommand", RUN_THE_BROWSER, KviOption_sectFlagUrl),
373 STRING_OPTION("UrlMailtoCommand", RUN_THE_BROWSER, KviOption_sectFlagUrl),
374 STRING_OPTION("PreferredMediaPlayer", "auto", KviOption_sectFlagFrame),
375 STRING_OPTION("UrlFileCommand", RUN_THE_BROWSER, KviOption_sectFlagUrl),
376 STRING_OPTION("NickCompletionPostfix", ": ", KviOption_sectFlagInput),
377 STRING_OPTION("UrlUnknownCommand", RUN_THE_BROWSER, KviOption_sectFlagUrl),
378 STRING_OPTION("IPv4ConnectionBindAddress", "", KviOption_sectFlagConnection),
379 STRING_OPTION("IPv6ConnectionBindAddress", "", KviOption_sectFlagConnection),
380 STRING_OPTION("DccVoiceSoundDevice", "/dev/dsp", KviOption_sectFlagDcc),
381 STRING_OPTION("DccVoiceMixerDevice", "/dev/mixer", KviOption_sectFlagDcc),
382 STRING_OPTION("AwayMessage", KVI_DEFAULT_AWAY_MESSAGE, KviOption_sectFlagConnection),
383 STRING_OPTION("IdentdUser", "kvirc", KviOption_sectFlagConnection | KviOption_resetRestartIdentd),
384 STRING_OPTION("DccListenDefaultInterface", "ppp0", KviOption_sectFlagDcc),
385 STRING_OPTION("CustomAwayNick", KVI_DEFAULT_AWAY_NICK, KviOption_sectFlagConnection),
386 STRING_OPTION("DefaultDccFakeAddress", "", KviOption_sectFlagDcc),
387 STRING_OPTION("CtcpPageReply", KVI_DEFAULT_CTCP_PAGE_REPLY, KviOption_sectFlagCtcp),
388 STRING_OPTION("SSLCertificatePath", "", KviOption_sectFlagConnection | KviOption_encodePath),
389 STRING_OPTION("SSLCertificatePass", "", KviOption_sectFlagConnection),
390 STRING_OPTION("SSLPrivateKeyPath", "", KviOption_sectFlagConnection | KviOption_encodePath),
391 STRING_OPTION("SSLPrivateKeyPass", "", KviOption_sectFlagConnection),
392 STRING_OPTION("SoundSystem", "unknown", KviOption_sectFlagFrame),
393 STRING_OPTION("DefaultUserMode", "", KviOption_sectFlagUser),
394 STRING_OPTION("LastImageDialogPath", "", KviOption_sectFlagUser | KviOption_encodePath),
395 STRING_OPTION("IconThemeSubdir", "", KviOption_sectFlagUser | KviOption_groupTheme | KviOption_resetReloadImages | KviOption_encodePath),
396 STRING_OPTION("IncomingPath", "", KviOption_sectFlagUser | KviOption_encodePath),
397 STRING_OPTION("MyAvatar", "", KviOption_sectFlagUser),
398 STRING_OPTION("DefaultTextEncoding", "", KviOption_sectFlagFrame),
399 STRING_OPTION("WinampTextEncoding", "", KviOption_sectFlagFrame),
400 STRING_OPTION("Mp3TagsEncoding", "", KviOption_sectFlagFrame),
401 STRING_OPTION("CtcpUserInfoAge", "", KviOption_sectFlagUser),
402 STRING_OPTION("CtcpUserInfoGender", "", KviOption_sectFlagUser),
403 STRING_OPTION("CtcpUserInfoLocation", "", KviOption_sectFlagUser),
404 STRING_OPTION("CtcpUserInfoLanguages", "", KviOption_sectFlagUser),
405 STRING_OPTION("WordSplitters", ",\"';:|.%^~!\\$#()?", KviOption_sectFlagIrcView),
406 STRING_OPTION("OnNewQueryOpenedSound", "", KviOption_sectFlagFrame),
407 STRING_OPTION("OnHighlightedMessageSound", "", KviOption_sectFlagFrame),
408 STRING_OPTION("OnMeKickedSound", "", KviOption_sectFlagFrame),
409 STRING_OPTION("OnQueryMessageSound", "", KviOption_sectFlagFrame),
410 STRING_OPTION("IrcViewTimestampFormat", "[hh:mm:ss]", KviOption_sectFlagIrcView),
411 STRING_OPTION("PreferredTorrentClient", "auto", KviOption_sectFlagFrame),
412 STRING_OPTION("DefaultSrvEncoding", "", KviOption_sectFlagFrame),
413 STRING_OPTION("LogsPath", "", KviOption_sectFlagUser | KviOption_encodePath),
414 STRING_OPTION("LogsDynamicPath", "", KviOption_sectFlagUser | KviOption_encodePath),
415 STRING_OPTION("LogsExportPath", "", KviOption_sectFlagUser | KviOption_encodePath)
416 };
417
418 #define STRINGLIST_OPTION(_txt, _flags) \
419 KviStringListOption(KVI_STRINGLIST_OPTIONS_PREFIX _txt, QStringList(), _flags)
420
421 #define STRINGLIST_OPTION_WITHDEFAULT(_txt, _flags, _def) \
422 KviStringListOption(KVI_STRINGLIST_OPTIONS_PREFIX _txt, QStringList(_def), _flags)
423
424 KviStringListOption g_stringlistOptionsTable[KVI_NUM_STRINGLIST_OPTIONS] = {
425 STRINGLIST_OPTION("HighlightWords", KviOption_sectFlagIrcView),
426 STRINGLIST_OPTION("SpamWords", KviOption_sectFlagAntiSpam),
427 STRINGLIST_OPTION_WITHDEFAULT("RecentChannels", KviOption_sectFlagRecent, "#kvirc" KVI_RECENT_CHANNELS_SEPARATOR "freenode"),
428 STRINGLIST_OPTION("RecentServers", KviOption_sectFlagRecent),
429 STRINGLIST_OPTION("RecentNicknames", KviOption_sectFlagRecent),
430 STRINGLIST_OPTION("ModuleExtensionToolbars", KviOption_sectFlagFrame),
431 STRINGLIST_OPTION("ImageSearchPaths", KviOption_sectFlagFrame | KviOption_encodePath),
432 STRINGLIST_OPTION("RecentIrcUrls", KviOption_sectFlagRecent),
433 STRINGLIST_OPTION("SpellCheckerDictionaries", KviOption_sectFlagInput)
434 };
435
436 #define MIRC_COLOR_OPTION(_num, _red, _green, _blue) \
437 KviColorOption(KVI_MIRCCOLOR_OPTIONS_PREFIX _num, QColor(_red, _green, _blue), \
438 KviOption_sectFlagMircColor | KviOption_resetUpdateGui | KviOption_groupTheme)
439
440 KviColorOption g_mirccolorOptionsTable[KVI_NUM_MIRCCOLOR_OPTIONS] = {
441 MIRC_COLOR_OPTION("0", 255, 255, 255),
442 MIRC_COLOR_OPTION("1", 0, 0, 0),
443 MIRC_COLOR_OPTION("2", 0, 0, 140),
444 MIRC_COLOR_OPTION("3", 0, 100, 0),
445 MIRC_COLOR_OPTION("4", 230, 0, 0),
446 MIRC_COLOR_OPTION("5", 150, 0, 0),
447 MIRC_COLOR_OPTION("6", 80, 0, 80),
448 MIRC_COLOR_OPTION("7", 255, 90, 0),
449 MIRC_COLOR_OPTION("8", 255, 255, 0),
450 MIRC_COLOR_OPTION("9", 0, 255, 0),
451 MIRC_COLOR_OPTION("10", 0, 150, 180),
452 MIRC_COLOR_OPTION("11", 170, 170, 255),
453 MIRC_COLOR_OPTION("12", 15, 15, 255),
454 MIRC_COLOR_OPTION("13", 200, 0, 200),
455 MIRC_COLOR_OPTION("14", 80, 80, 80),
456 MIRC_COLOR_OPTION("15", 170, 170, 170)
457 };
458
459 #define COLOR_OPTION(_name, _red, _green, _blue, _alpha, _flags) \
460 KviColorOption(KVI_COLOR_OPTIONS_PREFIX _name, \
461 QColor(_red, _green, _blue, _alpha), \
462 _flags | KviOption_resetUpdateGui | KviOption_groupTheme | KviOption_resetUpdatePseudoTransparency)
463
464 KviColorOption g_colorOptionsTable[KVI_NUM_COLOR_OPTIONS] = {
465 COLOR_OPTION("WindowListNormalText", 0, 0, 0, 255, KviOption_sectFlagWindowList),
466 COLOR_OPTION("WindowListMinimizedText", 60, 60, 60, 255, KviOption_sectFlagWindowList),
467 COLOR_OPTION("WindowListHighlight1Text", 0, 16, 144, 255, KviOption_sectFlagWindowList),
468 COLOR_OPTION("WindowListHighlight2Text", 32, 0, 255, 255, KviOption_sectFlagWindowList),
469 COLOR_OPTION("WindowListProgressBar", 180, 180, 180, 255, KviOption_sectFlagWindowList),
470 COLOR_OPTION("UserListViewAwayForeground", 143, 143, 143, 255, KviOption_sectFlagUserListView),
471 COLOR_OPTION("UserListViewOwnForeground", 255, 255, 0, 255, KviOption_sectFlagUserListView),
472 COLOR_OPTION("UserListViewIrcOpForeground", 200, 0, 0, 255, KviOption_sectFlagUserListView),
473 COLOR_OPTION("NotifierBackground", 255, 255, 255, 255, KviOption_sectFlagNotifier),
474 COLOR_OPTION("NotifierForeground", 0, 0, 0, 255, KviOption_sectFlagNotifier),
475 COLOR_OPTION("NotifierTitleForeground", 255, 255, 255, 255, KviOption_sectFlagNotifier),
476 COLOR_OPTION("IrcViewBackground", 255, 255, 255, 255, KviOption_sectFlagIrcView),
477 COLOR_OPTION("InputBackground", 255, 255, 255, 255, KviOption_sectFlagInput),
478 COLOR_OPTION("InputSelectionBackground", 0, 0, 0, 255, KviOption_sectFlagInput),
479 COLOR_OPTION("InputSelectionForeground", 255, 255, 255, 255, KviOption_sectFlagInput),
480 COLOR_OPTION("InputCursor", 0, 0, 0, 255, KviOption_sectFlagInput),
481 COLOR_OPTION("InputControl", 200, 100, 0, 255, KviOption_sectFlagInput),
482 COLOR_OPTION("InputForeground", 0, 0, 0, 255, KviOption_sectFlagInput),
483 COLOR_OPTION("UserListViewBackground", 255, 255, 255, 255, KviOption_sectFlagUserListView),
484 COLOR_OPTION("UserListViewOpForeground", 200, 0, 0, 255, KviOption_sectFlagUserListView),
485 COLOR_OPTION("UserListViewVoiceForeground", 0, 0, 200, 255, KviOption_sectFlagUserListView),
486 COLOR_OPTION("UserListViewNormalForeground", 0, 0, 0, 255, KviOption_sectFlagUserListView),
487 COLOR_OPTION("UserListViewSelectionBackground", 0, 0, 0, 255, KviOption_sectFlagUserListView),
488 COLOR_OPTION("UserListViewSelectionForeground", 255, 255, 255, 255, KviOption_sectFlagUserListView),
489 COLOR_OPTION("LabelBackground", 255, 255, 255, 255, KviOption_sectFlagLabel),
490 COLOR_OPTION("LabelForeground", 0, 0, 0, 255, KviOption_sectFlagLabel),
491 COLOR_OPTION("GlobalTransparencyFade", 255, 255, 255, 255, KviOption_sectFlagGui),
492 COLOR_OPTION("IrcToolBarAppletBackground", 255, 255, 255, 255, KviOption_sectFlagIrcToolBar),
493 COLOR_OPTION("IrcToolBarAppletBorder", 110, 110, 110, 255, KviOption_sectFlagIrcToolBar),
494 COLOR_OPTION("IrcToolBarAppletFont", 0, 0, 0, 255, KviOption_sectFlagIrcToolBar),
495 COLOR_OPTION("TreeWindowListBackground", 255, 255, 255, 255, KviOption_sectFlagWindowList),
496 COLOR_OPTION("TreeWindowListActiveBackground", 200, 200, 200, 255, KviOption_sectFlagWindowList),
497 COLOR_OPTION("TreeWindowListForeground", 0, 0, 0, 255, KviOption_sectFlagWindowList),
498 COLOR_OPTION("TreeWindowListActiveForeground", 0, 0, 0, 255, KviOption_sectFlagWindowList),
499 COLOR_OPTION("TreeWindowListHighlight1Foreground", 0, 16, 144, 255, KviOption_sectFlagWindowList),
500 COLOR_OPTION("TreeWindowListHighlight2Foreground", 32, 0, 255, 255, KviOption_sectFlagWindowList),
501 COLOR_OPTION("TreeWindowListProgress", 150, 150, 150, 255, KviOption_sectFlagWindowList),
502 COLOR_OPTION("UserListViewHalfOpForeground", 119, 0, 178, 255, KviOption_sectFlagUserListView),
503 COLOR_OPTION("WindowListHighlight3Text", 128, 20, 255, 255, KviOption_sectFlagWindowList),
504 COLOR_OPTION("WindowListHighlight4Text", 220, 0, 255, 255, KviOption_sectFlagWindowList),
505 COLOR_OPTION("WindowListHighlight5Text", 255, 0, 0, 255, KviOption_sectFlagWindowList),
506 COLOR_OPTION("TreeWindowListHighlight3Foreground", 128, 0, 255, 255, KviOption_sectFlagWindowList),
507 COLOR_OPTION("TreeWindowListHighlight4Foreground", 220, 0, 255, 255, KviOption_sectFlagWindowList),
508 COLOR_OPTION("TreeWindowListHighlight5Foreground", 255, 0, 0, 255, KviOption_sectFlagWindowList),
509 COLOR_OPTION("UserListViewChanAdminForeground", 83, 54, 5, 255, KviOption_sectFlagUserListView),
510 COLOR_OPTION("UserListViewUserOpForeground", 0, 127, 178, 255, KviOption_sectFlagUserListView),
511 COLOR_OPTION("UserListViewGrid", 110, 110, 110, 255, KviOption_sectFlagUserListView),
512 COLOR_OPTION("UserListViewChanOwnerForeground", 81, 87, 111, 255, KviOption_sectFlagUserListView),
513 COLOR_OPTION("IrcViewMarkLine", 40, 40, 40, 255, KviOption_sectFlagIrcView)
514 };
515
516 #define IC_COLOR_OPTION(_num, _red, _green, _blue) \
517 KviColorOption( \
518 KVI_ICCOLOR_OPTIONS_PREFIX _num, \
519 QColor(_red, _green, _blue), \
520 KviOption_sectFlagWindowList | KviOption_resetUpdateGui | KviOption_groupTheme)
521
522 KviColorOption g_iccolorOptionsTable[KVI_NUM_ICCOLOR_OPTIONS] = {
523 IC_COLOR_OPTION("0", 250, 250, 0),
524 IC_COLOR_OPTION("1", 0, 0, 0),
525 IC_COLOR_OPTION("2", 0, 0, 200),
526 IC_COLOR_OPTION("3", 200, 0, 0),
527 IC_COLOR_OPTION("4", 255, 255, 255),
528 IC_COLOR_OPTION("5", 0, 150, 190),
529 IC_COLOR_OPTION("6", 0, 130, 0),
530 IC_COLOR_OPTION("7", 150, 0, 170)
531 };
532
533 #define PIXMAP_OPTION(_name, _flags) \
534 KviPixmapOption( \
535 KVI_PIXMAP_OPTIONS_PREFIX _name, \
536 KviPixmap(), \
537 _flags | KviOption_resetUpdateGui)
538
539 KviPixmapOption g_pixmapOptionsTable[KVI_NUM_PIXMAP_OPTIONS] = {
540 PIXMAP_OPTION("IrcViewBackground", KviOption_sectFlagIrcView | KviOption_groupTheme),
541 PIXMAP_OPTION("InputBackground", KviOption_sectFlagInput | KviOption_groupTheme),
542 PIXMAP_OPTION("UserListViewBackground", KviOption_sectFlagUserListView | KviOption_groupTheme),
543 PIXMAP_OPTION("LabelBackground", KviOption_sectFlagLabel | KviOption_groupTheme),
544 PIXMAP_OPTION("MyAvatar", KviOption_sectFlagUser),
545 PIXMAP_OPTION("IrcToolBarAppletBackground", KviOption_sectFlagIrcToolBar | KviOption_groupTheme),
546 PIXMAP_OPTION("TreeWindowListBackground", KviOption_sectFlagWindowList | KviOption_groupTheme),
547 PIXMAP_OPTION("GlobalTransparencyBackground", KviOption_sectFlagGui | KviOption_resetUpdatePseudoTransparency | KviOption_groupTheme),
548 PIXMAP_OPTION("NotifierBackground", KviOption_sectFlagNotifier | KviOption_groupTheme)
549 };
550
551 #define UINT_OPTION(_name, _value, _flags) \
552 KviUIntOption( \
553 KVI_UINT_OPTIONS_PREFIX _name, \
554 _value, \
555 _flags)
556
557 KviUIntOption g_uintOptionsTable[KVI_NUM_UINT_OPTIONS] = {
558 UINT_OPTION("IrcSocketTimeout", 60, KviOption_sectFlagIrcSocket),
559 UINT_OPTION("ModuleCleanupTimerInterval", 90, KviOption_sectFlagModules),
560 UINT_OPTION("ModuleCleanupTimeout", 180, KviOption_sectFlagModules),
561 UINT_OPTION("MaxCtcpRequests", 5, KviOption_sectFlagCtcp),
562 UINT_OPTION("CtcpFloodCheckInterval", 10, KviOption_sectFlagCtcp),
563 UINT_OPTION("TotalConnectionTime", 0, 0),
564 UINT_OPTION("DccSocketTimeout", 360, KviOption_sectFlagDcc),
565 UINT_OPTION("DccSendIdleStepInMSec", 30, KviOption_sectFlagDcc),
566 UINT_OPTION("DccSendPacketSize", 16384, KviOption_sectFlagDcc),
567 UINT_OPTION("GlobalTransparencyParentFadeFactor", 10, KviOption_sectFlagGui | KviOption_resetUpdatePseudoTransparency | KviOption_groupTheme),
568 UINT_OPTION("GlobalTransparencyChildFadeFactor", 50, KviOption_sectFlagGui | KviOption_resetUpdatePseudoTransparency | KviOption_groupTheme),
569 UINT_OPTION("NotifyListCheckTimeInSecs", 180, KviOption_sectFlagConnection),
570 UINT_OPTION("SocketQueueFlushTimeout", 500, KviOption_sectFlagIrcSocket),
571 UINT_OPTION("OutgoingTrafficLimitUSeconds", 2000000, KviOption_sectFlagIrcSocket),
572 UINT_OPTION("NotifyListIsOnDelayTimeInSecs", 6, KviOption_sectFlagConnection),
573 UINT_OPTION("NotifyListUserhostDelayTimeInSecs", 6, KviOption_sectFlagConnection),
574 UINT_OPTION("TreeWindowListMinimumWidth", 24, KviOption_sectFlagWindowList | KviOption_resetUpdateWindowList),
575 UINT_OPTION("AvatarOfferTimeoutInSecs", 60, KviOption_sectFlagAvatar),
576 UINT_OPTION("IrcViewMaxBufferSize", 1024, KviOption_sectFlagIrcView),
577 UINT_OPTION("IrcViewToolTipTimeoutInMsec", 1200, KviOption_sectFlagIrcView),
578 UINT_OPTION("IrcViewToolTipHideTimeoutInMsec", 12000, KviOption_sectFlagIrcView),
579 UINT_OPTION("DccVoicePreBufferSize", 32000, KviOption_sectFlagDcc),
580 UINT_OPTION("IdentdPort", 113, KviOption_sectFlagConnection | KviOption_resetRestartIdentd),
581 UINT_OPTION("AvatarScaleWidth", 80, KviOption_sectFlagAvatar | KviOption_resetUpdateGui),
582 UINT_OPTION("AvatarScaleHeight", 80, KviOption_sectFlagAvatar | KviOption_resetUpdateGui),
583 UINT_OPTION("DccMinPort", 30000, KviOption_sectFlagDcc),
584 UINT_OPTION("DccMaxPort", 31000, KviOption_sectFlagDcc),
585 UINT_OPTION("SoundOfferTimeoutInSecs", 60, KviOption_sectFlagConnection),
586 UINT_OPTION("MaximumRequestedAvatarSize", 524288, KviOption_sectFlagAvatar),
587 UINT_OPTION("GlobalWindowOpacityPercent", 100, KviOption_sectFlagGui | KviOption_resetUpdatePseudoTransparency | KviOption_groupTheme),
588 UINT_OPTION("PasteDelay", 2000, KviOption_sectFlagInput),
589 UINT_OPTION("MaxDccSendTransfers", 10, KviOption_sectFlagDcc),
590 UINT_OPTION("MaxDccSlots", 64, KviOption_sectFlagDcc),
591 UINT_OPTION("TileMethod", 5, KviOption_sectFlagMdi),
592 UINT_OPTION("LagMeterHeartbeat", 5000, KviOption_sectFlagConnection | KviOption_resetRestartLagMeter),
593 UINT_OPTION("LagAlarmTime", 120000, KviOption_sectFlagConnection),
594 UINT_OPTION("WindowListButtonMinWidth", 100, KviOption_sectFlagWindowList),
595 UINT_OPTION("OutputVerbosityLevel", KVI_VERBOSITY_LEVEL_NORMAL, KviOption_sectFlagFrame),
596 UINT_OPTION("IrcContextAppletWidth", 160, KviOption_sectFlagFrame),
597 UINT_OPTION("MinHighlightLevel", 0, KviOption_uintMinHighlightLevel),
598 UINT_OPTION("UserListViewGridType", 3, KviOption_sectFlagUserListView | KviOption_resetUpdateGui | KviOption_groupTheme),
599 UINT_OPTION("WindowListMaximumRows", 2, KviOption_sectFlagFrame),
600 UINT_OPTION("MaxAutoReconnectAttempts", 15, KviOption_sectFlagFrame),
601 UINT_OPTION("AutoReconnectDelay", 10, KviOption_sectFlagFrame),
602 UINT_OPTION("MaxDccSendSpeed", 0, KviOption_sectFlagFrame),
603 UINT_OPTION("MaxDccRecvSpeed", 0, KviOption_sectFlagFrame),
604 UINT_OPTION("TimeStampForeground", KviControlCodes::DarkGray, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme),
605 UINT_OPTION("TimeStampBackground", KviControlCodes::Transparent, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme),
606 UINT_OPTION("UserExperienceLevel", 1, KviOption_sectFlagUser),
607 UINT_OPTION("ClassicWindowListMaximumButtonWidth", 100, KviOption_sectFlagGeometry | KviOption_resetUpdateGui | KviOption_groupTheme),
608 UINT_OPTION("DefaultBanType", 9, KviOption_sectFlagIrcSocket),
609 UINT_OPTION("IrcViewPixmapAlign", 0, KviOption_sectFlagIrcView | KviOption_groupTheme),
610 UINT_OPTION("UserListPixmapAlign", 0, KviOption_sectFlagFrame | KviOption_groupTheme),
611 UINT_OPTION("ToolBarAppletPixmapAlign", 0, KviOption_sectFlagFrame | KviOption_groupTheme),
612 UINT_OPTION("TreeWindowListPixmapAlign", 0, KviOption_sectFlagFrame | KviOption_groupTheme),
613 UINT_OPTION("InputPixmapAlign", 0, KviOption_sectFlagFrame | KviOption_groupTheme),
614 UINT_OPTION("AutoFlushLogs", 30, KviOption_sectFlagFrame),
615 UINT_OPTION("MinTrayLowLevelMessage", 1, KviOption_sectFlagFrame),
616 UINT_OPTION("MinTrayHighLevelMessage", 4, KviOption_sectFlagFrame),
617 UINT_OPTION("IdentdOutputMode", KviIdentdOutputMode::Quiet, KviOption_sectFlagConnection),
618 UINT_OPTION("ScaleAvatarsOnLoadHeight", 640, KviOption_sectFlagAvatar),
619 UINT_OPTION("ScaleAvatarsOnLoadWidth", 480, KviOption_sectFlagAvatar),
620 UINT_OPTION("NotifierActiveTransparency", 100, KviOption_sectFlagNotifier | KviOption_groupTheme),
621 UINT_OPTION("NotifierInactiveTransparency", 80, KviOption_sectFlagNotifier | KviOption_groupTheme), // this may be cool but it confuses the user
622 UINT_OPTION("IrcViewMarkerStyle", 0, KviOption_sectFlagIrcView | KviOption_groupTheme),
623 UINT_OPTION("IrcViewMarkerSize", 1, KviOption_sectFlagIrcView | KviOption_groupTheme),
624 UINT_OPTION("UrlMouseClickNum", 2, KviOption_sectFlagUrl),
625 UINT_OPTION("NotifierAutoHideTime", 30, KviOption_sectFlagModules),
626 UINT_OPTION("LinesToPasteOnChannelJoin", 10, KviOption_sectFlagLogging),
627 UINT_OPTION("DaysIntervalToPasteOnChannelJoin", 10, KviOption_sectFlagLogging),
628 UINT_OPTION("LinesToPasteOnQueryJoin", 10, KviOption_sectFlagLogging),
629 UINT_OPTION("DaysIntervalToPasteOnQueryJoin", 10, KviOption_sectFlagLogging),
630 UINT_OPTION("SpacesToExpandTabulationInput", 4, KviOption_sectFlagInput),
631 UINT_OPTION("UserIrcViewOwnForeground", 4, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme),
632 UINT_OPTION("UserIrcViewOwnBackground", 8, KviOption_sectFlagIrcView | KviOption_resetUpdateGui | KviOption_groupTheme),
633 UINT_OPTION("NotifierPixmapAlign", 0, KviOption_sectFlagNotifier | KviOption_groupTheme),
634 UINT_OPTION("OutputDatetimeFormat", 0, KviOption_sectFlagIrcView),
635 UINT_OPTION("OnJoinRequestsDelay", 1, KviOption_sectFlagConnection), // FIXME: Wouldn't this be nicer in msecs defaulting to 100-200 ?
636 UINT_OPTION("ToolBarIconSize", 22, KviOption_groupTheme | KviOption_resetReloadImages),
637 UINT_OPTION("ToolBarButtonStyle", 0, KviOption_groupTheme), // 0 = Qt::ToolButtonIconOnly
638 UINT_OPTION("MaximumBlowFishKeySize", 56, KviOption_sectFlagNone),
639 UINT_OPTION("CustomCursorWidth", 1, KviOption_resetUpdateGui),
640 UINT_OPTION("UserListMinimumWidth", 100, KviOption_sectFlagUserListView | KviOption_resetUpdateGui | KviOption_groupTheme)
641 };
642
643 #define FONT_OPTION(_name, _face, _size, _flags) \
644 KviFontOption( \
645 KVI_FONT_OPTIONS_PREFIX _name, \
646 QFont(_face, _size), \
647 _flags | KviOption_groupTheme)
648
649 KviFontOption g_fontOptionsTable[KVI_NUM_FONT_OPTIONS] = {
650 #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
651 FONT_OPTION("IrcView", "Arial", 9, KviOption_sectFlagIrcView | KviOption_resetUpdateGui),
652 FONT_OPTION("Input", "Arial", 12, KviOption_sectFlagInput | KviOption_resetUpdateGui),
653 FONT_OPTION("UserListView", "Arial", 9, KviOption_sectFlagUserListView | KviOption_resetUpdateGui),
654 FONT_OPTION("Label", "Arial", 9, KviOption_sectFlagLabel | KviOption_resetUpdateGui),
655 FONT_OPTION("Application", "Arial", 9, KviOption_sectFlagGui | KviOption_resetUpdateAppFont),
656 FONT_OPTION("WindowList", "Arial", 9, KviOption_sectFlagWindowList | KviOption_resetUpdateWindowList),
657 FONT_OPTION("TreeWindowList", "Arial", 9, KviOption_sectFlagWindowList | KviOption_resetUpdateWindowList),
658 FONT_OPTION("Notifier", "Arial", 9, KviOption_sectFlagNotifier | KviOption_resetUpdateGui),
659 FONT_OPTION("NotifierTitle", "Arial", 9, KviOption_sectFlagNotifier | KviOption_resetUpdateGui)
660 #elif defined(COMPILE_ON_MAC)
661 FONT_OPTION("IrcView", "Lucida Grande", 12, KviOption_sectFlagIrcView | KviOption_resetUpdateGui),
662 FONT_OPTION("Input", "Lucida Grande", 12, KviOption_sectFlagInput | KviOption_resetUpdateGui),
663 FONT_OPTION("UserListView", "Lucida Grande", 12, KviOption_sectFlagUserListView | KviOption_resetUpdateGui),
664 FONT_OPTION("Label", "Lucida Grande", 12, KviOption_sectFlagLabel | KviOption_resetUpdateGui),
665 FONT_OPTION("Application", "Lucida Grande", 12, KviOption_sectFlagGui | KviOption_resetUpdateAppFont),
666 FONT_OPTION("WindowList", "Lucida Grande", 12, KviOption_sectFlagWindowList | KviOption_resetUpdateWindowList),
667 FONT_OPTION("TreeWindowList", "Lucida Grande", 12, KviOption_sectFlagWindowList | KviOption_resetUpdateWindowList),
668 FONT_OPTION("Notifier", "Lucida Grande", 12, KviOption_sectFlagNotifier | KviOption_resetUpdateNotifier),
669 FONT_OPTION("NotifierTitle", "Lucida Grande", 12, KviOption_sectFlagNotifier | KviOption_resetUpdateNotifier)
670 #else
671 FONT_OPTION("IrcView", "sans-serif", 10, KviOption_sectFlagIrcView | KviOption_resetUpdateGui),
672 FONT_OPTION("Input", "sans-serif", 10, KviOption_sectFlagInput | KviOption_resetUpdateGui),
673 FONT_OPTION("UserListView", "sans-serif", 10, KviOption_sectFlagUserListView | KviOption_resetUpdateGui),
674 FONT_OPTION("Label", "sans-serif", 10, KviOption_sectFlagLabel | KviOption_resetUpdateGui),
675 FONT_OPTION("Application", "sans-serif", 10, KviOption_sectFlagGui | KviOption_resetUpdateAppFont),
676 FONT_OPTION("WindowList", "sans-serif", 10, KviOption_sectFlagWindowList | KviOption_resetUpdateWindowList),
677 FONT_OPTION("TreeWindowList", "sans-serif", 10, KviOption_sectFlagWindowList | KviOption_resetUpdateWindowList),
678 FONT_OPTION("Notifier", "sans-serif", 10, KviOption_sectFlagNotifier | KviOption_resetUpdateNotifier),
679 FONT_OPTION("NotifierTitle", "sans-serif", 10, KviOption_sectFlagNotifier | KviOption_resetUpdateNotifier)
680 #endif
681 };
682
683 #define MSGTYPE_OPTION(_name, _text, _icon, _levl) \
684 KviMessageTypeSettingsOption( \
685 KVI_MSGTYPE_OPTIONS_PREFIX _name, \
686 KviMessageTypeSettings(_text, _icon, KviControlCodes::Black, KviControlCodes::Transparent, true, _levl), \
687 KviOption_sectFlagMsgType | KviOption_groupTheme)
688
689 #define MSGTYPE_OPTION_SPEC(_name, _text, _icon, _fore, _back, _levl) \
690 KviMessageTypeSettingsOption( \
691 KVI_MSGTYPE_OPTIONS_PREFIX _name, \
692 KviMessageTypeSettings(_text, _icon, _fore, _back, true, _levl), \
693 KviOption_sectFlagMsgType | KviOption_groupTheme)
694
695 // FIXME: #warning "FIX THE ICONS HERE!!!"
696 KviMessageTypeSettingsOption g_msgtypeOptionsTable[KVI_NUM_MSGTYPE_OPTIONS] = {
697 MSGTYPE_OPTION("Echo", __tr_no_lookup("Normal text"), KviIconManager::None, KVI_MSGTYPE_LEVEL_1),
698 MSGTYPE_OPTION_SPEC("Selection", __tr_no_lookup("Selection"), KviIconManager::None, KviControlCodes::White, KviControlCodes::Black, KVI_MSGTYPE_LEVEL_1),
699 MSGTYPE_OPTION_SPEC("Highlight", __tr_no_lookup("Highlighted text"), KviIconManager::HighlightText, KviControlCodes::White, KviControlCodes::Black, KVI_MSGTYPE_LEVEL_5),
700 MSGTYPE_OPTION_SPEC("URL", __tr_no_lookup("URL foreground"), KviIconManager::Url, KviControlCodes::Blue, KviControlCodes::Transparent, KVI_MSGTYPE_LEVEL_1),
701 MSGTYPE_OPTION_SPEC("Link", __tr_no_lookup("Link mouse hover foreground"), KviIconManager::Url, KviControlCodes::Blue, KviControlCodes::Transparent, KVI_MSGTYPE_LEVEL_1),
702 MSGTYPE_OPTION_SPEC("ParserError", __tr_no_lookup("Parser error"), KviIconManager::ParserError, KviControlCodes::Red, KviControlCodes::Transparent, KVI_MSGTYPE_LEVEL_2),
703 MSGTYPE_OPTION_SPEC("ParserWarning", __tr_no_lookup("Parser warning"), KviIconManager::ParserWarning, KviControlCodes::Red, KviControlCodes::Transparent, KVI_MSGTYPE_LEVEL_2),
704 MSGTYPE_OPTION("HostLookup", __tr_no_lookup("Host lookup result"), KviIconManager::Server, KVI_MSGTYPE_LEVEL_3),
705 MSGTYPE_OPTION("SocketMessage", __tr_no_lookup("Socket message"), KviIconManager::SocketMessage, KVI_MSGTYPE_LEVEL_1),
706 MSGTYPE_OPTION("SocketWarning", __tr_no_lookup("Socket warning"), KviIconManager::SocketWarning, KVI_MSGTYPE_LEVEL_3),
707 MSGTYPE_OPTION_SPEC("SocketError", __tr_no_lookup("Socket error"), KviIconManager::SocketError, KviControlCodes::Red, KviControlCodes::Transparent, KVI_MSGTYPE_LEVEL_3),
708 MSGTYPE_OPTION_SPEC("SystemError", __tr_no_lookup("System error"), KviIconManager::SystemError, KviControlCodes::Red, KviControlCodes::Transparent, KVI_MSGTYPE_LEVEL_3),
709 MSGTYPE_OPTION("RAW", __tr_no_lookup("RAW data to server"), KviIconManager::Raw, KVI_MSGTYPE_LEVEL_1),
710 MSGTYPE_OPTION("Connection", __tr_no_lookup("Connection status"), KviIconManager::World, KVI_MSGTYPE_LEVEL_1),
711 MSGTYPE_OPTION("SystemWarning", __tr_no_lookup("System warning"), KviIconManager::SystemWarning, KVI_MSGTYPE_LEVEL_3),
712 MSGTYPE_OPTION("SystemMessage", __tr_no_lookup("System message"), KviIconManager::SystemMessage, KVI_MSGTYPE_LEVEL_1),
713 MSGTYPE_OPTION("UnhandledReply", __tr_no_lookup("Unhandled server reply"), KviIconManager::UnHandled, KVI_MSGTYPE_LEVEL_1),
714 MSGTYPE_OPTION("ServerInfo", __tr_no_lookup("Server information"), KviIconManager::ServerInfo, KVI_MSGTYPE_LEVEL_1),
715 MSGTYPE_OPTION("MOTD", __tr_no_lookup("Server message of the day"), KviIconManager::Motd, KVI_MSGTYPE_LEVEL_1),
716 MSGTYPE_OPTION("ServerPing", __tr_no_lookup("Server ping"), KviIconManager::ServerPing, KVI_MSGTYPE_LEVEL_1),
717 MSGTYPE_OPTION("Join", __tr_no_lookup("Join message"), KviIconManager::Join, KVI_MSGTYPE_LEVEL_1),
718 MSGTYPE_OPTION("Part", __tr_no_lookup("Part message"), KviIconManager::Part, KVI_MSGTYPE_LEVEL_1),
719 MSGTYPE_OPTION("Unrecognized", __tr_no_lookup("Unrecognized/broken message"), KviIconManager::Unrecognized, KVI_MSGTYPE_LEVEL_2),
720 MSGTYPE_OPTION("Topic", __tr_no_lookup("Topic message"), KviIconManager::Topic, KVI_MSGTYPE_LEVEL_3),
721 MSGTYPE_OPTION("OwnPrivateMessage", __tr_no_lookup("Own private message"), KviIconManager::OwnPrivMsg, KVI_MSGTYPE_LEVEL_1),
722 MSGTYPE_OPTION("ChannelPrivateMessage", __tr_no_lookup("Channel private message"), KviIconManager::ChanPrivMsg, KVI_MSGTYPE_LEVEL_4),
723 MSGTYPE_OPTION("QueryPrivateMessage", __tr_no_lookup("Query private message"), KviIconManager::QueryPrivMsg, KVI_MSGTYPE_LEVEL_4),
724 MSGTYPE_OPTION("CTCPReply", __tr_no_lookup("CTCP reply"), KviIconManager::CtcpReply, KVI_MSGTYPE_LEVEL_3),
725 MSGTYPE_OPTION("CTCPRequestReplied", __tr_no_lookup("CTCP request replied"), KviIconManager::CtcpRequestReplied, KVI_MSGTYPE_LEVEL_3),
726 MSGTYPE_OPTION("CTCPRequestIgnored", __tr_no_lookup("CTCP request ignored"), KviIconManager::CtcpRequestIgnored, KVI_MSGTYPE_LEVEL_3),
727 MSGTYPE_OPTION("CTCPRequestFlood", __tr_no_lookup("CTCP request flood warning"), KviIconManager::CtcpRequestFlood, KVI_MSGTYPE_LEVEL_3),
728 MSGTYPE_OPTION("CTCPRequestUnknown", __tr_no_lookup("CTCP request unknown"), KviIconManager::CtcpRequestUnknown, KVI_MSGTYPE_LEVEL_3),
729 MSGTYPE_OPTION("Action", __tr_no_lookup("User action"), KviIconManager::Action, KVI_MSGTYPE_LEVEL_3),
730 MSGTYPE_OPTION("AvatarChange", __tr_no_lookup("Avatar change"), KviIconManager::Avatar, KVI_MSGTYPE_LEVEL_3),
731 MSGTYPE_OPTION("Quit", __tr_no_lookup("Quit message"), KviIconManager::Quit, KVI_MSGTYPE_LEVEL_1),
732 MSGTYPE_OPTION("Split", __tr_no_lookup("Split message"), KviIconManager::Split, KVI_MSGTYPE_LEVEL_2),
733 MSGTYPE_OPTION("QuitSplit", __tr_no_lookup("Quit on netsplit message"), KviIconManager::QuitSplit, KVI_MSGTYPE_LEVEL_2),
734 MSGTYPE_OPTION("Nick", __tr_no_lookup("Nick changes"), KviIconManager::Nick, KVI_MSGTYPE_LEVEL_2),
735 MSGTYPE_OPTION("Op", __tr_no_lookup("+o mode change"), KviIconManager::Op, KVI_MSGTYPE_LEVEL_2),
736 MSGTYPE_OPTION("Deop", __tr_no_lookup("-o mode change"), KviIconManager::DeOp, KVI_MSGTYPE_LEVEL_2),
737 MSGTYPE_OPTION("Voice", __tr_no_lookup("+v mode change"), KviIconManager::Voice, KVI_MSGTYPE_LEVEL_2),
738 MSGTYPE_OPTION("Devoice", __tr_no_lookup("-v mode change"), KviIconManager::DeVoice, KVI_MSGTYPE_LEVEL_2),
739 MSGTYPE_OPTION("Mode", __tr_no_lookup("Multiple user mode change"), KviIconManager::Mode, KVI_MSGTYPE_LEVEL_2), //This is a generic icon for both user/chan
740 MSGTYPE_OPTION("Key", __tr_no_lookup("Channel key change"), KviIconManager::Key, KVI_MSGTYPE_LEVEL_2),
741 MSGTYPE_OPTION("Limit", __tr_no_lookup("Channel limit change"), KviIconManager::Limit, KVI_MSGTYPE_LEVEL_2),
742 MSGTYPE_OPTION("Ban", __tr_no_lookup("+b mode change"), KviIconManager::Ban, KVI_MSGTYPE_LEVEL_2),
743 MSGTYPE_OPTION("Unban", __tr_no_lookup("-b mode change"), KviIconManager::UnBan, KVI_MSGTYPE_LEVEL_2),
744 MSGTYPE_OPTION("BanExcept", __tr_no_lookup("+e mode change"), KviIconManager::BanExcept, KVI_MSGTYPE_LEVEL_2),
745 MSGTYPE_OPTION("BanUnexcept", __tr_no_lookup("-e mode change"), KviIconManager::BanUnExcept, KVI_MSGTYPE_LEVEL_2),
746 MSGTYPE_OPTION("InviteExcept", __tr_no_lookup("+I mode change"), KviIconManager::InviteExcept, KVI_MSGTYPE_LEVEL_2),
747 MSGTYPE_OPTION("InviteUnexcept", __tr_no_lookup("-I mode change"), KviIconManager::InviteUnExcept, KVI_MSGTYPE_LEVEL_2),
748 MSGTYPE_OPTION("ChanMode", __tr_no_lookup("Multiple channel mode change"), KviIconManager::Mode, KVI_MSGTYPE_LEVEL_2), //This is a generic icon for both user/chan
749 MSGTYPE_OPTION("WHO", __tr_no_lookup("Who reply"), KviIconManager::Who, KVI_MSGTYPE_LEVEL_3),
750 MSGTYPE_OPTION("DCCRequest", __tr_no_lookup("DCC request"), KviIconManager::DccRequest, KVI_MSGTYPE_LEVEL_3),
751 MSGTYPE_OPTION("DCCMsg", __tr_no_lookup("DCC message"), KviIconManager::DccMsg, KVI_MSGTYPE_LEVEL_2),
752 MSGTYPE_OPTION("DCCError", __tr_no_lookup("DCC error"), KviIconManager::DccError, KVI_MSGTYPE_LEVEL_3),
753 MSGTYPE_OPTION("NicknameProblem", __tr_no_lookup("Nickname problem"), KviIconManager::NickNameProblem, KVI_MSGTYPE_LEVEL_3),
754 MSGTYPE_OPTION("WHOISUser", __tr_no_lookup("WHOIS user reply"), KviIconManager::WhoisUser, KVI_MSGTYPE_LEVEL_3),
755 MSGTYPE_OPTION("WHOISChannels", __tr_no_lookup("WHOIS channels reply"), KviIconManager::WhoisChannels, KVI_MSGTYPE_LEVEL_3),
756 MSGTYPE_OPTION("WHOISIdle", __tr_no_lookup("WHOIS idle reply"), KviIconManager::WhoisIdle, KVI_MSGTYPE_LEVEL_3),
757 MSGTYPE_OPTION("WHOISServer", __tr_no_lookup("WHOIS server reply"), KviIconManager::WhoisServer, KVI_MSGTYPE_LEVEL_3),
758 MSGTYPE_OPTION("WHOISOther", __tr_no_lookup("WHOIS other reply"), KviIconManager::WhoisOther, KVI_MSGTYPE_LEVEL_3),
759 MSGTYPE_OPTION("CreationTime", __tr_no_lookup("Channel creation time reply"), KviIconManager::Time, KVI_MSGTYPE_LEVEL_1),
760 MSGTYPE_OPTION("NotifyOnLine", __tr_no_lookup("Notify list joins"), KviIconManager::NotifyOnLine, KVI_MSGTYPE_LEVEL_3),
761 MSGTYPE_OPTION("NotifyOffLine", __tr_no_lookup("Notify list leaves"), KviIconManager::NotifyOffLine, KVI_MSGTYPE_LEVEL_3),
762 MSGTYPE_OPTION("OwnPrivmsgCrypted", __tr_no_lookup("Own encrypted private message"), KviIconManager::OwnPrivMsgCrypted, KVI_MSGTYPE_LEVEL_1),
763 MSGTYPE_OPTION("ChanPrivmsgCrypted", __tr_no_lookup("Channel encrypted private message"), KviIconManager::ChanPrivMsgCrypted, KVI_MSGTYPE_LEVEL_3),
764 MSGTYPE_OPTION("QueryPrivmsgCrypted", __tr_no_lookup("Query encrypted private message"), KviIconManager::QueryPrivMsgCrypted, KVI_MSGTYPE_LEVEL_3),
765 MSGTYPE_OPTION("DCCChatMsg", __tr_no_lookup("DCC chat message"), KviIconManager::DccChatMsg, KVI_MSGTYPE_LEVEL_3),
766 MSGTYPE_OPTION("DCCChatMsgCrypted", __tr_no_lookup("Encrypted DCC chat message"), KviIconManager::DccChatMsgCrypted, KVI_MSGTYPE_LEVEL_3),
767 MSGTYPE_OPTION("IRC", __tr_no_lookup("Login operations completed"), KviIconManager::Irc, KVI_MSGTYPE_LEVEL_1),
768 MSGTYPE_OPTION("Kick", __tr_no_lookup("Kick action"), KviIconManager::Kick, KVI_MSGTYPE_LEVEL_2),
769 MSGTYPE_OPTION("Links", __tr_no_lookup("Links reply"), KviIconManager::Links, KVI_MSGTYPE_LEVEL_1),
770 MSGTYPE_OPTION("Spam", __tr_no_lookup("Spam report"), KviIconManager::Spam, KVI_MSGTYPE_LEVEL_3),
771 MSGTYPE_OPTION("ICQ", __tr_no_lookup("ICQ message"), KviIconManager::Icq, KVI_MSGTYPE_LEVEL_1),
772 MSGTYPE_OPTION("ICQMessage", __tr_no_lookup("ICQ user-message"), KviIconManager::Message, KVI_MSGTYPE_LEVEL_1),
773 MSGTYPE_OPTION("ICQMessageSent", __tr_no_lookup("Outgoing ICQ user-message"), KviIconManager::MessageSent, KVI_MSGTYPE_LEVEL_1),
774 MSGTYPE_OPTION("ChannelNotice", __tr_no_lookup("Channel notice"), KviIconManager::ChannelNotice, KVI_MSGTYPE_LEVEL_3),
775 MSGTYPE_OPTION("ChannelNoticeCrypted", __tr_no_lookup("Encrypted channel notice"), KviIconManager::ChannelNoticeCrypted, KVI_MSGTYPE_LEVEL_3),
776 MSGTYPE_OPTION("QueryNotice", __tr_no_lookup("Query notice"), KviIconManager::QueryNotice, KVI_MSGTYPE_LEVEL_3),
777 MSGTYPE_OPTION("QueryNoticeCrypted", __tr_no_lookup("Encrypted query notice"), KviIconManager::QueryNoticeCrypted, KVI_MSGTYPE_LEVEL_3),
778 MSGTYPE_OPTION("ServerNotice", __tr_no_lookup("Server notice"), KviIconManager::ServerNotice, KVI_MSGTYPE_LEVEL_3),
779 MSGTYPE_OPTION("HalfOp", __tr_no_lookup("Halfop mode change"), KviIconManager::HalfOp, KVI_MSGTYPE_LEVEL_2),
780 MSGTYPE_OPTION("CTCPReplyUnknown", __tr_no_lookup("Unknown CTCP reply"), KviIconManager::CtcpReplyUnknown, KVI_MSGTYPE_LEVEL_3),
781 MSGTYPE_OPTION("NickServ", __tr_no_lookup("NickServ message"), KviIconManager::NickServ, KVI_MSGTYPE_LEVEL_3),
782 MSGTYPE_OPTION("ChanServ", __tr_no_lookup("ChanServ message"), KviIconManager::ChanServ, KVI_MSGTYPE_LEVEL_1),
783 MSGTYPE_OPTION("Away", __tr_no_lookup("Away message"), KviIconManager::Away, KVI_MSGTYPE_LEVEL_3),
784 MSGTYPE_OPTION("Ident", __tr_no_lookup("Ident message"), KviIconManager::Ident, KVI_MSGTYPE_LEVEL_3),
785 MSGTYPE_OPTION("List", __tr_no_lookup("Channel list message"), KviIconManager::List, KVI_MSGTYPE_LEVEL_1),
786 MSGTYPE_OPTION("HalfDeOp", __tr_no_lookup("Half-deop mode change"), KviIconManager::HalfDeOp, KVI_MSGTYPE_LEVEL_2),
787 MSGTYPE_OPTION("Invite", __tr_no_lookup("Invite message"), KviIconManager::Invite, KVI_MSGTYPE_LEVEL_3),
788 MSGTYPE_OPTION("Multimedia", __tr_no_lookup("Multimedia message"), KviIconManager::MultiMedia, KVI_MSGTYPE_LEVEL_2),
789 MSGTYPE_OPTION("QueryTrace", __tr_no_lookup("Query trace message"), KviIconManager::QueryTrace, KVI_MSGTYPE_LEVEL_1),
790 MSGTYPE_OPTION("Wallops", __tr_no_lookup("Wallops message"), KviIconManager::WallOps, KVI_MSGTYPE_LEVEL_3),
791 MSGTYPE_OPTION("JoinError", __tr_no_lookup("Join error message"), KviIconManager::NoChannel, KVI_MSGTYPE_LEVEL_3),
792 MSGTYPE_OPTION("BroadcastPrivmsg", __tr_no_lookup("Broadcast private message"), KviIconManager::BroadcastPrivMsg, KVI_MSGTYPE_LEVEL_3),
793 MSGTYPE_OPTION("BroadcastNotice", __tr_no_lookup("Broadcast notice"), KviIconManager::BroadcastNotice, KVI_MSGTYPE_LEVEL_3),
794 MSGTYPE_OPTION("MeKick", __tr_no_lookup("Am kicked"), KviIconManager::MeKick, KVI_MSGTYPE_LEVEL_5),
795 MSGTYPE_OPTION("MeOp", __tr_no_lookup("Am op'd"), KviIconManager::MeOp, KVI_MSGTYPE_LEVEL_5),
796 MSGTYPE_OPTION("MeVoice", __tr_no_lookup("Am voiced"), KviIconManager::MeVoice, KVI_MSGTYPE_LEVEL_5),
797 MSGTYPE_OPTION("MeDeOp", __tr_no_lookup("Am deop'd"), KviIconManager::MeDeOp, KVI_MSGTYPE_LEVEL_5),
798 MSGTYPE_OPTION("MeDeVoice", __tr_no_lookup("Am devoiced"), KviIconManager::MeDeVoice, KVI_MSGTYPE_LEVEL_5),
799 MSGTYPE_OPTION("MeHalfOp", __tr_no_lookup("Am halfop'd"), KviIconManager::MeHalfOp, KVI_MSGTYPE_LEVEL_5),
800 MSGTYPE_OPTION("MeDeHalfOp", __tr_no_lookup("Am de-halfop'd"), KviIconManager::MeDeHalfOp, KVI_MSGTYPE_LEVEL_5),
801 MSGTYPE_OPTION("MeBan", __tr_no_lookup("Ban matching my mask"), KviIconManager::MeBan, KVI_MSGTYPE_LEVEL_5),
802 MSGTYPE_OPTION("MeUnban", __tr_no_lookup("Unban matching my mask"), KviIconManager::MeUnBan, KVI_MSGTYPE_LEVEL_5),
803 MSGTYPE_OPTION("MeBanExcept", __tr_no_lookup("Ban exception matching my mask"), KviIconManager::MeBanExcept, KVI_MSGTYPE_LEVEL_5),
804 MSGTYPE_OPTION("MeBanUnExcept", __tr_no_lookup("Ban unexception matching my mask"), KviIconManager::MeBanUnExcept, KVI_MSGTYPE_LEVEL_5),
805 MSGTYPE_OPTION("MeInviteExcept", __tr_no_lookup("Invite exception matching my mask"), KviIconManager::MeInviteExcept, KVI_MSGTYPE_LEVEL_5),
806 MSGTYPE_OPTION("MeInviteUnexcept", __tr_no_lookup("Invite unexception matching my mask"), KviIconManager::MeInviteUnExcept, KVI_MSGTYPE_LEVEL_5),
807 MSGTYPE_OPTION("Ignore", __tr_no_lookup("Ignored user message"), KviIconManager::Ignore, KVI_MSGTYPE_LEVEL_3),
808 MSGTYPE_OPTION("Stats", __tr_no_lookup("Server statistics"), KviIconManager::Stats, KVI_MSGTYPE_LEVEL_1),
809 MSGTYPE_OPTION("SSL", __tr_no_lookup("SSL message"), KviIconManager::Ssl, KVI_MSGTYPE_LEVEL_1),
810 MSGTYPE_OPTION("Search", __tr_no_lookup("Search"), KviIconManager::Search, KVI_MSGTYPE_LEVEL_1),
811 MSGTYPE_OPTION("GenericSuccess", __tr_no_lookup("Generic success"), KviIconManager::CyanSquare, KVI_MSGTYPE_LEVEL_3),
812 MSGTYPE_OPTION("GenericStatus", __tr_no_lookup("Generic status"), KviIconManager::GreenSquare, KVI_MSGTYPE_LEVEL_2),
813 MSGTYPE_OPTION("GenericVerbose", __tr_no_lookup("Generic verbose message"), KviIconManager::DarkGreenSquare, KVI_MSGTYPE_LEVEL_1),
814 MSGTYPE_OPTION("GenericWarning", __tr_no_lookup("Generic warning"), KviIconManager::YellowSquare, KVI_MSGTYPE_LEVEL_3),
815 MSGTYPE_OPTION_SPEC("GenericError", __tr_no_lookup("Generic error"), KviIconManager::RedSquare, KviControlCodes::Red, KviControlCodes::Transparent, KVI_MSGTYPE_LEVEL_5),
816 MSGTYPE_OPTION_SPEC("GenericCritical", __tr_no_lookup("Generic critical error"), KviIconManager::BlackSquare, KviControlCodes::Red, KviControlCodes::Transparent, KVI_MSGTYPE_LEVEL_5),
817 MSGTYPE_OPTION("ChanAdmin", __tr_no_lookup("Chan admin status set"), KviIconManager::ChanAdmin, KVI_MSGTYPE_LEVEL_5),
818 MSGTYPE_OPTION("ChanUnAdmin", __tr_no_lookup("Chan admin status unset"), KviIconManager::ChanUnAdmin, KVI_MSGTYPE_LEVEL_5),
819 MSGTYPE_OPTION("MeChanAdmin", __tr_no_lookup("Own chan admin status set"), KviIconManager::MeChanAdmin, KVI_MSGTYPE_LEVEL_5),
820 MSGTYPE_OPTION("MeChanUnAdmin", __tr_no_lookup("Own chan admin status unset"), KviIconManager::MeChanUnAdmin, KVI_MSGTYPE_LEVEL_5),
821 MSGTYPE_OPTION("UserOp", __tr_no_lookup("Userop mode change"), KviIconManager::UserOp, KVI_MSGTYPE_LEVEL_2),
822 MSGTYPE_OPTION("UserDeOp", __tr_no_lookup("User-deop mode change"), KviIconManager::DeUserOp, KVI_MSGTYPE_LEVEL_2),
823 MSGTYPE_OPTION("MeUserOp", __tr_no_lookup("Am userop'd"), KviIconManager::MeUserOp, KVI_MSGTYPE_LEVEL_5),
824 MSGTYPE_OPTION("MeDeUserOp", __tr_no_lookup("Am de-userop'd"), KviIconManager::MeDeUserOp, KVI_MSGTYPE_LEVEL_5),
825 MSGTYPE_OPTION_SPEC("Verbose", __tr_no_lookup("Verbose/Debug"), KviIconManager::BinaryText, KviControlCodes::DarkGray, KviControlCodes::Transparent, KVI_MSGTYPE_LEVEL_1),
826 MSGTYPE_OPTION("ChanOwner", __tr_no_lookup("Chan owner status set"), KviIconManager::ChanOwner, KVI_MSGTYPE_LEVEL_5),
827 MSGTYPE_OPTION("ChanUnOwner", __tr_no_lookup("Chan owner status unset"), KviIconManager::ChanUnOwner, KVI_MSGTYPE_LEVEL_5),
828 MSGTYPE_OPTION("MeChanOwner", __tr_no_lookup("Own chan owner status set"), KviIconManager::MeChanOwner, KVI_MSGTYPE_LEVEL_5),
829 MSGTYPE_OPTION("MeChanUnOwner", __tr_no_lookup("Own chan owner status unset"), KviIconManager::MeChanUnOwner, KVI_MSGTYPE_LEVEL_5),
830 MSGTYPE_OPTION_SPEC("ServerError", __tr_no_lookup("Server error"), KviIconManager::ServerError, KviControlCodes::Red, KviControlCodes::Transparent, KVI_MSGTYPE_LEVEL_5),
831 MSGTYPE_OPTION_SPEC("Help", __tr_no_lookup("Help"), KviIconManager::Help, KviControlCodes::DarkGreen, KviControlCodes::Transparent, KVI_MSGTYPE_LEVEL_1),
832 MSGTYPE_OPTION("TextEncoding", __tr_no_lookup("Text encoding server message"), KviIconManager::TextEncoding, KVI_MSGTYPE_LEVEL_1),
833 MSGTYPE_OPTION("BitTorrent", __tr_no_lookup("BitTorrent message"), KviIconManager::Gnutella, KVI_MSGTYPE_LEVEL_2),
834 MSGTYPE_OPTION("IrcOp", __tr_no_lookup("IRC Op status set"), KviIconManager::IrcOp, KVI_MSGTYPE_LEVEL_5),
835 MSGTYPE_OPTION("DeIrcOp", __tr_no_lookup("IRC Op status unset"), KviIconManager::DeIrcOp, KVI_MSGTYPE_LEVEL_5),
836 MSGTYPE_OPTION("MeIrcOp", __tr_no_lookup("Own IRC Op status set"), KviIconManager::MeIrcOp, KVI_MSGTYPE_LEVEL_5),
837 MSGTYPE_OPTION("MeDeIrcOp", __tr_no_lookup("Own IRC Op status unset"), KviIconManager::MeDeIrcOp, KVI_MSGTYPE_LEVEL_5),
838 MSGTYPE_OPTION("Cap", __tr_no_lookup("Extended capability message"), KviIconManager::ServerInfo, KVI_MSGTYPE_LEVEL_1),
839 MSGTYPE_OPTION("ChanURL", __tr_no_lookup("Channel URL"), KviIconManager::Url, KVI_MSGTYPE_LEVEL_3),
840 MSGTYPE_OPTION("MemoServ", __tr_no_lookup("MemoServ message"), KviIconManager::MemoServ, KVI_MSGTYPE_LEVEL_1),
841 MSGTYPE_OPTION("Log", __tr_no_lookup("Log message"), KviIconManager::Log, KVI_MSGTYPE_LEVEL_1),
842 MSGTYPE_OPTION("ActionCrypted", __tr_no_lookup("Encrypted user action"), KviIconManager::ActionCrypted, KVI_MSGTYPE_LEVEL_3),
843 MSGTYPE_OPTION("OwnAction", __tr_no_lookup("Own action"), KviIconManager::OwnAction, KVI_MSGTYPE_LEVEL_1),
844 MSGTYPE_OPTION("OwnActionCrypted", __tr_no_lookup("Own encrypted action"), KviIconManager::OwnActionCrypted, KVI_MSGTYPE_LEVEL_1),
845 MSGTYPE_OPTION("TopicCrypted", __tr_no_lookup("Encrypted topic message"), KviIconManager::TopicCrypted, KVI_MSGTYPE_LEVEL_3),
846 };
847
848 static const char * options_section_table[KVI_NUM_OPTION_SECT_FLAGS] = {
849 "None", "Frame", "Mdi", "Windows",
850 "WindowList", "IrcView", "MsgType", "MircColor",
851 "Input", "UserParser", "Connection", "IrcSocket",
852 "User", "UserListView", "Label", "Modules",
853 "Ctcp", "Dcc", "Gui", "IrcToolBar",
854 "Logging", "AntiSpam", "Avatar", "Url",
855 "Recent", "Geometry", "Notifier"
856 };
857
config_set_section(int flag,KviConfigurationFile * cfg)858 static void config_set_section(int flag, KviConfigurationFile * cfg)
859 {
860 int index = flag & KviOption_sectMask;
861 if((index < KVI_NUM_OPTION_SECT_FLAGS) && (index >= 0))
862 cfg->setGroup(options_section_table[index]);
863 else
864 cfg->setGroup(""); // Default group
865 }
866
loadOptions()867 void KviApplication::loadOptions()
868 {
869 QString buffer;
870 if(getReadOnlyConfigPath(buffer, KVI_CONFIGFILE_MAIN))
871 {
872 KviConfigurationFile cfg(buffer, KviConfigurationFile::Read);
873
874 int i;
875
876 #define READ_OPTIONS(_num, _table, _readFnc) \
877 for(i = 0; i < _num; i++) \
878 { \
879 config_set_section(_table[i].flags, &cfg); \
880 _table[i].option = cfg._readFnc(_table[i].name, _table[i].option); \
881 }
882
883 READ_OPTIONS(KVI_NUM_RECT_OPTIONS, g_rectOptionsTable, readRectEntry)
884 READ_OPTIONS(KVI_NUM_BOOL_OPTIONS, g_boolOptionsTable, readBoolEntry)
885 READ_OPTIONS(KVI_NUM_STRING_OPTIONS, g_stringOptionsTable, readEntry)
886 READ_OPTIONS(KVI_NUM_COLOR_OPTIONS, g_colorOptionsTable, readColorEntry)
887 READ_OPTIONS(KVI_NUM_PIXMAP_OPTIONS, g_pixmapOptionsTable, readPixmapEntry)
888 READ_OPTIONS(KVI_NUM_UINT_OPTIONS, g_uintOptionsTable, readUIntEntry)
889 READ_OPTIONS(KVI_NUM_FONT_OPTIONS, g_fontOptionsTable, readFontEntry)
890 READ_OPTIONS(KVI_NUM_MSGTYPE_OPTIONS, g_msgtypeOptionsTable, readMsgTypeEntry)
891 READ_OPTIONS(KVI_NUM_STRINGLIST_OPTIONS, g_stringlistOptionsTable, readStringListEntry)
892 READ_OPTIONS(KVI_NUM_MIRCCOLOR_OPTIONS, g_mirccolorOptionsTable, readColorEntry)
893 READ_OPTIONS(KVI_NUM_ICCOLOR_OPTIONS, g_iccolorOptionsTable, readColorEntry)
894
895 for(i = 0; i < KVI_NUM_STRING_OPTIONS; i++)
896 {
897 if(g_stringOptionsTable[i].flags & KviOption_encodePath)
898 KviStringConversion::decodePath(g_stringOptionsTable[i].option);
899 }
900
901 for(i = 0; i < KVI_NUM_STRINGLIST_OPTIONS; i++)
902 {
903 if(g_stringlistOptionsTable[i].flags & KviOption_encodePath)
904 KviStringConversion::decodePath(g_stringlistOptionsTable[i].option);
905 }
906
907 #undef READ_OPTIONS
908 } // else already have the defaults
909 }
910
saveOptions()911 void KviApplication::saveOptions()
912 {
913 QString buffer;
914
915 saveRecentChannels();
916
917 getLocalKvircDirectory(buffer, Config, KVI_CONFIGFILE_MAIN);
918
919 KviConfigurationFile cfg(buffer, KviConfigurationFile::Write);
920
921 int i;
922
923 #define WRITE_OPTIONS(_num, _table) \
924 for(i = 0; i < _num; i++) \
925 { \
926 config_set_section(_table[i].flags, &cfg); \
927 cfg.writeEntry(_table[i].name, _table[i].option); \
928 }
929
930 WRITE_OPTIONS(KVI_NUM_RECT_OPTIONS, g_rectOptionsTable)
931 WRITE_OPTIONS(KVI_NUM_BOOL_OPTIONS, g_boolOptionsTable)
932
933 for(i = 0; i < KVI_NUM_STRING_OPTIONS; i++)
934 {
935 if(g_stringOptionsTable[i].flags & KviOption_encodePath)
936 KviStringConversion::encodePath(g_stringOptionsTable[i].option);
937 }
938
939 WRITE_OPTIONS(KVI_NUM_STRING_OPTIONS, g_stringOptionsTable)
940 for(i = 0; i < KVI_NUM_STRING_OPTIONS; i++)
941 {
942 if(g_stringOptionsTable[i].flags & KviOption_encodePath)
943 KviStringConversion::decodePath(g_stringOptionsTable[i].option);
944 }
945
946 WRITE_OPTIONS(KVI_NUM_COLOR_OPTIONS, g_colorOptionsTable)
947
948 WRITE_OPTIONS(KVI_NUM_PIXMAP_OPTIONS, g_pixmapOptionsTable)
949 WRITE_OPTIONS(KVI_NUM_UINT_OPTIONS, g_uintOptionsTable)
950 WRITE_OPTIONS(KVI_NUM_FONT_OPTIONS, g_fontOptionsTable)
951 WRITE_OPTIONS(KVI_NUM_MSGTYPE_OPTIONS, g_msgtypeOptionsTable)
952
953 for(i = 0; i < KVI_NUM_STRINGLIST_OPTIONS; i++)
954 {
955 if(g_stringlistOptionsTable[i].flags & KviOption_encodePath)
956 KviStringConversion::encodePath(g_stringlistOptionsTable[i].option);
957 }
958
959 WRITE_OPTIONS(KVI_NUM_STRINGLIST_OPTIONS, g_stringlistOptionsTable)
960 for(i = 0; i < KVI_NUM_STRINGLIST_OPTIONS; i++)
961 {
962 if(g_stringlistOptionsTable[i].flags & KviOption_encodePath)
963 KviStringConversion::decodePath(g_stringlistOptionsTable[i].option);
964 }
965 WRITE_OPTIONS(KVI_NUM_MIRCCOLOR_OPTIONS, g_mirccolorOptionsTable)
966 WRITE_OPTIONS(KVI_NUM_ICCOLOR_OPTIONS, g_iccolorOptionsTable)
967
968 if(!cfg.saveIfDirty())
969 {
970 QMessageBox::warning(nullptr, __tr2qs("Warning While Writing Configuration - KVIrc"),
971 __tr2qs("I can't write to the main configuration file:\n\t%1\nPlease ensure the directory exists and that you have the proper permissions before continuing, "
972 "or else any custom configuration will be lost.")
973 .arg(buffer));
974 }
975
976 #undef WRITE_OPTIONS
977 }
978
979 #undef WRITE_OPTIONS
980
981 #define WRITE_OPTIONS(_num, _table) \
982 for(i = 0; i < _num; i++) \
983 { \
984 if(_table[i].flags & KviOption_groupTheme) \
985 cfg.writeEntry(_table[i].name, _table[i].option); \
986 }
987
988 namespace KviTheme
989 {
990 // utility functions for the KviTheme namespace (KviTheme.h)
991 // that are implemented here for convenience (in saving the options)
save(KviThemeInfo & options,bool bSaveIcons)992 bool save(KviThemeInfo & options, bool bSaveIcons)
993 {
994 QString szThemeDirPath = options.directory();
995
996 if(szThemeDirPath.isEmpty())
997 {
998 options.setLastError(__tr2qs("Missing absolute directory for the theme information"));
999 return false;
1000 }
1001
1002 if(!KviFileUtils::directoryExists(szThemeDirPath))
1003 {
1004 if(!KviFileUtils::makeDir(szThemeDirPath))
1005 {
1006 options.setLastError(__tr2qs("Failed to create the theme directory"));
1007 return false;
1008 }
1009 }
1010
1011 if(!options.save(szThemeDirPath + KVI_THEMEINFO_FILE_NAME))
1012 return false;
1013
1014 KviConfigurationFile cfg(szThemeDirPath + KVI_THEMEDATA_FILE_NAME, KviConfigurationFile::Write);
1015
1016 cfg.setGroup(KVI_THEMEDATA_CONFIG_GROUP);
1017
1018 int i;
1019
1020 WRITE_OPTIONS(KVI_NUM_RECT_OPTIONS, g_rectOptionsTable)
1021 WRITE_OPTIONS(KVI_NUM_BOOL_OPTIONS, g_boolOptionsTable)
1022 WRITE_OPTIONS(KVI_NUM_STRING_OPTIONS, g_stringOptionsTable)
1023 WRITE_OPTIONS(KVI_NUM_COLOR_OPTIONS, g_colorOptionsTable)
1024 WRITE_OPTIONS(KVI_NUM_UINT_OPTIONS, g_uintOptionsTable)
1025 WRITE_OPTIONS(KVI_NUM_FONT_OPTIONS, g_fontOptionsTable)
1026 WRITE_OPTIONS(KVI_NUM_MSGTYPE_OPTIONS, g_msgtypeOptionsTable)
1027 WRITE_OPTIONS(KVI_NUM_STRINGLIST_OPTIONS, g_stringlistOptionsTable)
1028 WRITE_OPTIONS(KVI_NUM_MIRCCOLOR_OPTIONS, g_mirccolorOptionsTable)
1029 WRITE_OPTIONS(KVI_NUM_ICCOLOR_OPTIONS, g_iccolorOptionsTable)
1030
1031 #undef WRITE_OPTIONS
1032
1033 // the pixmap options need special processing
1034 for(i = 0; i < KVI_NUM_PIXMAP_OPTIONS; i++)
1035 {
1036 if(g_pixmapOptionsTable[i].flags & KviOption_groupTheme)
1037 {
1038 if(g_pixmapOptionsTable[i].option.pixmap())
1039 {
1040 QString szPixPath = szThemeDirPath;
1041 QString szPixName = g_pixmapOptionsTable[i].name;
1042 szPixName += ".png";
1043 szPixPath += szPixName;
1044
1045 if(g_pixmapOptionsTable[i].option.pixmap()->save(szPixPath, "PNG"))
1046 {
1047 cfg.writeEntry(g_pixmapOptionsTable[i].name, szPixName);
1048 }
1049 else
1050 {
1051 // we ignore this error for now
1052 qDebug("failed to save %s", szPixPath.toUtf8().data());
1053 cfg.writeEntry(g_pixmapOptionsTable[i].name, "");
1054 }
1055 }
1056 else
1057 {
1058 cfg.writeEntry(g_pixmapOptionsTable[i].name, "");
1059 }
1060 }
1061 }
1062
1063 cfg.writeEntry("stringIconThemeSubdir", options.subdirectory());
1064
1065 if(bSaveIcons)
1066 {
1067
1068 // find all the "kvi_bigicon" images that we can find in the main pics directory
1069 QString szPicsPath;
1070
1071 g_pApp->getGlobalKvircDirectory(szPicsPath, KviApplication::Pics);
1072
1073 QDir d(szPicsPath);
1074 QStringList sl = d.entryList(QDir::nameFiltersFromString("kvi_bigicon_*.png"), QDir::Files);
1075
1076 for(auto & it : sl)
1077 {
1078 KviCachedPixmap * p = g_pIconManager->getPixmapWithCache(it);
1079 if(p)
1080 {
1081 QString szPixPath = szThemeDirPath;
1082 szPixPath += it;
1083
1084 if(!KviFileUtils::copyFile(p->path(), szPixPath))
1085 {
1086 qDebug("Failed to copy file %s into %s", p->path().toUtf8().data(), szPixPath.toUtf8().data());
1087 options.setLastError(__tr2qs("Failed to save one of the theme images"));
1088 return false;
1089 }
1090 }
1091 }
1092
1093 if(!KviFileUtils::makeDir(szThemeDirPath + KVI_SMALLICONS_SUBDIRECTORY))
1094 {
1095 options.setLastError(__tr2qs("Failed to create the theme subdirectory"));
1096 return false;
1097 }
1098
1099 // We actually need to *save* the small icons since
1100 // we have a compatibility mode that can load them from
1101 // the old format kvi_smallicon_XY.png multiimage libraries.
1102 for(int j = 0; j < KviIconManager::IconCount; j++)
1103 {
1104 QPixmap * pix = g_pIconManager->getSmallIcon(j);
1105
1106 QString szPixPath = szThemeDirPath;
1107 szPixPath.append(KVI_SMALLICONS_SUBDIRECTORY);
1108 szPixPath.append(KVI_PATH_SEPARATOR_CHAR);
1109 szPixPath.append("kcs_");
1110 szPixPath.append(g_pIconManager->getSmallIconName(j));
1111 szPixPath.append(".png");
1112
1113 if(!pix->isNull() && !pix->save(szPixPath, "PNG", 90))
1114 {
1115 qDebug("Failed to save small icon %d into %s", j, szPixPath.toUtf8().data());
1116 options.setLastError(__tr2qs("Failed to save one of the theme images"));
1117 return false;
1118 }
1119 }
1120 }
1121
1122 return true;
1123 }
1124
apply(const QString & szThemeDir,KviThemeInfo::Location eLocation,KviThemeInfo & buffer)1125 bool apply(const QString & szThemeDir, KviThemeInfo::Location eLocation, KviThemeInfo & buffer)
1126 {
1127 //qDebug("Loading and apply theme");
1128 if(!buffer.load(szThemeDir, eLocation))
1129 {
1130 qDebug("data does not exist in theme dir %s at location %d", szThemeDir.toUtf8().data(), eLocation);
1131 return false; // makes sure that themedata exists too
1132 }
1133
1134 QString szThemeDirPath = buffer.directory();
1135
1136 //qDebug("Ok loading from %s",szThemeDirPath.toUtf8().data());
1137 // reset the current theme subdir
1138 KVI_OPTION_STRING(KviOption_stringIconThemeSubdir) = "";
1139
1140 KviConfigurationFile cfg(szThemeDirPath + KVI_THEMEDATA_FILE_NAME, KviConfigurationFile::Read);
1141 QString t = szThemeDirPath + KVI_THEMEDATA_FILE_NAME;
1142 cfg.setGroup(KVI_THEMEDATA_CONFIG_GROUP);
1143
1144 int i;
1145 int iResetFlags = 0;
1146 #ifdef COMPILE_ON_MAC
1147 bool bWerePopupMenuIconsEnabled = KVI_OPTION_BOOL(KviOption_boolShowIconsInPopupMenus);
1148 #endif
1149
1150 #undef READ_OPTIONS
1151
1152 #define READ_OPTIONS(_num, _table, _readFnc) \
1153 for(i = 0; i < _num; i++) \
1154 { \
1155 if(_table[i].flags & KviOption_groupTheme) \
1156 { \
1157 if(cfg.hasKey(_table[i].name)) \
1158 { \
1159 iResetFlags |= (_table[i].flags & KviOption_resetMask); \
1160 _table[i].option = cfg._readFnc(_table[i].name, _table[i].option); \
1161 } \
1162 } \
1163 }
1164
1165 #define READ_ALL_OPTIONS(_num, _table, _readFnc) \
1166 for(i = 0; i < _num; i++) \
1167 { \
1168 if(cfg.hasKey(_table[i].name)) \
1169 { \
1170 iResetFlags |= (_table[i].flags & KviOption_resetMask); \
1171 _table[i].option = cfg._readFnc(_table[i].name, _table[i].option); \
1172 } \
1173 }
1174
1175 READ_OPTIONS(KVI_NUM_RECT_OPTIONS, g_rectOptionsTable, readRectEntry)
1176 READ_OPTIONS(KVI_NUM_BOOL_OPTIONS, g_boolOptionsTable, readBoolEntry)
1177 READ_OPTIONS(KVI_NUM_STRING_OPTIONS, g_stringOptionsTable, readEntry)
1178 READ_OPTIONS(KVI_NUM_COLOR_OPTIONS, g_colorOptionsTable, readColorEntry)
1179 READ_OPTIONS(KVI_NUM_UINT_OPTIONS, g_uintOptionsTable, readUIntEntry)
1180 READ_OPTIONS(KVI_NUM_FONT_OPTIONS, g_fontOptionsTable, readFontEntry)
1181 READ_ALL_OPTIONS(KVI_NUM_MSGTYPE_OPTIONS, g_msgtypeOptionsTable, readMsgTypeEntry)
1182 READ_OPTIONS(KVI_NUM_STRINGLIST_OPTIONS, g_stringlistOptionsTable, readStringListEntry)
1183 READ_OPTIONS(KVI_NUM_MIRCCOLOR_OPTIONS, g_mirccolorOptionsTable, readColorEntry)
1184 READ_OPTIONS(KVI_NUM_ICCOLOR_OPTIONS, g_iccolorOptionsTable, readColorEntry)
1185
1186 #undef READ_OPTIONS
1187 #undef READ_ALL_OPTIONS
1188
1189 #ifdef COMPILE_ON_MAC
1190 /* disregard what the theme says and apply no icons on menus if they
1191 weren't enabled before */
1192 if(!bWerePopupMenuIconsEnabled)
1193 {
1194 KVI_OPTION_BOOL(KviOption_boolShowIconsInPopupMenus) = false;
1195 g_boolOptionsTable[KviOption_boolShowIconsInPopupMenus].option = false;
1196 }
1197 #endif
1198
1199 KVI_OPTION_STRING(KviOption_stringIconThemeSubdir) = KVI_OPTION_STRING(KviOption_stringIconThemeSubdir).trimmed();
1200
1201 // the pixmap options need special processing
1202 for(i = 0; i < KVI_NUM_PIXMAP_OPTIONS; i++)
1203 {
1204 if(g_pixmapOptionsTable[i].flags & KviOption_groupTheme)
1205 {
1206 if(cfg.hasKey(g_pixmapOptionsTable[i].name))
1207 {
1208 QString szVal = cfg.readEntry(g_pixmapOptionsTable[i].name, "").trimmed();
1209 QString szBuffer;
1210 if(!szVal.isEmpty())
1211 g_pApp->findImage(szBuffer, szVal);
1212 else
1213 szBuffer = szVal;
1214
1215 KviStringConversion::fromString(szBuffer, g_pixmapOptionsTable[i].option);
1216
1217 // reset anyway
1218 iResetFlags |= g_pixmapOptionsTable[i].flags & KviOption_resetMask;
1219 }
1220 }
1221 }
1222 // force reloading of images anyway
1223 g_pApp->optionResetUpdate(iResetFlags | KviOption_resetReloadImages);
1224 KVI_OPTION_STRING(KviOption_stringIconThemeSubdir) = szThemeDir;
1225 return true;
1226 }
1227 };
1228
listAvailableOptions(KviWindow * wnd)1229 void KviApplication::listAvailableOptions(KviWindow * wnd)
1230 {
1231 int i;
1232
1233 #define LIST_OPTIONS(__txt, __num, __table) \
1234 wnd->output(KVI_OUT_SYSTEMMESSAGE, "%c%s%c", KviControlCodes::Bold, __txt, KviControlCodes::Bold); \
1235 for(i = 0; i < __num; i++) \
1236 wnd->outputNoFmt(KVI_OUT_SYSTEMMESSAGE, __table[i].name);
1237
1238 LIST_OPTIONS(__tr("Boolean options (1/0)"), KVI_NUM_BOOL_OPTIONS, g_boolOptionsTable)
1239 LIST_OPTIONS(__tr("Rectangle options (x,y,width,height)"), KVI_NUM_RECT_OPTIONS, g_rectOptionsTable)
1240 LIST_OPTIONS(__tr("String options (string value)"), KVI_NUM_STRING_OPTIONS, g_stringOptionsTable)
1241 LIST_OPTIONS(__tr("Color options (#RRGGBB)"), KVI_NUM_COLOR_OPTIONS, g_colorOptionsTable)
1242 LIST_OPTIONS(__tr("Mirccolor options (#RRGGBB)"), KVI_NUM_MIRCCOLOR_OPTIONS, g_mirccolorOptionsTable)
1243 LIST_OPTIONS(__tr("IRC context color options (#RRGGBB)"), KVI_NUM_ICCOLOR_OPTIONS, g_iccolorOptionsTable)
1244 LIST_OPTIONS(__tr("Pixmap options (image path)"), KVI_NUM_PIXMAP_OPTIONS, g_pixmapOptionsTable)
1245 LIST_OPTIONS(__tr("Unsigned integer options (unsigned integer constant)"), KVI_NUM_UINT_OPTIONS, g_uintOptionsTable)
1246 LIST_OPTIONS(__tr("Font options (family,pointsize,style,charset,weight,flags (biusf))"), KVI_NUM_FONT_OPTIONS, g_fontOptionsTable)
1247 LIST_OPTIONS(__tr("Message color options (image_id,foreground,background,logFlag (0/1))"), KVI_NUM_MSGTYPE_OPTIONS, g_msgtypeOptionsTable)
1248 LIST_OPTIONS(__tr("String list options (comma separated list of strings)"), KVI_NUM_STRINGLIST_OPTIONS, g_stringlistOptionsTable)
1249
1250 #undef LIST_OPTIONS
1251 }
1252
1253 //using namespace KviStringConversion;
getOptionString(const QString & optName,QString & buffer)1254 bool KviApplication::getOptionString(const QString & optName, QString & buffer)
1255 {
1256 #define GET_OPTION_STRING(__numOpt, __table, __prefix, __prefixLen) \
1257 if(KviQString::equalCIN(optName, __prefix, __prefixLen)) \
1258 { \
1259 for(int i = 0; i < __numOpt; i++) \
1260 { \
1261 if(KviQString::equalCI(optName, __table[i].name)) \
1262 { \
1263 KviStringConversion::toString(__table[i].option, buffer); \
1264 return true; \
1265 } \
1266 } \
1267 return false; \
1268 }
1269
1270 // WARNING : stringlist prefix must go BEFORE the string prefix (otherwise it will match)
1271 GET_OPTION_STRING(KVI_NUM_BOOL_OPTIONS, g_boolOptionsTable, KVI_BOOL_OPTIONS_PREFIX, KVI_BOOL_OPTIONS_PREFIX_LEN)
1272 GET_OPTION_STRING(KVI_NUM_RECT_OPTIONS, g_rectOptionsTable, KVI_BOOL_OPTIONS_PREFIX, KVI_BOOL_OPTIONS_PREFIX_LEN)
1273 GET_OPTION_STRING(KVI_NUM_STRINGLIST_OPTIONS, g_stringlistOptionsTable, KVI_STRINGLIST_OPTIONS_PREFIX, KVI_STRINGLIST_OPTIONS_PREFIX_LEN)
1274 GET_OPTION_STRING(KVI_NUM_STRING_OPTIONS, g_stringOptionsTable, KVI_STRING_OPTIONS_PREFIX, KVI_STRING_OPTIONS_PREFIX_LEN)
1275 GET_OPTION_STRING(KVI_NUM_COLOR_OPTIONS, g_colorOptionsTable, KVI_COLOR_OPTIONS_PREFIX, KVI_COLOR_OPTIONS_PREFIX_LEN)
1276 GET_OPTION_STRING(KVI_NUM_MIRCCOLOR_OPTIONS, g_mirccolorOptionsTable, KVI_MIRCCOLOR_OPTIONS_PREFIX, KVI_MIRCCOLOR_OPTIONS_PREFIX_LEN)
1277 GET_OPTION_STRING(KVI_NUM_ICCOLOR_OPTIONS, g_iccolorOptionsTable, KVI_ICCOLOR_OPTIONS_PREFIX, KVI_ICCOLOR_OPTIONS_PREFIX_LEN)
1278 GET_OPTION_STRING(KVI_NUM_PIXMAP_OPTIONS, g_pixmapOptionsTable, KVI_PIXMAP_OPTIONS_PREFIX, KVI_PIXMAP_OPTIONS_PREFIX_LEN)
1279 GET_OPTION_STRING(KVI_NUM_UINT_OPTIONS, g_uintOptionsTable, KVI_UINT_OPTIONS_PREFIX, KVI_UINT_OPTIONS_PREFIX_LEN)
1280 GET_OPTION_STRING(KVI_NUM_FONT_OPTIONS, g_fontOptionsTable, KVI_FONT_OPTIONS_PREFIX, KVI_FONT_OPTIONS_PREFIX_LEN)
1281 GET_OPTION_STRING(KVI_NUM_MSGTYPE_OPTIONS, g_msgtypeOptionsTable, KVI_MSGTYPE_OPTIONS_PREFIX, KVI_MSGTYPE_OPTIONS_PREFIX_LEN)
1282 return false;
1283
1284 #undef GET_OPTION_STRING
1285 }
1286
optionResetUpdate(int flags)1287 void KviApplication::optionResetUpdate(int flags)
1288 {
1289 if(flags & KviOption_resetReloadImages)
1290 {
1291 g_pIconManager->reloadImages();
1292 emit reloadImages();
1293 }
1294
1295 if(flags & KviOption_resetUpdateAppFont)
1296 updateApplicationFont();
1297
1298 #ifdef COMPILE_PSEUDO_TRANSPARENCY
1299 if(flags & KviOption_resetUpdatePseudoTransparency)
1300 triggerUpdatePseudoTransparency();
1301 #endif
1302
1303 if(flags & KviOption_resetRestartIdentd)
1304 {
1305 if(g_iIdentDaemonRunningUsers)
1306 g_pMainWindow->executeInternalCommand(KVI_INTERNALCOMMAND_IDENT_STOP);
1307
1308 if(KVI_OPTION_BOOL(KviOption_boolUseIdentService) && !KVI_OPTION_BOOL(KviOption_boolUseIdentServiceOnlyOnConnect))
1309 g_pMainWindow->executeInternalCommand(KVI_INTERNALCOMMAND_IDENT_START);
1310 }
1311
1312 if(flags & KviOption_resetUpdateGui)
1313 triggerUpdateGui();
1314
1315 if(flags & KviOption_resetUpdateWindowList)
1316 g_pMainWindow->recreateWindowList();
1317
1318 if(flags & KviOption_resetRestartNotifyList)
1319 g_pApp->restartNotifyLists();
1320
1321 if(flags & KviOption_resetRestartLagMeter)
1322 g_pApp->restartLagMeters();
1323
1324 if(flags & KviOption_resetRecentChannels)
1325 g_pApp->buildRecentChannels();
1326
1327 if(flags & KviOption_resetUpdateNotifier)
1328 emit updateNotifier();
1329 }
1330
setOptionValue(const QString & optName,const QString & value)1331 bool KviApplication::setOptionValue(const QString & optName, const QString & value)
1332 {
1333 if(!setCommonOptionValue(optName, value))
1334 return false;
1335
1336 if(KviQString::equalCI(optName, "stringlistRecentChannels"))
1337 {
1338 buildRecentChannels();
1339 return true;
1340 }
1341
1342 // The pixmap options have special treating
1343 if(KviQString::equalCIN(optName, KVI_PIXMAP_OPTIONS_PREFIX, KVI_PIXMAP_OPTIONS_PREFIX_LEN))
1344 {
1345 // We lookup the image path (so we allow also relative paths for this option type)
1346 QString szVal = value.trimmed();
1347 QString szBuffer;
1348 if(!szVal.isEmpty())
1349 findImage(szBuffer, szVal);
1350 else
1351 szBuffer = szVal;
1352
1353 for(auto & i : g_pixmapOptionsTable)
1354 {
1355 if(KviQString::equalCI(optName, i.name))
1356 {
1357 if(!KviStringConversion::fromString(szBuffer, i.option))
1358 return false;
1359 optionResetUpdate(i.flags);
1360 return true;
1361 }
1362 }
1363 return false;
1364 }
1365
1366 return true;
1367 }
1368
setCommonOptionValue(const QString & optName,const QString & value)1369 bool KviApplication::setCommonOptionValue(const QString & optName, const QString & value)
1370 {
1371
1372 #define SET_OPTION_VALUE(__numOpt, __table, __prefix, __prefixLen) \
1373 if(KviQString::equalCIN(optName, __prefix, __prefixLen)) \
1374 { \
1375 for(int i = 0; i < __numOpt; i++) \
1376 { \
1377 if(KviQString::equalCI(optName, __table[i].name)) \
1378 { \
1379 if(!KviStringConversion::fromString(value, __table[i].option)) \
1380 return false; \
1381 optionResetUpdate(__table[i].flags); \
1382 return true; \
1383 } \
1384 } \
1385 return false; \
1386 }
1387
1388 SET_OPTION_VALUE(KVI_NUM_BOOL_OPTIONS, g_boolOptionsTable, KVI_BOOL_OPTIONS_PREFIX, KVI_BOOL_OPTIONS_PREFIX_LEN)
1389 SET_OPTION_VALUE(KVI_NUM_RECT_OPTIONS, g_rectOptionsTable, KVI_BOOL_OPTIONS_PREFIX, KVI_BOOL_OPTIONS_PREFIX_LEN)
1390 SET_OPTION_VALUE(KVI_NUM_STRINGLIST_OPTIONS, g_stringlistOptionsTable, KVI_STRINGLIST_OPTIONS_PREFIX, KVI_STRINGLIST_OPTIONS_PREFIX_LEN)
1391 SET_OPTION_VALUE(KVI_NUM_STRING_OPTIONS, g_stringOptionsTable, KVI_STRING_OPTIONS_PREFIX, KVI_STRING_OPTIONS_PREFIX_LEN)
1392 SET_OPTION_VALUE(KVI_NUM_COLOR_OPTIONS, g_colorOptionsTable, KVI_COLOR_OPTIONS_PREFIX, KVI_COLOR_OPTIONS_PREFIX_LEN)
1393 SET_OPTION_VALUE(KVI_NUM_MIRCCOLOR_OPTIONS, g_mirccolorOptionsTable, KVI_MIRCCOLOR_OPTIONS_PREFIX, KVI_MIRCCOLOR_OPTIONS_PREFIX_LEN)
1394 SET_OPTION_VALUE(KVI_NUM_ICCOLOR_OPTIONS, g_iccolorOptionsTable, KVI_ICCOLOR_OPTIONS_PREFIX, KVI_ICCOLOR_OPTIONS_PREFIX_LEN)
1395 SET_OPTION_VALUE(KVI_NUM_UINT_OPTIONS, g_uintOptionsTable, KVI_UINT_OPTIONS_PREFIX, KVI_UINT_OPTIONS_PREFIX_LEN)
1396 SET_OPTION_VALUE(KVI_NUM_FONT_OPTIONS, g_fontOptionsTable, KVI_FONT_OPTIONS_PREFIX, KVI_FONT_OPTIONS_PREFIX_LEN)
1397 SET_OPTION_VALUE(KVI_NUM_MSGTYPE_OPTIONS, g_msgtypeOptionsTable, KVI_MSGTYPE_OPTIONS_PREFIX, KVI_MSGTYPE_OPTIONS_PREFIX_LEN)
1398
1399 #undef SET_OPTION_VALUE
1400 return true;
1401 }
1402