forked from qt-creator/qt-creator
		
	CppTools: Merge diagnostic selection widgets together
QComboBox, QLabel and QPushButton are always used together. Therefore it makes sense to put them in one custom widget. Change-Id: Ie21675530fbadd7071f2a362567dadb6f09bb68d Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
		@@ -25,14 +25,63 @@
 | 
			
		||||
 | 
			
		||||
#include "clangdiagnosticconfigsselectionwidget.h"
 | 
			
		||||
 | 
			
		||||
#include "clangdiagnosticconfigswidget.h"
 | 
			
		||||
#include "cppcodemodelsettings.h"
 | 
			
		||||
#include "cpptoolsreuse.h"
 | 
			
		||||
 | 
			
		||||
#include <coreplugin/icore.h>
 | 
			
		||||
 | 
			
		||||
#include <QComboBox>
 | 
			
		||||
#include <QDialog>
 | 
			
		||||
#include <QDialogButtonBox>
 | 
			
		||||
#include <QHBoxLayout>
 | 
			
		||||
#include <QPushButton>
 | 
			
		||||
 | 
			
		||||
namespace CppTools {
 | 
			
		||||
 | 
			
		||||
ClangDiagnosticConfigsSelectionWidget::ClangDiagnosticConfigsSelectionWidget(QWidget *parent)
 | 
			
		||||
    : QComboBox(parent)
 | 
			
		||||
static void connectToClangDiagnosticConfigsDialog(QPushButton *button)
 | 
			
		||||
{
 | 
			
		||||
    QObject::connect(button, &QPushButton::clicked, []() {
 | 
			
		||||
        ClangDiagnosticConfigsWidget *widget = new ClangDiagnosticConfigsWidget;
 | 
			
		||||
        widget->layout()->setMargin(0);
 | 
			
		||||
        QDialog dialog;
 | 
			
		||||
        dialog.setWindowTitle(widget->tr("Diagnostic Configurations"));
 | 
			
		||||
        dialog.setLayout(new QVBoxLayout);
 | 
			
		||||
        dialog.layout()->addWidget(widget);
 | 
			
		||||
        auto *buttonsBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
 | 
			
		||||
        dialog.layout()->addWidget(buttonsBox);
 | 
			
		||||
        QObject::connect(buttonsBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
 | 
			
		||||
        QObject::connect(buttonsBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
 | 
			
		||||
 | 
			
		||||
        QObject::connect(&dialog, &QDialog::accepted, [widget]() {
 | 
			
		||||
            QSharedPointer<CppCodeModelSettings> settings = codeModelSettings();
 | 
			
		||||
            const ClangDiagnosticConfigs oldDiagnosticConfigs
 | 
			
		||||
                    = settings->clangCustomDiagnosticConfigs();
 | 
			
		||||
            const ClangDiagnosticConfigs currentDiagnosticConfigs = widget->customConfigs();
 | 
			
		||||
            if (oldDiagnosticConfigs != currentDiagnosticConfigs) {
 | 
			
		||||
                settings->setClangCustomDiagnosticConfigs(currentDiagnosticConfigs);
 | 
			
		||||
                settings->toSettings(Core::ICore::settings());
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        dialog.exec();
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ClangDiagnosticConfigsSelectionWidget::ClangDiagnosticConfigsSelectionWidget(QWidget *parent)
 | 
			
		||||
    : QWidget(parent)
 | 
			
		||||
    , m_selectionComboBox(new QComboBox(this))
 | 
			
		||||
{
 | 
			
		||||
    auto *layout = new QHBoxLayout(this);
 | 
			
		||||
    layout->setMargin(0);
 | 
			
		||||
    setLayout(layout);
 | 
			
		||||
    layout->addWidget(new QLabel(tr("Diagnostic Configuration:"), this));
 | 
			
		||||
    layout->addWidget(m_selectionComboBox);
 | 
			
		||||
    auto *manageButton = new QPushButton(tr("Manage..."), this);
 | 
			
		||||
    layout->addWidget(manageButton);
 | 
			
		||||
    layout->addStretch();
 | 
			
		||||
 | 
			
		||||
    connectToClangDiagnosticConfigsDialog(manageButton);
 | 
			
		||||
 | 
			
		||||
    refresh(codeModelSettings()->clangDiagnosticConfigId());
 | 
			
		||||
 | 
			
		||||
    connectToCurrentIndexChanged();
 | 
			
		||||
@@ -40,13 +89,13 @@ ClangDiagnosticConfigsSelectionWidget::ClangDiagnosticConfigsSelectionWidget(QWi
 | 
			
		||||
 | 
			
		||||
Core::Id ClangDiagnosticConfigsSelectionWidget::currentConfigId() const
 | 
			
		||||
{
 | 
			
		||||
    return Core::Id::fromSetting(currentData());
 | 
			
		||||
    return Core::Id::fromSetting(m_selectionComboBox->currentData());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClangDiagnosticConfigsSelectionWidget::connectToCurrentIndexChanged()
 | 
			
		||||
{
 | 
			
		||||
    m_currentIndexChangedConnection
 | 
			
		||||
            = connect(this,
 | 
			
		||||
            = connect(m_selectionComboBox,
 | 
			
		||||
                      static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
 | 
			
		||||
                      this,
 | 
			
		||||
                      [this]() { emit currentConfigChanged(currentConfigId()); });
 | 
			
		||||
@@ -62,7 +111,7 @@ void ClangDiagnosticConfigsSelectionWidget::refresh(Core::Id id)
 | 
			
		||||
    disconnectFromCurrentIndexChanged();
 | 
			
		||||
 | 
			
		||||
    int configToSelectIndex = -1;
 | 
			
		||||
    clear();
 | 
			
		||||
    m_selectionComboBox->clear();
 | 
			
		||||
    m_diagnosticConfigsModel = ClangDiagnosticConfigsModel(
 | 
			
		||||
                codeModelSettings()->clangCustomDiagnosticConfigs());
 | 
			
		||||
    const int size = m_diagnosticConfigsModel.size();
 | 
			
		||||
@@ -70,14 +119,14 @@ void ClangDiagnosticConfigsSelectionWidget::refresh(Core::Id id)
 | 
			
		||||
        const ClangDiagnosticConfig &config = m_diagnosticConfigsModel.at(i);
 | 
			
		||||
        const QString displayName
 | 
			
		||||
                = ClangDiagnosticConfigsModel::displayNameWithBuiltinIndication(config);
 | 
			
		||||
        addItem(displayName, config.id().toSetting());
 | 
			
		||||
        m_selectionComboBox->addItem(displayName, config.id().toSetting());
 | 
			
		||||
 | 
			
		||||
        if (id == config.id())
 | 
			
		||||
            configToSelectIndex = i;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (configToSelectIndex != -1)
 | 
			
		||||
        setCurrentIndex(configToSelectIndex);
 | 
			
		||||
        m_selectionComboBox->setCurrentIndex(configToSelectIndex);
 | 
			
		||||
    else
 | 
			
		||||
        emit currentConfigChanged(currentConfigId());
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -29,11 +29,15 @@
 | 
			
		||||
 | 
			
		||||
#include "clangdiagnosticconfigsmodel.h"
 | 
			
		||||
 | 
			
		||||
#include <QComboBox>
 | 
			
		||||
#include <QWidget>
 | 
			
		||||
 | 
			
		||||
QT_BEGIN_NAMESPACE
 | 
			
		||||
class QComboBox;
 | 
			
		||||
QT_END_NAMESPACE
 | 
			
		||||
 | 
			
		||||
namespace CppTools {
 | 
			
		||||
 | 
			
		||||
class CPPTOOLS_EXPORT ClangDiagnosticConfigsSelectionWidget : public QComboBox
 | 
			
		||||
class CPPTOOLS_EXPORT ClangDiagnosticConfigsSelectionWidget : public QWidget
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
@@ -53,6 +57,8 @@ private:
 | 
			
		||||
 | 
			
		||||
    QMetaObject::Connection m_currentIndexChangedConnection;
 | 
			
		||||
    ClangDiagnosticConfigsModel m_diagnosticConfigsModel;
 | 
			
		||||
 | 
			
		||||
    QComboBox *m_selectionComboBox = nullptr;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // CppTools namespace
 | 
			
		||||
 
 | 
			
		||||
@@ -32,14 +32,11 @@
 | 
			
		||||
#include "ui_clazychecks.h"
 | 
			
		||||
#include "ui_tidychecks.h"
 | 
			
		||||
 | 
			
		||||
#include <coreplugin/icore.h>
 | 
			
		||||
 | 
			
		||||
#include <utils/algorithm.h>
 | 
			
		||||
#include <utils/qtcassert.h>
 | 
			
		||||
#include <utils/utilsicons.h>
 | 
			
		||||
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
#include <QDialogButtonBox>
 | 
			
		||||
#include <QInputDialog>
 | 
			
		||||
#include <QPushButton>
 | 
			
		||||
#include <QUuid>
 | 
			
		||||
@@ -441,14 +438,14 @@ void ClangDiagnosticConfigsWidget::connectClazyRadioButtonClicked(QRadioButton *
 | 
			
		||||
 | 
			
		||||
void ClangDiagnosticConfigsWidget::connectConfigChooserCurrentIndex()
 | 
			
		||||
{
 | 
			
		||||
    connect(m_ui->configChooserList, &QListWidget::currentRowChanged, this,
 | 
			
		||||
            &ClangDiagnosticConfigsWidget::onCurrentConfigChanged);
 | 
			
		||||
    connect(m_ui->configChooserList, &QListWidget::currentRowChanged,
 | 
			
		||||
            this, &ClangDiagnosticConfigsWidget::onCurrentConfigChanged);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClangDiagnosticConfigsWidget::disconnectConfigChooserCurrentIndex()
 | 
			
		||||
{
 | 
			
		||||
    disconnect(m_ui->configChooserList, &QListWidget::currentRowChanged, this,
 | 
			
		||||
               &ClangDiagnosticConfigsWidget::onCurrentConfigChanged);
 | 
			
		||||
    disconnect(m_ui->configChooserList, &QListWidget::currentRowChanged,
 | 
			
		||||
               this, &ClangDiagnosticConfigsWidget::onCurrentConfigChanged);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClangDiagnosticConfigsWidget::connectDiagnosticOptionsChanged()
 | 
			
		||||
@@ -503,33 +500,4 @@ void ClangDiagnosticConfigsWidget::setupTabs()
 | 
			
		||||
    m_ui->tabWidget->setCurrentIndex(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void connectToClangDiagnosticConfigsDialog(QPushButton *button)
 | 
			
		||||
{
 | 
			
		||||
    QObject::connect(button, &QPushButton::clicked, []() {
 | 
			
		||||
        ClangDiagnosticConfigsWidget *widget = new ClangDiagnosticConfigsWidget;
 | 
			
		||||
        QDialog dialog;
 | 
			
		||||
        dialog.setWindowTitle(widget->tr("Diagnostic Configurations"));
 | 
			
		||||
        dialog.setLayout(new QVBoxLayout);
 | 
			
		||||
        dialog.layout()->setMargin(0);
 | 
			
		||||
        dialog.layout()->setSpacing(0);
 | 
			
		||||
        dialog.layout()->addWidget(widget);
 | 
			
		||||
        auto *buttonsBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
 | 
			
		||||
        dialog.layout()->addWidget(buttonsBox);
 | 
			
		||||
        QObject::connect(buttonsBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
 | 
			
		||||
        QObject::connect(buttonsBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
 | 
			
		||||
 | 
			
		||||
        QObject::connect(&dialog, &QDialog::accepted, [widget]() {
 | 
			
		||||
            QSharedPointer<CppCodeModelSettings> settings = codeModelSettings();
 | 
			
		||||
            const ClangDiagnosticConfigs oldDiagnosticConfigs
 | 
			
		||||
                    = settings->clangCustomDiagnosticConfigs();
 | 
			
		||||
            const ClangDiagnosticConfigs currentDiagnosticConfigs = widget->customConfigs();
 | 
			
		||||
            if (oldDiagnosticConfigs != currentDiagnosticConfigs) {
 | 
			
		||||
                settings->setClangCustomDiagnosticConfigs(currentDiagnosticConfigs);
 | 
			
		||||
                settings->toSettings(Core::ICore::settings());
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        dialog.exec();
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // CppTools namespace
 | 
			
		||||
 
 | 
			
		||||
@@ -119,6 +119,4 @@ private:
 | 
			
		||||
    int m_selectedConfigIndex = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CPPTOOLS_EXPORT void connectToClangDiagnosticConfigsDialog(QPushButton *button);
 | 
			
		||||
 | 
			
		||||
} // CppTools namespace
 | 
			
		||||
 
 | 
			
		||||
@@ -75,14 +75,12 @@ void CppCodeModelSettingsWidget::setupClangCodeModelWidgets()
 | 
			
		||||
 | 
			
		||||
    m_ui->clangCodeModelIsDisabledHint->setVisible(!isClangActive);
 | 
			
		||||
    m_ui->clangCodeModelIsEnabledHint->setVisible(isClangActive);
 | 
			
		||||
    for (int i = 0; i < m_ui->clangDiagnosticsLayout->count(); ++i) {
 | 
			
		||||
        QWidget *widget = m_ui->clangDiagnosticsLayout->itemAt(i)->widget();
 | 
			
		||||
    for (int i = 0; i < m_ui->clangDiagnosticConfigsSelectionWidget->layout()->count(); ++i) {
 | 
			
		||||
        QWidget *widget = m_ui->clangDiagnosticConfigsSelectionWidget->layout()->itemAt(i)->widget();
 | 
			
		||||
        if (widget)
 | 
			
		||||
            widget->setEnabled(isClangActive);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    connectToClangDiagnosticConfigsDialog(m_ui->manageButton);
 | 
			
		||||
 | 
			
		||||
    connect(m_settings.data(), &CppCodeModelSettings::changed,
 | 
			
		||||
            this, [this]() {
 | 
			
		||||
        m_ui->clangDiagnosticConfigsSelectionWidget->refresh(
 | 
			
		||||
 
 | 
			
		||||
@@ -98,38 +98,7 @@
 | 
			
		||||
    </widget>
 | 
			
		||||
   </item>
 | 
			
		||||
   <item>
 | 
			
		||||
    <layout class="QHBoxLayout" name="clangDiagnosticsLayout">
 | 
			
		||||
     <item>
 | 
			
		||||
      <widget class="QLabel" name="label">
 | 
			
		||||
       <property name="text">
 | 
			
		||||
        <string>Diagnostic Configuration:</string>
 | 
			
		||||
       </property>
 | 
			
		||||
      </widget>
 | 
			
		||||
     </item>
 | 
			
		||||
     <item>
 | 
			
		||||
      <widget class="CppTools::ClangDiagnosticConfigsSelectionWidget" name="clangDiagnosticConfigsSelectionWidget" native="true"/>
 | 
			
		||||
     </item>
 | 
			
		||||
     <item>
 | 
			
		||||
      <widget class="QPushButton" name="manageButton">
 | 
			
		||||
       <property name="text">
 | 
			
		||||
        <string>Manage...</string>
 | 
			
		||||
       </property>
 | 
			
		||||
      </widget>
 | 
			
		||||
     </item>
 | 
			
		||||
     <item>
 | 
			
		||||
      <spacer name="horizontalSpacer_2">
 | 
			
		||||
       <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>
 | 
			
		||||
    <widget class="CppTools::ClangDiagnosticConfigsSelectionWidget" name="clangDiagnosticConfigsSelectionWidget" native="true"/>
 | 
			
		||||
   </item>
 | 
			
		||||
   <item>
 | 
			
		||||
    <spacer name="verticalSpacer">
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user