From d0b24b947bc3c1f303684a74bbe98741bcbdaa5b Mon Sep 17 00:00:00 2001 From: BlackMark Date: Mon, 6 Jul 2020 19:52:25 +0200 Subject: [PATCH] Load semantic icons seperately --- AdaptiveBrightness/main_window.cpp | 49 ++++++++++++++++++++++++------ AdaptiveBrightness/main_window.hpp | 5 ++- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/AdaptiveBrightness/main_window.cpp b/AdaptiveBrightness/main_window.cpp index cfbb215..41a0cab 100644 --- a/AdaptiveBrightness/main_window.cpp +++ b/AdaptiveBrightness/main_window.cpp @@ -34,7 +34,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), m_currentIcon(0), qDebug("Tray icon context menu initialized"); m_trayIcon = new QSystemTrayIcon(this); - m_trayIcon->setIcon(*m_icons[9]); + m_trayIcon->setIcon(*m_errorIcon); m_trayIcon->setContextMenu(m_trayIconMenu); m_trayIcon->show(); @@ -53,24 +53,53 @@ MainWindow::~MainWindow() qDebug("Destroying main window"); } +namespace { + +template +struct array_size; + +template +struct array_size> { + static constexpr auto value = N; +}; + +template +inline constexpr auto array_size_v = array_size::value; + +} // namespace + void MainWindow::loadIcons() { qDebug("Loading icons"); - constexpr auto ICON_PATHS = std::array{ + constexpr auto NO_SENSOR_ICON_PATHS = std::array{ ":/AdaptiveBrightness/resources/nosense_0.ico", ":/AdaptiveBrightness/resources/nosense_1.ico", ":/AdaptiveBrightness/resources/nosense_2.ico", ":/AdaptiveBrightness/resources/nosense_3.ico", ":/AdaptiveBrightness/resources/nosense_4.ico", ":/AdaptiveBrightness/resources/nosense_5.ico", ":/AdaptiveBrightness/resources/nosense_6.ico", ":/AdaptiveBrightness/resources/nosense_7.ico", ":/AdaptiveBrightness/resources/nosense_8.ico", - ":/AdaptiveBrightness/resources/sense_0.ico", ":/AdaptiveBrightness/resources/sense_1.ico", ":/AdaptiveBrightness/resources/sense_2.ico", - ":/AdaptiveBrightness/resources/sense_3.ico", ":/AdaptiveBrightness/resources/sense_4.ico", ":/AdaptiveBrightness/resources/sense_5.ico", - ":/AdaptiveBrightness/resources/sense_6.ico", ":/AdaptiveBrightness/resources/sense_7.ico", ":/AdaptiveBrightness/resources/sense_8.ico", - ":/AdaptiveBrightness/resources/error.ico", ":/AdaptiveBrightness/resources/system.ico", }; - for(std::size_t i = 0; i < ICON_PATHS.size(); ++i) { - m_icons[i] = std::make_unique(ICON_PATHS[i]); + static_assert(NO_SENSOR_ICON_PATHS.size() == array_size_v, "Number of paths does not match number of icons"); + + constexpr auto SENSOR_ICON_PATHS = std::array{ + ":/AdaptiveBrightness/resources/sense_0.ico", ":/AdaptiveBrightness/resources/sense_1.ico", ":/AdaptiveBrightness/resources/sense_2.ico", + ":/AdaptiveBrightness/resources/sense_3.ico", ":/AdaptiveBrightness/resources/sense_4.ico", ":/AdaptiveBrightness/resources/sense_5.ico", + ":/AdaptiveBrightness/resources/sense_6.ico", ":/AdaptiveBrightness/resources/sense_7.ico", ":/AdaptiveBrightness/resources/sense_8.ico", + }; + + static_assert(SENSOR_ICON_PATHS.size() == array_size_v, "Number of paths does not match number of icons"); + + constexpr auto ERROR_ICON_PATH = ":/AdaptiveBrightness/resources/error.ico"; + + for(std::size_t i = 0; i < NO_SENSOR_ICON_PATHS.size(); ++i) { + m_noSensorStateIcons[i] = std::make_unique(NO_SENSOR_ICON_PATHS[i]); } + for(std::size_t i = 0; i < SENSOR_ICON_PATHS.size(); ++i) { + m_sensorStateIcons[i] = std::make_unique(SENSOR_ICON_PATHS[i]); + } + + m_errorIcon = std::make_unique(ERROR_ICON_PATH); + qDebug("Icons loaded"); } @@ -83,6 +112,6 @@ void MainWindow::nextIcon() return; } - m_currentIcon = (m_currentIcon + 1) % m_icons.size(); - m_trayIcon->setIcon(*m_icons[m_currentIcon]); + m_currentIcon = (m_currentIcon + 1) % m_noSensorStateIcons.size(); + m_trayIcon->setIcon(*m_noSensorStateIcons[m_currentIcon]); } diff --git a/AdaptiveBrightness/main_window.hpp b/AdaptiveBrightness/main_window.hpp index aba9d67..04bbf63 100644 --- a/AdaptiveBrightness/main_window.hpp +++ b/AdaptiveBrightness/main_window.hpp @@ -25,7 +25,10 @@ class MainWindow : public QMainWindow { Ui::AdaptiveBrightnessClass m_ui; - std::array, 20> m_icons; + std::array, 9> m_noSensorStateIcons; + std::array, 9> m_sensorStateIcons; + std::unique_ptr m_errorIcon; + std::size_t m_currentIcon; bool m_visibility; QAction* m_showHideAction = nullptr;