summaryrefslogtreecommitdiffstats
path: root/languages/cpp/app_templates/opieapplet/simpleimpl.cpp
blob: 3264314c80b79835aec432dde5a0cba11f4aec2b (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
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <tqlabel.h>
#include <tqpainter.h>
#include <tqmessagebox.h>

#include <qpe/applnk.h> // for AppLnk
#include <qpe/resource.h> // for Resource loading

#include "%{APPNAMELC}.h"


%{APPNAME}::%{APPNAME}(TQWidget *parent)
    : TQWidget( parent,  "%{APPNAME} 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.
 */

    TQImage image = Resource::loadImage("%{APPNAMELC}/%{APPNAMELC}");
    /*
     * 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 TQPixmap();
    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() );

}

%{APPNAME}::~%{APPNAME}() {
    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 %{APPNAME}::mousePressEvent(TQMouseEvent* ) {
    TQMessageBox::information(this, tr("No action taken"),
                             tr("<qt>This Plugin does not yet support anything usefule aye.</qt>"),
                             TQMessageBox::Ok );

}

void %{APPNAME}::paintEvent( TQPaintEvent* ) {
    TQPainter 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
 */
%{APPNAME}Impl::%{APPNAME}Impl() {
}
/* needed cause until it is only pure virtual */
%{APPNAME}Impl::~%{APPNAME}Impl() {
    /*
     * we will delete our applets as well
     * setAUtoDelete makes the QList free
     * the objects behind the pointers
     */
    m_applets.setAutoDelete( true );
    m_applets.clear();
}

/*
 * For the taskbar interface return a Widget
 */
TQWidget* %{APPNAME}Impl::applet( TQWidget* parent ) {
    /*
     * There are problems with ownership. So we add
     * our ownlist and clear this;
     */
    %{APPNAME}* ap = new %{APPNAME}( parent );
    m_applets.append( ap );

    return ap;
}

/*
 * A small hint where the Applet Should be displayed
 */
int %{APPNAME}Impl::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 %{APPNAME}Impl::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( %{APPNAME}Impl )
}