3 // Author: Frantisek Vacek <fanda.vacek@volny.cz>, (C) 2006
5 // Copyright: See COPYING file that comes with this distribution
8 #ifndef QFDATAFORMWIDGET_H
9 #define QFDATAFORMWIDGET_H
12 #include <qfguiglobal.h>
13 #include <qfexception.h>
14 #include <qfdataformdocument.h>
18 //class QFDataFormDocument;
19 //class QFSqlFormDocument;
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
30 static QString ReadOnlyWidgetBackgroundColor
;
31 static QString MandatoryWidgetBackgroundColor
;
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
;
40 virtual void showEvent(QShowEvent
*ev
);
41 //virtual void hideEvent(QHideEvent *ev);
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();
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
);
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
);
69 //virtual void masterViewCurrentIndexChanging(const QModelIndex ¤t, const QModelIndex &previous);
70 virtual void masterViewSelected(const QModelIndex
¤t
);
71 //void onDocumentDataDirtyChanged(bool dirty);
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
);
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
);
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();
100 void _load(const QVariant
&id
, QFDataFormDocument::Mode mode
);
101 //=========================================================
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();}
118 QFDataFormWidget(QWidget
*parent
= NULL
);
119 virtual ~QFDataFormWidget();
122 //! TODO: write class documentation.
123 class QFGUI_DECL_EXPORT QFSqlDataFormWidget
: public QFDataFormWidget
127 QFSqlFormDocument
* document(bool throw_exc
= Qf::ThrowExc
) throw(QFException
);
129 QFSqlDataFormWidget(QWidget
*parent
= 0) : QFDataFormWidget(parent
) {}
130 virtual ~QFSqlDataFormWidget() {}
134 #endif // QFDATAFORMWIDGET_H