mirror of
https://github.com/sqlitebrowser/sqlitebrowser.git
synced 2026-01-20 02:50:46 -06:00
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:
@@ -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(
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 &CSV</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSqlResultsSaveAsView">
|
||||
<property name="text">
|
||||
<string>Save as &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>
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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 &CSV</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSaveAsView">
|
||||
<property name="text">
|
||||
<string>Save as &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>
|
||||
|
||||
Reference in New Issue
Block a user