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