diff options
Diffstat (limited to 'src/modules/dockwidget/libkvidockwidget_qt3.cpp')
| -rw-r--r-- | src/modules/dockwidget/libkvidockwidget_qt3.cpp | 858 |
1 files changed, 0 insertions, 858 deletions
diff --git a/src/modules/dockwidget/libkvidockwidget_qt3.cpp b/src/modules/dockwidget/libkvidockwidget_qt3.cpp deleted file mode 100644 index 798718709..000000000 --- a/src/modules/dockwidget/libkvidockwidget_qt3.cpp +++ /dev/null @@ -1,858 +0,0 @@ -// -// File : libkvidockwidget.cpp -// Creation date : Tue Jan 02 20001 14:34:12 CEST by Szymon Stefanek -// -// This file is part of the KVirc irc client distribution -// Copyright (C) 2000-2001 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. -// - -#include "kvi_settings.h" -#ifndef COMPILE_USE_QT4 - -#include "kvi_app.h" -#include "kvi_module.h" -#include "kvi_locale.h" -#include "kvi_memmove.h" -#include "kvi_taskbar.h" -#include "kvi_window.h" -#include "kvi_dynamictooltip.h" -#include "kvi_iconmanager.h" -#include "kvi_internalcmd.h" -#include "kvi_console.h" -#include "kvi_ircconnection.h" -#include "kvi_ircconnectionuserinfo.h" -#include "kvi_imagelib.h" -#include "kvi_options.h" -#include "kvi_ircview.h" - -#include "libkvidockwidget.h" -#include "kvi_doublebuffer.h" - -#ifdef COMPILE_KDE_SUPPORT - #include <kwin.h> - #include <kpopupmenu.h> -#else - #include <qlabel.h> -#endif - -#include "kvi_tal_popupmenu.h" - - -#include <qpixmap.h> -#include <qpainter.h> -#include <qtimer.h> -#include <qevent.h> -#include <qregexp.h> - -#include <stdlib.h> -#include <time.h> - -#ifdef COMPILE_ON_WINDOWS - #include <windows.h> - - #include <qbitmap.h> - #include <qcursor.h> - - #define ID_DOCKWIDGET_TASKBAR_ICON 0xdeadbeef - #define WM_KVIRC_NOTIFY_ICON_MESSAGE (WM_USER + 0xbeef) - - static UINT WM_KVIRC_TASKBAR_CREATED = 0; -#else -#ifndef Q_OS_MACX - #include <X11/Xlib.h> - - //const int XFocusOut = FocusOut; - const int XFocusIn = FocusIn; - #undef FocusOut - #undef FocusIn - #undef KeyPress - #undef KeyRelease - - //#warning "Later remove this stuff and use a wrapper for #include <X11/Xlib.h>" - #ifdef Bool - #undef Bool - #endif -#endif -#endif - -extern KVIRC_API KviPointerHashTable<const char *,KviWindow> * g_pGlobalWindowDict; -static KviPointerList<KviDockWidget> * g_pDockWidgetList = 0; - -static QPixmap * g_pDock1 = 0; -static QPixmap * g_pDock2 = 0; -static QPixmap * g_pDock3 = 0; - -#ifdef COMPILE_ON_WINDOWS - static HICON g_pCurrentIcon = 0; - static QPixmap * g_pCurrentPixmap = 0; -#endif - - -KviDockWidget::KviDockWidget(KviFrame * frm,const char * name) -: QWidget(0,name) -{ - m_iConsoles = 0; - m_iChannels = 0; - m_iQueries = 0; - m_iOther = 0; - - m_pFlashingTimer = new QTimer(this,"flashing_timer"); - connect( m_pFlashingTimer, SIGNAL(timeout()), this, SLOT(flashingTimerShot()) ); - m_bFlashed=0; - g_pDockWidgetList->append(this); - m_pFrm = frm; - m_pFrm->setDockExtension(this); - -#ifdef COMPILE_ON_WINDOWS - // kode54 - if(!WM_KVIRC_TASKBAR_CREATED)WM_KVIRC_TASKBAR_CREATED = RegisterWindowMessage(TEXT("TaskbarCreated")); - createTaskbarIcon(); -#else //!COMPILE_ON_WINDOWS - setMinimumSize(22,22); - #ifndef COMPILE_USE_QT4 - setBackgroundMode(X11ParentRelative); - #endif - #ifdef COMPILE_KDE_SUPPORT - KWin::setSystemTrayWindowFor(winId(),frm->winId()); - #endif -#endif //!COMPILE_ON_WINDOWS - -#ifdef COMPILE_USE_QT4 - m_pSysTrayIcon = new QSystemTrayIcon(m_pFrm); -#endif - - m_pTip = new KviDynamicToolTip(this,"dock_tooltip"); - connect(m_pTip,SIGNAL(tipRequest(KviDynamicToolTip *,const QPoint &)),this,SLOT(tipRequest(KviDynamicToolTip *,const QPoint &))); - - m_pAwayPopup = new KviTalPopupMenu(this); - -#ifdef COMPILE_KDE_SUPPORT - m_pContextPopup = new KPopupMenu(this); - m_pContextPopup->insertTitle(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_KVIRC)),__tr2qs("KVIrc")); -#else - m_pContextPopup = new KviTalPopupMenu(this); -#ifndef COMPILE_USE_QT4 - QLabel * l = new QLabel(__tr2qs("KVIrc"),m_pContextPopup); - l->setFrameStyle(QFrame::Raised | QFrame::StyledPanel); - m_pContextPopup->insertItem(l); -#endif -#endif - m_pContextPopup->setCaption(__tr2qs("Context")); - m_iAwayMenuId = m_pContextPopup->insertItem ( __tr2qs("Away"), m_pAwayPopup); - m_pContextPopup->changeItem(m_iAwayMenuId,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_AWAY)),__tr2qs("Away")); - - int id = m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_OPTIONS)),__tr2qs("&Configure KVIrc..."),m_pFrm,SLOT(executeInternalCommand(int))); - m_pContextPopup->setItemParameter(id,KVI_INTERNALCOMMAND_OPTIONS_DIALOG); - id = m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_KVIRC)),__tr2qs("&About KVIrc"),m_pFrm,SLOT(executeInternalCommand(int))); - m_pContextPopup->setItemParameter(id,KVI_INTERNALCOMMAND_ABOUT_ABOUTKVIRC); - m_pContextPopup->insertSeparator(); - m_iToggleFrame = m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_RAW)),QString(""),this,SLOT(toggleParentFrame())); - m_pContextPopup->insertSeparator(); - id = m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_DOCKWIDGET)),__tr2qs("Un&dock"),m_pFrm,SLOT(executeInternalCommand(int))); - m_pContextPopup->setItemParameter(id,KVI_INTERNALCOMMAND_DOCKWIDGET_HIDE); - id = m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_QUITAPP)),__tr2qs("&Quit"),g_pApp,SLOT(quit())); - m_pContextPopup->setAccel(__tr2qs("Ctrl+Q"),id); - connect(m_pContextPopup,SIGNAL(aboutToShow()),this,SLOT(fillContextPopup())); -} - - -KviDockWidget::~KviDockWidget() -{ -#ifdef COMPILE_ON_WINDOWS - destroyTaskbarIcon(); -#endif - m_pFrm->setDockExtension(0); - g_pDockWidgetList->removeRef(this); -} - -void KviDockWidget::die() -{ - delete this; -} -void KviDockWidget::flashingTimerShot() -{ - m_bFlashed=!m_bFlashed; -#ifdef COMPILE_ON_WINDOWS - updateTaskbarIcon(); -#else - update(); -#endif -} - -#ifdef COMPILE_ON_WINDOWS -void KviDockWidget::createTaskbarIcon() -{ - ICONINFO inf; - g_pCurrentPixmap=new QPixmap(*g_pDock1); - inf.hbmColor = g_pCurrentPixmap->hbm(); - if(!g_pCurrentPixmap->mask())g_pCurrentPixmap->setMask(g_pCurrentPixmap->createHeuristicMask()); - inf.hbmMask = g_pCurrentPixmap->mask()->hbm(); - g_pCurrentIcon=CreateIconIndirect(&inf); - - NOTIFYICONDATA nid; - nid.cbSize = sizeof(nid); - nid.hWnd = winId(); - nid.uID = ID_DOCKWIDGET_TASKBAR_ICON; - nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; - nid.uCallbackMessage = WM_KVIRC_NOTIFY_ICON_MESSAGE; - kvi_memmove(nid.szTip,"KVIrc",6); - nid.hIcon = g_pCurrentIcon; - Shell_NotifyIcon(NIM_ADD,&nid); -} - -void KviDockWidget::destroyTaskbarIcon() -{ - NOTIFYICONDATA nid; - nid.cbSize = sizeof(nid); - nid.hWnd = winId(); - nid.uID = ID_DOCKWIDGET_TASKBAR_ICON; - nid.uFlags = 0; - Shell_NotifyIcon(NIM_DELETE,&nid); -} - -void KviDockWidget::updateTaskbarIcon() -{ - ICONINFO inf; - QPixmap* pix = m_bFlashed ? g_pIconManager->getSmallIcon(KVI_SMALLICON_MESSAGE) : g_pCurrentPixmap; - inf.hbmColor = pix->hbm(); - if(!pix->mask())pix->setMask(pix->createHeuristicMask()); - inf.hbmMask = pix->mask()->hbm(); - HICON hIcon=CreateIconIndirect(&inf); - - NOTIFYICONDATA nid; - nid.cbSize = sizeof(nid); - nid.hWnd = winId(); - nid.uID = ID_DOCKWIDGET_TASKBAR_ICON; - nid.uFlags = NIF_ICON; - nid.hIcon = hIcon; - Shell_NotifyIcon(NIM_MODIFY,&nid); - DestroyIcon(g_pCurrentIcon); - g_pCurrentIcon=hIcon; -} - -bool KviDockWidget::winEvent(MSG * m) -{ - if(m->message == WM_KVIRC_NOTIFY_ICON_MESSAGE) - { - if(m->wParam == ID_DOCKWIDGET_TASKBAR_ICON) - { - switch(m->lParam) - { - case WM_MOUSEMOVE: - tipRequest(m_pTip,QCursor::pos()); - break; - case WM_LBUTTONDOWN: - toggleParentFrame(); - break; - case WM_RBUTTONDOWN: - m_pContextPopup->popup(QCursor::pos()); - break; - } - return true; - } - } else if(m->message == WM_KVIRC_TASKBAR_CREATED) - { - // kode54 : when the window shell dies and is restarted - // it sends the "TaskbarCreated" message to all the toplevel windows - // We recreate the taskbar icon then - createTaskbarIcon(); - refresh(); - } - return false; -} - -#endif - -#define NIDLEMSGS 18 - -static const char * idlemsgs[NIDLEMSGS]= -{ - __tr("Nothing is happening...") , - __tr("Just idling...") , - __tr("Dum de dum de dum...") , - __tr("Hey man... do something!") , - __tr("Umpf!") , - __tr("Silence speaking") , - __tr("Are ya here?") , - __tr("The world has stopped?") , - __tr("Everything is all right") , - __tr("idle()") , - __tr("It's so cold here...") , - __tr("Do not disturb... watching TV") , - __tr("Just vegetating") , - __tr("Hey... are ya sure that your network is up?") , - __tr("Seems like the world has stopped spinning") , - __tr("This silence is freaking me out!") , - __tr("Mieeeeeowww!") , - __tr("idle idle idle idle!") -}; - -#ifdef COMPILE_KDE_SUPPORT - extern Time qt_x_time; -#endif - -void KviDockWidget::enterEvent( QEvent* ) -{ -#ifdef COMPILE_KDE_SUPPORT - if(!g_pApp->focusWidget()) - { - XEvent ev; - kvi_memset(&ev, 0, sizeof(ev)); - ev.xfocus.display = qt_xdisplay(); - ev.xfocus.type = XFocusIn; - ev.xfocus.window = winId(); - ev.xfocus.mode = NotifyNormal; - ev.xfocus.detail = NotifyAncestor; - Time time = qt_x_time; - qt_x_time = 1; - g_pApp->x11ProcessEvent( &ev ); - qt_x_time = time; - } -#endif -} - -void KviDockWidget::tipRequest(KviDynamicToolTip *tip,const QPoint &pnt) -{ - QString tmp; - - KviTaskBarBase * t = m_pFrm->taskBar(); - - QString line; - - for(KviTaskBarItem * b = t->firstItem();b;b = t->nextItem()) - { - - if(b->kviWindow()->view()) - { - if(b->kviWindow()->view()->haveUnreadedMessages()) - { - line = b->kviWindow()->lastMessageText(); - if(!line.isEmpty()) - { - line.replace(QChar('&'),"&"); - line.replace(QChar('<'),"<"); - line.replace(QChar('>'),">"); - tmp += "<b>"; - tmp += b->kviWindow()->plainTextCaption(); - tmp += "</b><br>"; - tmp += line; - tmp += "<br><br>\n"; - } - } - } - } - - - srand(time(0)); - - // We use the bad way to generate random numbers :))))) - - if(tmp.isEmpty())tmp = __tr2qs_no_xgettext(idlemsgs[(int)(rand() % NIDLEMSGS)]); - -#ifdef COMPILE_ON_WINDOWS - -#else - m_pTip->tip(rect(),tmp); -#endif -} - -//int KviDockWidget::message(int,void *) -//{ -// debug("Message"); -// update(); -// return 0; -//} - -void KviDockWidget::mousePressEvent(QMouseEvent *e) -{ - if(e->button() & Qt::LeftButton)toggleParentFrame(); - else if(e->button() & Qt::RightButton) - m_pContextPopup->popup(mapToGlobal(e->pos())); -} - -void KviDockWidget::doAway(int id) -{ - if(id<0) - { - KviPointerHashTableIterator<const char *,KviWindow> it(*g_pGlobalWindowDict); - while(KviWindow * wnd = it.current()) - { - if(wnd->type()==KVI_WINDOW_TYPE_CONSOLE) - { - KviConsole* pConsole=(KviConsole*)wnd; - if(pConsole->isConnected()) - if(id==-2) - pConsole->connection()->sendFmtData("AWAY"); - else - pConsole->connection()->sendFmtData("AWAY :%s", - pConsole->connection()->encodeText(KVI_OPTION_STRING(KviOption_stringAwayMessage)).data() - ); - } - ++it; - } - } else { - KviConsole* pConsole=g_pApp->findConsole((unsigned int)id); - if(pConsole) - if(pConsole->isConnected()) - if(pConsole->connection()->userInfo()->isAway()) - pConsole->connection()->sendFmtData("AWAY"); - else - pConsole->connection()->sendFmtData("AWAY :%s", - pConsole->connection()->encodeText(KVI_OPTION_STRING(KviOption_stringAwayMessage)).data() - ); - } -} - -void KviDockWidget::fillContextPopup() -{ - m_pContextPopup->changeItem(m_iToggleFrame,m_pFrm->isVisible() ? __tr2qs("Hide Window") : __tr2qs("Show Window")); - if(g_pApp->topmostConnectedConsole()) - { - m_pContextPopup->setItemVisible(m_iAwayMenuId,true); - m_pAwayPopup->clear(); - - int iAllAway=m_pAwayPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_CONSOLE)),__tr2qs("Away on all"),this,SLOT(doAway(int))); - m_pAwayPopup->setItemParameter(iAllAway,-1); - - int iAllUnaway=m_pAwayPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_CONSOLE)),__tr2qs("Back on all"),this,SLOT(doAway(int))); - m_pAwayPopup->setItemParameter(iAllUnaway,-2); - - int iSeparator=m_pAwayPopup->insertSeparator(); - - KviPointerHashTableIterator<const char *,KviWindow> it(*g_pGlobalWindowDict); - bool bAllAway=1; - bool bAllUnaway=1; - int iNetCount=0; - while(KviWindow * wnd = it.current()) - { - if(wnd->type()==KVI_WINDOW_TYPE_CONSOLE) - { - KviConsole* pConsole=(KviConsole*)wnd; - if(pConsole->isConnected()) - { - int id; - if(pConsole->connection()->userInfo()->isAway()) - { - id=m_pAwayPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_CONSOLE)),__tr2qs("Back on %1").arg(pConsole->currentNetworkName()),this,SLOT(doAway(int))); - bAllUnaway=0; - } else { - id=m_pAwayPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_CONSOLE)),__tr2qs("Away on %1").arg(pConsole->currentNetworkName()),this,SLOT(doAway(int))); - bAllAway=0; - } - m_pAwayPopup->setItemParameter(id,pConsole->ircContextId()); - iNetCount++; - } - } - ++it; - } - if(iNetCount==1) - { - m_pAwayPopup->setItemVisible(iAllAway,false); - m_pAwayPopup->setItemVisible(iAllUnaway,false); - m_pAwayPopup->setItemVisible(iSeparator,false); - } else { - m_pAwayPopup->setItemVisible(iAllAway,!bAllAway); - m_pAwayPopup->setItemVisible(iAllUnaway,!bAllUnaway); - } - } else { - m_pContextPopup->setItemVisible(m_iAwayMenuId,false); - } -} - -void KviDockWidget::toggleParentFrame() -{ - QWidget *top_widget = m_pFrm->topLevelWidget(); - - if(m_pFrm->isVisible()) { - m_pFrm->hide(); - } else { - top_widget->show(); - top_widget->raise(); - top_widget->setActiveWindow(); - if(g_pActiveWindow) g_pActiveWindow->setFocus(); - if(m_pFrm->isMinimized()) - m_pFrm->showNormal(); - else - m_pFrm->show(); - } -} - -void KviDockWidget::refresh() -{ - grabActivityInfo(); - -#ifdef COMPILE_ON_WINDOWS - // how to copy transparency???? - delete g_pCurrentPixmap; - g_pCurrentPixmap=new QPixmap(16,16); - bitBlt(g_pCurrentPixmap,0,0,m_iOther ? ((m_iOther == 2) ? g_pDock3 : g_pDock2) : g_pDock1,0,0,8,8,Qt::ClearROP); - bitBlt(g_pCurrentPixmap,0,8,m_iConsoles ? ((m_iConsoles == 2) ? g_pDock3 : g_pDock2) : g_pDock1,0,8,8,8,Qt::ClearROP); - bitBlt(g_pCurrentPixmap,8,0,m_iQueries ? ((m_iQueries == 2) ? g_pDock3 : g_pDock2) : g_pDock1,8,0,8,8,Qt::ClearROP); - bitBlt(g_pCurrentPixmap,8,8,m_iChannels ? ((m_iChannels == 2) ? g_pDock3 : g_pDock2) : g_pDock1,8,8,8,8,Qt::ClearROP); -#endif - - if( (m_iChannels == 2) || (m_iQueries == 2) ) - { - if(!m_pFlashingTimer->isActive() && KVI_OPTION_BOOL(KviOption_boolEnableTrayIconFlashing) ) m_pFlashingTimer->start(1000); - } else { - if(m_pFlashingTimer->isActive()) m_pFlashingTimer->stop(); - m_bFlashed=false; - } - -#ifdef COMPILE_ON_WINDOWS - updateTaskbarIcon(); -#else - update(); -#endif -} - -void KviDockWidget::grabActivityInfo() -{ - KviTaskBarBase * t = m_pFrm->taskBar(); - - if(KVI_OPTION_BOOL(KviOption_boolUseLevelBasedTrayNotification)) - { - if(KVI_OPTION_UINT(KviOption_uintMinTrayLowLevelMessage)>5) KVI_OPTION_UINT(KviOption_uintMinTrayLowLevelMessage)=5; - if(KVI_OPTION_UINT(KviOption_uintMinTrayHighLevelMessage)>5) KVI_OPTION_UINT(KviOption_uintMinTrayHighLevelMessage)=5; - - if(KVI_OPTION_UINT(KviOption_uintMinTrayLowLevelMessage)<1) KVI_OPTION_UINT(KviOption_uintMinTrayLowLevelMessage)=1; - if(KVI_OPTION_UINT(KviOption_uintMinTrayHighLevelMessage)<1) KVI_OPTION_UINT(KviOption_uintMinTrayHighLevelMessage)=1; - - if(KVI_OPTION_UINT(KviOption_uintMinTrayHighLevelMessage)<KVI_OPTION_UINT(KviOption_uintMinTrayLowLevelMessage)) - KVI_OPTION_UINT(KviOption_uintMinTrayHighLevelMessage)=KVI_OPTION_UINT(KviOption_uintMinTrayLowLevelMessage); - } - - m_iConsoles = 0; - m_iChannels = 0; - m_iQueries = 0; - m_iOther = 0; - - for(KviTaskBarItem * b = t->firstItem();b;b = t->nextItem()) - { - if(KVI_OPTION_BOOL(KviOption_boolUseLevelBasedTrayNotification)) - { - int iLevel = b->highlightLevel(); - switch(b->kviWindow()->type()) - { - case KVI_WINDOW_TYPE_CONSOLE: - if(m_iConsoles < iLevel) m_iConsoles = iLevel; - break; - case KVI_WINDOW_TYPE_CHANNEL: - if(m_iChannels < iLevel) m_iChannels = iLevel; - break; - case KVI_WINDOW_TYPE_QUERY: - if(m_iQueries < iLevel) m_iQueries = iLevel; - break; - default: - if(m_iOther < iLevel) m_iOther = iLevel; - break; - } - } else { - int iLevel=0; - if(b->kviWindow()->view()) - { - if(b->kviWindow()->view()->haveUnreadedHighlightedMessages()) - { - iLevel=2; - } else if(b->kviWindow()->view()->haveUnreadedMessages()) - { - iLevel=1; - } - if(iLevel>0) - switch(b->kviWindow()->type()) - { - case KVI_WINDOW_TYPE_CONSOLE: - if(m_iConsoles < iLevel) m_iConsoles = iLevel; - break; - case KVI_WINDOW_TYPE_CHANNEL: - if(m_iChannels < iLevel) m_iChannels = iLevel; - break; - case KVI_WINDOW_TYPE_QUERY: - if(m_iQueries < iLevel) m_iQueries = iLevel; - break; - default: - if(m_iOther < iLevel) m_iOther = iLevel; - break; - } - } - } - } - - if(KVI_OPTION_BOOL(KviOption_boolUseLevelBasedTrayNotification)) - { - if(m_iConsoles >= KVI_OPTION_UINT(KviOption_uintMinTrayHighLevelMessage)) m_iConsoles=2; - else if(m_iConsoles >= KVI_OPTION_UINT(KviOption_uintMinTrayLowLevelMessage)) m_iConsoles=1; - else m_iConsoles=0; - - if(m_iChannels >= KVI_OPTION_UINT(KviOption_uintMinTrayHighLevelMessage)) m_iChannels=2; - else if(m_iChannels >= KVI_OPTION_UINT(KviOption_uintMinTrayLowLevelMessage)) m_iChannels=1; - else m_iChannels=0; - - if(m_iQueries >= KVI_OPTION_UINT(KviOption_uintMinTrayHighLevelMessage)) m_iQueries=2; - else if(m_iQueries >= KVI_OPTION_UINT(KviOption_uintMinTrayLowLevelMessage)) m_iQueries=1; - else m_iQueries=0; - - if(m_iOther >= KVI_OPTION_UINT(KviOption_uintMinTrayHighLevelMessage)) m_iOther=2; - else if(m_iOther >= KVI_OPTION_UINT(KviOption_uintMinTrayLowLevelMessage)) m_iOther=1; - else m_iOther=0; - } -} - -void KviDockWidget::paintEvent(QPaintEvent * event) -{ -#ifdef COMPILE_USE_QT4 - QPainter thisRestrictionOfQt4IsNotNice(this); - if(m_bFlashed) - { - erase(); - thisRestrictionOfQt4IsNotNice.drawPixmap(4,4,16,16,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_MESSAGE)),0,0,16,16); - } else { - thisRestrictionOfQt4IsNotNice.drawPixmap(0,0,12,12,m_iOther ? ((m_iOther == 2) ? *g_pDock3 : *g_pDock2) : *g_pDock1,0,0,12,12); - thisRestrictionOfQt4IsNotNice.drawPixmap(0,12,12,12,m_iConsoles ? ((m_iConsoles == 2) ? *g_pDock3 : *g_pDock2) : *g_pDock1,0,12,12,12); - thisRestrictionOfQt4IsNotNice.drawPixmap(12,0,12,12,m_iQueries ? ((m_iQueries == 2) ? *g_pDock3 : *g_pDock2) : *g_pDock1,12,0,12,12); - thisRestrictionOfQt4IsNotNice.drawPixmap(12,12,12,12,m_iChannels ? ((m_iChannels == 2) ? *g_pDock3 : *g_pDock2) : *g_pDock1,12,12,12,12); - } -#else - if(m_bFlashed) - { - erase(); - bitBlt(this,4,4,g_pIconManager->getSmallIcon(KVI_SMALLICON_MESSAGE),0,0,16,16); - } else { - bitBlt(this,0,0,m_iOther ? ((m_iOther == 2) ? g_pDock3 : g_pDock2) : g_pDock1,0,0,12,12,Qt::CopyROP,false); - bitBlt(this,0,12,m_iConsoles ? ((m_iConsoles == 2) ? g_pDock3 : g_pDock2) : g_pDock1,0,12,12,12,Qt::CopyROP,false); - bitBlt(this,12,0,m_iQueries ? ((m_iQueries == 2) ? g_pDock3 : g_pDock2) : g_pDock1,12,0,12,12,Qt::CopyROP,false); - bitBlt(this,12,12,m_iChannels ? ((m_iChannels == 2) ? g_pDock3 : g_pDock2) : g_pDock1,12,12,12,12,Qt::CopyROP,false); - } -#endif -} - - -static KviDockWidget * dockwidget_find(KviFrame *f) -{ - if(!g_pDockWidgetList)return 0; - for(KviDockWidget * w = g_pDockWidgetList->first();w;w = g_pDockWidgetList->next()) - { - if(w->frame() == f)return w; - } - return 0; -} - -/* - @doc: dockwidget.show - @type: - command - @title: - dockwidget.show - @short: - Shows the dock widget for the current frame window - @keyterms: - dock widget , system tray - @syntax: - dockwidget.show - @description: - Shows the dock widget for the current frame window.[br] - The dock widget is a small widget that docks in the KDE panel.[br] - It shows a small icon of the earth and eventually displays four squares - that cover this icon: the bottom left square appears when there is some new - text in any console window, the square becomes red if the text is highlighted.[br] - The bottom right square appears when there is some new text in any channel window, - and it becomes red when the text is highlighted.[br] The upper right square refers to - query windows and the upper left one to any other kind of window (dcc , links...).[br] - If you move the mouse over the dock widget a tooltip will show you the last lines - of the "new" text in all these windows.[br] - This is useful when you keep the main KVIrc window minimized and you're working on something else: - if the dock widget shows nothing but the earth icon , nothing is happening in the main KVIrc window. - If the dock widget shows one or more white (or red) squares , you can move the mouse over - and check what's happened exactly and eventually bring up the main KVIrc window by clicking on the widget.[br] - [big]tecnical details[/big] - The dock widget is currently working in KDE compilation mode only: - it relies on the KWin implementation of the Window Manager interaction protocol. - @seealso: - [cmd]dockwidget.hide[/cmd] -*/ - -static bool dockwidget_kvs_cmd_show(KviKvsModuleCommandCall * c) -{ - if(!(dockwidget_find(c->window()->frame()))) - { - KviDockWidget * w = new KviDockWidget(c->window()->frame(),"dock_widget"); -#ifndef COMPILE_ON_WINDOWS - w->show(); -#else - w->hide(); -#endif - } - return true; -} - -/* - @doc: dockwidget.hide - @type: - command - @title: - dockwidget.hide - @short: - Hides the dock widget for the current frame window - @syntax: - dockwidget.hide - @description: - Hides the dock widget for the current frame window - @seealso: - [cmd]dockwidget.show[/cmd] -*/ - -static bool dockwidget_kvs_cmd_hide(KviKvsModuleCommandCall * c) -{ - KviDockWidget * w= dockwidget_find(c->window()->frame()); - if(w)delete w; - // show the parent frame.. otherwise there will be no way to get it back - if(!c->window()->frame()->isVisible()) - { - c->window()->frame()->show(); - } - return true; -} - -/* - @doc: dockwidget.hidewindow - @type: - command - @title: - dockwidget.hidewindow - @short: - Returns the state of the dock widget - @syntax: - dockwidget.hidewindow - @description: - Hides the window, assotiated with dockwidget - @seealso: - [cmd]dockwidget.show[/cmd], [cmd]dockwidget.hide[/cmd] -*/ - -static bool dockwidget_kvs_cmd_hidewindow(KviKvsModuleCommandCall * c) -{ - KviDockWidget * w= dockwidget_find(c->window()->frame()); - if(w) - { -#if QT_VERSION > 0x030201 - w->setPrevWindowState(c->window()->frame()->windowState()); -#endif - c->window()->frame()->hide(); - } - return true; -} - -/* - @doc: dockwidget.isVisible - @type: - function - @title: - $dockwidget.isVisible - @short: - Returns the state of the dock widget - @syntax: - $reguser.isVisible() - @description: - Returns 1 if the dock widget is actually visible , 0 otherwise. - @seealso: - [cmd]dockwidget.show[/cmd] -*/ - -static bool dockwidget_kvs_fnc_isvisible(KviKvsModuleFunctionCall * c) -{ - c->returnValue()->setBoolean(dockwidget_find(c->window()->frame())); - return true; -} - - - -// ======================================= -// init routine -// ======================================= -static bool dockwidget_module_init(KviModule * m) -{ - KviStr buffer; -#ifdef COMPILE_ON_WINDOWS - g_pApp->findImage(buffer,"kvi_dock_win32.png"); - KviImageLibrary l1(buffer.ptr(),16,16); -#else - g_pApp->findImage(buffer,"kvi_dock.png"); - KviImageLibrary l1(buffer.ptr(),22,22); -#endif - g_pDock1 = new QPixmap(l1.getImage(0)); - g_pDock2 = new QPixmap(l1.getImage(1)); - g_pDock3 = new QPixmap(l1.getImage(2)); - -#ifdef COMPILE_ON_WINDOWS - -#endif - - - g_pDockWidgetList = new KviPointerList<KviDockWidget>; - g_pDockWidgetList->setAutoDelete(false); - - - KVSM_REGISTER_SIMPLE_COMMAND(m,"hide",dockwidget_kvs_cmd_hide); - KVSM_REGISTER_SIMPLE_COMMAND(m,"hidewindow",dockwidget_kvs_cmd_hidewindow); - KVSM_REGISTER_SIMPLE_COMMAND(m,"show",dockwidget_kvs_cmd_show); - KVSM_REGISTER_FUNCTION(m,"isVisible",dockwidget_kvs_fnc_isvisible); - - return true; -} - -static bool dockwidget_module_cleanup(KviModule *m) -{ - while(g_pDockWidgetList->first())delete g_pDockWidgetList->first(); - delete g_pDockWidgetList; - g_pDockWidgetList = 0; - -#ifdef COMPILE_ON_WINDOWS - DestroyIcon(g_pCurrentIcon); -#endif - - delete g_pDock1; - g_pDock1 = 0; - delete g_pDock2; - g_pDock2 = 0; - delete g_pDock3; - g_pDock3 = 0; - - return true; -} - -static bool dockwidget_module_can_unload(KviModule *) -{ - return g_pDockWidgetList->isEmpty(); -} - -// ======================================= -// plugin definition structure -// ======================================= -KVIRC_MODULE( - "KVIrc dock widget implementation", - "1.0.0", - "Szymon Stefanek <pragma at kvirc dot net>" , - "exports the /dockwidget.* interface\n", - dockwidget_module_init , - dockwidget_module_can_unload, - 0, - dockwidget_module_cleanup -) - -#include "libkvidockwidget_qt3.moc" - -#endif
\ No newline at end of file |
