blob: 981e0ab582decadf9b06440c9986333a061a4a40 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
#include <qlabel.h>
#include <qpainter.h>
#include <qmessagebox.h>
#include <qpe/applnk.h> // for AppLnk
#include <qpe/resource.h> // for Resource loading
#include "simpleimpl.h"
SimpleApplet::SimpleApplet(QWidget *parent)
: QWidget( parent, "Simple Applet" ) {
/*
* we will load an Image, scale it for the right usage
* remember your applet might be used by different
* resolutions.
* Then we will convert the image back to an Pixmap
* and draw this Pimxap. We need to use Image because its
* the only class that allows scaling.
*/
QImage image = Resource::loadImage("Tux");
/*
* smooth scale to AppLnk smallIconSize for applest
* smallIconSize gets adjusted to the resolution
* so on some displays like SIMpad and a C-750 the smallIconSize
* is greater than on a iPAQ h3870
*/
image = image.smoothScale(AppLnk::smallIconSize(), AppLnk::smallIconSize() );
/*
* now we need to convert the Image to a Pixmap cause these
* can be drawn more easily
*/
m_pix = new QPixmap();
m_pix->convertFromImage( image );
/*
* Now we will say that we don't want to be bigger than our
* Pixmap
*/
setFixedHeight(AppLnk::smallIconSize() );
setFixedWidth( AppLnk::smallIconSize() );
}
SimpleApplet::~SimpleApplet() {
delete m_pix;
}
/*
* here you would normal show or do something
* useful. If you want to show a widget at the top left
* of your icon you need to map your rect().topLeft() to
* global with mapToGlobal(). Then you might also need to
* move the widgets so it is visible
*/
void SimpleApplet::mousePressEvent(QMouseEvent* ) {
QMessageBox::information(this, tr("No action taken"),
tr("<qt>This Plugin does not yet support anything usefule aye.</qt>"),
QMessageBox::Ok );
}
void SimpleApplet::paintEvent( QPaintEvent* ) {
QPainter p(this);
/* simpy draw the pixmap from the start of this widget */
p.drawPixmap(0, 0, *m_pix );
}
/*
* Here comes the implementation of the interface
*/
SimpleAppletImpl::SimpleAppletImpl() {
}
/* needed cause until it is only pure virtual */
SimpleAppletImpl::~SimpleAppletImpl() {
}
/*
* For the taskbar interface return a Widget
*/
QWidget* SimpleAppletImpl::applet( QWidget* parent ) {
/* ownership has the parent */
return new SimpleApplet( parent );
}
/*
* A small hint where the Applet Should be displayed
*/
int SimpleAppletImpl::position()const {
return 1;
}
/*
* Now the important QUnkownInterface method without
* this one your applet won't load
* @param uuid The uuid of the interface
* @param iface The pointer to the interface ptr
*/
QRESULT SimpleAppletImpl::queryInterface( const QUuid& uuid, QUnknownInterface** iface) {
/* set the pointer to the interface to 0 */
*iface = 0;
/*
* we check if we support the requested interface
* and then assign to the pointer.
* You may alos create another interface here so
* *iface = this is only in this simple case true you
* could also support more interfaces.
* But this example below is the most common use.
* Now the caller knows that the Interface Pointer
* is valid and the interface supported
*/
if ( uuid == IID_QUnknown )
*iface = this;
else if ( uuid == IID_TaskbarApplet )
*iface = this;
else
return QS_FALSE;
if ( *iface )
(*iface)->addRef();
return QS_OK;
}
/*
* Finally we need to export the Interface.
* CREATE_INSTANCE creates a interface and calls
* queryInterface for the QUnknownInterface once
* With out this function the applet can't be loaded.
*
* NOTE: If your applet does not load it's likely you've an
* unresolved symbol. Change the .pro TEMPLATE = lib to TEMPLATE= app
* and recompile. If the linker only complains about a missing
* main method the problem is more complex. In most cases it'll say
* you which symbols are missing and you can implement them.
* The main(int argc, char* argv[] ) does not need to be
* included in a library so it's ok that the linker complains
*/
Q_EXPORT_INTERFACE() {
Q_CREATE_INSTANCE( SimpleAppletImpl )
}
|