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.
kvirc/src/kvirc/ui/kvi_frame.h

254 lines
9.6 KiB

#ifndef _KVI_FRAME_H_
#define _KVI_FRAME_H_
//=============================================================================
//
// File : kvi_frame.h
// Creation date : Sun Jun 18 2000 17:59:02 CEST by Szymon Stefanek
//
// This file is part of the KVirc irc client distribution
// Copyright (C) 2000-2004 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.
//
//=============================================================================
//=============================================================================
//
// KviFrame:
// The main window for the KVIrc application
//
//=============================================================================
#include "kvi_settings.h"
#include "kvi_tal_mainwindow.h"
#include "kvi_qstring.h"
#include "kvi_pointerlist.h"
class KviMenuBar;
class KviMdiManager;
class KviMdiChild;
class KviWindow;
class KviConsole;
class KviTaskBarBase;
class TQSplitter;
class KviConfig;
class KviMexToolBar;
class KviIrcContext;
class KviIrcConnection;
class KviStatusBar;
class KviTalPopupMenu;
#include "kvi_accel.h" // we need this :/
#ifdef COMPILE_ON_WINDOWS
// MSCV has problems with KviPointerList<KviWindow> otherwise
#include "kvi_window.h"
#endif
// base class for the dock extension applets..
// this should be probably moved out of here
class KVIRC_API KviDockExtension
{
protected:
unsigned int m_uStoredWindowState;
public:
KviDockExtension() : m_uStoredWindowState(0){};
virtual ~KviDockExtension(){};
public:
void setPrevWindowState(unsigned int state) { m_uStoredWindowState = state; };
unsigned int getPrevWindowState() { return m_uStoredWindowState; };
virtual void refresh(){};
virtual void die(){ delete this; };
};
class KVIRC_API KviFrame : public KviTalMainWindow // , public KviIrcContextManager
{
friend class KviWindow;
friend class KviConsole;
friend class KviApp;
friend class KviServerParser;
friend class KviMexToolBar;
friend class KviMdiManager;
friend class KviIrcContext;
friend class KviIrcConnection;
friend class KviLagMeter;
friend class KviUserListView;
friend class KviUserListViewArea;
Q_OBJECT
public:
KviFrame();
~KviFrame();
protected:
// subwindows
TQSplitter * m_pSplitter; // the frame is splitted vertically and thus can host widgets
KviMenuBar * m_pMenuBar; // the main menu bar
KviMdiManager * m_pMdi; // the mdi manager widget (child of the splitter)
KviPointerList<KviMexToolBar> * m_pModuleExtensionToolBarList; // the module extension toolbars
KviTaskBarBase * m_pTaskBar; // the taskbar
KviStatusBar * m_pStatusBar;
// the mdi workspace child windows
KviPointerList<KviWindow> * m_pWinList; // the main list of windows
KviIrcContext * m_pActiveContext; // the context of the m_pActiveWindow
// other
KviDockExtension * m_pDockExtension; // the frame's dock extension: this should be prolly moved ?
KviAccel * m_pAccel; // the global accelelrator
public:
// the mdi manager: handles mdi children
KviMdiManager * mdiManager(){ return m_pMdi; };
// the splitter is the central widget for this frame
TQSplitter * splitter(){ return m_pSplitter; };
// KviTaskBarBase is the base class for KviTreeTaskBar and the KviClassicTaskBar
KviTaskBarBase * taskBar(){ return m_pTaskBar; };
// well.. the menu bar :D
KviMenuBar * mainMenuBar(){ return m_pMenuBar; };
KviStatusBar * mainStatusBar(){ return m_pStatusBar; };
// this function may return 0 if the active window has no irc context
KviIrcContext * activeContext(){ return m_pActiveContext; };
// shortcut to a = activeContext(); return a ? a->connection() : 0
KviIrcConnection * activeConnection();
// The list of the windows belonging to this frame
// Note that the windows may be also undocked, but they are still owned by the frame
KviPointerList<KviWindow> * windowList() { return m_pWinList; };
// Sets the specified window to be the active one
// Raises it and focuses it
void setActiveWindow(KviWindow *wnd);
// Adds a new KviWindow to this frame
// This should be done just after the KviWindow constructor has returned
// If bShow is false then the window is not explicitly shown
// otherwise it is set as active window.
void addWindow(KviWindow *wnd,bool bShow = true); // public for modules
// Checks if a specified window is still existing in this frame child
// window list. This is useful for asynchronous functions
// that keep a window pointer and need to ensure that it is still
// valid after an uncontrolled delay. (Think of a /timer implementation)
bool windowExists(KviWindow * wnd){ return (m_pWinList->findRef(wnd) != -1); };
// The number of consoles in this frame
unsigned int consoleCount();
// Creates a new console window. DON'T use the KviConsole constructor directly.
// (The script creation events are triggered from here)
KviConsole * createNewConsole(bool bFirstInFrame = false);
// Returns the first available console.
// There is almost always an available console.
// Exceptions are the startup and the shutdown (see activeWindow())
KviConsole * firstConsole();
// Returns the first console that has no connection in progress
// This function CAN return 0 if all the consoles are connected
KviConsole * firstNotConnectedConsole();
// this is explicitly dedicated to the DockExtension applets
void setDockExtension(KviDockExtension * e){ m_pDockExtension = e; };
// returns the dockExtension applet. Useful for calling refresh() when
// some particular event happens
KviDockExtension * dockExtension(){ return m_pDockExtension; };
// Updates the main window caption.
// Should be called when the active window changes
// and the active irc context changes state
void updateCaption();
// helper for saving the window properties
void saveWindowProperties(KviWindow * wnd,const char * szSection);
// finds the module extension toolbar with the specified identifier
// see kvi_moduleextension.h and kvi_mextoolbar.h
KviMexToolBar * moduleExtensionToolBar(int extensionId);
// Helper to fill the toolbars popup
// it is used by KviToolBar and KviMenuBar
void fillToolBarsPopup(KviTalPopupMenu * p);
int registerAccelerator(const TQString &szKeySequence,TQObject * recv,const char * slot);
void unregisterAccelerator(int id);
public slots:
void newConsole();
void executeInternalCommand(int index);
void toggleStatusBar();
void customizeToolBars();
protected:
void restoreModuleExtensionToolBars();
void saveModuleExtensionToolBars();
void registerModuleExtensionToolBar(KviMexToolBar * t);
void unregisterModuleExtensionToolBar(KviMexToolBar * t);
void unhighlightWindowsOfContext(KviIrcContext * c);
void createTaskBar();
void recreateTaskBar();
KviMdiChild * dockWindow(KviWindow *wnd,bool bShow = true,bool bCascade = true,TQRect * setGeom = 0);
void undockWindow(KviWindow *wnd);
void closeWindow(KviWindow *wnd);
// called by KviWindow
void childWindowCloseRequest(KviWindow *wnd);
void childWindowActivated(KviWindow *wnd);
void childContextStateChange(KviIrcContext * c);
void childConnectionNickNameChange(KviIrcConnection * c);
void childConnectionAwayStateChange(KviIrcConnection * c);
void childConnectionUserModeChange(KviIrcConnection * c);
void childConnectionLagChange(KviIrcConnection * c);
void childConnectionServerInfoChange(KviIrcConnection * c);
void childWindowSelectionStateChange(KviWindow * pWnd,bool bGotSelectionNow);
virtual void closeEvent(TQCloseEvent *e);
virtual void resizeEvent(TQResizeEvent *e);
virtual void moveEvent(TQMoveEvent *e);
virtual bool focusNextPrevChild(bool next);
virtual void windowActivationChange(bool bOldActive);
void updatePseudoTransparency();
KviAccel * installAccelerators(TQWidget * wnd);
virtual void hideEvent ( TQHideEvent * e);
protected slots:
void switchToNextWindow();
void switchToPrevWindow();
void switchToNextWindowInContext();
void switchToPrevWindowInContext();
void maximizeWindow();
void minimizeWindow();
void accelActivated(int id);
void enteredSdiMode();
void leftSdiMode();
void toolbarsPopupSelected(int id);
signals:
void activeWindowChanged(); // almost never 0.. but may be
void activeContextChanged(); // may be 0!
void activeContextStateChanged(); // emitted only when the active context is non 0 and it changes state
void activeConnectionNickNameChanged();
void activeConnectionUserModeChanged();
void activeConnectionAwayStateChanged();
void activeConnectionServerInfoChanged();
void activeConnectionLagChanged();
void activeWindowSelectionStateChanged(bool bGotSelectionNow);
protected:
void applyOptions();
private:
void saveToolBarPositions();
void restoreToolBarPositions();
};
#ifndef _KVI_FRAME_CPP_
extern KVIRC_API KviFrame * g_pFrame;
#endif
#endif //_KVI_FRAME_H_