Diffstat (limited to 'libopie/big-screen/omodalhelper.h') (more/less context) (ignore whitespace changes)
-rw-r--r-- | libopie/big-screen/omodalhelper.h | 121 |
1 files changed, 103 insertions, 18 deletions
diff --git a/libopie/big-screen/omodalhelper.h b/libopie/big-screen/omodalhelper.h index c483403..bc20d10 100644 --- a/libopie/big-screen/omodalhelper.h +++ b/libopie/big-screen/omodalhelper.h | |||
@@ -56,3 +56,6 @@ struct OModalHelperBase { | |||
56 | * the signals contains the status and id of the item and then you | 56 | * the signals contains the status and id of the item and then you |
57 | * can fetch it. | 57 | * need fetch it. |
58 | * Handled Records will stay available until the first call to retrieve | ||
59 | * either the record via the TransactionID or via the QValueList<Record>. Note | ||
60 | * that most functions do not take handled records into account. | ||
58 | * Also if you edit an record external you can tell this class and it'll | 61 | * Also if you edit an record external you can tell this class and it'll |
@@ -81,2 +84,3 @@ public: | |||
81 | bool handles( Id id)const; | 84 | bool handles( Id id)const; |
85 | TransactionID transactionID( Id id)const; | ||
82 | 86 | ||
@@ -96,5 +100,5 @@ public: | |||
96 | private: | 100 | private: |
97 | virtual void done( TransactionID, QDialog* ); | 101 | virtual void done( TransactionID ); |
98 | virtual void next( TransactionID, OModalHelperControler * ); | 102 | virtual void next( TransactionID ); |
99 | virtual void prev( TransactionID, OModalHelperControler * ); | 103 | virtual void prev( TransactionID ); |
100 | 104 | ||
@@ -109,2 +113,3 @@ private: | |||
109 | IdMap m_ids; // maps ids (uids) to a record | 113 | IdMap m_ids; // maps ids (uids) to a record |
114 | IdMap m_doneIds; | ||
110 | TransactionMap m_transactions; // activate transactions | 115 | TransactionMap m_transactions; // activate transactions |
@@ -135,2 +140,3 @@ public: | |||
135 | OModalHelperSignal(OModalHelperBase* base, QObject* parent); | 140 | OModalHelperSignal(OModalHelperBase* base, QObject* parent); |
141 | ~OModalHelperSignal(); | ||
136 | 142 | ||
@@ -155,3 +161,5 @@ public: | |||
155 | public slots: | 161 | public slots: |
156 | virtual done(int result ); | 162 | virtual void done(int result ); |
163 | virtual void next(); | ||
164 | virtual void prev(); | ||
157 | private: | 165 | private: |
@@ -162,3 +170,3 @@ private: | |||
162 | 170 | ||
163 | class OModalQueueBar; | 171 | struct OModalQueueBar; |
164 | class OModalQueuedDialog : public QDialog { | 172 | class OModalQueuedDialog : public QDialog { |
@@ -166,3 +174,3 @@ class OModalQueuedDialog : public QDialog { | |||
166 | public: | 174 | public: |
167 | OModalQueuedDialog(QWidget *mainWidget); | 175 | OModalQueuedDialog(QDialog *mainWidget); |
168 | ~OModalQueuedDialog(); | 176 | ~OModalQueuedDialog(); |
@@ -173,4 +181,10 @@ public: | |||
173 | void setRecord( int record, int count ); | 181 | void setRecord( int record, int count ); |
182 | |||
183 | signals: | ||
184 | void next(); | ||
185 | void prev(); | ||
186 | |||
174 | private: | 187 | private: |
175 | OModalQueueBar *m_bar; | 188 | OModalQueueBar *m_bar; |
189 | QDialog *m_center; | ||
176 | }; | 190 | }; |
@@ -196,2 +210,3 @@ OModalHelper<Dialog, Record, Id>::OModalHelper( enum Mode mode, QObject* parent | |||
196 | m_controler = new OModalHelperControler( this, m_signal ); | 210 | m_controler = new OModalHelperControler( this, m_signal ); |
211 | |||
197 | } | 212 | } |
@@ -201,5 +216,4 @@ OModalHelper<Dialog, Record, Id>::OModalHelper( enum Mode mode, QObject* parent | |||
201 | * This functions looks for your record and sees if it is | 216 | * This functions looks for your record and sees if it is |
202 | * handled with this helper. Note that done and edited records | 217 | * handled with this helper. Note that done records |
203 | * will not be returned. But if you edit an already edited record | 218 | * will not be returned. |
204 | * the done record will be used | ||
205 | * | 219 | * |
@@ -222,2 +236,19 @@ bool OModalHelper<Dialog, Record, Id>::handles( Id id )const { | |||
222 | 236 | ||
237 | |||
238 | /** | ||
239 | * just like handles( Id ) but returns the TransactionId | ||
240 | */ | ||
241 | template<class Dialog, class Record, typename Id> | ||
242 | TransactionID OModalHelper<Dialog, Record, Id>::transactionID( Id id)const { | ||
243 | if ( m_transactions.isEmpty() ) | ||
244 | return false; | ||
245 | |||
246 | TransactionMap::ConstIterator it = m_transactions.begin(); | ||
247 | for ( ; it != m_transactions.end(); ++it ) | ||
248 | if ( it.data() == id ) | ||
249 | return true; | ||
250 | |||
251 | return false; | ||
252 | } | ||
253 | |||
223 | /** | 254 | /** |
@@ -225,2 +256,3 @@ bool OModalHelper<Dialog, Record, Id>::handles( Id id )const { | |||
225 | * of done operations as well. | 256 | * of done operations as well. |
257 | * This also clears all done operations you did not popped | ||
226 | */ | 258 | */ |
@@ -229,2 +261,3 @@ void OModalHelper<Dialog, Record, Id>::cancel() { | |||
229 | m_ids.clear(); | 261 | m_ids.clear(); |
262 | m_doneIds.clear(); | ||
230 | m_done.clear(); | 263 | m_done.clear(); |
@@ -241,3 +274,3 @@ void OModalHelper<Dialog, Record, Id>::cancel() { | |||
241 | 274 | ||
242 | 275 | m_controler->setTransactionID( -1 ); | |
243 | } | 276 | } |
@@ -280,6 +313,11 @@ void OModalHelper::cancel( TransactionID tid ) { | |||
280 | queuedDialog()->setRecord( pos, m_transactions.count() ); | 313 | queuedDialog()->setRecord( pos, m_transactions.count() ); |
314 | m_controler->setTransactionID( tid ); | ||
281 | } | 315 | } |
282 | } | 316 | } |
283 | /* now remove from the various maps */ | 317 | /* now remove from the various maps done and currently editing map*/ |
284 | m_ids.remove( m_transactions.contains( tid ) ? m_transactions[tid] : m_done[tid ] ); | 318 | if (m_transactions.contains( tid ) ) |
319 | m_ids.remove( m_transactions[tid] ); | ||
320 | if (m_done.contains( tid ) ) | ||
321 | m_doneIds.remove( m_done[tid ] ); | ||
322 | |||
285 | 323 | ||
@@ -303,4 +341,4 @@ void OModalHelper<Dialog, Record, Id>::connectDone( QObject* rec, const char* sl | |||
303 | /** | 341 | /** |
304 | * Connect to the accepted Signal. SIGNAL( done(int, TransactionID ) ) | 342 | * Connect to the accepted Signal. SIGNAL( accepted(TransactionID ) ) |
305 | * This signal gets emitted whenever a Record was accepted or rejected | 343 | * This signal gets emitted whenever a Record was accepted |
306 | * | 344 | * |
@@ -310,11 +348,58 @@ void OModalHelper<Dialog, Record, Id>::connectDone( QObject* rec, const char* sl | |||
310 | template<class Dialog, class Record, typename Id> | 348 | template<class Dialog, class Record, typename Id> |
311 | void OModalHelper<Dialog, Record, Id>::( QObject* rec, const char* slot ) { | 349 | void OModalHelper<Dialog, Record, Id>::connectAccepted( QObject* rec, const char* slot ) { |
312 | 350 | QObject::connect(m_signal, SIGNAL(accepted(TransactionID) ), | |
351 | rec, slot ); | ||
313 | } | 352 | } |
314 | 353 | ||
354 | /** | ||
355 | * Same as the accepted method but this one gets emitted if the dialog | ||
356 | * got rejected. | ||
357 | * SIGNAL( rejected(TransactionID) ) | ||
358 | * | ||
359 | * @param rec The QObject of the slot | ||
360 | * @param slot The slot make sure the signature is correct | ||
361 | */ | ||
362 | template<class Dialog, class Record, typename Id> | ||
363 | void OModalHelper<Dialog, Record, Id>::connectRejected( QObject* rec, const char* slot ) { | ||
364 | QObject::connect(m_signal, SIGNAL(rejected(TransactionID) ), | ||
365 | rec, slot ); | ||
366 | } | ||
315 | 367 | ||
368 | /** | ||
369 | * Tell the helper to handle a record. If the record is currently handled | ||
370 | * it will be made active. | ||
371 | * Already handled record which are waiting getting popped are not taken into account | ||
372 | * Otherwise this helpers make the record editable. | ||
373 | * The record supplied needs to have a valid copy operator and constructor. | ||
374 | * In the case where the record is already present the parameter gets discarded. | ||
375 | * If you want the new record to be taken you need to cancel the Transaction first | ||
376 | * | ||
377 | * @param id The Identification of the Record. For PIM it would uid() | ||
378 | * @param rec The record we want to be edited | ||
379 | * | ||
380 | * @returns This functions returns the TransactionId assigned to the record | ||
381 | * | ||
382 | */ | ||
316 | template<class Dialog, class Record, typename Id> | 383 | template<class Dialog, class Record, typename Id> |
317 | void OModalHelper<Dialog, Record, Id>::( QObject* rec, const char* slot ) { | 384 | TransactionID OModalHelper<Dialog, Record, Id>::handle( Id id, const Record& rec ) { |
385 | static TransactionID t_id = 0; | ||
386 | t_id++; | ||
387 | /* | ||
388 | *this method consists out of two parts divided each into New and Queued Mode. | ||
389 | * Either we have the dialog already, in this case we need to highlight the widget | ||
390 | * Or we need to add it. | ||
391 | */ | ||
392 | TransactionID tid = 0; | ||
393 | /* we already have the record lets see if it was done or not */ | ||
394 | if ( m_ids.contains( id ) ) { | ||
318 | 395 | ||
396 | } | ||
397 | |||
398 | /* fall through if the record is in the done list */ | ||
399 | tid = t_id; | ||
400 | |||
401 | |||
402 | return; | ||
319 | } | 403 | } |
404 | |||
320 | #endif | 405 | #endif |