KVIrc 5.2.0
Developer APIs
KviApplication.h
Go to the documentation of this file.
1#ifndef _KVI_APP_H_
2#define _KVI_APP_H_
3//=============================================================================
4//
5// File : KviApplication.h
6// Creation date : Sun Jun 18 2000 12:40:00 CEST by Szymon Stefanek
7//
8// This file is part of the KVIrc IRC client distribution
9// Copyright (C) 2000-2010 Szymon Stefanek (pragma at kvirc dot net)
10//
11// This program is FREE software. You can redistribute it and/or
12// modify it under the terms of the GNU General Public License
13// as published by the Free Software Foundation; either version 2
14// of the License, or (at your option) any later version.
15//
16// This program is distributed in the HOPE that it will be USEFUL,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19// See the GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program. If not, write to the Free Software Foundation,
23// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24//
25//=============================================================================
26
27#include "kvi_settings.h"
28#include "KviCString.h"
29#include "KviQString.h"
30#include "KviTalApplication.h"
31#include "KviPointerList.h"
32#include "KviTimeUtils.h"
33#include "KviPointerHashTable.h" // ?
34
35#include <QFont>
36#include <QStringList>
37
38#include <memory>
39#include <unordered_map>
40#include <vector>
41
42#ifdef COMPILE_KDE_SUPPORT
43#include <KAboutData>
44#endif
45
46#ifdef COMPILE_ON_WINDOWS
47// The brain damaged MSVC compiler can't instantiate templates without this
48#include "KviMainWindow.h"
49#include "KviWindow.h"
50#else // !COMPILE_ON_WINDOWS
51class KviMainWindow;
52class KviWindow;
53#endif // !COMPILE_ON_WINDOWS
54
55#ifndef COMPILE_NO_IPC
56class KviIpcSentinel;
57#endif // !COMPILE_NO_IPC
58
59class QMenu;
60class KviTalListBox;
66class QPixmap;
67class QTextCodec;
68class QDomElement;
69#include <QStringList>
70
72{
74 QString szRemoteUrl;
75 QString szNick;
76 QString szUser;
77 QString szHost;
78};
79
86{
88 QString szIcon;
89 QString szMessage;
90 unsigned int uMessageLifetime;
91};
92
94{
95 QStringList lMessages;
96};
97
98#ifdef Unsorted
99#undef Unsorted
100#endif
101#ifdef None
102#undef None
103#endif
104
106{
107 friend class KviMainWindow;
108 friend class KviWindow;
109 friend class SetupWizard; // this resides in a module!
110 Q_OBJECT
111public:
112 // FIXME: "Plugins" and "ConfigPlugins" should become "Modules" and "ConfigModules"
143
144 KviApplication(int & argc, char ** argv);
146
147public:
148 // setup stuff (accessed from KviMain.cpp: consider private otherwise)
149 QString m_szConfigFile; // setup
150 bool m_bCreateConfig; // setup
152
153protected:
154#ifdef COMPILE_KDE_SUPPORT
155 KAboutData * m_pAboutData;
156#endif
157 // directories
161 bool m_bFirstTimeRun = false;
163#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
164 bool m_bPortable;
165#endif
166 KviWindow * m_pActiveWindow = nullptr;
168 std::unordered_map<KviPendingAvatarChange *, std::unique_ptr<KviPendingAvatarChange>> m_PendingAvatarChanges;
171#ifdef COMPILE_PSEUDO_TRANSPARENCY
172 bool m_bUpdatePseudoTransparencyPending = false;
173#endif
174#ifndef COMPILE_NO_IPC
176#endif
178
179public:
180 void setup(); // THIS SHOULD BE PRIVATE! (but is accessed from KviMain.cpp)
181
182#ifdef COMPILE_KDE_SUPPORT
183 void setAboutData(KAboutData * pAboutData) { m_pAboutData = pAboutData; }
184 KAboutData * aboutData() const { return m_pAboutData; }
185#endif
186
187#ifndef COMPILE_NO_IPC
188 void ipcMessage(char * message);
189#endif
190
191 static int getGloballyUniqueId(); // returns an unique integer identifier across the application
192
193 bool firstTimeRun() const { return m_bFirstTimeRun; }
194 bool kviClosingDown() const { return m_bClosingDown; }
195 void setKviClosingDown() { m_bClosingDown = true; }
196
197 bool supportsCompositing();
198
199 void setupBegin();
200 void setupFinish();
201
202 /*
203 Unused
204 void emitRecentUrlsChanged() { emit(recentUrlsChanged()); }
205 */
206
207 // KviApplication.cpp (Saving options)
208 void saveIrcServerDataBase();
209 void saveProxyDataBase();
210 void saveRecentEntries();
211 void saveAppEvents();
212 void saveRawEvents();
213 void saveMediaTypes();
214 void saveRegisteredUsers();
215 void saveSharedFiles();
216 void savePopups();
217 void saveAliases();
218 void saveNickServ();
219 void saveIdentityProfiles();
220 void saveDefaultScripts();
221 void saveTextIcons();
222 void saveRegisteredChannels();
223 void saveInputHistory();
224 void saveAvatarCache();
225 void saveToolBars();
226 void saveActions();
227 void saveScriptAddons();
228 void saveIdentities();
229
230 // KviOptions.cpp : Options saving and loading (kvi.main.conf))
231 void loadOptions();
232 void saveOptions();
233
234 void listAvailableOptions(KviWindow * wnd);
235 bool getOptionString(const QString & optName, QString & buffer);
236 bool setOptionValue(const QString & optName, const QString & value);
237 bool setCommonOptionValue(const QString & optName, const QString & value);
238
239 void optionResetUpdate(int flags);
240
241 // KviApplication_filesystem.cpp : Filesystem thingies
242 void getGlobalKvircDirectory(QString & szData, KvircSubdir dir, const QString & appendFile = QString());
243 void getLocalKvircDirectory(QString & szData, KvircSubdir dir, const QString & appendFile = QString(), bool bCreateIfNeeded = true);
244
245 void getTmpFileName(QString & szBuffer, const QString & szEndingFileName = QString());
246 void getChannelDumpLogFileName(QString & str);
247
248 static QTextCodec * defaultTextCodec();
249 static QTextCodec * defaultSrvCodec();
250
251 bool findImageInImageSearchPath(QString & szRetPath, const QString & filename);
252
253 bool findImage(QString & szRetPath, const QString & filename);
254 bool findImageThemeOnlyCompat(QString & szRetPath, const QString & filename); // temporary compat, will be removed soon (do not use)
255 bool findSmallIcon(QString & szRetPath, const QString & filename);
256 // tries to map the full path filename to one of the KVIrc's mapped directories
257 // if it doesn't succeed it just returns the complete filename in szRetPath
258 //bool mapImageFile(KviCString &szRetPath,const char * filename);
259 bool mapImageFile(QString & szRetPath, const QString & filename);
260
261 //void getDefaultDccSaveFilePath(KviCString &path,const char *filename);
262 void completeDirectory(const QString & word, std::vector<QString> & matches);
263 //
264 // Returns a config path suitable for reading (at least)
265 // First lookups the user local config directory,
266 // if no config file is found, it searches in the global one
267 // returns false if no config file has been found
268 // If bNoFail is true, the buffer is filled with the file name even
269 // if no config file has been found: in this case the local config
270 // directory is used
271 //
272 bool getReadOnlyConfigPath(QString & buffer, const char * config_name, KvircSubdir sbd = Config, bool bNoFail = false);
273
283 bool findAudioFile(QString & szRetPath, const QString & szFileName);
284
285 // KviApplication.cpp : Window stuff
286 KviWindow * findWindow(const QString & windowId);
287 KviWindow * findWindowByCaption(const QString & windowCaption, int iContextId = -1);
288 KviConsoleWindow * findConsole(unsigned int ircContextId);
289 KviConsoleWindow * findConsole(QString & servr, QString & nick);
290 KviConsoleWindow * topmostConnectedConsole();
291 KviConsoleWindow * activeConsole();
292 bool windowExists(KviWindow * wnd);
293 bool connectionExists(KviIrcConnection * cnn);
294 unsigned int windowCount();
295
296 // KviApplication.cpp : Utilities
297 void resetAvatarForMatchingUsers(KviRegisteredUser * u);
298 void restartNotifyLists();
299 void restartLagMeters();
300 void triggerUpdateGui();
301#ifdef COMPILE_PSEUDO_TRANSPARENCY
302 void triggerUpdatePseudoTransparency();
303#endif
304
305 // KviApplication.cpp : DCC (and CTCP AVATAR & SOUND) related stuff
306 void setAvatarOnFileReceived(KviConsoleWindow * pConsole, const QString & szRemoteUrl, const QString & szNick, const QString & szUser, const QString & szHost);
307 KviPendingAvatarChange * findPendingAvatarChange(KviConsoleWindow * pConsole, const QString & szNick, const QString & szRemoteUrl);
308 void fileDownloadTerminated(bool bSuccess, const QString & szRemoteUrl, const QString & szLocalFileName, const QString & szNick = QString(), const QString & szError = QString(), bool bQuiet = false);
309
310 void setAvatarFromOptions();
311
312 // uMessageLifetime is in seconds! and 0 means "forever"
313 void notifierMessage(KviWindow * pWnd, int iIconId, const QString & szMsg, unsigned int uMessageLifetime);
314
315 void addRecentNickname(const QString & newNick);
316 void addRecentChannel(const QString & chan, const QString & net);
317
318 QStringList * recentChannelsForNetwork(const QString & net);
319
321 {
322 return m_pRecentChannelDict;
323 }
324
325 void addRecentServer(const QString & server);
326 void fillRecentServersPopup(QMenu * m);
327 void fillRecentNicknamesPopup(QMenu * m, KviConsoleWindow * pConsole);
328 void fillRecentChannelsPopup(QMenu * m, KviConsoleWindow * pConsole);
329 //
330 void autoConnectToServers();
331
332 void checkSuggestRestoreDefaultScript();
333
334 void loadDefaultScript(QString szItem = QString());
335 QStyle * themedStyle();
336
337protected:
338 void buildRecentChannels();
339 void saveRecentChannels();
340 // KviApplication.cpp : KviWindow global database
341 void registerWindow(KviWindow * wnd);
342 void unregisterWindow(KviWindow * wnd);
343 void frameDestructorCallback();
344 void heartbeat(kvi_time_t tNow);
345 void timerEvent(QTimerEvent * e) override;
346
347private:
348 // KviApplication_setup.cpp : Setup stuff
349 void loadDirectories();
350 void findGlobalKvircDirectory();
351 bool findLocalKvircDirectory();
352 bool checkGlobalKvircDirectory(const QString);
353 bool checkLocalKvircDirectory(const QString & szSpecificPath);
354 bool checkLocalKvircDirectory(); // check the m_szLocalKvircDirectory path
355 void setupFileAssociations();
356#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
357 void setFileAssociation(const QString & szExtension, const QString & szClassName, const QString & szDescription, const int iIconIndex, const QString & szActionName);
358#endif
359
360 void setupUriAssociations(const QString & szProto);
361
362 void saveKvircDirectory();
363
364 // KviApplication.cpp : GUI stuff
365 void updateApplicationFont();
366
367 // KviApplication.cpp : parts of setup()
368 void loadRecentEntries();
369#ifndef COMPILE_NO_IPC
370 void createIpcSentinel();
371 void destroyIpcSentinel();
372#endif // COMPILE_NO_IPC
373 void createFrame();
374
375#ifdef COMPILE_PSEUDO_TRANSPARENCY
376 void createGlobalBackgrounds(QPixmap * pix);
377 void destroyPseudoTransparency();
378#endif //COMPILE_PSEUDO_TRANSPARENCY
379public slots:
380 // KviApplication.cpp : Slots
381 void saveConfiguration() override;
382 void updateGui();
383 void updatePseudoTransparency();
384 void restoreDefaultScript();
385 void addRecentUrl(const QString & text);
386 void showParentFrame();
387signals:
391};
392
393#ifndef _KVI_APP_CPP_
396#endif
397
398#endif //_KVI_APP_H_
KVIRC_API KviApplication * g_pApp
Definition KviApplication.cpp:159
KVIRC_API KviIrcServerDataBase * g_pServerDataBase
Definition KviApplication.cpp:162
Pointer Hash Table.
C++ Template based double linked pointer list class.
Helper functions for the QString class.
Toolkit Abstraction Level class.
Time management.
#define kvi_time_t
Definition KviTimeUtils.h:43
Contains the KviWindow class.
Definition KviApplication.h:106
bool m_bSetupDone
Definition KviApplication.h:169
bool kviClosingDown() const
Definition KviApplication.h:194
int m_iHeartbeatTimerId
Definition KviApplication.h:160
bool m_bClosingDown
Definition KviApplication.h:162
void setKviClosingDown()
Definition KviApplication.h:195
QString m_szConfigFile
Definition KviApplication.h:149
void reloadImages()
void recentUrlsChanged()
bool m_bUpdateGuiPending
Definition KviApplication.h:167
QString m_szLocalKvircDir
Definition KviApplication.h:159
bool m_bCreateConfig
Definition KviApplication.h:150
QString m_szGlobalKvircDir
Definition KviApplication.h:158
KviPointerHashTable< QString, QStringList > * recentChannels() const
Definition KviApplication.h:320
KviPointerHashTable< QString, QStringList > * m_pRecentChannelDict
Definition KviApplication.h:170
std::unordered_map< KviPendingAvatarChange *, std::unique_ptr< KviPendingAvatarChange > > m_PendingAvatarChanges
Definition KviApplication.h:168
QFont m_fntDefaultFont
Definition KviApplication.h:177
KviIpcSentinel * m_pIpcSentinel
Definition KviApplication.h:175
bool firstTimeRun() const
Definition KviApplication.h:193
void updateNotifier()
QString m_szExecAfterStartup
Definition KviApplication.h:151
QStyle * themedStyle()
KvircSubdir
Definition KviApplication.h:114
@ Modules
Definition KviApplication.h:133
@ Charmaps
Definition KviApplication.h:129
@ HelpNoIntl
Definition KviApplication.h:120
@ Tmp
Definition KviApplication.h:136
@ Plugins
Definition KviApplication.h:125
@ Config
Definition KviApplication.h:117
@ Trash
Definition KviApplication.h:127
@ DefScript
Definition KviApplication.h:131
@ Avatars
Definition KviApplication.h:130
@ Locale
Definition KviApplication.h:137
@ SmallIcons
Definition KviApplication.h:140
@ Filters
Definition KviApplication.h:135
@ ConfigPlugins
Definition KviApplication.h:126
@ License
Definition KviApplication.h:132
@ Help
Definition KviApplication.h:118
@ Themes
Definition KviApplication.h:138
@ Audio
Definition KviApplication.h:123
@ Scripts
Definition KviApplication.h:124
@ Pics
Definition KviApplication.h:116
@ Classes
Definition KviApplication.h:139
@ Incoming
Definition KviApplication.h:122
@ HelpEN
Definition KviApplication.h:119
@ None
Definition KviApplication.h:115
@ Log
Definition KviApplication.h:121
@ MsgColors
Definition KviApplication.h:128
@ ConfigScripts
Definition KviApplication.h:134
Definition KviConfigurationFile.h:50
Definition KviConsoleWindow.h:74
Definition KviIpcSentinel.h:45
An abstraction of a connection to an IRC server.
Definition KviIrcConnection.h:97
Irc server database handling class.
Definition KviIrcServerDataBase.h:67
Definition KviMainWindow.h:58
A fast pointer hash table implementation.
Definition KviPointerHashTable.h:450
Definition KviRegisteredUser.h:40
Toolkit Abstraction Layer: application class.
Definition KviTalApplication.h:46
virtual void saveConfiguration()=0
Saves configuration to disk.
Base class for all windows in KVIrc.
Definition KviWindow.h:75
Definition SetupWizard.h:63
#define m
Definition detector.cpp:78
#define u
Definition detector.cpp:86
#define e
Definition detector.cpp:70
This file contains compile time settings.
#define KVIRC_API
Definition kvi_settings.h:127
QString szHost
Definition libkvisetup.cpp:48
Definition KviApplication.h:94
QStringList lMessages
Definition KviApplication.h:95
Definition KviApplication.h:86
KviWindow * pWindow
Definition KviApplication.h:87
unsigned int uMessageLifetime
Definition KviApplication.h:90
QString szIcon
Definition KviApplication.h:88
QString szMessage
Definition KviApplication.h:89
Definition KviApplication.h:72
QString szNick
Definition KviApplication.h:75
QString szRemoteUrl
Definition KviApplication.h:74
QString szUser
Definition KviApplication.h:76
KviConsoleWindow * pConsole
Definition KviApplication.h:73
QString szHost
Definition KviApplication.h:77
char szBuffer[4096]
Definition winamp.cpp:77