aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorGravatar Alexey Uzhva2007-03-30 10:32:54 +0000
committerGravatar Alexey Uzhva2007-03-30 10:32:54 +0000
commitd25e9f8393232cb033519388a536a4007864512a (patch)
treef99d74785ee2c942d48670fe61ac666057f357e2 /src/modules
parent*AUTOMATICALLY* updated KVI_SOURCES_DATE variable (diff)
downloadKVIrc-d25e9f8393232cb033519388a536a4007864512a.tar.gz
KVIrc-d25e9f8393232cb033519388a536a4007864512a.tar.bz2
KVIrc-d25e9f8393232cb033519388a536a4007864512a.zip
more qt4 port; using new System Tray icon model, shipped with qt4:)
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@441 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/dockwidget/Makefile.am7
-rw-r--r--src/modules/dockwidget/kvi_dock.pngbin1963 -> 1960 bytes
-rw-r--r--src/modules/dockwidget/kvi_dock_part-0.pngbin0 -> 1478 bytes
-rw-r--r--src/modules/dockwidget/kvi_dock_part-1.pngbin0 -> 1028 bytes
-rw-r--r--src/modules/dockwidget/kvi_dock_part-2.pngbin0 -> 1035 bytes
-rw-r--r--src/modules/dockwidget/libkvidockwidget.cpp9
-rw-r--r--src/modules/dockwidget/libkvidockwidget.h79
-rw-r--r--src/modules/dockwidget/libkvidockwidget_qt3.h95
-rw-r--r--src/modules/dockwidget/libkvidockwidget_qt4.cpp655
-rw-r--r--src/modules/dockwidget/libkvidockwidget_qt4.h81
-rw-r--r--src/modules/file/libkvifile.cpp2
11 files changed, 856 insertions, 72 deletions
diff --git a/src/modules/dockwidget/Makefile.am b/src/modules/dockwidget/Makefile.am
index 5ca31e513..e6a7452f7 100644
--- a/src/modules/dockwidget/Makefile.am
+++ b/src/modules/dockwidget/Makefile.am
@@ -9,17 +9,17 @@ pluglib_LTLIBRARIES = libkvidockwidget.la
libkvidockwidget_la_LDFLAGS = -module -avoid-version $(SS_LDFLAGS) $(SS_LIBDIRS)
-libkvidockwidget_la_SOURCES = libkvidockwidget.cpp
+libkvidockwidget_la_SOURCES = libkvidockwidget.cpp libkvidockwidget_qt4.cpp
#nodist_libkvidockwidget_la_SOURCES = moc_trayicon.cpp
libkvidockwidget_la_LIBADD = $(SS_LIBLINK) ../../kvilib/build/libkvilib.la
-noinst_HEADERS= libkvidockwidget.h
+noinst_HEADERS= libkvidockwidget.h libkvidockwidget_qt4.h
tmpdir = $(picsdir)
-tmp_DATA = kvi_dock.png
+tmp_DATA = kvi_dock.png kvi_dock_part-0.png kvi_dock_part-1.png kvi_dock_part-2.png
EXTRA_DIST = $(tmp_DATA)
@@ -30,3 +30,4 @@ moc_%.cpp: %.h
$(SS_QT_MOC) $< -o $@
libkvidockwidget.cpp: libkvidockwidget.moc
+libkvidockwidget_qt4.cpp: libkvidockwidget_qt4.moc
diff --git a/src/modules/dockwidget/kvi_dock.png b/src/modules/dockwidget/kvi_dock.png
index 6f809e8b1..16f99fb1c 100644
--- a/src/modules/dockwidget/kvi_dock.png
+++ b/src/modules/dockwidget/kvi_dock.png
Binary files differ
diff --git a/src/modules/dockwidget/kvi_dock_part-0.png b/src/modules/dockwidget/kvi_dock_part-0.png
new file mode 100644
index 000000000..a01c49408
--- /dev/null
+++ b/src/modules/dockwidget/kvi_dock_part-0.png
Binary files differ
diff --git a/src/modules/dockwidget/kvi_dock_part-1.png b/src/modules/dockwidget/kvi_dock_part-1.png
new file mode 100644
index 000000000..bd326e80f
--- /dev/null
+++ b/src/modules/dockwidget/kvi_dock_part-1.png
Binary files differ
diff --git a/src/modules/dockwidget/kvi_dock_part-2.png b/src/modules/dockwidget/kvi_dock_part-2.png
new file mode 100644
index 000000000..949056eb5
--- /dev/null
+++ b/src/modules/dockwidget/kvi_dock_part-2.png
Binary files differ
diff --git a/src/modules/dockwidget/libkvidockwidget.cpp b/src/modules/dockwidget/libkvidockwidget.cpp
index 000cbe6e1..aa8d87c51 100644
--- a/src/modules/dockwidget/libkvidockwidget.cpp
+++ b/src/modules/dockwidget/libkvidockwidget.cpp
@@ -20,7 +20,8 @@
// 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"
@@ -130,6 +131,10 @@ KviDockWidget::KviDockWidget(KviFrame * frm,const char * name)
#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 &)));
@@ -849,3 +854,5 @@ KVIRC_MODULE(
)
#include "libkvidockwidget.moc"
+
+#endif \ No newline at end of file
diff --git a/src/modules/dockwidget/libkvidockwidget.h b/src/modules/dockwidget/libkvidockwidget.h
index 4a8a25d36..81f20bae7 100644
--- a/src/modules/dockwidget/libkvidockwidget.h
+++ b/src/modules/dockwidget/libkvidockwidget.h
@@ -1,9 +1,12 @@
-#ifndef _KVI_DOCKWIDGET_H_
-#define _KVI_DOCKWIDGET_H_
+#ifndef _KVI_TAL_DOCK_H_
+#define _KVI_TAL_DOCK_H_
+
+//
+// File : libkvidockwidget.h
+// Creation date : Sun Jun 18 2000 12:53:08 by Szymon Stefanek
//
// This file is part of the KVirc irc client distribution
-// Creation date : Tue 02 Jan 2001 14:28:25 by Szymon Stefanek
-// Copyright (C) 2000-2001 Szymon Stefanek (pragma at kvirc dot net)
+// 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
@@ -21,71 +24,11 @@
//
#include "kvi_settings.h"
-#include "kvi_frame.h"
-
-#ifdef COMPILE_KDE_SUPPORT
- class KPopupMenu;
-#else
- class KviTalPopupMenu;
-#endif
-class QPixmap;
-class QTimer;
-//class KviFrame;
-class KviDynamicToolTip;
-
-class KviDockWidget : public QWidget , public KviDockExtension
-{
- Q_OBJECT
-public:
- KviDockWidget(KviFrame * win,const char * name);
- ~KviDockWidget();
-protected:
- KviFrame * m_pFrm;
- KviDynamicToolTip * m_pTip;
-#ifdef COMPILE_KDE_SUPPORT
- KPopupMenu * m_pContextPopup;
+#ifdef COMPILE_USE_QT4
+ #include "libkvidockwidget_qt4.h"
#else
- KviTalPopupMenu * m_pContextPopup;
+ #include "libkvidockwidget_qt3.h"
#endif
- KviTalPopupMenu * m_pAwayPopup;
- int m_iToggleFrame;
- int m_iAwayMenuId;
-
- bool m_bFlashed;
-
- QTimer* m_pFlashingTimer;
- int m_iConsoles;
- int m_iChannels;
- int m_iQueries;
- int m_iOther;
-public:
- KviFrame * frame(){ return m_pFrm; };
-public:
-// virtual int message(int msgtype,void * data);
- virtual void enterEvent(QEvent *);
- virtual void refresh();
- virtual void die();
-protected:
- virtual void paintEvent(QPaintEvent *e);
- virtual void mousePressEvent(QMouseEvent *e);
- void grabActivityInfo();
-
-#ifdef COMPILE_ON_WINDOWS
-private:
- void createTaskbarIcon();
- void destroyTaskbarIcon();
- void updateTaskbarIcon();
-protected:
- bool winEvent(MSG * m);
-#endif
-
-protected slots:
- void fillContextPopup();
- void toggleParentFrame();
- void tipRequest(KviDynamicToolTip *tip,const QPoint &pnt);
- void doAway(int);
- void flashingTimerShot();
-};
-#endif //_KVI_DOCKWIDGET_H_
+#endif // _KVI_TAL_DOCK_H_
diff --git a/src/modules/dockwidget/libkvidockwidget_qt3.h b/src/modules/dockwidget/libkvidockwidget_qt3.h
new file mode 100644
index 000000000..427f57526
--- /dev/null
+++ b/src/modules/dockwidget/libkvidockwidget_qt3.h
@@ -0,0 +1,95 @@
+#ifndef _KVI_DOCKWIDGET_H_
+#define _KVI_DOCKWIDGET_H_
+//
+// This file is part of the KVirc irc client distribution
+// Creation date : Tue 02 Jan 2001 14:28:25 by Szymon Stefanek
+// 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_frame.h"
+
+#ifdef COMPILE_KDE_SUPPORT
+ class KPopupMenu;
+#else
+ class KviTalPopupMenu;
+#endif
+
+
+
+
+class QPixmap;
+class QTimer;
+
+//class KviFrame;
+class KviDynamicToolTip;
+
+class KviDockWidget : public QWidget , public KviDockExtension
+{
+ Q_OBJECT
+public:
+ KviDockWidget(KviFrame * win,const char * name);
+ ~KviDockWidget();
+protected:
+ KviFrame * m_pFrm;
+ KviDynamicToolTip * m_pTip;
+#ifdef COMPILE_KDE_SUPPORT
+ KPopupMenu * m_pContextPopup;
+#else
+ KviTalPopupMenu * m_pContextPopup;
+#endif
+ KviTalPopupMenu * m_pAwayPopup;
+ int m_iToggleFrame;
+ int m_iAwayMenuId;
+
+ bool m_bFlashed;
+
+ QTimer* m_pFlashingTimer;
+ int m_iConsoles;
+ int m_iChannels;
+ int m_iQueries;
+ int m_iOther;
+public:
+ KviFrame * frame(){ return m_pFrm; };
+public:
+// virtual int message(int msgtype,void * data);
+ virtual void enterEvent(QEvent *);
+ virtual void refresh();
+ virtual void die();
+protected:
+ virtual void paintEvent(QPaintEvent *e);
+ virtual void mousePressEvent(QMouseEvent *e);
+ void grabActivityInfo();
+
+#ifdef COMPILE_ON_WINDOWS
+private:
+ void createTaskbarIcon();
+ void destroyTaskbarIcon();
+ void updateTaskbarIcon();
+protected:
+ bool winEvent(MSG * m);
+#endif
+
+protected slots:
+ void fillContextPopup();
+ void toggleParentFrame();
+ void tipRequest(KviDynamicToolTip *tip,const QPoint &pnt);
+ void doAway(int);
+ void flashingTimerShot();
+};
+
+#endif //_KVI_DOCKWIDGET_H_
diff --git a/src/modules/dockwidget/libkvidockwidget_qt4.cpp b/src/modules/dockwidget/libkvidockwidget_qt4.cpp
new file mode 100644
index 000000000..75c0379d3
--- /dev/null
+++ b/src/modules/dockwidget/libkvidockwidget_qt4.cpp
@@ -0,0 +1,655 @@
+//
+// 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"
+
+#ifdef 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"
+
+#include <qlabel.h>
+
+#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>
+
+
+extern KVIRC_API KviAsciiDict<KviWindow> * g_pGlobalWindowDict;
+static KviPtrList<KviDockWidget> * g_pDockWidgetList = 0;
+
+static QPixmap * g_pDock1 = 0;
+static QPixmap * g_pDock2 = 0;
+static QPixmap * g_pDock3 = 0;
+
+KviDockWidget::KviDockWidget(KviFrame * frm)
+: QSystemTrayIcon(frm), m_CurrentPixmap(22,22)
+{
+ m_pContextPopup = new KviTalPopupMenu(0);
+ setContextMenu(m_pContextPopup);
+
+ 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);
+
+ m_pTip = new KviDynamicToolTip(frm,"dock_tooltip");
+ m_pAwayPopup = new KviTalPopupMenu(0);
+
+ QLabel * l = new QLabel(__tr2qs("KVIrc"),m_pContextPopup);
+ l->setFrameStyle(QFrame::Raised | QFrame::StyledPanel);
+ m_pContextPopup->insertItem(l);
+ 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()));
+
+ QIcon icon(*g_pDock1);
+ setIcon(icon);
+
+ connect(this,SIGNAL(activated ( QSystemTrayIcon::ActivationReason )),this,SLOT(activatedSlot ( QSystemTrayIcon::ActivationReason )));
+}
+
+
+KviDockWidget::~KviDockWidget()
+{
+ m_pFrm->setDockExtension(0);
+ g_pDockWidgetList->removeRef(this);
+}
+
+void KviDockWidget::die()
+{
+ delete this;
+}
+void KviDockWidget::flashingTimerShot()
+{
+ m_bFlashed=!m_bFlashed;
+ updateIcon();
+}
+
+#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!")
+};
+
+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('&'),"&amp;");
+ line.replace(QChar('<'),"&lt;");
+ line.replace(QChar('>'),"&gt;");
+ 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)]);
+
+ //m_pTip->tip(rect(),tmp);
+}
+
+//int KviDockWidget::message(int,void *)
+//{
+// debug("Message");
+// update();
+// return 0;
+//}
+
+//FIXME: Qt4 port
+/*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)
+ {
+ KviAsciiDictIterator<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();
+
+ KviAsciiDictIterator<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();
+ m_pFrm->setFocus();
+ if(m_pFrm->isMinimized())
+ m_pFrm->showNormal();
+ else
+ m_pFrm->show();
+ }
+}
+
+void KviDockWidget::refresh()
+{
+ grabActivityInfo();
+
+
+ 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;
+ }
+
+ m_CurrentPixmap.fill(Qt::transparent);
+ QPainter thisRestrictionOfQt4IsNotNice(&m_CurrentPixmap);
+ //thisRestrictionOfQt4IsNotNice.drawPixmap(0,0,22,22,*g_pDock1,0,0,22,22);
+
+ if(m_bFlashed)
+ {
+ thisRestrictionOfQt4IsNotNice.drawPixmap(4,4,16,16,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_MESSAGE)),0,0,16,16);
+ } else {
+ thisRestrictionOfQt4IsNotNice.drawPixmap(0,0,11,11,m_iOther ? ((m_iOther == 2) ? *g_pDock3 : *g_pDock2) : *g_pDock1,0,0,11,11);
+ thisRestrictionOfQt4IsNotNice.drawPixmap(0,11,11,11,m_iConsoles ? ((m_iConsoles == 2) ? *g_pDock3 : *g_pDock2) : *g_pDock1,0,11,11,11);
+ thisRestrictionOfQt4IsNotNice.drawPixmap(11,0,11,11,m_iQueries ? ((m_iQueries == 2) ? *g_pDock3 : *g_pDock2) : *g_pDock1,11,0,11,11);
+ thisRestrictionOfQt4IsNotNice.drawPixmap(11,11,11,11,m_iChannels ? ((m_iChannels == 2) ? *g_pDock3 : *g_pDock2) : *g_pDock1,11,11,11,11);
+ }
+
+ updateIcon();
+}
+
+void KviDockWidget::activatedSlot( QSystemTrayIcon::ActivationReason reason )
+{
+ if(reason==QSystemTrayIcon::Trigger)
+ {
+ toggleParentFrame();
+ }
+}
+
+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::updateIcon()
+{
+ setIcon(QIcon(m_CurrentPixmap));
+}
+
+
+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[/doc]
+*/
+
+static bool dockwidget_kvs_cmd_show(KviKvsModuleCommandCall * c)
+{
+ if(!(dockwidget_find(c->window()->frame())))
+ {
+ KviDockWidget * w = new KviDockWidget(c->window()->frame());
+ w->show();
+ }
+ 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[/doc]
+*/
+
+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)
+ {
+ 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)
+{
+ QString buffer;
+ g_pApp->findImage(buffer,"kvi_dock_part-0.png");
+
+ g_pDock1 = new QPixmap(buffer);
+
+ g_pApp->findImage(buffer,"kvi_dock_part-1.png");
+ g_pDock2 = new QPixmap(buffer);
+
+ g_pApp->findImage(buffer,"kvi_dock_part-2.png");
+ g_pDock3 = new QPixmap(buffer);
+
+
+ g_pDockWidgetList = new KviPtrList<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;
+
+ 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",
+ "2.0.0",
+ "Szymon Stefanek <pragma at kvirc dot net> and Alexey Uzhva <alexey at kvirc dot ru>" ,
+ "exports the /dockwidget.* interface\n",
+ dockwidget_module_init ,
+ dockwidget_module_can_unload,
+ 0,
+ dockwidget_module_cleanup
+)
+
+#include "libkvidockwidget_qt4.moc"
+
+#endif
diff --git a/src/modules/dockwidget/libkvidockwidget_qt4.h b/src/modules/dockwidget/libkvidockwidget_qt4.h
new file mode 100644
index 000000000..f9231a2b4
--- /dev/null
+++ b/src/modules/dockwidget/libkvidockwidget_qt4.h
@@ -0,0 +1,81 @@
+#ifndef _KVI_DOCKWIDGET_QT4_H_
+#define _KVI_DOCKWIDGET_QT4_H_
+//
+// This file is part of the KVirc irc client distribution
+// Creation date : Tue 02 Jan 2001 14:28:25 by Szymon Stefanek
+// 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"
+//#ifdef COMPILE_USE_QT4
+
+#include "kvi_frame.h"
+
+class KviTalPopupMenu;
+#include <QSystemTrayIcon>
+
+class QPixmap;
+class QTimer;
+
+//class KviFrame;
+class KviDynamicToolTip;
+
+class KviDockWidget : public QSystemTrayIcon, public KviDockExtension
+{
+ Q_OBJECT
+public:
+ KviDockWidget(KviFrame * win);
+ ~KviDockWidget();
+protected:
+ KviFrame * m_pFrm;
+ KviDynamicToolTip * m_pTip;
+ KviTalPopupMenu * m_pContextPopup;
+ KviTalPopupMenu * m_pAwayPopup;
+
+ int m_iToggleFrame;
+ int m_iAwayMenuId;
+
+ bool m_bFlashed;
+
+ QPixmap m_CurrentPixmap;
+ QTimer* m_pFlashingTimer;
+ int m_iConsoles;
+ int m_iChannels;
+ int m_iQueries;
+ int m_iOther;
+public:
+ KviFrame * frame(){ return m_pFrm; };
+public:
+ virtual void refresh();
+ virtual void die();
+ void updateIcon();
+protected:
+ void grabActivityInfo();
+
+protected slots:
+ void fillContextPopup();
+ void toggleParentFrame();
+ void tipRequest(KviDynamicToolTip *tip,const QPoint &pnt);
+ void doAway(int);
+ void flashingTimerShot();
+
+ void activatedSlot( QSystemTrayIcon::ActivationReason reason );
+};
+
+//#endif
+
+#endif //_KVI_DOCKWIDGET_QT4_H_
diff --git a/src/modules/file/libkvifile.cpp b/src/modules/file/libkvifile.cpp
index a9eba2be3..5d82470d6 100644
--- a/src/modules/file/libkvifile.cpp
+++ b/src/modules/file/libkvifile.cpp
@@ -35,6 +35,7 @@
#include <qfileinfo.h>
#include "kvi_file.h"
#include <qdir.h>
+#include <qtextstream.h>
/*
@doc: file.copy
@@ -832,6 +833,7 @@ static bool file_kvs_fnc_readLines(KviKvsModuleFunctionCall * c)
KviKvsArray * a = new KviKvsArray();
int iIndex=0;
+
QTextStream stream( &f );
stream.setEncoding(bLocal8Bit ? QTextStream::Locale : QTextStream::UnicodeUTF8);