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/ninjabuildstep.h
project/ninjabuildstep.cpp
project/buildoptions/mesonbuildsettingswidget.ui
project/buildoptions/mesonbuildsettingswidget.h
project/buildoptions/mesonbuildsettingswidget.cpp
project/buildoptions/optionsmodel/buildoptionsmodel.h

View File

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

View File

@@ -5,7 +5,6 @@
#include "../mesonbuildconfiguration.h"
#include "../mesonbuildsystem.h"
#include "ui_mesonbuildsettingswidget.h"
#include <coreplugin/find/itemviewfind.h>
@@ -14,119 +13,157 @@
#include <utils/detailswidget.h>
#include <utils/headerviewstretcher.h>
#include <utils/itemviews.h>
#include <utils/layoutbuilder.h>
#include <utils/utilsicons.h>
#include <QLayout>
#include <QPushButton>
using namespace Utils;
namespace MesonProjectManager {
namespace Internal {
namespace MesonProjectManager::Internal {
MesonBuildSettingsWidget::MesonBuildSettingsWidget(MesonBuildConfiguration *buildCfg)
: ProjectExplorer::NamedWidget{tr("Meson")}
, ui{new Ui::MesonBuildSettingsWidget}
, m_progressIndicator(Utils::ProgressIndicatorSize::Large)
, m_progressIndicator(ProgressIndicatorSize::Large)
{
ui->setupUi(this);
ui->container->setState(Utils::DetailsWidget::NoSummary);
ui->container->setWidget(ui->details);
auto configureButton = new QPushButton(tr("Apply Configuration Changes"));
configureButton->setEnabled(false);
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);
buildDirWBuilder.attachTo(ui->buildDirWidget);
buildDirWBuilder.attachTo(buildDirWidget, WithoutMargins);
ui->parametersLineEdit->setText(buildCfg->parameters());
ui->optionsFilterLineEdit->setFiltering(true);
parametersLineEdit->setText(buildCfg->parameters());
optionsFilterLineEdit->setFiltering(true);
ui->optionsTreeView->sortByColumn(0, Qt::AscendingOrder);
optionsTreeView->sortByColumn(0, Qt::AscendingOrder);
QFrame *findWrapper
= Core::ItemViewFind::createSearchableWrapper(ui->optionsTreeView,
= Core::ItemViewFind::createSearchableWrapper(optionsTreeView,
Core::ItemViewFind::LightColored);
findWrapper->setFrameStyle(QFrame::StyledPanel);
m_progressIndicator.attachToWidget(findWrapper);
m_progressIndicator.raise();
m_progressIndicator.hide();
ui->details->layout()->addWidget(findWrapper);
details->layout()->addWidget(findWrapper);
m_showProgressTimer.setSingleShot(true);
m_showProgressTimer.setInterval(50); // don't show progress for < 50ms tasks
connect(&m_showProgressTimer, &QTimer::timeout, [this]() { m_progressIndicator.show(); });
connect(&m_optionsModel, &BuidOptionsModel::configurationChanged, this, [this]() {
ui->configureButton->setEnabled(true);
connect(&m_optionsModel, &BuidOptionsModel::configurationChanged, this, [configureButton] {
configureButton->setEnabled(true);
});
m_optionsFilter.setSourceModel(&m_optionsModel);
m_optionsFilter.setSortRole(Qt::DisplayRole);
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());
connect(buildCfg->target(),
&ProjectExplorer::Target::parsingFinished,
this,
[this, bs](bool success) {
connect(buildCfg->target(), &ProjectExplorer::Target::parsingFinished,
this, [this, bs, optionsTreeView](bool success) {
if (success) {
m_optionsModel.setConfiguration(bs->buildOptions());
} else {
m_optionsModel.clear();
}
ui->optionsTreeView->expandAll();
ui->optionsTreeView->resizeColumnToContents(0);
ui->optionsTreeView->setEnabled(true);
optionsTreeView->expandAll();
optionsTreeView->resizeColumnToContents(0);
optionsTreeView->setEnabled(true);
m_showProgressTimer.stop();
m_progressIndicator.hide();
});
connect(bs, &MesonBuildSystem::parsingStarted, this, [this]() {
connect(bs, &MesonBuildSystem::parsingStarted, this, [this, optionsTreeView] {
if (!m_showProgressTimer.isActive()) {
ui->optionsTreeView->setEnabled(false);
optionsTreeView->setEnabled(false);
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());
});
connect(&m_optionsFilter, &QAbstractItemModel::modelReset, this, [this]() {
ui->optionsTreeView->expandAll();
ui->optionsTreeView->resizeColumnToContents(0);
connect(&m_optionsFilter, &QAbstractItemModel::modelReset, this, [optionsTreeView] {
optionsTreeView->expandAll();
optionsTreeView->resizeColumnToContents(0);
});
connect(ui->optionsFilterLineEdit,
&QLineEdit::textChanged,
&m_optionsFilter,
[this](const QString &txt) {
connect(optionsFilterLineEdit, &QLineEdit::textChanged, &m_optionsFilter, [this](const QString &txt) {
m_optionsFilter.setFilterRegularExpression(
QRegularExpression(QRegularExpression::escape(txt),
QRegularExpression::CaseInsensitiveOption));
});
connect(ui->optionsTreeView,
connect(optionsTreeView,
&Utils::TreeView::activated,
ui->optionsTreeView,
[tree = ui->optionsTreeView](const QModelIndex &idx) { tree->edit(idx); });
connect(ui->configureButton, &QPushButton::clicked, [bs, this]() {
ui->optionsTreeView->setEnabled(false);
ui->configureButton->setEnabled(false);
optionsTreeView,
[tree = optionsTreeView](const QModelIndex &idx) { tree->edit(idx); });
connect(configureButton, &QPushButton::clicked, [this, bs, configureButton, optionsTreeView] {
optionsTreeView->setEnabled(false);
configureButton->setEnabled(false);
m_showProgressTimer.start();
bs->configure();
});
connect(ui->wipeButton, &QPushButton::clicked, [bs, this]() {
ui->optionsTreeView->setEnabled(false);
ui->configureButton->setEnabled(false);
connect(wipeButton, &QPushButton::clicked, [this, bs, configureButton, optionsTreeView] {
optionsTreeView->setEnabled(false);
configureButton->setEnabled(false);
m_showProgressTimer.start();
bs->wipe();
});
connect(ui->parametersLineEdit, &QLineEdit::editingFinished, this, [this, buildCfg] {
buildCfg->setParameters(ui->parametersLineEdit->text());
connect(parametersLineEdit, &QLineEdit::editingFinished, this, [ buildCfg, parametersLineEdit] {
buildCfg->setParameters(parametersLineEdit->text());
});
bs->triggerParsing();
}
MesonBuildSettingsWidget::~MesonBuildSettingsWidget()
{
delete ui;
}
MesonBuildSettingsWidget::~MesonBuildSettingsWidget() = default;
} // namespace Internal
} // namespace MesonProjectManager
} // MesonProjectManager::Internal

View File

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

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>