Diffstat (limited to 'libopie/big-screen/omodalhelper.h') (more/less context) (show 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 { * the signals contains the status and id of the item and then you - * can fetch it. + * need fetch it. + * Handled Records will stay available until the first call to retrieve + * either the record via the TransactionID or via the QValueList<Record>. Note + * that most functions do not take handled records into account. * Also if you edit an record external you can tell this class and it'll @@ -81,2 +84,3 @@ public: bool handles( Id id)const; + TransactionID transactionID( Id id)const; @@ -96,5 +100,5 @@ public: private: - virtual void done( TransactionID, QDialog* ); - virtual void next( TransactionID, OModalHelperControler * ); - virtual void prev( TransactionID, OModalHelperControler * ); + virtual void done( TransactionID ); + virtual void next( TransactionID ); + virtual void prev( TransactionID ); @@ -109,2 +113,3 @@ private: IdMap m_ids; // maps ids (uids) to a record + IdMap m_doneIds; TransactionMap m_transactions; // activate transactions @@ -135,2 +140,3 @@ public: OModalHelperSignal(OModalHelperBase* base, QObject* parent); + ~OModalHelperSignal(); @@ -155,3 +161,5 @@ public: public slots: - virtual done(int result ); + virtual void done(int result ); + virtual void next(); + virtual void prev(); private: @@ -162,3 +170,3 @@ private: -class OModalQueueBar; +struct OModalQueueBar; class OModalQueuedDialog : public QDialog { @@ -166,3 +174,3 @@ class OModalQueuedDialog : public QDialog { public: - OModalQueuedDialog(QWidget *mainWidget); + OModalQueuedDialog(QDialog *mainWidget); ~OModalQueuedDialog(); @@ -173,4 +181,10 @@ public: void setRecord( int record, int count ); + +signals: + void next(); + void prev(); + private: OModalQueueBar *m_bar; + QDialog *m_center; }; @@ -196,2 +210,3 @@ OModalHelper<Dialog, Record, Id>::OModalHelper( enum Mode mode, QObject* parent m_controler = new OModalHelperControler( this, m_signal ); + } @@ -201,5 +216,4 @@ OModalHelper<Dialog, Record, Id>::OModalHelper( enum Mode mode, QObject* parent * This functions looks for your record and sees if it is - * handled with this helper. Note that done and edited records - * will not be returned. But if you edit an already edited record - * the done record will be used + * handled with this helper. Note that done records + * will not be returned. * @@ -222,2 +236,19 @@ bool OModalHelper<Dialog, Record, Id>::handles( Id id )const { + +/** + * just like handles( Id ) but returns the TransactionId + */ +template<class Dialog, class Record, typename Id> +TransactionID OModalHelper<Dialog, Record, Id>::transactionID( Id id)const { + if ( m_transactions.isEmpty() ) + return false; + + TransactionMap::ConstIterator it = m_transactions.begin(); + for ( ; it != m_transactions.end(); ++it ) + if ( it.data() == id ) + return true; + + return false; +} + /** @@ -225,2 +256,3 @@ bool OModalHelper<Dialog, Record, Id>::handles( Id id )const { * of done operations as well. + * This also clears all done operations you did not popped */ @@ -229,2 +261,3 @@ void OModalHelper<Dialog, Record, Id>::cancel() { m_ids.clear(); + m_doneIds.clear(); m_done.clear(); @@ -241,3 +274,3 @@ void OModalHelper<Dialog, Record, Id>::cancel() { - + m_controler->setTransactionID( -1 ); } @@ -280,6 +313,11 @@ void OModalHelper::cancel( TransactionID tid ) { queuedDialog()->setRecord( pos, m_transactions.count() ); + m_controler->setTransactionID( tid ); } } - /* now remove from the various maps */ - m_ids.remove( m_transactions.contains( tid ) ? m_transactions[tid] : m_done[tid ] ); + /* now remove from the various maps done and currently editing map*/ + if (m_transactions.contains( tid ) ) + m_ids.remove( m_transactions[tid] ); + if (m_done.contains( tid ) ) + m_doneIds.remove( m_done[tid ] ); + @@ -303,4 +341,4 @@ void OModalHelper<Dialog, Record, Id>::connectDone( QObject* rec, const char* sl /** - * Connect to the accepted Signal. SIGNAL( done(int, TransactionID ) ) - * This signal gets emitted whenever a Record was accepted or rejected + * Connect to the accepted Signal. SIGNAL( accepted(TransactionID ) ) + * This signal gets emitted whenever a Record was accepted * @@ -310,11 +348,58 @@ void OModalHelper<Dialog, Record, Id>::connectDone( QObject* rec, const char* sl template<class Dialog, class Record, typename Id> -void OModalHelper<Dialog, Record, Id>::( QObject* rec, const char* slot ) { - +void OModalHelper<Dialog, Record, Id>::connectAccepted( QObject* rec, const char* slot ) { + QObject::connect(m_signal, SIGNAL(accepted(TransactionID) ), + rec, slot ); } +/** + * Same as the accepted method but this one gets emitted if the dialog + * got rejected. + * SIGNAL( rejected(TransactionID) ) + * + * @param rec The QObject of the slot + * @param slot The slot make sure the signature is correct + */ +template<class Dialog, class Record, typename Id> +void OModalHelper<Dialog, Record, Id>::connectRejected( QObject* rec, const char* slot ) { + QObject::connect(m_signal, SIGNAL(rejected(TransactionID) ), + rec, slot ); +} +/** + * Tell the helper to handle a record. If the record is currently handled + * it will be made active. + * Already handled record which are waiting getting popped are not taken into account + * Otherwise this helpers make the record editable. + * The record supplied needs to have a valid copy operator and constructor. + * In the case where the record is already present the parameter gets discarded. + * If you want the new record to be taken you need to cancel the Transaction first + * + * @param id The Identification of the Record. For PIM it would uid() + * @param rec The record we want to be edited + * + * @returns This functions returns the TransactionId assigned to the record + * + */ template<class Dialog, class Record, typename Id> -void OModalHelper<Dialog, Record, Id>::( QObject* rec, const char* slot ) { +TransactionID OModalHelper<Dialog, Record, Id>::handle( Id id, const Record& rec ) { + static TransactionID t_id = 0; + t_id++; + /* + *this method consists out of two parts divided each into New and Queued Mode. + * Either we have the dialog already, in this case we need to highlight the widget + * Or we need to add it. + */ + TransactionID tid = 0; + /* we already have the record lets see if it was done or not */ + if ( m_ids.contains( id ) ) { + + } + + /* fall through if the record is in the done list */ + tid = t_id; + + return; } + #endif |