diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 7cb7c871..c0768f20 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -108,6 +108,11 @@ void MainWindow::init() popupTableMenu->addSeparator(); popupTableMenu->addAction(ui->actionExportCsvPopup); + popupSaveSqlFileMenu = new QMenu(this); + popupSaveSqlFileMenu->addAction(ui->actionSqlSaveFile); + popupSaveSqlFileMenu->addAction(ui->actionSqlSaveFileAs); + ui->actionSqlSaveFilePopup->setMenu(popupSaveSqlFileMenu); + // Add menu item for log dock ui->viewMenu->insertAction(ui->viewDBToolbarAction, ui->dockLog->toggleViewAction()); ui->viewMenu->actions().at(0)->setShortcut(QKeySequence(tr("Ctrl+L"))); @@ -1260,13 +1265,33 @@ void MainWindow::openSqlFile() else index = openSqlTab(); - qobject_cast(ui->tabSqlAreas->widget(index))->getEditor()->setPlainText(f.readAll()); + SqlExecutionArea* sqlarea = qobject_cast(ui->tabSqlAreas->widget(index)); + sqlarea->getEditor()->setPlainText(f.readAll()); + sqlarea->setFileName(file); QFileInfo fileinfo(file); ui->tabSqlAreas->setTabText(index, fileinfo.fileName()); } } void MainWindow::saveSqlFile() +{ + SqlExecutionArea* sqlarea = qobject_cast(ui->tabSqlAreas->currentWidget()); + + // If this SQL file hasn't been saved before open the Save As dialog. Otherwise just use the old file name for saving + if(sqlarea->fileName().isEmpty()) + { + saveSqlFileAs(); + } else { + QFile f(sqlarea->fileName()); + f.open(QIODevice::WriteOnly); + f.write(sqlarea->getSql().toUtf8()); + + QFileInfo fileinfo(sqlarea->fileName()); + ui->tabSqlAreas->setTabText(ui->tabSqlAreas->currentIndex(), fileinfo.fileName()); + } +} + +void MainWindow::saveSqlFileAs() { QString file = QFileDialog::getSaveFileName( this, @@ -1274,11 +1299,12 @@ void MainWindow::saveSqlFile() PreferencesDialog::getSettingsValue("db", "defaultlocation").toString(), tr("Text files(*.sql *.txt);;All files(*)")); - QFile f(file); - f.open(QIODevice::WriteOnly); - f.write(qobject_cast(ui->tabSqlAreas->currentWidget())->getSql().toUtf8()); - QFileInfo fileinfo(file); - ui->tabSqlAreas->setTabText(ui->tabSqlAreas->currentIndex(), fileinfo.fileName()); + if(!file.isEmpty()) + { + // Just set the selected file name and call the standard save action which is going to use it + qobject_cast(ui->tabSqlAreas->currentWidget())->setFileName(file); + saveSqlFile(); + } } void MainWindow::loadExtension() diff --git a/src/MainWindow.h b/src/MainWindow.h index aaebfc17..aba0f603 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -70,6 +70,7 @@ private: SqliteTableModel* m_currentPlotModel; QMenu *popupTableMenu; QMenu *recentFilesMenu; + QMenu *popupSaveSqlFileMenu; QLabel* statusEncodingLabel; QLabel* statusEncryptionLabel; @@ -159,6 +160,7 @@ private slots: void closeSqlTab(int index, bool force = false); void openSqlFile(); void saveSqlFile(); + void saveSqlFileAs(); void loadExtension(); void reloadSettings(); void httpresponse(QNetworkReply* reply); diff --git a/src/MainWindow.ui b/src/MainWindow.ui index 8ffdddfe..1f63f037 100644 --- a/src/MainWindow.ui +++ b/src/MainWindow.ui @@ -278,8 +278,8 @@ 0 0 - 294 - 444 + 575 + 458 @@ -733,7 +733,7 @@ - + @@ -1533,6 +1533,30 @@ Set Encryption + + + + :/icons/save_sql:/icons/save_sql + + + Save SQL file as + + + Save SQL file as + + + + + + :/icons/save_sql:/icons/save_sql + + + Save SQL file + + + Save SQL file + + @@ -2340,6 +2364,38 @@ + + actionSqlSaveFilePopup + triggered() + MainWindow + saveSqlFile() + + + -1 + -1 + + + 499 + 314 + + + + + actionSqlSaveFileAs + triggered() + MainWindow + saveSqlFileAs() + + + -1 + -1 + + + 499 + 314 + + + fileOpen() @@ -2390,5 +2446,6 @@ saveProject() fileAttach() editEncryption() + saveSqlFileAs() diff --git a/src/SqlExecutionArea.h b/src/SqlExecutionArea.h index 47447ab1..fd484763 100644 --- a/src/SqlExecutionArea.h +++ b/src/SqlExecutionArea.h @@ -24,6 +24,9 @@ public: QString getSql() const; QString getSelectedSql() const; + QString fileName() const { return sqlFileName; } + void setFileName(const QString& filename) { sqlFileName = filename; } + SqliteTableModel* getModel() { return model; } QTextEdit* getResultView(); SqlTextEdit* getEditor(); @@ -40,6 +43,7 @@ private: Ui::SqlExecutionArea* ui; SqliteTableModel* model; QMenu* menuPopupSave; + QString sqlFileName; }; #endif