Move button for saving Execute SQL results to the toolbar

In the Execute SQL tab, move the button for saving the results of a
query as either a CSV file or a view from the bottom of the results view
to the toolbar at the top.

See issue #1122.
This commit is contained in:
Martin Kleusberg
2017-09-10 15:00:31 +02:00
parent b7a00d301a
commit e9d4b3912a
6 changed files with 115 additions and 84 deletions

View File

@@ -154,6 +154,12 @@ void MainWindow::init()
popupSaveSqlFileMenu->addAction(ui->actionSqlSaveFileAs);
ui->actionSqlSaveFilePopup->setMenu(popupSaveSqlFileMenu);
popupSaveSqlResultsMenu = new QMenu(this);
popupSaveSqlResultsMenu->addAction(ui->actionSqlResultsExportCsv);
popupSaveSqlResultsMenu->addAction(ui->actionSqlResultsSaveAsView);
ui->actionSqlResultsSave->setMenu(popupSaveSqlResultsMenu);
qobject_cast<QToolButton*>(ui->toolbarSql->widgetForAction(ui->actionSqlResultsSave))->setPopupMode(QToolButton::InstantPopup);
popupBrowseDataHeaderMenu = new QMenu(this);
popupBrowseDataHeaderMenu->addAction(ui->actionShowRowidColumn);
popupBrowseDataHeaderMenu->addAction(ui->actionUnlockViewEditing);
@@ -1044,7 +1050,8 @@ void MainWindow::executeQuery()
// The query takes the last placeholder as it may itself contain the sequence '%' + number
statusMessage = tr("%1 rows returned in %2ms from: %3").arg(
sqlWidget->getModel()->totalRowCount()).arg(timer.elapsed()).arg(queryPart.trimmed());
sqlWidget->enableSaveButton(true);
ui->actionSqlResultsSave->setEnabled(true);
ui->actionSqlResultsSaveAsView->setEnabled(!db.readOnly());
sql3status = SQLITE_OK;
}
else
@@ -1505,6 +1512,9 @@ void MainWindow::activateFields(bool enable)
ui->dockEdit->setEnabled(enable && write);
ui->dockPlot->setEnabled(enable);
if(!enable)
ui->actionSqlResultsSave->setEnabled(false);
remoteDock->enableButtons();
}
@@ -1686,6 +1696,13 @@ unsigned int MainWindow::openSqlTab(bool resetCounter)
return index;
}
void MainWindow::changeSqlTab(int /*index*/)
{
// Instead of figuring out if there are some execution results in the new tab and which statement was used to generate them,
// we just disable the export buttons in the toolbar.
ui->actionSqlResultsSave->setEnabled(false);
}
void MainWindow::openSqlFile()
{
QString file = FileDialog::getOpenFileName(
@@ -1757,6 +1774,16 @@ void MainWindow::saveSqlFileAs()
}
}
void MainWindow::saveSqlResultsAsCsv()
{
qobject_cast<SqlExecutionArea*>(ui->tabSqlAreas->currentWidget())->saveAsCsv();
}
void MainWindow::saveSqlResultsAsView()
{
qobject_cast<SqlExecutionArea*>(ui->tabSqlAreas->currentWidget())->saveAsView();
}
void MainWindow::loadExtension()
{
QString file = FileDialog::getOpenFileName(

View File

@@ -129,9 +129,10 @@ private:
SqliteTableModel* m_browseTableModel;
SqliteTableModel* m_currentTabTableModel;
QMenu *popupTableMenu;
QMenu *recentFilesMenu;
QMenu *popupSaveSqlFileMenu;
QMenu* popupTableMenu;
QMenu* recentFilesMenu;
QMenu* popupSaveSqlFileMenu;
QMenu* popupSaveSqlResultsMenu;
QMenu* popupBrowseDataHeaderMenu;
QLabel* statusEncodingLabel;
@@ -229,9 +230,12 @@ private slots:
void browseTableHeaderClicked(int logicalindex);
unsigned int openSqlTab(bool resetCounter = false);
void closeSqlTab(int index, bool force = false);
void changeSqlTab(int index);
void openSqlFile();
void saveSqlFile();
void saveSqlFileAs();
void saveSqlResultsAsCsv();
void saveSqlResultsAsView();
void loadExtension();
void reloadSettings();
void checkNewVersion(const QString& versionstring, const QString& url);

View File

@@ -830,6 +830,8 @@
<addaction name="separator"/>
<addaction name="actionExecuteSql"/>
<addaction name="actionSqlExecuteLine"/>
<addaction name="separator"/>
<addaction name="actionSqlResultsSave"/>
</widget>
</item>
<item>
@@ -1778,6 +1780,31 @@
<string>This unlocks the current view for editing. However, you will need appropriate triggers for editing.</string>
</property>
</action>
<action name="actionSqlResultsSave">
<property name="icon">
<iconset resource="icons/icons.qrc">
<normaloff>:/icons/save_table</normaloff>:/icons/save_table</iconset>
</property>
<property name="text">
<string>Save results</string>
</property>
<property name="toolTip">
<string>Save the results view</string>
</property>
</action>
<action name="actionSqlResultsExportCsv">
<property name="text">
<string>Export to &amp;CSV</string>
</property>
</action>
<action name="actionSqlResultsSaveAsView">
<property name="text">
<string>Save as &amp;view</string>
</property>
<property name="toolTip">
<string>Save as view</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
@@ -2413,6 +2440,22 @@
</hint>
</hints>
</connection>
<connection>
<sender>tabSqlAreas</sender>
<signal>currentChanged(int)</signal>
<receiver>MainWindow</receiver>
<slot>changeSqlTab(int)</slot>
<hints>
<hint type="sourcelabel">
<x>91</x>
<y>259</y>
</hint>
<hint type="destinationlabel">
<x>-1</x>
<y>51</y>
</hint>
</hints>
</connection>
<connection>
<sender>actionExecuteSql</sender>
<signal>triggered()</signal>
@@ -2829,6 +2872,38 @@
</hint>
</hints>
</connection>
<connection>
<sender>actionSqlResultsExportCsv</sender>
<signal>triggered()</signal>
<receiver>MainWindow</receiver>
<slot>saveSqlResultsAsCsv()</slot>
<hints>
<hint type="sourcelabel">
<x>-1</x>
<y>-1</y>
</hint>
<hint type="destinationlabel">
<x>518</x>
<y>314</y>
</hint>
</hints>
</connection>
<connection>
<sender>actionSqlResultsSaveAsView</sender>
<signal>triggered()</signal>
<receiver>MainWindow</receiver>
<slot>saveSqlResultsAsView()</slot>
<hints>
<hint type="sourcelabel">
<x>-1</x>
<y>-1</y>
</hint>
<hint type="destinationlabel">
<x>518</x>
<y>314</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>fileOpen()</slot>
@@ -2893,5 +2968,8 @@
<slot>exportTableToJson()</slot>
<slot>fileOpenReadOnly()</slot>
<slot>unlockViewEditing(bool)</slot>
<slot>saveSqlResultsAsCsv()</slot>
<slot>saveSqlResultsAsView()</slot>
<slot>changeSqlTab(int)</slot>
</slots>
</ui>

View File

@@ -6,7 +6,6 @@
#include "Settings.h"
#include "ExportDataDialog.h"
#include <QMenu>
#include <QInputDialog>
#include <QMessageBox>
@@ -22,12 +21,6 @@ SqlExecutionArea::SqlExecutionArea(DBBrowserDB& _db, QWidget* parent) :
model = new SqliteTableModel(db, this, Settings::getValue("db", "prefetchsize").toInt());
ui->tableResult->setModel(model);
// Create popup menu for save button
menuPopupSave = new QMenu(this);
menuPopupSave->addAction(ui->actionExportCsv);
menuPopupSave->addAction(ui->actionSaveAsView);
ui->buttonSave->setMenu(menuPopupSave);
// Load settings
reloadSettings();
}
@@ -70,11 +63,6 @@ ExtendedTableWidget *SqlExecutionArea::getTableResult()
return ui->tableResult;
}
void SqlExecutionArea::enableSaveButton(bool enable)
{
ui->buttonSave->setEnabled(enable);
}
void SqlExecutionArea::saveAsCsv()
{
ExportDataDialog dialog(db, ExportDataDialog::ExportFormatCsv, this, model->query());

View File

@@ -6,7 +6,6 @@
class SqlTextEdit;
class SqliteTableModel;
class DBBrowserDB;
class QMenu;
class ExtendedTableWidget;
namespace Ui {
@@ -33,7 +32,6 @@ public:
public slots:
virtual void finishExecution(const QString& result);
virtual void enableSaveButton(bool enable);
virtual void saveAsCsv();
virtual void saveAsView();
virtual void reloadSettings();
@@ -41,7 +39,6 @@ public slots:
private:
DBBrowserDB& db;
SqliteTableModel* model;
QMenu* menuPopupSave;
QString sqlFileName;
Ui::SqlExecutionArea* ui;
};

View File

@@ -70,38 +70,11 @@
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="buttonSave">
<property name="enabled">
<bool>false</bool>
</property>
<property name="icon">
<iconset resource="icons/icons.qrc">
<normaloff>:/icons/save_table</normaloff>:/icons/save_table</iconset>
</property>
<property name="popupMode">
<enum>QToolButton::InstantPopup</enum>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
<action name="actionExportCsv">
<property name="text">
<string>Export to &amp;CSV</string>
</property>
</action>
<action name="actionSaveAsView">
<property name="text">
<string>Save as &amp;view</string>
</property>
<property name="toolTip">
<string>Save as view</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
@@ -123,45 +96,9 @@
<tabstop>editEditor</tabstop>
<tabstop>tableResult</tabstop>
<tabstop>editErrors</tabstop>
<tabstop>buttonSave</tabstop>
</tabstops>
<resources>
<include location="icons/icons.qrc"/>
</resources>
<connections>
<connection>
<sender>actionExportCsv</sender>
<signal>triggered()</signal>
<receiver>SqlExecutionArea</receiver>
<slot>saveAsCsv()</slot>
<hints>
<hint type="sourcelabel">
<x>-1</x>
<y>-1</y>
</hint>
<hint type="destinationlabel">
<x>183</x>
<y>215</y>
</hint>
</hints>
</connection>
<connection>
<sender>actionSaveAsView</sender>
<signal>triggered()</signal>
<receiver>SqlExecutionArea</receiver>
<slot>saveAsView()</slot>
<hints>
<hint type="sourcelabel">
<x>-1</x>
<y>-1</y>
</hint>
<hint type="destinationlabel">
<x>183</x>
<y>215</y>
</hint>
</hints>
</connection>
</connections>
<resources/>
<connections/>
<slots>
<slot>saveAsCsv()</slot>
<slot>saveAsView()</slot>