diff --git a/src/plugins/projectexplorer/dependenciespanel.cpp b/src/plugins/projectexplorer/dependenciespanel.cpp index 5c6990b67d8..1e9f2c1d0c2 100644 --- a/src/plugins/projectexplorer/dependenciespanel.cpp +++ b/src/plugins/projectexplorer/dependenciespanel.cpp @@ -6,6 +6,8 @@ #include "project.h" #include "projectexplorertr.h" #include "projectmanager.h" +#include "projectpanelfactory.h" +#include "projectsettingswidget.h" #include #include @@ -14,18 +16,33 @@ #include #include -#include -#include -#include - +#include #include #include -#include -#include #include +#include +#include +#include -namespace ProjectExplorer { -namespace Internal { +namespace ProjectExplorer::Internal { + +class DependenciesModel : public QAbstractListModel +{ +public: + explicit DependenciesModel(Project *project, QObject *parent = nullptr); + + int rowCount(const QModelIndex &index) const override; + int columnCount(const QModelIndex &index) const override; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; + Qt::ItemFlags flags(const QModelIndex &index) const override; + +private: + void resetModel(); + + Project *m_project; + QList m_projects; +}; DependenciesModel::DependenciesModel(Project *project, QObject *parent) : QAbstractListModel(parent) @@ -124,6 +141,21 @@ Qt::ItemFlags DependenciesModel::flags(const QModelIndex &index) const // // DependenciesView // + +class DependenciesView : public QTreeView +{ +public: + explicit DependenciesView(QWidget *parent); + + QSize sizeHint() const override; + void setModel(QAbstractItemModel *model) override; + +private: + void updateSizeHint(); + + QSize m_sizeHint; +}; + DependenciesView::DependenciesView(QWidget *parent) : QTreeView(parent) { @@ -190,36 +222,62 @@ void DependenciesView::updateSizeHint() // DependenciesWidget // -DependenciesWidget::DependenciesWidget(Project *project, QWidget *parent) : ProjectSettingsWidget(parent), - m_project(project), - m_model(new DependenciesModel(project, this)) +class DependenciesWidget : public ProjectSettingsWidget { - setUseGlobalSettingsCheckBoxVisible(false); - setUseGlobalSettingsLabelVisible(false); - auto vbox = new QVBoxLayout(this); - vbox->setContentsMargins(0, 0, 0, 0); - m_detailsContainer = new Utils::DetailsWidget(this); - m_detailsContainer->setState(Utils::DetailsWidget::NoSummary); - vbox->addWidget(m_detailsContainer); +public: + explicit DependenciesWidget(Project *project) + : m_project(project), + m_model(new DependenciesModel(project, this)) + { + setUseGlobalSettingsCheckBoxVisible(false); + setUseGlobalSettingsLabelVisible(false); + auto vbox = new QVBoxLayout(this); + vbox->setContentsMargins(0, 0, 0, 0); + m_detailsContainer = new Utils::DetailsWidget(this); + m_detailsContainer->setState(Utils::DetailsWidget::NoSummary); + vbox->addWidget(m_detailsContainer); - auto detailsWidget = new QWidget(m_detailsContainer); - m_detailsContainer->setWidget(detailsWidget); - auto layout = new QGridLayout(detailsWidget); - layout->setContentsMargins(0, -1, 0, -1); - auto treeView = new DependenciesView(this); - treeView->setModel(m_model); - treeView->setHeaderHidden(true); - layout->addWidget(treeView, 0 ,0); - layout->addItem(new QSpacerItem(0, 0 , QSizePolicy::Expanding, QSizePolicy::Fixed), 0, 1); + auto detailsWidget = new QWidget(m_detailsContainer); + m_detailsContainer->setWidget(detailsWidget); + auto layout = new QGridLayout(detailsWidget); + layout->setContentsMargins(0, -1, 0, -1); + auto treeView = new DependenciesView(this); + treeView->setModel(m_model); + treeView->setHeaderHidden(true); + layout->addWidget(treeView, 0 ,0); + layout->addItem(new QSpacerItem(0, 0 , QSizePolicy::Expanding, QSizePolicy::Fixed), 0, 1); - m_cascadeSetActiveCheckBox = new QCheckBox; - m_cascadeSetActiveCheckBox->setText(Tr::tr("Synchronize configuration")); - m_cascadeSetActiveCheckBox->setToolTip(Tr::tr("Synchronize active kit, build, and deploy configuration between projects.")); - m_cascadeSetActiveCheckBox->setChecked(ProjectManager::isProjectConfigurationCascading()); - connect(m_cascadeSetActiveCheckBox, &QCheckBox::toggled, - ProjectManager::instance(), &ProjectManager::setProjectConfigurationCascading); - layout->addWidget(m_cascadeSetActiveCheckBox, 1, 0, 2, 1); + m_cascadeSetActiveCheckBox = new QCheckBox; + m_cascadeSetActiveCheckBox->setText(Tr::tr("Synchronize configuration")); + m_cascadeSetActiveCheckBox->setToolTip(Tr::tr("Synchronize active kit, build, and deploy configuration between projects.")); + m_cascadeSetActiveCheckBox->setChecked(ProjectManager::isProjectConfigurationCascading()); + connect(m_cascadeSetActiveCheckBox, &QCheckBox::toggled, + ProjectManager::instance(), &ProjectManager::setProjectConfigurationCascading); + layout->addWidget(m_cascadeSetActiveCheckBox, 1, 0, 2, 1); + } + +private: + Project *m_project; + DependenciesModel *m_model; + Utils::DetailsWidget *m_detailsContainer; + QCheckBox *m_cascadeSetActiveCheckBox; +}; + +class DependenciesProjectPanelFactory final : public ProjectPanelFactory +{ +public: + DependenciesProjectPanelFactory() + { + setPriority(50); + setDisplayName(Tr::tr("Dependencies")); + setCreateWidgetFunction([](Project *project) { return new DependenciesWidget(project); }); + ProjectPanelFactory::registerFactory(this); + } +}; + +void setupDependenciesProjectPanel() +{ + static DependenciesProjectPanelFactory theDependenciesProjectPanelFactory; } -} // namespace Internal -} // namespace ProjectExplorer +} // ProjectExplorer::Internal diff --git a/src/plugins/projectexplorer/dependenciespanel.h b/src/plugins/projectexplorer/dependenciespanel.h index 5362243f317..5a58d73a201 100644 --- a/src/plugins/projectexplorer/dependenciespanel.h +++ b/src/plugins/projectexplorer/dependenciespanel.h @@ -3,76 +3,8 @@ #pragma once -#include +namespace ProjectExplorer::Internal { -#include -#include +void setupDependenciesProjectPanel(); -QT_BEGIN_NAMESPACE -class QCheckBox; -QT_END_NAMESPACE - -namespace Utils { class DetailsWidget; } - -namespace ProjectExplorer { - -class Project; - -namespace Internal { - -// -// DependenciesModel -// - -class DependenciesModel : public QAbstractListModel -{ - Q_OBJECT - -public: - explicit DependenciesModel(Project *project, QObject *parent = nullptr); - - int rowCount(const QModelIndex &index) const override; - int columnCount(const QModelIndex &index) const override; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; - Qt::ItemFlags flags(const QModelIndex &index) const override; - -private: - void resetModel(); - - Project *m_project; - QList m_projects; -}; - -class DependenciesView : public QTreeView -{ - Q_OBJECT - -public: - explicit DependenciesView(QWidget *parent); - - QSize sizeHint() const override; - void setModel(QAbstractItemModel *model) override; - -private: - void updateSizeHint(); - - QSize m_sizeHint; -}; - -class DependenciesWidget : public ProjectSettingsWidget -{ - Q_OBJECT - -public: - explicit DependenciesWidget(Project *project, QWidget *parent = nullptr); - -private: - Project *m_project; - DependenciesModel *m_model; - Utils::DetailsWidget *m_detailsContainer; - QCheckBox *m_cascadeSetActiveCheckBox; -}; - -} // namespace Internal -} // namespace ProjectExplorer +} // ProjectExplorer::Internal diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 6a98483ad4a..4908e23e084 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -886,14 +886,9 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er setupEditorSettingsProjectPanel(); setupCodeStyleProjectPanel(); setupCommentsSettingsProjectPanel(); + setupDependenciesProjectPanel(); auto panelFactory = new ProjectPanelFactory; - panelFactory->setPriority(50); - panelFactory->setDisplayName(Tr::tr("Dependencies")); - panelFactory->setCreateWidgetFunction([](Project *project) { return new DependenciesWidget(project); }); - ProjectPanelFactory::registerFactory(panelFactory); - - panelFactory = new ProjectPanelFactory; panelFactory->setPriority(60); panelFactory->setDisplayName(Tr::tr("Environment")); panelFactory->setCreateWidgetFunction([](Project *project) {