diff options
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h | 67 |
1 files changed, 62 insertions, 5 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h b/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h index 1f9d1f8..f29b651 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h @@ -4,6 +4,7 @@ #include "db/db.h" #include "guiSQLiteStudio_global.h" #include "parser/ast/sqlitecreateindex.h" +#include "common/strhash.h" #include <QDialog> #include <QStringListModel> @@ -15,6 +16,7 @@ class QGridLayout; class QSignalMapper; class QCheckBox; class QComboBox; +class QTableWidget; class GUI_API_EXPORT IndexDialog : public QDialog { @@ -31,15 +33,65 @@ class GUI_API_EXPORT IndexDialog : public QDialog void changeEvent(QEvent *e); private: + class Column + { + public: + Column(const QString& name, QTableWidget* table); + Column(SqliteExpr* expr, QTableWidget* table); + ~Column(); + + void assignToNewRow(int row); + void prepareForNewRow(); + QCheckBox* getCheck() const; + void setCheck(QCheckBox* cb); + QWidget* getCheckParent() const; + void setCheckParent(QWidget* w); + QComboBox* getSort() const; + void setSort(QComboBox* cb); + QComboBox* getCollation() const; + void setCollation(QComboBox* cb); + bool hasCollation() const; + + QString getName() const; + SqliteExpr* getExpr() const; + void setExpr(SqliteExpr* expr); + bool isExpr() const; + QString getKey() const; + + private: + QWidget* defineContainer(QWidget* w); + + QWidget* column1Contrainer = nullptr; + QWidget* column2Contrainer = nullptr; + QWidget* column3Contrainer = nullptr; + QWidget* checkParent = nullptr; + QCheckBox* check = nullptr; + QComboBox* sort = nullptr; + QComboBox* collation = nullptr; + QTableWidget* table = nullptr; + QString name; + SqliteExpr* expr = nullptr; + }; + void init(); void readIndex(); void readCollations(); void buildColumn(const QString& name, int row); + Column* buildColumn(SqliteOrderBy* orderBy, int row); + Column* buildColumn(SqliteExpr* expr, int row); + void buildColumn(Column* column, int row); void applyColumnValues(); void applyIndex(); - SqliteIndexedColumn* addIndexedColumn(const QString& name); + SqliteOrderBy* addIndexedColumn(const QString& name); + SqliteOrderBy* addIndexedColumn(SqliteExpr* expr); + void addCollation(SqliteOrderBy* col, const QString& name); void rebuildCreateIndex(); void queryDuplicates(); + void clearColumns(); + void rebuildColumnsByNewOrder(); + QString getKey(SqliteOrderBy* col) const; + QStringList getExistingColumnExprs(const QString& exceptThis = QString()) const; + QStringList getTableColumns() const; bool existingIndex = false; Db* db = nullptr; @@ -50,9 +102,8 @@ class GUI_API_EXPORT IndexDialog : public QDialog QStringList tableColumns; QSignalMapper* columnStateSignalMapping = nullptr; QStringListModel collations; - QList<QCheckBox*> columnCheckBoxes; - QList<QComboBox*> sortComboBoxes; - QList<QComboBox*> collateComboBoxes; + StrHash<Column*> columns; + QList<Column*> columnsByRow; int totalColumns = 0; Ui::IndexDialog *ui = nullptr; @@ -60,10 +111,16 @@ class GUI_API_EXPORT IndexDialog : public QDialog void updateValidation(); void buildColumns(); void updateTable(const QString& value); - void updateColumnState(int row); + void updateColumnState(const QString& columnKey); void updatePartialConditionState(); void updateDdl(); void tabChanged(int tab); + void moveColumnUp(); + void moveColumnDown(); + void updateToolBarButtons(const QModelIndex& idx = QModelIndex()); + void addExprColumn(); + void editExprColumn(int row = -1); + void delExprColumn(); public slots: void accept(); |
