fixed some build related problems
[qsqlmon.git] / libqf / libqfgui / gui / widgets / qfdataformwidget / qfdataformwidget.h
blob91cd3ed520f470e1f6001b6bf0f90445df806cd1
2 //
3 // Author: Frantisek Vacek <fanda.vacek@volny.cz>, (C) 2006
4 //
5 // Copyright: See COPYING file that comes with this distribution
6 //
8 #ifndef QFDATAFORMWIDGET_H
9 #define QFDATAFORMWIDGET_H
11 #include <qf.h>
12 #include <qfguiglobal.h>
13 #include <qfexception.h>
14 #include <qfdataformdocument.h>
16 #include <QFrame>
18 //class QFDataFormDocument;
19 //class QFSqlFormDocument;
20 class QFTableView;
21 class QFAction;
23 //! Container for dataform controls like QFSqlLineEdit etc.
24 //! Zdruzuje widgety pro jeden document.
25 //! Jen aby se poznalo, ktery widgety patri ke kterymu dokumentu.
26 class QFGUI_DECL_EXPORT QFDataFormWidget : public QFrame
28 Q_OBJECT;
29 public:
30 static QString ReadOnlyWidgetBackgroundColor;
31 static QString MandatoryWidgetBackgroundColor;
32 protected:
33 QPointer<QFDataFormDocument> documentPtr;
34 QList<QWidget*> f_sqlWidgets;
35 QList<QWidget*> sqlWidgets();
36 QList<QWidget*> f_mandatorySqlWidgets;
37 QList<QWidget*> mandatorySqlWidgets();
38 QList<QFAction*> f_toolBarActions;
39 protected:
40 virtual void showEvent(QShowEvent *ev);
41 //virtual void hideEvent(QHideEvent *ev);
42 protected:
43 void createActions();
44 QFAction* toolBarAction(const QString &id, bool throw_exc = Qf::ThrowExc) throw(QFException);
45 //! Connect all widgets that have property sqlColumnName to \a document .
46 void connectWidgets();
47 public:
48 void clearSqlWidgetsCache();
50 virtual QList<QFAction*> toolBarActions() const {return f_toolBarActions;}
52 //! assign document do this widget and connect SQLWidgets and document signal slots.
53 virtual void setDocument(QFDataFormDocument *doc);
54 QFDataFormDocument* document(bool throw_exc = Qf::ThrowExc) throw(QFException);
55 signals:
56 void connectRequest(QFDataFormWidget *sender);
58 void widgetValueUpdated(const QString &sql_id, const QVariant &val);
59 //! akce widgetu byly refreshnuty a mozna i aplikace by si neco povolila nebo zakazala, k tomu slouzi tento signal.
60 void actionsRefreshed();
61 void documentDataDirtyChanged(bool dirty);
63 void documentAboutToSave();
64 //void documentValuesReloaded(const QString &dummy = QString());
65 void documentSaved(QFDataFormDocument *doc, int mode);
66 void documentDropped(const QVariant &id);
68 protected slots:
69 //virtual void masterViewCurrentIndexChanging(const QModelIndex &current, const QModelIndex &previous);
70 virtual void masterViewSelected(const QModelIndex &current);
71 //void onDocumentDataDirtyChanged(bool dirty);
72 public slots:
73 /// dokument ma spoustu pocitanych poli, tak je prepocitej
74 void recalculate() {if(document(!Qf::ThrowExc)) document()->recalculate();}
76 //! Pripojim-li tableview touto funkci, dojde k tomu, ze pri zvyrazneni noveho radku v tabulce se stary ulozi a novy nahraje.
77 //! TableView nemusi volat akci xxxInExternalEditor(), jako v pripade connectAsExternalRowEditor(), staci prosta selekce jineho radku.
78 //! Pripadne zmeny v datech se nepropaguji zpet do tabulky, pokud TableView a DataFormWidget nesdili stejny model (coz je povoleno a
79 //! k tomu je to predevsim:)
80 void connectAsRowBrowser(QFTableView *view);
81 //! externi editace radku v tabulce bude probihat v tomto widgetu.
82 void connectAsExternalRowEditor(QFTableView *sender);
83 public:
84 /// pripoji signaly objektu table_view, dataExternalySaved() a dataExternalyDropped()
85 void connectExternalEditorEditResults(QFTableView *table_view);
86 #ifdef QFSQCONTROL_WITH_IGNORED
87 static void setSqlControlsIgnored(QWidget *parent_w, bool ignore);
88 #endif
89 protected slots:
90 void _documentAboutToSave();
91 void _documentDropped(const QVariant &id);
92 void _documentSaved(QFDataFormDocument *doc, int mode);
94 void _loadView(const QVariant &id) {emit _load(id, QFDataFormDocument::ModeView);}
95 void _loadEdit(const QVariant &id) {emit _load(id, QFDataFormDocument::ModeEdit);}
96 void _loadInsert() {emit _load(QVariant(), QFDataFormDocument::ModeInsert);}
97 virtual bool checkMandatoryFields(QString &errmsg);
98 virtual void refreshActions();
99 signals:
100 void _load(const QVariant &id, QFDataFormDocument::Mode mode);
101 //=========================================================
102 void _save();
103 void _drop();
104 void _reload();
106 public slots:
107 // synchronizuje sql widgety s obsahem a stavem dokumnetu
108 //virtual void sync();
109 //virtual void documentLockInfo(const QString&);
110 void flushFocusedSqlWidget();
112 virtual void newDocument() {emit _load(QVariant(), QFDataFormDocument::ModeInsert);}
113 virtual void loadDocument(const QVariant &id, QFDataFormDocument::Mode mode) {emit _load(id, mode);}
114 virtual void reloadDocument() {emit _reload();}
115 virtual void saveDocument();
116 virtual void dropDocument() {emit _drop();}
117 public:
118 QFDataFormWidget(QWidget *parent = NULL);
119 virtual ~QFDataFormWidget();
122 //! TODO: write class documentation.
123 class QFGUI_DECL_EXPORT QFSqlDataFormWidget : public QFDataFormWidget
125 Q_OBJECT
126 public:
127 QFSqlFormDocument* document(bool throw_exc = Qf::ThrowExc) throw(QFException);
128 public:
129 QFSqlDataFormWidget(QWidget *parent = 0) : QFDataFormWidget(parent) {}
130 virtual ~QFSqlDataFormWidget() {}
134 #endif // QFDATAFORMWIDGET_H