forked from qt-creator/qt-creator
ProjectExplorer: Use new construction pattern for dependencies panel
Change-Id: Ic73e426150fa8479a62fc0b50b743e707efaad41 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -6,6 +6,8 @@
|
||||
#include "project.h"
|
||||
#include "projectexplorertr.h"
|
||||
#include "projectmanager.h"
|
||||
#include "projectpanelfactory.h"
|
||||
#include "projectsettingswidget.h"
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
#include <coreplugin/session.h>
|
||||
@@ -14,18 +16,33 @@
|
||||
#include <utils/detailswidget.h>
|
||||
#include <utils/fsengine/fileiconprovider.h>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QSize>
|
||||
#include <QCoreApplication>
|
||||
|
||||
#include <QAbstractListModel>
|
||||
#include <QCheckBox>
|
||||
#include <QGridLayout>
|
||||
#include <QTreeView>
|
||||
#include <QSpacerItem>
|
||||
#include <QMessageBox>
|
||||
#include <QSize>
|
||||
#include <QSpacerItem>
|
||||
#include <QTreeView>
|
||||
|
||||
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<Project *> 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
|
||||
|
@@ -3,76 +3,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <projectexplorer/projectsettingswidget.h>
|
||||
namespace ProjectExplorer::Internal {
|
||||
|
||||
#include <QAbstractListModel>
|
||||
#include <QTreeView>
|
||||
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<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
|
||||
} // ProjectExplorer::Internal
|
||||
|
@@ -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) {
|
||||
|
Reference in New Issue
Block a user