summaryrefslogtreecommitdiff
path: root/core/launcher/appicons.cpp
authorkergoth <kergoth>2002-01-25 22:14:26 (UTC)
committer kergoth <kergoth>2002-01-25 22:14:26 (UTC)
commit15318cad33835e4e2dc620d033e43cd930676cdd (patch) (side-by-side diff)
treec2fa0399a2c47fda8e2cd0092c73a809d17f68eb /core/launcher/appicons.cpp
downloadopie-15318cad33835e4e2dc620d033e43cd930676cdd.zip
opie-15318cad33835e4e2dc620d033e43cd930676cdd.tar.gz
opie-15318cad33835e4e2dc620d033e43cd930676cdd.tar.bz2
Initial revision
Diffstat (limited to 'core/launcher/appicons.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/appicons.cpp129
1 files changed, 129 insertions, 0 deletions
diff --git a/core/launcher/appicons.cpp b/core/launcher/appicons.cpp
new file mode 100644
index 0000000..c51ee5a
--- a/dev/null
+++ b/core/launcher/appicons.cpp
@@ -0,0 +1,129 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#include "appicons.h"
+
+#include <qpe/qcopenvelope_qws.h>
+
+#include <qtooltip.h>
+#include <qpixmap.h>
+
+
+AppIcons::AppIcons( QWidget *parent ) :
+ QHBox(parent)
+{
+ buttons.setAutoDelete(TRUE);
+
+#ifndef QT_NO_COP
+ QCopChannel* channel = new QCopChannel("Qt/Tray", this);
+ connect(channel, SIGNAL(received(const QCString&, const QByteArray&)),
+ this, SLOT(receive(const QCString&, const QByteArray&)));
+#endif
+}
+
+void AppIcons::setIcon(int id, const QPixmap& pm)
+{
+ button(id)->setPixmap(pm);
+}
+
+class FlatButton : public QLabel {
+ Q_OBJECT
+public:
+ FlatButton(QWidget* parent) : QLabel(parent) { }
+
+ void mouseDoubleClickEvent(QMouseEvent* e)
+ {
+ emit clicked(e->pos(),e->button(),TRUE);
+ }
+ void mouseReleaseEvent(QMouseEvent* e)
+ {
+ if ( rect().contains(e->pos()) )
+ emit clicked(e->pos(),e->button(),FALSE);
+ }
+
+signals:
+ void clicked(const QPoint&, int, bool);
+};
+
+QLabel* AppIcons::button(int id)
+{
+ QLabel* f = buttons.find(id);
+ if ( !f ) {
+ buttons.insert(id,f=new FlatButton(this));
+ connect(f,SIGNAL(clicked(const QPoint&, int, bool)),this,SLOT(clicked(const QPoint&, int, bool)));
+ f->show();
+ }
+ return f;
+}
+
+int AppIcons::findId(QLabel* b)
+{
+ QIntDictIterator<QLabel> it(buttons);
+ for ( ; ; ++it )
+ if ( it.current() == b ) return it.currentKey();
+}
+
+void AppIcons::clicked(const QPoint& relpos, int button, bool dbl)
+{
+#ifndef QT_NO_COP
+ QLabel* s = (QLabel*)sender();
+ if ( button == RightButton ) {
+ QCopEnvelope("Qt/Tray","popup(int,QPoint)")
+ << findId(s) << s->mapToGlobal(QPoint(0,0));
+ } else {
+ QCopEnvelope("Qt/Tray",
+ dbl ? "doubleClicked(int,QPoint)" : "clicked(int,QPoint)")
+ << findId(s) << relpos;
+ }
+#endif
+}
+
+void AppIcons::setToolTip(int id, const QString& tip)
+{
+ QToolTip::add(button(id),tip);
+}
+
+void AppIcons::remove(int id)
+{
+ buttons.remove(id);
+}
+
+void AppIcons::receive( const QCString &msg, const QByteArray &data )
+{
+ QDataStream stream( data, IO_ReadOnly );
+ if ( msg == "remove(int)" ) {
+ int id;
+ stream >> id;
+ remove(id);
+ } else if ( msg == "setIcon(int,QPixmap)" ) {
+ int id;
+ QPixmap pm;
+ stream >> id >> pm;
+ setIcon(id,pm);
+ } else if ( msg == "setToolTip(int,QString)" ) {
+ int id;
+ QString s;
+ stream >> id >> s;
+ setToolTip(id,s);
+ }
+}
+
+#include "appicons.moc"