You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
345 lines
12 KiB
345 lines
12 KiB
15 years ago
|
#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_
|