aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/mesonprojectmanager/toolssettingspage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/mesonprojectmanager/toolssettingspage.cpp')
-rw-r--r--src/plugins/mesonprojectmanager/toolssettingspage.cpp117
1 files changed, 113 insertions, 4 deletions
diff --git a/src/plugins/mesonprojectmanager/toolssettingspage.cpp b/src/plugins/mesonprojectmanager/toolssettingspage.cpp
index 4ac576b365e..67ecd99aacc 100644
--- a/src/plugins/mesonprojectmanager/toolssettingspage.cpp
+++ b/src/plugins/mesonprojectmanager/toolssettingspage.cpp
@@ -5,10 +5,120 @@
#include "mesonpluginconstants.h"
#include "mesonprojectmanagertr.h"
-#include "toolssettingswidget.h"
+#include "toolitemsettings.h"
+#include "toolsmodel.h"
+#include "tooltreeitem.h"
+
+#include <utils/detailswidget.h>
+#include <utils/layoutbuilder.h>
+
+#include <QHeaderView>
+#include <QPushButton>
+#include <QTreeView>
+
+using namespace Utils;
+
+namespace MesonProjectManager::Internal {
+
+class ToolsSettingsWidget final : public Core::IOptionsPageWidget
+{
+public:
+ ToolsSettingsWidget();
+
+private:
+ void apply() final { m_model.apply(); }
+
+ void cloneMesonTool();
+ void removeMesonTool();
+ void currentMesonToolChanged(const QModelIndex &newCurrent);
+
+ ToolsModel m_model;
+ ToolItemSettings *m_itemSettings;
+ ToolTreeItem *m_currentItem = nullptr;
+
+ QTreeView *m_mesonList;
+ DetailsWidget *m_mesonDetails;
+ QPushButton *m_cloneButton;
+ QPushButton *m_removeButton;
+};
+
+ToolsSettingsWidget::ToolsSettingsWidget()
+{
+ m_mesonList = new QTreeView;
+ m_mesonList->setModel(&m_model);
+ m_mesonList->expandAll();
+ m_mesonList->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
+ m_mesonList->header()->setSectionResizeMode(1, QHeaderView::Stretch);
+
+ m_itemSettings = new ToolItemSettings;
+
+ m_mesonDetails = new DetailsWidget;
+ m_mesonDetails->setState(DetailsWidget::NoSummary);
+ m_mesonDetails->setVisible(false);
+ m_mesonDetails->setWidget(m_itemSettings);
+
+ auto addButton = new QPushButton(Tr::tr("Add"));
+
+ m_cloneButton = new QPushButton(Tr::tr("Clone"));
+ m_cloneButton->setEnabled(false);
+
+ m_removeButton = new QPushButton(Tr::tr("Remove"));
+ m_removeButton->setEnabled(false);
+
+ auto makeDefaultButton = new QPushButton(Tr::tr("Make Default"));
+ makeDefaultButton->setEnabled(false);
+ makeDefaultButton->setVisible(false);
+ makeDefaultButton->setToolTip(Tr::tr("Set as the default Meson executable to use "
+ "when creating a new kit or when no value is set."));
+
+ using namespace Layouting;
+
+ Row {
+ Column {
+ m_mesonList,
+ m_mesonDetails
+ },
+ Column {
+ addButton,
+ m_cloneButton,
+ m_removeButton,
+ makeDefaultButton,
+ st
+ }
+ }.attachTo(this);
+
+ connect(m_mesonList->selectionModel(), &QItemSelectionModel::currentChanged,
+ this, &ToolsSettingsWidget::currentMesonToolChanged);
+ connect(m_itemSettings, &ToolItemSettings::applyChanges, &m_model, &ToolsModel::updateItem);
+
+ connect(addButton, &QPushButton::clicked, &m_model, &ToolsModel::addMesonTool);
+ connect(m_cloneButton, &QPushButton::clicked, this, &ToolsSettingsWidget::cloneMesonTool);
+ connect(m_removeButton, &QPushButton::clicked, this, &ToolsSettingsWidget::removeMesonTool);
+}
+
+void ToolsSettingsWidget::cloneMesonTool()
+{
+ if (m_currentItem) {
+ auto newItem = m_model.cloneMesonTool(m_currentItem);
+ m_mesonList->setCurrentIndex(newItem->index());
+ }
+}
+
+void ToolsSettingsWidget::removeMesonTool()
+{
+ if (m_currentItem)
+ m_model.removeMesonTool(m_currentItem);
+}
+
+void ToolsSettingsWidget::currentMesonToolChanged(const QModelIndex &newCurrent)
+{
+ m_currentItem = m_model.mesoneToolTreeItem(newCurrent);
+ m_itemSettings->load(m_currentItem);
+ m_mesonDetails->setVisible(m_currentItem);
+ m_cloneButton->setEnabled(m_currentItem);
+ m_removeButton->setEnabled(m_currentItem && !m_currentItem->isAutoDetected());
+}
-namespace MesonProjectManager {
-namespace Internal {
ToolsSettingsPage::ToolsSettingsPage()
{
@@ -18,5 +128,4 @@ ToolsSettingsPage::ToolsSettingsPage()
setWidgetCreator([]() { return new ToolsSettingsWidget; });
}
-} // namespace Internal
} // namespace MesonProjectManager