Meson: Inline mesonbuildsettingswidget.ui

Change-Id: Ib927f8166f9c43f10c4dd0feae912e3cb4cb153f
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
hjk
2022-10-04 18:10:24 +02:00
parent c46e5cef2d
commit f0834e8725
5 changed files with 97 additions and 224 deletions

View File

@@ -60,7 +60,6 @@ add_qtc_plugin(MesonProjectManager
project/mesonbuildconfiguration.cpp project/mesonbuildconfiguration.cpp
project/ninjabuildstep.h project/ninjabuildstep.h
project/ninjabuildstep.cpp project/ninjabuildstep.cpp
project/buildoptions/mesonbuildsettingswidget.ui
project/buildoptions/mesonbuildsettingswidget.h project/buildoptions/mesonbuildsettingswidget.h
project/buildoptions/mesonbuildsettingswidget.cpp project/buildoptions/mesonbuildsettingswidget.cpp
project/buildoptions/optionsmodel/buildoptionsmodel.h project/buildoptions/optionsmodel/buildoptionsmodel.h

View File

@@ -49,7 +49,6 @@ Project {
"mesonprojectplugin.h", "mesonprojectplugin.h",
"project/buildoptions/mesonbuildsettingswidget.cpp", "project/buildoptions/mesonbuildsettingswidget.cpp",
"project/buildoptions/mesonbuildsettingswidget.h", "project/buildoptions/mesonbuildsettingswidget.h",
"project/buildoptions/mesonbuildsettingswidget.ui",
"project/buildoptions/optionsmodel/arrayoptionlineedit.cpp", "project/buildoptions/optionsmodel/arrayoptionlineedit.cpp",
"project/buildoptions/optionsmodel/arrayoptionlineedit.h", "project/buildoptions/optionsmodel/arrayoptionlineedit.h",
"project/buildoptions/optionsmodel/buildoptionsmodel.cpp", "project/buildoptions/optionsmodel/buildoptionsmodel.cpp",

View File

@@ -5,7 +5,6 @@
#include "../mesonbuildconfiguration.h" #include "../mesonbuildconfiguration.h"
#include "../mesonbuildsystem.h" #include "../mesonbuildsystem.h"
#include "ui_mesonbuildsettingswidget.h"
#include <coreplugin/find/itemviewfind.h> #include <coreplugin/find/itemviewfind.h>
@@ -14,119 +13,157 @@
#include <utils/detailswidget.h> #include <utils/detailswidget.h>
#include <utils/headerviewstretcher.h> #include <utils/headerviewstretcher.h>
#include <utils/itemviews.h>
#include <utils/layoutbuilder.h> #include <utils/layoutbuilder.h>
#include <utils/utilsicons.h>
#include <QLayout>
#include <QPushButton>
using namespace Utils; using namespace Utils;
namespace MesonProjectManager { namespace MesonProjectManager::Internal {
namespace Internal {
MesonBuildSettingsWidget::MesonBuildSettingsWidget(MesonBuildConfiguration *buildCfg) MesonBuildSettingsWidget::MesonBuildSettingsWidget(MesonBuildConfiguration *buildCfg)
: ProjectExplorer::NamedWidget{tr("Meson")} : ProjectExplorer::NamedWidget{tr("Meson")}
, ui{new Ui::MesonBuildSettingsWidget} , m_progressIndicator(ProgressIndicatorSize::Large)
, m_progressIndicator(Utils::ProgressIndicatorSize::Large)
{ {
ui->setupUi(this); auto configureButton = new QPushButton(tr("Apply Configuration Changes"));
ui->container->setState(Utils::DetailsWidget::NoSummary); configureButton->setEnabled(false);
ui->container->setWidget(ui->details); configureButton->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
Layouting::Form buildDirWBuilder; auto wipeButton = new QPushButton(tr("Wipe Project"));
wipeButton->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
wipeButton->setIcon(Utils::Icons::WARNING.icon());
wipeButton->setToolTip(tr("Wipes build directory and reconfigures using previous command "
"line options.\nUseful if build directory is corrupted or when "
"rebuilding with a newer version of Meson."));
auto container = new DetailsWidget;
auto details = new QWidget;
container->setState(DetailsWidget::NoSummary);
container->setWidget(details);
auto parametersLineEdit = new QLineEdit;
auto buildDirWidget = new QWidget;
auto optionsFilterLineEdit = new FancyLineEdit;
auto optionsTreeView = new TreeView;
optionsTreeView->setMinimumHeight(300);
optionsTreeView->setFrameShape(QFrame::NoFrame);
optionsTreeView->setSelectionBehavior(QAbstractItemView::SelectItems);
optionsTreeView->setUniformRowHeights(true);
optionsTreeView->setSortingEnabled(true);
using namespace Layouting;
Column {
Form { tr("Parameters"), parametersLineEdit, br, },
buildDirWidget,
optionsFilterLineEdit,
optionsTreeView,
}.attachTo(details, WithoutMargins);
Column {
container,
Row { configureButton, wipeButton, }
}.attachTo(this, WithoutMargins);
Form buildDirWBuilder;
buildCfg->buildDirectoryAspect()->addToLayout(buildDirWBuilder); buildCfg->buildDirectoryAspect()->addToLayout(buildDirWBuilder);
buildDirWBuilder.attachTo(ui->buildDirWidget); buildDirWBuilder.attachTo(buildDirWidget, WithoutMargins);
ui->parametersLineEdit->setText(buildCfg->parameters()); parametersLineEdit->setText(buildCfg->parameters());
ui->optionsFilterLineEdit->setFiltering(true); optionsFilterLineEdit->setFiltering(true);
ui->optionsTreeView->sortByColumn(0, Qt::AscendingOrder); optionsTreeView->sortByColumn(0, Qt::AscendingOrder);
QFrame *findWrapper QFrame *findWrapper
= Core::ItemViewFind::createSearchableWrapper(ui->optionsTreeView, = Core::ItemViewFind::createSearchableWrapper(optionsTreeView,
Core::ItemViewFind::LightColored); Core::ItemViewFind::LightColored);
findWrapper->setFrameStyle(QFrame::StyledPanel); findWrapper->setFrameStyle(QFrame::StyledPanel);
m_progressIndicator.attachToWidget(findWrapper); m_progressIndicator.attachToWidget(findWrapper);
m_progressIndicator.raise(); m_progressIndicator.raise();
m_progressIndicator.hide(); m_progressIndicator.hide();
ui->details->layout()->addWidget(findWrapper); details->layout()->addWidget(findWrapper);
m_showProgressTimer.setSingleShot(true); m_showProgressTimer.setSingleShot(true);
m_showProgressTimer.setInterval(50); // don't show progress for < 50ms tasks m_showProgressTimer.setInterval(50); // don't show progress for < 50ms tasks
connect(&m_showProgressTimer, &QTimer::timeout, [this]() { m_progressIndicator.show(); }); connect(&m_showProgressTimer, &QTimer::timeout, [this]() { m_progressIndicator.show(); });
connect(&m_optionsModel, &BuidOptionsModel::configurationChanged, this, [this]() { connect(&m_optionsModel, &BuidOptionsModel::configurationChanged, this, [configureButton] {
ui->configureButton->setEnabled(true); configureButton->setEnabled(true);
}); });
m_optionsFilter.setSourceModel(&m_optionsModel); m_optionsFilter.setSourceModel(&m_optionsModel);
m_optionsFilter.setSortRole(Qt::DisplayRole); m_optionsFilter.setSortRole(Qt::DisplayRole);
m_optionsFilter.setFilterKeyColumn(-1); m_optionsFilter.setFilterKeyColumn(-1);
ui->optionsTreeView->setModel(&m_optionsFilter); optionsTreeView->setModel(&m_optionsFilter);
optionsTreeView->setItemDelegate(new BuildOptionDelegate{optionsTreeView});
ui->optionsTreeView->setItemDelegate(new BuildOptionDelegate{ui->optionsTreeView});
MesonBuildSystem *bs = static_cast<MesonBuildSystem *>(buildCfg->buildSystem()); MesonBuildSystem *bs = static_cast<MesonBuildSystem *>(buildCfg->buildSystem());
connect(buildCfg->target(), connect(buildCfg->target(), &ProjectExplorer::Target::parsingFinished,
&ProjectExplorer::Target::parsingFinished, this, [this, bs, optionsTreeView](bool success) {
this,
[this, bs](bool success) {
if (success) { if (success) {
m_optionsModel.setConfiguration(bs->buildOptions()); m_optionsModel.setConfiguration(bs->buildOptions());
} else { } else {
m_optionsModel.clear(); m_optionsModel.clear();
} }
ui->optionsTreeView->expandAll(); optionsTreeView->expandAll();
ui->optionsTreeView->resizeColumnToContents(0); optionsTreeView->resizeColumnToContents(0);
ui->optionsTreeView->setEnabled(true); optionsTreeView->setEnabled(true);
m_showProgressTimer.stop(); m_showProgressTimer.stop();
m_progressIndicator.hide(); m_progressIndicator.hide();
}); });
connect(bs, &MesonBuildSystem::parsingStarted, this, [this]() { connect(bs, &MesonBuildSystem::parsingStarted, this, [this, optionsTreeView] {
if (!m_showProgressTimer.isActive()) { if (!m_showProgressTimer.isActive()) {
ui->optionsTreeView->setEnabled(false); optionsTreeView->setEnabled(false);
m_showProgressTimer.start(); m_showProgressTimer.start();
} }
}); });
connect(&m_optionsModel, &BuidOptionsModel::dataChanged, this, [bs, this]() { connect(&m_optionsModel, &BuidOptionsModel::dataChanged, this, [bs, this] {
bs->setMesonConfigArgs(this->m_optionsModel.changesAsMesonArgs()); bs->setMesonConfigArgs(this->m_optionsModel.changesAsMesonArgs());
}); });
connect(&m_optionsFilter, &QAbstractItemModel::modelReset, this, [this]() { connect(&m_optionsFilter, &QAbstractItemModel::modelReset, this, [optionsTreeView] {
ui->optionsTreeView->expandAll(); optionsTreeView->expandAll();
ui->optionsTreeView->resizeColumnToContents(0); optionsTreeView->resizeColumnToContents(0);
}); });
connect(ui->optionsFilterLineEdit,
&QLineEdit::textChanged, connect(optionsFilterLineEdit, &QLineEdit::textChanged, &m_optionsFilter, [this](const QString &txt) {
&m_optionsFilter, m_optionsFilter.setFilterRegularExpression(
[this](const QString &txt) { QRegularExpression(QRegularExpression::escape(txt),
m_optionsFilter.setFilterRegularExpression( QRegularExpression::CaseInsensitiveOption));
QRegularExpression(QRegularExpression::escape(txt), });
QRegularExpression::CaseInsensitiveOption));
}); connect(optionsTreeView,
connect(ui->optionsTreeView,
&Utils::TreeView::activated, &Utils::TreeView::activated,
ui->optionsTreeView, optionsTreeView,
[tree = ui->optionsTreeView](const QModelIndex &idx) { tree->edit(idx); }); [tree = optionsTreeView](const QModelIndex &idx) { tree->edit(idx); });
connect(ui->configureButton, &QPushButton::clicked, [bs, this]() {
ui->optionsTreeView->setEnabled(false); connect(configureButton, &QPushButton::clicked, [this, bs, configureButton, optionsTreeView] {
ui->configureButton->setEnabled(false); optionsTreeView->setEnabled(false);
configureButton->setEnabled(false);
m_showProgressTimer.start(); m_showProgressTimer.start();
bs->configure(); bs->configure();
}); });
connect(ui->wipeButton, &QPushButton::clicked, [bs, this]() { connect(wipeButton, &QPushButton::clicked, [this, bs, configureButton, optionsTreeView] {
ui->optionsTreeView->setEnabled(false); optionsTreeView->setEnabled(false);
ui->configureButton->setEnabled(false); configureButton->setEnabled(false);
m_showProgressTimer.start(); m_showProgressTimer.start();
bs->wipe(); bs->wipe();
}); });
connect(ui->parametersLineEdit, &QLineEdit::editingFinished, this, [this, buildCfg] { connect(parametersLineEdit, &QLineEdit::editingFinished, this, [ buildCfg, parametersLineEdit] {
buildCfg->setParameters(ui->parametersLineEdit->text()); buildCfg->setParameters(parametersLineEdit->text());
}); });
bs->triggerParsing(); bs->triggerParsing();
} }
MesonBuildSettingsWidget::~MesonBuildSettingsWidget() MesonBuildSettingsWidget::~MesonBuildSettingsWidget() = default;
{
delete ui;
}
} // namespace Internal } // MesonProjectManager::Internal
} // namespace MesonProjectManager

View File

@@ -12,12 +12,10 @@
#include <QTimer> #include <QTimer>
namespace MesonProjectManager { namespace MesonProjectManager::Internal {
namespace Internal {
namespace Ui { class MesonBuildSettingsWidget; }
class MesonBuildConfiguration; class MesonBuildConfiguration;
class MesonBuildSettingsWidget : public ProjectExplorer::NamedWidget class MesonBuildSettingsWidget : public ProjectExplorer::NamedWidget
{ {
Q_OBJECT Q_OBJECT
@@ -27,12 +25,10 @@ public:
~MesonBuildSettingsWidget(); ~MesonBuildSettingsWidget();
private: private:
Ui::MesonBuildSettingsWidget *ui;
BuidOptionsModel m_optionsModel; BuidOptionsModel m_optionsModel;
Utils::CategorySortFilterModel m_optionsFilter; Utils::CategorySortFilterModel m_optionsFilter;
Utils::ProgressIndicator m_progressIndicator; Utils::ProgressIndicator m_progressIndicator;
QTimer m_showProgressTimer; QTimer m_showProgressTimer;
}; };
} // namespace Internal } // MesonProjectManager::Internal
} // namespace MesonProjectManager

View File

@@ -1,158 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MesonProjectManager::Internal::MesonBuildSettingsWidget</class>
<widget class="QWidget" name="MesonProjectManager::Internal::MesonBuildSettingsWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="1" column="0">
<widget class="QPushButton" name="configureButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Apply Configuration Changes</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="wipeButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Wipes build directory and reconfigures using previous command line options.
Useful if build directory is corrupted or when rebuilding with a newer version of Meson.</string>
</property>
<property name="text">
<string>Wipe Project</string>
</property>
<property name="icon">
<iconset theme=":/utils/images/warning.png"/>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="Utils::DetailsWidget" name="container" native="true">
<widget class="QWidget" name="details" native="true">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>371</width>
<height>211</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Parameters</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="parametersLineEdit"/>
</item>
</layout>
</item>
<item>
<widget class="QWidget" name="buildDirWidget" native="true"/>
</item>
<item>
<widget class="Utils::FancyLineEdit" name="optionsFilterLineEdit">
<property name="placeholderText">
<string>Filter</string>
</property>
</widget>
</item>
<item>
<widget class="Utils::TreeView" name="optionsTreeView">
<property name="minimumSize">
<size>
<width>0</width>
<height>300</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectItems</enum>
</property>
<property name="uniformRowHeights">
<bool>true</bool>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>Utils::DetailsWidget</class>
<extends>QWidget</extends>
<header>utils/detailswidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>Utils::FancyLineEdit</class>
<extends>QLineEdit</extends>
<header>utils/fancylineedit.h</header>
</customwidget>
<customwidget>
<class>Utils::TreeView</class>
<extends>QTreeView</extends>
<header>utils/itemviews.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>