Go to the documentation of this file.00001 #ifndef BASEEDITOR_H
00002 #define BASEEDITOR_H
00003
00004 #include <QGridLayout>
00005
00015 class WidgetLayout : public QGridLayout {
00016 public:
00017 WidgetLayout(QWidget *parent = 0);
00018 void addWidget (QWidget *widget, int row, int column, int rowSpan, int columnSpan);
00019 void setWidgetsEnabled(const bool &flag);
00020
00021 private:
00022 bool widgetsEnabled;
00023 };
00024
00025 #include <QSqlRelationalDelegate>
00026
00027 class QSqlRelationalDelegate;
00028
00035 class MapperDelegate : public QSqlRelationalDelegate {
00036 Q_OBJECT
00037 public:
00038 MapperDelegate(QObject *parent = 0);
00039 void setEditorData(QWidget *editor, const QModelIndex &index) const;
00040 void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
00041 };
00042
00043 #include <QDataWidgetMapper>
00044
00050 class DataWidgetMapper : public QDataWidgetMapper {
00051 public:
00052 DataWidgetMapper(QObject *parent = 0);
00053 bool isDirty() const;
00054 };
00055
00056 #include <QWidget>
00057
00058 class QCompleter;
00059
00065 class SeekerWidget : public QWidget {
00066 Q_OBJECT
00067 public:
00068 SeekerWidget(QWidget *parent = 0);
00069 QCompleter *completer();
00070 QComboBox *columnBox();
00071
00072 private slots:
00073 void onColumnBoxIndexChange(const int &index);
00074
00075 private:
00076 QCompleter *m_completer;
00077 QLineEdit *edit;
00078 QComboBox *columns;
00079 };
00080
00081 #include "kexpandablegroupbox.h"
00082
00091 class Seeker : public KExpandableGroupBox {
00092 Q_OBJECT
00093 public:
00094 Seeker(QWidget *parent = 0);
00095 void setModel(QAbstractItemModel *model);
00096 void setCompletionColumn(const int &column);
00097 SeekerWidget *widget() const;
00098
00099 private slots:
00100 void updateColumnBox();
00101 void onCompletionActivation(const QModelIndex &completionIndex);
00102
00103 signals:
00104 void found(const QModelIndex &index);
00105 };
00106
00107 #include <QButtonGroup>
00108
00109 class QAbstractButton;
00110
00123 class BaseEditor : public QWidget {
00124 Q_OBJECT
00125 public:
00126 enum Buttons {
00127 ButtonNext,
00128 ButtonPrevious,
00129 ButtonNew,
00130 ButtonDelete,
00131 ButtonUndo,
00132 ButtonSubmit,
00133 ButtonClose,
00134 ButtonAdd
00135 };
00136
00137 BaseEditor(QWidget *parent = 0);
00138 QAbstractButton *button(const Buttons &button);
00139 virtual bool isDirty() const = 0;
00140
00141 protected:
00142 QGridLayout *mainLayout() const;
00143 QGridLayout *bottomLayout() const;
00144
00145 protected slots:
00146 virtual void updateButtons() = 0;
00147 void onCloseButtonPress();
00148 virtual void onNewButtonPress() = 0;
00149 virtual void onSubmitButtonPress() = 0;
00150 virtual void onUndoButtonPress() = 0;
00151
00152 private:
00153 void buttonConnect(const QAbstractButton *button, const char *slot);
00154
00155 signals:
00156 void closeRequested();
00157
00158 private:
00159 QGridLayout *m_mainLayout;
00160 QGridLayout *m_bottomLayout;
00161
00162 QButtonGroup buttonGroup;
00163 };
00164
00165 #include <QSqlRecord>
00166
00167 class SqlTableModel;
00168 class QComboBox;
00169 class QSqlRelation;
00170
00174 class MappedBaseEditor : public BaseEditor {
00175 Q_OBJECT
00176 public:
00177 MappedBaseEditor(QWidget *parent = 0);
00178 const QSqlRecord ¤tPrimaryKey();
00179 const int currentMapperRow();
00180 void setTable(const QString &table, const QString &fieldName = QString(), Qt::SortOrder order = Qt::AscendingOrder, const QString &filter = QString());
00181 void select();
00182 virtual bool isDirty() const;
00183 SqlTableModel *model();
00184 DataWidgetMapper *mapper();
00185 void setCurrent(const QString &fieldIdName, const QVariant &fieldId);
00186
00187 protected:
00188 void addWidgetMapping(QWidget *widget, const QString &mapFieldName, const QByteArray &propertyName = "");
00189 void addWidget(QWidget *widget, int row, int column, int rowSpan, int columnSpan);
00190 void addWidget(QWidget *widget, int row, int column, int rowSpan, int columnSpan,
00191 const QString &mapFieldName, const QByteArray &propertyName = "");
00192 void addWidget(QComboBox *widget, int row, int column, int rowSpan, int columnSpan,
00193 const QSqlRelation &relation, const QString &fkColumnName = QString(), const QByteArray &propertyName = "");
00194 WidgetLayout *widgetLayout();
00195 bool isCurrentRecordNew() const;
00196
00197 private:
00198 void updateCurrentPrimaryKey();
00199
00200 protected slots:
00201 virtual void onCurrentRecordChange(int row);
00202 virtual void onQueryChange();
00203 virtual void onNewButtonPress();
00204 virtual void onDeleteButtonPress();
00205 void onUndoButtonPress();
00206 virtual void onSubmitButtonPress();
00207 virtual void updateButtons();
00208
00209 private:
00210 WidgetLayout *m_widgetLayout;
00211
00212 SqlTableModel *m_model;
00213 DataWidgetMapper *m_mapper;
00214
00215 QSqlRecord m_currentPrimaryKey;
00216 bool m_currentRecordIsNew;
00217 };
00218
00219 #include <QSplitter>
00220 #include <QTreeView>
00221 #include <QTableView>
00222 #include <QItemSelection>
00223 #include <QModelIndexList>
00224 #include <QModelIndex>
00225
00229 class TableBaseEditor : public BaseEditor {
00230 Q_OBJECT
00231 public:
00232 TableBaseEditor(QWidget *parent = 0);
00233 virtual bool isDirty() const;
00234 SqlTableModel *model() const;
00235 QTableView *table() const;
00236
00237 protected slots:
00238 virtual void updateButtons();
00239 virtual void onNewButtonPress();
00240 virtual void onSubmitButtonPress();
00241 virtual void onUndoButtonPress();
00242
00243 private:
00244 SqlTableModel *m_model;
00245 QTableView *m_table;
00246 };
00247
00248 #endif // BASEEDITOR_H