From e5c080a8117ad0b24991ad1de7530e567338e631 Mon Sep 17 00:00:00 2001 From: Kevin Krammer Date: Sat, 14 Apr 2018 14:05:22 +0200 Subject: [PATCH] Add config option for number of task selector entries Allows to have a longer or shorter list of quick task selection entries in the main window's toolbar button menu and the tray icon context menu. Change-Id: I5d7767af59b391dabf69329f3ec3b1c1f5929df7 Reviewed-on: https://codereview.kdab.com/56895 Tested-by: Continuous Integration Reviewed-by: Frank Osterfeld --- Charm/Widgets/CharmPreferences.cpp | 8 +++++++ Charm/Widgets/CharmPreferences.h | 1 + Charm/Widgets/CharmPreferences.ui | 27 ++++++++++++++++++++-- Charm/Widgets/TimeTrackingTaskSelector.cpp | 5 +++- Charm/Widgets/TimeTrackingView.cpp | 4 ++++ Charm/Widgets/TimeTrackingWindow.cpp | 1 + Core/CharmConstants.cpp | 1 + Core/CharmConstants.h | 1 + Core/Configuration.cpp | 9 +++++--- Core/Configuration.h | 3 ++- Core/Controller.cpp | 6 ++++- Tests/ControllerTests.cpp | 6 ++--- 12 files changed, 61 insertions(+), 11 deletions(-) diff --git a/Charm/Widgets/CharmPreferences.cpp b/Charm/Widgets/CharmPreferences.cpp index b4001279..ef30c997 100644 --- a/Charm/Widgets/CharmPreferences.cpp +++ b/Charm/Widgets/CharmPreferences.cpp @@ -98,6 +98,9 @@ CharmPreferences::CharmPreferences(const Configuration &config, QWidget *parent_ m_ui.cbToolButtonStyle->setCurrentIndex(4); break; } + + m_ui.sbNumberOfTaskSelectorEntries->setValue(config.numberOfTaskSelectorEntries); + // resize( minimumSize() ); } @@ -125,6 +128,11 @@ bool CharmPreferences::enableCommandInterface() const return m_ui.cbEnableCommandInterface->isChecked(); } +int CharmPreferences::numberOfTaskSelectorEntries() const +{ + return m_ui.sbNumberOfTaskSelectorEntries->value(); +} + Configuration::DurationFormat CharmPreferences::durationFormat() const { switch (m_ui.cbDurationFormat->currentIndex()) { diff --git a/Charm/Widgets/CharmPreferences.h b/Charm/Widgets/CharmPreferences.h index da3d63c6..f4746ea4 100644 --- a/Charm/Widgets/CharmPreferences.h +++ b/Charm/Widgets/CharmPreferences.h @@ -42,6 +42,7 @@ class CharmPreferences : public QDialog bool warnUnuploadedTimesheets() const; bool requestEventComment() const; bool enableCommandInterface() const; + int numberOfTaskSelectorEntries() const; Qt::ToolButtonStyle toolButtonStyle() const; diff --git a/Charm/Widgets/CharmPreferences.ui b/Charm/Widgets/CharmPreferences.ui index c44d2777..26c2162b 100644 --- a/Charm/Widgets/CharmPreferences.ui +++ b/Charm/Widgets/CharmPreferences.ui @@ -6,8 +6,8 @@ 0 0 - 455 - 302 + 505 + 311 @@ -236,6 +236,29 @@ + + + + + 0 + 0 + + + + Limit recently used tasks to + + + sbNumberOfTaskSelectorEntries + + + + + + + 5 + + + diff --git a/Charm/Widgets/TimeTrackingTaskSelector.cpp b/Charm/Widgets/TimeTrackingTaskSelector.cpp index 699f38a2..63347527 100644 --- a/Charm/Widgets/TimeTrackingTaskSelector.cpp +++ b/Charm/Widgets/TimeTrackingTaskSelector.cpp @@ -28,6 +28,7 @@ #include "SelectTaskDialog.h" #include "ViewHelpers.h" +#include "Core/Configuration.h" #include "Core/Event.h" #include "Core/Task.h" @@ -139,7 +140,9 @@ void TimeTrackingTaskSelector::populate(const QVector &summaries) const TaskIdList interestingTasksToAdd = DATAMODEL->mostRecentlyUsedTasks(); - for (int i = 0; i < 5 && i < interestingTasksToAdd.size(); ++i) + const int maxEntries = qMin(interestingTasksToAdd.size(), + CONFIGURATION.numberOfTaskSelectorEntries); + for (int i = 0; i < maxEntries; ++i) m_menu->addAction(createTaskAction(interestingTasksToAdd.at(i))); m_menu->addSeparator(); m_menu->addAction(m_startOtherTaskAction); diff --git a/Charm/Widgets/TimeTrackingView.cpp b/Charm/Widgets/TimeTrackingView.cpp index 9ff5babd..39dcd6d6 100644 --- a/Charm/Widgets/TimeTrackingView.cpp +++ b/Charm/Widgets/TimeTrackingView.cpp @@ -375,6 +375,10 @@ void TimeTrackingView::configurationChanged() break; } + // re-populate menu: + m_taskSelector->populate(m_summaries); + emit taskMenuChanged(); + m_narrowFont = font(); // stay with the desktop m_narrowFont.setPointSize(m_fixedFont.pointSize()); diff --git a/Charm/Widgets/TimeTrackingWindow.cpp b/Charm/Widgets/TimeTrackingWindow.cpp index b1948db6..94d5278a 100644 --- a/Charm/Widgets/TimeTrackingWindow.cpp +++ b/Charm/Widgets/TimeTrackingWindow.cpp @@ -312,6 +312,7 @@ void TimeTrackingWindow::slotEditPreferences(bool) CONFIGURATION.warnUnuploadedTimesheets = dialog.warnUnuploadedTimesheets(); CONFIGURATION.requestEventComment = dialog.requestEventComment(); CONFIGURATION.enableCommandInterface = dialog.enableCommandInterface(); + CONFIGURATION.numberOfTaskSelectorEntries = dialog.numberOfTaskSelectorEntries(); emit saveConfiguration(); } } diff --git a/Core/CharmConstants.cpp b/Core/CharmConstants.cpp index 91d9b8fd..48f7e632 100644 --- a/Core/CharmConstants.cpp +++ b/Core/CharmConstants.cpp @@ -67,6 +67,7 @@ const QString MetaKey_Key_RequestEventComment = QStringLiteral("RequestEventComm const QString MetaKey_Key_ToolButtonStyle = QStringLiteral("ToolButtonStyle"); const QString MetaKey_Key_ShowStatusBar = QStringLiteral("ShowStatusBar"); const QString MetaKey_Key_EnableCommandInterface = QStringLiteral("EnableCommandInterface"); +const QString MetaKey_Key_NumberOfTaskSelectorEntries = QStringLiteral("NumberOfTaskSelectorEntries"); const QString TrueString(QStringLiteral("true")); const QString FalseString(QStringLiteral("false")); diff --git a/Core/CharmConstants.h b/Core/CharmConstants.h index d46d0506..08be805a 100644 --- a/Core/CharmConstants.h +++ b/Core/CharmConstants.h @@ -74,6 +74,7 @@ extern const QString MetaKey_Key_RequestEventComment; extern const QString MetaKey_Key_ToolButtonStyle; extern const QString MetaKey_Key_ShowStatusBar; extern const QString MetaKey_Key_EnableCommandInterface; +extern const QString MetaKey_Key_NumberOfTaskSelectorEntries; extern const QString TrueString; extern const QString FalseString; diff --git a/Core/Configuration.cpp b/Core/Configuration.cpp index c0ef3b79..f22d1231 100644 --- a/Core/Configuration.cpp +++ b/Core/Configuration.cpp @@ -51,7 +51,7 @@ Configuration::Configuration(TaskPrefilteringMode _taskPrefilteringMode, DurationFormat _durationFormat, bool _detectIdling, Qt::ToolButtonStyle _buttonstyle, bool _showStatusBar, bool _warnUnuploadedTimesheets, bool _requestEventComment, - bool _enableCommandInterface) + bool _enableCommandInterface, int _numberOfTaskSelectorEntries) : taskPrefilteringMode(_taskPrefilteringMode) , timeTrackerFontSize(_timeTrackerFontSize) , durationFormat(_durationFormat) @@ -61,6 +61,7 @@ Configuration::Configuration(TaskPrefilteringMode _taskPrefilteringMode, , warnUnuploadedTimesheets(_warnUnuploadedTimesheets) , requestEventComment(_requestEventComment) , enableCommandInterface(_enableCommandInterface) + , numberOfTaskSelectorEntries(_numberOfTaskSelectorEntries) , configurationName(DEFAULT_CONFIG_GROUP) { } @@ -79,7 +80,8 @@ bool Configuration::operator==(const Configuration &other) const && configurationName == other.configurationName && installationId == other.installationId && localStorageType == other.localStorageType - && localStorageDatabase == other.localStorageDatabase; + && localStorageDatabase == other.localStorageDatabase + && numberOfTaskSelectorEntries == other.numberOfTaskSelectorEntries; } void Configuration::writeTo(QSettings &settings) @@ -148,7 +150,8 @@ void Configuration::dump(const QString &why) << "--> showStatusBar: " << showStatusBar << endl << "--> warnUnuploadedTimesheets: " << warnUnuploadedTimesheets << endl << "--> requestEventComment: " << requestEventComment << endl - << "--> enableCommandInterface: " << enableCommandInterface; + << "--> enableCommandInterface: " << enableCommandInterface + << "--> numberOfTaskSelectorEntries: " << numberOfTaskSelectorEntries; } quint32 Configuration::createInstallationId() const diff --git a/Core/Configuration.h b/Core/Configuration.h index fff77afe..02b9bbd0 100644 --- a/Core/Configuration.h +++ b/Core/Configuration.h @@ -80,6 +80,7 @@ class Configuration bool warnUnuploadedTimesheets = true; bool requestEventComment = false; bool enableCommandInterface = false; + int numberOfTaskSelectorEntries = 5; // these are stored in QSettings, since we need this information to locate and open the database: QString configurationName; @@ -102,7 +103,7 @@ class Configuration Configuration(TaskPrefilteringMode taskPrefilteringMode, TimeTrackerFontSize, DurationFormat durationFormat, bool detectIdling, Qt::ToolButtonStyle buttonstyle, bool showStatusBar, bool warnUnuploadedTimesheets, bool _requestEventComment, - bool enableCommandInterface); + bool enableCommandInterface, int _numberOfTaskSelectorEntries); Configuration(); }; diff --git a/Core/Controller.cpp b/Core/Controller.cpp index e213e5b3..34e7563a 100644 --- a/Core/Controller.cpp +++ b/Core/Controller.cpp @@ -235,7 +235,9 @@ void Controller::persistMetaData(Configuration &configuration) { MetaKey_Key_ShowStatusBar, stringForBool(configuration.showStatusBar) }, { MetaKey_Key_EnableCommandInterface, - stringForBool(configuration.enableCommandInterface) } + stringForBool(configuration.enableCommandInterface) }, + { MetaKey_Key_NumberOfTaskSelectorEntries, + QString::number(configuration.numberOfTaskSelectorEntries) } }; int NumberOfSettings = sizeof settings / sizeof settings[0]; @@ -270,6 +272,8 @@ void Controller::provideMetaData(Configuration &configuration) loadConfigValue(MetaKey_Key_ToolButtonStyle, configuration.toolButtonStyle); loadConfigValue(MetaKey_Key_ShowStatusBar, configuration.showStatusBar); loadConfigValue(MetaKey_Key_EnableCommandInterface, configuration.enableCommandInterface); + loadConfigValue(MetaKey_Key_NumberOfTaskSelectorEntries, configuration.numberOfTaskSelectorEntries); + configuration.numberOfTaskSelectorEntries = qMax(0, configuration.numberOfTaskSelectorEntries); CONFIGURATION.dump(); } diff --git a/Tests/ControllerTests.cpp b/Tests/ControllerTests.cpp index eabf6230..23720230 100644 --- a/Tests/ControllerTests.cpp +++ b/Tests/ControllerTests.cpp @@ -81,15 +81,15 @@ void ControllerTests:: persistProvideMetaDataTest() Configuration configs[] = { Configuration(Configuration::TaskPrefilter_ShowAll, Configuration::TimeTrackerFont_Small, Configuration::Minutes, true, Qt::ToolButtonIconOnly, true, true, true, - false), + false, 5), Configuration(Configuration::TaskPrefilter_CurrentOnly, Configuration::TimeTrackerFont_Regular, Configuration::Minutes, false, Qt::ToolButtonTextOnly, false, false, false, - false), + false, 5), Configuration(Configuration::TaskPrefilter_SubscribedAndCurrentOnly, Configuration::TimeTrackerFont_Large, Configuration::Minutes, true, Qt::ToolButtonTextBesideIcon, true, true, true, - false), + false, 5), }; const int NumberOfConfigurations = sizeof configs / sizeof configs[0];