From 3ae4267a8b53fcd7e3a5ae66103a6a6cab5e091e Mon Sep 17 00:00:00 2001 From: Martin Kleusberg Date: Sun, 15 Oct 2017 11:38:39 +0200 Subject: [PATCH] Fix column widths in Execute SQL tab after multi-threading This fixes the automatic column width adjustment in the Execute SQL tab results view. This was broken by the introduction of multi-threaded loading of the table data. --- src/SqlExecutionArea.cpp | 14 +++++++++++++- src/SqlExecutionArea.h | 2 ++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/SqlExecutionArea.cpp b/src/SqlExecutionArea.cpp index 361e9b73..7bac3314 100644 --- a/src/SqlExecutionArea.cpp +++ b/src/SqlExecutionArea.cpp @@ -12,7 +12,8 @@ SqlExecutionArea::SqlExecutionArea(DBBrowserDB& _db, QWidget* parent) : QWidget(parent), db(_db), - ui(new Ui::SqlExecutionArea) + ui(new Ui::SqlExecutionArea), + m_columnsResized(false) { // Create UI ui->setupUi(this); @@ -20,6 +21,7 @@ SqlExecutionArea::SqlExecutionArea(DBBrowserDB& _db, QWidget* parent) : // Create model model = new SqliteTableModel(db, this, Settings::getValue("db", "prefetchsize").toInt()); ui->tableResult->setModel(model); + connect(model, &SqliteTableModel::finishedFetch, this, &SqlExecutionArea::fetchedData); // Load settings reloadSettings(); @@ -42,7 +44,17 @@ QString SqlExecutionArea::getSelectedSql() const void SqlExecutionArea::finishExecution(const QString& result) { + m_columnsResized = false; ui->editErrors->setPlainText(result); +} + +void SqlExecutionArea::fetchedData() +{ + // Don't resize the columns more than once to fit their contents. This is necessary because the finishedFetch signal of the model + // is emitted for each loaded prefetch block and we want to avoid resizes while scrolling down. + if(m_columnsResized) + return; + m_columnsResized = true; // Set column widths according to their contents but make sure they don't exceed a certain size ui->tableResult->resizeColumnsToContents(); diff --git a/src/SqlExecutionArea.h b/src/SqlExecutionArea.h index e5cf3319..58e0429d 100644 --- a/src/SqlExecutionArea.h +++ b/src/SqlExecutionArea.h @@ -35,12 +35,14 @@ public slots: virtual void saveAsCsv(); virtual void saveAsView(); virtual void reloadSettings(); + void fetchedData(); private: DBBrowserDB& db; SqliteTableModel* model; QString sqlFileName; Ui::SqlExecutionArea* ui; + bool m_columnsResized; // This is set to true if the columns of the table view were already adjusted to fit their contents }; #endif