From 34279ebf088068b9285aa2f9cafba01388443a52 Mon Sep 17 00:00:00 2001 From: Duncan Ogilvie Date: Mon, 14 May 2018 20:09:43 +0200 Subject: [PATCH] GUI: fix performance bottleneck with Qt signals --- .gitignore | 1 + src/gui/Src/BasicView/AbstractTableView.cpp | 3 +-- src/gui/Src/Gui/SymbolView.cpp | 7 ++++--- src/gui/Src/Gui/ZehSymbolTable.cpp | 10 +++++++--- src/gui/Src/Gui/ZehSymbolTable.h | 5 +++++ 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 4356453a..bf80dcc2 100644 --- a/.gitignore +++ b/.gitignore @@ -76,3 +76,4 @@ src/build-*/ .scannerwork/ bw-output/ build-wrapper* +My Amplifier Results - */ diff --git a/src/gui/Src/BasicView/AbstractTableView.cpp b/src/gui/Src/BasicView/AbstractTableView.cpp index 93670579..a4f443a5 100644 --- a/src/gui/Src/BasicView/AbstractTableView.cpp +++ b/src/gui/Src/BasicView/AbstractTableView.cpp @@ -611,6 +611,7 @@ void AbstractTableView::resizeEvent(QResizeEvent* event) if(event->size().height() != event->oldSize().height()) { updateScrollBarRange(getRowCount()); + emit viewableRowsChanged(getViewableRowsCount()); mShouldReload = true; } QWidget::resizeEvent(event); @@ -852,8 +853,6 @@ void AbstractTableView::updateScrollBarRange(dsint range) verticalScrollBar()->setRange(0, 0); verticalScrollBar()->setSingleStep(getRowHeight()); verticalScrollBar()->setPageStep(viewableRowsCount * getRowHeight()); - - emit viewableRowsChanged(viewableRowsCount); } /************************************************************************************ diff --git a/src/gui/Src/Gui/SymbolView.cpp b/src/gui/Src/Gui/SymbolView.cpp index a11bc283..954f19f9 100644 --- a/src/gui/Src/Gui/SymbolView.cpp +++ b/src/gui/Src/Gui/SymbolView.cpp @@ -48,19 +48,20 @@ public: void filter(const QString & filter, FilterType type, int startColumn) override { mSearchList->setRowCount(0); + int newRowCount = 0; mSearchList->mData.clear(); mSearchList->mData.reserve(mList->mData.size()); mSearchList->mModules = mList->mModules; int rows = mList->getRowCount(); - for(int i = 0, j = 0; i < rows; i++) + for(int i = 0; i < rows; i++) { if(rowMatchesFilter(filter, type, i, startColumn)) { - mSearchList->setRowCount(j + 1); + newRowCount++; mSearchList->mData.push_back(mList->mData.at(i)); - j++; } } + mSearchList->setRowCount(newRowCount); } void addAction(QAction* action) diff --git a/src/gui/Src/Gui/ZehSymbolTable.cpp b/src/gui/Src/Gui/ZehSymbolTable.cpp index 2fd0ef4d..bf8e077b 100644 --- a/src/gui/Src/Gui/ZehSymbolTable.cpp +++ b/src/gui/Src/Gui/ZehSymbolTable.cpp @@ -37,6 +37,10 @@ ZehSymbolTable::ZehSymbolTable(QWidget* parent) addColumnAt(2000, tr("Symbol (undecorated)"), true); loadColumnFromConfig("Symbol"); updateColors(); + + trImport = tr("Import"); + trExport = tr("Export"); + trSymbol = tr("Symbol"); } QString ZehSymbolTable::getCellContent(int r, int c) @@ -54,11 +58,11 @@ QString ZehSymbolTable::getCellContent(int r, int c) switch(info->type) { case sym_import: - return tr("Import"); + return trImport; case sym_export: - return tr("Export"); + return trExport; case sym_symbol: - return tr("Symbol"); + return trSymbol; default: __debugbreak(); } diff --git a/src/gui/Src/Gui/ZehSymbolTable.h b/src/gui/Src/Gui/ZehSymbolTable.h index c1d9e411..1db629fd 100644 --- a/src/gui/Src/Gui/ZehSymbolTable.h +++ b/src/gui/Src/Gui/ZehSymbolTable.h @@ -22,6 +22,11 @@ private: std::vector mData; QMutex mMutex; + //Caching of translations to fix a bottleneck + QString trImport; + QString trExport; + QString trSymbol; + enum { ColAddr,