diff options
author | dt <qtc-committer@nokia.com> | 2009-09-17 13:59:10 +0200 |
---|---|---|
committer | dt <qtc-committer@nokia.com> | 2009-09-17 13:59:10 +0200 |
commit | 65648ee17ad1cfc93666b8c4b06fac5c3e6d6fe0 (patch) | |
tree | d6e4cd550c85a8532d508abb1eaaca70b97cf280 /src/plugins | |
parent | f52077bd81abebea6182420645c97e291cde5af6 (diff) | |
download | qt-creator-65648ee17ad1cfc93666b8c4b06fac5c3e6d6fe0.tar.gz |
The project pane rewrite version 2.
This splits up the edit and active settings. Let people try it and
report usability problems. I'm not 100% convinced of the layout either.
Diffstat (limited to 'src/plugins')
20 files changed, 765 insertions, 405 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index cae0febb45..fe9e76fc42 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -35,6 +35,7 @@ #include <projectexplorer/environment.h> #include <projectexplorer/debugginghelper.h> #include <utils/qtcassert.h> +#include <utils/detailsbutton.h> #include <QtGui/QFormLayout> #include <QtGui/QLineEdit> #include <QtGui/QGroupBox> @@ -260,9 +261,21 @@ CMakeRunConfigurationWidget::CMakeRunConfigurationWidget(CMakeRunConfiguration * fl->addRow(tr("Working Directory:"), boxlayout); + m_detailsWidget = new QWidget(this); + m_detailsWidget->setLayout(fl); + m_detailsWidget->setVisible(false); + + m_summaryLabel = new QLabel(this); + m_detailsButton = new Utils::DetailsButton(this); + + QHBoxLayout *hbox = new QHBoxLayout(); + hbox->addWidget(m_summaryLabel); + hbox->addWidget(m_detailsButton); + QVBoxLayout *vbx = new QVBoxLayout(this); vbx->setContentsMargins(0, -1, 0, -1); - vbx->addLayout(fl); + vbx->addLayout(hbox); + vbx->addWidget(m_detailsWidget); QLabel *environmentLabel = new QLabel(this); environmentLabel->setText(tr("Run Environment")); @@ -288,17 +301,22 @@ CMakeRunConfigurationWidget::CMakeRunConfigurationWidget(CMakeRunConfiguration * baseEnvironmentLayout->addWidget(m_baseEnvironmentComboBox); baseEnvironmentLayout->addStretch(10); + m_environmentWidget = new ProjectExplorer::EnvironmentWidget(this, baseEnvironmentWidget); + m_environmentWidget->setBaseEnvironment(m_cmakeRunConfiguration->baseEnvironment()); + m_environmentWidget->setUserChanges(m_cmakeRunConfiguration->userEnvironmentChanges()); + + vbx->addWidget(m_environmentWidget); + + updateSummary(); + connect(m_workingDirectoryEdit, SIGNAL(changed(QString)), this, SLOT(setWorkingDirectory())); connect(resetButton, SIGNAL(clicked()), this, SLOT(resetWorkingDirectory())); - m_environmentWidget = new ProjectExplorer::EnvironmentWidget(this, baseEnvironmentWidget); - m_environmentWidget->setBaseEnvironment(m_cmakeRunConfiguration->baseEnvironment()); - m_environmentWidget->setUserChanges(m_cmakeRunConfiguration->userEnvironmentChanges()); - - vbx->addWidget(m_environmentWidget); + connect(m_detailsButton, SIGNAL(clicked()), + this, SLOT(toggleDetails())); connect(m_environmentWidget, SIGNAL(userChangesUpdated()), this, SLOT(userChangesUpdated())); @@ -312,6 +330,11 @@ CMakeRunConfigurationWidget::CMakeRunConfigurationWidget(CMakeRunConfiguration * } +void CMakeRunConfigurationWidget::toggleDetails() +{ + m_detailsWidget->setVisible(!m_detailsWidget->isVisible()); +} + void CMakeRunConfigurationWidget::setWorkingDirectory() { if (m_ignoreChange) @@ -365,6 +388,15 @@ void CMakeRunConfigurationWidget::userEnvironmentChangesChanged() void CMakeRunConfigurationWidget::setArguments(const QString &args) { m_cmakeRunConfiguration->setArguments(args); + updateSummary(); +} + +void CMakeRunConfigurationWidget::updateSummary() +{ + QString text = tr("Running executable: <b>%1</b> %2") + .arg(QFileInfo(m_cmakeRunConfiguration->executable()).fileName(), + ProjectExplorer::Environment::joinArgumentList(m_cmakeRunConfiguration->commandLineArguments())); + m_summaryLabel->setText(text); } diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h index 60a3071ebe..c21891ac32 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h @@ -115,13 +115,17 @@ private slots: private slots: void baseEnvironmentComboBoxChanged(int index); void workingDirectoryChanged(const QString &workingDirectory); + void toggleDetails(); private: + void updateSummary(); bool m_ignoreChange; CMakeRunConfiguration *m_cmakeRunConfiguration; Core::Utils::PathChooser *m_workingDirectoryEdit; QComboBox *m_baseEnvironmentComboBox; ProjectExplorer::EnvironmentWidget *m_environmentWidget; - + QWidget *m_detailsWidget; + QLabel *m_summaryLabel; + QAbstractButton *m_detailsButton; }; class CMakeRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFactory diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index 4d7d2faccb..67e2cea813 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -122,7 +122,7 @@ QList<QWidget *> BuildSettingsSubWidgets::widgets() const } BuildSettingsSubWidgets::BuildSettingsSubWidgets(QWidget *parent) - : QGroupBox(parent) + : QWidget(parent) { new QVBoxLayout(this); } @@ -141,7 +141,7 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) QVBoxLayout *vbox = new QVBoxLayout(this); vbox->setContentsMargins(0, -1, 0, -1); QHBoxLayout *hbox = new QHBoxLayout(); - hbox->addWidget(new QLabel(tr("Build Configuration:"), this)); + hbox->addWidget(new QLabel(tr("Edit Build Configuration:"), this)); m_buildConfigurationComboBox = new QComboBox(this); m_buildConfigurationComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); hbox->addWidget(m_buildConfigurationComboBox); @@ -170,17 +170,14 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) this, SLOT(cloneConfiguration())); m_addButton->setMenu(addButtonMenu); + m_buildConfiguration = m_project->activeBuildConfiguration(); + connect(m_buildConfigurationComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(currentIndexChanged(int))); - // TODO currentIndexChanged - // needs to change active configuration - // and set widgets - connect(m_removeButton, SIGNAL(clicked()), this, SLOT(deleteConfiguration())); - connect(m_project, SIGNAL(activeBuildConfigurationChanged()), - this, SLOT(activeBuildConfigurationChanged())); + connect(m_project, SIGNAL(buildConfigurationDisplayNameChanged(const QString &)), this, SLOT(buildConfigurationDisplayNameChanged(const QString &))); @@ -189,7 +186,6 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) void BuildSettingsWidget::buildConfigurationDisplayNameChanged(const QString &buildConfiguration) { - for (int i=0; i<m_buildConfigurationComboBox->count(); ++i) { if (m_buildConfigurationComboBox->itemData(i).toString() == buildConfiguration) { m_buildConfigurationComboBox->setItemText(i, m_project->displayNameFor(buildConfiguration)); @@ -201,11 +197,10 @@ void BuildSettingsWidget::buildConfigurationDisplayNameChanged(const QString &bu void BuildSettingsWidget::updateBuildSettings() { - // TODO save position, entry from combbox // Delete old tree items - m_buildConfigurationComboBox->blockSignals(true); // TODO ... + m_buildConfigurationComboBox->blockSignals(true); m_buildConfigurationComboBox->clear(); m_subWidgets->clear(); @@ -224,14 +219,12 @@ void BuildSettingsWidget::updateBuildSettings() m_subWidgets->addWidget(subConfigWidget->displayName(), subConfigWidget); // Add tree items - QString activeBuildConfiguration = m_project->activeBuildConfiguration(); foreach (const QString &buildConfiguration, m_project->buildConfigurations()) { m_buildConfigurationComboBox->addItem(m_project->displayNameFor(buildConfiguration), buildConfiguration); - if (buildConfiguration == activeBuildConfiguration) + if (buildConfiguration == m_buildConfiguration) m_buildConfigurationComboBox->setCurrentIndex(m_buildConfigurationComboBox->count() - 1); } - // TODO ... m_buildConfigurationComboBox->blockSignals(false); // TODO Restore position, entry from combbox @@ -241,22 +234,21 @@ void BuildSettingsWidget::updateBuildSettings() void BuildSettingsWidget::currentIndexChanged(int index) { - QString buildConfiguration = m_buildConfigurationComboBox->itemData(index).toString(); - m_project->setActiveBuildConfiguration(buildConfiguration); + m_buildConfiguration = m_buildConfigurationComboBox->itemData(index).toString(); + activeBuildConfigurationChanged(); } void BuildSettingsWidget::activeBuildConfigurationChanged() { - const QString &activeBuildConfiguration = m_project->activeBuildConfiguration(); for (int i = 0; i < m_buildConfigurationComboBox->count(); ++i) { - if (m_buildConfigurationComboBox->itemData(i).toString() == activeBuildConfiguration) { + if (m_buildConfigurationComboBox->itemData(i).toString() == m_buildConfiguration) { m_buildConfigurationComboBox->setCurrentIndex(i); break; } } foreach (QWidget *widget, m_subWidgets->widgets()) { if (BuildConfigWidget *buildStepWidget = qobject_cast<BuildConfigWidget*>(widget)) { - buildStepWidget->init(activeBuildConfiguration); + buildStepWidget->init(m_buildConfiguration); } } } @@ -293,7 +285,7 @@ void BuildSettingsWidget::createConfiguration() m_project->addBuildConfiguration(newBuildConfiguration); m_project->setDisplayNameFor(newBuildConfiguration, newDisplayName); m_project->newBuildConfiguration(newBuildConfiguration); - m_project->setActiveBuildConfiguration(newBuildConfiguration); + m_buildConfiguration = newBuildConfiguration; updateBuildSettings(); } @@ -344,9 +336,8 @@ void BuildSettingsWidget::cloneConfiguration(const QString &sourceConfiguration) m_project->copyBuildConfiguration(sourceConfiguration, newBuildConfiguration); m_project->setDisplayNameFor(newBuildConfiguration, newDisplayName); + m_buildConfiguration = newBuildConfiguration; updateBuildSettings(); - - m_project->setActiveBuildConfiguration(newBuildConfiguration); } void BuildSettingsWidget::deleteConfiguration(const QString &deleteConfiguration) @@ -363,6 +354,15 @@ void BuildSettingsWidget::deleteConfiguration(const QString &deleteConfiguration } } + if (m_buildConfiguration == deleteConfiguration) { + foreach (const QString &otherConfiguration, m_project->buildConfigurations()) { + if (otherConfiguration != deleteConfiguration) { + m_buildConfiguration = otherConfiguration; + break; + } + } + } + m_project->removeBuildConfiguration(deleteConfiguration); updateBuildSettings(); diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h index fdb3417882..1f2978fd68 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.h +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h @@ -44,7 +44,7 @@ class IBuildStepFactory; namespace Internal { -class BuildSettingsSubWidgets : public QGroupBox +class BuildSettingsSubWidgets : public QWidget { Q_OBJECT public: @@ -99,9 +99,7 @@ private slots: void cloneConfiguration(); void deleteConfiguration(); - private: - void setActiveConfiguration(const QString &configuration); void cloneConfiguration(const QString &toClone); void deleteConfiguration(const QString &toDelete); @@ -110,6 +108,7 @@ private: QPushButton *m_removeButton; QComboBox *m_buildConfigurationComboBox; BuildSettingsSubWidgets *m_subWidgets; + QString m_buildConfiguration; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index fa175a8f36..5939547f32 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -35,6 +35,7 @@ #include <coreplugin/coreconstants.h> #include <extensionsystem/pluginmanager.h> #include <utils/qtcassert.h> +#include <utils/detailsbutton.h> #include <QtGui/QLabel> #include <QtGui/QPushButton> @@ -178,16 +179,10 @@ void BuildStepsPage::addBuildStepWidget(int pos, BuildStep *step) s.downButton = new QToolButton(this); s.downButton->setArrowType(Qt::DownArrow); #ifdef Q_OS_MAC - s.detailsButton = new QPushButton(this); - s.detailsButton->setAttribute(Qt::WA_MacSmallSize); - s.detailsButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); s.upButton->setIconSize(QSize(10, 10)); s.downButton->setIconSize(QSize(10, 10)); -#else - s.detailsButton = new QToolButton(this); #endif - s.detailsButton->setText(tr("Details")); - + s.detailsButton = new Utils::DetailsButton(this); // layout s.hbox = new QHBoxLayout(); diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp index d2ce450d03..0df2b30726 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp @@ -33,6 +33,7 @@ #include <coreplugin/icore.h> #include <projectexplorer/debugginghelper.h> +#include <utils/detailsbutton.h> #include <QtGui/QCheckBox> #include <QtGui/QFormLayout> @@ -91,7 +92,22 @@ CustomExecutableConfigurationWidget::CustomExecutableConfigurationWidget(CustomE QVBoxLayout *vbox = new QVBoxLayout(this); vbox->setContentsMargins(0, -1, 0, -1); - vbox->addLayout(layout); + + m_summaryLabel = new QLabel(this); + + m_detailsButton = new Utils::DetailsButton(this); + connect(m_detailsButton, SIGNAL(clicked()), + this, SLOT(toggleDetails())); + + QHBoxLayout *hbox = new QHBoxLayout(); + hbox->addWidget(m_summaryLabel); + hbox->addWidget(m_detailsButton); + vbox->addLayout(hbox); + + m_detailsWidget = new QWidget(this); + m_detailsWidget->setLayout(layout); + vbox->addWidget(m_detailsWidget); + m_detailsWidget->setVisible(false); QLabel *environmentLabel = new QLabel(this); environmentLabel->setText(tr("Run Environment")); @@ -146,6 +162,11 @@ CustomExecutableConfigurationWidget::CustomExecutableConfigurationWidget(CustomE this, SLOT(userEnvironmentChangesChanged())); } +void CustomExecutableConfigurationWidget::toggleDetails() +{ + m_detailsWidget->setVisible(!m_detailsWidget->isVisible()); +} + void CustomExecutableConfigurationWidget::userChangesUpdated() { m_runConfiguration->setUserEnvironmentChanges(m_environmentWidget->userChanges()); @@ -211,10 +232,18 @@ void CustomExecutableConfigurationWidget::termToggled(bool on) void CustomExecutableConfigurationWidget::changed() { + const QString &executable = m_runConfiguration->baseExecutable(); + QString text = tr("No Executable specified."); + if (!executable.isEmpty()) + text = tr("Running executable: <b>%1</b> %2"). + arg(executable, + ProjectExplorer::Environment::joinArgumentList(m_runConfiguration->commandLineArguments())); + + m_summaryLabel->setText(text); // We triggered the change, don't update us if (m_ignoreChange) return; - m_executableChooser->setPath(m_runConfiguration->baseExecutable()); + m_executableChooser->setPath(executable); m_commandLineArgumentsLineEdit->setText(ProjectExplorer::Environment::joinArgumentList(m_runConfiguration->commandLineArguments())); m_workingDirectory->setPath(m_runConfiguration->baseWorkingDirectory()); m_useTerminalCheck->setChecked(m_runConfiguration->runMode() == ApplicationRunConfiguration::Console); diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.h b/src/plugins/projectexplorer/customexecutablerunconfiguration.h index a31a320d33..b7c579fc6c 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.h +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.h @@ -161,6 +161,7 @@ private slots: void baseEnvironmentChanged(); void userEnvironmentChangesChanged(); void baseEnvironmentComboBoxChanged(int index); + void toggleDetails(); private: bool m_ignoreChange; CustomExecutableRunConfiguration *m_runConfiguration; @@ -171,6 +172,9 @@ private: QCheckBox *m_useTerminalCheck; ProjectExplorer::EnvironmentWidget *m_environmentWidget; QComboBox *m_baseEnvironmentComboBox; + QWidget *m_detailsWidget; + QLabel *m_summaryLabel; + QAbstractButton *m_detailsButton; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/dependenciespanel.cpp b/src/plugins/projectexplorer/dependenciespanel.cpp index dff15cdbd5..697681c178 100644 --- a/src/plugins/projectexplorer/dependenciespanel.cpp +++ b/src/plugins/projectexplorer/dependenciespanel.cpp @@ -31,6 +31,8 @@ #include "project.h" #include "session.h" +#include <utils/detailsbutton.h> + #include <coreplugin/fileiconprovider.h> #include <QtCore/QVector> @@ -230,15 +232,7 @@ DependenciesWidget::DependenciesWidget(SessionManager *session, m_titleLabel->setText("Dummy Text"); hbox->addWidget(m_titleLabel); - QAbstractButton *detailsButton; -#ifdef Q_OS_MAC - detailsButton = new QPushButton; - detailsButton->setAttribute(Qt::WA_MacSmallSize); - detailsButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); -#else - detailsButton = new QToolButton(this); -#endif - detailsButton->setText(tr("Details")); + QAbstractButton *detailsButton = new Utils::DetailsButton(this); connect(detailsButton, SIGNAL(clicked()), this, SLOT(toggleDetails())); diff --git a/src/plugins/projectexplorer/environmenteditmodel.cpp b/src/plugins/projectexplorer/environmenteditmodel.cpp index fab5ed6ab4..22fbc800df 100644 --- a/src/plugins/projectexplorer/environmenteditmodel.cpp +++ b/src/plugins/projectexplorer/environmenteditmodel.cpp @@ -29,6 +29,8 @@ #include "environmenteditmodel.h" +#include <utils/detailsbutton.h> + #include <QtGui/QVBoxLayout> #include <QtGui/QHeaderView> #include <QtGui/QToolButton> @@ -438,15 +440,7 @@ EnvironmentWidget::EnvironmentWidget(QWidget *parent, QWidget *additionalDetails m_summaryText = new QLabel(this); m_summaryText->setText(""); - QAbstractButton *detailsButton; -#ifdef Q_OS_MAC - detailsButton = new QPushButton(this); - detailsButton->setAttribute(Qt::WA_MacSmallSize); - detailsButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); -#else - detailsButton = new QToolButton(this); -#endif - detailsButton->setText(tr("Details")); + QAbstractButton *detailsButton = new Utils::DetailsButton(this); connect(detailsButton, SIGNAL(clicked()), this, SLOT(toggleDetails())); diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 4b0358652e..cd7b713cdb 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -112,6 +112,7 @@ void Project::addBuildConfiguration(const QString &name) for (int i = 0; i != m_cleanSteps.size(); ++i) m_cleanSteps.at(i)->addBuildConfiguration(name); + emit addedBuildConfiguration(this, name); } void Project::removeBuildConfiguration(const QString &name) @@ -131,6 +132,7 @@ void Project::removeBuildConfiguration(const QString &name) for (int i = 0; i != m_cleanSteps.size(); ++i) m_cleanSteps.at(i)->removeBuildConfiguration(name); + emit removedBuildConfiguration(this, name); } void Project::copyBuildConfiguration(const QString &source, const QString &dest) @@ -147,6 +149,7 @@ void Project::copyBuildConfiguration(const QString &source, const QString &dest) for (int i = 0; i != m_cleanSteps.size(); ++i) m_cleanSteps.at(i)->copyBuildConfiguration(source, dest); + emit addedBuildConfiguration(this, dest); } QStringList Project::buildConfigurations() const @@ -453,7 +456,7 @@ void Project::addRunConfiguration(QSharedPointer<RunConfiguration> runConfigurat return; } m_runConfigurations.push_back(runConfiguration); - emit addedRunConfiguration(runConfiguration->name()); + emit addedRunConfiguration(this, runConfiguration->name()); } void Project::removeRunConfiguration(QSharedPointer<RunConfiguration> runConfiguration) @@ -473,7 +476,7 @@ void Project::removeRunConfiguration(QSharedPointer<RunConfiguration> runConfigu } m_runConfigurations.removeOne(runConfiguration); - emit removedRunConfiguration(runConfiguration->name()); + emit removedRunConfiguration(this, runConfiguration->name()); } QSharedPointer<RunConfiguration> Project::activeRunConfiguration() const diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 49e8edf04a..ad36023c2d 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -147,11 +147,22 @@ public: signals: void fileListChanged(); + +// TODO clean up signal names +// might be better to also have +// a aboutToRemoveRunConfiguration +// and a removedBuildConfiguration +// a runconfiguration display name changed is missing void activeBuildConfigurationChanged(); void activeRunConfigurationChanged(); void runConfigurationsEnabledStateChanged(); - void removedRunConfiguration(const QString &name); - void addedRunConfiguration(const QString &name); + + void removedRunConfiguration(ProjectExplorer::Project *p, const QString &name); + void addedRunConfiguration(ProjectExplorer::Project *p, const QString &name); + + void removedBuildConfiguration(ProjectExplorer::Project *p, const QString &name); + void addedBuildConfiguration(ProjectExplorer::Project *p, const QString &name); + // This signal is jut there for updating the tree list in the buildsettings wizard void buildConfigurationDisplayNameChanged(const QString &buildConfiguration); void environmentChanged(const QString &buildConfiguration); diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index a86199476b..eb49901980 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -35,6 +35,7 @@ #include "iprojectproperties.h" #include "session.h" #include "projecttreewidget.h" +#include "runconfiguration.h" #include <coreplugin/minisplitter.h> #include <coreplugin/fileiconprovider.h> @@ -51,6 +52,9 @@ #include <QtGui/QTreeWidget> #include <QtGui/QHeaderView> #include <QtGui/QLabel> +#include <QtGui/QPainter> +#include <QtGui/QPaintEvent> +#include <utils/stylehelper.h> using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; @@ -87,6 +91,17 @@ PanelsWidget::~PanelsWidget() clear(); } +void PanelsWidget::addWidget(QWidget *widget) +{ + Panel p; + p.nameLabel = 0; + p.panelWidget = widget; + + p.marginLayout = 0; + m_layout->insertWidget(m_layout->count() -1, widget); + m_panels.append(p); +} + void PanelsWidget::addWidget(const QString &name, QWidget *widget) { Panel p; @@ -96,15 +111,15 @@ void PanelsWidget::addWidget(const QString &name, QWidget *widget) f.setBold(true); f.setPointSizeF(f.pointSizeF() * 1.4); p.nameLabel->setFont(f); + p.panelWidget = widget; - m_layout->insertWidget(m_layout->count() -1, p.nameLabel); + 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); } @@ -118,56 +133,431 @@ void PanelsWidget::clear() m_panels.clear(); } +void PanelsWidget::removeWidget(QWidget *widget) +{ + for(int i=0; i<m_panels.count(); ++i) { + const Panel & p = m_panels.at(i); + if (p.panelWidget == widget) { + if (p.marginLayout) + p.marginLayout->removeWidget(p.panelWidget); + else + m_layout->removeWidget(p.panelWidget); + delete p.nameLabel; + delete p.marginLayout; + m_panels.removeAt(i); + break; + } + } +} + +//// +// ActiveConfigurationWidget +//// + +ActiveConfigurationWidget::ActiveConfigurationWidget(QWidget *parent) + : QWidget(parent) +{ + QGridLayout *grid = new QGridLayout(this); + RunConfigurationComboBox *runConfigurationComboBox = new RunConfigurationComboBox(this); + grid->addWidget(new QLabel(tr("Active Runconfiguration")), 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(p->name(), 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(p->name()); + 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(const QSharedPointer<RunConfiguration> &rc, p->runConfigurations()) { + connect(rc.data(), SIGNAL(nameChanged()), 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); + qDebug()<<"Active Item changed to "<<index<<"which is :"<<pair.first<<pair.second; + 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<QSharedPointer<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(ProjectExplorer::Project *p, const QString &name) +{ + QSharedPointer<RunConfiguration> runConfiguration = QSharedPointer<RunConfiguration>(0); + foreach(QSharedPointer<RunConfiguration> rc, p->runConfigurations()) { + if (rc->name() == name) { + runConfiguration = rc; + break; + } + } + if (runConfiguration) { + connect(runConfiguration.data(), SIGNAL(nameChanged()), + this, SLOT(rebuildTree())); + } + rebuildTree(); +} + +void RunConfigurationComboBox::removedRunConfiguration(ProjectExplorer::Project *p, const QString &name) +{ + QSharedPointer<RunConfiguration> runConfiguration = QSharedPointer<RunConfiguration>(0); + foreach(QSharedPointer<RunConfiguration> rc, p->runConfigurations()) { + if (rc->name() == name) { + runConfiguration = rc; + break; + } + } + if (runConfiguration) { + disconnect(runConfiguration.data(), SIGNAL(nameChanged()), + this, SLOT(rebuildTree())); + } + + rebuildTree(); +} + +void RunConfigurationComboBox::projectAdded(ProjectExplorer::Project *p) +{ + rebuildTree(); + foreach(const QSharedPointer<RunConfiguration> &rc, p->runConfigurations()) + connect(rc.data(), SIGNAL(nameChanged()), 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::Project *, QString)), + this, SLOT(addedRunConfiguration(ProjectExplorer::Project *, QString))); + connect(p, SIGNAL(removedRunConfiguration(ProjectExplorer::Project *, QString)), + this, SLOT(removedRunConfiguration(ProjectExplorer::Project *, QString))); +} + +void RunConfigurationComboBox::disconnectFromProject(ProjectExplorer::Project *p) +{ + disconnect(p, SIGNAL(activeRunConfigurationChanged()), + this, SLOT(activeRunConfigurationChanged())); + disconnect(p, SIGNAL(addedRunConfiguration(ProjectExplorer::Project *, QString)), + this, SLOT(addedRunConfiguration(ProjectExplorer::Project *, QString))); + disconnect(p, SIGNAL(removedRunConfiguration(ProjectExplorer::Project *, QString)), + this, SLOT(removedRunConfiguration(ProjectExplorer::Project *, QString))); +} + +void RunConfigurationComboBox::rebuildTree() +{ + m_ignoreChange = true; + clear(); + + SessionManager *session = ProjectExplorer::ProjectExplorerPlugin::instance()->session(); + Project *startupProject = session->startupProject(); + foreach(Project *p, session->projects()) { + addItem(p->name(), QVariant(0)); + foreach(QSharedPointer<RunConfiguration> rc, p->runConfigurations()) { + addItem(" " + rc->name(), 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) + : QComboBox(parent), ignoreIndexChange(false), m_project(p) +{ + setSizeAdjustPolicy(QComboBox::AdjustToContents); + foreach(const QString &buildConfiguration, p->buildConfigurations()) + addItem(p->displayNameFor(buildConfiguration), buildConfiguration); + + int index = p->buildConfigurations().indexOf(p->activeBuildConfiguration()); + if (index != -1) + setCurrentIndex(index); + + connect(p, SIGNAL(buildConfigurationDisplayNameChanged(QString)), + this, SLOT(nameChanged(QString))); + connect(p, SIGNAL(activeBuildConfigurationChanged()), + this, SLOT(activeConfigurationChanged())); + connect(p, SIGNAL(addedBuildConfiguration(ProjectExplorer::Project *, QString)), + this, SLOT(addedBuildConfiguration(ProjectExplorer::Project *, QString))); + connect(p, SIGNAL(removedBuildConfiguration(ProjectExplorer::Project *, QString)), + this, SLOT(removedBuildConfiguration(ProjectExplorer::Project *, QString))); + connect(this, SIGNAL(activated(int)), + this, SLOT(changedIndex(int))); +} + +BuildConfigurationComboBox::~BuildConfigurationComboBox() +{ + +} + +void BuildConfigurationComboBox::nameChanged(const QString &buildConfiguration) +{ + int index = nameToIndex(buildConfiguration); + if (index == -1) + return; + setItemText(index, m_project->displayNameFor(buildConfiguration)); +} + +int BuildConfigurationComboBox::nameToIndex(const QString &buildConfiguration) +{ + for (int i=0; i < count(); ++i) + if (itemData(i) == buildConfiguration) + return i; + return -1; +} + +void BuildConfigurationComboBox::activeConfigurationChanged() +{ + int index = nameToIndex(m_project->activeBuildConfiguration()); + if (index == -1) + return; + ignoreIndexChange = true; + setCurrentIndex(index); + ignoreIndexChange = false; +} + +void BuildConfigurationComboBox::addedBuildConfiguration(ProjectExplorer::Project *,const QString &buildConfiguration) +{ + ignoreIndexChange = true; + addItem(m_project->displayNameFor(buildConfiguration), buildConfiguration); + ignoreIndexChange = false; +} + +void BuildConfigurationComboBox::removedBuildConfiguration(ProjectExplorer::Project *, const QString &buildConfiguration) +{ + ignoreIndexChange = true; + int index = nameToIndex(buildConfiguration); + removeItem(index); + ignoreIndexChange = false; +} + +void BuildConfigurationComboBox::changedIndex(int newIndex) +{ + if (newIndex == -1) + return; + m_project->setActiveBuildConfiguration(itemData(newIndex).toString()); +} /// -// ProjectView +// ProjectComboBox /// -ProjectView::ProjectView(QWidget *parent) - : QTreeWidget(parent) +ProjectComboBox::ProjectComboBox(QWidget *parent) + : QComboBox(parent), m_lastProject(0) { - m_sizeHint = QSize(250, 250); - setUniformRowHeights(true); - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + setSizeAdjustPolicy(QComboBox::AdjustToContents); + SessionManager *session = ProjectExplorerPlugin::instance()->session(); + + foreach(Project *p, session->projects()) { + addItem(p->name(), QVariant::fromValue((void *) p)); + } - QAbstractItemModel *m = model(); - connect(m, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(updateSizeHint())); - connect(m, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SLOT(updateSizeHint())); - connect(m, SIGNAL(modelReset()), - this, SLOT(updateSizeHint())); - connect(m, SIGNAL(layoutChanged()), - this, SLOT(updateSizeHint())); - updateSizeHint(); + connect(session, SIGNAL(projectRemoved(ProjectExplorer::Project*)), + this, SLOT(projectRemoved(ProjectExplorer::Project*))); + connect(session, SIGNAL(projectAdded(ProjectExplorer::Project*)), + this, SLOT(projectAdded(ProjectExplorer::Project*))); + + connect(this, SIGNAL(activated(int)), + SLOT(itemActivated(int))); } -ProjectView::~ProjectView() +ProjectComboBox::~ProjectComboBox() { } -QSize ProjectView::sizeHint() const +void ProjectComboBox::projectAdded(ProjectExplorer::Project *p) { - return m_sizeHint; + addItem(p->name(), QVariant::fromValue((void *) p)); + // Comboboxes don't emit a signal + if (count() == 1) + itemActivated(0); } -void ProjectView::updateSizeHint() +void ProjectComboBox::projectRemoved(ProjectExplorer::Project *p) { - if (!model()) { - m_sizeHint = QSize(250, 250); - return; + QList<Project *> projects = ProjectExplorerPlugin::instance()->session()->projects(); + for (int i= 0; i<projects.count(); ++i) + if (itemData(i, Qt::UserRole).value<void *>() == (void *) p) { + removeItem(i); + break; } - int heightOffset = size().height() - viewport()->height(); - int heightPerRow = sizeHintForRow(0); - if (heightPerRow == -1) { - heightPerRow = 30; + qDebug()<<"aboutToRemoveProject current index is"<<currentIndex(); + + // Comboboxes don't emit a signal if the index did't actually change + if (count() == 0) { + itemActivated(-1); + } else { + setCurrentIndex(0); + itemActivated(0); } - int rows = qMin(qMax(model()->rowCount(), 2), 6); - int height = rows * heightPerRow + heightOffset; - if (m_sizeHint.height() != height) { - m_sizeHint.setHeight(height); - updateGeometry(); +} + +void ProjectComboBox::itemActivated(int index) +{ + qDebug()<<"itemActivated"<<index; + Project *p = 0; + QList<Project *> projects = ProjectExplorerPlugin::instance()->session()->projects(); + if (index != -1 && index < projects.size()) + p = projects.at(index); + + if (p != m_lastProject) { + m_lastProject = p; + emit projectChanged(p); } } @@ -175,10 +565,6 @@ void ProjectView::updateSizeHint() // OnePixelBlackLine /// -#include <QtGui/QPainter> -#include <QtGui/QPaintEvent> -#include <utils/stylehelper.h> - class OnePixelBlackLine : public QWidget { public: @@ -196,7 +582,6 @@ public: } }; - /// // ProjectWindow /// @@ -204,46 +589,45 @@ public: ProjectWindow::ProjectWindow(QWidget *parent) : QWidget(parent), m_currentItemChanged(false) { - setWindowTitle(tr("Project Explorer")); - setWindowIcon(QIcon(":/projectexplorer/images/projectexplorer.png")); - m_projectExplorer = ProjectExplorerPlugin::instance(); m_session = m_projectExplorer->session(); - m_treeWidget = new ProjectView(this); - m_treeWidget->setSelectionMode(QAbstractItemView::SingleSelection); - m_treeWidget->setSelectionBehavior(QAbstractItemView::SelectRows); - m_treeWidget->setFrameStyle(QFrame::NoFrame); - m_treeWidget->setRootIsDecorated(false); - m_treeWidget->header()->setResizeMode(QHeaderView::ResizeToContents); - m_treeWidget->setHeaderLabels(QStringList() - << tr("Projects") - << tr("Startup") - << tr("Path") - ); - - connect(m_treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)), - this, SLOT(handleItem(QTreeWidgetItem*, int))); - connect(m_treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem *)), - this, SLOT(handleCurrentItemChanged(QTreeWidgetItem*))); - m_panelsWidget = new PanelsWidget(this); + m_activeConfigurationWidget = new ActiveConfigurationWidget(m_panelsWidget); + + m_projectChooser = new QWidget(m_panelsWidget); + QHBoxLayout *hbox = new QHBoxLayout(m_projectChooser); + hbox->setMargin(0); + hbox->addWidget(new QLabel(tr("Edit Configuration for Project:"), m_projectChooser)); + ProjectComboBox *projectComboBox = new ProjectComboBox(m_projectChooser); + hbox->addWidget(projectComboBox); + + m_panelsWidget->addWidget(tr("Active Configuration"), m_activeConfigurationWidget); + + m_spacerBetween = new QWidget(this); + QVBoxLayout *vbox = new QVBoxLayout(m_spacerBetween); + m_spacerBetween->setLayout(vbox); + vbox->addSpacerItem(new QSpacerItem(10, 15, QSizePolicy::Fixed, QSizePolicy::Fixed)); + vbox->addWidget(new OnePixelBlackLine(m_spacerBetween)); + vbox->addSpacerItem(new QSpacerItem(10, 15, QSizePolicy::Fixed, QSizePolicy::Fixed)); + + m_panelsWidget->addWidget(m_spacerBetween); + + m_panelsWidget->addWidget(tr("Edit Configuration"), m_projectChooser); + QVBoxLayout *topLevelLayout = new QVBoxLayout(this); topLevelLayout->setMargin(0); topLevelLayout->setSpacing(0); topLevelLayout->addWidget(new Core::Utils::StyledBar(this)); - topLevelLayout->addWidget(m_treeWidget); - topLevelLayout->addWidget(new OnePixelBlackLine(this)); + topLevelLayout->addWidget(m_panelsWidget); + connect(projectComboBox, SIGNAL(projectChanged(ProjectExplorer::Project*)), + this, SLOT(showProperties(ProjectExplorer::Project*))); + connect(m_session, SIGNAL(sessionLoaded()), this, SLOT(restoreStatus())); connect(m_session, SIGNAL(aboutToSaveSession()), this, SLOT(saveStatus())); - - connect(m_session, SIGNAL(startupProjectChanged(ProjectExplorer::Project*)), this, SLOT(updateTreeWidgetStatupProjectChanged(ProjectExplorer::Project*))); - connect(m_session, SIGNAL(projectAdded(ProjectExplorer::Project*)), this, SLOT(updateTreeWidgetProjectAdded(ProjectExplorer::Project*))); - connect(m_session, SIGNAL(projectRemoved(ProjectExplorer::Project*)), this, SLOT(updateTreeWidgetProjectRemoved(ProjectExplorer::Project*))); - connect(m_session, SIGNAL(aboutToRemoveProject(ProjectExplorer::Project*)), this, SLOT(updateTreeWidgetAboutToRemoveProject(ProjectExplorer::Project*))); } ProjectWindow::~ProjectWindow() @@ -252,36 +636,30 @@ ProjectWindow::~ProjectWindow() void ProjectWindow::restoreStatus() { - if (!m_treeWidget->currentItem() && m_treeWidget->topLevelItemCount()) { - m_treeWidget->setCurrentItem(m_treeWidget->topLevelItem(0), 0, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows); - } - // TODO -// const QVariant lastPanel = m_session->value(QLatin1String("ProjectWindow/Panel")); -// if (lastPanel.isValid()) { -// const int index = lastPanel.toInt(); -// if (index < m_panelsTabWidget->count()) -// m_panelsTabWidget->setCurrentIndex(index); -// } -// -// if ((m_panelsTabWidget->currentIndex() == -1) && m_panelsTabWidget->count()) -// m_panelsTabWidget->setCurrentIndex(0); } void ProjectWindow::saveStatus() { // TODO -// m_session->setValue(QLatin1String("ProjectWindow/Panel"), m_panelsTabWidget->currentIndex()); } -void ProjectWindow::showProperties(ProjectExplorer::Project *project, const QModelIndex & /* subIndex */) +void ProjectWindow::showProperties(Project *project) { if (debug) qDebug() << "ProjectWindow - showProperties called"; + m_panelsWidget->removeWidget(m_activeConfigurationWidget); + m_panelsWidget->removeWidget(m_spacerBetween); + m_panelsWidget->removeWidget(m_projectChooser); + // Remove the tabs from the tab widget first m_panelsWidget->clear(); + m_panelsWidget->addWidget(tr("Active Configuration"), m_activeConfigurationWidget); + m_panelsWidget->addWidget(m_spacerBetween); + m_panelsWidget->addWidget(tr("Edit Configuration"), m_projectChooser); + if (project) { QList<IPanelFactory *> pages = ExtensionSystem::PluginManager::instance()->getObjects<IPanelFactory>(); @@ -296,65 +674,6 @@ void ProjectWindow::showProperties(ProjectExplorer::Project *project, const QMod } } -void ProjectWindow::updateTreeWidgetStatupProjectChanged(ProjectExplorer::Project *startupProject) -{ - int count = m_treeWidget->topLevelItemCount(); - for (int i = 0; i < count; ++i) { - QTreeWidgetItem *item = m_treeWidget->topLevelItem(i); - if (Project *project = findProject(item->data(2, Qt::UserRole).toString())) { - bool checked = (startupProject == project); - if (item->checkState(1) != (checked ? Qt::Checked : Qt::Unchecked)) - item->setCheckState(1, checked ? Qt::Checked : Qt::Unchecked); - } else { - item->setCheckState(1, Qt::Unchecked); - } - } -} - -void ProjectWindow::updateTreeWidgetProjectAdded(ProjectExplorer::Project *projectAdded) -{ - int position = m_session->projects().indexOf(projectAdded); - const QFileInfo fileInfo(projectAdded->file()->fileName()); - - QTreeWidgetItem *item = new QTreeWidgetItem(); - item->setText(0, projectAdded->name()); - item->setIcon(0, Core::FileIconProvider::instance()->icon(fileInfo)); - item->setData(2, Qt::UserRole, fileInfo.filePath()); - item->setText(2, QDir::toNativeSeparators(fileInfo.filePath())); - - if (projectAdded->isApplication()) { - bool checked = (m_session->startupProject() == projectAdded); - item->setCheckState(1, checked ? Qt::Checked : Qt::Unchecked); - } - - m_treeWidget->insertTopLevelItem(position, item); -} - -void ProjectWindow::updateTreeWidgetAboutToRemoveProject(ProjectExplorer::Project *projectRemoved) { - int count = m_treeWidget->topLevelItemCount(); - for (int i = 0; i < count; ++i) { - QTreeWidgetItem *item = m_treeWidget->topLevelItem(i); - if (item->data(2, Qt::UserRole).toString() == QFileInfo(projectRemoved->file()->fileName()).filePath()) { - if (m_treeWidget->currentItem() == item) { - m_treeWidget->setCurrentItem(0); - } - } - } -} - -void ProjectWindow::updateTreeWidgetProjectRemoved(ProjectExplorer::Project *projectRemoved) -{ - int count = m_treeWidget->topLevelItemCount(); - for (int i = 0; i < count; ++i) { - QTreeWidgetItem *item = m_treeWidget->topLevelItem(i); - if (item->data(2, Qt::UserRole).toString() == QFileInfo(projectRemoved->file()->fileName()).filePath()) { - QTreeWidgetItem *it = m_treeWidget->takeTopLevelItem(i); - delete it; - break; - } - } -} - Project *ProjectWindow::findProject(const QString &path) const { QList<Project*> projects = m_session->projects(); @@ -363,44 +682,3 @@ Project *ProjectWindow::findProject(const QString &path) const return project; return 0; } - - -void ProjectWindow::handleCurrentItemChanged(QTreeWidgetItem *current) -{ - if (m_currentItemChanged) - return; - m_currentItemChanged = true; - if (current) { - QString path = current->data(2, Qt::UserRole).toString(); - if (Project *project = findProject(path)) { - m_projectExplorer->setCurrentFile(project, path); - showProperties(project, QModelIndex()); - m_currentItemChanged = false; - return; - } - } - showProperties(0, QModelIndex()); - m_currentItemChanged = false; -} - - -void ProjectWindow::handleItem(QTreeWidgetItem *item, int column) -{ - if (!item || column != 1) // startup project - return; - - const QString path = item->data(2, Qt::UserRole).toString(); - Project *project = findProject(path); - // Project no longer exists - if (!project) - return; - if (!(item->checkState(1) == Qt::Checked)) { // is now unchecked - if (m_session->startupProject() == project) { - item->setCheckState(1, Qt::Checked); // uncheck not supported - } - } else if (project && project->isApplication()) { // is now checked - m_session->setStartupProject(project); - } else { - item->setCheckState(1, Qt::Unchecked); // check not supported - } -} diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h index 237d9a2fc0..6b39e19d6e 100644 --- a/src/plugins/projectexplorer/projectwindow.h +++ b/src/plugins/projectexplorer/projectwindow.h @@ -32,15 +32,16 @@ #include <QtGui/QWidget> #include <QtGui/QScrollArea> -#include <QtGui/QTreeWidget> +#include <QtGui/QComboBox> +#include <QtCore/QPair> QT_BEGIN_NAMESPACE class QLabel; class QVBoxLayout; class QModelIndex; class QTabWidget; -class QTreeWidgetItem; class QHBoxLayout; +class QComboBox; QT_END_NAMESPACE namespace ProjectExplorer { @@ -59,7 +60,9 @@ public: PanelsWidget(QWidget *parent); ~PanelsWidget(); // Adds a widget + void addWidget(QWidget *widget); void addWidget(const QString &name, QWidget *widget); + void removeWidget(QWidget *widget); // Removes all widgets and deletes them void clear(); @@ -75,18 +78,76 @@ private: QList<Panel> m_panels; }; +class BuildConfigurationComboBox : public QComboBox +{ + Q_OBJECT +public: + BuildConfigurationComboBox(ProjectExplorer::Project *p, QWidget *parent = 0); + ~BuildConfigurationComboBox(); +private slots: + void nameChanged(const QString &buildConfiguration); + void activeConfigurationChanged(); + void addedBuildConfiguration(ProjectExplorer::Project *, const QString &buildConfiguration); + void removedBuildConfiguration(ProjectExplorer::Project *, const QString &buildConfiguration); + void changedIndex(int newIndex); +private: + int nameToIndex(const QString &buildConfiguration); + bool ignoreIndexChange; + ProjectExplorer::Project *m_project; +}; -class ProjectView : public QTreeWidget +class ActiveConfigurationWidget : public QWidget { Q_OBJECT public: - ProjectView (QWidget *parent); - ~ProjectView (); - virtual QSize sizeHint() const; + ActiveConfigurationWidget(QWidget *parent = 0); + ~ActiveConfigurationWidget(); private slots: - void updateSizeHint(); + void projectAdded(ProjectExplorer::Project*); + void projectRemoved(ProjectExplorer::Project*); private: - QSize m_sizeHint; + QMap<ProjectExplorer::Project *, QPair<BuildConfigurationComboBox *, QLabel *> > m_buildComboBoxMap; +}; + +class RunConfigurationComboBox : public QComboBox +{ + Q_OBJECT +public: + RunConfigurationComboBox(QWidget *parent = 0); + ~RunConfigurationComboBox(); +private slots: + void activeRunConfigurationChanged(); + void activeItemChanged(int); + void addedRunConfiguration(ProjectExplorer::Project *p, const QString &); + void removedRunConfiguration(ProjectExplorer::Project *p, const QString &); + void projectAdded(ProjectExplorer::Project*); + void projectRemoved(ProjectExplorer::Project*); + void rebuildTree(); +private: + int convertTreeIndexToInt(int project, int runconfigurationIndex); + QPair<int, int> convertIntToTreeIndex(int index); + void connectToProject(ProjectExplorer::Project *p); + void disconnectFromProject(ProjectExplorer::Project *p); + + bool m_ignoreChange; +}; + +class ProjectComboBox : public QComboBox +{ + Q_OBJECT +public: + ProjectComboBox(QWidget *parent); + ~ProjectComboBox(); + +signals: + void projectChanged(ProjectExplorer::Project *); + +private slots: + void projectAdded(ProjectExplorer::Project*); + void projectRemoved(ProjectExplorer::Project*); + void itemActivated(int); +private: + ProjectExplorer::Project *m_lastProject; }; class ProjectWindow : public QWidget @@ -98,23 +159,18 @@ public: ~ProjectWindow(); private slots: - void showProperties(ProjectExplorer::Project *project, const QModelIndex &subIndex); + void showProperties(ProjectExplorer::Project *project); void restoreStatus(); void saveStatus(); - void updateTreeWidgetStatupProjectChanged(ProjectExplorer::Project *startupProject); - void updateTreeWidgetProjectAdded(ProjectExplorer::Project *addedProject); - void updateTreeWidgetProjectRemoved(ProjectExplorer::Project *removedProject); - void updateTreeWidgetAboutToRemoveProject(ProjectExplorer::Project *removedProject); - - void handleItem(QTreeWidgetItem *item, int column); - void handleCurrentItemChanged(QTreeWidgetItem *); - private: + void updateRunConfigurationsComboBox(); SessionManager *m_session; ProjectExplorerPlugin *m_projectExplorer; - ProjectView* m_treeWidget; + ActiveConfigurationWidget *m_activeConfigurationWidget; + QWidget *m_spacerBetween; + QWidget *m_projectChooser; PanelsWidget *m_panelsWidget; Project *findProject(const QString &path) const; diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp index e6923faa50..ef4390de5e 100644 --- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp @@ -173,7 +173,6 @@ void RunConfigurationsModel::setRunConfigurations(const QList<QSharedPointer<Run RunSettingsWidget::RunSettingsWidget(Project *project) : m_project(project), m_runConfigurationsModel(new RunConfigurationsModel(this)), - m_enabledRunConfigurationsModel(new RunConfigurationsModel(this)), m_runConfigurationWidget(0) { m_ui = new Ui::RunSettingsPropertiesPage; @@ -185,25 +184,17 @@ RunSettingsWidget::RunSettingsWidget(Project *project) m_ui->removeToolButton->setIcon(QIcon(Core::Constants::ICON_MINUS)); m_ui->removeToolButton->setText(tr("Remove")); m_ui->runConfigurationCombo->setModel(m_runConfigurationsModel); - m_ui->activeRunConfigurationCombo->setModel(m_enabledRunConfigurationsModel); connect(m_addMenu, SIGNAL(aboutToShow()), this, SLOT(aboutToShowAddMenu())); connect(m_ui->runConfigurationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(showRunConfigurationWidget(int))); - connect(m_ui->activeRunConfigurationCombo, SIGNAL(activated(int)), - this, SLOT(activateRunConfiguration(int))); connect(m_ui->removeToolButton, SIGNAL(clicked(bool)), this, SLOT(removeRunConfiguration())); - connect(m_project, SIGNAL(removedRunConfiguration(QString)), + connect(m_project, SIGNAL(removedRunConfiguration(ProjectExplorer::Project *, QString)), this, SLOT(initRunConfigurationComboBox())); - connect(m_project, SIGNAL(addedRunConfiguration(QString)), - this, SLOT(initRunConfigurationComboBox())); - - connect(m_project, SIGNAL(activeRunConfigurationChanged()), - this, SLOT(activeRunConfigurationChanged())); - connect(m_project, SIGNAL(runConfigurationsEnabledStateChanged()), + connect(m_project, SIGNAL(addedRunConfiguration(ProjectExplorer::Project *, QString)), this, SLOT(initRunConfigurationComboBox())); initRunConfigurationComboBox(); @@ -292,9 +283,6 @@ void RunSettingsWidget::initRunConfigurationComboBox() if (runConfigurations.at(i)->isEnabled()) enabledRunConfigurations.append(runConfigurations.at(i)); } - m_enabledRunConfigurationsModel->setRunConfigurations(enabledRunConfigurations); - m_ui->activeRunConfigurationCombo->setCurrentIndex( - enabledRunConfigurations.indexOf(activeRunConfiguration)); m_ui->removeToolButton->setEnabled(runConfigurations.size() > 1); } @@ -307,20 +295,7 @@ void RunSettingsWidget::showRunConfigurationWidget(int index) // Update the run configuration configuration widget delete m_runConfigurationWidget; m_runConfigurationWidget = selectedRunConfiguration->configurationWidget(); - m_ui->groupBox->layout()->addWidget(m_runConfigurationWidget); -} - -void RunSettingsWidget::activateRunConfiguration(int index) -{ - m_project->setActiveRunConfiguration(m_enabledRunConfigurationsModel->runConfigurations().at(index)); -} - -void RunSettingsWidget::activeRunConfigurationChanged() -{ - QSharedPointer<RunConfiguration> active = m_project->activeRunConfiguration(); - int index = m_enabledRunConfigurationsModel->runConfigurations().indexOf(active); - if (index >= 0) - m_ui->activeRunConfigurationCombo->setCurrentIndex(index); + layout()->addWidget(m_runConfigurationWidget); } void RunSettingsWidget::nameChanged() diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.h b/src/plugins/projectexplorer/runsettingspropertiespage.h index 58e2a94e6d..5990779914 100644 --- a/src/plugins/projectexplorer/runsettingspropertiespage.h +++ b/src/plugins/projectexplorer/runsettingspropertiespage.h @@ -78,12 +78,9 @@ private slots: void removeRunConfiguration(); void nameChanged(); void initRunConfigurationComboBox(); - void activateRunConfiguration(int index); - void activeRunConfigurationChanged(); private: Project *m_project; RunConfigurationsModel *m_runConfigurationsModel; - RunConfigurationsModel *m_enabledRunConfigurationsModel; Ui::RunSettingsPropertiesPage *m_ui; QWidget *m_runConfigurationWidget; QMenu *m_addMenu; diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.ui b/src/plugins/projectexplorer/runsettingspropertiespage.ui index f72388829e..e95e8e4b76 100644 --- a/src/plugins/projectexplorer/runsettingspropertiespage.ui +++ b/src/plugins/projectexplorer/runsettingspropertiespage.ui @@ -6,98 +6,58 @@ <rect> <x>0</x> <y>0</y> - <width>621</width> - <height>300</height> + <width>416</width> + <height>35</height> </rect> </property> <layout class="QVBoxLayout" name="verticalLayout"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> + <layout class="QHBoxLayout" name="horizontalLayout"> <item> - <layout class="QFormLayout" name="formLayout"> - <property name="fieldGrowthPolicy"> - <enum>QFormLayout::ExpandingFieldsGrow</enum> + <widget class="QLabel" name="label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - <item row="0" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Active run configuration:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QComboBox" name="activeRunConfigurationCombo"> - <property name="maximumSize"> - <size> - <width>500</width> - <height>16777215</height> - </size> - </property> - <property name="sizeAdjustPolicy"> - <enum>QComboBox::AdjustToContents</enum> - </property> - <property name="minimumContentsLength"> - <number>15</number> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>Edit run configuration:</string> - </property> - <property name="buddy"> - <cstring>runConfigurationCombo</cstring> - </property> - </widget> - </item> - <item row="1" column="1"> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QComboBox" name="runConfigurationCombo"> - <property name="maximumSize"> - <size> - <width>500</width> - <height>16777215</height> - </size> - </property> - <property name="sizeAdjustPolicy"> - <enum>QComboBox::AdjustToContents</enum> - </property> - <property name="minimumContentsLength"> - <number>15</number> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="addToolButton"> - <property name="text"> - <string>+</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="removeToolButton"> - <property name="text"> - <string>-</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> + <property name="text"> + <string>Edit run configuration:</string> + </property> + <property name="buddy"> + <cstring>runConfigurationCombo</cstring> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="runConfigurationCombo"> + <property name="maximumSize"> + <size> + <width>500</width> + <height>16777215</height> + </size> + </property> + <property name="sizeAdjustPolicy"> + <enum>QComboBox::AdjustToContents</enum> + </property> + <property name="minimumContentsLength"> + <number>15</number> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="addToolButton"> + <property name="text"> + <string>+</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="removeToolButton"> + <property name="text"> + <string>-</string> + </property> + </widget> </item> <item> <spacer name="horizontalSpacer"> @@ -106,7 +66,7 @@ </property> <property name="sizeHint" stdset="0"> <size> - <width>40</width> + <width>39</width> <height>20</height> </size> </property> @@ -114,14 +74,6 @@ </item> </layout> </item> - <item> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string/> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_2"/> - </widget> - </item> </layout> </widget> <resources/> diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index 0d9c79159a..f9615936b2 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -36,6 +36,7 @@ #include "qt4projectmanager.h" #include "ui_qt4projectconfigwidget.h" +#include <utils/detailsbutton.h> #include <coreplugin/icore.h> #include <coreplugin/mainwindow.h> #include <projectexplorer/projectexplorerconstants.h> @@ -79,15 +80,7 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project) m_ui->detailsWidget->setVisible(false); m_ui->titleLabel->setText(""); - QAbstractButton *detailsButton; -#ifdef Q_OS_MAC - detailsButton = new QPushButton; - detailsButton->setAttribute(Qt::WA_MacSmallSize); - detailsButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); -#else - detailsButton = new QToolButton; -#endif - detailsButton->setText(tr("Details")); + QAbstractButton *detailsButton = new Utils::DetailsButton(this); QHBoxLayout *layout = new QHBoxLayout; layout->setMargin(0); layout->setSpacing(0); diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp index 22a7efbd13..a4e7d72037 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp @@ -212,6 +212,7 @@ void Qt4ProjectManagerPlugin::updateContextMenu(Project *project, m_runQMakeActionContextMenu->setEnabled(false); if (qobject_cast<Qt4Project *>(project)) { + m_runQMakeActionContextMenu->setVisible(true); if (!m_projectExplorer->buildManager()->isBuilding(project)) m_runQMakeActionContextMenu->setEnabled(true); } diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp index ba550ffb09..33f832f70c 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp @@ -41,13 +41,13 @@ #include <projectexplorer/buildstep.h> #include <projectexplorer/environmenteditmodel.h> #include <utils/qtcassert.h> +#include <utils/detailsbutton.h> #include <QtGui/QFormLayout> #include <QtGui/QInputDialog> #include <QtGui/QLabel> #include <QtGui/QCheckBox> #include <QtGui/QToolButton> -#include <QtGui/QGroupBox> #include <QtGui/QComboBox> using namespace Qt4ProjectManager::Internal; @@ -163,9 +163,25 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run this, SLOT(usingDyldImageSuffixToggled(bool))); #endif - QVBoxLayout *vbox = new QVBoxLayout(this); - vbox->setContentsMargins(0, -1, 0, -1); - vbox->addLayout(toplayout); + m_detailsWidget = new QWidget(this); + m_detailsWidget->setVisible(false); + QVBoxLayout *vboxTopLayout = new QVBoxLayout(this); + vboxTopLayout->setContentsMargins(0, -1, 0, -1); + m_summaryLabel = new QLabel(this); + m_summaryLabel->setText("This is a summary"); + m_detailsButton = new Utils::DetailsButton(this); + + connect(m_detailsButton, SIGNAL(clicked()), + this, SLOT(toggleDetails())); + + QHBoxLayout *detailsLayout = new QHBoxLayout(); + detailsLayout->addWidget(m_summaryLabel); + detailsLayout->addWidget(m_detailsButton); + + vboxTopLayout->addLayout(detailsLayout); + + vboxTopLayout->addWidget(m_detailsWidget); + m_detailsWidget->setLayout(toplayout); QLabel *environmentLabel = new QLabel(this); environmentLabel->setText(tr("Run Environment")); @@ -173,7 +189,7 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run f.setBold(true); f.setPointSizeF(f.pointSizeF() *1.2); environmentLabel->setFont(f); - vbox->addWidget(environmentLabel); + vboxTopLayout->addWidget(environmentLabel); QWidget *baseEnvironmentWidget = new QWidget; QHBoxLayout *baseEnvironmentLayout = new QHBoxLayout(baseEnvironmentWidget); @@ -195,7 +211,7 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run m_environmentWidget->setBaseEnvironment(m_qt4RunConfiguration->baseEnvironment()); m_environmentWidget->setUserChanges(m_qt4RunConfiguration->userEnvironmentChanges()); m_environmentWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - vbox->addWidget(m_environmentWidget); + vboxTopLayout->addWidget(m_environmentWidget); connect(m_workingDirectoryEdit, SIGNAL(changed(QString)), this, SLOT(setWorkingDirectory())); @@ -234,6 +250,22 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run this, SLOT(baseEnvironmentChanged())); } +void Qt4RunConfigurationWidget::toggleDetails() +{ + m_detailsWidget->setVisible(!m_detailsWidget->isVisible()); +} + +void Qt4RunConfigurationWidget::updateSummary() +{ + const QString &filename = QFileInfo(m_qt4RunConfiguration->executable()).fileName(); + const QString &arguments = ProjectExplorer::Environment::joinArgumentList(m_qt4RunConfiguration->commandLineArguments()); + QString text = tr("Running executable: <b>%1</b> %2 %3").arg( + filename, + arguments, + m_qt4RunConfiguration->runMode() == ApplicationRunConfiguration::Console ? tr("(in terminal)") : ""); + m_summaryLabel->setText(text); +} + void Qt4RunConfigurationWidget::baseEnvironmentComboBoxChanged(int index) { m_ignoreChange = true; @@ -319,8 +351,10 @@ void Qt4RunConfigurationWidget::workingDirectoryChanged(const QString &workingDi void Qt4RunConfigurationWidget::commandLineArgumentsChanged(const QString &args) { - if (!m_ignoreChange) - m_argumentsLineEdit->setText(args); + updateSummary(); + if (m_ignoreChange) + return; + m_argumentsLineEdit->setText(args); } void Qt4RunConfigurationWidget::nameChanged(const QString &name) @@ -331,6 +365,7 @@ void Qt4RunConfigurationWidget::nameChanged(const QString &name) void Qt4RunConfigurationWidget::runModeChanged(ApplicationRunConfiguration::RunMode runMode) { + updateSummary(); if (!m_ignoreChange) m_useTerminalCheck->setChecked(runMode == ApplicationRunConfiguration::Console); } @@ -343,6 +378,7 @@ void Qt4RunConfigurationWidget::usingDyldImageSuffixChanged(bool state) void Qt4RunConfigurationWidget::effectiveTargetInformationChanged() { + updateSummary(); if (m_isShown) { m_executableLabel->setText(QDir::toNativeSeparators(m_qt4RunConfiguration->executable())); m_ignoreChange = true; diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h index 252c7df8a4..343e240196 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h @@ -36,6 +36,7 @@ #include <projectexplorer/environmenteditmodel.h> #include <QtCore/QStringList> #include <QtGui/QWidget> +#include <QtGui/QToolButton> QT_BEGIN_NAMESPACE class QWidget; @@ -167,7 +168,10 @@ private slots: void usingDyldImageSuffixToggled(bool); void usingDyldImageSuffixChanged(bool); void baseEnvironmentComboBoxChanged(int index); + + void toggleDetails(); private: + void updateSummary(); Qt4RunConfiguration *m_qt4RunConfiguration; bool m_ignoreChange; QLabel *m_executableLabel; @@ -178,6 +182,9 @@ private: QCheckBox *m_usingDyldImageSuffix; QComboBox *m_baseEnvironmentComboBox; + QWidget *m_detailsWidget; + QToolButton *m_detailsButton; + QLabel *m_summaryLabel; ProjectExplorer::EnvironmentWidget *m_environmentWidget; bool m_isShown; |