summaryrefslogtreecommitdiffabout
path: root/pwmanager/pwmanager/pwmtray.h
Side-by-side diff
Diffstat (limited to 'pwmanager/pwmanager/pwmtray.h') (more/less context) (ignore whitespace changes)
-rw-r--r--pwmanager/pwmanager/pwmtray.h292
1 files changed, 292 insertions, 0 deletions
diff --git a/pwmanager/pwmanager/pwmtray.h b/pwmanager/pwmanager/pwmtray.h
new file mode 100644
index 0000000..ffb625e
--- a/dev/null
+++ b/pwmanager/pwmanager/pwmtray.h
@@ -0,0 +1,292 @@
+/***************************************************************************
+ * *
+ * copyright (C) 2003, 2004 by Michael Buesch *
+ * email: mbuesch@freenet.de *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License version 2 *
+ * as published by the Free Software Foundation. *
+ * *
+ ***************************************************************************/
+
+/***************************************************************************
+ * copyright (C) 2004 by Ulf Schenk
+ * This file is originaly based on version 1.0.1 of pwmanager
+ * and was modified to run on embedded devices that run microkde
+ *
+ * $Id$
+ **************************************************************************/
+
+#ifndef __PWMTRAY_H
+#define __PWMTRAY_H
+
+#ifndef PWM_EMBEDDED
+#include <ksystemtray.h>
+#endif
+
+#include <kpopupmenu.h>
+
+#include <qpainter.h>
+#include <qvaluelist.h>
+
+//#include "pwmexception.h"
+
+class PwMInit;
+class PwMDoc;
+class PwMTray;
+
+/* wrapper to workaround MOC problems */
+class __ActiveTreeItem : public QCustomMenuItem
+ , public QObject
+{
+public:
+ __ActiveTreeItem() {}
+};
+
+/** implements the "active" part of the tree */
+class ActiveTreeItem : public __ActiveTreeItem
+{
+ Q_OBJECT
+
+public:
+ enum Task
+ {
+ pwToClipboard,
+ nameToClipboard,
+ descToClipboard,
+ urlToClipboard,
+ launcherToClipboard,
+ commentToClipboard,
+ execLauncher,
+ goToURL,
+ openMainWnd,
+ closeDoc,
+ lock,
+ deepLock,
+ unlock
+ };
+
+public:
+ ActiveTreeItem(const QString &_text, const QFont &_font,
+ Task _task, PwMDoc * _doc,
+ int _category, int _entry,
+ PwMTray *_tray)
+ : text (_text)
+ , font (_font)
+ , task (_task)
+ , doc (_doc)
+ , category (_category)
+ , entry (_entry)
+ , tray (_tray)
+ { }
+
+/* ~ActiveTreeItem()
+ { cout << "deleted \"" << text << "\"" << endl; } */
+
+ void paint(QPainter *p, const QColorGroup & /*cg*/, bool /*act*/,
+ bool /*enabled*/, int x, int y, int w, int h)
+ {
+ p->setFont(font);
+ p->drawText(x, y, w, h, AlignLeft | AlignVCenter |
+ DontClip | ShowPrefix, text);
+ }
+
+ QSize sizeHint()
+ {
+ return QFontMetrics(font).size(AlignLeft | AlignVCenter |
+ ShowPrefix | DontClip, text);
+ }
+
+ bool fullSpan() const
+ { return false; }
+
+ bool isSeparator() const
+ { return false; }
+
+ void setFont(const QFont &f)
+ { font = f; }
+
+public slots:
+ /** this is the executive part, that is triggered, when the user clicks it */
+ void execIt();
+
+protected:
+ QString text;
+ QFont font;
+ Task task;
+ PwMDoc *doc;
+ int category;
+ int entry;
+ PwMTray *tray;
+};
+
+/** tray icon implementation */
+#ifndef PWM_EMBEDDED
+//MOC_SKIP_BEGIN
+class PwMTray : public KSystemTray
+{
+ Q_OBJECT
+
+ friend class ActiveTreeItem;
+
+ struct treeItem
+ {
+ int menuId;
+ PwMDoc *doc;
+ KPopupMenu *menu;
+ QValueList<int> activeItems; // ids of all active items
+ };
+
+public:
+ PwMTray(PwMInit *_init, QWidget* parent = 0, const char* name = 0);
+ ~PwMTray();
+
+ /** connect all signals for this document to the tray */
+ void connectDocToTray(PwMDoc *doc);
+
+public slots:
+ /** for update-notification from all open documents */
+ void updateTree(PwMDoc *document);
+ /** when a document has been closed, call this func
+ * to delete its tray-entry
+ */
+ void closeTreeEntry(PwMDoc *document);
+
+protected slots:
+ /** open a new document */
+ void openDoc();
+ /** open a new mainwnd */
+ void newMainWnd();
+ /** undock this tray icon */
+ void undock();
+
+signals:
+ /** this icon got deleted */
+ void closed(PwMTray *);
+ /** the user clicked on the tray icon */
+ void clickedIcon(PwMTray *);
+
+protected:
+ /** holds a list of all open files, its documents and
+ * its menuIDs
+ */
+ QValueList<struct treeItem> tree;
+ /** pointer to init */
+ PwMInit *init;
+
+protected:
+ /** search if an entry with for the given document
+ * exists and resturn its ID and a pointer to the main
+ * KPopupMenu. If no item is found,
+ * it returns -1 as ID and a NULL-pointer.
+ */
+ int findTreeEntry(PwMDoc *doc, KPopupMenu **menu, int *treeItem);
+ /** build the main menu-items */
+ void buildMain();
+ /** rebuilds the tree for the given KPopupMenu entry */
+ void rebuildTree(KPopupMenu *popup, PwMDoc *doc,
+ QValueList<int> *activeItems);
+ /** insert a new tree-entry for the given doc and returns the ID.*/
+ int insertTreeEntry(PwMDoc *doc, KPopupMenu **popup);
+ /** removes a tree entry */
+ void removeTreeEntry(int menuId, int treeItem, KPopupMenu **menu);
+ /** inserts a new active-tree-item into the given tree entry */
+ void insertActiveTreeItem(KPopupMenu *insertIn, const QString &text,
+ ActiveTreeItem::Task task, PwMDoc *doc,
+ int docCategory, int docEntry,
+ QValueList<int> *activeItemsList);
+ /** mouse event on icon */
+ void mouseReleaseEvent(QMouseEvent *e);
+ /** inserts the items for the main window control
+ * into the popup menu.
+ */
+ void insertMainWndCtrl(KPopupMenu *menu, PwMDoc *doc);
+};
+//MOC_SKIP_END
+#else
+class PwMTray : public QWidget
+{
+ Q_OBJECT
+
+ friend class ActiveTreeItem;
+
+ struct treeItem
+ {
+ int menuId;
+ PwMDoc *doc;
+ KPopupMenu *menu;
+ QValueList<int> activeItems; // ids of all active items
+ };
+
+public:
+ PwMTray(PwMInit *_init, QWidget* parent = 0, const char* name = 0);
+ ~PwMTray();
+
+ //US ENH needed for embedde version.
+ KPopupMenu* contextMenu();
+ KPopupMenu* m_ctxMenu;
+
+ /** connect all signals for this document to the tray */
+ void connectDocToTray(PwMDoc *doc);
+
+public slots:
+ /** for update-notification from all open documents */
+ void updateTree(PwMDoc *document);
+ /** when a document has been closed, call this func
+ * to delete its tray-entry
+ */
+ void closeTreeEntry(PwMDoc *document);
+
+protected slots:
+ /** open a new document */
+ void openDoc();
+ /** open a new mainwnd */
+ void newMainWnd();
+ /** undock this tray icon */
+ void undock();
+
+signals:
+ /** this icon got deleted */
+ void closed(PwMTray *);
+ /** the user clicked on the tray icon */
+ void clickedIcon(PwMTray *);
+
+protected:
+ /** holds a list of all open files, its documents and
+ * its menuIDs
+ */
+ QValueList<struct treeItem> tree;
+ /** pointer to init */
+ PwMInit *init;
+
+protected:
+ /** search if an entry with for the given document
+ * exists and resturn its ID and a pointer to the main
+ * KPopupMenu. If no item is found,
+ * it returns -1 as ID and a NULL-pointer.
+ */
+ int findTreeEntry(PwMDoc *doc, KPopupMenu **menu, int *treeItem);
+ /** build the main menu-items */
+ void buildMain();
+ /** rebuilds the tree for the given KPopupMenu entry */
+ void rebuildTree(KPopupMenu *popup, PwMDoc *doc,
+ QValueList<int> *activeItems);
+ /** insert a new tree-entry for the given doc and returns the ID.*/
+ int insertTreeEntry(PwMDoc *doc, KPopupMenu **popup);
+ /** removes a tree entry */
+ void removeTreeEntry(int menuId, int treeItem, KPopupMenu **menu);
+ /** inserts a new active-tree-item into the given tree entry */
+ void insertActiveTreeItem(KPopupMenu *insertIn, const QString &text,
+ ActiveTreeItem::Task task, PwMDoc *doc,
+ int docCategory, int docEntry,
+ QValueList<int> *activeItemsList);
+ /** mouse event on icon */
+ void mouseReleaseEvent(QMouseEvent *e);
+ /** inserts the items for the main window control
+ * into the popup menu.
+ */
+ void insertMainWndCtrl(KPopupMenu *menu, PwMDoc *doc);
+};
+#endif
+
+#endif