diff options
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h | 1 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/common/verifiablewizardpage.h | 1 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp | 9 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp | 5 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.h | 4 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp | 2 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro | 5 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/img/sqlitestudio_logo.png | bin | 0 -> 15645 bytes | |||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp | 3 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp | 12 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/mdiwindow.h | 4 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/taskbar.cpp | 18 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/taskbar.h | 1 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/uiloader.h | 1 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp | 27 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.h | 1 |
16 files changed, 82 insertions, 12 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h b/SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h index 4df7d5e..8ee4636 100644 --- a/SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h +++ b/SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h @@ -3,6 +3,7 @@ #include <QObject> #include <QHash> +#include <functional> class QAbstractItemModel; diff --git a/SQLiteStudio3/guiSQLiteStudio/common/verifiablewizardpage.h b/SQLiteStudio3/guiSQLiteStudio/common/verifiablewizardpage.h index 8912258..4fdb5f9 100644 --- a/SQLiteStudio3/guiSQLiteStudio/common/verifiablewizardpage.h +++ b/SQLiteStudio3/guiSQLiteStudio/common/verifiablewizardpage.h @@ -3,6 +3,7 @@ #include "guiSQLiteStudio_global.h" #include <QWizardPage> +#include <functional> class GUI_API_EXPORT VerifiableWizardPage : public QWizardPage { diff --git a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp index 98baaa9..8e137a4 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp @@ -1484,15 +1484,24 @@ void DbTree::deleteItems(const QList<DbTreeItem*>& itemsToDelete) return; // Deleting items + QSet<Db*> deletedDatabases; QSet<Db*> databasesToRefresh; for (DbTreeItem* item : items) { + if (item->getType() == DbTreeItem::Type::DB) + deletedDatabases << item->getDb(); + databasesToRefresh << item->getDb(); deleteItem(item); } for (Db* dbToRefresh : databasesToRefresh) + { + if (deletedDatabases.contains(dbToRefresh)) + continue; + DBTREE->refreshSchema(dbToRefresh); + } } void DbTree::refreshSchemas() diff --git a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp index 8a71a10..281510f 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp @@ -1152,7 +1152,7 @@ void DbTreeModel::moveOrCopyDbObjects(const QList<DbTreeItem*>& srcItems, DbTree bool DbTreeModel::confirmReferencedTables(const QStringList& tables) { QMessageBox::StandardButton result = QMessageBox::question(MAINWINDOW, tr("Referenced tables"), - tr("Do you want to include following referenced tables as well:\n%1").arg(tables.join(", "))); + tr("Do you want to include following referenced tables as well:\n%1").arg(tables.join(", "))); return result == QMessageBox::Yes; } @@ -1180,7 +1180,7 @@ bool DbTreeModel::confirmConversion(const QList<QPair<QString, QString> >& diffs return dialog.exec() == QDialog::Accepted; } -bool DbTreeModel::confirmConversionErrors(const QHash<QString,QSet<QString>>& errors) +bool DbTreeModel::confirmConversionErrors(const QHash<QString, QSet<QString> >& errors) { ErrorsConfirmDialog dialog(MAINWINDOW); dialog.setTopLabel(tr("Following error occurred while converting SQL statements to the target SQLite version:")); @@ -1188,6 +1188,7 @@ bool DbTreeModel::confirmConversionErrors(const QHash<QString,QSet<QString>>& er dialog.setErrors(errors); return dialog.exec() == QDialog::Accepted; } + bool DbTreeModel::getIgnoreDbLoadedSignal() const { return ignoreDbLoadedSignal; diff --git a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.h b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.h index c92fa2c..ee97e87 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.h +++ b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.h @@ -89,8 +89,8 @@ class GUI_API_EXPORT DbTreeModel : public QStandardItemModel static bool confirmReferencedTables(const QStringList& tables); static bool resolveNameConflict(QString& nameInConflict); - static bool confirmConversion(const QList<QPair<QString,QString>>& diffs); - static bool confirmConversionErrors(const QHash<QString, QSet<QString> >& errors); + static bool confirmConversion(const QList<QPair<QString, QString>>& diffs); + static bool confirmConversionErrors(const QHash<QString, QSet<QString>>& errors); static const QString toolTipTableTmp; static const QString toolTipHdrRowTmp; diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp index 8f5d433..7ab9c67 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp @@ -119,9 +119,9 @@ void BugDialog::updateState() ui->currentLoginLabel->setToolTip(tr("Reporting as an unregistered user, using e-mail address.")); ui->currentLoginLabel->setPixmap(ICONS.USER_UNKNOWN); ui->emailEdit->setEnabled(true); - ui->emailEdit->clear(); ui->loginButton->setText(tr("Log in")); ui->loginButton->setIcon(ICONS.USER); + validate(); } else { diff --git a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro index ac3cb5b..2195415 100644 --- a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro +++ b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro @@ -361,4 +361,9 @@ RESOURCES += \ OTHER_FILES += +unix: { + target.path = $$LIBDIR + INSTALLS += target +} + LIBS += -lcoreSQLiteStudio diff --git a/SQLiteStudio3/guiSQLiteStudio/img/sqlitestudio_logo.png b/SQLiteStudio3/guiSQLiteStudio/img/sqlitestudio_logo.png Binary files differnew file mode 100644 index 0000000..d2138ea --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/img/sqlitestudio_logo.png diff --git a/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp index c53d95c..df8799b 100644 --- a/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp @@ -520,7 +520,10 @@ MdiWindow* MainWindow::restoreWindowSession(const QVariant &windowSessions) // Add the window to MDI area and restore its session MdiWindow* window = ui->mdiArea->addSubWindow(mdiChild); if (!window->restoreSession(winSessionHash)) + { + window->setCloseWithoutSessionSaving(true); delete window; + } return window; } diff --git a/SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp index dafd108..0e8d298 100644 --- a/SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp @@ -28,7 +28,7 @@ MdiWindow::~MdiWindow() if (SQLITESTUDIO->getImmediateQuit()) return; - if (!MAINWINDOW->isClosingApp()) + if (!closeWithoutSessionSaving && !MAINWINDOW->isClosingApp()) MAINWINDOW->pushClosedWindowSessionValue(saveSession()); mdiArea->windowDestroyed(this); @@ -199,3 +199,13 @@ bool MdiWindow::confirmClose() return (msgBox.exec() == QMessageBox::Yes); } +bool MdiWindow::getCloseWithoutSessionSaving() const +{ + return closeWithoutSessionSaving; +} + +void MdiWindow::setCloseWithoutSessionSaving(bool value) +{ + closeWithoutSessionSaving = value; +} + diff --git a/SQLiteStudio3/guiSQLiteStudio/mdiwindow.h b/SQLiteStudio3/guiSQLiteStudio/mdiwindow.h index fd6c4dc..7003425 100644 --- a/SQLiteStudio3/guiSQLiteStudio/mdiwindow.h +++ b/SQLiteStudio3/guiSQLiteStudio/mdiwindow.h @@ -28,12 +28,16 @@ class GUI_API_EXPORT MdiWindow : public QMdiSubWindow void changeEvent(QEvent *event); void closeEvent(QCloseEvent* e); + bool getCloseWithoutSessionSaving() const; + void setCloseWithoutSessionSaving(bool value); + private: bool confirmClose(); QPointer<QWidget> lastFocusedWidget; MdiArea* mdiArea = nullptr; bool dbBeingClosed = false; + bool closeWithoutSessionSaving = false; private slots: void dbAboutToBeDisconnected(Db* db, bool& deny); diff --git a/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp b/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp index 915ca9a..ba797f6 100644 --- a/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp @@ -31,10 +31,11 @@ QAction* TaskBar::addTask(const QIcon& icon, const QString& text) QAction* action = QToolBar::addAction(icon, text); tasks << action; QToolButton* btn = getToolButton(action); - btn->setMaximumWidth(400); if (!btn) return action; + btn->setMaximumWidth(400); + btn->installEventFilter(this); taskGroup.addAction(action); connect(btn, SIGNAL(pressed()), this, SLOT(mousePressed())); return action; @@ -204,6 +205,21 @@ void TaskBar::dropEvent(QDropEvent *event) event->acceptProposedAction(); } +bool TaskBar::eventFilter(QObject* obj, QEvent* event) +{ + if (event->type() == QEvent::MouseButtonPress && dynamic_cast<QMouseEvent*>(event)->button() == Qt::MiddleButton) + { + QToolButton* btn = dynamic_cast<QToolButton*>(obj); + if (btn && btn->defaultAction()) + { + btn->defaultAction()->trigger(); + MDIAREA->closeActiveSubWindow(); + return true; + } + } + return QObject::eventFilter(obj, event); +} + void TaskBar::dragTaskTo(QAction* task, const QPoint& position) { int idx = getDropPositionIndex(task, position); diff --git a/SQLiteStudio3/guiSQLiteStudio/taskbar.h b/SQLiteStudio3/guiSQLiteStudio/taskbar.h index e858f7b..2cf6d56 100644 --- a/SQLiteStudio3/guiSQLiteStudio/taskbar.h +++ b/SQLiteStudio3/guiSQLiteStudio/taskbar.h @@ -30,6 +30,7 @@ class GUI_API_EXPORT TaskBar : public QToolBar void dragEnterEvent(QDragEnterEvent* event); void dragMoveEvent(QDragMoveEvent* event); void dropEvent(QDropEvent* event); + bool eventFilter(QObject *obj, QEvent *event); private: void init(); diff --git a/SQLiteStudio3/guiSQLiteStudio/uiloader.h b/SQLiteStudio3/guiSQLiteStudio/uiloader.h index 5d16bcb..e016b6c 100644 --- a/SQLiteStudio3/guiSQLiteStudio/uiloader.h +++ b/SQLiteStudio3/guiSQLiteStudio/uiloader.h @@ -6,6 +6,7 @@ #include <QHash> #include <QStack> #include <QXmlDefaultHandler> +#include <functional> class UiLoaderPropertyHandler; diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp index d54a359..a37f387 100644 --- a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp @@ -19,6 +19,7 @@ #include "dialogs/ddlpreviewdialog.h" #include "uiconfig.h" #include "services/config.h" +#include "services/codeformatter.h" #include <QPushButton> #include <QProgressBar> #include <QDebug> @@ -407,6 +408,12 @@ void ViewWindow::applyInitialTab() ui->tabWidget->setCurrentIndex(0); } +QString ViewWindow::getCurrentDdl() const +{ + static_qstring(ddlTpl, "CREATE VIEW %1 AS %2"); + return ddlTpl.arg(wrapObjIfNeeded(ui->nameEdit->text(), db->getDialect())).arg(ui->queryEdit->toPlainText()); +} + void ViewWindow::addTrigger() { DbObjectDialogs dialogs(db, this); @@ -653,13 +660,14 @@ void ViewWindow::parseDdl() createView->dialect = db->getDialect(); } originalCreateView = SqliteCreateViewPtr::create(*createView); - originalQuery = originalCreateView->select->detokenize(); + + // Replacing \r\n with \n, cause \r\n can be carried over from version 2.x.x, which did this incorrectly. + originalQuery = originalCreateView->select->detokenize().replace("\r\n", "\n"); } void ViewWindow::updateDdlTab() { - QString ddl = "CREATE VIEW %1 AS %2"; - ui->ddlEdit->setPlainText(ddl.arg(wrapObjIfNeeded(ui->nameEdit->text(), db->getDialect())).arg(ui->queryEdit->toPlainText())); + ui->ddlEdit->setPlainText(FORMATTER->format("sql", getCurrentDdl(), db)); } bool ViewWindow::isModified() const @@ -711,13 +719,22 @@ void ViewWindow::executeStructureChanges() QStringList sqls; QList<bool> sqlMandatoryFlags; - createView->rebuildTokens(); + QString theDdl = getCurrentDdl(); if (!existingView) { - sqls << createView->detokenize(); + sqls << theDdl; } else { + Parser parser(db->getDialect()); + if (!parser.parse(theDdl)) + { + qCritical() << "Could not re-parse the view for executing it:" << parser.getErrorString(); + notifyError(tr("The view code could not be parsed properly for execution. This is a SQLiteStudio's bug. Please report it.")); + return; + } + + createView = parser.getQueries().first().dynamicCast<SqliteCreateView>(); if (viewModifier) delete viewModifier; diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.h b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.h index 6b50135..62e1218 100644 --- a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.h +++ b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.h @@ -102,6 +102,7 @@ class GUI_API_EXPORT ViewWindow : public MdiChild void executeStructureChanges(); QString getCurrentTrigger() const; void applyInitialTab(); + QString getCurrentDdl() const; Db* db = nullptr; QString database; |
