summaryrefslogtreecommitdiff
path: root/libopie/big-screen/omodalhelper.h
Unidiff
Diffstat (limited to 'libopie/big-screen/omodalhelper.h') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/big-screen/omodalhelper.h121
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:
96private: 100private:
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:
155public slots: 161public slots:
156 virtual done(int result ); 162 virtual void done(int result );
163 virtual void next();
164 virtual void prev();
157private: 165private:
@@ -162,3 +170,3 @@ private:
162 170
163class OModalQueueBar; 171struct OModalQueueBar;
164class OModalQueuedDialog : public QDialog { 172class OModalQueuedDialog : public QDialog {
@@ -166,3 +174,3 @@ class OModalQueuedDialog : public QDialog {
166public: 174public:
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
183signals:
184 void next();
185 void prev();
186
174private: 187private:
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 */
241template<class Dialog, class Record, typename Id>
242TransactionID 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
310template<class Dialog, class Record, typename Id> 348template<class Dialog, class Record, typename Id>
311void OModalHelper<Dialog, Record, Id>::( QObject* rec, const char* slot ) { 349void 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 */
362template<class Dialog, class Record, typename Id>
363void 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 */
316template<class Dialog, class Record, typename Id> 383template<class Dialog, class Record, typename Id>
317void OModalHelper<Dialog, Record, Id>::( QObject* rec, const char* slot ) { 384TransactionID 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