From c269493942feccef7936a6b5d18a2b9f4d8d28cb Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Thu, 18 Aug 2016 12:12:19 +0200 Subject: [PATCH] ui: Added scroll speed setting to preferences --- bin/app/user/ApplicationSettings_template.xml | 46 ++++++++++++------- src/lib/Application.cpp | 2 + src/lib/settings/ApplicationSettings.cpp | 10 ++++ src/lib/settings/ApplicationSettings.h | 4 ++ .../messaging/type/MessageScrollSpeedChange.h | 28 +++++++++++ src/lib_gui/CMakeLists.txt | 2 + .../qt/element/QtAutocompletionList.cpp | 3 ++ src/lib_gui/qt/element/QtAutocompletionList.h | 4 ++ src/lib_gui/qt/element/QtCodeArea.cpp | 7 +-- src/lib_gui/qt/element/QtCodeArea.h | 3 ++ src/lib_gui/qt/element/QtCodeNavigator.cpp | 2 + src/lib_gui/qt/element/QtCodeNavigator.h | 3 ++ .../utility/QtScrollSpeedChangeListener.cpp | 35 ++++++++++++++ .../qt/utility/QtScrollSpeedChangeListener.h | 30 ++++++++++++ src/lib_gui/qt/view/QtGraphView.cpp | 16 ++++--- src/lib_gui/qt/view/QtGraphView.h | 4 ++ src/lib_gui/qt/window/QtMainWindow.cpp | 2 +- .../project_wizzard/QtProjectWizzard.cpp | 8 ++++ .../QtProjectWizzardContentPreferences.cpp | 23 +++++++++- .../QtProjectWizzardContentPreferences.h | 1 + 20 files changed, 206 insertions(+), 27 deletions(-) create mode 100644 src/lib/utility/messaging/type/MessageScrollSpeedChange.h create mode 100644 src/lib_gui/qt/utility/QtScrollSpeedChangeListener.cpp create mode 100644 src/lib_gui/qt/utility/QtScrollSpeedChangeListener.h diff --git a/bin/app/user/ApplicationSettings_template.xml b/bin/app/user/ApplicationSettings_template.xml index 26e39e9b..8611acb8 100644 --- a/bin/app/user/ApplicationSettings_template.xml +++ b/bin/app/user/ApplicationSettings_template.xml @@ -7,34 +7,47 @@ - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -48,6 +61,7 @@ + diff --git a/src/lib/Application.cpp b/src/lib/Application.cpp index c09e5230..988c993d 100644 --- a/src/lib/Application.cpp +++ b/src/lib/Application.cpp @@ -5,6 +5,7 @@ #include "utility/messaging/MessageQueue.h" #include "utility/messaging/type/MessageActivateNodes.h" #include "utility/messaging/type/MessageDispatchWhenLicenseValid.h" +#include "utility/messaging/type/MessageScrollSpeedChange.h" #include "utility/messaging/type/MessageStatus.h" #include "utility/messaging/type/MessageShowStartScreen.h" #include "utility/scheduling/TaskScheduler.h" @@ -72,6 +73,7 @@ void Application::loadSettings() { std::shared_ptr settings = ApplicationSettings::getInstance(); settings->load(FilePath(UserPaths::getAppSettingsPath())); + loadStyle(settings->getColorSchemePath()); } diff --git a/src/lib/settings/ApplicationSettings.cpp b/src/lib/settings/ApplicationSettings.cpp index 9dc35d5b..67686a29 100644 --- a/src/lib/settings/ApplicationSettings.cpp +++ b/src/lib/settings/ApplicationSettings.cpp @@ -113,6 +113,16 @@ int ApplicationSettings::getWindowBaseHeight() const return getValue("application/window_base_height", 500); } +float ApplicationSettings::getScrollSpeed() const +{ + return getValue("application/scroll_speed", 1.0f); +} + +void ApplicationSettings::setScrollSpeed(float scrollSpeed) +{ + setValue("application/scroll_speed", scrollSpeed); +} + int ApplicationSettings::getIndexerThreadCount() const { return getValue("indexing/indexer_thread_count", 4); diff --git a/src/lib/settings/ApplicationSettings.h b/src/lib/settings/ApplicationSettings.h index cca50c3c..a2b2a769 100644 --- a/src/lib/settings/ApplicationSettings.h +++ b/src/lib/settings/ApplicationSettings.h @@ -39,6 +39,10 @@ public: int getWindowBaseWidth() const; int getWindowBaseHeight() const; + float getScrollSpeed() const; + void setScrollSpeed(float scrollSpeed); + + // indexing int getIndexerThreadCount() const; void setIndexerThreadCount(const int count); diff --git a/src/lib/utility/messaging/type/MessageScrollSpeedChange.h b/src/lib/utility/messaging/type/MessageScrollSpeedChange.h new file mode 100644 index 00000000..d2d7400a --- /dev/null +++ b/src/lib/utility/messaging/type/MessageScrollSpeedChange.h @@ -0,0 +1,28 @@ +#ifndef MESSAGE_SCROLL_SPEED_CHANGE_H +#define MESSAGE_SCROLL_SPEED_CHANGE_H + +#include "utility/messaging/Message.h" + +class MessageScrollSpeedChange + : public Message +{ +public: + MessageScrollSpeedChange(float scrollSpeed) + : scrollSpeed(scrollSpeed) + { + } + + static const std::string getStaticType() + { + return "MessageScrollSpeedChange"; + } + + virtual void print(std::ostream& os) const + { + os << scrollSpeed; + } + + const float scrollSpeed; +}; + +#endif // MESSAGE_SCROLL_SPEED_CHANGE_H diff --git a/src/lib_gui/CMakeLists.txt b/src/lib_gui/CMakeLists.txt index 3f06252b..56a7a7c9 100644 --- a/src/lib_gui/CMakeLists.txt +++ b/src/lib_gui/CMakeLists.txt @@ -60,6 +60,8 @@ add_files( qt/utility/QtDeviceScaledPixmap.h qt/utility/QtHighlighter.cpp qt/utility/QtHighlighter.h + qt/utility/QtScrollSpeedChangeListener.cpp + qt/utility/QtScrollSpeedChangeListener.h qt/utility/QtThreadedFunctor.h qt/utility/utilityQt.cpp qt/utility/utilityQt.h diff --git a/src/lib_gui/qt/element/QtAutocompletionList.cpp b/src/lib_gui/qt/element/QtAutocompletionList.cpp index 5c78c486..9e286029 100644 --- a/src/lib_gui/qt/element/QtAutocompletionList.cpp +++ b/src/lib_gui/qt/element/QtAutocompletionList.cpp @@ -204,6 +204,9 @@ QtAutocompletionList::QtAutocompletionList(QWidget* parent) setModelSorting(QCompleter::UnsortedModel); setCompletionPrefix(""); setMaxVisibleItems(20); + + m_scrollSpeedChangeListenerHorizontal.setScrollBar(list->horizontalScrollBar()); + m_scrollSpeedChangeListenerVertical.setScrollBar(list->verticalScrollBar()); } QtAutocompletionList::~QtAutocompletionList() diff --git a/src/lib_gui/qt/element/QtAutocompletionList.h b/src/lib_gui/qt/element/QtAutocompletionList.h index 73064e84..bdbd690e 100644 --- a/src/lib_gui/qt/element/QtAutocompletionList.h +++ b/src/lib_gui/qt/element/QtAutocompletionList.h @@ -10,6 +10,7 @@ #include #include "data/search/SearchMatch.h" +#include "qt/utility/QtScrollSpeedChangeListener.h" class QtAutocompletionModel : public QAbstractTableModel @@ -70,6 +71,9 @@ private slots: private: std::shared_ptr m_model; std::shared_ptr m_delegate; + + QtScrollSpeedChangeListener m_scrollSpeedChangeListenerHorizontal; + QtScrollSpeedChangeListener m_scrollSpeedChangeListenerVertical; }; #endif // QT_AUTOCOMPLETION_LIST diff --git a/src/lib_gui/qt/element/QtCodeArea.cpp b/src/lib_gui/qt/element/QtCodeArea.cpp index 1ce301dc..8682fa96 100644 --- a/src/lib_gui/qt/element/QtCodeArea.cpp +++ b/src/lib_gui/qt/element/QtCodeArea.cpp @@ -1,13 +1,13 @@ #include "qt/element/QtCodeArea.h" -#include +#include #include #include -#include +#include #include #include +#include #include -#include #include "utility/messaging/type/MessageActivateLocalSymbols.h" #include "utility/messaging/type/MessageActivateTokenLocations.h" @@ -130,6 +130,7 @@ QtCodeArea::QtCodeArea( // MouseWheelOverScrollbarFilter is deleted by parent. horizontalScrollBar()->installEventFilter(new MouseWheelOverScrollbarFilter(this)); + m_scrollSpeedChangeListener.setScrollBar(horizontalScrollBar()); createActions(); diff --git a/src/lib_gui/qt/element/QtCodeArea.h b/src/lib_gui/qt/element/QtCodeArea.h index 2b4389c7..0a2e3c7a 100644 --- a/src/lib_gui/qt/element/QtCodeArea.h +++ b/src/lib_gui/qt/element/QtCodeArea.h @@ -8,6 +8,7 @@ #include #include "data/location/LocationType.h" +#include "qt/utility/QtScrollSpeedChangeListener.h" #include "utility/types.h" class QDragMoveEvent; @@ -190,6 +191,8 @@ private: std::vector m_lineLengths; int m_endTextEditPosition; + + QtScrollSpeedChangeListener m_scrollSpeedChangeListener; }; #endif // QT_CODE_AREA_H diff --git a/src/lib_gui/qt/element/QtCodeNavigator.cpp b/src/lib_gui/qt/element/QtCodeNavigator.cpp index 43cd035a..de6f0aca 100644 --- a/src/lib_gui/qt/element/QtCodeNavigator.cpp +++ b/src/lib_gui/qt/element/QtCodeNavigator.cpp @@ -80,6 +80,8 @@ QtCodeNavigator::QtCodeNavigator(QWidget* parent) m_scrollArea->setWidgetResizable(true); m_scrollArea->setWidget(m_list); + m_scrollSpeedChangeListener.setScrollBar(m_scrollArea->verticalScrollBar()); + connect(m_scrollArea->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(scrolled(int))); connect(this, SIGNAL(shouldScrollToSnippet(QtCodeSnippet*, uint)), this, SLOT(scrollToSnippet(QtCodeSnippet*, uint)), Qt::QueuedConnection); diff --git a/src/lib_gui/qt/element/QtCodeNavigator.h b/src/lib_gui/qt/element/QtCodeNavigator.h index 36c74a1f..4ecf6ff6 100644 --- a/src/lib_gui/qt/element/QtCodeNavigator.h +++ b/src/lib_gui/qt/element/QtCodeNavigator.h @@ -5,6 +5,7 @@ #include #include "qt/element/QtCodeFileList.h" +#include "qt/utility/QtScrollSpeedChangeListener.h" #include "qt/utility/QtThreadedFunctor.h" #include "utility/messaging/MessageListener.h" #include "utility/messaging/type/MessageCodeReference.h" @@ -125,6 +126,8 @@ private: QtCodeFile* m_scrollToFile; uint m_scrollToLine; Id m_scrollToLocationId; + + QtScrollSpeedChangeListener m_scrollSpeedChangeListener; }; #endif // QT_CODE_NAVIGATOR_H diff --git a/src/lib_gui/qt/utility/QtScrollSpeedChangeListener.cpp b/src/lib_gui/qt/utility/QtScrollSpeedChangeListener.cpp new file mode 100644 index 00000000..5e227454 --- /dev/null +++ b/src/lib_gui/qt/utility/QtScrollSpeedChangeListener.cpp @@ -0,0 +1,35 @@ +#include "qt/utility/QtScrollSpeedChangeListener.h" + +#include + +#include + +#include "settings/ApplicationSettings.h" + +QtScrollSpeedChangeListener::QtScrollSpeedChangeListener() + : m_changeScrollSpeedFunctor(std::bind(&QtScrollSpeedChangeListener::doChangeScrollSpeed, this, std::placeholders::_1)) + , m_scrollBar(nullptr) + , m_singleStep(1) +{ +} + +void QtScrollSpeedChangeListener::setScrollBar(QScrollBar* scrollbar) +{ + m_scrollBar = scrollbar; + m_singleStep = scrollbar->singleStep(); + + doChangeScrollSpeed(ApplicationSettings::getInstance()->getScrollSpeed()); +} + +void QtScrollSpeedChangeListener::handleMessage(MessageScrollSpeedChange* message) +{ + m_changeScrollSpeedFunctor(message->scrollSpeed); +} + +void QtScrollSpeedChangeListener::doChangeScrollSpeed(float scrollSpeed) +{ + if (m_scrollBar) + { + m_scrollBar->setSingleStep(std::ceil(m_singleStep * scrollSpeed)); + } +} diff --git a/src/lib_gui/qt/utility/QtScrollSpeedChangeListener.h b/src/lib_gui/qt/utility/QtScrollSpeedChangeListener.h new file mode 100644 index 00000000..fa3def6f --- /dev/null +++ b/src/lib_gui/qt/utility/QtScrollSpeedChangeListener.h @@ -0,0 +1,30 @@ +#ifndef QT_SCROLL_SPEED_CHANGE_LISTENER +#define QT_SCROLL_SPEED_CHANGE_LISTENER + +#include "utility/messaging/MessageListener.h" +#include "utility/messaging/type/MessageScrollSpeedChange.h" + +#include "qt/utility/QtThreadedFunctor.h" + +class QScrollBar; + +class QtScrollSpeedChangeListener + : public MessageListener +{ +public: + QtScrollSpeedChangeListener(); + + void setScrollBar(QScrollBar* scrollbar); + +private: + void handleMessage(MessageScrollSpeedChange* message); + + void doChangeScrollSpeed(float scrollSpeed); + + QtThreadedFunctor m_changeScrollSpeedFunctor; + + QScrollBar* m_scrollBar; + int m_singleStep; +}; + +#endif // QT_SCROLL_SPEED_CHANGE_LISTENER diff --git a/src/lib_gui/qt/view/QtGraphView.cpp b/src/lib_gui/qt/view/QtGraphView.cpp index 74d8c9b9..85ce908f 100644 --- a/src/lib_gui/qt/view/QtGraphView.cpp +++ b/src/lib_gui/qt/view/QtGraphView.cpp @@ -13,12 +13,12 @@ #include "component/controller/helper/DummyNode.h" #include "component/controller/helper/GraphPostprocessor.h" #include "component/view/GraphViewStyle.h" +#include "settings/ColorScheme.h" #include "utility/messaging/type/MessageDeactivateEdge.h" #include "utility/ResourcePaths.h" -#include "qt/utility/utilityQt.h" - #include "qt/graphics/QtGraphicsView.h" +#include "qt/utility/utilityQt.h" #include "qt/view/QtViewWidgetWrapper.h" #include "qt/view/graphElements/nodeComponents/QtGraphNodeComponentClickable.h" #include "qt/view/graphElements/nodeComponents/QtGraphNodeComponentMoveable.h" @@ -27,7 +27,6 @@ #include "qt/view/graphElements/QtGraphNodeBundle.h" #include "qt/view/graphElements/QtGraphNodeData.h" #include "qt/view/graphElements/QtGraphNodeExpandToggle.h" -#include "settings/ColorScheme.h" QtGraphView::QtGraphView(ViewLayout* viewLayout) : GraphView(viewLayout) @@ -72,6 +71,9 @@ void QtGraphView::initView() connect(view, SIGNAL(emptySpaceClicked()), this, SLOT(clickedInEmptySpace())); + m_scrollSpeedChangeListenerHorizontal.setScrollBar(view->horizontalScrollBar()); + m_scrollSpeedChangeListenerVertical.setScrollBar(view->verticalScrollBar()); + doRefreshView(); } @@ -305,10 +307,12 @@ void QtGraphView::doRefreshView() doClear(); doResize(); - std::string css = utility::getStyleSheet(ResourcePaths::getGuiPath() + "graph_view/graph_view.css"); - getView()->setStyleSheet(css.c_str()); + QtGraphicsView* view = getView(); - getView()->setAppZoomFactor(GraphViewStyle::getZoomFactor()); + std::string css = utility::getStyleSheet(ResourcePaths::getGuiPath() + "graph_view/graph_view.css"); + view->setStyleSheet(css.c_str()); + + view->setAppZoomFactor(GraphViewStyle::getZoomFactor()); } std::shared_ptr QtGraphView::findNodeRecursive(const std::list>& nodes, Id tokenId) diff --git a/src/lib_gui/qt/view/QtGraphView.h b/src/lib_gui/qt/view/QtGraphView.h index b56fe306..d9b0b5a6 100644 --- a/src/lib_gui/qt/view/QtGraphView.h +++ b/src/lib_gui/qt/view/QtGraphView.h @@ -5,6 +5,7 @@ #include #include "component/view/GraphView.h" +#include "qt/utility/QtScrollSpeedChangeListener.h" #include "qt/utility/QtThreadedFunctor.h" #include "utility/types.h" @@ -110,6 +111,9 @@ private: std::shared_ptr m_transition; QPointF m_sceneRectOffset; + + QtScrollSpeedChangeListener m_scrollSpeedChangeListenerHorizontal; + QtScrollSpeedChangeListener m_scrollSpeedChangeListenerVertical; }; #endif // QT_GRAPH_VIEW_H diff --git a/src/lib_gui/qt/window/QtMainWindow.cpp b/src/lib_gui/qt/window/QtMainWindow.cpp index 8bc79ec1..97a9c3f7 100644 --- a/src/lib_gui/qt/window/QtMainWindow.cpp +++ b/src/lib_gui/qt/window/QtMainWindow.cpp @@ -10,6 +10,7 @@ #include #include +#include "Application.h" #include "component/view/View.h" #include "component/view/CompositeView.h" #include "qt/utility/QtContextMenu.h" @@ -21,7 +22,6 @@ #include "qt/window/QtAbout.h" #include "qt/window/QtLicense.h" #include "settings/ApplicationSettings.h" -#include "Application.h" #include "utility/file/FileSystem.h" #include "utility/logging/logging.h" #include "utility/messaging/type/MessageCodeReference.h" diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp index 4bd72a70..dd46e276 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp @@ -23,6 +23,7 @@ #include "utility/messaging/type/MessageDispatchWhenLicenseValid.h" #include "utility/messaging/type/MessageLoadProject.h" #include "utility/messaging/type/MessageRefresh.h" +#include "utility/messaging/type/MessageScrollSpeedChange.h" #include "utility/messaging/type/MessageStatus.h" #include "utility/solution/SolutionParserVisualStudio.h" #include "utility/utilityString.h" @@ -37,9 +38,11 @@ QtProjectWizzard::QtProjectWizzard(QWidget* parent) connect(&m_windowStack, SIGNAL(push()), this, SLOT(windowStackChanged())); connect(&m_windowStack, SIGNAL(pop()), this, SLOT(windowStackChanged())); + // save old application settings so they can be compared later ApplicationSettings* appSettings = ApplicationSettings::getInstance().get(); m_appSettings.setHeaderSearchPaths(appSettings->getHeaderSearchPaths()); m_appSettings.setFrameworkSearchPaths(appSettings->getFrameworkSearchPaths()); + m_appSettings.setScrollSpeed(appSettings->getScrollSpeed()); m_parserManager = std::make_shared(); @@ -699,6 +702,11 @@ void QtProjectWizzard::savePreferences() { bool appSettingsChanged = !(m_appSettings == *ApplicationSettings::getInstance().get()); + if (m_appSettings.getScrollSpeed() != ApplicationSettings::getInstance()->getScrollSpeed()) + { + MessageScrollSpeedChange(ApplicationSettings::getInstance()->getScrollSpeed()).dispatch(); + } + if (appSettingsChanged) { Project* currentProject = Application::getInstance()->getCurrentProject().get(); diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp index 94455bfc..4618f7e6 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp @@ -84,8 +84,21 @@ void QtProjectWizzardContentPreferences::populateForm(QGridLayout* layout, int& layout->addWidget(m_colorSchemes, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft); row++; - layout->setRowMinimumHeight(row++, 20); + // scroll speed + m_scrollSpeed = new QLineEdit(); + m_scrollSpeed->setObjectName("name"); + m_scrollSpeed->setAttribute(Qt::WA_MacShowFocusRect, 0); + layout->addWidget(createFormLabel("Scroll Speed"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight); + layout->addWidget(m_scrollSpeed, row, QtProjectWizzardWindow::BACK_COL); + + addHelpButton( + "Multiplier for scroll speed. Set to a value between 0 and 1 to scroll slower, or set to larger than 1 to scroll faster." + , layout, row + ); + row++; + + layout->setRowMinimumHeight(row++, 20); // indexing layout->addWidget(createFormTitle("INDEXING"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignLeft); @@ -142,6 +155,8 @@ void QtProjectWizzardContentPreferences::load() } } + m_scrollSpeed->setText(QString::number(appSettings->getScrollSpeed(), 'f', 1)); + m_threads->setCurrentIndex(appSettings->getIndexerThreadCount() - 1); m_fatalErrors->setChecked(appSettings->getShowExternalNonFatalErrors()); } @@ -158,6 +173,12 @@ void QtProjectWizzardContentPreferences::save() appSettings->setColorSchemePath(m_colorSchemePaths[m_colorSchemes->currentIndex()]); m_oldColorSchemeIndex = -1; + float scrollSpeed = m_scrollSpeed->text().toFloat(); + if (scrollSpeed) + { + appSettings->setScrollSpeed(scrollSpeed); + } + appSettings->setIndexerThreadCount(m_threads->currentIndex() + 1); appSettings->setShowExternalNonFatalErrors(m_fatalErrors->isChecked()); } diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h index d7000c71..57bb78aa 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h @@ -32,6 +32,7 @@ private: QComboBox* m_fontSize; QComboBox* m_tabWidth; QComboBox* m_colorSchemes; + QLineEdit* m_scrollSpeed; QComboBox* m_threads; QCheckBox* m_fatalErrors;