summaryrefslogtreecommitdiff
authorzecke <zecke>2003-09-03 10:04:28 (UTC)
committer zecke <zecke>2003-09-03 10:04:28 (UTC)
commita0dc2e500265eff0e76934cf02ef2aedb90cec0d (patch) (unidiff)
tree29ea16c8a8808552e2ea4d4fc17d117feebdd909
parent88d625d9695582d57852f94581f71bb18c00a8a1 (diff)
downloadopie-a0dc2e500265eff0e76934cf02ef2aedb90cec0d.zip
opie-a0dc2e500265eff0e76934cf02ef2aedb90cec0d.tar.gz
opie-a0dc2e500265eff0e76934cf02ef2aedb90cec0d.tar.bz2
Add an Example Applet Now Tux grins from your Taskbar ;)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--examples/applet/config.in4
-rw-r--r--examples/applet/example.pro16
-rw-r--r--examples/applet/simpleimpl.cpp149
-rw-r--r--examples/applet/simpleimpl.h72
4 files changed, 241 insertions, 0 deletions
diff --git a/examples/applet/config.in b/examples/applet/config.in
new file mode 100644
index 0000000..6ea55d3
--- a/dev/null
+++ b/examples/applet/config.in
@@ -0,0 +1,4 @@
1 config APPLET_EXAMPLE
2 boolean "Applet Example"
3 default "y"
4 depends ( LIBQPE || LIBQPE-X11 ) && EXAMPLES
diff --git a/examples/applet/example.pro b/examples/applet/example.pro
new file mode 100644
index 0000000..3efd31e
--- a/dev/null
+++ b/examples/applet/example.pro
@@ -0,0 +1,16 @@
1CONFIG += warn_on qt
2
3TEMPLATE = lib
4DESTDIR = $(OPIEDIR)/plugins/applets
5TARGET = example
6
7SOURCES = simpleimpl.cpp
8HEADERS = simpleimpl.h
9
10INCLUDEPATH += $(OPIEDIR)/include
11DEPENDSPATH += $(OPIEDIR)/include
12
13LIBS += -lqpe
14
15
16include ( $(OPIEDIR)/include.pro )
diff --git a/examples/applet/simpleimpl.cpp b/examples/applet/simpleimpl.cpp
new file mode 100644
index 0000000..981e0ab
--- a/dev/null
+++ b/examples/applet/simpleimpl.cpp
@@ -0,0 +1,149 @@
1#include <qlabel.h>
2#include <qpainter.h>
3#include <qmessagebox.h>
4
5#include <qpe/applnk.h> // for AppLnk
6#include <qpe/resource.h> // for Resource loading
7
8#include "simpleimpl.h"
9
10
11SimpleApplet::SimpleApplet(QWidget *parent)
12 : QWidget( parent, "Simple Applet" ) {
13/*
14 * we will load an Image, scale it for the right usage
15 * remember your applet might be used by different
16 * resolutions.
17 * Then we will convert the image back to an Pixmap
18 * and draw this Pimxap. We need to use Image because its
19 * the only class that allows scaling.
20 */
21
22 QImage image = Resource::loadImage("Tux");
23 /*
24 * smooth scale to AppLnk smallIconSize for applest
25 * smallIconSize gets adjusted to the resolution
26 * so on some displays like SIMpad and a C-750 the smallIconSize
27 * is greater than on a iPAQ h3870
28 */
29 image = image.smoothScale(AppLnk::smallIconSize(), AppLnk::smallIconSize() );
30
31 /*
32 * now we need to convert the Image to a Pixmap cause these
33 * can be drawn more easily
34 */
35 m_pix = new QPixmap();
36 m_pix->convertFromImage( image );
37
38 /*
39 * Now we will say that we don't want to be bigger than our
40 * Pixmap
41 */
42 setFixedHeight(AppLnk::smallIconSize() );
43 setFixedWidth( AppLnk::smallIconSize() );
44
45}
46
47SimpleApplet::~SimpleApplet() {
48 delete m_pix;
49}
50
51
52/*
53 * here you would normal show or do something
54 * useful. If you want to show a widget at the top left
55 * of your icon you need to map your rect().topLeft() to
56 * global with mapToGlobal(). Then you might also need to
57 * move the widgets so it is visible
58 */
59void SimpleApplet::mousePressEvent(QMouseEvent* ) {
60 QMessageBox::information(this, tr("No action taken"),
61 tr("<qt>This Plugin does not yet support anything usefule aye.</qt>"),
62 QMessageBox::Ok );
63
64}
65
66void SimpleApplet::paintEvent( QPaintEvent* ) {
67 QPainter p(this);
68
69 /* simpy draw the pixmap from the start of this widget */
70 p.drawPixmap(0, 0, *m_pix );
71}
72
73/*
74 * Here comes the implementation of the interface
75 */
76SimpleAppletImpl::SimpleAppletImpl() {
77}
78/* needed cause until it is only pure virtual */
79SimpleAppletImpl::~SimpleAppletImpl() {
80}
81
82/*
83 * For the taskbar interface return a Widget
84 */
85QWidget* SimpleAppletImpl::applet( QWidget* parent ) {
86 /* ownership has the parent */
87 return new SimpleApplet( parent );
88}
89
90/*
91 * A small hint where the Applet Should be displayed
92 */
93int SimpleAppletImpl::position()const {
94 return 1;
95}
96
97
98/*
99 * Now the important QUnkownInterface method without
100 * this one your applet won't load
101 * @param uuid The uuid of the interface
102 * @param iface The pointer to the interface ptr
103 */
104QRESULT SimpleAppletImpl::queryInterface( const QUuid& uuid, QUnknownInterface** iface) {
105 /* set the pointer to the interface to 0 */
106 *iface = 0;
107
108 /*
109 * we check if we support the requested interface
110 * and then assign to the pointer.
111 * You may alos create another interface here so
112 * *iface = this is only in this simple case true you
113 * could also support more interfaces.
114 * But this example below is the most common use.
115 * Now the caller knows that the Interface Pointer
116 * is valid and the interface supported
117 */
118 if ( uuid == IID_QUnknown )
119 *iface = this;
120 else if ( uuid == IID_TaskbarApplet )
121 *iface = this;
122 else
123 return QS_FALSE;
124
125 if ( *iface )
126 (*iface)->addRef();
127
128 return QS_OK;
129}
130
131
132/*
133 * Finally we need to export the Interface.
134 * CREATE_INSTANCE creates a interface and calls
135 * queryInterface for the QUnknownInterface once
136 * With out this function the applet can't be loaded.
137 *
138 * NOTE: If your applet does not load it's likely you've an
139 * unresolved symbol. Change the .pro TEMPLATE = lib to TEMPLATE= app
140 * and recompile. If the linker only complains about a missing
141 * main method the problem is more complex. In most cases it'll say
142 * you which symbols are missing and you can implement them.
143 * The main(int argc, char* argv[] ) does not need to be
144 * included in a library so it's ok that the linker complains
145 */
146Q_EXPORT_INTERFACE() {
147 Q_CREATE_INSTANCE( SimpleAppletImpl )
148}
149
diff --git a/examples/applet/simpleimpl.h b/examples/applet/simpleimpl.h
new file mode 100644
index 0000000..8459c96
--- a/dev/null
+++ b/examples/applet/simpleimpl.h
@@ -0,0 +1,72 @@
1/*
2 * You may use, modify and distribute without any limitation
3 */
4
5/**
6 * Opie and Qtopia uses a component system called QCOM
7 * which was first part of the Qt 3.0 API but was made
8 * prviate during the betas. Opie and Qtopia still use it
9 * and we're happy with it.
10 * Every starts with the QUnknownInterface. It supports functions
11 * for reference counting and the most important one
12 * is for a query. Every QCOM interface got a global unique id ( GUID,UUID )
13 * query is used to see if a interface is supported by
14 * a dynamic shared object ( dso / plugin )
15 * For tasks like loading Applications, InputMethods, Today, MenuButton,
16 * Taskbar, Style, Email Client there are specefic Interfaces you
17 * need to implement. The interfaces inherits from QUnknownInterface and
18 * you'll need inherit from the interface.
19 * As example we will use the Taskbar interface
20 */
21
22#ifndef SIMPLE_OPIE_EXAMPLE_APPLET_H
23#define SIMPLE_OPIE_EXAMPLE_APPLET_H
24
25/*
26 * The taskbar applet interfaces wants us to implement position() and applet()
27 * additionally we need to implement add(), release() and queryInterface for QUnknownInterface
28 * luckiy there is a macro for the reference counting
29 * We provide an Implementation of the interface.
30 */
31#include <qwidget.h>
32#include <qpe/taskbarappletinterface.h>
33
34
35/*
36 * Because we only draw an Icon in a fixed width and height
37 * we declare and define SimpleApplet here and you could use QLabel
38 * setPixmap or use QWidget and draw yourself.
39 * You might also want to reimplement mouse*Event to use some simple actions
40 */
41class SimpleApplet : public QWidget {
42 Q_OBJECT
43public:
44 SimpleApplet(QWidget *parent);
45 ~SimpleApplet();
46private:
47 void mousePressEvent( QMouseEvent* );
48 void paintEvent( QPaintEvent* );
49 QPixmap *m_pix;
50};
51
52class SimpleAppletImpl : public TaskbarAppletInterface {
53public:
54
55 SimpleAppletImpl();
56 virtual ~SimpleAppletImpl();
57
58 QRESULT queryInterface( const QUuid&, QUnknownInterface** );
59
60 QWidget *applet( QWidget* parent );
61 int position()const;
62
63 /*
64 * macro for reference countint
65 * if reference drops to zero
66 * delete this is called
67 */
68 Q_REFCOUNT
69};
70
71
72#endif