Axivion: Reflect multi server on project settings

Change-Id: I289204fb67ae629f9fddf3c8fb0c8e4d29154e1b
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
Christian Stenger
2024-05-22 15:01:31 +02:00
parent 5a906c3f6c
commit d8e07f52ee

View File

@@ -15,10 +15,12 @@
#include <solutions/tasking/tasktreerunner.h> #include <solutions/tasking/tasktreerunner.h>
#include <utils/algorithm.h>
#include <utils/infolabel.h> #include <utils/infolabel.h>
#include <utils/layoutbuilder.h> #include <utils/layoutbuilder.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <QComboBox>
#include <QPushButton> #include <QPushButton>
#include <QTreeWidget> #include <QTreeWidget>
#include <QVBoxLayout> #include <QVBoxLayout>
@@ -104,13 +106,16 @@ public:
private: private:
void fetchProjects(); void fetchProjects();
void onSettingsChanged(); void onSettingsChanged();
void onServerChanged();
void linkProject(); void linkProject();
void unlinkProject(); void unlinkProject();
void updateUi(); void updateUi();
void updateEnabledStates(); void updateEnabledStates();
void updateServers();
AxivionProjectSettings *m_projectSettings = nullptr; AxivionProjectSettings *m_projectSettings = nullptr;
QLabel *m_linkedProject = nullptr; QLabel *m_linkedProject = nullptr;
QComboBox *m_dashboardServers = nullptr;
QTreeWidget *m_dashboardProjects = nullptr; QTreeWidget *m_dashboardProjects = nullptr;
QPushButton *m_fetchProjects = nullptr; QPushButton *m_fetchProjects = nullptr;
QPushButton *m_link = nullptr; QPushButton *m_link = nullptr;
@@ -128,6 +133,10 @@ AxivionProjectSettingsWidget::AxivionProjectSettingsWidget(Project *project)
m_linkedProject = new QLabel(this); m_linkedProject = new QLabel(this);
m_dashboardServers = new QComboBox(this);
m_dashboardServers->setSizeAdjustPolicy(QComboBox::AdjustToContents);
updateServers();
m_dashboardProjects = new QTreeWidget(this); m_dashboardProjects = new QTreeWidget(this);
m_dashboardProjects->setHeaderHidden(true); m_dashboardProjects->setHeaderHidden(true);
m_dashboardProjects->setRootIsDecorated(false); m_dashboardProjects->setRootIsDecorated(false);
@@ -146,6 +155,7 @@ AxivionProjectSettingsWidget::AxivionProjectSettingsWidget(Project *project)
using namespace Layouting; using namespace Layouting;
Column { Column {
noMargin, noMargin,
m_dashboardServers,
m_linkedProject, m_linkedProject,
Tr::tr("Dashboard projects:"), Tr::tr("Dashboard projects:"),
Core::ItemViewFind::createSearchableWrapper(m_dashboardProjects), Core::ItemViewFind::createSearchableWrapper(m_dashboardProjects),
@@ -153,6 +163,8 @@ AxivionProjectSettingsWidget::AxivionProjectSettingsWidget(Project *project)
Row { m_fetchProjects, m_link, m_unlink, st } Row { m_fetchProjects, m_link, m_unlink, st }
}.attachTo(this); }.attachTo(this);
connect(m_dashboardServers, &QComboBox::currentIndexChanged,
this, &AxivionProjectSettingsWidget::onServerChanged);
connect(m_dashboardProjects, &QTreeWidget::itemSelectionChanged, connect(m_dashboardProjects, &QTreeWidget::itemSelectionChanged,
this, &AxivionProjectSettingsWidget::updateEnabledStates); this, &AxivionProjectSettingsWidget::updateEnabledStates);
connect(m_fetchProjects, &QPushButton::clicked, connect(m_fetchProjects, &QPushButton::clicked,
@@ -198,6 +210,17 @@ void AxivionProjectSettingsWidget::onSettingsChanged()
m_projectSettings->setDashboardId(serverId); m_projectSettings->setDashboardId(serverId);
switchActiveDashboardId(serverId); switchActiveDashboardId(serverId);
} }
updateServers();
updateUi();
}
void AxivionProjectSettingsWidget::onServerChanged()
{
m_dashboardProjects->clear();
m_infoLabel->setVisible(false);
const Id id = m_dashboardServers->currentData().value<AxivionServer>().id;
m_projectSettings->setDashboardId(id);
switchActiveDashboardId(id);
updateUi(); updateUi();
} }
@@ -242,6 +265,7 @@ void AxivionProjectSettingsWidget::updateEnabledStates()
const bool linkable = m_dashboardProjects->topLevelItemCount() const bool linkable = m_dashboardProjects->topLevelItemCount()
&& !m_dashboardProjects->selectedItems().isEmpty(); && !m_dashboardProjects->selectedItems().isEmpty();
m_dashboardServers->setEnabled(!linked);
m_fetchProjects->setEnabled(hasDashboardSettings); m_fetchProjects->setEnabled(hasDashboardSettings);
m_link->setEnabled(!linked && linkable); m_link->setEnabled(!linked && linkable);
m_unlink->setEnabled(linked); m_unlink->setEnabled(linked);
@@ -253,6 +277,20 @@ void AxivionProjectSettingsWidget::updateEnabledStates()
} }
} }
void AxivionProjectSettingsWidget::updateServers()
{
const QList<AxivionServer> 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 class AxivionProjectPanelFactory : public ProjectPanelFactory
{ {
public: public: