QtSupport: Streamline QtOptionsPage

Change-Id: I2af97fdc07eb065a7e55d84f72697452b70a294a
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
hjk
2022-07-13 12:52:35 +02:00
parent e7f18d9d14
commit 60adfa5053
5 changed files with 147 additions and 305 deletions

View File

@@ -27,8 +27,7 @@ add_qtc_plugin(QtSupport
qtsupportplugin.cpp qtsupportplugin.h
qttestparser.cpp qttestparser.h
qtversionfactory.h
qtversioninfo.ui
qtversionmanager.cpp qtversionmanager.h qtversionmanager.ui
qtversionmanager.cpp qtversionmanager.h
qtversions.cpp qtversions.h
translationwizardpage.cpp translationwizardpage.h
uicgenerator.cpp uicgenerator.h

View File

@@ -26,8 +26,6 @@
#include "qtoptionspage.h"
#include "qtconfigwidget.h"
#include "ui_qtversionmanager.h"
#include "ui_qtversioninfo.h"
#include "qtsupportconstants.h"
#include "qtversionmanager.h"
#include "qtversionfactory.h"
@@ -46,8 +44,10 @@
#include <utils/algorithm.h>
#include <utils/buildablehelperlibrary.h>
#include <utils/detailswidget.h>
#include <utils/filepath.h>
#include <utils/hostosinfo.h>
#include <utils/layoutbuilder.h>
#include <utils/pathchooser.h>
#include <utils/qtcassert.h>
#include <utils/runextensions.h>
@@ -55,12 +55,18 @@
#include <utils/utilsicons.h>
#include <utils/variablechooser.h>
#include <QComboBox>
#include <QDesktopServices>
#include <QDialogButtonBox>
#include <QDir>
#include <QFormLayout>
#include <QHeaderView>
#include <QLabel>
#include <QMessageBox>
#include <QPushButton>
#include <QSortFilterProxyModel>
#include <QTextBrowser>
#include <QTreeView>
#include <utility>
@@ -190,17 +196,6 @@ private:
QtVersion *currentVersion() const;
QtVersionItem *currentItem() const;
const QString m_specifyNameString;
Ui::QtVersionManager m_ui;
Ui::QtVersionInfo m_versionUi;
QTextBrowser *m_infoBrowser;
QIcon m_invalidVersionIcon;
QIcon m_warningVersionIcon;
QIcon m_validVersionIcon;
QtConfigWidget *m_configurationWidget;
private:
void updateQtVersions(const QList<int> &, const QList<int> &, const QList<int> &);
void versionChanged(const QModelIndex &current, const QModelIndex &previous);
void addQtDir();
@@ -232,6 +227,28 @@ private:
QSortFilterProxyModel *m_filterModel;
TreeItem *m_autoItem;
TreeItem *m_manualItem;
const QString m_specifyNameString;
QTreeView *m_qtdirList;
DetailsWidget *m_versionInfoWidget;
DetailsWidget *m_infoWidget;
QComboBox *m_documentationSetting;
QPushButton *m_delButton;
QPushButton *m_linkWithQtButton;
QPushButton *m_cleanUpButton;
QTextBrowser *m_infoBrowser;
QIcon m_invalidVersionIcon;
QIcon m_warningVersionIcon;
QIcon m_validVersionIcon;
QtConfigWidget *m_configurationWidget;
QLineEdit *m_nameEdit;
QLabel *m_qmakePath;
QPushButton *m_editPathPushButton;
QLabel *m_errorLabel;
QFormLayout *m_formLayout;
};
QtOptionsPageWidget::QtOptionsPageWidget()
@@ -241,11 +258,71 @@ QtOptionsPageWidget::QtOptionsPageWidget()
, m_warningVersionIcon(Utils::Icons::WARNING.icon())
, m_configurationWidget(nullptr)
{
auto versionInfoWidget = new QWidget;
m_versionUi.setupUi(versionInfoWidget);
m_versionUi.editPathPushButton->setText(PathChooser::browseButtonLabel());
resize(446, 450);
m_ui.setupUi(this);
m_qtdirList = new QTreeView(this);
m_qtdirList->setUniformRowHeights(true);
m_versionInfoWidget = new DetailsWidget(this);
m_infoWidget = new DetailsWidget(this);
m_documentationSetting = new QComboBox(this);
auto addButton = new QPushButton(tr("Add..."));
m_delButton = new QPushButton(tr("Remove"));
m_linkWithQtButton = new QPushButton(tr("Link with Qt..."));
m_cleanUpButton = new QPushButton(tr("Clean Up"));
m_nameEdit = new QLineEdit;
m_qmakePath = new QLabel;
m_qmakePath->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
m_qmakePath->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse);
m_editPathPushButton = new QPushButton(tr("Edit"));
m_editPathPushButton->setText(PathChooser::browseButtonLabel());
m_errorLabel = new QLabel;
using namespace Utils::Layouting;
auto versionInfoWidget = new QWidget;
Form {
new QLabel(tr("Name:")), m_nameEdit, Break(),
new QLabel(tr("qmake path:")),
Row {
m_qmakePath,
m_editPathPushButton,
},
Break(),
Span(2, m_errorLabel)
}.attachTo(versionInfoWidget, false);
m_formLayout = qobject_cast<QFormLayout*>(versionInfoWidget->layout());
Row {
Column {
m_qtdirList,
m_versionInfoWidget,
m_infoWidget,
Row {
new QLabel(tr("Register documentation:")),
m_documentationSetting,
Stretch()
}
},
Column {
addButton,
m_delButton,
Space(20),
m_linkWithQtButton,
m_cleanUpButton,
Stretch()
}
}.attachTo(this);
setupLinkWithQtButton();
@@ -253,12 +330,12 @@ QtOptionsPageWidget::QtOptionsPageWidget()
m_infoBrowser->setTextInteractionFlags(Qt::TextBrowserInteraction);
connect(m_infoBrowser, &QTextBrowser::anchorClicked,
this, &QtOptionsPageWidget::infoAnchorClicked);
m_ui.infoWidget->setWidget(m_infoBrowser);
connect(m_ui.infoWidget, &DetailsWidget::expanded,
m_infoWidget->setWidget(m_infoBrowser);
connect(m_infoWidget, &DetailsWidget::expanded,
this, &QtOptionsPageWidget::setInfoWidgetVisibility);
m_ui.versionInfoWidget->setWidget(versionInfoWidget);
m_ui.versionInfoWidget->setState(DetailsWidget::NoSummary);
m_versionInfoWidget->setWidget(versionInfoWidget);
m_versionInfoWidget->setState(DetailsWidget::NoSummary);
m_autoItem = new StaticTreeItem({ProjectExplorer::Constants::msgAutoDetected()},
{ProjectExplorer::Constants::msgAutoDetectedToolTip()});
@@ -273,49 +350,49 @@ QtOptionsPageWidget::QtOptionsPageWidget()
m_filterModel->setSourceModel(m_model);
m_filterModel->setSortCaseSensitivity(Qt::CaseInsensitive);
m_ui.qtdirList->setModel(m_filterModel);
m_ui.qtdirList->setSortingEnabled(true);
m_qtdirList->setModel(m_filterModel);
m_qtdirList->setSortingEnabled(true);
m_ui.qtdirList->setFirstColumnSpanned(0, QModelIndex(), true);
m_ui.qtdirList->setFirstColumnSpanned(1, QModelIndex(), true);
m_qtdirList->setFirstColumnSpanned(0, QModelIndex(), true);
m_qtdirList->setFirstColumnSpanned(1, QModelIndex(), true);
m_ui.qtdirList->header()->setStretchLastSection(false);
m_ui.qtdirList->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
m_ui.qtdirList->header()->setSectionResizeMode(1, QHeaderView::Stretch);
m_ui.qtdirList->setTextElideMode(Qt::ElideMiddle);
m_ui.qtdirList->sortByColumn(0, Qt::AscendingOrder);
m_qtdirList->header()->setStretchLastSection(false);
m_qtdirList->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
m_qtdirList->header()->setSectionResizeMode(1, QHeaderView::Stretch);
m_qtdirList->setTextElideMode(Qt::ElideMiddle);
m_qtdirList->sortByColumn(0, Qt::AscendingOrder);
m_ui.documentationSetting->addItem(tr("Highest Version Only"),
m_documentationSetting->addItem(tr("Highest Version Only"),
int(QtVersionManager::DocumentationSetting::HighestOnly));
m_ui.documentationSetting->addItem(tr("All"), int(QtVersionManager::DocumentationSetting::All));
m_ui.documentationSetting->addItem(tr("None"),
m_documentationSetting->addItem(tr("All"), int(QtVersionManager::DocumentationSetting::All));
m_documentationSetting->addItem(tr("None"),
int(QtVersionManager::DocumentationSetting::None));
const int selectedIndex = m_ui.documentationSetting->findData(
const int selectedIndex = m_documentationSetting->findData(
int(QtVersionManager::documentationSetting()));
if (selectedIndex >= 0)
m_ui.documentationSetting->setCurrentIndex(selectedIndex);
m_documentationSetting->setCurrentIndex(selectedIndex);
QList<int> additions = transform(QtVersionManager::versions(), &QtVersion::uniqueId);
updateQtVersions(additions, QList<int>(), QList<int>());
m_ui.qtdirList->expandAll();
m_qtdirList->expandAll();
connect(m_versionUi.nameEdit, &QLineEdit::textEdited,
connect(m_nameEdit, &QLineEdit::textEdited,
this, &QtOptionsPageWidget::updateCurrentQtName);
connect(m_versionUi.editPathPushButton, &QAbstractButton::clicked,
connect(m_editPathPushButton, &QAbstractButton::clicked,
this, &QtOptionsPageWidget::editPath);
connect(m_ui.addButton, &QAbstractButton::clicked,
connect(addButton, &QAbstractButton::clicked,
this, &QtOptionsPageWidget::addQtDir);
connect(m_ui.delButton, &QAbstractButton::clicked,
connect(m_delButton, &QAbstractButton::clicked,
this, &QtOptionsPageWidget::removeQtDir);
connect(m_ui.qtdirList->selectionModel(), &QItemSelectionModel::currentChanged,
connect(m_qtdirList->selectionModel(), &QItemSelectionModel::currentChanged,
this, &QtOptionsPageWidget::versionChanged);
connect(m_ui.cleanUpButton, &QAbstractButton::clicked,
connect(m_cleanUpButton, &QAbstractButton::clicked,
this, &QtOptionsPageWidget::cleanUpQtVersions);
userChangedCurrentVersion();
updateCleanUpButton();
@@ -327,7 +404,7 @@ QtOptionsPageWidget::QtOptionsPageWidget()
this, &QtOptionsPageWidget::toolChainsUpdated);
auto chooser = new VariableChooser(this);
chooser->addSupportedWidget(m_versionUi.nameEdit, "Qt:Name");
chooser->addSupportedWidget(m_nameEdit, "Qt:Name");
chooser->addMacroExpanderProvider([this] {
QtVersion *version = currentVersion();
return version ? version->macroExpander() : nullptr;
@@ -344,7 +421,7 @@ QtVersion *QtOptionsPageWidget::currentVersion() const
QtVersionItem *QtOptionsPageWidget::currentItem() const
{
QModelIndex idx = m_ui.qtdirList->selectionModel()->currentIndex();
QModelIndex idx = m_qtdirList->selectionModel()->currentIndex();
QModelIndex sourceIdx = m_filterModel->mapToSource(idx);
return m_model->itemForIndexAtLevel<2>(sourceIdx);
}
@@ -393,8 +470,8 @@ void QtOptionsPageWidget::toolChainsUpdated()
void QtOptionsPageWidget::setInfoWidgetVisibility()
{
m_ui.versionInfoWidget->setVisible(m_ui.infoWidget->state() == DetailsWidget::Collapsed);
m_ui.infoWidget->setVisible(true);
m_versionInfoWidget->setVisible(m_infoWidget->state() == DetailsWidget::Collapsed);
m_infoWidget->setVisible(true);
}
void QtOptionsPageWidget::infoAnchorClicked(const QUrl &url)
@@ -611,9 +688,9 @@ void QtOptionsPageWidget::addQtDir()
item->setIcon(version->isValid()? m_validVersionIcon : m_invalidVersionIcon);
m_manualItem->appendChild(item);
QModelIndex source = m_model->indexForItem(item);
m_ui.qtdirList->setCurrentIndex(m_filterModel->mapFromSource(source)); // should update the rest of the ui
m_versionUi.nameEdit->setFocus();
m_versionUi.nameEdit->selectAll();
m_qtdirList->setCurrentIndex(m_filterModel->mapFromSource(source)); // should update the rest of the ui
m_nameEdit->setFocus();
m_nameEdit->selectAll();
} else {
QMessageBox::warning(this, tr("Qmake Not Executable"),
tr("The qmake executable %1 could not be added: %2").arg(qtVersion.toUserOutput()).arg(error));
@@ -684,7 +761,7 @@ void QtOptionsPageWidget::updateCleanUpButton()
}
}
m_ui.cleanUpButton->setEnabled(hasInvalidVersion);
m_cleanUpButton->setEnabled(hasInvalidVersion);
}
void QtOptionsPageWidget::userChangedCurrentVersion()
@@ -699,13 +776,13 @@ void QtOptionsPageWidget::updateDescriptionLabel()
const QtVersion *version = item ? item->version() : nullptr;
const ValidityInfo info = validInformation(version);
if (info.message.isEmpty()) {
m_versionUi.errorLabel->setVisible(false);
m_errorLabel->setVisible(false);
} else {
m_versionUi.errorLabel->setVisible(true);
m_versionUi.errorLabel->setText(info.message);
m_versionUi.errorLabel->setToolTip(info.toolTip);
m_errorLabel->setVisible(true);
m_errorLabel->setText(info.message);
m_errorLabel->setToolTip(info.toolTip);
}
m_ui.infoWidget->setSummaryText(info.description);
m_infoWidget->setSummaryText(info.description);
if (item)
item->setIcon(info.icon);
@@ -714,8 +791,8 @@ void QtOptionsPageWidget::updateDescriptionLabel()
setInfoWidgetVisibility();
} else {
m_infoBrowser->clear();
m_ui.versionInfoWidget->setVisible(false);
m_ui.infoWidget->setVisible(false);
m_versionInfoWidget->setVisible(false);
m_infoWidget->setVisible(false);
}
}
@@ -732,25 +809,25 @@ void QtOptionsPageWidget::updateWidgets()
m_configurationWidget = nullptr;
QtVersion *version = currentVersion();
if (version) {
m_versionUi.nameEdit->setText(version->unexpandedDisplayName());
m_versionUi.qmakePath->setText(version->qmakeFilePath().toUserOutput());
m_nameEdit->setText(version->unexpandedDisplayName());
m_qmakePath->setText(version->qmakeFilePath().toUserOutput());
m_configurationWidget = version->createConfigurationWidget();
if (m_configurationWidget) {
m_versionUi.formLayout->addRow(m_configurationWidget);
m_formLayout->addRow(m_configurationWidget);
m_configurationWidget->setEnabled(!version->isAutodetected());
connect(m_configurationWidget, &QtConfigWidget::changed,
this, &QtOptionsPageWidget::updateDescriptionLabel);
}
} else {
m_versionUi.nameEdit->clear();
m_versionUi.qmakePath->clear();
m_nameEdit->clear();
m_qmakePath->clear();
}
const bool enabled = version != nullptr;
const bool isAutodetected = enabled && version->isAutodetected();
m_ui.delButton->setEnabled(enabled && !isAutodetected);
m_versionUi.nameEdit->setEnabled(enabled);
m_versionUi.editPathPushButton->setEnabled(enabled && !isAutodetected);
m_delButton->setEnabled(enabled && !isAutodetected);
m_nameEdit->setEnabled(enabled);
m_editPathPushButton->setEnabled(enabled && !isAutodetected);
}
static QString settingsFile(const QString &baseDir)
@@ -822,8 +899,8 @@ void QtOptionsPageWidget::setupLinkWithQtButton()
{
QString tip;
canLinkWithQt(&tip);
m_ui.linkWithQtButton->setToolTip(tip);
connect(m_ui.linkWithQtButton, &QPushButton::clicked, this, &QtOptionsPage::linkWithQt);
m_linkWithQtButton->setToolTip(tip);
connect(m_linkWithQtButton, &QPushButton::clicked, this, &QtOptionsPage::linkWithQt);
}
void QtOptionsPageWidget::updateCurrentQtName()
@@ -833,7 +910,7 @@ void QtOptionsPageWidget::updateCurrentQtName()
return;
item->setChanged(true);
item->version()->setUnexpandedDisplayName(m_versionUi.nameEdit->text());
item->version()->setUnexpandedDisplayName(m_nameEdit->text());
updateDescriptionLabel();
m_model->forItemsAtLevel<2>([this](QtVersionItem *item) { updateVersionItem(item); });
@@ -847,7 +924,7 @@ void QtOptionsPageWidget::apply()
&QtOptionsPageWidget::updateQtVersions);
QtVersionManager::setDocumentationSetting(
QtVersionManager::DocumentationSetting(m_ui.documentationSetting->currentData().toInt()));
QtVersionManager::DocumentationSetting(m_documentationSetting->currentData().toInt()));
QtVersions versions;
m_model->forItemsAtLevel<2>([&versions](QtVersionItem *item) {

View File

@@ -95,10 +95,8 @@ Project {
"qttestparser.cpp",
"qttestparser.h",
"qtversionfactory.h",
"qtversioninfo.ui",
"qtversionmanager.cpp",
"qtversionmanager.h",
"qtversionmanager.ui",
"translationwizardpage.cpp",
"translationwizardpage.h",
"uicgenerator.cpp",

View File

@@ -1,84 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QtSupport::Internal::QtVersionInfo</class>
<widget class="QWidget" name="QtSupport::Internal::QtVersionInfo">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>208</width>
<height>89</height>
</rect>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<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="0" column="0">
<widget class="QLabel" name="versionNameLabel">
<property name="text">
<string>Name:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="nameEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="pathLabel">
<property name="text">
<string>qmake path:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="qmakePath">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="editPathPushButton">
<property name="text">
<string>Edit</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="errorLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@@ -1,148 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QtSupport::Internal::QtVersionManager</class>
<widget class="QWidget" name="QtSupport::Internal::QtVersionManager">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>446</width>
<height>450</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTreeView" name="qtdirList">
<property name="uniformRowHeights">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="Utils::DetailsWidget" name="versionInfoWidget" native="true"/>
</item>
<item>
<widget class="Utils::DetailsWidget" name="infoWidget" native="true"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout2">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Register documentation:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="documentationSetting"/>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout">
<item>
<widget class="QPushButton" name="addButton">
<property name="minimumSize">
<size>
<width>21</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>Add...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="delButton">
<property name="minimumSize">
<size>
<width>21</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item>
<spacer>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>10</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="linkWithQtButton">
<property name="text">
<string>Link with Qt...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="cleanUpButton">
<property name="text">
<string>Clean Up</string>
</property>
</widget>
</item>
<item>
<spacer name="spacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>77</width>
<height>37</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>Utils::DetailsWidget</class>
<extends>QWidget</extends>
<header location="global">utils/detailswidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>qtdirList</tabstop>
<tabstop>addButton</tabstop>
<tabstop>delButton</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>