summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/big-screen/omodalhelper.h91
1 files changed, 79 insertions, 12 deletions
diff --git a/libopie/big-screen/omodalhelper.h b/libopie/big-screen/omodalhelper.h
index 643458f..32d921d 100644
--- a/libopie/big-screen/omodalhelper.h
+++ b/libopie/big-screen/omodalhelper.h
@@ -27,22 +27,25 @@
*/
#ifndef HAZE_OMODAL_HELPER_H
#define HAZE_OMODAL_HELPER_H
#include <qwidget.h>
+#include <qvaluelist.h>
+#include <qmap.h>
-class OModalHelperSignal : public QObject {
- Q_OBJECT
-public:
- OModalHelperSignal();
+typedef int TransactionID;
-signals:
- done( int status, int transaction );
- accpeted( int transaction );
- rejected( int transaction );
+class OModalHelperControler;
+class OModalHelperSignal;
+class QDialog;
+
+struct OModalHelperBase {
+ virtual void done( TransactionID id, QWidget* ) = 0;
+ virtual void next( TransactionID, OModalHelperControler * );
+ virtual void prev( TransactionID, OModalHelperControler * );
};
/**
* Modality sucks! ;) But it is easy to work with
* do exec() on a dialog and you know everything is funky.
* You only need to have one Dialog loaded and so on.
@@ -55,18 +58,82 @@ signals:
* call the merge() function of your widget to maybe merge in these changes.
* It also supports multiple modes. Either it can create new dialogs
* for each item or it can queue them depending on your usage. But it is
* so smart that if only one item is shown that the queue bar is not shown
* See the example for simple usage.
*
- * @short helps to live without modaility
+ * @short helps to life without modaility
* @author hOlgAr
* @version 0.01
*/
-template<class Dialog, class Record>
-class OModalHelper{
+template<class Dialog, class Record, typename Id = QString>
+class OModalHelper : private OModalHelperBase{
+ friend class OModalHelperSignal;
+ friend class OModalHelperControler;
public:
- OModalHelper(QObject* parnet );
+ typedef QValueList<Record> RecordList;
+ typedef QMap<Id, Record> IdMap;
+ typedef QMap<TransactionID, Id> TransactionMap;
+ typedef QMap<QDialog*, TransactionID> DialogMap
+ enum Mode { Queue, New };
+ OModalHelper(enum Mode mode, QObject* parnet );
+
+ bool handles( Id id)const;
+
+ void cancel();
+ void cancel( TransactionID );
+ void connect( QObject* rec, const char* slot );
+
+ TransactionID handle( const Record& rec = Record() );
+
+ void edited( TransactionID, int what, const QString& data );
+
+ Record record( TransactionID )const;
+ RecordList done()const;
+private:
};
+
+
+/* ### FIXME use namespace with Qt3 */
+
+/*
+ * A note on flow. The Signal is used for QT Signals when
+ * a record is done.
+ * There is either one controler and this controler slot will
+ * be connected to a dialog signal.
+ * In Queue we get the next and prev signals and call the Helper.
+ * this then changes the Record of the dialog and sets the transactionId
+ * of the controler.
+ * For the new mode
+ *
+ */
+
+class OModalHelperSignal : public QObject {
+ Q_OBJECT
+public:
+ OModalHelperSignal();
+
+signals:
+ done( int status, TransactionID transaction );
+ accpeted( TransactionID transaction );
+ rejected( TransactionID transaction );
+};
+
+
+class OModalHelperControler : public QObject {
+ Q_OBJECT
+public:
+ OModalHelperControler( TransactionID id );
+ virtual TransactionID transactionID()const;
+ void setTransactionID( TransactionID id );
+ QDialog* dialog()const;
+
+public slots:
+ virtual done(int result );
+private:
+ QDialog *m_dia;
+ TransactionID m_id;
+}
+
#endif