From 371a105f84f215361b2288c5fc4d504dae5b842c Mon Sep 17 00:00:00 2001 From: Dmytro Bogovych Date: Wed, 20 Apr 2022 18:18:44 +0300 Subject: [PATCH] - version 0.0.7 - specific monitor can be prefered --- app/assets/misc/qbreak.desktop | 2 +- app/config.h | 2 +- app/mainwindow.cpp | 25 ++++++++++++++++++++----- app/settings.cpp | 3 +++ app/settings.h | 4 ++++ app/settingsdialog.cpp | 18 ++++++++++++++++++ app/settingsdialog.ui | 16 +++++++++++++--- 7 files changed, 60 insertions(+), 10 deletions(-) diff --git a/app/assets/misc/qbreak.desktop b/app/assets/misc/qbreak.desktop index 8704fad..48c4bc4 100644 --- a/app/assets/misc/qbreak.desktop +++ b/app/assets/misc/qbreak.desktop @@ -1,7 +1,7 @@ [Desktop Entry] GenericName=App to make the breaks Name=QBreak -Version=0.0.6 +Version=0.0.7 Exec=/usr/bin/qbreak Comment=App to make periodical breaks Icon=qbreak diff --git a/app/config.h b/app/config.h index b0f523a..6491b88 100644 --- a/app/config.h +++ b/app/config.h @@ -4,6 +4,6 @@ // App version #define QBREAK_VERSION_MAJOR 0 #define QBREAK_VERSION_MINOR 0 -#define QBREAK_VERSION_SUFFIX 6 +#define QBREAK_VERSION_SUFFIX 7 #endif // CONFIG_H diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index f5d30e2..bac524d 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -183,13 +183,28 @@ void MainWindow::test_2() void MainWindow::showMe() { - // Show on primary screen - QScreen* screen = QGuiApplication::primaryScreen(); - showFullScreen(); - if (windowHandle()) + QScreen* screen = nullptr; + if (mAppConfig.preferred_monitor == Primary_Monitor) + screen = QGuiApplication::primaryScreen(); + else { - windowHandle()->setScreen(screen); + auto screen_list = QGuiApplication::screens(); + auto screen_iter = std::find_if(screen_list.begin(), screen_list.end(), [this](QScreen* s){return s->name() == mAppConfig.preferred_monitor;}); + if (screen_iter != screen_list.end()) + screen = *screen_iter; } + + if (screen) + { + show(); + if (windowHandle()) + { + windowHandle()->setScreen(screen); + setGeometry(screen->geometry()); + qDebug() << "Window moved to screen " << screen->name() + " / " + screen->model() + " " + screen->manufacturer(); + } + } + showFullScreen(); } void MainWindow::hideMe() diff --git a/app/settings.cpp b/app/settings.cpp index c236cf2..e47a808 100644 --- a/app/settings.cpp +++ b/app/settings.cpp @@ -9,6 +9,7 @@ const QString Key_LongBreak_Length = "LongBreak_Length"; const QString Key_Window_On_Top = "Window_On_Top"; const QString Key_Verbose = "Verbose"; const QString Key_Autostart = "Autostart"; +const QString Key_PreferredMonitor = "Preferred_Monitor"; void app_settings::save(const config &cfg) { @@ -20,6 +21,7 @@ void app_settings::save(const config &cfg) s.setValue(Key_Window_On_Top, cfg.window_on_top); s.setValue(Key_Verbose, cfg.verbose); s.setValue(Key_Autostart, cfg.autostart); + s.setValue(Key_PreferredMonitor, cfg.preferred_monitor); } app_settings::config app_settings::load() @@ -33,5 +35,6 @@ app_settings::config app_settings::load() r.window_on_top = s.value(Key_Window_On_Top, Default_Autostart).toBool(); r.verbose = s.value(Key_Verbose, Default_Verbose).toBool(); r.autostart = s.value(Key_Autostart, Default_Autostart).toBool(); + r.preferred_monitor = s.value(Key_PreferredMonitor, Default_Monitor).toString(); return r; } diff --git a/app/settings.h b/app/settings.h index a54a517..08e9db3 100644 --- a/app/settings.h +++ b/app/settings.h @@ -18,6 +18,9 @@ const bool Default_Verbose = false; // Default autostart const bool Default_Autostart = true; +const QString Default_Monitor = ""; +const QString Primary_Monitor = "[Primary]"; + // Used app name const QString AppName = "QBreak"; @@ -34,6 +37,7 @@ public: bool window_on_top = Default_WindowOnTop; bool verbose = Default_Verbose; bool autostart = Default_Autostart; + QString preferred_monitor = Default_Monitor; }; static void save(const config& cfg); diff --git a/app/settingsdialog.cpp b/app/settingsdialog.cpp index 9073c9b..6149ea2 100644 --- a/app/settingsdialog.cpp +++ b/app/settingsdialog.cpp @@ -5,6 +5,7 @@ #include #include #include +#include const QString ConversionError = "Integer value expected."; @@ -31,6 +32,22 @@ void SettingsDialog::init() ui->mBreakIntervalEdit->setText(QString::number(c.longbreak_interval / 60)); ui->mBreakDurationEdit->setText(QString::number(c.longbreak_length / 60)); ui->mPostponeTimeEdit->setText(QString::number(c.longbreak_postpone_interval / 60)); + + ui->mPreferredMonitorCombobox->addItem(Primary_Monitor, Primary_Monitor); + int found_idx = 0; + auto ql = QGuiApplication::screens(); + int screen_idx = 1; + for (QScreen* s: ql) + { + ui->mPreferredMonitorCombobox->addItem(s->name() +" / " + s->model() + " " + s->manufacturer(), s->name()); + + if (s->name() == c.preferred_monitor) + found_idx = screen_idx; + + screen_idx++; + } + + ui->mPreferredMonitorCombobox->setCurrentIndex(found_idx); } void SettingsDialog::accept() @@ -41,6 +58,7 @@ void SettingsDialog::accept() c.longbreak_interval = ui->mBreakIntervalEdit->text().toInt() * 60; c.longbreak_length = ui->mBreakDurationEdit->text().toInt() * 60; c.longbreak_postpone_interval = ui->mPostponeTimeEdit->text().toInt() * 60; + c.preferred_monitor = ui->mPreferredMonitorCombobox->currentData().toString(); app_settings::save(c); emit accepted(); diff --git a/app/settingsdialog.ui b/app/settingsdialog.ui index 55508b8..d9046c3 100644 --- a/app/settingsdialog.ui +++ b/app/settingsdialog.ui @@ -7,7 +7,7 @@ 0 0 746 - 167 + 217 @@ -94,16 +94,26 @@ - + Postpone time (minutes) - + + + + + Preferred monitor + + + + + +