ProjectExplorer: Use new construction pattern for dependencies panel

Change-Id: Ic73e426150fa8479a62fc0b50b743e707efaad41
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2023-11-15 12:41:58 +01:00
parent 9ae6b3524a
commit 0de9d31e84
3 changed files with 98 additions and 113 deletions

View File

@@ -6,6 +6,8 @@
#include "project.h" #include "project.h"
#include "projectexplorertr.h" #include "projectexplorertr.h"
#include "projectmanager.h" #include "projectmanager.h"
#include "projectpanelfactory.h"
#include "projectsettingswidget.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/session.h> #include <coreplugin/session.h>
@@ -14,18 +16,33 @@
#include <utils/detailswidget.h> #include <utils/detailswidget.h>
#include <utils/fsengine/fileiconprovider.h> #include <utils/fsengine/fileiconprovider.h>
#include <QDebug> #include <QAbstractListModel>
#include <QSize>
#include <QCoreApplication>
#include <QCheckBox> #include <QCheckBox>
#include <QGridLayout> #include <QGridLayout>
#include <QTreeView>
#include <QSpacerItem>
#include <QMessageBox> #include <QMessageBox>
#include <QSize>
#include <QSpacerItem>
#include <QTreeView>
namespace ProjectExplorer { namespace ProjectExplorer::Internal {
namespace 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<Project *> m_projects;
};
DependenciesModel::DependenciesModel(Project *project, QObject *parent) DependenciesModel::DependenciesModel(Project *project, QObject *parent)
: QAbstractListModel(parent) : QAbstractListModel(parent)
@@ -124,6 +141,21 @@ Qt::ItemFlags DependenciesModel::flags(const QModelIndex &index) const
// //
// DependenciesView // 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) DependenciesView::DependenciesView(QWidget *parent)
: QTreeView(parent) : QTreeView(parent)
{ {
@@ -190,8 +222,11 @@ void DependenciesView::updateSizeHint()
// DependenciesWidget // DependenciesWidget
// //
DependenciesWidget::DependenciesWidget(Project *project, QWidget *parent) : ProjectSettingsWidget(parent), class DependenciesWidget : public ProjectSettingsWidget
m_project(project), {
public:
explicit DependenciesWidget(Project *project)
: m_project(project),
m_model(new DependenciesModel(project, this)) m_model(new DependenciesModel(project, this))
{ {
setUseGlobalSettingsCheckBoxVisible(false); setUseGlobalSettingsCheckBoxVisible(false);
@@ -221,5 +256,28 @@ DependenciesWidget::DependenciesWidget(Project *project, QWidget *parent) : Proj
layout->addWidget(m_cascadeSetActiveCheckBox, 1, 0, 2, 1); layout->addWidget(m_cascadeSetActiveCheckBox, 1, 0, 2, 1);
} }
} // namespace Internal private:
} // namespace ProjectExplorer 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;
}
} // ProjectExplorer::Internal

View File

@@ -3,76 +3,8 @@
#pragma once #pragma once
#include <projectexplorer/projectsettingswidget.h> namespace ProjectExplorer::Internal {
#include <QAbstractListModel> void setupDependenciesProjectPanel();
#include <QTreeView>
QT_BEGIN_NAMESPACE } // ProjectExplorer::Internal
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<Project *> 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

View File

@@ -886,14 +886,9 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
setupEditorSettingsProjectPanel(); setupEditorSettingsProjectPanel();
setupCodeStyleProjectPanel(); setupCodeStyleProjectPanel();
setupCommentsSettingsProjectPanel(); setupCommentsSettingsProjectPanel();
setupDependenciesProjectPanel();
auto panelFactory = new ProjectPanelFactory; 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->setPriority(60);
panelFactory->setDisplayName(Tr::tr("Environment")); panelFactory->setDisplayName(Tr::tr("Environment"));
panelFactory->setCreateWidgetFunction([](Project *project) { panelFactory->setCreateWidgetFunction([](Project *project) {