summaryrefslogtreecommitdiff
path: root/examples/simple-pim/simple.cpp
Unidiff
Diffstat (limited to 'examples/simple-pim/simple.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--examples/simple-pim/simple.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/examples/simple-pim/simple.cpp b/examples/simple-pim/simple.cpp
index 00c5600..6019d04 100644
--- a/examples/simple-pim/simple.cpp
+++ b/examples/simple-pim/simple.cpp
@@ -1,252 +1,252 @@
1/* We use a sane order of include files, from the most special to the least special 1/* We use a sane order of include files, from the most special to the least special
2 That helps to reduce the number of implicit includes hence increases the reuse */ 2 That helps to reduce the number of implicit includes hence increases the reuse */
3 3
4/* First the local include files */ 4/* First the local include files */
5#include "simple.h" 5#include "simple.h"
6 6
7/* Then the Ope include files. 7/* Then the Ope include files.
8This includes qpe stuff which will eventually be merged with libopie2 */ 8This includes qpe stuff which will eventually be merged with libopie2 */
9#include <opie2/odebug.h> // for odebug streams 9#include <opie2/odebug.h> // for odebug streams
10#include <opie2/oapplicationfactory.h> // a template + macro to save the main method and allow quick launching 10#include <opie2/oapplicationfactory.h> // a template + macro to save the main method and allow quick launching
11#include <opie2/oresource.h>
11#include <opie2/otabwidget.h> 12#include <opie2/otabwidget.h>
12#include <opie2/owait.h> 13#include <opie2/owait.h>
13#include <qpe/qpeapplication.h> // the QPEApplication 14#include <qpe/qpeapplication.h> // the QPEApplication
14#include <qpe/resource.h>
15#include <qpe/sound.h> 15#include <qpe/sound.h>
16#include <qpe/qcopenvelope_qws.h> 16#include <qpe/qcopenvelope_qws.h>
17#include <qpe/datebookmonth.h> 17#include <qpe/datebookmonth.h>
18#include <qpe/timestring.h> 18#include <qpe/timestring.h>
19using namespace Opie::Core; 19using namespace Opie::Core;
20 20
21/* Now the Qt includes */ 21/* Now the Qt includes */
22#include <qaction.h> // action 22#include <qaction.h> // action
23#include <qmenubar.h> // menubar 23#include <qmenubar.h> // menubar
24#include <qtoolbar.h> // toolbar 24#include <qtoolbar.h> // toolbar
25#include <qlabel.h> // a label 25#include <qlabel.h> // a label
26#include <qpushbutton.h> // the header file for the QPushButton 26#include <qpushbutton.h> // the header file for the QPushButton
27#include <qlayout.h> 27#include <qlayout.h>
28#include <qtimer.h> // we use it for the singleShot 28#include <qtimer.h> // we use it for the singleShot
29#include <qdatetime.h> // for QDate 29#include <qdatetime.h> // for QDate
30#include <qtextview.h> // a rich text widget 30#include <qtextview.h> // a rich text widget
31#include <qdialog.h> 31#include <qdialog.h>
32#include <qwhatsthis.h> // for whats this 32#include <qwhatsthis.h> // for whats this
33 33
34/* Add standard includes here if you need some 34/* Add standard includes here if you need some
35 Examples are: stdlib.h, socket.h, etc. */ 35 Examples are: stdlib.h, socket.h, etc. */
36 36
37/* 37/*
38 * implementation of simple 38 * implementation of simple
39 */ 39 */
40 40
41/* 41/*
42 * The factory is used for quicklaunching 42 * The factory is used for quicklaunching
43 * 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 43 * 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
44 * 44 *
45 * Depending on the global quick launch setting this will create 45 * Depending on the global quick launch setting this will create
46 * either a main method or one for our component plugin system 46 * either a main method or one for our component plugin system
47 */ 47 */
48 48
49OPIE_EXPORT_APP( OApplicationFactory<MainWindow> ) 49OPIE_EXPORT_APP( OApplicationFactory<MainWindow> )
50 50
51MainWindow::MainWindow(QWidget *parent, const char* name, WFlags fl ) 51MainWindow::MainWindow(QWidget *parent, const char* name, WFlags fl )
52 : QMainWindow( parent, name, fl ) { 52 : QMainWindow( parent, name, fl ) {
53 setCaption(tr("My MainWindow") ); 53 setCaption(tr("My MainWindow") );
54 54
55 m_desktopChannel = 0; 55 m_desktopChannel = 0;
56 m_loading = 0; 56 m_loading = 0;
57 57
58 initUI(); 58 initUI();
59 59
60 60
61 /* 61 /*
62 * Tab widget as central 62 * Tab widget as central
63 */ 63 */
64 m_tab = new Opie::Ui::OTabWidget(this); 64 m_tab = new Opie::Ui::OTabWidget(this);
65 65
66 setCentralWidget( m_tab ); 66 setCentralWidget( m_tab );
67 67
68 m_todoView = new PIMListView(m_tab, "Todo view" ); 68 m_todoView = new PIMListView(m_tab, "Todo view" );
69 m_tab->addTab( m_todoView,"todo/TodoList", tr("Todos") ); 69 m_tab->addTab( m_todoView,"todo/TodoList", tr("Todos") );
70 70
71 m_dateView = new PIMListView(m_tab, "Datebook view" ); 71 m_dateView = new PIMListView(m_tab, "Datebook view" );
72 m_tab->addTab( m_dateView, "datebook/DateBook", tr("Events") ); 72 m_tab->addTab( m_dateView, "datebook/DateBook", tr("Events") );
73 73
74 /* now connect the actions */ 74 /* now connect the actions */
75 /* 75 /*
76 * we connect the activated to our show 76 * we connect the activated to our show
77 * and on activation we will show a detailed 77 * and on activation we will show a detailed
78 * summary of the record 78 * summary of the record
79 */ 79 */
80 connect(m_fire, SIGNAL(activated() ), 80 connect(m_fire, SIGNAL(activated() ),
81 this, SLOT(slotShow() ) ); 81 this, SLOT(slotShow() ) );
82 82
83 /* 83 /*
84 * We will change the date 84 * We will change the date
85 */ 85 */
86 connect(m_dateAction, SIGNAL(activated() ), 86 connect(m_dateAction, SIGNAL(activated() ),
87 this, SLOT(slotDate() ) ); 87 this, SLOT(slotDate() ) );
88 88
89 /* 89 /*
90 * connect the show signal of the PIMListView 90 * connect the show signal of the PIMListView
91 * to a slot to show a dialog 91 * to a slot to show a dialog
92 */ 92 */
93 connect(m_todoView, SIGNAL(showRecord(const Opie::OPimRecord&) ), 93 connect(m_todoView, SIGNAL(showRecord(const Opie::OPimRecord&) ),
94 this, SLOT(slotShowRecord(const Opie::OPimRecord&) ) ); 94 this, SLOT(slotShowRecord(const Opie::OPimRecord&) ) );
95 connect(m_dateView, SIGNAL(showRecord(const Opie::OPimRecord&) ), 95 connect(m_dateView, SIGNAL(showRecord(const Opie::OPimRecord&) ),
96 this, SLOT(slotShowRecord(const Opie::OPimRecord&) ) ); 96 this, SLOT(slotShowRecord(const Opie::OPimRecord&) ) );
97 97
98 /* 98 /*
99 * Now comes the important lines of code for this example 99 * Now comes the important lines of code for this example
100 * We do not directly call load but delay loading until 100 * We do not directly call load but delay loading until
101 * all Events are dispatches and handled. 101 * all Events are dispatches and handled.
102 * SO we will load once our window is mapped to screen 102 * SO we will load once our window is mapped to screen
103 * to achieve that we use a QTimer::singleShot 103 * to achieve that we use a QTimer::singleShot
104 * After 10 milli seconds the timer fires and on TimerEvent 104 * After 10 milli seconds the timer fires and on TimerEvent
105 * out slot slotLoad will be called 105 * out slot slotLoad will be called
106 * Remember this a Constructor to construct your object and not 106 * Remember this a Constructor to construct your object and not
107 * to load 107 * to load
108 */ 108 */
109 QTimer::singleShot( 10, this, SLOT(slotLoad() ) ); 109 QTimer::singleShot( 10, this, SLOT(slotLoad() ) );
110} 110}
111 111
112MainWindow::~MainWindow() { 112MainWindow::~MainWindow() {
113 // again nothing to delete because Qt takes care 113 // again nothing to delete because Qt takes care
114} 114}
115 115
116 116
117void MainWindow::setDocument( const QString& /*str*/ ) { 117void MainWindow::setDocument( const QString& /*str*/ ) {
118} 118}
119 119
120 120
121void MainWindow::initUI() { 121void MainWindow::initUI() {
122 122
123 setToolBarsMovable( false ); 123 setToolBarsMovable( false );
124 124
125 QToolBar *menuBarHolder = new QToolBar( this ); 125 QToolBar *menuBarHolder = new QToolBar( this );
126 126
127 menuBarHolder->setHorizontalStretchable( true ); 127 menuBarHolder->setHorizontalStretchable( true );
128 QMenuBar *mb = new QMenuBar( menuBarHolder ); 128 QMenuBar *mb = new QMenuBar( menuBarHolder );
129 QToolBar *tb = new QToolBar( this ); 129 QToolBar *tb = new QToolBar( this );
130 130
131 QPopupMenu *fileMenu = new QPopupMenu( this ); 131 QPopupMenu *fileMenu = new QPopupMenu( this );
132 132
133 133
134 QAction *a = new QAction( tr("Quit"), Resource::loadIconSet("quit_icon"), 134 QAction *a = new QAction( tr("Quit"), Opie::Core::OResource::loadPixmap("quit_icon", Opie::Core::OResource::SmallIcon),
135 QString::null, 0, this, "quit_action" ); 135 QString::null, 0, this, "quit_action" );
136 /* 136 /*
137 * Connect quit to the QApplication quit slot 137 * Connect quit to the QApplication quit slot
138 */ 138 */
139 connect(a, SIGNAL(activated() ), 139 connect(a, SIGNAL(activated() ),
140 qApp, SLOT(quit() ) ); 140 qApp, SLOT(quit() ) );
141 a->addTo( fileMenu ); 141 a->addTo( fileMenu );
142 142
143 a = new QAction(tr("View Current"), 143 a = new QAction(tr("View Current"),
144 Resource::loadIconSet("zoom"), 144 Opie::Core::OResource::loadPixmap("zoom", Opie::Core::OResource::SmallIcon),
145 QString::null, 0, this, "view current"); 145 QString::null, 0, this, "view current");
146 /* a simple whats this online explanation of out button */ 146 /* a simple whats this online explanation of out button */
147 a->setWhatsThis(tr("Views the current record") ); 147 a->setWhatsThis(tr("Views the current record") );
148 /* or QWhatsThis::add(widget, "description" ); */ 148 /* or QWhatsThis::add(widget, "description" ); */
149 149
150 /* see the power? */ 150 /* see the power? */
151 a->addTo( fileMenu ); 151 a->addTo( fileMenu );
152 a->addTo( tb ); 152 a->addTo( tb );
153 m_fire = a; 153 m_fire = a;
154 154
155 a = new QAction(tr("Choose Date"), 155 a = new QAction(tr("Choose Date"),
156 Resource::loadIconSet("day"), 156 Opie::Core::OResource::loadPixmap("day", Opie::Core::OResource::SmallIcon),
157 QString::null, 0, this, "choose date" ); 157 QString::null, 0, this, "choose date" );
158 a->addTo( fileMenu ); 158 a->addTo( fileMenu );
159 a->addTo( tb ); 159 a->addTo( tb );
160 m_dateAction = a; 160 m_dateAction = a;
161 161
162 mb->insertItem(tr("File"), fileMenu ); 162 mb->insertItem(tr("File"), fileMenu );
163 163
164} 164}
165 165
166void MainWindow::slotLoad() { 166void MainWindow::slotLoad() {
167 /* 167 /*
168 * There is no real shared access in the PIM API 168 * There is no real shared access in the PIM API
169 * It wasn't finish cause of health problems of one 169 * It wasn't finish cause of health problems of one
170 * of the authors so we do something fancy and use QCOP 170 * of the authors so we do something fancy and use QCOP
171 * the IPC system to get a current copy 171 * the IPC system to get a current copy
172 */ 172 */
173 /* NOTES to QCOP: QCOP operates over channels and use QDataStream 173 /* NOTES to QCOP: QCOP operates over channels and use QDataStream
174 * to send data. You can check if a channel isRegistered or hook 174 * to send data. You can check if a channel isRegistered or hook
175 * yourself to that channel. A Channel is QCString and normally 175 * yourself to that channel. A Channel is QCString and normally
176 * prefix with QPE/ and then the system in example QPE/System, 176 * prefix with QPE/ and then the system in example QPE/System,
177 * QPE/Desktop a special channel is the application channel 177 * QPE/Desktop a special channel is the application channel
178 * it QPE/Application/appname this channel gets created on app 178 * it QPE/Application/appname this channel gets created on app
179 * startup by QPEApplication. QCOP is asynchronous 179 * startup by QPEApplication. QCOP is asynchronous
180 * 180 *
181 * To send you'll use QCopEnevelope 181 * To send you'll use QCopEnevelope
182 * 182 *
183 */ 183 */
184 /* 184 /*
185 * What we will do is first is get to know if either 185 * What we will do is first is get to know if either
186 * datebook or todolist are running if so we will kindly 186 * datebook or todolist are running if so we will kindly
187 * asked to save the data for us. 187 * asked to save the data for us.
188 * If neither are running we can load directly 188 * If neither are running we can load directly
189 */ 189 */
190 if (!QCopChannel::isRegistered("QPE/Application/todolist") && 190 if (!QCopChannel::isRegistered("QPE/Application/todolist") &&
191 !QCopChannel::isRegistered("QPE/Application/datebook") ) { 191 !QCopChannel::isRegistered("QPE/Application/datebook") ) {
192 m_db.load(); 192 m_db.load();
193 m_tb.load(); 193 m_tb.load();
194 return slotLoadForDay( QDate::currentDate() ); 194 return slotLoadForDay( QDate::currentDate() );
195 } 195 }
196 196
197 /* 197 /*
198 * prepare our answer machine the QCopChannel 198 * prepare our answer machine the QCopChannel
199 * QPE/Desktop will send "flushDone(QString)" when 199 * QPE/Desktop will send "flushDone(QString)" when
200 * the flush is done it emits a signal on receive 200 * the flush is done it emits a signal on receive
201 */ 201 */
202 m_desktopChannel = new QCopChannel("QPE/Desktop"); 202 m_desktopChannel = new QCopChannel("QPE/Desktop");
203 connect(m_desktopChannel, SIGNAL(received(const QCString&,const QByteArray&) ), 203 connect(m_desktopChannel, SIGNAL(received(const QCString&,const QByteArray&) ),
204 this, SLOT(slotDesktopReceive(const QCString&,const QByteArray&) ) ); 204 this, SLOT(slotDesktopReceive(const QCString&,const QByteArray&) ) );
205 /* the numberof synced channels will be set to zero */ 205 /* the numberof synced channels will be set to zero */
206 m_synced = 0; 206 m_synced = 0;
207 207
208 /* 208 /*
209 * We use {} around the QCopEnvelope because it sends its 209 * We use {} around the QCopEnvelope because it sends its
210 * data on destruction of QCopEnvelope with 210 * data on destruction of QCopEnvelope with
211 */ 211 */
212 /* check again if not present increment synced*/ 212 /* check again if not present increment synced*/
213 if ( QCopChannel::isRegistered("QPE/Application/todolist") ) { 213 if ( QCopChannel::isRegistered("QPE/Application/todolist") ) {
214 QCopEnvelope env("QPE/Application/todolist", "flush()" ); 214 QCopEnvelope env("QPE/Application/todolist", "flush()" );
215 // env << data; but we do not have any parameters here 215 // env << data; but we do not have any parameters here
216 }else 216 }else
217 m_synced++; 217 m_synced++;
218 218
219 if ( QCopChannel::isRegistered("QPE/Application/datebook") ) { 219 if ( QCopChannel::isRegistered("QPE/Application/datebook") ) {
220 QCopEnvelope env("QPE/Application/datebook", "flush()" ); 220 QCopEnvelope env("QPE/Application/datebook", "flush()" );
221 }else 221 }else
222 m_synced++; 222 m_synced++;
223 223
224 /* we will provide a wait scrren */ 224 /* we will provide a wait scrren */
225 m_loading = new Opie::Ui::OWait(this, "wait screen" ); 225 m_loading = new Opie::Ui::OWait(this, "wait screen" );
226} 226}
227 227
228void MainWindow::slotDesktopReceive(const QCString& cmd, const QByteArray& data ) { 228void MainWindow::slotDesktopReceive(const QCString& cmd, const QByteArray& data ) {
229 /* the bytearray was filled with the QDataStream now 229 /* the bytearray was filled with the QDataStream now
230 * we open it read only to get the value(s) 230 * we open it read only to get the value(s)
231 */ 231 */
232 QDataStream stream(data, IO_ReadOnly ); 232 QDataStream stream(data, IO_ReadOnly );
233 /* 233 /*
234 * we're only interested in the flushDone 234 * we're only interested in the flushDone
235 */ 235 */
236 if ( cmd == "flushDone(QString)" ) { 236 if ( cmd == "flushDone(QString)" ) {
237 QString appname; 237 QString appname;
238 stream >> appname; // get the first argument out of stream 238 stream >> appname; // get the first argument out of stream
239 if (appname == QString::fromLatin1("datebook") || 239 if (appname == QString::fromLatin1("datebook") ||
240 appname == QString::fromLatin1("todolist") ) 240 appname == QString::fromLatin1("todolist") )
241 m_synced++; 241 m_synced++;
242 } 242 }
243 243
244 /* 244 /*
245 * If we synced both we can go ahead 245 * If we synced both we can go ahead
246 * In future this is not needed anymore when we finally 246 * In future this is not needed anymore when we finally
247 * implemented X-Ref and other PIM features 247 * implemented X-Ref and other PIM features
248 */ 248 */
249 if (m_synced >= 2 ) { 249 if (m_synced >= 2 ) {
250 delete m_loading; 250 delete m_loading;
251 delete m_desktopChannel; 251 delete m_desktopChannel;
252 /* now we finally can start doing the actual loading */ 252 /* now we finally can start doing the actual loading */