diff options
| author | 2008-04-05 18:37:24 +0000 | |
|---|---|---|
| committer | 2008-04-05 18:37:24 +0000 | |
| commit | bd5eda4ba441b5263128f6ec685e9b5d4dcb1e27 (patch) | |
| tree | 062f6466267b55d4f9afe4757038c8cca03018d3 | |
| parent | Fix of a fix (diff) | |
| download | KVIrc-bd5eda4ba441b5263128f6ec685e9b5d4dcb1e27.tar.gz KVIrc-bd5eda4ba441b5263128f6ec685e9b5d4dcb1e27.tar.bz2 KVIrc-bd5eda4ba441b5263128f6ec685e9b5d4dcb1e27.zip | |
QT4 port of Q3Accel. (wip)
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@1403 17fca916-40b9-46aa-a4ea-0a15b648b75c
| -rw-r--r-- | src/kvilib/kvilib_QT4_vc05.vcproj | 36 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_action.cpp | 1 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_frame.cpp | 2672 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_frame.h | 5 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_ircviewtools.cpp | 2 | ||||
| -rw-r--r-- | src/modules/context/context_QT4_vc05.vcproj | 2 | ||||
| -rw-r--r-- | src/modules/mediaplayer/winamp_QT4_vc05.vcproj | 2 | ||||
| -rw-r--r-- | src/modules/options/dialog.cpp | 2 |
8 files changed, 1362 insertions, 1360 deletions
diff --git a/src/kvilib/kvilib_QT4_vc05.vcproj b/src/kvilib/kvilib_QT4_vc05.vcproj index c05b9128e..25d358098 100644 --- a/src/kvilib/kvilib_QT4_vc05.vcproj +++ b/src/kvilib/kvilib_QT4_vc05.vcproj @@ -263,10 +263,6 @@ >
</File>
<File
- RelativePath="ext\kvi_imagelib.cpp"
- >
- </File>
- <File
RelativePath="irc\kvi_ircmask.cpp"
>
</File>
@@ -932,26 +928,6 @@ </FileConfiguration>
</File>
<File
- RelativePath="ext\kvi_imagelib.h"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Performing Custom Build Step For $(InputName)"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Performing Custom Build Step $(InputName)"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath="core\kvi_inttypes.h"
>
<FileConfiguration
@@ -1829,7 +1805,7 @@ >
<Tool
Name="VCCustomBuildTool"
- CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\$(InputName).moc" "$(InputDir)\$(InputFileName)""
+ CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\$(InputName).moc" "$(InputDir)\$(InputFileName)"
"
Outputs="$(InputDir)\$(InputName).moc"
/>
</FileConfiguration>
@@ -1873,7 +1849,7 @@ <Tool
Name="VCCustomBuildTool"
Description="Performing Custom Build Step $(InputName)"
- CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\$(InputName).moc" "$(InputDir)\$(InputFileName)""
+ CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\$(InputName).moc" "$(InputDir)\$(InputFileName)"
"
Outputs="$(InputDir)\$(InputName).moc"
/>
</FileConfiguration>
@@ -1917,7 +1893,7 @@ <Tool
Name="VCCustomBuildTool"
Description="Performing Custom Build Step $(InputName)"
- CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\$(InputName).moc" "$(InputDir)\$(InputFileName)""
+ CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\$(InputName).moc" "$(InputDir)\$(InputFileName)"
"
Outputs="$(InputDir)\$(InputName).moc"
/>
</FileConfiguration>
@@ -2036,7 +2012,7 @@ <Tool
Name="VCCustomBuildTool"
Description="Performing Custom Build Step $(InputName)"
- CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\$(InputName).moc" "$(InputDir)\$(InputFileName)""
+ CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\$(InputName).moc" "$(InputDir)\$(InputFileName)"
"
Outputs="$(InputDir)\$(InputName).moc"
/>
</FileConfiguration>
@@ -2080,7 +2056,7 @@ <Tool
Name="VCCustomBuildTool"
Description="Performing Custom Build Step $(InputName)"
- CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\$(InputName).moc" "$(InputDir)\$(InputFileName)""
+ CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\$(InputName).moc" "$(InputDir)\$(InputFileName)"
"
Outputs="$(InputDir)\$(InputName).moc"
/>
</FileConfiguration>
@@ -2102,7 +2078,7 @@ <Tool
Name="VCCustomBuildTool"
Description="Performing Custom Build Step $(InputName)"
- CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\$(InputName).moc" "$(InputDir)\$(InputFileName)""
+ CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\$(InputName).moc" "$(InputDir)\$(InputFileName)"
"
Outputs="$(InputDir)\$(InputName).moc"
/>
</FileConfiguration>
diff --git a/src/kvirc/kernel/kvi_action.cpp b/src/kvirc/kernel/kvi_action.cpp index 724436681..4ac3d06da 100644 --- a/src/kvirc/kernel/kvi_action.cpp +++ b/src/kvirc/kernel/kvi_action.cpp @@ -426,6 +426,7 @@ QWidget * KviAction::addToCustomToolBar(KviCustomToolBar *pParentToolBar) void KviAction::activate() { + debug ("emits activated in action"); if(isEnabled()) emit activated(); } diff --git a/src/kvirc/ui/kvi_frame.cpp b/src/kvirc/ui/kvi_frame.cpp index 124e89eda..1e1670e44 100644 --- a/src/kvirc/ui/kvi_frame.cpp +++ b/src/kvirc/ui/kvi_frame.cpp @@ -1,1324 +1,1348 @@ -//============================================================================= -// -// File : kvi_frame.cpp -// Creation date : Sun Jun 18 2000 17:59:02 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. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -//============================================================================= - -#define __KVIRC__ -#define _KVI_FRAME_CPP_ - -#include "kvi_debug.h" -#include "kvi_app.h" -#include "kvi_settings.h" -#include "kvi_frame.h" -#include "kvi_options.h" -#include "kvi_menubar.h" -#include "kvi_mdimanager.h" -#include "kvi_mdichild.h" -#include "kvi_iconmanager.h" -#include "kvi_window.h" -#include "kvi_taskbar.h" -#include "kvi_console.h" -#include "kvi_config.h" -#include "kvi_internalcmd.h" -#include "kvi_console.h" -#include "kvi_debug.h" -#include "kvi_irctoolbar.h" -#include "kvi_confignames.h" -#include "kvi_parameterlist.h" -#include "kvi_module.h" -#include "kvi_mextoolbar.h" -#include "kvi_locale.h" -#include "kvi_irccontext.h" -#include "kvi_statusbar.h" -#include "kvi_customtoolbar.h" -#include "kvi_customtoolbarmanager.h" -#include "kvi_customtoolbardescriptor.h" -#include "kvi_actionmanager.h" -#include "kvi_defaults.h" -#include "kvi_ircview.h" -#include "kvi_kvs_script.h" -#include "kvi_kvs_eventtriggers.h" -#include "kvi_tal_popupmenu.h" - -#include <QSplitter> -#include <QVariant> -#include <QLineEdit> -#include <QMessageBox> -#include <QCheckBox> -#include <QTimer> -#include <QLayout> -#include <QDesktopWidget> -#include <QEvent> -#include <QCloseEvent> -#include <QShortcut> -#include <QFile> - -#include <time.h> - -#ifdef COMPILE_PSEUDO_TRANSPARENCY - #include <QPixmap> - // kvi_app.h - extern QPixmap * g_pShadedParentGlobalDesktopBackground; - extern QPixmap * g_pShadedChildGlobalDesktopBackground; -// FIXME: #warning "When a toolbar is moved , MdiManager is resized but does not update the MdiChild backgrounds" -#endif - -// Declared and managed by KviApp (kvi_app.cpp) -extern KviConfig * g_pWinPropertiesConfig; -KVIRC_API KviFrame * g_pFrame = 0; // the one and only frame object - -KviFrame::KviFrame() -: KviTalMainWindow(0,"kvirc_frame") -{ - g_pFrame = this; - - setIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_KVIRC))); - - m_pWinList = new KviPointerList<KviWindow>; - m_pWinList->setAutoDelete(false); - - m_pModuleExtensionToolBarList = new KviPointerList<KviMexToolBar>; - m_pModuleExtensionToolBarList->setAutoDelete(false); - - m_pActiveContext = 0; - - m_pDockExtension = 0; - - m_pSplitter = new QSplitter(Qt::Horizontal,this,"main_splitter"); -// m_pSplitter->setFrameShape(QFrame::NoFrame); - - setCentralWidget(m_pSplitter); - - setUsesBigPixmaps(KVI_OPTION_BOOL(KviOption_boolUseBigIcons)); - - m_pMdi = new KviMdiManager(m_pSplitter,this,"mdi_manager"); - connect(m_pMdi,SIGNAL(enteredSdiMode()),this,SLOT(enteredSdiMode())); - connect(m_pMdi,SIGNAL(leftSdiMode()),this,SLOT(leftSdiMode())); - - // This theoretically had to exists before KviMdiManager (that uses enterSdiMode) - m_pMenuBar = new KviMenuBar(this,"main_menu_bar"); - setMenuWidget(m_pMenuBar); - - if(KVI_OPTION_BOOL(KviOption_boolStatusBarVisible)) - { - m_pStatusBar = new KviStatusBar(this); - setStatusBar(m_pStatusBar); - // torque: moved out of status bar constructor - // because module init functions exectued in load() - // couldn't access the status bar via g_pFrame->mainStatusBar() - // (assignment of m_pStatusBar happened after load() and - // the init function) - m_pStatusBar->load(); - - } else - m_pStatusBar = 0; - - m_pTaskBar = 0; - - createTaskBar(); - - if((KVI_OPTION_RECT(KviOption_rectFrameGeometry).width() < 100) || (KVI_OPTION_RECT(KviOption_rectFrameGeometry).height() < 100)) - { - // Try to find some reasonable defaults - KVI_OPTION_RECT(KviOption_rectFrameGeometry) = QRect(10,10,g_pApp->desktop()->width() - 200,g_pApp->desktop()->height() - 150); - } - - resize(KVI_OPTION_RECT(KviOption_rectFrameGeometry).width(), - KVI_OPTION_RECT(KviOption_rectFrameGeometry).height()); - move(KVI_OPTION_RECT(KviOption_rectFrameGeometry).x(), - KVI_OPTION_RECT(KviOption_rectFrameGeometry).y()); - - applyOptions(); - - - m_pAccel = new KviAccel(this); - - installAccelerators(this); - - layout()->setResizeMode(QLayout::FreeResize); -} - -KviFrame::~KviFrame() -{ - KVI_OPTION_RECT(KviOption_rectFrameGeometry) = QRect(pos().x(),pos().y(), - size().width(),size().height()); - - KVI_OPTION_BOOL(KviOption_boolUseBigIcons) = usesBigPixmaps(); - KVI_OPTION_BOOL(KviOption_boolMdiManagerInSdiMode) = m_pMdi->isInSDIMode(); - KVI_OPTION_BOOL(KviOption_boolStatusBarVisible) = m_pStatusBar ? true : false; - - KviCustomToolBarManager::instance()->storeVisibilityState(); - - saveToolBarPositions(); - saveModuleExtensionToolBars(); - - // Call the frame destructor callback AFTER saving the toolbar positions - // This is because the destructor callback kills alls the KVS objects - // and thus the eventual user toolbar objects too and their position - // wouldn't be saved if they are shown at startup. - - g_pApp->frameDestructorCallback(); - - // Now start killing stuff - - // Explicitly kill all the module extension toolbars: qt has NOT to delete them: we must call their "die" method - while(KviMexToolBar * t = m_pModuleExtensionToolBarList->first())t->die(); - delete m_pModuleExtensionToolBarList; - - KVI_OPTION_BOOL(KviOption_boolShowDockExtension) = m_pDockExtension; - - if(m_pDockExtension) - { - m_pDockExtension->die(); - m_pDockExtension = 0; - } - - // the really last thing to do : close all the windows - while(m_pWinList->first()) - closeWindow(m_pWinList->first()); - delete m_pWinList; - - delete m_pAccel; - g_pFrame = 0; -} - -int KviFrame::registerAccelerator(const QString &szKeySequence,QObject * recv,const char * slot) -{ - int id = m_pAccel->insertItem(szKeySequence); - m_pAccel->connectItem(id,recv,slot); - return id; -} - -void KviFrame::unregisterAccelerator(int id) -{ - m_pAccel->removeItem(id); -} - -void KviFrame::registerModuleExtensionToolBar(KviMexToolBar * t) -{ - m_pModuleExtensionToolBarList->append(t); -} - -void KviFrame::unregisterModuleExtensionToolBar(KviMexToolBar * t) -{ - m_pModuleExtensionToolBarList->removeRef(t); -} - -void KviFrame::restoreModuleExtensionToolBars() -{ - for(QStringList::Iterator it = KVI_OPTION_STRINGLIST(KviOption_stringlistModuleExtensionToolbars).begin();it != KVI_OPTION_STRINGLIST(KviOption_stringlistModuleExtensionToolbars).end();++it) - { - QString szEntry = *it; - int idx = szEntry.find(':'); - if(idx != -1) - { - QString szMod = szEntry.left(idx); - szEntry.remove(0,idx + 1); - g_pModuleExtensionManager->allocateExtension("toolbar",KviStr(szEntry),firstConsole(),0,0,szMod); - } - } -} - -void KviFrame::saveModuleExtensionToolBars() -{ - KVI_OPTION_STRINGLIST(KviOption_stringlistModuleExtensionToolbars).clear(); - - for(KviMexToolBar * t = m_pModuleExtensionToolBarList->first();t;t = m_pModuleExtensionToolBarList->next()) - { - QString s = t->descriptor()->module()->name(); - s += ":"; - s += t->descriptor()->name().ptr(); - - //debug("FOUND TOOLBAR %s",t->descriptor()->name().ptr()); - - KVI_OPTION_STRINGLIST(KviOption_stringlistModuleExtensionToolbars).append(s); - } -} - -KviMexToolBar * KviFrame::moduleExtensionToolBar(int extensionId) -{ - for(KviMexToolBar * t = m_pModuleExtensionToolBarList->first();t;t = m_pModuleExtensionToolBarList->next()) - { - if(extensionId == t->descriptor()->id())return t; - } - return 0; -} - -/* - @doc: keyboard - @type: - generic - @title: - Keyboard shortcuts - @keyterms: - Keyboard shortcuts - @short: - The list of the common keyboard shortcuts - @body: - [b]Ctrl+LeftArrow[/b]: Selection left to the previous word[br] - [b]Ctrl+RightArrow[/b]: Selection right to the next word[br] - [b]Ctrl+Shift+LeftArrow[/b]: Previous word[br] - [b]Ctrl+Shift+RightArrow[/b]: Next word[br] - [b]Alt+LeftArrow[/b]: Previous window[br] - [b]Alt+RightArrow[/b]: Next window[br] - [b]Alt+Shift+LeftArrow[/b]: Previous window in the same IRC context[/b] - [b]Alt+Shift+RightArrow[/b]: Next window in the same IRC context[/b] - [b]Ctrl+UpArrow[/b]: Maximize current window[br] - [b]Ctrl+DownArrow[/b] or [b]ESC[/b]: Minimize current window[br] - [b]Ctrl+<digit>[/b], [b]F1-F12[/b], [b]Shift+(F1-F12)[/b]: Script accelerators (see [event:onaccelkeypressed]OnAccelKeyPressed[/event])[br] - [b]Shift+<F1-F12>[/b] window switch[br] - [b]Tab in the first word of input[/b]: Completes nicknames in the current channel or query[br] - [b]Tab after a leading /[/b]: Completes commands[br] - [b]Tab after a / in the middle of input[/b]: Completes directories[br] - [b]Tab after a $[/b]: Completes function names[br] - [b]Shift+Tab after the first word of input[/b]: completes masks in the current channel or query[br] - [b]Ctrl+B[/b]: Inserts the 'bold' mIRC text control character[br] - [b]Ctrl+K[/b]: Inserts the 'color' mIRC text control character[br] - [b]Ctrl+R[/b]: Inserts the 'reverse' mIRC text control character[br] - [b]Ctrl+U[/b]: Inserts the 'underline' mIRC text control character[br] - [b]Ctrl+O[/b]: Inserts the 'reset' mIRC text control character[br] - [b]Ctrl+P[/b]: Inserts the 'non-crypt' (plain text) KVIrc control character used to disable encryption of the current text line[br] - [b]Ctrl+C[/b]: Copies the selected text to clipboard[br] - [b]Ctrl+X[/b]: Cuts the selected text[br] - [b]Ctrl+V[/b]: Pastes the clipboard contents (same as middle mouse click)[br] - [b]Ctrl+I[/b]: Inserts the 'icon' control code and pops up the icon list box - [b]CursorUp[/b]: Moves backward in the command history[br] - [b]CursorDown[/b]: Moves forward in the command history[br] - [b]Ctrl+PageUp[/b]: Opens the history popup[br] - [b]CursorRight[/b]: Moves the cursor to the right[br] - [b]CursorLeft[/b]: Moves the cursor to the left :)[br] - [b]Shift+CursorLeft[/b]: Moves the selection to the left[br] - [b]Shift+RightCursor[/b]: Moves the selection to the right[br] - [b]PageUp[/b]: Scrolls the output window up one page[br] - [b]PageDown[/b]: Scrolls the output window down one page[b] - [b]Shift+PageUp[/b]: Scrolls the output window up one line[br] - [b]Shift+PageDown[/b]: Scrolls the output window down one line[b] - [b]Alt+lt;numeric_sequence>[/b]: Inserts the character by ASCII/Unicode code[br] - [b]Ctrl+Backspace[/b]: Shows or hides the multiline editor[br] - [b]Ctrl+F4[/b]: Closes the current window[br] - <example> - Alt+32: Inserts ASCII/Unicode character 32: ' ' (a space) - Alt+00032: Same as above :) - Alt+13: Inserts the Carriage Return (CR) control character - Alt+77: Inserts ASCII/Unicode character 77: 'M' - Alt+23566: Inserts Unicode character 23566 (an ideogram) - </example> -*/ - -KviAccel * KviFrame::installAccelerators(QWidget * wnd) -{ - QWidget * pParent = wnd ? (QWidget *)wnd : (QWidget *)this; - new QShortcut(QKeySequence(Qt::Key_Left + Qt::ALT),pParent,SLOT(switchToPrevWindow())); - new QShortcut(QKeySequence(Qt::Key_Right + Qt::ALT),pParent,SLOT(switchToNextWindow())); - new QShortcut(QKeySequence(Qt::Key_Up + Qt::CTRL),pParent,SLOT(maximizeWindow())); - new QShortcut(QKeySequence(Qt::Key_Down + Qt::CTRL),pParent,SLOT(minimizeWindow())); - new QShortcut(QKeySequence(Qt::Key_Escape +Qt::CTRL),pParent,SLOT(minimizeWindow())); - new QShortcut(QKeySequence(Qt::Key_Left + Qt::ALT + Qt::SHIFT),pParent,SLOT(switchToPrevWindowInContext())); - new QShortcut(QKeySequence(Qt::Key_Right + Qt::ALT + Qt::SHIFT),pParent,SLOT(switchToNextWindowInContext())); - KviAccel *ac = new KviAccel(pParent); - - static int accel_table[] = { - Qt::Key_Left + Qt::ALT , // prev window - Qt::Key_Right + Qt::ALT , // next window - Qt::Key_Up + Qt::CTRL , // maximize window - Qt::Key_Down + Qt::CTRL , // minimize window - Qt::Key_Escape +Qt::CTRL, // minimize window - Qt::Key_Left + Qt::ALT + Qt::SHIFT , // prev window in context - Qt::Key_Right + Qt::ALT + Qt::SHIFT, // next window in context - Qt::Key_F4 + Qt::CTRL , // close current window - Qt::Key_1 + Qt::CTRL , // script accels... - Qt::Key_2 + Qt::CTRL , - Qt::Key_3 + Qt::CTRL , - Qt::Key_4 + Qt::CTRL , - Qt::Key_5 + Qt::CTRL , - Qt::Key_6 + Qt::CTRL , - Qt::Key_7 + Qt::CTRL , - Qt::Key_8 + Qt::CTRL , - Qt::Key_9 + Qt::CTRL , - Qt::Key_0 + Qt::CTRL , - Qt::Key_F1 , // reserved for context sensitive help - Qt::Key_F2 , - Qt::Key_F3 , - Qt::Key_F4 , - Qt::Key_F5 , - Qt::Key_F6 , - Qt::Key_F7 , - Qt::Key_F8 , - Qt::Key_F9 , - Qt::Key_F10 , - Qt::Key_F11 , - Qt::Key_F12 , -/* Qt::Key_F1 + Qt::SHIFT , // window select... - Qt::Key_F2 + Qt::SHIFT , - Qt::Key_F3 + Qt::SHIFT , - Qt::Key_F4 + Qt::SHIFT , - Qt::Key_F5 + Qt::SHIFT , - Qt::Key_F6 + Qt::SHIFT , - Qt::Key_F7 + Qt::SHIFT , - Qt::Key_F8 + Qt::SHIFT , - Qt::Key_F9 + Qt::SHIFT , - Qt::Key_F10 + Qt::SHIFT , - Qt::Key_F11 + Qt::SHIFT , - Qt::Key_F12 + Qt::SHIFT ,*/ - 0 - }; - - int i=0; - int keys; - while((keys = accel_table[i])) - { - ac->insertItem(keys); - i++; - } - - connect(ac,SIGNAL(activated(int)),this,SLOT(accelActivated(int))); - return ac; -} - -void KviFrame::accelActivated(int id) -{ - KviAccel * acc = (KviAccel *)sender(); - - int keys = (int)(acc->key(id)); - KviTaskBarItem *item = 0; - debug("accel"); - switch(keys) - { - case (Qt::Key_Left+Qt::ALT): switchToPrevWindow(); break; - case (Qt::Key_Right+Qt::ALT): switchToNextWindow(); break; - case (Qt::Key_Up+Qt::CTRL): maximizeWindow(); break; - case (Qt::Key_Escape+Qt::CTRL): - case (Qt::Key_Down+Qt::CTRL): minimizeWindow(); break; - case (Qt::Key_Left+Qt::ALT+Qt::SHIFT): switchToPrevWindowInContext(); break; - case (Qt::Key_Right+Qt::ALT+Qt::SHIFT): switchToNextWindowInContext(); break; - case (Qt::Key_F4+Qt::CTRL): if(g_pActiveWindow)g_pActiveWindow->close(); break; - case (Qt::Key_F1): g_pApp->contextSensitiveHelp(); break; -/* case(Qt::Key_F1 + SHIFT): - item = m_pTaskBar->item(0); - if(item) setActiveWindow(item->window()); - break; - case(Qt::Key_F2 + SHIFT): - item = m_pTaskBar->item(1); - if(item) setActiveWindow(item->window()); - break; - case(Qt::Key_F3 + SHIFT): - item = m_pTaskBar->item(2); - if(item) setActiveWindow(item->window()); - break; - case(Qt::Key_F4 + SHIFT): - item = m_pTaskBar->item(3); - if(item) setActiveWindow(item->window()); - break; - case(Qt::Key_F5 + SHIFT): - item = m_pTaskBar->item(4); - if(item) setActiveWindow(item->window()); - break; - case(Qt::Key_F6 + SHIFT): - item = m_pTaskBar->item(5); - if(item) setActiveWindow(item->window()); - break; - case(Qt::Key_F7 + SHIFT): - item = m_pTaskBar->item(6); - if(item) setActiveWindow(item->window()); - break; - case(Qt::Key_F8 + SHIFT): - item = m_pTaskBar->item(7); - if(item) setActiveWindow(item->window()); - break; - case(Qt::Key_F9 + SHIFT): - item = m_pTaskBar->item(8); - if(item) setActiveWindow(item->window()); - break; - case(Qt::Key_F10 + SHIFT): - item = m_pTaskBar->item(9); - if(item) setActiveWindow(item->window()); - break; - case(Qt::Key_F11 + SHIFT): - item = m_pTaskBar->item(10); - if(item) setActiveWindow(item->window()); - break; - case(Qt::Key_F12 + SHIFT): - item = m_pTaskBar->item(11); - if(item) setActiveWindow(item->window()); - break;*/ - default: - { - KVS_TRIGGER_EVENT_1(KviEvent_OnAccelKeyPressed,g_pActiveWindow,(QString)(acc->key(id))); - } - break; - }; -} - -void KviFrame::executeInternalCommand(int index) -{ - KviKvsScript::run(kvi_getInternalCommandBuffer(index),firstConsole()); -} - - -void KviFrame::saveWindowProperties(KviWindow * wnd,const char * szSection) -{ - g_pWinPropertiesConfig->setGroup(szSection); - g_pWinPropertiesConfig->writeEntry("EntryTimestamp",(unsigned int)time(0)); - - // Allow max 80 window properties to be floating around - while(g_pWinPropertiesConfig->groupsCount() > 80) - { - // Kill the oldest group - KviConfigIterator it(*(g_pWinPropertiesConfig->dict())); - KviStr minKey; - unsigned int minVal = time(0); - while(it.current() && minVal) - { - QString * pVal = it.current()->find("EntryTimestamp"); - if(pVal) - { - bool bOk; - unsigned int uVal = pVal->toUInt(&bOk); - if(bOk) - { - if(uVal < minVal) - { - minVal = uVal; - minKey = it.currentKey(); - } - } else { - minVal = 0; - minKey = it.currentKey(); - } - } else { - minVal = 0; - minKey = it.currentKey(); - } - ++it; - } - - if(minKey.hasData())g_pWinPropertiesConfig->clearGroup(minKey.ptr()); - else debug("Oops...no minimum key found!"); - } - - // The following line should NOT be needed...but just to be sure... - g_pWinPropertiesConfig->setGroup(szSection); - - g_pWinPropertiesConfig->writeEntry("IsDocked",wnd->mdiParent()); - -// KviWindow * top = g_pActiveWindow; -// if(!top)top = wnd; -// g_pWinPropertiesConfig->writeEntry("IsMaximized",top->isMaximized()); - - g_pWinPropertiesConfig->writeEntry("WinRect",wnd->externalGeometry()); - - wnd->saveProperties(g_pWinPropertiesConfig); -} - -void KviFrame::closeWindow(KviWindow *wnd) -{ - // notify the destruction - wnd->triggerDestructionEvents(); - - // save it's properties - if(KVI_OPTION_BOOL(KviOption_boolWindowsRememberProperties)) // && (wnd->type() == KVI_WINDOW_TYPE_CHANNEL)) - { - QString group; - wnd->getConfigGroupName(group); - // not uses default settings : store it always - saveWindowProperties(wnd,group); - } - - // forget it... - m_pWinList->removeRef(wnd); - - // hide it - if(wnd->mdiParent())wnd->mdiParent()->hide(); - else wnd->hide(); - - if(wnd == g_pActiveWindow) - { - // we need another active window before destroying it - KviMdiChild * pMdiChild = wnd->mdiParent(); - if(pMdiChild) - { - pMdiChild = m_pMdi->highestChildExcluding(pMdiChild); - } else { - // the best candidate for the new active window - // is the top mdiManager's child - pMdiChild = m_pMdi->topChild(); - } - KviWindow * pCandidate; - if(pMdiChild) - { - pCandidate = (KviWindow *)(pMdiChild->client()); - } else { - pCandidate = m_pWinList->first(); - if(pCandidate == wnd)pCandidate = 0; - } - - if(pCandidate) - childWindowActivated(pCandidate); - // else { m_pActiveWindow = 0; m_pActiveContext = 0; }; - } - - if(wnd == g_pActiveWindow) // ops... :/ ... this happens only at shutdown - { - g_pActiveWindow = 0; - m_pActiveContext = 0; - } - - // and shut it down... - // KviWindow will call childWindowDestroyed() here - if(wnd->mdiParent())m_pMdi->destroyChild(wnd->mdiParent(),true); - else delete wnd; -} - - -void KviFrame::addWindow(KviWindow *wnd,bool bShow) -{ - m_pWinList->append(wnd); - wnd->createTaskBarItem(); // create the window taskbar item AFTER it has been constructed - - QString group; - wnd->getConfigGroupName(group); - - bool bGroupSettings = false; - - if(g_pWinPropertiesConfig->hasGroup(group)) - { - g_pWinPropertiesConfig->setGroup(group); - } else { - bGroupSettings = true; - if(g_pWinPropertiesConfig->hasGroup(wnd->typeString())) - { - g_pWinPropertiesConfig->setGroup(wnd->typeString()); - } else { - g_pWinPropertiesConfig->setGroup("no_settings_group"); - wnd->loadProperties(g_pWinPropertiesConfig); // load it anyway (will set defaults if windows don't remember properties) - goto default_docking; // no settings stored - } - } - - { - wnd->loadProperties(g_pWinPropertiesConfig); // load it anyway (will set defaults if windows don't remember properties) - - if(KVI_OPTION_BOOL(KviOption_boolWindowsRememberProperties)) - { - bool bDocked = g_pWinPropertiesConfig->readBoolEntry("IsDocked",true); - //bool bMaximized = g_pWinPropertiesConfig->readBoolEntry("IsMaximized",false); - bool bMaximized; - - if(KVI_OPTION_BOOL(KviOption_boolMdiManagerInSdiMode)) - { - bMaximized = true; - //KVI_OPTION_BOOL(KviOption_boolMdiManagerInSdiMode) = false; - } else bMaximized = false; - - QRect rect = g_pWinPropertiesConfig->readRectEntry("WinRect",QRect(10,10,500,380)); - - if(bDocked) - { - // when group settings are used , we always cascade the windows - // this means that windows that have no specialized config group name - // are always cascaded : this is true for consoles , queries (and other windows) but not channels (and some other windows) - KviMdiChild * lpC = dockWindow(wnd,false,bGroupSettings,&rect); - lpC->setRestoredGeometry(rect); - wnd->triggerCreationEvents(); - if(bShow) - { - m_pMdi->showAndActivate(lpC); - if(bMaximized)wnd->maximize(); - // Handle the special case of this top level widget not being the active one. - // In this situation the child will not get the focusInEvent - // and thus will not call out childWindowActivated() method - if(!isActiveWindow())childWindowActivated(wnd); - } - } else { - wnd->setGeometry(rect); - wnd->triggerCreationEvents(); - if(bShow) - { - wnd->show(); - if(bMaximized)wnd->maximize(); - } - wnd->youAreUndocked(); - if(bShow) - { - wnd->raise(); - wnd->setFocus(); - } - } - goto docking_done; - } - } - -default_docking: - { - KviMdiChild * lpC = dockWindow(wnd,false); //cascade it - wnd->triggerCreationEvents(); - if(bShow) - { - m_pMdi->showAndActivate(lpC); - if(KVI_OPTION_BOOL(KviOption_boolMdiManagerInSdiMode)) wnd->maximize(); - // Handle the special case of this top level widget not being the active one. - // In this situation the child will not get the focusInEvent - // and thus will not call out childWindowActivated() method - if(!isActiveWindow())childWindowActivated(wnd); - } - } -docking_done: - // we like to have an active window.. but don't trigger the events until it is really shown - if(!g_pActiveWindow) - { - g_pActiveWindow = wnd; - m_pActiveContext = wnd->context(); - } -} - -KviMdiChild * KviFrame::dockWindow(KviWindow *wnd,bool bShow,bool bCascade,QRect *setGeom) -{ - if(wnd->mdiParent())return wnd->mdiParent(); - KviMdiChild * lpC = new KviMdiChild(m_pMdi,""); - lpC->setClient(wnd); - wnd->youAreDocked(); - m_pMdi->manageChild(lpC,bCascade,setGeom); - if(bShow)m_pMdi->showAndActivate(lpC); - return lpC; -} - -void KviFrame::undockWindow(KviWindow *wnd) -{ - if(!(wnd->mdiParent()))return; - KviMdiChild * lpC = wnd->mdiParent(); - lpC->unsetClient(); - m_pMdi->destroyChild(lpC,false); - wnd->youAreUndocked(); - wnd->raise(); - wnd->setFocus(); -} - - -void KviFrame::newConsole() -{ - createNewConsole(); -} - -KviConsole * KviFrame::createNewConsole(bool bFirstInFrame) -{ - // the first console must be created BEFORE the toolbars visible - // at startup otherwise we cannot execute script code - // which is necessary for the actions that are going to be added - // to the toolbars - KviConsole * c = new KviConsole(this,bFirstInFrame ? KVI_CONSOLE_FLAG_FIRSTINFRAME : 0); - addWindow(c); - - if(bFirstInFrame) - { - restoreModuleExtensionToolBars(); - KviCustomToolBarManager::instance()->createToolBarsVisibleAtStartup(); - KviActionManager::instance()->delayedRegisterAccelerators(); - restoreToolBarPositions(); - } - - return c; -} - -unsigned int KviFrame::consoleCount() -{ - unsigned int count = 0; - for(KviWindow * wnd = m_pWinList->first();wnd;wnd = m_pWinList->next()) - { - if(wnd->type() == KVI_WINDOW_TYPE_CONSOLE)count++; - } - return count; -} - -KviConsole * KviFrame::firstConsole() -{ - for(KviWindow * wnd = m_pWinList->first();wnd;wnd = m_pWinList->next()) - { - if(wnd->type() == KVI_WINDOW_TYPE_CONSOLE)return (KviConsole *)wnd; - } - __range_valid(false); - return 0; //should newer be here!.. but sometimes we are ? -} - -KviConsole * KviFrame::firstNotConnectedConsole() -{ - for(KviWindow * wnd = m_pWinList->first();wnd;wnd = m_pWinList->next()) - { - if(wnd->type() == KVI_WINDOW_TYPE_CONSOLE) - { - if(!((KviConsole *)wnd)->connectionInProgress()) - return (KviConsole *)wnd; - } - } - return 0; -} - -void KviFrame::childWindowCloseRequest(KviWindow *wnd) -{ - closeWindow(wnd); -} - -void KviFrame::unhighlightWindowsOfContext(KviIrcContext * c) -{ - for(KviWindow *w = m_pWinList->first();w;w = m_pWinList->next()) - if(w->context() == c)w->unhighlight(); -} - -void KviFrame::setActiveWindow(KviWindow *wnd) -{ - // ASSERT(m_pWinList->findRef(wnd)) - if(wnd->isMinimized())wnd->restore(); - if(wnd->mdiParent())wnd->setFocus(); - else wnd->delayedAutoRaise(); -} - -KviIrcConnection * KviFrame::activeConnection() -{ - return m_pActiveContext ? m_pActiveContext->connection() : 0; -} - -void KviFrame::childWindowSelectionStateChange(KviWindow * pWnd,bool bGotSelectionNow) -{ - if(pWnd != g_pActiveWindow)return; - emit activeWindowSelectionStateChanged(bGotSelectionNow); - -} - -void KviFrame::childContextStateChange(KviIrcContext * c) -{ - if(c != m_pActiveContext)return; - emit activeContextStateChanged(); -} - -void KviFrame::childConnectionLagChange(KviIrcConnection * c) -{ - KviIrcContext * ctx = c->context(); - if(ctx != m_pActiveContext)return; - emit activeConnectionLagChanged(); -} - -void KviFrame::childConnectionServerInfoChange(KviIrcConnection * c) -{ - KviIrcContext * ctx = c->context(); - if(ctx != m_pActiveContext)return; - emit activeConnectionServerInfoChanged(); -} - -void KviFrame::childConnectionNickNameChange(KviIrcConnection * c) -{ - KviIrcContext * ctx = c->context(); - if(ctx != m_pActiveContext)return; - emit activeConnectionNickNameChanged(); -} - -void KviFrame::childConnectionAwayStateChange(KviIrcConnection * c) -{ - KviIrcContext * ctx = c->context(); - if(ctx != m_pActiveContext)return; - emit activeConnectionAwayStateChanged(); -} - -void KviFrame::childConnectionUserModeChange(KviIrcConnection * c) -{ - KviIrcContext * ctx = c->context(); - if(ctx != m_pActiveContext)return; - emit activeConnectionUserModeChanged(); -} - - -void KviFrame::childWindowActivated(KviWindow *wnd) -{ - // ASSERT(m_pWinList->findRef(wnd)) - if(g_pActiveWindow == wnd)return; - if(g_pActiveWindow)g_pActiveWindow->lostUserFocus(); - // YES: it's HERE! - g_pActiveWindow = wnd; - - bool bActiveContextChanged = (m_pActiveContext != wnd->context()); - m_pActiveContext = wnd->context(); - - if(wnd->isMaximized() && wnd->mdiParent())updateCaption(); - m_pTaskBar->setActiveItem(wnd->taskBarItem()); - - //wnd->gainedActiveWindowStatus(); // <-- atm unused - - if(g_pActiveWindow->view()) - g_pActiveWindow->view()->clearUnreaded(); - - emit activeWindowChanged(); - if(bActiveContextChanged)emit activeContextChanged(); - - KVS_TRIGGER_EVENT_0(KviEvent_OnWindowActivated,wnd); -} - -void KviFrame::windowActivationChange(bool bOldActive) -{ - // if we have just been activated by the WM - // then update the active window task bar item - // It will then reset its highlight state - // and hopefully make the dock widget work correctly - // in this case. - // This will also trigger the OnWindowActivated event :) - if(isActiveWindow()) - { - if(!bOldActive) - { - if(g_pActiveWindow) - { - KviWindow * pTmp = g_pActiveWindow; - g_pActiveWindow = 0; // really ugly hack! - childWindowActivated(pTmp); - } - } - } else { - if(g_pActiveWindow)g_pActiveWindow->lostUserFocus(); - } -} - -void KviFrame::enteredSdiMode() -{ - updateCaption(); -} - -void KviFrame::leftSdiMode() -{ - updateCaption(); -} - -#define KVI_DEFAULT_FRAME_CAPTION "KVIrc " KVI_VERSION " " KVI_RELEASE_NAME - -void KviFrame::updateCaption() -{ - if(g_pActiveWindow) - { - if(g_pActiveWindow->isMaximized() && g_pActiveWindow->mdiParent()) - { - QString tmp = g_pActiveWindow->plainTextCaption(); - tmp += QChar(' '); - tmp += KVI_DEFAULT_FRAME_CAPTION; - setCaption(tmp); - return; - } - } - setCaption(KVI_DEFAULT_FRAME_CAPTION); -} - - -void KviFrame::closeEvent(QCloseEvent *e) -{ - - if(KVI_OPTION_BOOL(KviOption_boolCloseInTray)) - { - e->ignore(); - - if(!dockExtension()) - { - executeInternalCommand(KVI_INTERNALCOMMAND_DOCKWIDGET_SHOW); - } - if(dockExtension()) - { - - dockExtension()->setPrevWindowState(windowState()); - QTimer::singleShot( 0, this, SLOT(hide()) ); - } - return; - } - - if(KVI_OPTION_BOOL(KviOption_boolConfirmCloseWhenThereAreConnections)) - { - // check for running connections - - bool bGotRunningConnection = false; - for(KviWindow * w = m_pWinList->first();w;w = m_pWinList->next()) - { - if(w->type() == KVI_WINDOW_TYPE_CONSOLE) - { - if(((KviConsole *)w)->connectionInProgress()) - { - bGotRunningConnection = true; - break; - } - } - } - - if(bGotRunningConnection) - { - QString txt = "<p>"; - txt += __tr2qs("There are active connections, are you sure you wish to "); - txt += __tr2qs("quit KVIrc?"); - txt += "</p>"; - - switch(QMessageBox::warning(this,__tr2qs("Confirmation - KVIrc"),txt,__tr2qs("&Yes"),__tr2qs("&Always"),__tr2qs("&No"),2,2)) - { - case 0: - // ok to close - break; - case 1: - // ok to close but don't ask again - KVI_OPTION_BOOL(KviOption_boolConfirmCloseWhenThereAreConnections) = false; - break; - case 2: - e->ignore(); - return; - break; - } - } - } - - e->accept(); - - if(g_pApp) - g_pApp->destroyFrame(); -} - -void KviFrame::resizeEvent(QResizeEvent *e) -{ - KVI_OPTION_RECT(KviOption_rectFrameGeometry) = QRect(pos().x(),pos().y(), - size().width(),size().height()); - KviTalMainWindow::resizeEvent(e); -} - -void KviFrame::updatePseudoTransparency() -{ -#ifdef COMPILE_PSEUDO_TRANSPARENCY - if(g_pShadedParentGlobalDesktopBackground)m_pMdi->viewport()->update(); - - if(g_pShadedChildGlobalDesktopBackground) - { - for(KviWindow * wnd = m_pWinList->first();wnd;wnd = m_pWinList->next())wnd->updateBackgrounds(); - m_pTaskBar->updatePseudoTransparency(); - } -#endif -} - -void KviFrame::moveEvent(QMoveEvent *e) -{ - KVI_OPTION_RECT(KviOption_rectFrameGeometry) = QRect(pos().x(),pos().y(), - size().width(),size().height()); -#ifdef COMPILE_PSEUDO_TRANSPARENCY - updatePseudoTransparency(); -#endif - KviTalMainWindow::moveEvent(e); -} - -void KviFrame::applyOptions() -{ - m_pMdi->update(); - for(KviWindow * wnd = m_pWinList->first();wnd;wnd = m_pWinList->next())wnd->applyOptions(); - updateCaption(); - - m_pTaskBar->applyOptions(); -} - -void KviFrame::toggleStatusBar() -{ - if(m_pStatusBar) - { - delete m_pStatusBar; - m_pStatusBar = 0; - } else { - //if(statusBar())delete statusBar(); // kill any existing status bar (QT BUG) - - m_pStatusBar = new KviStatusBar(this); - m_pStatusBar->load(); - setStatusBar(m_pStatusBar); - m_pStatusBar->show(); - } -} - -void KviFrame::fillToolBarsPopup(KviTalPopupMenu * p) -{ - p->clear(); - - disconnect(p,SIGNAL(activated(int)),this,SLOT(toolbarsPopupSelected(int))); // just to be sure - connect(p,SIGNAL(activated(int)),this,SLOT(toolbarsPopupSelected(int))); - - int id; - int cnt = 0; - - KviModuleExtensionDescriptorList * l = g_pModuleExtensionManager->getExtensionList("toolbar"); - if(l) - { - for(KviModuleExtensionDescriptor * d = l->first();d;d = l->next()) - { - QString label = __tr2qs("Show %1").arg(d->visibleName()); - if(d->icon())id = p->insertItem(*(d->icon()),label); - else id = p->insertItem(label); - p->setItemChecked(id,moduleExtensionToolBar(d->id())); - p->setItemParameter(id,d->id()); - cnt++; - } - } - - // FIXME: Should this display "Hide %1" when the toolbar is already visible ? - KviPointerHashTableIterator<QString,KviCustomToolBarDescriptor> it2(*(KviCustomToolBarManager::instance()->descriptors())); - if(it2.current()) - { - if(cnt > 0)p->insertSeparator(); - while(KviCustomToolBarDescriptor * d = it2.current()) - { - QString label = __tr2qs("Show %1").arg(d->label()); - QString ico = d->iconId(); - // use the icon only if there is no check - if(d->toolBar()) - { - id = p->insertItem(label); - p->setItemChecked(id,true); - } else { - if(!ico.isEmpty()) - { - QPixmap * pix = g_pIconManager->getImage(d->iconId()); - if(pix) - { - id = p->insertItem(*pix,label); - } else { - id = p->insertItem(label); - } - } else { - id = p->insertItem(label); - } - } - p->setItemParameter(id,d->internalId()); - ++it2; - cnt++; - } - } - - if(cnt > 0)p->insertSeparator(); - p->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_TOOLBAR)),__tr2qs("Customize..."),this,SLOT(customizeToolBars())); -} - -void KviFrame::customizeToolBars() -{ - KviKvsScript::run("toolbareditor.open",g_pActiveWindow); -} - -void KviFrame::toolbarsPopupSelected(int id) -{ - const QObject * o = sender(); - if(!o)return; - if(!o->inherits("KviTalPopupMenu"))return; - const KviTalPopupMenu * p = (const KviTalPopupMenu *)o; - int idext = p->itemParameter(id); - - KviCustomToolBarDescriptor * dd = KviCustomToolBarManager::instance()->findDescriptorByInternalId(idext); - if(dd) - { - if(dd->toolBar())delete dd->toolBar(); - else dd->createToolBar(); - } - - if(KviMexToolBar * t = moduleExtensionToolBar(idext)) - { - t->die(); - } else { - g_pModuleExtensionManager->allocateExtension("toolbar",idext,firstConsole()); - } -} - - - -bool KviFrame::focusNextPrevChild(bool next) -{ - //debug("FOCUS NEXT PREV CHILD"); - QWidget * w = focusWidget(); - if(w) - { - if(w->focusPolicy() == Qt::StrongFocus)return false; - - //QVariant v = w->property("KviProperty_FocusOwner"); - //if(v.isValid())return false; // Do NOT change the focus widget! - - if(w->parent()) - { - QVariant v = w->parent()->property("KviProperty_ChildFocusOwner"); - if(v.isValid())return false; // Do NOT change the focus widget! - } - } - // try to focus the widget on top of the Mdi - if(m_pMdi->topChild()) - { - m_pMdi->focusTopChild(); - return false; - } - return KviTalMainWindow::focusNextPrevChild(next); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// Toolbar positioning stuff -//////////////////////////////////////////////////////////////////////////////////////////////////// - - -void KviFrame::saveToolBarPositions() -{ - QString szTemp; - g_pApp->getLocalKvircDirectory(szTemp,KviApp::Config,KVI_CONFIGFILE_TOOLBARS); - - QFile f(szTemp); - if(f.open(IO_WriteOnly | IO_Truncate)) - { - f.write(saveState(1)); - } -} - -void KviFrame::restoreToolBarPositions() -{ - QString szTemp; - g_pApp->getLocalKvircDirectory(szTemp,KviApp::Config,KVI_CONFIGFILE_TOOLBARS); - - QFile f(szTemp); - - bool bNeedDefaults = false; - - if(f.open(IO_ReadOnly)) - { - if(!restoreState(f.readAll(),1)) - debug("Error while restoring toolbars position"); - } else { - bNeedDefaults = true; - } - - if(m_pTaskBar->inherits("KviTreeTaskBar")) - { - // ensure that it is not too wide - m_pTaskBar->setMaximumWidth(600); - if(m_pTaskBar->width() > 600) - m_pTaskBar->setFixedWidth(250); - } -} - - -void KviFrame::createTaskBar() -{ - if(KVI_OPTION_BOOL(KviOption_boolUseTreeWindowListTaskBar)) - { - m_pTaskBar = new KviTreeTaskBar(); - m_pTaskBar->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - addDockWidget(Qt::LeftDockWidgetArea,m_pTaskBar); - } else { - m_pTaskBar = new KviClassicTaskBar(); - m_pTaskBar->setAllowedAreas(Qt::AllDockWidgetAreas); - addDockWidget(Qt::BottomDockWidgetArea,m_pTaskBar); - } -} - -void KviFrame::recreateTaskBar() -{ - QString szOldClass = m_pTaskBar->className(); - - saveToolBarPositions(); - KviWindow * w; - for(w = m_pWinList->first();w;w = m_pWinList->next()) - { - w->destroyTaskBarItem(); - } - delete m_pTaskBar; - createTaskBar(); - for(w = m_pWinList->first();w;w = m_pWinList->next()) - { - w->createTaskBarItem(); - } - restoreToolBarPositions(); - - - /* - QString szNewClass = m_pTaskBar->className(); - if(szOldClass != szNewClass) - { - // the class changed... - // make sure that the tree task bar is in the left or right dock - // and the classic one is in the top or bottom on - - Qt::Dock dock; - int index; - bool nl; - int eo; - getLocation(m_pTaskBar,dock,index,nl,eo); - - if(KVI_OPTION_BOOL(KviOption_boolUseTreeWindowListTaskBar)) - { - if((dock == Qt::Bottom) || (dock == Qt::Top)) - moveDockWindow(m_pTaskBar,Qt::Left); - } else { - if((dock == Qt::Left) || (dock == Qt::Right)) - moveDockWindow(m_pTaskBar,Qt::Bottom); - } - } - */ - - if(g_pActiveWindow)m_pTaskBar->setActiveItem(g_pActiveWindow->taskBarItem()); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// Some accelerators -//////////////////////////////////////////////////////////////////////////////////////////////////// - -void KviFrame::maximizeWindow(void) -{ - if(!g_pActiveWindow)return; - if(g_pActiveWindow->isMaximized())g_pActiveWindow->restore(); - else g_pActiveWindow->maximize(); -} - -void KviFrame::minimizeWindow(void) -{ - if(g_pActiveWindow)g_pActiveWindow->minimize(); -} - -void KviFrame::switchToPrevWindow(void) -{ - m_pTaskBar->switchWindow(false,false); -} - -void KviFrame::switchToNextWindow(void) -{ - m_pTaskBar->switchWindow(true,false); -} - -void KviFrame::switchToPrevWindowInContext(void) -{ - m_pTaskBar->switchWindow(false,true); -} - -void KviFrame::switchToNextWindowInContext(void) -{ - m_pTaskBar->switchWindow(true,true); -} - -void KviFrame::hideEvent ( QHideEvent * e) -{ - if(KVI_OPTION_BOOL(KviOption_boolMinimizeInTray)) - { - if(e->spontaneous()) - { - - if(!dockExtension()) - { - executeInternalCommand(KVI_INTERNALCOMMAND_DOCKWIDGET_SHOW); - } - QTimer::singleShot( 0, this, SLOT(hide()) ); - } - - } -} -#ifndef COMPILE_USE_STANDALONE_MOC_SOURCES -#include "kvi_frame.moc" -#endif //!COMPILE_USE_STANDALONE_MOC_SOURCES +//=============================================================================
+//
+// File : kvi_frame.cpp
+// Creation date : Sun Jun 18 2000 17:59:02 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. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+//=============================================================================
+
+#define __KVIRC__
+#define _KVI_FRAME_CPP_
+
+#include "kvi_debug.h"
+#include "kvi_app.h"
+#include "kvi_settings.h"
+#include "kvi_frame.h"
+#include "kvi_options.h"
+#include "kvi_menubar.h"
+#include "kvi_mdimanager.h"
+#include "kvi_mdichild.h"
+#include "kvi_iconmanager.h"
+#include "kvi_window.h"
+#include "kvi_taskbar.h"
+#include "kvi_console.h"
+#include "kvi_config.h"
+#include "kvi_internalcmd.h"
+#include "kvi_console.h"
+#include "kvi_debug.h"
+#include "kvi_irctoolbar.h"
+#include "kvi_confignames.h"
+#include "kvi_parameterlist.h"
+#include "kvi_module.h"
+#include "kvi_mextoolbar.h"
+#include "kvi_locale.h"
+#include "kvi_irccontext.h"
+#include "kvi_statusbar.h"
+#include "kvi_customtoolbar.h"
+#include "kvi_customtoolbarmanager.h"
+#include "kvi_customtoolbardescriptor.h"
+#include "kvi_actionmanager.h"
+#include "kvi_defaults.h"
+#include "kvi_ircview.h"
+#include "kvi_kvs_script.h"
+#include "kvi_kvs_eventtriggers.h"
+#include "kvi_tal_popupmenu.h"
+
+#include <QSplitter>
+#include <QVariant>
+#include <QLineEdit>
+#include <QMessageBox>
+#include <QCheckBox>
+#include <QTimer>
+#include <QLayout>
+#include <QDesktopWidget>
+#include <QEvent>
+#include <QCloseEvent>
+#include <QShortcut>
+#include <QFile>
+
+#include <time.h>
+
+#ifdef COMPILE_PSEUDO_TRANSPARENCY
+ #include <QPixmap>
+ // kvi_app.h
+ extern QPixmap * g_pShadedParentGlobalDesktopBackground;
+ extern QPixmap * g_pShadedChildGlobalDesktopBackground;
+// FIXME: #warning "When a toolbar is moved , MdiManager is resized but does not update the MdiChild backgrounds"
+#endif
+
+// Declared and managed by KviApp (kvi_app.cpp)
+extern KviConfig * g_pWinPropertiesConfig;
+KVIRC_API KviFrame * g_pFrame = 0; // the one and only frame object
+
+KviFrame::KviFrame()
+: KviTalMainWindow(0,"kvirc_frame")
+{
+ g_pFrame = this;
+
+ setIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_KVIRC)));
+
+ m_pWinList = new KviPointerList<KviWindow>;
+ m_pWinList->setAutoDelete(false);
+
+ m_pModuleExtensionToolBarList = new KviPointerList<KviMexToolBar>;
+ m_pModuleExtensionToolBarList->setAutoDelete(false);
+
+ m_pActiveContext = 0;
+
+ m_pDockExtension = 0;
+
+ m_pSplitter = new QSplitter(Qt::Horizontal,this,"main_splitter");
+// m_pSplitter->setFrameShape(QFrame::NoFrame);
+
+ setCentralWidget(m_pSplitter);
+
+ setUsesBigPixmaps(KVI_OPTION_BOOL(KviOption_boolUseBigIcons));
+
+ m_pMdi = new KviMdiManager(m_pSplitter,this,"mdi_manager");
+ connect(m_pMdi,SIGNAL(enteredSdiMode()),this,SLOT(enteredSdiMode()));
+ connect(m_pMdi,SIGNAL(leftSdiMode()),this,SLOT(leftSdiMode()));
+
+ // This theoretically had to exists before KviMdiManager (that uses enterSdiMode)
+ m_pMenuBar = new KviMenuBar(this,"main_menu_bar");
+ setMenuWidget(m_pMenuBar);
+
+ if(KVI_OPTION_BOOL(KviOption_boolStatusBarVisible))
+ {
+ m_pStatusBar = new KviStatusBar(this);
+ setStatusBar(m_pStatusBar);
+ // torque: moved out of status bar constructor
+ // because module init functions exectued in load()
+ // couldn't access the status bar via g_pFrame->mainStatusBar()
+ // (assignment of m_pStatusBar happened after load() and
+ // the init function)
+ m_pStatusBar->load();
+
+ } else
+ m_pStatusBar = 0;
+
+ m_pTaskBar = 0;
+
+ createTaskBar();
+
+ if((KVI_OPTION_RECT(KviOption_rectFrameGeometry).width() < 100) || (KVI_OPTION_RECT(KviOption_rectFrameGeometry).height() < 100))
+ {
+ // Try to find some reasonable defaults
+ KVI_OPTION_RECT(KviOption_rectFrameGeometry) = QRect(10,10,g_pApp->desktop()->width() - 200,g_pApp->desktop()->height() - 150);
+ }
+
+ resize(KVI_OPTION_RECT(KviOption_rectFrameGeometry).width(),
+ KVI_OPTION_RECT(KviOption_rectFrameGeometry).height());
+ move(KVI_OPTION_RECT(KviOption_rectFrameGeometry).x(),
+ KVI_OPTION_RECT(KviOption_rectFrameGeometry).y());
+
+ applyOptions();
+
+
+ //m_pAccel = new KviAccel(this);
+
+ installAccelerators(this);
+
+ layout()->setResizeMode(QLayout::FreeResize);
+}
+
+KviFrame::~KviFrame()
+{
+ KVI_OPTION_RECT(KviOption_rectFrameGeometry) = QRect(pos().x(),pos().y(),
+ size().width(),size().height());
+
+ KVI_OPTION_BOOL(KviOption_boolUseBigIcons) = usesBigPixmaps();
+ KVI_OPTION_BOOL(KviOption_boolMdiManagerInSdiMode) = m_pMdi->isInSDIMode();
+ KVI_OPTION_BOOL(KviOption_boolStatusBarVisible) = m_pStatusBar ? true : false;
+
+ KviCustomToolBarManager::instance()->storeVisibilityState();
+
+ saveToolBarPositions();
+ saveModuleExtensionToolBars();
+
+ // Call the frame destructor callback AFTER saving the toolbar positions
+ // This is because the destructor callback kills alls the KVS objects
+ // and thus the eventual user toolbar objects too and their position
+ // wouldn't be saved if they are shown at startup.
+
+ g_pApp->frameDestructorCallback();
+
+ // Now start killing stuff
+
+ // Explicitly kill all the module extension toolbars: qt has NOT to delete them: we must call their "die" method
+ while(KviMexToolBar * t = m_pModuleExtensionToolBarList->first())t->die();
+ delete m_pModuleExtensionToolBarList;
+
+ KVI_OPTION_BOOL(KviOption_boolShowDockExtension) = m_pDockExtension;
+
+ if(m_pDockExtension)
+ {
+ m_pDockExtension->die();
+ m_pDockExtension = 0;
+ }
+
+ // the really last thing to do : close all the windows
+ while(m_pWinList->first())
+ closeWindow(m_pWinList->first());
+ delete m_pWinList;
+
+// delete m_pAccel;
+ g_pFrame = 0;
+}
+
+int KviFrame::registerAccelerator(const QString &szKeySequence,QObject * recv,const char * slot)
+{
+ QShortcut *sc=new QShortcut(QKeySequence(szKeySequence),this);
+ debug ("Registing accel %s",szKeySequence.utf8().data());
+ connect(sc,SIGNAL(activated()),this,SLOT(accelActivated()));
+ return sc->id();
+ //int id = m_pAccel->insertItem(szKeySequence);
+ //m_pAccel->connectItem(id,recv,slot);
+ //return id;
+}
+
+void KviFrame::unregisterAccelerator(int id)
+{
+ //m_pAccel->removeItem(id);
+ releaseShortcut(id);
+}
+
+void KviFrame::registerModuleExtensionToolBar(KviMexToolBar * t)
+{
+ m_pModuleExtensionToolBarList->append(t);
+}
+
+void KviFrame::unregisterModuleExtensionToolBar(KviMexToolBar * t)
+{
+ m_pModuleExtensionToolBarList->removeRef(t);
+}
+
+void KviFrame::restoreModuleExtensionToolBars()
+{
+ for(QStringList::Iterator it = KVI_OPTION_STRINGLIST(KviOption_stringlistModuleExtensionToolbars).begin();it != KVI_OPTION_STRINGLIST(KviOption_stringlistModuleExtensionToolbars).end();++it)
+ {
+ QString szEntry = *it;
+ int idx = szEntry.find(':');
+ if(idx != -1)
+ {
+ QString szMod = szEntry.left(idx);
+ szEntry.remove(0,idx + 1);
+ g_pModuleExtensionManager->allocateExtension("toolbar",KviStr(szEntry),firstConsole(),0,0,szMod);
+ }
+ }
+}
+
+void KviFrame::saveModuleExtensionToolBars()
+{
+ KVI_OPTION_STRINGLIST(KviOption_stringlistModuleExtensionToolbars).clear();
+
+ for(KviMexToolBar * t = m_pModuleExtensionToolBarList->first();t;t = m_pModuleExtensionToolBarList->next())
+ {
+ QString s = t->descriptor()->module()->name();
+ s += ":";
+ s += t->descriptor()->name().ptr();
+
+ //debug("FOUND TOOLBAR %s",t->descriptor()->name().ptr());
+
+ KVI_OPTION_STRINGLIST(KviOption_stringlistModuleExtensionToolbars).append(s);
+ }
+}
+
+KviMexToolBar * KviFrame::moduleExtensionToolBar(int extensionId)
+{
+ for(KviMexToolBar * t = m_pModuleExtensionToolBarList->first();t;t = m_pModuleExtensionToolBarList->next())
+ {
+ if(extensionId == t->descriptor()->id())return t;
+ }
+ return 0;
+}
+
+/*
+ @doc: keyboard
+ @type:
+ generic
+ @title:
+ Keyboard shortcuts
+ @keyterms:
+ Keyboard shortcuts
+ @short:
+ The list of the common keyboard shortcuts
+ @body:
+ [b]Ctrl+LeftArrow[/b]: Selection left to the previous word[br]
+ [b]Ctrl+RightArrow[/b]: Selection right to the next word[br]
+ [b]Ctrl+Shift+LeftArrow[/b]: Previous word[br]
+ [b]Ctrl+Shift+RightArrow[/b]: Next word[br]
+ [b]Alt+LeftArrow[/b]: Previous window[br]
+ [b]Alt+RightArrow[/b]: Next window[br]
+ [b]Alt+Shift+LeftArrow[/b]: Previous window in the same IRC context[/b]
+ [b]Alt+Shift+RightArrow[/b]: Next window in the same IRC context[/b]
+ [b]Ctrl+UpArrow[/b]: Maximize current window[br]
+ [b]Ctrl+DownArrow[/b] or [b]ESC[/b]: Minimize current window[br]
+ [b]Ctrl+<digit>[/b], [b]F1-F12[/b], [b]Shift+(F1-F12)[/b]: Script accelerators (see [event:onaccelkeypressed]OnAccelKeyPressed[/event])[br]
+ [b]Shift+<F1-F12>[/b] window switch[br]
+ [b]Tab in the first word of input[/b]: Completes nicknames in the current channel or query[br]
+ [b]Tab after a leading /[/b]: Completes commands[br]
+ [b]Tab after a / in the middle of input[/b]: Completes directories[br]
+ [b]Tab after a $[/b]: Completes function names[br]
+ [b]Shift+Tab after the first word of input[/b]: completes masks in the current channel or query[br]
+ [b]Ctrl+B[/b]: Inserts the 'bold' mIRC text control character[br]
+ [b]Ctrl+K[/b]: Inserts the 'color' mIRC text control character[br]
+ [b]Ctrl+R[/b]: Inserts the 'reverse' mIRC text control character[br]
+ [b]Ctrl+U[/b]: Inserts the 'underline' mIRC text control character[br]
+ [b]Ctrl+O[/b]: Inserts the 'reset' mIRC text control character[br]
+ [b]Ctrl+P[/b]: Inserts the 'non-crypt' (plain text) KVIrc control character used to disable encryption of the current text line[br]
+ [b]Ctrl+C[/b]: Copies the selected text to clipboard[br]
+ [b]Ctrl+X[/b]: Cuts the selected text[br]
+ [b]Ctrl+V[/b]: Pastes the clipboard contents (same as middle mouse click)[br]
+ [b]Ctrl+I[/b]: Inserts the 'icon' control code and pops up the icon list box
+ [b]CursorUp[/b]: Moves backward in the command history[br]
+ [b]CursorDown[/b]: Moves forward in the command history[br]
+ [b]Ctrl+PageUp[/b]: Opens the history popup[br]
+ [b]CursorRight[/b]: Moves the cursor to the right[br]
+ [b]CursorLeft[/b]: Moves the cursor to the left :)[br]
+ [b]Shift+CursorLeft[/b]: Moves the selection to the left[br]
+ [b]Shift+RightCursor[/b]: Moves the selection to the right[br]
+ [b]PageUp[/b]: Scrolls the output window up one page[br]
+ [b]PageDown[/b]: Scrolls the output window down one page[b]
+ [b]Shift+PageUp[/b]: Scrolls the output window up one line[br]
+ [b]Shift+PageDown[/b]: Scrolls the output window down one line[b]
+ [b]Alt+lt;numeric_sequence>[/b]: Inserts the character by ASCII/Unicode code[br]
+ [b]Ctrl+Backspace[/b]: Shows or hides the multiline editor[br]
+ [b]Ctrl+F4[/b]: Closes the current window[br]
+ <example>
+ Alt+32: Inserts ASCII/Unicode character 32: ' ' (a space)
+ Alt+00032: Same as above :)
+ Alt+13: Inserts the Carriage Return (CR) control character
+ Alt+77: Inserts ASCII/Unicode character 77: 'M'
+ Alt+23566: Inserts Unicode character 23566 (an ideogram)
+ </example>
+*/
+
+KviAccel * KviFrame::installAccelerators(QWidget * wnd)
+{
+
+
+ QWidget * pParent = wnd ? (QWidget *)wnd : (QWidget *)this;
+ new QShortcut(QKeySequence(Qt::Key_Left + Qt::ALT),pParent,SLOT(switchToPrevWindow()));
+ new QShortcut(QKeySequence(Qt::Key_Right + Qt::ALT),pParent,SLOT(switchToNextWindow()));
+ new QShortcut(QKeySequence(Qt::Key_Up + Qt::CTRL),pParent,SLOT(maximizeWindow()));
+ new QShortcut(QKeySequence(Qt::Key_Down + Qt::CTRL),pParent,SLOT(minimizeWindow()));
+ new QShortcut(QKeySequence(Qt::Key_Escape +Qt::CTRL),pParent,SLOT(minimizeWindow()));
+ new QShortcut(QKeySequence(Qt::Key_Left + Qt::ALT + Qt::SHIFT),pParent,SLOT(switchToPrevWindowInContext()));
+ new QShortcut(QKeySequence(Qt::Key_Right + Qt::ALT + Qt::SHIFT),pParent,SLOT(switchToNextWindowInContext()));
+
+ KviAccel *ac = new KviAccel(pParent);
+ static int accel_table[] = {
+ /* Qt::Key_Left + Qt::ALT , // prev window
+ Qt::Key_Right + Qt::ALT , // next window
+ Qt::Key_Up + Qt::CTRL , // maximize window
+ Qt::Key_Down + Qt::CTRL , // minimize window
+ Qt::Key_Escape +Qt::CTRL, // minimize window
+ Qt::Key_Left + Qt::ALT + Qt::SHIFT , // prev window in context
+ Qt::Key_Right + Qt::ALT + Qt::SHIFT, // next window in context
+*/
+ Qt::Key_F4 + Qt::CTRL , // close current window
+ Qt::Key_1 + Qt::CTRL , // script accels...
+ Qt::Key_2 + Qt::CTRL ,
+ Qt::Key_3 + Qt::CTRL ,
+ Qt::Key_4 + Qt::CTRL ,
+ Qt::Key_5 + Qt::CTRL ,
+ Qt::Key_6 + Qt::CTRL ,
+ Qt::Key_7 + Qt::CTRL ,
+ Qt::Key_8 + Qt::CTRL ,
+ Qt::Key_9 + Qt::CTRL ,
+ Qt::Key_0 + Qt::CTRL ,
+ Qt::Key_F1 , // reserved for context sensitive help
+ Qt::Key_F2 ,
+ Qt::Key_F3 ,
+ Qt::Key_F4 ,
+ Qt::Key_F5 ,
+ Qt::Key_F6 ,
+ Qt::Key_F7 ,
+ Qt::Key_F8 ,
+ Qt::Key_F9 ,
+ Qt::Key_F10 ,
+ Qt::Key_F11 ,
+ Qt::Key_F12 ,
+/* Qt::Key_F1 + Qt::SHIFT , // window select...
+ Qt::Key_F2 + Qt::SHIFT ,
+ Qt::Key_F3 + Qt::SHIFT ,
+ Qt::Key_F4 + Qt::SHIFT ,
+ Qt::Key_F5 + Qt::SHIFT ,
+ Qt::Key_F6 + Qt::SHIFT ,
+ Qt::Key_F7 + Qt::SHIFT ,
+ Qt::Key_F8 + Qt::SHIFT ,
+ Qt::Key_F9 + Qt::SHIFT ,
+ Qt::Key_F10 + Qt::SHIFT ,
+ Qt::Key_F11 + Qt::SHIFT ,
+ Qt::Key_F12 + Qt::SHIFT ,*/
+ 0
+ };
+
+ int i=0;
+ int keys;
+ while((keys = accel_table[i]))
+ {
+ new QShortcut(keys,pParent,SLOT(accelActivated()));
+ // ac->insertItem(keys);
+ i++;
+ }
+
+// connect(ac,SIGNAL(activated(int)),this,SLOT(accelActivated(int)));
+ return ac;
+}
+
+void KviFrame::accelActivated()
+{
+ //KviAccel * acc = (KviAccel *)sender();
+
+ int keys = (int)(((QShortcut *)sender())->key());
+ KviTaskBarItem *item = 0;
+ debug("accel");
+ switch(keys)
+ {
+ //case (Qt::Key_Left+Qt::ALT): switchToPrevWindow(); break;
+ //case (Qt::Key_Right+Qt::ALT): switchToNextWindow(); break;
+ //case (Qt::Key_Up+Qt::CTRL): maximizeWindow(); break;
+ //case (Qt::Key_Escape+Qt::CTRL):
+ //case (Qt::Key_Down+Qt::CTRL): minimizeWindow(); break;
+ //case (Qt::Key_Left+Qt::ALT+Qt::SHIFT): switchToPrevWindowInContext(); break;
+ //case (Qt::Key_Right+Qt::ALT+Qt::SHIFT): switchToNextWindowInContext(); break;
+ case (Qt::Key_F4+Qt::CTRL): if(g_pActiveWindow)g_pActiveWindow->close(); break;
+ case (Qt::Key_F1): g_pApp->contextSensitiveHelp(); break;
+/* case(Qt::Key_F1 + SHIFT):
+ item = m_pTaskBar->item(0);
+ if(item) setActiveWindow(item->window());
+ break;
+ case(Qt::Key_F2 + SHIFT):
+ item = m_pTaskBar->item(1);
+ if(item) setActiveWindow(item->window());
+ break;
+ case(Qt::Key_F3 + SHIFT):
+ item = m_pTaskBar->item(2);
+ if(item) setActiveWindow(item->window());
+ break;
+ case(Qt::Key_F4 + SHIFT):
+ item = m_pTaskBar->item(3);
+ if(item) setActiveWindow(item->window());
+ break;
+ case(Qt::Key_F5 + SHIFT):
+ item = m_pTaskBar->item(4);
+ if(item) setActiveWindow(item->window());
+ break;
+ case(Qt::Key_F6 + SHIFT):
+ item = m_pTaskBar->item(5);
+ if(item) setActiveWindow(item->window());
+ break;
+ case(Qt::Key_F7 + SHIFT):
+ item = m_pTaskBar->item(6);
+ if(item) setActiveWindow(item->window());
+ break;
+ case(Qt::Key_F8 + SHIFT):
+ item = m_pTaskBar->item(7);
+ if(item) setActiveWindow(item->window());
+ break;
+ case(Qt::Key_F9 + SHIFT):
+ item = m_pTaskBar->item(8);
+ if(item) setActiveWindow(item->window());
+ break;
+ case(Qt::Key_F10 + SHIFT):
+ item = m_pTaskBar->item(9);
+ if(item) setActiveWindow(item->window());
+ break;
+ case(Qt::Key_F11 + SHIFT):
+ item = m_pTaskBar->item(10);
+ if(item) setActiveWindow(item->window());
+ break;
+ case(Qt::Key_F12 + SHIFT):
+ item = m_pTaskBar->item(11);
+ if(item) setActiveWindow(item->window());
+ break;*/
+ default:
+ {
+ KVS_TRIGGER_EVENT_1(KviEvent_OnAccelKeyPressed,g_pActiveWindow,(QString)(((QShortcut *)sender())->key()));
+ }
+ break;
+ };
+}
+
+void KviFrame::executeInternalCommand(int index)
+{
+ KviKvsScript::run(kvi_getInternalCommandBuffer(index),firstConsole());
+}
+
+
+void KviFrame::saveWindowProperties(KviWindow * wnd,const char * szSection)
+{
+ g_pWinPropertiesConfig->setGroup(szSection);
+ g_pWinPropertiesConfig->writeEntry("EntryTimestamp",(unsigned int)time(0));
+
+ // Allow max 80 window properties to be floating around
+ while(g_pWinPropertiesConfig->groupsCount() > 80)
+ {
+ // Kill the oldest group
+ KviConfigIterator it(*(g_pWinPropertiesConfig->dict()));
+ KviStr minKey;
+ unsigned int minVal = time(0);
+ while(it.current() && minVal)
+ {
+ QString * pVal = it.current()->find("EntryTimestamp");
+ if(pVal)
+ {
+ bool bOk;
+ unsigned int uVal = pVal->toUInt(&bOk);
+ if(bOk)
+ {
+ if(uVal < minVal)
+ {
+ minVal = uVal;
+ minKey = it.currentKey();
+ }
+ } else {
+ minVal = 0;
+ minKey = it.currentKey();
+ }
+ } else {
+ minVal = 0;
+ minKey = it.currentKey();
+ }
+ ++it;
+ }
+
+ if(minKey.hasData())g_pWinPropertiesConfig->clearGroup(minKey.ptr());
+ else debug("Oops...no minimum key found!");
+ }
+
+ // The following line should NOT be needed...but just to be sure...
+ g_pWinPropertiesConfig->setGroup(szSection);
+
+ g_pWinPropertiesConfig->writeEntry("IsDocked",wnd->mdiParent());
+
+// KviWindow * top = g_pActiveWindow;
+// if(!top)top = wnd;
+// g_pWinPropertiesConfig->writeEntry("IsMaximized",top->isMaximized());
+
+ g_pWinPropertiesConfig->writeEntry("WinRect",wnd->externalGeometry());
+
+ wnd->saveProperties(g_pWinPropertiesConfig);
+}
+
+void KviFrame::closeWindow(KviWindow *wnd)
+{
+ // notify the destruction
+ wnd->triggerDestructionEvents();
+
+ // save it's properties
+ if(KVI_OPTION_BOOL(KviOption_boolWindowsRememberProperties)) // && (wnd->type() == KVI_WINDOW_TYPE_CHANNEL))
+ {
+ QString group;
+ wnd->getConfigGroupName(group);
+ // not uses default settings : store it always
+ saveWindowProperties(wnd,group);
+ }
+
+ // forget it...
+ m_pWinList->removeRef(wnd);
+
+ // hide it
+ if(wnd->mdiParent())wnd->mdiParent()->hide();
+ else wnd->hide();
+
+ if(wnd == g_pActiveWindow)
+ {
+ // we need another active window before destroying it
+ KviMdiChild * pMdiChild = wnd->mdiParent();
+ if(pMdiChild)
+ {
+ pMdiChild = m_pMdi->highestChildExcluding(pMdiChild);
+ } else {
+ // the best candidate for the new active window
+ // is the top mdiManager's child
+ pMdiChild = m_pMdi->topChild();
+ }
+ KviWindow * pCandidate;
+ if(pMdiChild)
+ {
+ pCandidate = (KviWindow *)(pMdiChild->client());
+ } else {
+ pCandidate = m_pWinList->first();
+ if(pCandidate == wnd)pCandidate = 0;
+ }
+
+ if(pCandidate)
+ childWindowActivated(pCandidate);
+ // else { m_pActiveWindow = 0; m_pActiveContext = 0; };
+ }
+
+ if(wnd == g_pActiveWindow) // ops... :/ ... this happens only at shutdown
+ {
+ g_pActiveWindow = 0;
+ m_pActiveContext = 0;
+ }
+
+ // and shut it down...
+ // KviWindow will call childWindowDestroyed() here
+ if(wnd->mdiParent())m_pMdi->destroyChild(wnd->mdiParent(),true);
+ else delete wnd;
+}
+
+
+void KviFrame::addWindow(KviWindow *wnd,bool bShow)
+{
+ m_pWinList->append(wnd);
+ wnd->createTaskBarItem(); // create the window taskbar item AFTER it has been constructed
+
+ QString group;
+ wnd->getConfigGroupName(group);
+
+ bool bGroupSettings = false;
+
+ if(g_pWinPropertiesConfig->hasGroup(group))
+ {
+ g_pWinPropertiesConfig->setGroup(group);
+ } else {
+ bGroupSettings = true;
+ if(g_pWinPropertiesConfig->hasGroup(wnd->typeString()))
+ {
+ g_pWinPropertiesConfig->setGroup(wnd->typeString());
+ } else {
+ g_pWinPropertiesConfig->setGroup("no_settings_group");
+ wnd->loadProperties(g_pWinPropertiesConfig); // load it anyway (will set defaults if windows don't remember properties)
+ goto default_docking; // no settings stored
+ }
+ }
+
+ {
+ wnd->loadProperties(g_pWinPropertiesConfig); // load it anyway (will set defaults if windows don't remember properties)
+
+ if(KVI_OPTION_BOOL(KviOption_boolWindowsRememberProperties))
+ {
+ bool bDocked = g_pWinPropertiesConfig->readBoolEntry("IsDocked",true);
+ //bool bMaximized = g_pWinPropertiesConfig->readBoolEntry("IsMaximized",false);
+ bool bMaximized;
+
+ if(KVI_OPTION_BOOL(KviOption_boolMdiManagerInSdiMode))
+ {
+ bMaximized = true;
+ //KVI_OPTION_BOOL(KviOption_boolMdiManagerInSdiMode) = false;
+ } else bMaximized = false;
+
+ QRect rect = g_pWinPropertiesConfig->readRectEntry("WinRect",QRect(10,10,500,380));
+
+ if(bDocked)
+ {
+ // when group settings are used , we always cascade the windows
+ // this means that windows that have no specialized config group name
+ // are always cascaded : this is true for consoles , queries (and other windows) but not channels (and some other windows)
+ KviMdiChild * lpC = dockWindow(wnd,false,bGroupSettings,&rect);
+ lpC->setRestoredGeometry(rect);
+ wnd->triggerCreationEvents();
+ if(bShow)
+ {
+ m_pMdi->showAndActivate(lpC);
+ if(bMaximized)wnd->maximize();
+ // Handle the special case of this top level widget not being the active one.
+ // In this situation the child will not get the focusInEvent
+ // and thus will not call out childWindowActivated() method
+ if(!isActiveWindow())childWindowActivated(wnd);
+ }
+ } else {
+ wnd->setGeometry(rect);
+ wnd->triggerCreationEvents();
+ if(bShow)
+ {
+ wnd->show();
+ if(bMaximized)wnd->maximize();
+ }
+ wnd->youAreUndocked();
+ if(bShow)
+ {
+ wnd->raise();
+ wnd->setFocus();
+ }
+ }
+ goto docking_done;
+ }
+ }
+
+default_docking:
+ {
+ KviMdiChild * lpC = dockWindow(wnd,false); //cascade it
+ wnd->triggerCreationEvents();
+ if(bShow)
+ {
+ m_pMdi->showAndActivate(lpC);
+ if(KVI_OPTION_BOOL(KviOption_boolMdiManagerInSdiMode)) wnd->maximize();
+ // Handle the special case of this top level widget not being the active one.
+ // In this situation the child will not get the focusInEvent
+ // and thus will not call out childWindowActivated() method
+ if(!isActiveWindow())childWindowActivated(wnd);
+ }
+ }
+docking_done:
+ // we like to have an active window.. but don't trigger the events until it is really shown
+ if(!g_pActiveWindow)
+ {
+ g_pActiveWindow = wnd;
+ m_pActiveContext = wnd->context();
+ }
+}
+
+KviMdiChild * KviFrame::dockWindow(KviWindow *wnd,bool bShow,bool bCascade,QRect *setGeom)
+{
+ if(wnd->mdiParent())return wnd->mdiParent();
+ KviMdiChild * lpC = new KviMdiChild(m_pMdi,"");
+ lpC->setClient(wnd);
+ wnd->youAreDocked();
+ m_pMdi->manageChild(lpC,bCascade,setGeom);
+ if(bShow)m_pMdi->showAndActivate(lpC);
+ return lpC;
+}
+
+void KviFrame::undockWindow(KviWindow *wnd)
+{
+ if(!(wnd->mdiParent()))return;
+ KviMdiChild * lpC = wnd->mdiParent();
+ lpC->unsetClient();
+ m_pMdi->destroyChild(lpC,false);
+ wnd->youAreUndocked();
+ wnd->raise();
+ wnd->setFocus();
+}
+
+bool KviFrame::event(QEvent *e)
+{
+
+ switch(e->type())
+ {
+
+ case QEvent::Shortcut:
+ {
+ debug ("Shortcut");
+ return true;
+ }
+ }
+ return false;
+
+}
+
+void KviFrame::newConsole()
+{
+ createNewConsole();
+}
+
+KviConsole * KviFrame::createNewConsole(bool bFirstInFrame)
+{
+ // the first console must be created BEFORE the toolbars visible
+ // at startup otherwise we cannot execute script code
+ // which is necessary for the actions that are going to be added
+ // to the toolbars
+ KviConsole * c = new KviConsole(this,bFirstInFrame ? KVI_CONSOLE_FLAG_FIRSTINFRAME : 0);
+ addWindow(c);
+
+ if(bFirstInFrame)
+ {
+ restoreModuleExtensionToolBars();
+ KviCustomToolBarManager::instance()->createToolBarsVisibleAtStartup();
+ KviActionManager::instance()->delayedRegisterAccelerators();
+ restoreToolBarPositions();
+ }
+
+ return c;
+}
+
+unsigned int KviFrame::consoleCount()
+{
+ unsigned int count = 0;
+ for(KviWindow * wnd = m_pWinList->first();wnd;wnd = m_pWinList->next())
+ {
+ if(wnd->type() == KVI_WINDOW_TYPE_CONSOLE)count++;
+ }
+ return count;
+}
+
+KviConsole * KviFrame::firstConsole()
+{
+ for(KviWindow * wnd = m_pWinList->first();wnd;wnd = m_pWinList->next())
+ {
+ if(wnd->type() == KVI_WINDOW_TYPE_CONSOLE)return (KviConsole *)wnd;
+ }
+ __range_valid(false);
+ return 0; //should newer be here!.. but sometimes we are ?
+}
+
+KviConsole * KviFrame::firstNotConnectedConsole()
+{
+ for(KviWindow * wnd = m_pWinList->first();wnd;wnd = m_pWinList->next())
+ {
+ if(wnd->type() == KVI_WINDOW_TYPE_CONSOLE)
+ {
+ if(!((KviConsole *)wnd)->connectionInProgress())
+ return (KviConsole *)wnd;
+ }
+ }
+ return 0;
+}
+
+void KviFrame::childWindowCloseRequest(KviWindow *wnd)
+{
+ closeWindow(wnd);
+}
+
+void KviFrame::unhighlightWindowsOfContext(KviIrcContext * c)
+{
+ for(KviWindow *w = m_pWinList->first();w;w = m_pWinList->next())
+ if(w->context() == c)w->unhighlight();
+}
+
+void KviFrame::setActiveWindow(KviWindow *wnd)
+{
+ // ASSERT(m_pWinList->findRef(wnd))
+ if(wnd->isMinimized())wnd->restore();
+ if(wnd->mdiParent())wnd->setFocus();
+ else wnd->delayedAutoRaise();
+}
+
+KviIrcConnection * KviFrame::activeConnection()
+{
+ return m_pActiveContext ? m_pActiveContext->connection() : 0;
+}
+
+void KviFrame::childWindowSelectionStateChange(KviWindow * pWnd,bool bGotSelectionNow)
+{
+ if(pWnd != g_pActiveWindow)return;
+ emit activeWindowSelectionStateChanged(bGotSelectionNow);
+
+}
+
+void KviFrame::childContextStateChange(KviIrcContext * c)
+{
+ if(c != m_pActiveContext)return;
+ emit activeContextStateChanged();
+}
+
+void KviFrame::childConnectionLagChange(KviIrcConnection * c)
+{
+ KviIrcContext * ctx = c->context();
+ if(ctx != m_pActiveContext)return;
+ emit activeConnectionLagChanged();
+}
+
+void KviFrame::childConnectionServerInfoChange(KviIrcConnection * c)
+{
+ KviIrcContext * ctx = c->context();
+ if(ctx != m_pActiveContext)return;
+ emit activeConnectionServerInfoChanged();
+}
+
+void KviFrame::childConnectionNickNameChange(KviIrcConnection * c)
+{
+ KviIrcContext * ctx = c->context();
+ if(ctx != m_pActiveContext)return;
+ emit activeConnectionNickNameChanged();
+}
+
+void KviFrame::childConnectionAwayStateChange(KviIrcConnection * c)
+{
+ KviIrcContext * ctx = c->context();
+ if(ctx != m_pActiveContext)return;
+ emit activeConnectionAwayStateChanged();
+}
+
+void KviFrame::childConnectionUserModeChange(KviIrcConnection * c)
+{
+ KviIrcContext * ctx = c->context();
+ if(ctx != m_pActiveContext)return;
+ emit activeConnectionUserModeChanged();
+}
+
+
+void KviFrame::childWindowActivated(KviWindow *wnd)
+{
+ // ASSERT(m_pWinList->findRef(wnd))
+ if(g_pActiveWindow == wnd)return;
+ if(g_pActiveWindow)g_pActiveWindow->lostUserFocus();
+ // YES: it's HERE!
+ g_pActiveWindow = wnd;
+
+ bool bActiveContextChanged = (m_pActiveContext != wnd->context());
+ m_pActiveContext = wnd->context();
+
+ if(wnd->isMaximized() && wnd->mdiParent())updateCaption();
+ m_pTaskBar->setActiveItem(wnd->taskBarItem());
+
+ //wnd->gainedActiveWindowStatus(); // <-- atm unused
+
+ if(g_pActiveWindow->view())
+ g_pActiveWindow->view()->clearUnreaded();
+
+ emit activeWindowChanged();
+ if(bActiveContextChanged)emit activeContextChanged();
+
+ KVS_TRIGGER_EVENT_0(KviEvent_OnWindowActivated,wnd);
+}
+
+void KviFrame::windowActivationChange(bool bOldActive)
+{
+ // if we have just been activated by the WM
+ // then update the active window task bar item
+ // It will then reset its highlight state
+ // and hopefully make the dock widget work correctly
+ // in this case.
+ // This will also trigger the OnWindowActivated event :)
+ if(isActiveWindow())
+ {
+ if(!bOldActive)
+ {
+ if(g_pActiveWindow)
+ {
+ KviWindow * pTmp = g_pActiveWindow;
+ g_pActiveWindow = 0; // really ugly hack!
+ childWindowActivated(pTmp);
+ }
+ }
+ } else {
+ if(g_pActiveWindow)g_pActiveWindow->lostUserFocus();
+ }
+}
+
+void KviFrame::enteredSdiMode()
+{
+ updateCaption();
+}
+
+void KviFrame::leftSdiMode()
+{
+ updateCaption();
+}
+
+#define KVI_DEFAULT_FRAME_CAPTION "KVIrc " KVI_VERSION " " KVI_RELEASE_NAME
+
+void KviFrame::updateCaption()
+{
+ if(g_pActiveWindow)
+ {
+ if(g_pActiveWindow->isMaximized() && g_pActiveWindow->mdiParent())
+ {
+ QString tmp = g_pActiveWindow->plainTextCaption();
+ tmp += QChar(' ');
+ tmp += KVI_DEFAULT_FRAME_CAPTION;
+ setCaption(tmp);
+ return;
+ }
+ }
+ setCaption(KVI_DEFAULT_FRAME_CAPTION);
+}
+
+
+void KviFrame::closeEvent(QCloseEvent *e)
+{
+
+ if(KVI_OPTION_BOOL(KviOption_boolCloseInTray))
+ {
+ e->ignore();
+
+ if(!dockExtension())
+ {
+ executeInternalCommand(KVI_INTERNALCOMMAND_DOCKWIDGET_SHOW);
+ }
+ if(dockExtension())
+ {
+
+ dockExtension()->setPrevWindowState(windowState());
+ QTimer::singleShot( 0, this, SLOT(hide()) );
+ }
+ return;
+ }
+
+ if(KVI_OPTION_BOOL(KviOption_boolConfirmCloseWhenThereAreConnections))
+ {
+ // check for running connections
+
+ bool bGotRunningConnection = false;
+ for(KviWindow * w = m_pWinList->first();w;w = m_pWinList->next())
+ {
+ if(w->type() == KVI_WINDOW_TYPE_CONSOLE)
+ {
+ if(((KviConsole *)w)->connectionInProgress())
+ {
+ bGotRunningConnection = true;
+ break;
+ }
+ }
+ }
+
+ if(bGotRunningConnection)
+ {
+ QString txt = "<p>";
+ txt += __tr2qs("There are active connections, are you sure you wish to ");
+ txt += __tr2qs("quit KVIrc?");
+ txt += "</p>";
+
+ switch(QMessageBox::warning(this,__tr2qs("Confirmation - KVIrc"),txt,__tr2qs("&Yes"),__tr2qs("&Always"),__tr2qs("&No"),2,2))
+ {
+ case 0:
+ // ok to close
+ break;
+ case 1:
+ // ok to close but don't ask again
+ KVI_OPTION_BOOL(KviOption_boolConfirmCloseWhenThereAreConnections) = false;
+ break;
+ case 2:
+ e->ignore();
+ return;
+ break;
+ }
+ }
+ }
+
+ e->accept();
+
+ if(g_pApp)
+ g_pApp->destroyFrame();
+}
+
+void KviFrame::resizeEvent(QResizeEvent *e)
+{
+ KVI_OPTION_RECT(KviOption_rectFrameGeometry) = QRect(pos().x(),pos().y(),
+ size().width(),size().height());
+ KviTalMainWindow::resizeEvent(e);
+}
+
+void KviFrame::updatePseudoTransparency()
+{
+#ifdef COMPILE_PSEUDO_TRANSPARENCY
+ if(g_pShadedParentGlobalDesktopBackground)m_pMdi->viewport()->update();
+
+ if(g_pShadedChildGlobalDesktopBackground)
+ {
+ for(KviWindow * wnd = m_pWinList->first();wnd;wnd = m_pWinList->next())wnd->updateBackgrounds();
+ m_pTaskBar->updatePseudoTransparency();
+ }
+#endif
+}
+
+void KviFrame::moveEvent(QMoveEvent *e)
+{
+ KVI_OPTION_RECT(KviOption_rectFrameGeometry) = QRect(pos().x(),pos().y(),
+ size().width(),size().height());
+#ifdef COMPILE_PSEUDO_TRANSPARENCY
+ updatePseudoTransparency();
+#endif
+ KviTalMainWindow::moveEvent(e);
+}
+
+void KviFrame::applyOptions()
+{
+ m_pMdi->update();
+ for(KviWindow * wnd = m_pWinList->first();wnd;wnd = m_pWinList->next())wnd->applyOptions();
+ updateCaption();
+
+ m_pTaskBar->applyOptions();
+}
+
+void KviFrame::toggleStatusBar()
+{
+ if(m_pStatusBar)
+ {
+ delete m_pStatusBar;
+ m_pStatusBar = 0;
+ } else {
+ //if(statusBar())delete statusBar(); // kill any existing status bar (QT BUG)
+
+ m_pStatusBar = new KviStatusBar(this);
+ m_pStatusBar->load();
+ setStatusBar(m_pStatusBar);
+ m_pStatusBar->show();
+ }
+}
+
+void KviFrame::fillToolBarsPopup(KviTalPopupMenu * p)
+{
+ p->clear();
+
+ disconnect(p,SIGNAL(activated(int)),this,SLOT(toolbarsPopupSelected(int))); // just to be sure
+ connect(p,SIGNAL(activated(int)),this,SLOT(toolbarsPopupSelected(int)));
+
+ int id;
+ int cnt = 0;
+
+ KviModuleExtensionDescriptorList * l = g_pModuleExtensionManager->getExtensionList("toolbar");
+ if(l)
+ {
+ for(KviModuleExtensionDescriptor * d = l->first();d;d = l->next())
+ {
+ QString label = __tr2qs("Show %1").arg(d->visibleName());
+ if(d->icon())id = p->insertItem(*(d->icon()),label);
+ else id = p->insertItem(label);
+ p->setItemChecked(id,moduleExtensionToolBar(d->id()));
+ p->setItemParameter(id,d->id());
+ cnt++;
+ }
+ }
+
+ // FIXME: Should this display "Hide %1" when the toolbar is already visible ?
+ KviPointerHashTableIterator<QString,KviCustomToolBarDescriptor> it2(*(KviCustomToolBarManager::instance()->descriptors()));
+ if(it2.current())
+ {
+ if(cnt > 0)p->insertSeparator();
+ while(KviCustomToolBarDescriptor * d = it2.current())
+ {
+ QString label = __tr2qs("Show %1").arg(d->label());
+ QString ico = d->iconId();
+ // use the icon only if there is no check
+ if(d->toolBar())
+ {
+ id = p->insertItem(label);
+ p->setItemChecked(id,true);
+ } else {
+ if(!ico.isEmpty())
+ {
+ QPixmap * pix = g_pIconManager->getImage(d->iconId());
+ if(pix)
+ {
+ id = p->insertItem(*pix,label);
+ } else {
+ id = p->insertItem(label);
+ }
+ } else {
+ id = p->insertItem(label);
+ }
+ }
+ p->setItemParameter(id,d->internalId());
+ ++it2;
+ cnt++;
+ }
+ }
+
+ if(cnt > 0)p->insertSeparator();
+ p->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_TOOLBAR)),__tr2qs("Customize..."),this,SLOT(customizeToolBars()));
+}
+
+void KviFrame::customizeToolBars()
+{
+ KviKvsScript::run("toolbareditor.open",g_pActiveWindow);
+}
+
+void KviFrame::toolbarsPopupSelected(int id)
+{
+ const QObject * o = sender();
+ if(!o)return;
+ if(!o->inherits("KviTalPopupMenu"))return;
+ const KviTalPopupMenu * p = (const KviTalPopupMenu *)o;
+ int idext = p->itemParameter(id);
+
+ KviCustomToolBarDescriptor * dd = KviCustomToolBarManager::instance()->findDescriptorByInternalId(idext);
+ if(dd)
+ {
+ if(dd->toolBar())delete dd->toolBar();
+ else dd->createToolBar();
+ }
+
+ if(KviMexToolBar * t = moduleExtensionToolBar(idext))
+ {
+ t->die();
+ } else {
+ g_pModuleExtensionManager->allocateExtension("toolbar",idext,firstConsole());
+ }
+}
+
+
+
+bool KviFrame::focusNextPrevChild(bool next)
+{
+ //debug("FOCUS NEXT PREV CHILD");
+ QWidget * w = focusWidget();
+ if(w)
+ {
+ if(w->focusPolicy() == Qt::StrongFocus)return false;
+
+ //QVariant v = w->property("KviProperty_FocusOwner");
+ //if(v.isValid())return false; // Do NOT change the focus widget!
+
+ if(w->parent())
+ {
+ QVariant v = w->parent()->property("KviProperty_ChildFocusOwner");
+ if(v.isValid())return false; // Do NOT change the focus widget!
+ }
+ }
+ // try to focus the widget on top of the Mdi
+ if(m_pMdi->topChild())
+ {
+ m_pMdi->focusTopChild();
+ return false;
+ }
+ return KviTalMainWindow::focusNextPrevChild(next);
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Toolbar positioning stuff
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+void KviFrame::saveToolBarPositions()
+{
+ QString szTemp;
+ g_pApp->getLocalKvircDirectory(szTemp,KviApp::Config,KVI_CONFIGFILE_TOOLBARS);
+
+ QFile f(szTemp);
+ if(f.open(IO_WriteOnly | IO_Truncate))
+ {
+ f.write(saveState(1));
+ }
+}
+
+void KviFrame::restoreToolBarPositions()
+{
+ QString szTemp;
+ g_pApp->getLocalKvircDirectory(szTemp,KviApp::Config,KVI_CONFIGFILE_TOOLBARS);
+
+ QFile f(szTemp);
+
+ bool bNeedDefaults = false;
+
+ if(f.open(IO_ReadOnly))
+ {
+ if(!restoreState(f.readAll(),1))
+ debug("Error while restoring toolbars position");
+ } else {
+ bNeedDefaults = true;
+ }
+
+ if(m_pTaskBar->inherits("KviTreeTaskBar"))
+ {
+ // ensure that it is not too wide
+ m_pTaskBar->setMaximumWidth(600);
+ if(m_pTaskBar->width() > 600)
+ m_pTaskBar->setFixedWidth(250);
+ }
+}
+
+
+void KviFrame::createTaskBar()
+{
+ if(KVI_OPTION_BOOL(KviOption_boolUseTreeWindowListTaskBar))
+ {
+ m_pTaskBar = new KviTreeTaskBar();
+ m_pTaskBar->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+ addDockWidget(Qt::LeftDockWidgetArea,m_pTaskBar);
+ } else {
+ m_pTaskBar = new KviClassicTaskBar();
+ m_pTaskBar->setAllowedAreas(Qt::AllDockWidgetAreas);
+ addDockWidget(Qt::BottomDockWidgetArea,m_pTaskBar);
+ }
+}
+
+void KviFrame::recreateTaskBar()
+{
+ QString szOldClass = m_pTaskBar->className();
+
+ saveToolBarPositions();
+ KviWindow * w;
+ for(w = m_pWinList->first();w;w = m_pWinList->next())
+ {
+ w->destroyTaskBarItem();
+ }
+ delete m_pTaskBar;
+ createTaskBar();
+ for(w = m_pWinList->first();w;w = m_pWinList->next())
+ {
+ w->createTaskBarItem();
+ }
+ restoreToolBarPositions();
+
+
+ /*
+ QString szNewClass = m_pTaskBar->className();
+ if(szOldClass != szNewClass)
+ {
+ // the class changed...
+ // make sure that the tree task bar is in the left or right dock
+ // and the classic one is in the top or bottom on
+
+ Qt::Dock dock;
+ int index;
+ bool nl;
+ int eo;
+ getLocation(m_pTaskBar,dock,index,nl,eo);
+
+ if(KVI_OPTION_BOOL(KviOption_boolUseTreeWindowListTaskBar))
+ {
+ if((dock == Qt::Bottom) || (dock == Qt::Top))
+ moveDockWindow(m_pTaskBar,Qt::Left);
+ } else {
+ if((dock == Qt::Left) || (dock == Qt::Right))
+ moveDockWindow(m_pTaskBar,Qt::Bottom);
+ }
+ }
+ */
+
+ if(g_pActiveWindow)m_pTaskBar->setActiveItem(g_pActiveWindow->taskBarItem());
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Some accelerators
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void KviFrame::maximizeWindow(void)
+{
+ if(!g_pActiveWindow)return;
+ if(g_pActiveWindow->isMaximized())g_pActiveWindow->restore();
+ else g_pActiveWindow->maximize();
+}
+
+void KviFrame::minimizeWindow(void)
+{
+ if(g_pActiveWindow)g_pActiveWindow->minimize();
+}
+
+void KviFrame::switchToPrevWindow(void)
+{
+ m_pTaskBar->switchWindow(false,false);
+}
+
+void KviFrame::switchToNextWindow(void)
+{
+ m_pTaskBar->switchWindow(true,false);
+}
+
+void KviFrame::switchToPrevWindowInContext(void)
+{
+ m_pTaskBar->switchWindow(false,true);
+}
+
+void KviFrame::switchToNextWindowInContext(void)
+{
+ m_pTaskBar->switchWindow(true,true);
+}
+
+void KviFrame::hideEvent ( QHideEvent * e)
+{
+ if(KVI_OPTION_BOOL(KviOption_boolMinimizeInTray))
+ {
+ if(e->spontaneous())
+ {
+
+ if(!dockExtension())
+ {
+ executeInternalCommand(KVI_INTERNALCOMMAND_DOCKWIDGET_SHOW);
+ }
+ QTimer::singleShot( 0, this, SLOT(hide()) );
+ }
+
+ }
+}
+#ifndef COMPILE_USE_STANDALONE_MOC_SOURCES
+#include "kvi_frame.moc"
+#endif //!COMPILE_USE_STANDALONE_MOC_SOURCES
diff --git a/src/kvirc/ui/kvi_frame.h b/src/kvirc/ui/kvi_frame.h index e5c2cffcc..98469f19b 100644 --- a/src/kvirc/ui/kvi_frame.h +++ b/src/kvirc/ui/kvi_frame.h @@ -107,7 +107,7 @@ protected: 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 + //KviAccel * m_pAccel; // the global accelelrator public: // the mdi manager: handles mdi children KviMdiManager * mdiManager(){ return m_pMdi; }; @@ -222,7 +222,7 @@ protected slots: void maximizeWindow(); void minimizeWindow(); - void accelActivated(int id); + void accelActivated(); void enteredSdiMode(); void leftSdiMode(); void toolbarsPopupSelected(int id); @@ -241,6 +241,7 @@ protected: private: void saveToolBarPositions(); void restoreToolBarPositions(); + bool event(QEvent *e); }; #ifndef _KVI_FRAME_CPP_ diff --git a/src/kvirc/ui/kvi_ircviewtools.cpp b/src/kvirc/ui/kvi_ircviewtools.cpp index d0748870a..bc25c1a7c 100644 --- a/src/kvirc/ui/kvi_ircviewtools.cpp +++ b/src/kvirc/ui/kvi_ircviewtools.cpp @@ -186,7 +186,7 @@ KviIrcViewToolWidget::KviIrcViewToolWidget(KviIrcView * par) gl->setResizeMode(QGridLayout::Fixed); m_pStringToFind->setFocus(); tw->showPage(w); - connect(new QShortcut(Qt::Key_Escape,this),SIGNAL(activated()),this,SLOT(close())); + new QShortcut(Qt::Key_Escape,this,SLOT(close())); } KviIrcViewToolWidget::~KviIrcViewToolWidget() diff --git a/src/modules/context/context_QT4_vc05.vcproj b/src/modules/context/context_QT4_vc05.vcproj index 272978d0d..a16591e43 100644 --- a/src/modules/context/context_QT4_vc05.vcproj +++ b/src/modules/context/context_QT4_vc05.vcproj @@ -3,7 +3,7 @@ ProjectType="Visual C++"
Version="8,00"
Name="context"
- ProjectGUID="{542FE556-EB89-4B2E-BE26-EA4A01ABEF48}"
+ ProjectGUID="{BE75388C-806A-4CCC-8EB6-B2FF4EA0FB79}"
RootNamespace="context"
Keyword="Win32Proj"
>
diff --git a/src/modules/mediaplayer/winamp_QT4_vc05.vcproj b/src/modules/mediaplayer/winamp_QT4_vc05.vcproj index 4c27ae46c..ab361a746 100644 --- a/src/modules/mediaplayer/winamp_QT4_vc05.vcproj +++ b/src/modules/mediaplayer/winamp_QT4_vc05.vcproj @@ -3,7 +3,7 @@ ProjectType="Visual C++"
Version="8,00"
Name="winamp"
- ProjectGUID="{EDD7C2E4-F6A4-4CFA-9AB4-57330EBC1B06}"
+ ProjectGUID="{FD8BC188-FFA0-43E4-813A-4C98CAA87802}"
RootNamespace="winamp"
Keyword="Win32Proj"
>
diff --git a/src/modules/options/dialog.cpp b/src/modules/options/dialog.cpp index 7a5c21816..e033ccc05 100644 --- a/src/modules/options/dialog.cpp +++ b/src/modules/options/dialog.cpp @@ -282,7 +282,7 @@ KviOptionsDialog::KviOptionsDialog(QWidget * par,const QString &szGroup) KVI_OPTION_RECT(KviOption_rectGeneralOptionsDialogGeometry).y()); } - connect(new QShortcut(Qt::Key_Escape,this),SIGNAL(activated()),this,SLOT(close())); + new QShortcut(Qt::Key_Escape,this,SLOT(close())); } KviOptionsDialog::~KviOptionsDialog() |
