diff options
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp | 68 |
1 files changed, 41 insertions, 27 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp index c7ec7d8..2181934 100644 --- a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp @@ -45,8 +45,8 @@ ViewWindow::ViewWindow(Db* db, QWidget* parent) : { newView(); init(); + ui->dbCombo->setCurrentDb(db); applyInitialTab(); - updateDbRelatedUiElements(); } ViewWindow::ViewWindow(const ViewWindow& win) : @@ -59,7 +59,6 @@ ViewWindow::ViewWindow(const ViewWindow& win) : init(); initView(); applyInitialTab(); - updateDbRelatedUiElements(); } ViewWindow::ViewWindow(QWidget* parent, Db* db, const QString& database, const QString& view) : @@ -72,7 +71,6 @@ ViewWindow::ViewWindow(QWidget* parent, Db* db, const QString& database, const Q init(); initView(); applyInitialTab(); - updateDbRelatedUiElements(); } ViewWindow::~ViewWindow() @@ -94,6 +92,9 @@ void ViewWindow::changeEvent(QEvent *e) QVariant ViewWindow::saveSession() { + if (!db || DBLIST->isTemporary(db)) + return QVariant(); + QHash<QString,QVariant> sessionValue; sessionValue["view"] = view; sessionValue["db"] = db->getName(); @@ -139,7 +140,6 @@ bool ViewWindow::restoreSession(const QVariant& sessionValue) initView(); applyInitialTab(); - updateDbRelatedUiElements(); return true; } @@ -192,7 +192,7 @@ void ViewWindow::setupDefShortcuts() bool ViewWindow::restoreSessionNextTime() { - return existingView; + return existingView && db && !DBLIST->isTemporary(db); } QToolBar* ViewWindow::getToolBar(int toolbar) const @@ -253,6 +253,7 @@ void ViewWindow::init() updateOutputColumnsVisibility(); updateTabsOrder(); + createDbCombo(); updateFont(); refreshTriggers(); @@ -268,6 +269,13 @@ void ViewWindow::updateAfterInit() ui->tabWidget->setTabEnabled(ui->tabWidget->indexOf(tab), existingView); } +void ViewWindow::createDbCombo() +{ + ui->dbCombo->setFixedWidth(100); + ui->dbCombo->setToolTip(tr("Database")); + connect(ui->dbCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(dbChanged())); +} + void ViewWindow::newView() { existingView = false; @@ -283,14 +291,16 @@ void ViewWindow::initView() if (!createView) return; // error occured while parsing ddl, window will be closed + ui->dbCombo->setCurrentDb(db); if (existingView) { dataModel->setDb(db); dataModel->setQuery(originalCreateView->select->detokenize()); dataModel->setView(view); + ui->dbCombo->setDisabled(true); } - ui->queryEdit->setDb(db); + ui->queryEdit->setPlainText(createView->select->detokenize()); if (createView->columns.size() > 0) @@ -301,8 +311,6 @@ void ViewWindow::initView() updateDdlTab(); - ui->ddlEdit->setSqliteVersion(db->getVersion()); - refreshTriggers(); connect(db, SIGNAL(dbObjectDeleted(QString,QString,DbObjectType)), this, SLOT(checkIfViewDeleted(QString,QString,DbObjectType))); @@ -454,7 +462,7 @@ QString ViewWindow::getCurrentTrigger() const int row = ui->triggersList->currentRow(); QTableWidgetItem* item = ui->triggersList->item(row, 0); if (!item) - return QString::null; + return QString(); return item->text(); } @@ -475,7 +483,7 @@ QString ViewWindow::getCurrentDdl() const columnsStr = "(" + collectColumnNames().join(", ") + ")"; return ddlTpl.arg( - wrapObjIfNeeded(ui->nameEdit->text(), db->getDialect()), + wrapObjIfNeeded(ui->nameEdit->text()), columnsStr, ui->queryEdit->toPlainText() ); @@ -492,10 +500,9 @@ QStringList ViewWindow::indexedColumnsToNamesOnly(const QList<SqliteIndexedColum QStringList ViewWindow::collectColumnNames() const { - Dialect dialect = db ? db->getDialect() : Dialect::Sqlite3; QStringList cols; for (int row = 0; row < ui->outputColumnsTable->count(); row++) - cols << wrapObjIfNeeded(ui->outputColumnsTable->item(row)->text(), dialect); + cols << wrapObjIfNeeded(ui->outputColumnsTable->item(row)->text()); return cols; } @@ -627,17 +634,20 @@ void ViewWindow::changesSuccessfullyCommitted() database = createView->database; QString oldView = view; view = createView->view; + + if (!existingView) + notifyInfo(tr("View '%1' was committed successfully.").arg(view)); + else if (oldView.compare(view, Qt::CaseInsensitive) == 0) + notifyInfo(tr("Committed changes for view '%1' successfully.").arg(view)); + else + notifyInfo(tr("Committed changes for view '%1' (named before '%2') successfully.").arg(view, oldView)); + existingView = true; initView(); updateQueryToolbarStatus(); updateWindowTitle(); updateAfterInit(); - if (oldView.compare(view, Qt::CaseInsensitive) == 0) - notifyInfo(tr("Committed changes for view '%1' successfully.").arg(view)); - else - notifyInfo(tr("Committed changes for view '%1' (named before '%2') successfully.").arg(view, oldView)); - DBTREE->refreshSchema(db); } @@ -675,6 +685,7 @@ void ViewWindow::prevTab() void ViewWindow::dbClosedFinalCleanup() { + db = nullptr; dataModel->setDb(nullptr); ui->queryEdit->setDb(nullptr); structureExecutor->setDb(nullptr); @@ -827,13 +838,6 @@ void ViewWindow::generateOutputColumns() } } -void ViewWindow::updateDbRelatedUiElements() -{ - bool enabled = db->getDialect() == Dialect::Sqlite3; - outputColumnsCheck->setVisible(enabled); - outputColumnsSeparator->setVisible(enabled); -} - void ViewWindow::updateTabsOrder() { tabsMoving = true; @@ -927,7 +931,6 @@ void ViewWindow::parseDdl() { createView = SqliteCreateViewPtr::create(); createView->view = view; - createView->dialect = db->getDialect(); } originalCreateView = SqliteCreateViewPtr::create(*createView); @@ -972,7 +975,7 @@ bool ViewWindow::validate(bool skipWarnings) // Rebuilding createView statement and validating it on the fly. QString ddl = getCurrentDdl(); - Parser parser(db->getDialect()); + Parser parser; if (!parser.parse(ddl) || parser.getQueries().size() < 1) { notifyError(tr("The SELECT statement could not be parsed. Please correct the query and retry.\nDetails: %1").arg(parser.getErrorString())); @@ -1005,7 +1008,7 @@ void ViewWindow::executeStructureChanges() } else { - Parser parser(db->getDialect()); + Parser parser; if (!parser.parse(theDdl)) { qCritical() << "Could not re-parse the view for executing it:" << parser.getErrorString(); @@ -1069,3 +1072,14 @@ void ViewWindow::updateFont() view->verticalHeader()->setDefaultSectionSize(fm.height() + 4); } } + +void ViewWindow::dbChanged() +{ + disconnect(db, SIGNAL(dbObjectDeleted(QString,QString,DbObjectType)), this, SLOT(checkIfViewDeleted(QString,QString,DbObjectType))); + + db = ui->dbCombo->currentDb(); + dataModel->setDb(db); + ui->queryEdit->setDb(db); + + connect(db, SIGNAL(dbObjectDeleted(QString,QString,DbObjectType)), this, SLOT(checkIfViewDeleted(QString,QString,DbObjectType))); +} |
