forked from qt-creator/qt-creator
Update project mode page.
* Change layout of project mode page. Reviewed-By: dt
This commit is contained in:
@@ -65,7 +65,7 @@ using namespace ProjectExplorer;
|
|||||||
using namespace ProjectExplorer::Internal;
|
using namespace ProjectExplorer::Internal;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
bool debug = false;
|
const int ICON_SIZE(64);
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
@@ -94,41 +94,56 @@ public:
|
|||||||
///
|
///
|
||||||
|
|
||||||
PanelsWidget::Panel::Panel(QWidget * w) :
|
PanelsWidget::Panel::Panel(QWidget * w) :
|
||||||
spacer(0), nameLabel(0), panelWidget(w), marginLayout(0)
|
iconLabel(0), lineWidget(0), nameLabel(0), panelWidget(w), spacer(0)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
PanelsWidget::Panel::~Panel()
|
PanelsWidget::Panel::~Panel()
|
||||||
{
|
{
|
||||||
delete spacer;
|
delete iconLabel;
|
||||||
|
delete lineWidget;
|
||||||
delete nameLabel;
|
delete nameLabel;
|
||||||
delete marginLayout;
|
// do not delete panelWidget, we do not own it!
|
||||||
|
delete spacer;
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
// PanelsWidget
|
// PanelsWidget
|
||||||
///
|
///
|
||||||
|
|
||||||
PanelsWidget::PanelsWidget(QWidget *parent)
|
PanelsWidget::PanelsWidget(QWidget *parent) :
|
||||||
: QScrollArea(parent)
|
QScrollArea(parent),
|
||||||
|
m_root(new QWidget(this))
|
||||||
{
|
{
|
||||||
QWidget *topwidget = new QWidget;
|
// We want a 800px wide widget with and the scrollbar at the
|
||||||
QHBoxLayout *topwidgetLayout = new QHBoxLayout;
|
// side of the screen.
|
||||||
topwidgetLayout->setMargin(0);
|
m_root->setMaximumWidth(800);
|
||||||
topwidgetLayout->setSpacing(0);
|
// The layout holding the individual panels:
|
||||||
topwidget->setLayout(topwidgetLayout);
|
m_layout = new QGridLayout;
|
||||||
|
m_layout->setColumnMinimumWidth(0, ICON_SIZE);
|
||||||
|
|
||||||
QWidget *verticalWidget = new QWidget;
|
// A helper layout to glue some stretch to the button of
|
||||||
verticalWidget->setMaximumWidth(800);
|
// the panel layout:
|
||||||
m_layout = new QVBoxLayout;
|
QVBoxLayout * vbox = new QVBoxLayout;
|
||||||
m_layout->addStretch(10);
|
vbox->addLayout(m_layout);
|
||||||
verticalWidget->setLayout(m_layout);
|
vbox->addStretch(10);
|
||||||
topwidgetLayout->addWidget(verticalWidget);
|
|
||||||
topwidgetLayout->addStretch(10);
|
|
||||||
|
|
||||||
|
m_root->setLayout(vbox);
|
||||||
|
|
||||||
|
// Add horizontal space to the left of our widget:
|
||||||
|
QHBoxLayout *hbox = new QHBoxLayout;
|
||||||
|
hbox->setMargin(0);
|
||||||
|
hbox->setSpacing(0);
|
||||||
|
|
||||||
|
hbox->addWidget(m_root);
|
||||||
|
hbox->addStretch(10);
|
||||||
|
|
||||||
|
// create a widget to hold the scrollarea:
|
||||||
|
QWidget * scrollArea = new QWidget();
|
||||||
|
scrollArea->setLayout(hbox);
|
||||||
|
|
||||||
|
setWidget(scrollArea);
|
||||||
setFrameStyle(QFrame::NoFrame);
|
setFrameStyle(QFrame::NoFrame);
|
||||||
setWidgetResizable(true);
|
setWidgetResizable(true);
|
||||||
|
|
||||||
setWidget(topwidget);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PanelsWidget::~PanelsWidget()
|
PanelsWidget::~PanelsWidget()
|
||||||
@@ -136,41 +151,92 @@ PanelsWidget::~PanelsWidget()
|
|||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add a widget into the grid layout of the PanelsWidget.
|
||||||
|
*
|
||||||
|
* ...
|
||||||
|
* +--------+-------------------------------------------+
|
||||||
|
* | | widget |
|
||||||
|
* +--------+-------------------------------------------+
|
||||||
|
*/
|
||||||
void PanelsWidget::addWidget(QWidget *widget)
|
void PanelsWidget::addWidget(QWidget *widget)
|
||||||
{
|
{
|
||||||
Panel *p = new Panel(widget);
|
Panel *p = new Panel(widget);
|
||||||
m_layout->insertWidget(m_layout->count() - 1, widget);
|
m_layout->addWidget(widget, m_layout->rowCount(), 1);
|
||||||
m_panels.append(p);
|
m_panels.append(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PanelsWidget::addWidget(const QString &name, QWidget *widget)
|
/*
|
||||||
|
* Add a widget with heading information into the grid
|
||||||
|
* layout of the PanelsWidget.
|
||||||
|
*
|
||||||
|
* ...
|
||||||
|
* +--------+-------------------------------------------+
|
||||||
|
* | | spacer |
|
||||||
|
* +--------+-------------------------------------------+
|
||||||
|
* | icon | name |
|
||||||
|
* + +-------------------------------------------+
|
||||||
|
* | | Line |
|
||||||
|
* + +-------------------------------------------+
|
||||||
|
* | | widget |
|
||||||
|
* +--------+-------------------------------------------+
|
||||||
|
*/
|
||||||
|
void PanelsWidget::addWidget(const QString &name, QWidget *widget, const QIcon & icon)
|
||||||
{
|
{
|
||||||
Panel *p = new Panel(widget);
|
Panel *p = new Panel(widget);
|
||||||
|
|
||||||
|
// spacer:
|
||||||
|
const int spacerRow(m_layout->rowCount());
|
||||||
p->spacer = new QSpacerItem(1, 10, QSizePolicy::Fixed, QSizePolicy::Fixed);
|
p->spacer = new QSpacerItem(1, 10, QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||||
p->nameLabel = new QLabel(this);
|
m_layout->addItem(p->spacer, spacerRow, 1);
|
||||||
|
|
||||||
|
// icon:
|
||||||
|
const int headerRow(spacerRow + 1);
|
||||||
|
if (!icon.isNull()) {
|
||||||
|
p->iconLabel = new QLabel(m_root);
|
||||||
|
p->iconLabel->setPixmap(icon.pixmap(ICON_SIZE, ICON_SIZE));
|
||||||
|
m_layout->addWidget(p->iconLabel, headerRow, 0, 3, 1, Qt::AlignTop | Qt::AlignHCenter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// name:
|
||||||
|
p->nameLabel = new QLabel(m_root);
|
||||||
p->nameLabel->setText(name);
|
p->nameLabel->setText(name);
|
||||||
QFont f = p->nameLabel->font();
|
QFont f = p->nameLabel->font();
|
||||||
f.setBold(true);
|
f.setBold(true);
|
||||||
f.setPointSizeF(f.pointSizeF() * 1.2);
|
f.setPointSizeF(f.pointSizeF() * 1.4);
|
||||||
p->nameLabel->setFont(f);
|
p->nameLabel->setFont(f);
|
||||||
|
m_layout->addWidget(p->nameLabel, headerRow, 1);
|
||||||
|
|
||||||
|
// line:
|
||||||
|
const int lineRow(headerRow + 1);
|
||||||
|
p->lineWidget = new OnePixelBlackLine(m_root);
|
||||||
|
m_layout->addWidget(p->lineWidget, lineRow, 1);
|
||||||
|
|
||||||
|
// widget:
|
||||||
|
const int widgetRow(lineRow + 1);
|
||||||
|
m_layout->addWidget(p->panelWidget, widgetRow, 1);
|
||||||
|
|
||||||
m_layout->insertSpacerItem(m_layout->count() - 1, p->spacer);
|
|
||||||
m_layout->insertWidget(m_layout->count() - 1, p->nameLabel);
|
|
||||||
QHBoxLayout *hboxLayout = new QHBoxLayout();
|
|
||||||
hboxLayout->setContentsMargins(20, 0, 0, 0);
|
|
||||||
hboxLayout->addWidget(p->panelWidget);
|
|
||||||
p->marginLayout = hboxLayout;
|
|
||||||
m_layout->insertLayout(m_layout->count() -1, hboxLayout);
|
|
||||||
m_panels.append(p);
|
m_panels.append(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QWidget *PanelsWidget::rootWidget() const
|
||||||
|
{
|
||||||
|
return m_root;
|
||||||
|
}
|
||||||
|
|
||||||
void PanelsWidget::clear()
|
void PanelsWidget::clear()
|
||||||
{
|
{
|
||||||
foreach (Panel* p, m_panels) {
|
foreach (Panel* p, m_panels) {
|
||||||
if (p->spacer)
|
if (p->iconLabel)
|
||||||
m_layout->removeItem(p->spacer);
|
m_layout->removeWidget(p->iconLabel);
|
||||||
|
if (p->lineWidget)
|
||||||
|
m_layout->removeWidget(p->lineWidget);
|
||||||
if (p->nameLabel)
|
if (p->nameLabel)
|
||||||
m_layout->removeWidget(p->nameLabel);
|
m_layout->removeWidget(p->nameLabel);
|
||||||
|
if (p->panelWidget)
|
||||||
|
m_layout->removeWidget(p->panelWidget);
|
||||||
|
if (p->spacer)
|
||||||
|
m_layout->removeItem(p->spacer);
|
||||||
delete p;
|
delete p;
|
||||||
}
|
}
|
||||||
m_panels.clear();
|
m_panels.clear();
|
||||||
@@ -641,22 +707,32 @@ ProjectWindow::ProjectWindow(QWidget *parent)
|
|||||||
{
|
{
|
||||||
ProjectExplorer::SessionManager *session = ProjectExplorerPlugin::instance()->session();
|
ProjectExplorer::SessionManager *session = ProjectExplorerPlugin::instance()->session();
|
||||||
|
|
||||||
|
// Setup overall layout:
|
||||||
|
QVBoxLayout *viewLayout = new QVBoxLayout(this);
|
||||||
|
viewLayout->setMargin(0);
|
||||||
|
viewLayout->setSpacing(0);
|
||||||
|
|
||||||
|
// Add toolbar used everywhere
|
||||||
|
viewLayout->addWidget(new Utils::StyledBar(this));
|
||||||
|
|
||||||
|
// Setup our container for the contents:
|
||||||
m_panelsWidget = new PanelsWidget(this);
|
m_panelsWidget = new PanelsWidget(this);
|
||||||
|
viewLayout->addWidget(m_panelsWidget);
|
||||||
|
|
||||||
// active configuration widget:
|
// Run and build configuration selection area:
|
||||||
m_activeConfigurationWidget = new ActiveConfigurationWidget(m_panelsWidget);
|
m_activeConfigurationWidget = new ActiveConfigurationWidget(m_panelsWidget->rootWidget());
|
||||||
|
|
||||||
// spacer with line:
|
// Spacer and line:
|
||||||
m_spacerBetween = new QWidget(m_panelsWidget);
|
m_spacerBetween = new QWidget(m_panelsWidget->rootWidget());
|
||||||
QVBoxLayout *vbox = new QVBoxLayout(m_spacerBetween);
|
QVBoxLayout *spacerVbox = new QVBoxLayout(m_spacerBetween);
|
||||||
vbox->setMargin(0);
|
spacerVbox->setMargin(0);
|
||||||
m_spacerBetween->setLayout(vbox);
|
m_spacerBetween->setLayout(spacerVbox);
|
||||||
vbox->addSpacerItem(new QSpacerItem(10, 15, QSizePolicy::Fixed, QSizePolicy::Fixed));
|
spacerVbox->addSpacerItem(new QSpacerItem(10, 15, QSizePolicy::Fixed, QSizePolicy::Fixed));
|
||||||
vbox->addWidget(new OnePixelBlackLine(m_spacerBetween));
|
spacerVbox->addWidget(new OnePixelBlackLine(m_spacerBetween));
|
||||||
vbox->addSpacerItem(new QSpacerItem(10, 15, QSizePolicy::Fixed, QSizePolicy::Fixed));
|
spacerVbox->addSpacerItem(new QSpacerItem(10, 15, QSizePolicy::Fixed, QSizePolicy::Fixed));
|
||||||
|
|
||||||
// project chooser:
|
// Project chooser:
|
||||||
m_projectChooser = new QWidget(m_panelsWidget);
|
m_projectChooser = new QWidget(m_panelsWidget->rootWidget());
|
||||||
QHBoxLayout *hbox = new QHBoxLayout(m_projectChooser);
|
QHBoxLayout *hbox = new QHBoxLayout(m_projectChooser);
|
||||||
hbox->setMargin(0);
|
hbox->setMargin(0);
|
||||||
ProjectLabel *label = new ProjectLabel(m_projectChooser);
|
ProjectLabel *label = new ProjectLabel(m_projectChooser);
|
||||||
@@ -672,14 +748,7 @@ ProjectWindow::ProjectWindow(QWidget *parent)
|
|||||||
label, SLOT(setProject(ProjectExplorer::Project*)));
|
label, SLOT(setProject(ProjectExplorer::Project*)));
|
||||||
hbox->addWidget(changeProject);
|
hbox->addWidget(changeProject);
|
||||||
|
|
||||||
// Overall layout:
|
// no projects label:
|
||||||
QVBoxLayout *topLevelLayout = new QVBoxLayout(this);
|
|
||||||
topLevelLayout->setMargin(0);
|
|
||||||
topLevelLayout->setSpacing(0);
|
|
||||||
topLevelLayout->addWidget(new Utils::StyledBar(this));
|
|
||||||
|
|
||||||
topLevelLayout->addWidget(m_panelsWidget);
|
|
||||||
|
|
||||||
m_noprojectLabel = new QLabel(this);
|
m_noprojectLabel = new QLabel(this);
|
||||||
m_noprojectLabel->setText(tr("No project loaded."));
|
m_noprojectLabel->setText(tr("No project loaded."));
|
||||||
{
|
{
|
||||||
@@ -690,12 +759,14 @@ ProjectWindow::ProjectWindow(QWidget *parent)
|
|||||||
}
|
}
|
||||||
m_noprojectLabel->setMargin(10);
|
m_noprojectLabel->setMargin(10);
|
||||||
m_noprojectLabel->setAlignment(Qt::AlignTop);
|
m_noprojectLabel->setAlignment(Qt::AlignTop);
|
||||||
topLevelLayout->addWidget(m_noprojectLabel);
|
viewLayout->addWidget(m_noprojectLabel);
|
||||||
|
|
||||||
|
// show either panels or no projects label:
|
||||||
bool noProjects = session->projects().isEmpty();
|
bool noProjects = session->projects().isEmpty();
|
||||||
m_panelsWidget->setVisible(!noProjects);
|
m_panelsWidget->setVisible(!noProjects);
|
||||||
m_noprojectLabel->setVisible(noProjects);
|
m_noprojectLabel->setVisible(noProjects);
|
||||||
|
|
||||||
|
// connects:
|
||||||
connect(changeProject, SIGNAL(projectChanged(ProjectExplorer::Project*)),
|
connect(changeProject, SIGNAL(projectChanged(ProjectExplorer::Project*)),
|
||||||
this, SLOT(showProperties(ProjectExplorer::Project*)));
|
this, SLOT(showProperties(ProjectExplorer::Project*)));
|
||||||
|
|
||||||
@@ -751,7 +822,7 @@ void ProjectWindow::showProperties(Project *project)
|
|||||||
m_panels.clear();
|
m_panels.clear();
|
||||||
|
|
||||||
// Set up our default panels:
|
// Set up our default panels:
|
||||||
m_panelsWidget->addWidget(tr("Active Build and Run Configurations"), m_activeConfigurationWidget);
|
m_panelsWidget->addWidget(tr("Active Build and Run Configurations"), m_activeConfigurationWidget, QIcon());
|
||||||
m_panelsWidget->addWidget(m_spacerBetween);
|
m_panelsWidget->addWidget(m_spacerBetween);
|
||||||
m_panelsWidget->addWidget(m_projectChooser);
|
m_panelsWidget->addWidget(m_projectChooser);
|
||||||
|
|
||||||
@@ -762,7 +833,7 @@ void ProjectWindow::showProperties(Project *project)
|
|||||||
foreach (IPanelFactory *panelFactory, pages) {
|
foreach (IPanelFactory *panelFactory, pages) {
|
||||||
if (panelFactory->supports(project)) {
|
if (panelFactory->supports(project)) {
|
||||||
IPropertiesPanel *panel = panelFactory->createPanel(project);
|
IPropertiesPanel *panel = panelFactory->createPanel(project);
|
||||||
m_panelsWidget->addWidget(panel->name(), panel->widget());
|
m_panelsWidget->addWidget(panel->name(), panel->widget(), panel->icon());
|
||||||
m_panels.push_back(panel);
|
m_panels.push_back(panel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QLabel;
|
class QLabel;
|
||||||
class QVBoxLayout;
|
class QGridLayout;
|
||||||
class QModelIndex;
|
class QModelIndex;
|
||||||
class QTabWidget;
|
class QTabWidget;
|
||||||
class QHBoxLayout;
|
class QHBoxLayout;
|
||||||
@@ -67,7 +67,9 @@ public:
|
|||||||
~PanelsWidget();
|
~PanelsWidget();
|
||||||
// Adds a widget
|
// Adds a widget
|
||||||
void addWidget(QWidget *widget);
|
void addWidget(QWidget *widget);
|
||||||
void addWidget(const QString &name, QWidget *widget);
|
void addWidget(const QString &name, QWidget *widget, const QIcon &icon);
|
||||||
|
|
||||||
|
QWidget *rootWidget() const;
|
||||||
|
|
||||||
// Removes all widgets and deletes them
|
// Removes all widgets and deletes them
|
||||||
void clear();
|
void clear();
|
||||||
@@ -79,14 +81,16 @@ private:
|
|||||||
explicit Panel(QWidget * widget);
|
explicit Panel(QWidget * widget);
|
||||||
~Panel();
|
~Panel();
|
||||||
|
|
||||||
QSpacerItem *spacer;
|
QLabel *iconLabel;
|
||||||
|
QWidget *lineWidget;
|
||||||
QLabel *nameLabel;
|
QLabel *nameLabel;
|
||||||
QWidget *panelWidget;
|
QWidget *panelWidget;
|
||||||
QHBoxLayout *marginLayout;
|
QSpacerItem *spacer;
|
||||||
};
|
};
|
||||||
QList<Panel *> m_panels;
|
QList<Panel *> m_panels;
|
||||||
|
|
||||||
QVBoxLayout *m_layout;
|
QGridLayout *m_layout;
|
||||||
|
QWidget *m_root;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BuildConfigurationComboBox : public QStackedWidget
|
class BuildConfigurationComboBox : public QStackedWidget
|
||||||
|
|||||||
Reference in New Issue
Block a user