summaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/windows/tablestructuremodel.h
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/windows/tablestructuremodel.h')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/tablestructuremodel.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/tablestructuremodel.h b/SQLiteStudio3/guiSQLiteStudio/windows/tablestructuremodel.h
new file mode 100644
index 0000000..e1cfa4e
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/tablestructuremodel.h
@@ -0,0 +1,89 @@
+#ifndef TABLESTRUCTUREMODEL_H
+#define TABLESTRUCTUREMODEL_H
+
+#include "parser/ast/sqlitecreatetable.h"
+#include "guiSQLiteStudio_global.h"
+#include <QAbstractTableModel>
+#include <QPointer>
+
+class GUI_API_EXPORT TableStructureModel : public QAbstractTableModel
+{
+ Q_OBJECT
+
+ public:
+ explicit TableStructureModel(QObject *parent = 0);
+
+ int rowCount(const QModelIndex& parent = QModelIndex()) const;
+ int columnCount(const QModelIndex& parent = QModelIndex()) const;
+ QVariant data(const QModelIndex& index, int role) const;
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+ Qt::DropActions supportedDropActions() const;
+ Qt::DropActions supportedDragActions() const;
+ QStringList mimeTypes() const;
+ QMimeData* mimeData(const QModelIndexList& indexes) const;
+ bool canDropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) const;
+ bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent);
+ Qt::ItemFlags flags(const QModelIndex& index) const;
+ bool isModified() const;
+ void setCreateTable(SqliteCreateTable* value);
+ SqliteCreateTable::Column* getColumn(int colIdx) const;
+ void replaceColumn(int colIdx, SqliteCreateTable::Column* column);
+ void insertColumn(int colIdx, SqliteCreateTable::Column* column);
+ void appendColumn(SqliteCreateTable::Column* column);
+ void delColumn(int colIdx);
+ void moveColumnUp(int colIdx);
+ void moveColumnDown(int colIdx);
+ void moveColumnTo(int colIdx, int newIdx);
+ QModelIndex findColumn(const QString& columnName, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+
+ private:
+ enum class Columns
+ {
+ NAME,
+ TYPE,
+ PK,
+ FK,
+ UNIQUE,
+ CHECK,
+ NOTNULL,
+ COLLATE,
+ DEFAULT
+ };
+
+ Columns getHeaderColumn(int colIdx) const;
+ bool isValidColumnIdx(int colIdx) const;
+ bool doesColumnHasConstraint(SqliteCreateTable::Column* column, SqliteCreateTable::Column::Constraint::Type type);
+ QString columnLabel(int column) const;
+ QString columnLabelForSqlite2(int column) const;
+ QVariant getColumnName(int row) const;
+ QVariant getColumnType(int row) const;
+ QVariant getColumnPk(int row) const;
+ QVariant getColumnFk(int row) const;
+ QVariant getColumnUnique(int row) const;
+ QVariant getColumnCheck(int row) const;
+ QVariant getColumnNotNull(int row) const;
+ QVariant getColumnCollate(int row) const;
+ QVariant getColumnDefaultValue(int row) const;
+ QVariant getColumnDefaultFont(int row) const;
+ QVariant getColumnDefaultColor(int row) const;
+ QVariant getColumnDefault(int row) const;
+ bool isColumnPk(SqliteCreateTable::Column* column) const;
+ bool isColumnFk(SqliteCreateTable::Column* column) const;
+ bool isColumnUnique(SqliteCreateTable::Column* column) const;
+ bool isColumnCheck(SqliteCreateTable::Column* column) const;
+ bool isColumnNotNull(SqliteCreateTable::Column* column) const;
+ bool isColumnCollate(SqliteCreateTable::Column* column) const;
+
+ static const constexpr char* mimeType = "application/x-sqlitestudio-tablestructuremodel-row-index";
+
+ QPointer<SqliteCreateTable> createTable;
+ bool modified = false;
+
+ signals:
+ void columnModified(const QString& oldColumn, SqliteCreateTable::Column* newColumn);
+ void columnDeleted(const QString& column);
+ void modifiyStateChanged();
+ void columnsOrderChanged();
+};
+
+#endif // TABLESTRUCTUREMODEL_H