summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer/projectwindow.cpp
diff options
context:
space:
mode:
authorcon <qtc-committer@nokia.com>2010-01-21 13:46:19 +0100
committercon <qtc-committer@nokia.com>2010-01-22 15:34:01 +0100
commitcfd998490b7b939aa4b3f945e014ce5de48c61a1 (patch)
tree03ec61569f235a65c36cb6716e8b5f313c0e78f2 /src/plugins/projectexplorer/projectwindow.cpp
parentb832bc3d6ea7c5b5824529f065d2c4c4fd916310 (diff)
downloadqt-creator-cfd998490b7b939aa4b3f945e014ce5de48c61a1.tar.gz
New project mode layout, first part.
Diffstat (limited to 'src/plugins/projectexplorer/projectwindow.cpp')
-rw-r--r--src/plugins/projectexplorer/projectwindow.cpp706
1 files changed, 100 insertions, 606 deletions
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index 1e81b17bc1..76c08d4d4a 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -29,6 +29,8 @@
#include "projectwindow.h"
+#include "doubletabwidget.h"
+
#include "project.h"
#include "environment.h"
#include "projectexplorer.h"
@@ -91,22 +93,6 @@ public:
};
///
-// PanelsWidget::Panel
-///
-
-PanelsWidget::Panel::Panel(QWidget * w) :
- iconLabel(0), lineWidget(0), nameLabel(0), panelWidget(w)
-{ }
-
-PanelsWidget::Panel::~Panel()
-{
- delete iconLabel;
- delete lineWidget;
- delete nameLabel;
- // do not delete panelWidget, we do not own it!
-}
-
-///
// PanelsWidget
///
@@ -129,24 +115,7 @@ PanelsWidget::PanelsWidget(QWidget *parent) :
PanelsWidget::~PanelsWidget()
{
- clear();
-}
-
-/*
- * Add a widget into the grid layout of the PanelsWidget.
- *
- * ...
- * +--------+-------------------------------------------+ ABOVE_CONTENTS_MARGIN
- * | widget (with contentsmargins adjusted!) |
- * +--------+-------------------------------------------+ BELOW_CONTENTS_MARGIN
- */
-void PanelsWidget::addWidget(QWidget *widget)
-{
- QTC_ASSERT(widget, return);
-
- const int row(m_layout->rowCount() - 1);
- m_layout->setRowStretch(row, 0);
- addPanelWidget(new Panel(widget), row);
+ qDeleteAll(m_panels);
}
/*
@@ -162,70 +131,48 @@ void PanelsWidget::addWidget(QWidget *widget)
* | widget (with contentsmargins adjusted!) |
* +--------+-------------------------------------------+ BELOW_CONTENTS_MARGIN
*/
-void PanelsWidget::addWidget(const QString &name, QWidget *widget, const QIcon & icon)
+void PanelsWidget::addPropertiesPanel(IPropertiesPanel *panel)
{
- QTC_ASSERT(widget, return);
-
- Panel *p = new Panel(widget);
+ QTC_ASSERT(panel, return);
// icon:
const int headerRow(m_layout->rowCount() - 1);
m_layout->setRowStretch(headerRow, 0);
- if (!icon.isNull()) {
- p->iconLabel = new QLabel(m_root);
- p->iconLabel->setPixmap(icon.pixmap(ICON_SIZE, ICON_SIZE));
- p->iconLabel->setContentsMargins(0, ABOVE_HEADING_MARGIN, 0, 0);
- m_layout->addWidget(p->iconLabel, headerRow, 0, 2, 1, Qt::AlignTop | Qt::AlignHCenter);
+ if (!panel->icon().isNull()) {
+ QLabel *iconLabel = new QLabel(m_root);
+ iconLabel->setPixmap(panel->icon().pixmap(ICON_SIZE, ICON_SIZE));
+ iconLabel->setContentsMargins(0, ABOVE_HEADING_MARGIN, 0, 0);
+ m_layout->addWidget(iconLabel, headerRow, 0, 2, 1, Qt::AlignTop | Qt::AlignHCenter);
}
// name:
- p->nameLabel = new QLabel(m_root);
- p->nameLabel->setText(name);
- p->nameLabel->setContentsMargins(0, ABOVE_HEADING_MARGIN, 0, 0);
- QFont f = p->nameLabel->font();
+ QLabel *nameLabel = new QLabel(m_root);
+ nameLabel->setText(panel->displayName());
+ nameLabel->setContentsMargins(0, ABOVE_HEADING_MARGIN, 0, 0);
+ QFont f = nameLabel->font();
f.setBold(true);
f.setPointSizeF(f.pointSizeF() * 1.4);
- p->nameLabel->setFont(f);
- m_layout->addWidget(p->nameLabel, headerRow, 1, 1, 1, Qt::AlignBottom | Qt::AlignLeft);
+ nameLabel->setFont(f);
+ m_layout->addWidget(nameLabel, headerRow, 1, 1, 1, Qt::AlignBottom | Qt::AlignLeft);
// line:
const int lineRow(headerRow + 1);
- p->lineWidget = new OnePixelBlackLine(m_root);
- m_layout->addWidget(p->lineWidget, lineRow, 1);
+ m_layout->addWidget(new OnePixelBlackLine(m_root), lineRow, 1);
// add the widget:
const int widgetRow(lineRow + 1);
- addPanelWidget(p, widgetRow);
-}
-
-QWidget *PanelsWidget::rootWidget() const
-{
- return m_root;
-}
-
-void PanelsWidget::clear()
-{
- foreach (Panel *p, m_panels) {
- if (p->iconLabel)
- m_layout->removeWidget(p->iconLabel);
- if (p->lineWidget)
- m_layout->removeWidget(p->lineWidget);
- if (p->nameLabel)
- m_layout->removeWidget(p->nameLabel);
- if (p->panelWidget)
- m_layout->removeWidget(p->panelWidget);
- delete p;
- }
- m_panels.clear();
+ addPanelWidget(panel, widgetRow);
}
-void PanelsWidget::addPanelWidget(Panel *panel, int row)
+void PanelsWidget::addPanelWidget(IPropertiesPanel *panel, int row)
{
- panel->panelWidget->setContentsMargins(m_layout->columnMinimumWidth(0),
+ QWidget *widget = panel->widget();
+ widget->setContentsMargins(m_layout->columnMinimumWidth(0),
ABOVE_CONTENTS_MARGIN, 0,
BELOW_CONTENTS_MARGIN);
- m_layout->addWidget(panel->panelWidget, row, 0, 1, 2);
+ widget->setParent(m_root);
+ m_layout->addWidget(widget, row, 0, 1, 2);
const int stretchRow(row + 1);
m_layout->setRowStretch(stretchRow, 10);
@@ -233,470 +180,13 @@ void PanelsWidget::addPanelWidget(Panel *panel, int row)
m_panels.append(panel);
}
-////
-// ActiveConfigurationWidget
-////
-
-ActiveConfigurationWidget::ActiveConfigurationWidget(QWidget *parent)
- : QWidget(parent)
-{
- QGridLayout *grid = new QGridLayout(this);
- grid->setMargin(0);
- RunConfigurationComboBox *runConfigurationComboBox = new RunConfigurationComboBox(this);
- grid->addWidget(new QLabel(tr("Active run configuration")), 0, 0);
- grid->addWidget(runConfigurationComboBox, 0, 1);
-
- SessionManager *session = ProjectExplorerPlugin::instance()->session();
-
- int i = 0;
- foreach(Project *p, session->projects()) {
- ++i;
- BuildConfigurationComboBox *buildConfigurationComboBox = new BuildConfigurationComboBox(p, this);
- QLabel *label = new QLabel("Build configuration for <b>" + p->displayName() + "</b>", this);
- grid->addWidget(label, i, 0);
- grid->addWidget(buildConfigurationComboBox, i, 1);
- m_buildComboBoxMap.insert(p, qMakePair(buildConfigurationComboBox, label));
- }
-
- connect(session, SIGNAL(projectAdded(ProjectExplorer::Project*)),
- this, SLOT(projectAdded(ProjectExplorer::Project*)));
-
- connect(session, SIGNAL(projectRemoved(ProjectExplorer::Project*)),
- this, SLOT(projectRemoved(ProjectExplorer::Project*)));
-
-};
-
-void ActiveConfigurationWidget::projectAdded(Project *p)
-{
- QGridLayout *grid = static_cast<QGridLayout *>(layout());
- BuildConfigurationComboBox *buildConfigurationComboBox = new BuildConfigurationComboBox(p, this);
- QLabel *label = new QLabel("Build configuration for <b>" + p->displayName() + "</b>");
- grid->addWidget(label);
- grid->addWidget(buildConfigurationComboBox);
- m_buildComboBoxMap.insert(p, qMakePair(buildConfigurationComboBox, label));
-}
-
-void ActiveConfigurationWidget::projectRemoved(Project *p)
-{
- // Find row
-
- // TODO also remove the label...
- QPair<BuildConfigurationComboBox *, QLabel *> pair = m_buildComboBoxMap.value(p);;
- delete pair.first;
- delete pair.second;
- m_buildComboBoxMap.remove(p);
-}
-
-
-ActiveConfigurationWidget::~ActiveConfigurationWidget()
-{
-
-}
-
-////
-// RunConfigurationComboBox
-////
-
-RunConfigurationComboBox::RunConfigurationComboBox(QWidget *parent)
- : QComboBox(parent), m_ignoreChange(false)
-{
- setSizeAdjustPolicy(QComboBox::AdjustToContents);
-
- SessionManager *session = ProjectExplorer::ProjectExplorerPlugin::instance()->session();
-
- // Setup the treewidget
- rebuildTree();
-
- // Connect
- foreach(Project *p, session->projects()) {
- foreach(RunConfiguration *rc, p->runConfigurations()) {
- connect(rc, SIGNAL(displayNameChanged()), this, SLOT(rebuildTree()));
- }
- connectToProject(p);
- }
-
- connect(session, SIGNAL(startupProjectChanged(ProjectExplorer::Project*)),
- this, SLOT(activeRunConfigurationChanged()));
-
- connect(session, SIGNAL(projectAdded(ProjectExplorer::Project*)),
- this, SLOT(projectAdded(ProjectExplorer::Project*)));
- connect(session, SIGNAL(projectRemoved(ProjectExplorer::Project*)),
- this, SLOT(projectRemoved(ProjectExplorer::Project*)));
- connect(this, SIGNAL(activated(int)),
- this, SLOT(activeItemChanged(int)));
-}
-
-RunConfigurationComboBox::~RunConfigurationComboBox()
-{
-
-}
-
-int RunConfigurationComboBox::convertTreeIndexToInt(int project, int runconfigurationIndex)
-{
- ++runconfigurationIndex;
- ++project;
- for(int i=0; i<count(); ++i) {
- if (itemData(i, Qt::UserRole).toInt() == 0) {
- --project;
- } else if (itemData(i, Qt::UserRole).toInt() == 1 && project == 0) {
- --runconfigurationIndex;
- }
- if (runconfigurationIndex == 0) {
- return i;
- }
- }
- return -1;
-}
-
-QPair<int, int> RunConfigurationComboBox::convertIntToTreeIndex(int index)
-{
- int projectIndex = -1;
- int runConfigIndex = -1;
- for(int i = 0; i <= index; ++i) {
- if (itemData(i, Qt::UserRole).toInt() == 0) {
- ++projectIndex;
- runConfigIndex = -1;
- } else if (itemData(i, Qt::UserRole).toInt() == 1) {
- ++runConfigIndex;
- }
- }
- return qMakePair(projectIndex, runConfigIndex);
-}
-
-void RunConfigurationComboBox::activeItemChanged(int index)
-{
- if (m_ignoreChange)
- return;
- m_ignoreChange = true;
- SessionManager *session = ProjectExplorer::ProjectExplorerPlugin::instance()->session();
- QPair<int, int> pair = convertIntToTreeIndex(index);
- if (pair.first == -1) {
- setCurrentIndex(-1);
- } else {
- if (pair.second == -1)
- pair.second = 0;
- QList<Project *> projects = session->projects();
- if (pair.first < projects.count()) {
- Project *p = projects.at(pair.first);
- QList<RunConfiguration *> runconfigurations = p->runConfigurations();
- if (pair.second < runconfigurations.count()) {
- session->setStartupProject(p);
- p->setActiveRunConfiguration(runconfigurations.at(pair.second));
- if (currentIndex() != convertTreeIndexToInt(pair.first, pair.second))
- setCurrentIndex(convertTreeIndexToInt(pair.first, pair.second));
- }
- }
- }
- m_ignoreChange = false;
-}
-
-void RunConfigurationComboBox::activeRunConfigurationChanged()
-{
- if (m_ignoreChange)
- return;
- m_ignoreChange = true;
- SessionManager *session = ProjectExplorer::ProjectExplorerPlugin::instance()->session();
- Project *startupProject = session->startupProject();
- if (startupProject) {
- int projectIndex = session->projects().indexOf(startupProject);
- int runConfigurationIndex = startupProject->runConfigurations().indexOf(startupProject->activeRunConfiguration());
- setCurrentIndex(convertTreeIndexToInt(projectIndex, runConfigurationIndex));
- } else {
- setCurrentIndex(-1);
- }
- m_ignoreChange = false;
-}
-
-void RunConfigurationComboBox::addedRunConfiguration(RunConfiguration *runConfiguration)
-{
- if (runConfiguration) {
- connect(runConfiguration, SIGNAL(displayNameChanged()),
- this, SLOT(rebuildTree()));
- }
- rebuildTree();
-}
-
-void RunConfigurationComboBox::removedRunConfiguration(RunConfiguration *rc)
-{
- Q_UNUSED(rc)
- rebuildTree();
-}
-
-void RunConfigurationComboBox::projectAdded(ProjectExplorer::Project *p)
-{
- rebuildTree();
- foreach(RunConfiguration *rc, p->runConfigurations())
- connect(rc, SIGNAL(displayNameChanged()), this, SLOT(rebuildTree()));
- connectToProject(p);
-}
-
-void RunConfigurationComboBox::projectRemoved(ProjectExplorer::Project *p)
-{
- rebuildTree();
- disconnectFromProject(p);
-}
-
-void RunConfigurationComboBox::connectToProject(ProjectExplorer::Project *p)
-{
- connect(p, SIGNAL(activeRunConfigurationChanged()),
- this, SLOT(activeRunConfigurationChanged()));
- connect(p, SIGNAL(addedRunConfiguration(ProjectExplorer::RunConfiguration *)),
- this, SLOT(addedRunConfiguration(ProjectExplorer::RunConfiguration *)));
- connect(p, SIGNAL(removedRunConfiguration(ProjectExplorer::RunConfiguration *)),
- this, SLOT(removedRunConfiguration(ProjectExplorer::RunConfiguration *)));
-}
-
-void RunConfigurationComboBox::disconnectFromProject(ProjectExplorer::Project *p)
-{
- disconnect(p, SIGNAL(activeRunConfigurationChanged()),
- this, SLOT(activeRunConfigurationChanged()));
- disconnect(p, SIGNAL(addedRunConfiguration(ProjectExplorer::RunConfiguration *)),
- this, SLOT(addedRunConfiguration(ProjectExplorer::RunConfiguration *)));
- disconnect(p, SIGNAL(removedRunConfiguration(ProjectExplorer::RunConfiguration *)),
- this, SLOT(removedRunConfiguration(ProjectExplorer::RunConfiguration *)));
-}
-
-void RunConfigurationComboBox::rebuildTree()
-{
- m_ignoreChange = true;
- clear();
-
- SessionManager *session = ProjectExplorer::ProjectExplorerPlugin::instance()->session();
- Project *startupProject = session->startupProject();
- foreach(Project *p, session->projects()) {
- addItem(p->displayName(), QVariant(0));
- foreach(RunConfiguration *rc, p->runConfigurations()) {
- addItem(" " + rc->displayName(), QVariant(1));
- if ((startupProject == p) && (p->activeRunConfiguration() == rc)){
- setCurrentIndex(count() - 1);
- }
- }
- }
- // Select the right index
- m_ignoreChange = false;
-}
-
-////
-// BuildConfigurationComboBox
-////
-
-
-BuildConfigurationComboBox::BuildConfigurationComboBox(Project *p, QWidget *parent)
- : QStackedWidget(parent), ignoreIndexChange(false), m_project(p)
-{
- setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
- m_comboBox = new QComboBox(this);
- m_comboBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
- addWidget(m_comboBox);
-
- m_label = new QLabel(this);
- m_label->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
- addWidget(m_label);
-
- //m_comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
- foreach(BuildConfiguration *buildConfiguration, p->buildConfigurations()) {
- m_comboBox->addItem(buildConfiguration->displayName(), QVariant::fromValue(buildConfiguration));
- connect(buildConfiguration, SIGNAL(displayNameChanged()),
- this, SLOT(displayNameChanged()));
- }
- if (p->buildConfigurations().count() == 1) {
- m_label->setText(m_comboBox->itemText(0));
- setCurrentWidget(m_label);
- }
-
- int index = p->buildConfigurations().indexOf(p->activeBuildConfiguration());
- if (index != -1)
- m_comboBox->setCurrentIndex(index);
-
- // TODO
-// connect(p, SIGNAL(buildConfigurationDisplayNameChanged(QString)),
- // this, SLOT(nameChanged(ProjectExplorer::BuildConfiguration *)));
- connect(p, SIGNAL(activeBuildConfigurationChanged()),
- this, SLOT(activeConfigurationChanged()));
- connect(p, SIGNAL(addedBuildConfiguration(ProjectExplorer::BuildConfiguration*)),
- this, SLOT(addedBuildConfiguration(ProjectExplorer::BuildConfiguration*)));
- connect(p, SIGNAL(removedBuildConfiguration(ProjectExplorer::BuildConfiguration*)),
- this, SLOT(removedBuildConfiguration(ProjectExplorer::BuildConfiguration*)));
- connect(m_comboBox, SIGNAL(activated(int)),
- this, SLOT(changedIndex(int)));
-}
-
-BuildConfigurationComboBox::~BuildConfigurationComboBox()
-{
-
-}
-
-void BuildConfigurationComboBox::displayNameChanged()
-{
- for (int i=0; i < m_comboBox->count(); ++i) {
- BuildConfiguration *bc = m_comboBox->itemData(i).value<BuildConfiguration *>();
- const QString &displayName = bc->displayName();
- m_comboBox->setItemText(i, displayName);
- }
-
- if (m_comboBox->count() == 1)
- m_label->setText(m_comboBox->itemText(0));
-}
-
-int BuildConfigurationComboBox::buildConfigurationToIndex(BuildConfiguration *bc)
-{
- for (int i=0; i < m_comboBox->count(); ++i)
- if (m_comboBox->itemData(i).value<BuildConfiguration *>() == bc)
- return i;
- return -1;
-}
-
-void BuildConfigurationComboBox::activeConfigurationChanged()
-{
- const int index(buildConfigurationToIndex(m_project->activeBuildConfiguration()));
- if (index == -1)
- return;
- ignoreIndexChange = true;
- m_comboBox->setCurrentIndex(index);
- ignoreIndexChange = false;
-}
-
-void BuildConfigurationComboBox::addedBuildConfiguration(BuildConfiguration *bc)
-{
- ignoreIndexChange = true;
- m_comboBox->addItem(bc->displayName(), QVariant::fromValue(bc));
-
- if (m_comboBox->count() == 2)
- setCurrentWidget(m_comboBox);
- ignoreIndexChange = false;
- connect(bc, SIGNAL(displayNameChanged()),
- this, SLOT(displayNameChanged()));
-}
-
-void BuildConfigurationComboBox::removedBuildConfiguration(BuildConfiguration * bc)
-{
- ignoreIndexChange = true;
- const int index(buildConfigurationToIndex(bc));
- if (index == -1)
- return;
- m_comboBox->removeItem(index);
- if (m_comboBox->count() == 1) {
- m_label->setText(m_comboBox->itemText(0));
- setCurrentWidget(m_label);
- }
- ignoreIndexChange = false;
- connect(bc, SIGNAL(displayNameChanged()),
- this, SLOT(displayNameChanged()));
-}
-
-void BuildConfigurationComboBox::changedIndex(int newIndex)
-{
- if (newIndex == -1)
- return;
- m_project->setActiveBuildConfiguration(m_comboBox->itemData(newIndex).value<BuildConfiguration *>());
-}
-
-///
-// ProjectLabel
-///
-
-ProjectLabel::ProjectLabel(QWidget *parent)
- : QLabel(parent)
-{
-
-}
-
-ProjectLabel::~ProjectLabel()
-{
-
-}
-
-void ProjectLabel::setProject(ProjectExplorer::Project *p)
-{
- if (p)
- setText(tr("Edit Project Settings for Project <b>%1</b>").arg(p->displayName()));
- else
- setText(tr("No Project loaded"));
-}
-
-///
-// ProjectPushButton
-///
-
-ProjectPushButton::ProjectPushButton(QWidget *parent)
- : QPushButton(parent)
-{
- setText(tr("Select Project"));
- m_menu = new QMenu(this);
- setMenu(m_menu);
-
- setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-
- SessionManager *session = ProjectExplorerPlugin::instance()->session();
-
- foreach(Project *p, session->projects()) {
- QAction *act = m_menu->addAction(p->displayName());
- act->setData(QVariant::fromValue((void *) p));
- connect(act, SIGNAL(triggered()),
- this, SLOT(actionTriggered()));
- }
-
- setEnabled(session->projects().count() > 1);
-
- connect(session, SIGNAL(projectRemoved(ProjectExplorer::Project*)),
- this, SLOT(projectRemoved(ProjectExplorer::Project*)));
- connect(session, SIGNAL(projectAdded(ProjectExplorer::Project*)),
- this, SLOT(projectAdded(ProjectExplorer::Project*)));
-}
-
-ProjectPushButton::~ProjectPushButton()
-{
-
-}
-
-void ProjectPushButton::projectAdded(ProjectExplorer::Project *p)
-{
- QAction *act = m_menu->addAction(p->displayName());
- act->setData(QVariant::fromValue((void *) p));
- connect(act, SIGNAL(triggered()),
- this, SLOT(actionTriggered()));
-
- // Activate it
- if (m_menu->actions().count() == 1)
- emit projectChanged(p);
- else if (m_menu->actions().count() > 1)
- setEnabled(true);
-}
-
-void ProjectPushButton::projectRemoved(ProjectExplorer::Project *p)
-{
- QList<Project *> projects = ProjectExplorerPlugin::instance()->session()->projects();
-
- bool needToChange = false;
- foreach(QAction *act, m_menu->actions()) {
- if (act->data().value<void *>() == (void *) p) {
- delete act;
- needToChange = true;
- break;
- }
- }
-
- // Comboboxes don't emit a signal if the index did't actually change
- if (m_menu->actions().isEmpty()) {
- emit projectChanged(0);
- setEnabled(false);
- } else if (needToChange) {
- emit projectChanged((ProjectExplorer::Project *) m_menu->actions().first()->data().value<void *>());
- }
-}
-
-void ProjectPushButton::actionTriggered()
-{
- QAction *action = qobject_cast<QAction *>(sender());
- emit projectChanged((ProjectExplorer::Project *) action->data().value<void *>());
-}
-
///
// ProjectWindow
///
ProjectWindow::ProjectWindow(QWidget *parent)
- : QWidget(parent)
+ : QWidget(parent),
+ m_panelsWidget(0)
{
ProjectExplorer::SessionManager *session = ProjectExplorerPlugin::instance()->session();
@@ -705,88 +195,77 @@ ProjectWindow::ProjectWindow(QWidget *parent)
viewLayout->setMargin(0);
viewLayout->setSpacing(0);
- // Add toolbar used everywhere
- viewLayout->addWidget(new Utils::StyledBar(this));
+ m_tabWidget = new DoubleTabWidget(this);
+ m_tabWidget->setTitle(tr("Select a Project:"));
+ viewLayout->addWidget(m_tabWidget);
// Setup our container for the contents:
- m_panelsWidget = new PanelsWidget(this);
- viewLayout->addWidget(m_panelsWidget);
+ m_centralWidget = new QStackedWidget(this);
+ viewLayout->addWidget(m_centralWidget);
- // Run and build configuration selection panel:
- m_activeConfigurationWidget = new ActiveConfigurationWidget(m_panelsWidget->rootWidget());
-
- // Spacer and line panel:
- m_spacerBetween = new OnePixelBlackLine(m_panelsWidget->rootWidget());
-
- // Project chooser panel:
- m_projectChooser = new QWidget(m_panelsWidget->rootWidget());
- QHBoxLayout *hbox = new QHBoxLayout(m_projectChooser);
- hbox->setMargin(0);
- ProjectLabel *label = new ProjectLabel(m_projectChooser);
+ // no projects label:
+ m_noprojectLabel = new QWidget;
+ QVBoxLayout *noprojectLayout = new QVBoxLayout;
+ noprojectLayout->setMargin(0);
+ QLabel *label = new QLabel(m_noprojectLabel);
+ label->setText(tr("No project loaded."));
{
QFont f = label->font();
f.setPointSizeF(f.pointSizeF() * 1.4);
f.setBold(true);
label->setFont(f);
}
- hbox->addWidget(label);
- ProjectPushButton *changeProject = new ProjectPushButton(m_projectChooser);
- connect(changeProject, SIGNAL(projectChanged(ProjectExplorer::Project*)),
- label, SLOT(setProject(ProjectExplorer::Project*)));
- hbox->addWidget(changeProject);
-
- // no projects label:
- m_noprojectLabel = new QLabel(this);
- m_noprojectLabel->setText(tr("No project loaded."));
- {
- QFont f = m_noprojectLabel->font();
- f.setPointSizeF(f.pointSizeF() * 1.4);
- f.setBold(true);
- m_noprojectLabel->setFont(f);
- }
- m_noprojectLabel->setMargin(10);
- m_noprojectLabel->setAlignment(Qt::AlignTop);
- viewLayout->addWidget(m_noprojectLabel);
-
- // show either panels or no projects label:
- bool noProjects = session->projects().isEmpty();
- m_panelsWidget->setVisible(!noProjects);
- m_noprojectLabel->setVisible(noProjects);
+ label->setMargin(10);
+ label->setAlignment(Qt::AlignTop);
+ noprojectLayout->addWidget(label);
+ noprojectLayout->addStretch(10);
+ m_centralWidget->addWidget(m_noprojectLabel);
// connects:
- connect(changeProject, SIGNAL(projectChanged(ProjectExplorer::Project*)),
- this, SLOT(showProperties(ProjectExplorer::Project*)));
+ connect(m_tabWidget, SIGNAL(currentIndexChanged(int,int)),
+ this, SLOT(showProperties(int,int)));
connect(session, SIGNAL(sessionLoaded()), this, SLOT(restoreStatus()));
connect(session, SIGNAL(aboutToSaveSession()), this, SLOT(saveStatus()));
connect(session, SIGNAL(projectAdded(ProjectExplorer::Project*)),
- this, SLOT(projectAdded()));
- connect(session, SIGNAL(projectRemoved(ProjectExplorer::Project*)),
- this, SLOT(projectRemoved()));
+ this, SLOT(projectAdded(ProjectExplorer::Project*)));
+ connect(session, SIGNAL(aboutToRemoveProject(ProjectExplorer::Project*)),
+ this, SLOT(aboutToRemoveProject(ProjectExplorer::Project*)));
// Update properties to empty project for now:
- showProperties(0);
+ showProperties(-1, -1);
}
ProjectWindow::~ProjectWindow()
{
- qDeleteAll(m_panels);
- m_panels.clear();
}
-void ProjectWindow::projectAdded()
+void ProjectWindow::shutdown()
{
- m_panelsWidget->setVisible(true);
- m_noprojectLabel->setVisible(false);
+ showProperties(-1, -1); // TODO that's a bit stupid, but otherwise stuff is still
+ // connected to the session
+ disconnect(ProjectExplorerPlugin::instance()->session(), 0, this, 0);
}
-void ProjectWindow::projectRemoved()
+void ProjectWindow::projectAdded(ProjectExplorer::Project *project)
{
- if (ProjectExplorerPlugin::instance()->session()->projects().isEmpty()) {
- m_panelsWidget->setVisible(false);
- m_noprojectLabel->setVisible(true);
+ QList<Project *> projects = ProjectExplorerPlugin::instance()->session()->projects();
+ int index = projects.indexOf(project);
+ QStringList subtabs;
+ foreach (IPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<IPanelFactory>()) {
+ if (panelFactory->supports(project))
+ subtabs << panelFactory->displayName();
}
+ m_tabIndexToProject.insert(index, project);
+ m_tabWidget->insertTab(index, project->displayName(), subtabs);
+}
+
+void ProjectWindow::aboutToRemoveProject(ProjectExplorer::Project *project)
+{
+ int index = m_tabIndexToProject.indexOf(project);
+ m_tabIndexToProject.removeAt(index);
+ m_tabWidget->removeTab(index);
}
void ProjectWindow::restoreStatus()
@@ -799,30 +278,45 @@ void ProjectWindow::saveStatus()
// TODO
}
-void ProjectWindow::showProperties(Project *project)
+void ProjectWindow::showProperties(int index, int subIndex)
{
- // Remove all existing panels:
- m_panelsWidget->clear();
-
- // delete custom panels:
- qDeleteAll(m_panels);
- m_panels.clear();
+ if (index < 0) {
+ m_centralWidget->setCurrentWidget(m_noprojectLabel);
+ if (m_panelsWidget) {
+ m_centralWidget->removeWidget(m_panelsWidget);
+ delete m_panelsWidget;
+ m_panelsWidget = 0;
+ }
+ return;
+ }
+ Project *project = m_tabIndexToProject.at(index);
- // Set up our default panels:
- m_panelsWidget->addWidget(tr("Active Build and Run Configurations"), m_activeConfigurationWidget, QIcon());
- m_panelsWidget->addWidget(m_spacerBetween);
- m_panelsWidget->addWidget(m_projectChooser);
+ PanelsWidget *panelsWidget = 0;
// Set up custom panels again:
- if (project) {
- QList<IPanelFactory *> pages =
- ExtensionSystem::PluginManager::instance()->getObjects<IPanelFactory>();
- foreach (IPanelFactory *panelFactory, pages) {
- if (panelFactory->supports(project)) {
+ QList<IPanelFactory *> pages =
+ ExtensionSystem::PluginManager::instance()->getObjects<IPanelFactory>();
+ int indexOfPanel = 0;
+ foreach (IPanelFactory *panelFactory, pages) {
+ if (panelFactory->supports(project)) {
+ if (indexOfPanel == subIndex) {
+ panelsWidget = new PanelsWidget(m_centralWidget);
IPropertiesPanel *panel = panelFactory->createPanel(project);
- m_panelsWidget->addWidget(panel->displayName(), panel->widget(), panel->icon());
- m_panels.push_back(panel);
+ panelsWidget->addPropertiesPanel(panel);
+ panel->widgetWasAddedToLayout();
+ break;
}
+ ++indexOfPanel;
+ }
+ }
+ if (panelsWidget) {
+ // add the new stuff to the stack widget
+ m_centralWidget->addWidget(panelsWidget);
+ m_centralWidget->setCurrentWidget(panelsWidget);
+ if (m_panelsWidget) {
+ m_centralWidget->removeWidget(m_panelsWidget);
+ delete m_panelsWidget;
}
+ m_panelsWidget = panelsWidget;
}
}