Diffstat (limited to 'examples/simple-pim/simple.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | examples/simple-pim/simple.cpp | 8 |
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. |
8 | This includes qpe stuff which will eventually be merged with libopie2 */ | 8 | This 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> |
19 | using namespace Opie::Core; | 19 | using 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 | ||
49 | OPIE_EXPORT_APP( OApplicationFactory<MainWindow> ) | 49 | OPIE_EXPORT_APP( OApplicationFactory<MainWindow> ) |
50 | 50 | ||
51 | MainWindow::MainWindow(QWidget *parent, const char* name, WFlags fl ) | 51 | MainWindow::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 | ||
112 | MainWindow::~MainWindow() { | 112 | MainWindow::~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 | ||
117 | void MainWindow::setDocument( const QString& /*str*/ ) { | 117 | void MainWindow::setDocument( const QString& /*str*/ ) { |
118 | } | 118 | } |
119 | 119 | ||
120 | 120 | ||
121 | void MainWindow::initUI() { | 121 | void 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 | ||
166 | void MainWindow::slotLoad() { | 166 | void 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 | ||
228 | void MainWindow::slotDesktopReceive(const QCString& cmd, const QByteArray& data ) { | 228 | void 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 */ |