Diffstat (limited to 'examples/applet/simpleimpl.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | examples/applet/simpleimpl.cpp | 149 |
1 files changed, 149 insertions, 0 deletions
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 | |||
11 | SimpleApplet::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 | |||
47 | SimpleApplet::~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 | */ | ||
59 | void 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 | |||
66 | void 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 | */ | ||
76 | SimpleAppletImpl::SimpleAppletImpl() { | ||
77 | } | ||
78 | /* needed cause until it is only pure virtual */ | ||
79 | SimpleAppletImpl::~SimpleAppletImpl() { | ||
80 | } | ||
81 | |||
82 | /* | ||
83 | * For the taskbar interface return a Widget | ||
84 | */ | ||
85 | QWidget* 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 | */ | ||
93 | int 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 | */ | ||
104 | QRESULT 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 | */ | ||
146 | Q_EXPORT_INTERFACE() { | ||
147 | Q_CREATE_INSTANCE( SimpleAppletImpl ) | ||
148 | } | ||
149 | |||