diff options
Diffstat (limited to 'src/kvirc/kernel/kvi_app.h')
-rw-r--r-- | src/kvirc/kernel/kvi_app.h | 344 |
1 files changed, 344 insertions, 0 deletions
diff --git a/src/kvirc/kernel/kvi_app.h b/src/kvirc/kernel/kvi_app.h new file mode 100644 index 00000000..d31bd401 --- /dev/null +++ b/src/kvirc/kernel/kvi_app.h @@ -0,0 +1,344 @@ +#ifndef _KVI_APP_H_ +#define _KVI_APP_H_ + +//============================================================================= +// +// File : kvi_app.h +// Creation date : Sun Jun 18 2000 12:40:00 CEST by Szymon Stefanek +// +// This file is part of the KVirc irc client distribution +// Copyright (C) 1999-2000 Szymon Stefanek (pragma at kvirc dot net) +// +// This program is FREE software. You can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your opinion) any later version. +// +// This program is distributed in the HOPE that it will be USEFUL, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, write to the Free Software Foundation, +// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//============================================================================= + +#include "kvi_settings.h" +#include "kvi_string.h" +#include "kvi_qstring.h" +#include "kvi_tal_application.h" +#include "kvi_pointerlist.h" +#include "kvi_time.h" +#include "kvi_pointerhashtable.h" // ? + +#define KVI_RECENT_CHANNELS_SEPARATOR ":" + +#ifdef COMPILE_ON_WINDOWS + // The brain damaged MSVC compiler can't instantiate templates without this + #include "kvi_frame.h" + #include "kvi_window.h" +#else // !COMPILE_ON_WINDOWS + class KviFrame; + class KviWindow; +#endif // !COMPILE_ON_WINDOWS + +#ifndef COMPILE_NO_IPC + class KviIpcSentinel; +#endif // !COMPILE_NO_IPC + +class KviTalPopupMenu; +class QPixmap; +class KviTalListBox; +class QTextCodec; +class QDomElement; + +class KviConsole; +class KviConfig; +class KviRegisteredUser; +class KviIrcConnection; +class KviIrcServerDataBase; + +typedef struct _KviPendingAvatarChange +{ + KviConsole * pConsole; + QString szRemoteUrl; + QString szNick; + QString szUser; + QString szHost; +} KviPendingAvatarChange; + +#ifdef Unsorted + #undef Unsorted +#endif +#ifdef None + #undef None +#endif + +class KVIRC_API KviApp : public KviTalApplication +{ + friend class KviFrame; + friend class KviWindow; + friend class KviSetupWizard; // this resides in a module! + Q_OBJECT +public: + KviApp(int &argc,char ** argv); + ~KviApp(); + +protected: + // directories + QString m_szGlobalKvircDir; + QString m_szLocalKvircDir; + int m_iHeartbeatTimerId; + bool m_bFirstTimeRun; + KviWindow * m_pActiveWindow; + bool m_bUpdateGuiPending; + KviPointerList<KviPendingAvatarChange> * m_pPendingAvatarChanges; + bool m_bSetupDone; + KviPointerHashTable<const char *,QStringList> * m_pRecentChannelsDict; +#ifdef COMPILE_PSEUDO_TRANSPARENCY + bool m_bUpdatePseudoTransparencyPending; +#endif +#ifndef COMPILE_NO_IPC + KviIpcSentinel * m_pIpcSentinel; +#endif +public: + // setup stuff (accessed from kvi_main.cpp: consider private othwerise) + QString m_szConfigFile; // setup + bool m_bCreateConfig; // setup + KviStr m_szExecAfterStartup; + bool m_bShowSplashScreen; +public: + // FIXME: "Plugins" and "ConfigPlugins" should become "Modules" and "ConfigModules" + enum KvircSubdir + { + None, Pics, Config , + Help, HelpEN, HelpNoIntl, + Log, Incoming, Audio, + Scripts, Plugins, ConfigPlugins, + Trash, MsgColors, Charmaps, + Avatars, DefScript, License, + Modules, ConfigScripts, Filters, + Tmp, Locale, Themes, + Classes, SmallIcons, EasyPlugins + }; + +public: + + void getClipboardText(KviStr &buffer); + void setClipboardText(const KviStr &str); + + QString getClipboardText(); + void setClipboardText(const QString &str); + + + void collectGarbage(QObject * garbage); + + void destroyFrame(); + void setup(); // THIS SHOULD BE PRIVATE! (but is accessed from kvi_main.cpp) + +#ifndef COMPILE_NO_IPC + void ipcMessage(char * message); +#endif + + //static QTextCodec * defaultTextCodec(); + //static const char * defaultTextEncoding(); + + static int getGloballyUniqueId(); // returns an unique integer identifier across the application + + bool firstTimeRun(){ return m_bFirstTimeRun; }; + void setupBegin(); + void setupFinish(); + inline void emitRecentUrlsChanged() { emit(recentUrlsChanged()); }; + + // kvi_app.cpp (Saving options) + void saveIrcServerDataBase(); + void saveProxyDataBase(); + void saveRecentEntries(); + void saveAppEvents(); + void saveRawEvents(); + void saveMediaTypes(); + void saveRegisteredUsers(); + void saveSharedFiles(); + void savePopups(); + void saveAliases(); + void saveNickServ(); + void saveTextIcons(); + void saveRegisteredChannels(); + void saveInputHistory(); + void saveAvatarCache(); + void saveToolBars(); + void saveActions(); + void saveScriptAddons(); + void saveIdentities(); + + // kvi_options.cpp : Options saving and loading (kvi.main.conf)) + void loadOptions(); + void saveOptions(); + + void listAvailableOptions(KviWindow *wnd); + bool getOptionString(const char * optName,QString &buffer); + bool setOptionValue(const char * optName,const QString &value); + void optionResetUpdate(int flags); + + void contextSensitiveHelp(); + + // kvi_app_fs.cpp : Filesystem thingies + void getGlobalKvircDirectory(QString &szData,KvircSubdir dir,const QString &appendFile = QString::null); + void getGlobalKvircDirectory(KviStr &szData,KvircSubdir dir,const QString &appendFile = QString::null); + void getLocalKvircDirectory(KviStr &szData,KvircSubdir dir,const QString &appendFile = QString::null,bool bCreateIfNeeded = true); + void getLocalKvircDirectory(QString &szData,KvircSubdir dir,const QString &appendFile = QString::null,bool bCreateIfNeeded = true); + void getTmpFileName(QString &szBuffer,const QString &szEndingFileName = QString::null); + bool trashFile(const char *filename); + void getChannelDumpLogFileName(QString &str); + + static QTextCodec * defaultTextCodec(); + + // if the mediatype can be guessed ,it is looked up in the media type save path + // if found , true is returned + // if not found or the mediatype can't be guessed then false is returned + bool findFileByMediaType(KviStr &szRetPath,const char * filename); + + bool findImageInImageSearchPath(KviStr &szRetPath,const char * filename); + bool findImageInImageSearchPath(QString &szRetPath,const char * filename); + + bool findUserFile(KviStr &szRetPath,const char *filename); + + bool findImage(KviStr &szRetPath,const char *filename); + bool findImage(QString &szRetPath,const char *filename); + bool findImageThemeOnlyCompat(QString &szRetPath,const char *filename); // temporary compat, will be removed soon (do not use) + bool findSmallIcon(QString &szRetPath,const char *filename); + // tries to map the full path filename to one of the KVIrc's mapped directories + // if it doesn't succeed it just returns the complete filename in szRetPath + bool mapImageFile(KviStr &szRetPath,const char * filename); + bool mapImageFile(QString &szRetPath,const char * filename); + + //void getDefaultDccSaveFilePath(KviStr &path,const char *filename); + void completeDirectory(const QString &word,KviPointerList<QString> * matches); + // + // Returns a config path suitable for reading (at least) + // First lookups the user local config directory, + // if no config file is found, it earches in the global one + // returns false if no config file has been found + // If bNoFail is true, the buffer is filled with the file name even + // if no config file has been found: in this case the local config + // directory is used + // + bool getReadOnlyConfigPath(KviStr &buffer,const char *config_name,KvircSubdir sbd = Config,bool bNoFail = false); + bool getReadOnlyConfigPath(QString &buffer,const char *config_name,KvircSubdir sbd = Config,bool bNoFail = false); + + // kvi_app.cpp : Window stuff + KviWindow * findWindow(const char * windowId); + KviWindow * findWindowByCaption(const QString &windowCaption,int iContextId=-1); + KviConsole * findConsole(unsigned int ircContextId); + KviConsole * findConsole(KviStr & server,KviStr & nick); + KviConsole * findConsole(QString & servr,QString & nick); + KviConsole * topmostConnectedConsole(); + KviConsole * activeConsole(); + bool windowExists(KviWindow *wnd); + bool connectionExists(KviIrcConnection *cnn); + unsigned int windowCount(); + + // kvi_app.cpp : Utilities + void resetAvatarForMatchingUsers(KviRegisteredUser * u); + void restartNotifyLists(); + void restartLagMeters(); + void triggerUpdateGui(); +#ifdef COMPILE_PSEUDO_TRANSPARENCY + void triggerUpdatePseudoTransparency(); +#endif + + // kvi_app.cpp : DCC (and CTCP AVATAR & SOUND) related stuff + void setAvatarOnFileReceived(KviConsole * pConsole,const QString &szRemoteUrl,const QString &szNick,const QString &szUser,const QString &szHost); + KviPendingAvatarChange * findPendingAvatarChange(KviConsole * pConsole,const QString &szNick,const QString &szRemoteUrl); + void fileDownloadTerminated(bool bSuccess,const QString &szRemoteUrl,const QString &szLocalFileName,const QString &szNick = QString::null,const QString &szError = QString::null,bool bQuiet = false); + + void setAvatarFromOptions(); + + bool playFile(const char * filename,KviStr &error,KviWindow * w = 0); + + // uMessageLifetime is in seconds! and 0 means "forever" + void notifierMessage(KviWindow * pWnd,int iIconId,const QString &szMsg,unsigned int uMessageLifetime); + + + void addRecentNickname(const char * newNick); + void addRecentNickname(const QString& newNick); + void addRecentChannel(const QString& chan,const QString& net); + QStringList* getRecentChannels(const QString& net); + + void addRecentServer(const QString& server); + void fillRecentServersPopup(KviTalPopupMenu * m); + void fillRecentNicknamesPopup(KviTalPopupMenu * m,KviConsole * pConsole); + void fillRecentChannelsPopup(KviTalPopupMenu * m,KviConsole * pConsole); + + void autoConnectToServers(); + + void checkSuggestRestoreDefaultScript(); + + void loadDefaultScript(); +protected: + void buildRecentChannels(); + void saveRecentChannels(); + // kvi_app.cpp : KviWindow global database + void registerWindow(KviWindow *wnd); + void unregisterWindow(KviWindow *wnd); + void frameDestructorCallback(); + void heartbeat(kvi_time_t tNow); + virtual void timerEvent(QTimerEvent *e); +public slots: + // kvi_app.cpp : Slots + void saveConfiguration(); + void updateGui(); + void kdeRootPixmapDownloadComplete(bool bSuccess); + void kdeRootPixmapChanged(int iDesktop); + void updatePseudoTransparency(); + void restoreDefaultScript(); + void addRecentUrl(const QString& text); +private: + void createSplashScreen(); + void destroySplashScreen(); + + // kvi_app_setup.cpp : Setup stuff + void loadDirectories(); + void findGlobalKvircDirectory(); + bool findLocalKvircDirectory(); + bool checkGlobalKvircDirectory(const QString); + bool checkLocalKvircDirectory(const QString); + bool checkFileAssociations(); + void setupFileAssociations(); + + bool checkUriAssociations(char * proto); + void setupUriAssociations(char * proto); + + void saveKvircDirectory(); + + // kvi_app.cpp : GUI stuff + void updateApplicationFont(); + +#ifdef COMPILE_PSEUDO_TRANSPARENCY + void createGlobalBackgrounds(QPixmap * pix); + void destroyPseudoTransparency(); + #ifdef COMPILE_KDE_SUPPORT + void downloadKdeRootPixmap(); + #endif //COMPILE_KDE_SUPPORT +#endif //COMPILE_PSEUDO_TRANSPARENCY +private: + // kvi_app.cpp : parts of setup() + void loadRecentEntries(); +#ifndef COMPILE_NO_IPC + void createIpcSentinel(); + void destroyIpcSentinel(); +#endif //!COMPILE_NO_IPC + void createFrame(); +signals: + void reloadImages(); + void recentUrlsChanged(); +}; + +#ifndef _KVI_APP_CPP_ + extern KVIRC_API KviApp * g_pApp; + extern KVIRC_API KviIrcServerDataBase * g_pIrcServerDataBase; +#endif + +#endif //_KVI_APP_H_ |