diff options
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp new file mode 100644 index 0000000..d10b223 --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp @@ -0,0 +1,127 @@ +#include "columnprimarykeypanel.h" +#include "ui_columnprimarykeypanel.h" +#include "parser/ast/sqlitecreatetable.h" +#include "parser/keywords.h" +#include "datatype.h" +#include "uiutils.h" + +ColumnPrimaryKeyPanel::ColumnPrimaryKeyPanel(QWidget *parent) : + ConstraintPanel(parent), + ui(new Ui::ColumnPrimaryKeyPanel) +{ + ui->setupUi(this); + init(); +} + +ColumnPrimaryKeyPanel::~ColumnPrimaryKeyPanel() +{ + delete ui; +} + +void ColumnPrimaryKeyPanel::changeEvent(QEvent *e) +{ + QWidget::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + break; + } +} + +void ColumnPrimaryKeyPanel::init() +{ + QStringList sortOrders = {sqliteSortOrder(SqliteSortOrder::ASC), sqliteSortOrder(SqliteSortOrder::DESC)}; + ui->sortOrderCombo->addItems(sortOrders); + + ui->conflictCombo->addItems(getConflictAlgorithms()); + + connect(ui->namedCheck, SIGNAL(toggled(bool)), this, SIGNAL(updateValidation())); + connect(ui->namedEdit, SIGNAL(textChanged(QString)), this, SIGNAL(updateValidation())); + connect(ui->sortOrderCheck, SIGNAL(toggled(bool)), this, SLOT(updateState())); + connect(ui->namedCheck, SIGNAL(toggled(bool)), this, SLOT(updateState())); + connect(ui->conflictCheck, SIGNAL(toggled(bool)), this, SLOT(updateState())); + updateState(); +} + +void ColumnPrimaryKeyPanel::readConstraint() +{ + SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data()); + if (constraint->dialect == Dialect::Sqlite3) + ui->autoIncrCheck->setChecked(constr->autoincrKw); + + if (constr->sortOrder != SqliteSortOrder::null) + { + ui->sortOrderCheck->setChecked(true); + ui->sortOrderCombo->setCurrentText(sqliteSortOrder(constr->sortOrder)); + } + + if (!constr->name.isNull()) + { + ui->namedCheck->setEnabled(true); + ui->namedEdit->setText(constr->name); + } + + if (constr->onConflict != SqliteConflictAlgo::null) + { + ui->conflictCheck->setChecked(true); + ui->conflictCombo->setCurrentText(sqliteConflictAlgo(constr->onConflict)); + } +} + +void ColumnPrimaryKeyPanel::updateState() +{ + ui->sortOrderCombo->setEnabled(ui->sortOrderCheck->isChecked()); + ui->namedEdit->setEnabled(ui->namedCheck->isChecked()); + ui->conflictCombo->setEnabled(ui->conflictCheck->isChecked()); +} + + +bool ColumnPrimaryKeyPanel::validate() +{ + bool nameOk = true; + if (ui->namedCheck->isChecked() && ui->namedEdit->text().isEmpty()) + nameOk = false; + + setValidState(ui->namedEdit, nameOk, tr("Enter a name of the constraint.")); + + return nameOk; +} + +void ColumnPrimaryKeyPanel::constraintAvailable() +{ + if (constraint.isNull()) + return; + + SqliteCreateTable::Column* column = dynamic_cast<SqliteCreateTable::Column*>(constraint->parent()); + ui->autoIncrCheck->setVisible(constraint->dialect == Dialect::Sqlite3); + ui->autoIncrCheck->setEnabled(column->type && + DataType::fromString(column->type->detokenize().trimmed(), Qt::CaseInsensitive) == DataType::INTEGER); + + if (!ui->autoIncrCheck->isEnabled()) + ui->autoIncrCheck->setText(tr("Autoincrement (only for %1 type columns)", "column primary key").arg("INTEGER")); + + readConstraint(); +} + +void ColumnPrimaryKeyPanel::storeConfiguration() +{ + if (constraint.isNull()) + return; + + SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data()); + constr->type = SqliteCreateTable::Column::Constraint::PRIMARY_KEY; + + if (constraint->dialect == Dialect::Sqlite3) + constr->autoincrKw = ui->autoIncrCheck->isChecked(); + + if (ui->sortOrderCheck->isChecked() && ui->sortOrderCombo->currentIndex() > -1) + constr->sortOrder = sqliteSortOrder(ui->sortOrderCombo->currentText()); + + if (ui->namedCheck->isChecked()) + constr->name = ui->namedEdit->text(); + + if (ui->conflictCheck->isChecked() && ui->conflictCombo->currentIndex() > -1) + constr->onConflict = sqliteConflictAlgo(ui->conflictCombo->currentText()); +} |
