author | zecke <zecke> | 2004-03-14 20:08:59 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-03-14 20:08:59 (UTC) |
commit | 0d79c003839718ae70b3b997162044abd5c26bf6 (patch) (side-by-side diff) | |
tree | 19708b041da3a09df8f3b571cd634a846f4ad6d7 | |
parent | 05c8d999941989a97a581fb5822437034ec10fd7 (diff) | |
download | opie-0d79c003839718ae70b3b997162044abd5c26bf6.zip opie-0d79c003839718ae70b3b997162044abd5c26bf6.tar.gz opie-0d79c003839718ae70b3b997162044abd5c26bf6.tar.bz2 |
Update the Examples
-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 | ||||
-rw-r--r-- | examples/main-tab/config.in | 2 | ||||
-rw-r--r-- | examples/main-tab/example.pro | 2 | ||||
-rw-r--r-- | examples/main-tab/simple.cpp | 8 | ||||
-rw-r--r-- | examples/simple-icon/simple.cpp | 4 | ||||
-rw-r--r-- | examples/simple-main/simple.cpp | 3 | ||||
-rw-r--r-- | examples/simple-pim/config.in | 2 | ||||
-rw-r--r-- | examples/simple-pim/example.pro | 2 | ||||
-rw-r--r-- | examples/simple-pim/simple.cpp | 39 | ||||
-rw-r--r-- | examples/simple-pim/simple.h | 26 | ||||
-rw-r--r-- | examples/simple/simple.cpp | 4 | ||||
-rw-r--r-- | examples/todayplugin/config.in | 2 | ||||
-rw-r--r-- | examples/todayplugin/example.pro | 2 | ||||
-rw-r--r-- | examples/todayplugin/exampleplugin.h | 4 | ||||
-rw-r--r-- | examples/todayplugin/examplepluginimpl.h | 2 | ||||
-rw-r--r-- | examples/todayplugin/examplepluginwidget.cpp | 3 | ||||
-rw-r--r-- | examples/todayplugin/examplepluginwidget.h | 4 |
20 files changed, 76 insertions, 156 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 diff --git a/examples/main-tab/config.in b/examples/main-tab/config.in index e021d59..3a67bcb 100644 --- a/examples/main-tab/config.in +++ b/examples/main-tab/config.in @@ -1,4 +1,4 @@ config MAIN_TAB_EXAMPLE boolean "Mainwindow with OTabWidget example" default "y" - depends ( LIBQPE || LIBQPE-X11 ) && EXAMPLES && LIBOPIE + depends ( LIBQPE || LIBQPE-X11 ) && EXAMPLES && LIBOPIEUI2 diff --git a/examples/main-tab/example.pro b/examples/main-tab/example.pro index 3cafc20..87abf22 100644 --- a/examples/main-tab/example.pro +++ b/examples/main-tab/example.pro @@ -1,17 +1,17 @@ CONFIG += qt warn_on quick-app TARGET = main-tab HEADERS = simple.h SOURCES = simple.cpp INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include # we now also include opie -LIBS += -lqpe -lopie +LIBS += -lqpe -lopieui2 include ( $(OPIEDIR)/include.pro ) diff --git a/examples/main-tab/simple.cpp b/examples/main-tab/simple.cpp index c5a6d5a..7edb557 100644 --- a/examples/main-tab/simple.cpp +++ b/examples/main-tab/simple.cpp @@ -1,137 +1,139 @@ #include <qaction.h> // action #include <qmenubar.h> // menubar #include <qtoolbar.h> // toolbar #include <qlabel.h> // a label #include <qpushbutton.h> // the header file for the QPushButton #include <qlayout.h> #include <qpe/qpeapplication.h> // the QPEApplication #include <qpe/resource.h> #include <qpe/sound.h> -#include <opie/oapplicationfactory.h> // a template + macro to save the main method and allow quick launching -#include <opie/otabwidget.h> +#include <opie2/oapplicationfactory.h> // a template + macro to save the main method and allow quick launching +#include <opie2/otabwidget.h> #include "simple.h" /* * implementation of simple */ /* * The factory is used for quicklaunching * It needs a constructor ( c'tor ) with at least QWidget, const char* and WFlags as parameter and a static QString appName() matching the TARGET of the .pro * * Depending on the global quick launch setting this will create * either a main method or one for our component plugin system */ +/* The OApplicationFactory is in the Opie::Core namespace */ +using namespace Opie::Core; OPIE_EXPORT_APP( OApplicationFactory<MainWindow> ) MainWindow::MainWindow(QWidget *parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) { setCaption(tr("My MainWindow") ); initUI(); /* * Tab widget as central */ - OTabWidget *tab = new OTabWidget(this); + Opie::Ui::OTabWidget *tab = new Opie::Ui::OTabWidget(this); connect(tab, SIGNAL(currentChanged(QWidget*) ), this, SLOT( slotCurrentChanged(QWidget*) ) ); setCentralWidget( tab ); Simple1 *simple1 = new Simple1( this ); tab->addTab( simple1, "new", tr("Simple1") ); tab->setCurrentTab( tr("Simple1") ); Simple2 *simple2 = new Simple2( this ); tab->addTab( simple2, "trash", tr("Simple2") ); m_oldCurrent = simple1; connect(m_fire, SIGNAL(activated() ), simple1, SLOT(slotFire() ) ); } MainWindow::~MainWindow() { // again nothing to delete because Qt takes care } void MainWindow::setDocument( const QString& /*str*/ ) { } void MainWindow::slotCurrentChanged( QWidget *wid) { disconnect(m_fire, SIGNAL(activated() ), m_oldCurrent, SLOT(slotFire() ) ); connect(m_fire, SIGNAL(activated() ), wid, SLOT(slotFire() ) ); m_oldCurrent = wid; } void MainWindow::initUI() { setToolBarsMovable( false ); QToolBar *menuBarHolder = new QToolBar( this ); menuBarHolder->setHorizontalStretchable( true ); QMenuBar *mb = new QMenuBar( menuBarHolder ); QToolBar *tb = new QToolBar( this ); QPopupMenu *fileMenu = new QPopupMenu( this ); QAction *a = new QAction( tr("Quit"), Resource::loadIconSet("quit_icon"), QString::null, 0, this, "quit_action" ); /* * Connect quit to the QApplication quit slot */ connect(a, SIGNAL(activated() ), qApp, SLOT(quit() ) ); a->addTo( fileMenu ); a = new QAction(tr("Fire"), Resource::loadIconSet("new"), QString::null, 0, this, "fire_button"); /* see the power? */ a->addTo( fileMenu ); a->addTo( tb ); m_fire = a; mb->insertItem(tr("File"), fileMenu ); } Simple1::Simple1( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QVBoxLayout *layout = new QVBoxLayout( this ); layout->setSpacing( 8 ); layout->setMargin( 11 ); QLabel *lbl = new QLabel( this, "a name for the label" ); lbl->setText( tr("Click on the button or follow the white rabbit") ); layout->addWidget( lbl ); m_button = new QPushButton(this); m_button->setText( tr("Fire", "translatable quit string" ) ); layout->addWidget( m_button ); connect( m_button, SIGNAL(clicked() ), this, SLOT( slotFire() ) ); } Simple1::~Simple1() { } diff --git a/examples/simple-icon/simple.cpp b/examples/simple-icon/simple.cpp index 054ade8..fec1823 100644 --- a/examples/simple-icon/simple.cpp +++ b/examples/simple-icon/simple.cpp @@ -1,100 +1,100 @@ #include <qlabel.h> // a label #include <qpushbutton.h> // the header file for the QPushButton #include <qlayout.h> #include <qpe/qpeapplication.h> // the QPEApplication #include <qpe/resource.h> // for loading icon #include <qpe/sound.h> // for playing a sound -#include <opie/oapplicationfactory.h> // a template + macro to save the main method and allow quick launching +#include <opie2/oapplicationfactory.h> // a template + macro to save the main method and allow quick launching #include "simple.h" /* * implementation of simple */ /* * The factory is used for quicklaunching * It needs a constructor ( c'tor ) with at least QWidget, const char* and WFlags as parameter and a static QString appName() matching the TARGET of the .pro * * Depending on the global quick launch setting this will create * either a main method or one for our component plugin system */ - +using namespace Opie::Core; OPIE_EXPORT_APP( OApplicationFactory<Simple> ) Simple::Simple( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { /* * sets the caption of this toplevel widget * put all translatable string into tr() */ setCaption(tr("My Simple Application") ); /* * A simple vertical layout * either call layout->setAutoAdd( true ) * or use layout->addWidget( wid ) to add widgets */ QVBoxLayout *layout = new QVBoxLayout( this ); layout->setSpacing( 8 ); layout->setMargin( 11 ); /* * creates a label * The first parameter is this widget so the Label is a child * of us and will be deleted when we're deleted. */ QLabel *lbl = new QLabel( this, "a name for the label" ); /* * Resource will search hard for a Pixmap in $OPIEDIR/pics * to find 'logo/opielogo' You need to pass the subdir * but not the ending */ lbl->setPixmap( Resource::loadPixmap("logo/opielogo") ); layout->addWidget( lbl ); /* creates a button as child of this widget */ m_button = new QPushButton(this); /* * another way to call tr. The first parameter is the string * to translate and the second a hint to the translator */ m_button->setText( tr("Fire", "translatable fire string" ) ); layout->addWidget( m_button ); /* * Now we bring the action into it. The power of qt is the dynamic * signal and slots model * Usage is simple connect m_buttons clicked signal to our * slotQuit slot. * We could also have connected a SIGNAL to a SIGNAL or the clicked * signal directly to qApp and SLOT(quit() ) */ connect( m_button, SIGNAL(clicked() ), this, SLOT( slotQuit() ) ); } /* * Our destructor is empty because all child * widgets and layouts will be deleted by Qt. * Same applies to QObjects */ Simple::~Simple() { } void Simple::slotQuit() { /* * We will fire up a sound * Note that Sound will use Resource as well * and we do not need to supply an ending * sounds are found in $OPIEDIR/sounds */ Sound snd("hit_target01"); snd.play(); } diff --git a/examples/simple-main/simple.cpp b/examples/simple-main/simple.cpp index 8de911f..cf00cc6 100644 --- a/examples/simple-main/simple.cpp +++ b/examples/simple-main/simple.cpp @@ -1,122 +1,123 @@ #include <qaction.h> // action #include <qmenubar.h> // menubar #include <qtoolbar.h> // toolbar #include <qlabel.h> // a label #include <qpushbutton.h> // the header file for the QPushButton #include <qlayout.h> #include <qpe/qpeapplication.h> // the QPEApplication #include <qpe/resource.h> -#include <opie/oapplicationfactory.h> // a template + macro to save the main method and allow quick launching +#include <opie2/oapplicationfactory.h> // a template + macro to save the main method and allow quick launching #include "simple.h" /* * implementation of simple */ /* * The factory is used for quicklaunching * It needs a constructor ( c'tor ) with at least QWidget, const char* and WFlags as parameter and a static QString appName() matching the TARGET of the .pro * * Depending on the global quick launch setting this will create * either a main method or one for our component plugin system */ +using namespace Opie::Core; OPIE_EXPORT_APP( OApplicationFactory<MainWindow> ) MainWindow::MainWindow(QWidget *parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) { setCaption(tr("My MainWindow") ); setIcon( Resource::loadPixmap("new") ); /* * out mainwindow should have a menubar * a toolbar, a mainwidget and use Resource * to get the IconSets */ /* * we initialize the GUI in a different methid */ initUI(); Simple *simple = new Simple( this ); setCentralWidget( simple ); /* * If you use signal and slots do not include the parameter * names inside * so SIGNAL(fooBar(int) ) and NOT SIGNAL(fooBar(int foo) ) */ /* * We connect the activation of our QAction * to the slot connected to the firebutton * We could also connect the signal to the clicked * signal of the button */ connect(m_fire, SIGNAL(activated() ), simple, SLOT(slotFire() ) ); } MainWindow::~MainWindow() { // again nothing to delete because Qt takes care } /* * set Document is a special function used by Document * centric applications. * In example if Opie receives a Todo via IrDa it uses * setDocument via QCOP the IPC system to load the card * Or If you decide to open a file in filemanager with textedit * setDocument is called via IPC in textedit. * Also any call to QPE/Application/xyz and xyz is currently not running * leads to the start of xyz and delivering of the QCOP call * But more on QCOP in the next application */ void MainWindow::setDocument( const QString& /*str*/ ) { // in our case empty but you should see if it is a direct // file request or if it is a DocLnk. // A DocLnk is Link to an Document so you would end up // opening the document behind the file you got } /* * Two new concepts with this Method * 1. QAction. An action can be grouped and emits * an activated signal. Action a universal useable * you can just plug/addTo in most Qt widgets. For example * the same action can be plugged into a ToolBar, MenuBar, * QPopupMenu and other widgets but you do not need to worry * about it * * 2. an IconSet contains pixmaps and provides them scaled down, scaled up * enabled and disabled. SO if you use QIConSet and the toolbar * size changes to use big pixmaps you will not use upscaled icons * but the right ones thanks to QIconSet and Resource */ void MainWindow::initUI() { /* * We want to provde a File Menu with Quit as option * and a Fire Toolbutton ( QAction ) * So we need two actions * A toolbar and a popupMenu */ setToolBarsMovable( false ); /* *We don't want the static toolbar but share it with the * toolbar on small screens */ QToolBar *menuBarHolder = new QToolBar( this ); /* we allow the menubarholder to become bigger than * the screen width and to offer a > for the additional items */ menuBarHolder->setHorizontalStretchable( true ); QMenuBar *mb = new QMenuBar( menuBarHolder ); QToolBar *tb = new QToolBar( this ); QPopupMenu *fileMenu = new QPopupMenu( this ); /* * we create our first action with the Text Quit * a IconSet, no menu name, no acceleration ( keyboard shortcut ), diff --git a/examples/simple-pim/config.in b/examples/simple-pim/config.in index 5d80f21..aa1a426 100644 --- a/examples/simple-pim/config.in +++ b/examples/simple-pim/config.in @@ -1,4 +1,4 @@ config SIMPLE_PIM_EXAMPLE boolean "Mainwindow with PIM and QCOP usage" default "y" - depends ( LIBQPE || LIBQPE-X11 ) && EXAMPLES && LIBOPIE + depends ( LIBQPE || LIBQPE-X11 ) && EXAMPLES && LIBOPIEPIM2 diff --git a/examples/simple-pim/example.pro b/examples/simple-pim/example.pro index c3aab53..ebcdb2b 100644 --- a/examples/simple-pim/example.pro +++ b/examples/simple-pim/example.pro @@ -1,17 +1,17 @@ CONFIG += qt warn_on quick-app TARGET = simple-pim HEADERS = simple.h SOURCES = simple.cpp INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include # we now also include opie -LIBS += -lqpe -lopie +LIBS += -lqpe -lopiepim2 -lopieui2 include ( $(OPIEDIR)/include.pro ) diff --git a/examples/simple-pim/simple.cpp b/examples/simple-pim/simple.cpp index 029e71b..50905bf 100644 --- a/examples/simple-pim/simple.cpp +++ b/examples/simple-pim/simple.cpp @@ -1,445 +1,446 @@ #include <qaction.h> // action #include <qmenubar.h> // menubar #include <qtoolbar.h> // toolbar #include <qlabel.h> // a label #include <qpushbutton.h> // the header file for the QPushButton #include <qlayout.h> #include <qtimer.h> // we use it for the singleShot #include <qdatetime.h> // for QDate #include <qtextview.h> // a rich text widget #include <qdialog.h> #include <qwhatsthis.h> // for whats this #include <qpe/qpeapplication.h> // the QPEApplication #include <qpe/resource.h> #include <qpe/sound.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/datebookmonth.h> #include <qpe/timestring.h> -#include <opie/oapplicationfactory.h> // a template + macro to save the main method and allow quick launching -#include <opie/otabwidget.h> -#include <opie/owait.h> +#include <opie2/oapplicationfactory.h> // a template + macro to save the main method and allow quick launching +#include <opie2/otabwidget.h> +#include <opie2/owait.h> #include "simple.h" /* * implementation of simple */ /* * The factory is used for quicklaunching * It needs a constructor ( c'tor ) with at least QWidget, const char* and WFlags as parameter and a static QString appName() matching the TARGET of the .pro * * Depending on the global quick launch setting this will create * either a main method or one for our component plugin system */ +using namespace Opie::Core; OPIE_EXPORT_APP( OApplicationFactory<MainWindow> ) MainWindow::MainWindow(QWidget *parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) { setCaption(tr("My MainWindow") ); m_desktopChannel = 0; m_loading = 0; initUI(); /* * Tab widget as central */ - m_tab = new OTabWidget(this); + m_tab = new Opie::Ui::OTabWidget(this); setCentralWidget( m_tab ); m_todoView = new PIMListView(m_tab, "Todo view" ); m_tab->addTab( m_todoView,"todo/TodoList", tr("Todos") ); m_dateView = new PIMListView(m_tab, "Datebook view" ); m_tab->addTab( m_dateView, "datebook/DateBook", tr("Events") ); /* now connect the actions */ /* * we connect the activated to our show * and on activation we will show a detailed * summary of the record */ connect(m_fire, SIGNAL(activated() ), this, SLOT(slotShow() ) ); /* * We will change the date */ connect(m_dateAction, SIGNAL(activated() ), this, SLOT(slotDate() ) ); /* * connect the show signal of the PIMListView * to a slot to show a dialog */ connect(m_todoView, SIGNAL(showRecord(const OPimRecord&) ), this, SLOT(slotShowRecord(const OPimRecord&) ) ); connect(m_dateView, SIGNAL(showRecord(const OPimRecord&) ), this, SLOT(slotShowRecord(const OPimRecord&) ) ); /* * Now comes the important lines of code for this example * We do not directly call load but delay loading until * all Events are dispatches and handled. * SO we will load once our window is mapped to screen * to achieve that we use a QTimer::singleShot * After 10 milli seconds the timer fires and on TimerEvent * out slot slotLoad will be called * Remember this a Constructor to construct your object and not * to load */ QTimer::singleShot( 10, this, SLOT(slotLoad() ) ); } MainWindow::~MainWindow() { // again nothing to delete because Qt takes care } void MainWindow::setDocument( const QString& /*str*/ ) { } void MainWindow::initUI() { setToolBarsMovable( false ); QToolBar *menuBarHolder = new QToolBar( this ); menuBarHolder->setHorizontalStretchable( true ); QMenuBar *mb = new QMenuBar( menuBarHolder ); QToolBar *tb = new QToolBar( this ); QPopupMenu *fileMenu = new QPopupMenu( this ); QAction *a = new QAction( tr("Quit"), Resource::loadIconSet("quit_icon"), QString::null, 0, this, "quit_action" ); /* * Connect quit to the QApplication quit slot */ connect(a, SIGNAL(activated() ), qApp, SLOT(quit() ) ); a->addTo( fileMenu ); a = new QAction(tr("View Current"), Resource::loadIconSet("zoom"), QString::null, 0, this, "view current"); /* a simple whats this online explanation of out button */ a->setWhatsThis(tr("Views the current record") ); /* or QWhatsThis::add(widget, "description" ); */ /* see the power? */ a->addTo( fileMenu ); a->addTo( tb ); m_fire = a; a = new QAction(tr("Choose Date"), Resource::loadIconSet("day"), QString::null, 0, this, "choose date" ); a->addTo( fileMenu ); a->addTo( tb ); m_dateAction = a; mb->insertItem(tr("File"), fileMenu ); } void MainWindow::slotLoad() { /* * There is no real shared access in the PIM API * It wasn't finish cause of health problems of one * of the authors so we do something fancy and use QCOP * the IPC system to get a current copy */ /* NOTES to QCOP: QCOP operates over channels and use QDataStream * to send data. You can check if a channel isRegistered or hook * yourself to that channel. A Channel is QCString and normally * prefix with QPE/ and then the system in example QPE/System, * QPE/Desktop a special channel is the application channel * it QPE/Application/appname this channel gets created on app * startup by QPEApplication. QCOP is asynchronous * * To send you'll use QCopEnevelope * */ /* * What we will do is first is get to know if either * datebook or todolist are running if so we will kindly * asked to save the data for us. * If neither are running we can load directly */ if (!QCopChannel::isRegistered("QPE/Application/todolist") && !QCopChannel::isRegistered("QPE/Application/datebook") ) { m_db.load(); m_tb.load(); return slotLoadForDay( QDate::currentDate() ); } /* * prepare our answer machine the QCopChannel * QPE/Desktop will send "flushDone(QString)" when * the flush is done it emits a signal on receive */ m_desktopChannel = new QCopChannel("QPE/Desktop"); connect(m_desktopChannel, SIGNAL(received(const QCString&,const QByteArray&) ), this, SLOT(slotDesktopReceive(const QCString&,const QByteArray&) ) ); /* the numberof synced channels will be set to zero */ m_synced = 0; /* * We use {} around the QCopEnvelope because it sends its * data on destruction of QCopEnvelope with */ /* check again if not present increment synced*/ if ( QCopChannel::isRegistered("QPE/Application/todolist") ) { QCopEnvelope env("QPE/Application/todolist", "flush()" ); // env << data; but we do not have any parameters here }else m_synced++; if ( QCopChannel::isRegistered("QPE/Application/datebook") ) { QCopEnvelope env("QPE/Application/datebook", "flush()" ); }else m_synced++; /* we will provide a wait scrren */ - m_loading = new OWait(this, "wait screen" ); + m_loading = new Opie::Ui::OWait(this, "wait screen" ); } void MainWindow::slotDesktopReceive(const QCString& cmd, const QByteArray& data ) { /* the bytearray was filled with the QDataStream now * we open it read only to get the value(s) */ QDataStream stream(data, IO_ReadOnly ); /* * we're only interested in the flushDone */ if ( cmd == "flushDone(QString)" ) { QString appname; stream >> appname; // get the first argument out of stream if (appname == QString::fromLatin1("datebook") || appname == QString::fromLatin1("todolist") ) m_synced++; } /* * If we synced both we can go ahead * In future this is not needed anymore when we finally * implemented X-Ref and other PIM features */ if (m_synced >= 2 ) { delete m_loading; delete m_desktopChannel; /* now we finally can start doing the actual loading */ m_tb.load(); m_db.load(); { /* tell the applications to reload */ QCopEnvelope("QPE/Application/todolist", "reload()"); QCopEnvelope("QPE/Application/datebook", "reload()"); } slotLoadForDay( QDate::currentDate() ); } } /* overloaded member for shortcoming of libqpe */ void MainWindow::slotLoadForDay(int y, int m, int d) { /* year,month, day */ slotLoadForDay( QDate(y, m, d ) ); } void MainWindow::slotLoadForDay(const QDate& date) { /* all todos for today including the ones without dueDate */ m_todoView->set( m_tb.effectiveToDos(date, date ) ); m_dateView->set( m_db.effectiveEvents( date, date ) ); } /* we want to show the current record */ void MainWindow::slotShow() { /* we only added PIMListViews so we can safely cast */ PIMListView *view = static_cast<PIMListView*>(m_tab->currentWidget() ); /* ask the view to send a signal */ view->showCurrentRecord(); } /* as answer this slot will be called */ -void MainWindow::slotShowRecord( const OPimRecord& rec) { +void MainWindow::slotShowRecord( const Opie::OPimRecord& rec) { /* got a parent but still is a toplevel MODAL dialog */ QDialog* dia = new QDialog(this,"dialog",TRUE ); QVBoxLayout *box = new QVBoxLayout( dia ); dia->setCaption( tr("View Record") ); QTextView *view = new QTextView(dia ); view->setText( rec.toRichText() ); box->addWidget( view ); /* * execute via QPEApplication * this allows QPEApplication to make a sane decision * on the size */ dia->showMaximized(); QPEApplication::execDialog( dia ); delete dia; } void MainWindow::slotDate() { /* * called by the action we will show a Popup * at the current mouse position with a DateChooser * to select the day */ qWarning("slot Date"); QPopupMenu *menu = new QPopupMenu(); /* A Month to select a date from TRUE for auto close */ DateBookMonth *month = new DateBookMonth(menu, 0, true ); connect(month, SIGNAL(dateClicked(int,int,int) ), this, SLOT(slotLoadForDay(int,int,int) ) ); menu->insertItem( month ); menu->exec( QCursor::pos() ); /* * we do not need to delete month because * we delete its parent menu */ delete menu; } /* * An anonymous namespace this symbol is only available here * so truely private */ namespace { /* not static cause namespace does that what static would do */ const int RTTI = 5050; /* * every ListView got Items. we've special pim items * holding ownership and the pointer to a pim record * it can't hold a pimrecord directly because this * would introduce slicing... any break */ /* * A struct is a special class. Everything is public by * default. */ struct PIMListViewItem : public QListViewItem { /* *currently no hierachies are planed for the example * so only one constructor with a QListView as parent */ - PIMListViewItem( QListView*, OPimRecord* record ); + PIMListViewItem( QListView*, Opie::OPimRecord* record ); ~PIMListViewItem(); /* used by the QListViewItem to easily allow identifiying of different * items. Values greater than 1000 should be used */ int rtti()const; - OPimRecord* record()const; + Opie::OPimRecord* record()const; private: - OPimRecord* m_record; + Opie::OPimRecord* m_record; }; - PIMListViewItem::PIMListViewItem( QListView *p, OPimRecord* rec ) + PIMListViewItem::PIMListViewItem( QListView *p, Opie::OPimRecord* rec ) : QListViewItem(p), m_record( rec ) { } PIMListViewItem::~PIMListViewItem() { /* we've the onwership so we need to delete it */ delete m_record; } - OPimRecord* PIMListViewItem::record()const { + Opie::OPimRecord* PIMListViewItem::record()const { return m_record; } } PIMListView::PIMListView( QWidget* widget, const char* name, WFlags fl ) : QListView(widget, name, fl ) { addColumn("Summary"); } PIMListView::~PIMListView() { } -void PIMListView::set( OTodoAccess::List list ) { +void PIMListView::set( Opie::OPimTodoAccess::List list ) { /* clear first and then add new items */ clear(); - OTodoAccess::List::Iterator it; + Opie::OPimTodoAccess::List::Iterator it; for (it = list.begin(); it != list.end(); ++it ) { /* * make a new item which automatically gets added to the listview - * and call the copy c'tor to create a new OTodo + * and call the copy c'tor to create a new OPimTodo */ - PIMListViewItem *i = new PIMListViewItem(this, new OTodo( *it ) ); + PIMListViewItem *i = new PIMListViewItem(this, new Opie::OPimTodo( *it ) ); i->setText(0, (*it).summary() ); } } -void PIMListView::set( const OEffectiveEvent::ValueList& lst ) { +void PIMListView::set( const Opie::OEffectiveEvent::ValueList& lst ) { /* clear first and then add items */ clear(); - OEffectiveEvent::ValueList::ConstIterator it; + Opie::OEffectiveEvent::ValueList::ConstIterator it; for ( it = lst.begin(); it != lst.end(); ++it ) { - PIMListViewItem *i = new PIMListViewItem(this, new OEvent( (*it).event() ) ); + PIMListViewItem *i = new PIMListViewItem(this, new Opie::OPimEvent( (*it).event() ) ); i->setText( 0, PIMListView::makeString( (*it) ) ); } } void PIMListView::showCurrentRecord() { /* it could be possible that their is no currentItem */ if (!currentItem() ) return; /* * we only add PIMListViewItems so it is save * to do this case. If this would not be the case * use rtti() to check in a switch() case */ PIMListViewItem *item = static_cast<PIMListViewItem*>( currentItem() ); /* finally you see how to emit a signal */ emit showRecord( (*item->record() ) ); } -QString PIMListView::makeString( const OEffectiveEvent& ev ) { +QString PIMListView::makeString( const Opie::OEffectiveEvent& ev ) { QString str; str += ev.description(); if ( !ev.event().isAllDay() ) { if ( ev.startDate() != ev.endDate() ) { str += tr("Start ") + TimeString::timeString( ev.event().startDateTime().time() ); str += " - " + TimeString::longDateString( ev.startDate() ); str += tr("End ") + TimeString::timeString( ev.event().endDateTime().time() ); str += " - " + TimeString::longDateString( ev.endDate() ); }else{ str += tr("Time ") + TimeString::timeString( ev.startTime() ); str += " - " + TimeString::timeString( ev.endTime() ); } }else str += tr(" This is an All-Day Event"); return str; } diff --git a/examples/simple-pim/simple.h b/examples/simple-pim/simple.h index bf9ede7..2a6e8ce 100644 --- a/examples/simple-pim/simple.h +++ b/examples/simple-pim/simple.h @@ -1,95 +1,99 @@ /* * A Simple widget with a button to quit * */ /* * The below sequence is called a guard and guards * against multiple inclusion of header files * NOTE: you need to use unique names among the header files */ #ifndef QUIET_SIMPLE_DEMO_H #define QUIET_SIMPLE_DEMO_H #include <qmainwindow.h> // from this class we will inherit #include <qlistview.h> // A ListView for our PIM records -#include <opie/otodoaccess.h> -#include <opie/odatebookaccess.h> +#include <opie2/otodoaccess.h> +#include <opie2/odatebookaccess.h> class QPushButton; // forward declaration to not include the header. This can save time when compiling class QAction; class PIMListView; class QDate; class QCopChannel; +namespace Opie{ +namespace Ui { class OWait; class OTabWidget; +} +} /* * A mainwindow is a special QWidget it helps layouting * toolbar, statusbar, menubar. Got dockable areas * So in one sentence it is a MainWindow :) */ class MainWindow : public QMainWindow { Q_OBJECT public: static QString appName() { return QString::fromLatin1("simple-pim"); } MainWindow( QWidget* parent, const char* name, WFlags fl ); ~MainWindow(); public slots: void setDocument( const QString& ); private slots: void slotDesktopReceive( const QCString&, const QByteArray& ); void slotLoad(); void slotLoadForDay(int, int, int ); void slotLoadForDay(const QDate&); void slotShow(); void slotDate(); - void slotShowRecord( const OPimRecord& ); + void slotShowRecord( const Opie::OPimRecord& ); private: void initUI(); QAction *m_fire; QAction *m_dateAction; - OTabWidget* m_tab; + Opie::Ui::OTabWidget* m_tab; - OTodoAccess m_tb; - ODateBookAccess m_db; + Opie::OPimTodoAccess m_tb; + Opie::ODateBookAccess m_db; PIMListView *m_todoView; PIMListView *m_dateView; int m_synced; // a counter for synced objects.. QCopChannel *m_desktopChannel; - OWait *m_loading; + Opie::Ui::OWait *m_loading; }; /* * Instead of the simple QWidgets we will design * a new widget based on a QListView * it should show either Todos or EffectiveEvents */ class PIMListView : public QListView { Q_OBJECT public: PIMListView( QWidget* parent, const char* name, WFlags fl= 0 ); ~PIMListView(); - void set( OTodoAccess::List ); - void set( const OEffectiveEvent::ValueList& ); + void set( Opie::OPimTodoAccess::List ); + void set( const Opie::OEffectiveEvent::ValueList& ); void showCurrentRecord(); signals: - void showRecord( const OPimRecord& ); + void showRecord( const Opie::OPimRecord& ); private: - static QString makeString( const OEffectiveEvent& ev ); + static QString makeString( const Opie::OEffectiveEvent& ev ); }; #endif diff --git a/examples/simple/simple.cpp b/examples/simple/simple.cpp index a0bc308..faf13c9 100644 --- a/examples/simple/simple.cpp +++ b/examples/simple/simple.cpp @@ -1,89 +1,91 @@ #include <qlabel.h> // a label #include <qpushbutton.h> // the header file for the QPushButton #include <qlayout.h> #include <qpe/qpeapplication.h> // the QPEApplication -#include <opie/oapplicationfactory.h> // a template + macro to save the main method and allow quick launching +#include <opie2/oapplicationfactory.h> // a template + macro to save the main method and allow quick launching #include "simple.h" /* * implementation of simple */ /* * The factory is used for quicklaunching * It needs a constructor ( c'tor ) with at least QWidget, const char* and WFlags as parameter and a static QString appName() matching the TARGET of the .pro * * Depending on the global quick launch setting this will create * either a main method or one for our component plugin system */ +/* The OApplicationFactory is in Opie::Core */ +using namespace Opie::Core; OPIE_EXPORT_APP( OApplicationFactory<Simple> ) Simple::Simple( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { /* * sets the caption of this toplevel widget * put all translatable string into tr() */ setCaption(tr("My Simple Application") ); /* * A simple vertical layout * either call layout->setAutoAdd( true ) * or use layout->addWidget( wid ) to add widgets */ QVBoxLayout *layout = new QVBoxLayout( this ); layout->setSpacing( 8 ); layout->setMargin( 11 ); /* * creates a label * The first parameter is this widget so the Label is a child * of us and will be deleted when we're deleted. */ QLabel *lbl = new QLabel( this, "a name for the label" ); lbl->setText( tr("Click on the button or follow the white rabbit") ); layout->addWidget( lbl ); /* creates a button as child of this widget */ m_button = new QPushButton(this); /* * another way to call tr. The first parameter is the string * to translate and the second a hint to the translator */ m_button->setText( tr("Quit", "translatable quit string" ) ); layout->addWidget( m_button ); /* * Now we bring the action into it. The power of qt is the dynamic * signal and slots model * Usage is simple connect m_buttons clicked signal to our * slotQuit slot. * We could also have connected a SIGNAL to a SIGNAL or the clicked * signal directly to qApp and SLOT(quit() ) */ connect( m_button, SIGNAL(clicked() ), this, SLOT( slotQuit() ) ); } /* * Our destructor is empty because all child * widgets and layouts will be deleted by Qt. * Same applies to QObjects */ Simple::~Simple() { } void Simple::slotQuit() { /* * we will close this window and Qt will recognize that * the last window was closed and initiate a shutdown */ close(); } diff --git a/examples/todayplugin/config.in b/examples/todayplugin/config.in index 53004cb..0a6a573 100644 --- a/examples/todayplugin/config.in +++ b/examples/todayplugin/config.in @@ -1,5 +1,5 @@ config TODAY_EXAMPLE boolean "Opie-Today Plugin Example" default "n" - depends ( LIBQPE || LIBQPE-X11 ) && EXAMPLES && LIBOPIE + depends ( LIBQPE || LIBQPE-X11 ) && EXAMPLES && LIBOPIEUI2 diff --git a/examples/todayplugin/example.pro b/examples/todayplugin/example.pro index 4c8c942..f4bca36 100644 --- a/examples/todayplugin/example.pro +++ b/examples/todayplugin/example.pro @@ -1,17 +1,17 @@ TEMPLATE = lib CONFIG -= moc CONFIG += qt release # Input HEADERS = exampleplugin.h examplepluginimpl.h examplepluginwidget.h SOURCES = exampleplugin.cpp examplepluginimpl.cpp examplepluginwidget.cpp INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include -LIBS+= -lqpe -lopie +LIBS+= -lqpe -lopieui2 DESTDIR = $(OPIEDIR)/plugins/today TARGET = todayexampleplugin include ( $(OPIEDIR)/include.pro ) diff --git a/examples/todayplugin/exampleplugin.h b/examples/todayplugin/exampleplugin.h index a1df923..94f5b37 100644 --- a/examples/todayplugin/exampleplugin.h +++ b/examples/todayplugin/exampleplugin.h @@ -1,42 +1,42 @@ /* * exampleplugin.h * * email : harlekin@handhelds.org * */ #ifndef EXAMPLE_PLUGIN_H #define EXAMPLE_PLUGIN_H #include <qwidget.h> #include <qguardedptr.h> -#include <opie/todayplugininterface.h> -#include <opie/todayconfigwidget.h> +#include <opie2/todayplugininterface.h> +#include <opie2/todayconfigwidget.h> #include "examplepluginwidget.h" // implementation of the today plugin interface class ExamplePlugin : public TodayPluginObject { public: ExamplePlugin(); ~ExamplePlugin(); QString pluginName() const; double versionNumber() const; QString pixmapNameWidget() const; QWidget* widget(QWidget *); QString pixmapNameConfig() const; TodayConfigWidget* configWidget(QWidget *); QString appName() const; bool excludeFromRefresh() const; void refresh(); void reinitialize(); private: QGuardedPtr<ExamplePluginWidget> m_widget; }; #endif diff --git a/examples/todayplugin/examplepluginimpl.h b/examples/todayplugin/examplepluginimpl.h index 77ec4f6..31f8907 100644 --- a/examples/todayplugin/examplepluginimpl.h +++ b/examples/todayplugin/examplepluginimpl.h @@ -1,30 +1,30 @@ /* * examplepluginimpl.h * * email : harlekin@handhelds.org * */ #ifndef EXAMPLE_PLUGIN_IMPL_H #define EXAMPLE_PLUGIN_IMPL_H -#include <opie/todayplugininterface.h> +#include <opie2/todayplugininterface.h> class ExamplePlugin; class ExamplePluginImpl : public TodayPluginInterface{ public: ExamplePluginImpl(); virtual ~ExamplePluginImpl(); QRESULT queryInterface( const QUuid &, QUnknownInterface** ); Q_REFCOUNT virtual TodayPluginObject *guiPart(); private: ExamplePlugin *examplePlugin; }; #endif diff --git a/examples/todayplugin/examplepluginwidget.cpp b/examples/todayplugin/examplepluginwidget.cpp index d66a11a..10fd39a 100644 --- a/examples/todayplugin/examplepluginwidget.cpp +++ b/examples/todayplugin/examplepluginwidget.cpp @@ -1,62 +1,63 @@ /* * examplepluginwidget.cpp * * email : harlekin@handhelds.org * */ #include <qpe/config.h> #include <qpe/qcopenvelope_qws.h> #include "examplepluginwidget.h" + ExamplePluginWidget::ExamplePluginWidget( QWidget *parent, const char* name) : QWidget(parent, name ) { m_exampleLabel = 0l; m_layout = 0l; if ( m_exampleLabel ) { delete m_exampleLabel; } // since here a OClickableLabel is used, the plugin part will be clickable, and the actions // that should be triggered when clicked are defined in slotClicked() // of course also normal widgets can be used. - m_exampleLabel = new OClickableLabel( this ); + m_exampleLabel = new Opie::Ui::OClickableLabel( this ); connect( m_exampleLabel, SIGNAL( clicked() ), this, SLOT( slotClicked() ) ); if ( m_layout ) { delete m_layout; } m_layout = new QHBoxLayout( this ); m_layout->setAutoAdd( true ); readConfig(); getInfo(); } ExamplePluginWidget::~ExamplePluginWidget() { delete m_exampleLabel; delete m_layout; } void ExamplePluginWidget::readConfig() { // we dont have any config entries in this plugin // normally this method is used after today config was used } void ExamplePluginWidget::refresh() { } void ExamplePluginWidget::getInfo() { m_exampleLabel->setText( tr("Example text") ); } void ExamplePluginWidget::slotClicked() { getInfo(); } diff --git a/examples/todayplugin/examplepluginwidget.h b/examples/todayplugin/examplepluginwidget.h index eb3c660..70e717e 100644 --- a/examples/todayplugin/examplepluginwidget.h +++ b/examples/todayplugin/examplepluginwidget.h @@ -1,35 +1,35 @@ /* * examplepluginwidget.h * * email : harlekin@handhelds.org * */ #ifndef EXAMPLE_PLUGIN_WIDGET_H #define EXAMPLE_PLUGIN_WIDGET_H #include <qlayout.h> -#include <opie/oclickablelabel.h> +#include <opie2/oclickablelabel.h> class ExamplePluginWidget : public QWidget { Q_OBJECT public: ExamplePluginWidget( QWidget *parent, const char *name ); ~ExamplePluginWidget(); void refresh(); private slots: void slotClicked(); private: - OClickableLabel* m_exampleLabel; + Opie::Ui::OClickableLabel* m_exampleLabel; QHBoxLayout* m_layout; void readConfig(); void getInfo(); }; #endif |