diff options
| author | 2014-12-06 17:33:25 -0500 | |
|---|---|---|
| committer | 2014-12-06 17:33:25 -0500 | |
| commit | 7167ce41b61d2ba2cdb526777a4233eb84a3b66a (patch) | |
| tree | a35c14143716e1f2c98f808c81f89426045a946f /SQLiteStudio3/guiSQLiteStudio/dialogs/newconstraintdialog.cpp | |
Imported Upstream version 2.99.6upstream/2.99.6
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/dialogs/newconstraintdialog.cpp')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/dialogs/newconstraintdialog.cpp | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/newconstraintdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/newconstraintdialog.cpp new file mode 100644 index 0000000..36b400b --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/newconstraintdialog.cpp @@ -0,0 +1,275 @@ +#include "newconstraintdialog.h" +#include "ui_newconstraintdialog.h" +#include "iconmanager.h" +#include <QCommandLinkButton> + +NewConstraintDialog::NewConstraintDialog(SqliteCreateTable* createTable, Db* db, QWidget *parent) : + QDialog(parent), + ui(new Ui::NewConstraintDialog), + type(ConstraintDialog::TABLE), + db(db), + createTable(createTable) +{ + ui->setupUi(this); + init(); +} + +NewConstraintDialog::NewConstraintDialog(SqliteCreateTable::Column* column, Db* db, QWidget* parent) : + QDialog(parent), + ui(new Ui::NewConstraintDialog), + type(ConstraintDialog::COLUMN), + db(db), + columnStmt(column) +{ + ui->setupUi(this); + createTable = dynamic_cast<SqliteCreateTable*>(column->parent()); + init(); +} + +NewConstraintDialog::NewConstraintDialog(ConstraintDialog::Constraint constraintType, SqliteCreateTable* createTable, Db* db, QWidget* parent) : + NewConstraintDialog(createTable, db, parent) +{ + predefinedConstraintType = constraintType; +} + +NewConstraintDialog::NewConstraintDialog(ConstraintDialog::Constraint constraintType, SqliteCreateTable::Column* column, Db* db, QWidget* parent) : + NewConstraintDialog(column, db, parent) +{ + predefinedConstraintType = constraintType; +} + +NewConstraintDialog::~NewConstraintDialog() +{ + delete ui; + if (constraintDialog) + delete constraintDialog; +} + +SqliteStatement* NewConstraintDialog::getConstraint() +{ + return constrStatement; +} + +void NewConstraintDialog::changeEvent(QEvent *e) +{ + QDialog::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + break; + } +} + +void NewConstraintDialog::init() +{ + switch (type) + { + case ConstraintDialog::TABLE: + { + initTable(); + break; + } + case ConstraintDialog::COLUMN: + { + initColumn(); + break; + } + } + adjustSize(); + setMaximumSize(size()); + setMinimumSize(size()); +} + +void NewConstraintDialog::initTable() +{ + addButton(ICONS.CONSTRAINT_PRIMARY_KEY, tr("Primary Key", "new constraint dialog"), SLOT(createTablePk())); + if (createTable->dialect == Dialect::Sqlite3) + addButton(ICONS.CONSTRAINT_FOREIGN_KEY, tr("Foreign Key", "new constraint dialog"), SLOT(createTableFk())); + + addButton(ICONS.CONSTRAINT_UNIQUE, tr("Unique", "new constraint dialog"), SLOT(createTableUnique())); + addButton(ICONS.CONSTRAINT_CHECK, tr("Check", "new constraint dialog"), SLOT(createTableCheck())); +} + +void NewConstraintDialog::initColumn() +{ + addButton(ICONS.CONSTRAINT_PRIMARY_KEY, tr("Primary Key", "new constraint dialog"), SLOT(createColumnPk())); + if (createTable->dialect == Dialect::Sqlite3) + addButton(ICONS.CONSTRAINT_FOREIGN_KEY, tr("Foreign Key", "new constraint dialog"), SLOT(createColumnFk())); + + addButton(ICONS.CONSTRAINT_UNIQUE, tr("Unique", "new constraint dialog"), SLOT(createColumnUnique())); + addButton(ICONS.CONSTRAINT_CHECK, tr("Check", "new constraint dialog"), SLOT(createColumnCheck())); + addButton(ICONS.CONSTRAINT_NOT_NULL, tr("Not NULL", "new constraint dialog"), SLOT(createColumnNotNull())); + if (createTable->dialect == Dialect::Sqlite3) + addButton(ICONS.CONSTRAINT_COLLATION, tr("Collate", "new constraint dialog"), SLOT(createColumnCollate())); + + addButton(ICONS.CONSTRAINT_DEFAULT, tr("Default", "new constraint dialog"), SLOT(createColumnDefault())); +} + +void NewConstraintDialog::addButton(const Icon& icon, const QString text, const char* slot) +{ + QCommandLinkButton* btn = new QCommandLinkButton(); + btn->setIcon(icon); + btn->setText(text); + connect(btn, SIGNAL(clicked()), this, slot); + ui->container->layout()->addWidget(btn); +} + +int NewConstraintDialog::createColumnConstraint(ConstraintDialog::Constraint constraintType) +{ + SqliteCreateTable::Column::Constraint* constraint = new SqliteCreateTable::Column::Constraint(); + switch (constraintType) + { + case ConstraintDialog::PK: + constraint->type = SqliteCreateTable::Column::Constraint::PRIMARY_KEY; + break; + case ConstraintDialog::FK: + constraint->type = SqliteCreateTable::Column::Constraint::FOREIGN_KEY; + break; + case ConstraintDialog::UNIQUE: + constraint->type = SqliteCreateTable::Column::Constraint::UNIQUE; + break; + case ConstraintDialog::NOTNULL: + constraint->type = SqliteCreateTable::Column::Constraint::NOT_NULL; + break; + case ConstraintDialog::CHECK: + constraint->type = SqliteCreateTable::Column::Constraint::CHECK; + break; + case ConstraintDialog::COLLATE: + constraint->type = SqliteCreateTable::Column::Constraint::COLLATE; + break; + case ConstraintDialog::DEFAULT: + constraint->type = SqliteCreateTable::Column::Constraint::DEFAULT; + break; + case ConstraintDialog::UNKNOWN: + break; + } + + constrStatement = constraint; + constrStatement->setParent(columnStmt); + + return editConstraint(); +} + +int NewConstraintDialog::createTableConstraint(ConstraintDialog::Constraint constraintType) +{ + SqliteCreateTable::Constraint* constraint = new SqliteCreateTable::Constraint(); + switch (constraintType) + { + case ConstraintDialog::PK: + constraint->type = SqliteCreateTable::Constraint::PRIMARY_KEY; + break; + case ConstraintDialog::FK: + constraint->type = SqliteCreateTable::Constraint::FOREIGN_KEY; + break; + case ConstraintDialog::UNIQUE: + constraint->type = SqliteCreateTable::Constraint::UNIQUE; + break; + case ConstraintDialog::CHECK: + constraint->type = SqliteCreateTable::Constraint::CHECK; + break; + case ConstraintDialog::NOTNULL: + case ConstraintDialog::COLLATE: + case ConstraintDialog::DEFAULT: + case ConstraintDialog::UNKNOWN: + break; + } + + constrStatement = constraint; + constrStatement->setParent(createTable); + + return editConstraint(); +} + +int NewConstraintDialog::editConstraint() +{ + switch (type) + { + case ConstraintDialog::TABLE: + constraintDialog = new ConstraintDialog(ConstraintDialog::NEW, dynamic_cast<SqliteCreateTable::Constraint*>(constrStatement), + createTable.data(), db, parentWidget()); + break; + case ConstraintDialog::COLUMN: + constraintDialog = new ConstraintDialog(ConstraintDialog::NEW, dynamic_cast<SqliteCreateTable::Column::Constraint*>(constrStatement), + columnStmt.data(), db, parentWidget()); + break; + } + + connect(constraintDialog, SIGNAL(rejected()), this, SLOT(reject())); + connect(constraintDialog, SIGNAL(accepted()), this, SLOT(accept())); + + hide(); + return constraintDialog->exec(); +} + +void NewConstraintDialog::createTablePk() +{ + createTableConstraint(ConstraintDialog::PK); +} + +void NewConstraintDialog::createTableFk() +{ + createTableConstraint(ConstraintDialog::FK); +} + +void NewConstraintDialog::createTableUnique() +{ + createTableConstraint(ConstraintDialog::UNIQUE); +} + +void NewConstraintDialog::createTableCheck() +{ + createTableConstraint(ConstraintDialog::CHECK); +} + +void NewConstraintDialog::createColumnPk() +{ + createColumnConstraint(ConstraintDialog::PK); +} + +void NewConstraintDialog::createColumnFk() +{ + createColumnConstraint(ConstraintDialog::FK); +} + +void NewConstraintDialog::createColumnUnique() +{ + createColumnConstraint(ConstraintDialog::UNIQUE); +} + +void NewConstraintDialog::createColumnCheck() +{ + createColumnConstraint(ConstraintDialog::CHECK); +} + +void NewConstraintDialog::createColumnNotNull() +{ + createColumnConstraint(ConstraintDialog::NOTNULL); +} + +void NewConstraintDialog::createColumnDefault() +{ + createColumnConstraint(ConstraintDialog::DEFAULT); +} + +void NewConstraintDialog::createColumnCollate() +{ + createColumnConstraint(ConstraintDialog::COLLATE); +} + +int NewConstraintDialog::exec() +{ + if (predefinedConstraintType == ConstraintDialog::UNKNOWN) + return QDialog::exec(); + + switch (type) + { + case ConstraintDialog::TABLE: + return createTableConstraint(predefinedConstraintType); + case ConstraintDialog::COLUMN: + return createColumnConstraint(predefinedConstraintType); + } + + return QDialog::Rejected; +} |
