aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/verifiablewizardpage.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp9
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.h4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/img/sqlitestudio_logo.pngbin0 -> 15645 bytes
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp3
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp12
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mdiwindow.h4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/taskbar.cpp18
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/taskbar.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/uiloader.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp27
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.h1
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
new file mode 100644
index 0000000..d2138ea
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/img/sqlitestudio_logo.png
Binary files differ
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;