-rw-r--r-- | examples/applet/config.in | 2 | ||||
-rw-r--r-- | examples/applet/example.pro | 2 | ||||
-rw-r--r-- | examples/applet/simpleimpl.cpp | 96 | ||||
-rw-r--r-- | examples/applet/simpleimpl.h | 23 |
4 files changed, 16 insertions, 107 deletions
diff --git a/examples/applet/config.in b/examples/applet/config.in index 177de27..c3fb6dd 100644 --- a/examples/applet/config.in +++ b/examples/applet/config.in @@ -1,4 +1,4 @@ config APPLET_EXAMPLE boolean "Taskbar Applet Example" default "y" - depends ( LIBQPE || LIBQPE-X11 ) && EXAMPLES + depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIEUI2 &&EXAMPLES diff --git a/examples/applet/example.pro b/examples/applet/example.pro index 3efd31e..5ae540b 100644 --- a/examples/applet/example.pro +++ b/examples/applet/example.pro @@ -1,16 +1,16 @@ CONFIG += warn_on qt TEMPLATE = lib DESTDIR = $(OPIEDIR)/plugins/applets TARGET = example SOURCES = simpleimpl.cpp HEADERS = simpleimpl.h INCLUDEPATH += $(OPIEDIR)/include DEPENDSPATH += $(OPIEDIR)/include -LIBS += -lqpe +LIBS += -lqpe -lopieui2 include ( $(OPIEDIR)/include.pro ) diff --git a/examples/applet/simpleimpl.cpp b/examples/applet/simpleimpl.cpp index 82fc6e5..62d9bf7 100644 --- a/examples/applet/simpleimpl.cpp +++ b/examples/applet/simpleimpl.cpp @@ -1,162 +1,90 @@ + +#include "simpleimpl.h" + +#include <opie2/otaskbarapplet.h> + +#include <qpe/applnk.h> // for AppLnk +#include <qpe/resource.h> // for Resource loading + #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 + * We need to add this symbol for the plugin exporter! */ -SimpleAppletImpl::SimpleAppletImpl() { -} -/* needed cause until it is only pure virtual */ -SimpleAppletImpl::~SimpleAppletImpl() { - /* - * 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 - */ -QWidget* SimpleAppletImpl::applet( QWidget* parent ) { - /* - * There are problems with ownership. So we add - * our ownlist and clear this; - */ - SimpleApplet* ap = new SimpleApplet( parent ); - m_applets.append( ap ); - - return ap; -} - -/* - * A small hint where the Applet Should be displayed - */ -int SimpleAppletImpl::position()const { +int SimpleApplet::position(){ 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 + * Here comes the implementation of the interface */ -Q_EXPORT_INTERFACE() { - Q_CREATE_INSTANCE( SimpleAppletImpl ) -} - +EXPORT_OPIE_APPLET_v1( SimpleApplet )
\ No newline at end of file diff --git a/examples/applet/simpleimpl.h b/examples/applet/simpleimpl.h index f58e2af..90c632f 100644 --- a/examples/applet/simpleimpl.h +++ b/examples/applet/simpleimpl.h @@ -1,77 +1,58 @@ /* * You may use, modify and distribute without any limitation */ /** * Opie and Qtopia uses a component system called QCOM * which was first part of the Qt 3.0 API but was made * prviate during the betas. Opie and Qtopia still use it * and we're happy with it. * Every starts with the QUnknownInterface. It supports functions * for reference counting and the most important one * is for a query. Every QCOM interface got a global unique id ( GUID,UUID ) * query is used to see if a interface is supported by * a dynamic shared object ( dso / plugin ) * For tasks like loading Applications, InputMethods, Today, MenuButton, * Taskbar, Style, Email Client there are specefic Interfaces you * need to implement. The interfaces inherits from QUnknownInterface and * you'll need inherit from the interface. * As example we will use the Taskbar interface + * the OTaskBarAppletWrapper implements the factory for us */ #ifndef SIMPLE_OPIE_EXAMPLE_APPLET_H #define SIMPLE_OPIE_EXAMPLE_APPLET_H /* * The taskbar applet interfaces wants us to implement position() and applet() * additionally we need to implement add(), release() and queryInterface for QUnknownInterface * luckiy there is a macro for the reference counting * We provide an Implementation of the interface. */ #include <qwidget.h> #include <qlist.h> #include <qpe/taskbarappletinterface.h> /* * Because we only draw an Icon in a fixed width and height * we declare and define SimpleApplet here and you could use QLabel * setPixmap or use QWidget and draw yourself. * You might also want to reimplement mouse*Event to use some simple actions */ class SimpleApplet : public QWidget { Q_OBJECT public: SimpleApplet(QWidget *parent); ~SimpleApplet(); + static int position(); private: void mousePressEvent( QMouseEvent* ); void paintEvent( QPaintEvent* ); QPixmap *m_pix; }; -class SimpleAppletImpl : public TaskbarAppletInterface { -public: - - SimpleAppletImpl(); - virtual ~SimpleAppletImpl(); - - QRESULT queryInterface( const QUuid&, QUnknownInterface** ); - - QWidget *applet( QWidget* parent ); - int position()const; - - /* - * macro for reference countint - * if reference drops to zero - * delete this is called - */ - Q_REFCOUNT - -private: - QList<SimpleApplet> m_applets; -}; #endif |