From d8e07f52eea349e3c217a61a8a26eeb2471980c2 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Wed, 22 May 2024 15:01:31 +0200 Subject: [PATCH] Axivion: Reflect multi server on project settings Change-Id: I289204fb67ae629f9fddf3c8fb0c8e4d29154e1b Reviewed-by: Jarek Kobus --- .../axivion/axivionprojectsettings.cpp | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/plugins/axivion/axivionprojectsettings.cpp b/src/plugins/axivion/axivionprojectsettings.cpp index 7a3a690c78f..bf9feeb285f 100644 --- a/src/plugins/axivion/axivionprojectsettings.cpp +++ b/src/plugins/axivion/axivionprojectsettings.cpp @@ -15,10 +15,12 @@ #include +#include #include #include #include +#include #include #include #include @@ -104,13 +106,16 @@ public: private: void fetchProjects(); void onSettingsChanged(); + void onServerChanged(); void linkProject(); void unlinkProject(); void updateUi(); void updateEnabledStates(); + void updateServers(); AxivionProjectSettings *m_projectSettings = nullptr; QLabel *m_linkedProject = nullptr; + QComboBox *m_dashboardServers = nullptr; QTreeWidget *m_dashboardProjects = nullptr; QPushButton *m_fetchProjects = nullptr; QPushButton *m_link = nullptr; @@ -128,6 +133,10 @@ AxivionProjectSettingsWidget::AxivionProjectSettingsWidget(Project *project) m_linkedProject = new QLabel(this); + m_dashboardServers = new QComboBox(this); + m_dashboardServers->setSizeAdjustPolicy(QComboBox::AdjustToContents); + updateServers(); + m_dashboardProjects = new QTreeWidget(this); m_dashboardProjects->setHeaderHidden(true); m_dashboardProjects->setRootIsDecorated(false); @@ -146,6 +155,7 @@ AxivionProjectSettingsWidget::AxivionProjectSettingsWidget(Project *project) using namespace Layouting; Column { noMargin, + m_dashboardServers, m_linkedProject, Tr::tr("Dashboard projects:"), Core::ItemViewFind::createSearchableWrapper(m_dashboardProjects), @@ -153,6 +163,8 @@ AxivionProjectSettingsWidget::AxivionProjectSettingsWidget(Project *project) Row { m_fetchProjects, m_link, m_unlink, st } }.attachTo(this); + connect(m_dashboardServers, &QComboBox::currentIndexChanged, + this, &AxivionProjectSettingsWidget::onServerChanged); connect(m_dashboardProjects, &QTreeWidget::itemSelectionChanged, this, &AxivionProjectSettingsWidget::updateEnabledStates); connect(m_fetchProjects, &QPushButton::clicked, @@ -198,6 +210,17 @@ void AxivionProjectSettingsWidget::onSettingsChanged() m_projectSettings->setDashboardId(serverId); switchActiveDashboardId(serverId); } + updateServers(); + updateUi(); +} + +void AxivionProjectSettingsWidget::onServerChanged() +{ + m_dashboardProjects->clear(); + m_infoLabel->setVisible(false); + const Id id = m_dashboardServers->currentData().value().id; + m_projectSettings->setDashboardId(id); + switchActiveDashboardId(id); updateUi(); } @@ -242,6 +265,7 @@ void AxivionProjectSettingsWidget::updateEnabledStates() const bool linkable = m_dashboardProjects->topLevelItemCount() && !m_dashboardProjects->selectedItems().isEmpty(); + m_dashboardServers->setEnabled(!linked); m_fetchProjects->setEnabled(hasDashboardSettings); m_link->setEnabled(!linked && linkable); m_unlink->setEnabled(linked); @@ -253,6 +277,20 @@ void AxivionProjectSettingsWidget::updateEnabledStates() } } +void AxivionProjectSettingsWidget::updateServers() +{ + const QList available = settings().allAvailableServers(); + m_dashboardServers->clear(); + for (const AxivionServer &server : available) + m_dashboardServers->addItem(server.displayString(), QVariant::fromValue(server)); + const Id id = m_projectSettings->dashboardId(); + const int index = Utils::indexOf(available, [&id](const AxivionServer &s) { + return s.id == id; + }); + if (index != -1) + m_dashboardServers->setCurrentIndex(index); +} + class AxivionProjectPanelFactory : public ProjectPanelFactory { public: