Hi, my fourth patch adds a sub-menu which allows to build/rebuild/clean the current project *only*. At the same time the patch changes the "build/rebuild/clean Project" to always build the dependencies, too.
So the user gets the chance to build a project either with or without dependencies. I use to hang out on #qt-creator (choenig) if you're looking for me. I'd be happy to get some feedback or ideas for further improvements :-). thanks and take care, have fun /christian
From 64555406956b2b3357fbf7b980dfab9fccdafb1e Mon Sep 17 00:00:00 2001 From: Christian Hoenig <[email protected]> Date: Tue, 31 Mar 2009 16:43:32 +0200 Subject: [PATCH] Implement "Build Project Only" submenu and build project dependencies --- src/plugins/projectexplorer/projectexplorer.cpp | 122 +++++++++++++++++-- src/plugins/projectexplorer/projectexplorer.h | 7 + .../projectexplorer/projectexplorerconstants.h | 4 + 3 files changed, 120 insertions(+), 13 deletions(-) diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 2082b08..3751327 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -504,7 +504,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er // build action m_buildAction = new QAction(tr("Build Project"), this); cmd = am->registerAction(m_buildAction, Constants::BUILD, globalcontext); - cmd->setAttribute(Core::Command::CA_UpdateText); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+B"))); mbuild->addAction(cmd, Constants::G_BUILD_PROJECT); mproject->addAction(cmd, Constants::G_PROJECT_BUILD); @@ -521,6 +520,31 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er mbuild->addAction(cmd, Constants::G_BUILD_PROJECT); mproject->addAction(cmd, Constants::G_PROJECT_BUILD); + // build project only menu + Core::ActionContainer *mpo = am->createMenu(Constants::BUILDPRJONLYMENU); + m_buildPrjOnlyMenu = mpo->menu(); + m_buildPrjOnlyMenu->setTitle(tr("Project Only")); + mbuild->addMenu(mpo, Constants::G_BUILD_PROJECT); + mproject->addMenu(mpo, Constants::G_PROJECT_BUILD); + + // build action + m_buildPrjOnlyAction = new QAction(tr("Build Project Only"), this); + cmd = am->registerAction(m_buildPrjOnlyAction, Constants::BUILDPRJONLY, globalcontext); + cmd->setAttribute(Core::Command::CA_UpdateText); + mpo->addAction(cmd, ""); + + // rebuild action + m_rebuildPrjOnlyAction = new QAction(tr("Rebuild Project only"), this); + cmd = am->registerAction(m_rebuildPrjOnlyAction, Constants::REBUILDPRJONLY, globalcontext); + cmd->setAttribute(Core::Command::CA_UpdateText); + mpo->addAction(cmd, ""); + + // clean action + m_cleanPrjOnlyAction = new QAction(tr("Clean Project only"), this); + cmd = am->registerAction(m_cleanPrjOnlyAction, Constants::CLEANPRJONLY, globalcontext); + cmd->setAttribute(Core::Command::CA_UpdateText); + mpo->addAction(cmd, ""); + // Add Set Build Configuration to menu mbuild->addMenu(mbc, Constants::G_BUILD_PROJECT); mproject->addMenu(mbc, Constants::G_PROJECT_CONFIG); @@ -651,10 +675,13 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er #if 0 connect(m_loadAction, SIGNAL(triggered()), this, SLOT(loadAction())); #endif + connect(m_buildPrjOnlyAction, SIGNAL(triggered()), this, SLOT(buildProjectOnly())); connect(m_buildAction, SIGNAL(triggered()), this, SLOT(buildProject())); connect(m_buildSessionAction, SIGNAL(triggered()), this, SLOT(buildSession())); + connect(m_rebuildPrjOnlyAction, SIGNAL(triggered()), this, SLOT(rebuildProjectOnly())); connect(m_rebuildAction, SIGNAL(triggered()), this, SLOT(rebuildProject())); connect(m_rebuildSessionAction, SIGNAL(triggered()), this, SLOT(rebuildSession())); + connect(m_cleanPrjOnlyAction, SIGNAL(triggered()), this, SLOT(cleanProjectOnly())); connect(m_cleanAction, SIGNAL(triggered()), this, SLOT(cleanProject())); connect(m_cleanSessionAction, SIGNAL(triggered()), this, SLOT(cleanSession())); connect(m_runAction, SIGNAL(triggered()), this, SLOT(runProject())); @@ -1247,15 +1274,27 @@ void ProjectExplorerPlugin::updateActions() m_unloadAction->setEnabled(m_currentProject != 0); if (m_currentProject == 0) { m_unloadAction->setText(tr("Unload Project")); - m_buildAction->setText(tr("Build Project")); + m_buildPrjOnlyMenu->setTitle(tr("Project only")); + m_buildPrjOnlyAction->setText(tr("Build Project only")); + m_rebuildPrjOnlyAction->setText(tr("Rebuild Project only")); + m_cleanPrjOnlyAction->setText(tr("Clean Project only")); } else { m_unloadAction->setText(tr("Unload Project \"%1\"").arg(m_currentProject->name())); - m_buildAction->setText(tr("Build Project \"%1\"").arg(m_currentProject->name())); + m_buildPrjOnlyMenu->setTitle(tr("Project \"%1\" only").arg(m_currentProject->name())); + m_buildPrjOnlyAction->setText(tr("Build Project \"%1\" only").arg(m_currentProject->name())); + m_rebuildPrjOnlyAction->setText(tr("Rebuild Project \"%1\" only").arg(m_currentProject->name())); + m_cleanPrjOnlyAction->setText(tr("Clean Project \"%1\" only").arg(m_currentProject->name())); } m_buildAction->setEnabled(enableBuildActions); m_rebuildAction->setEnabled(enableBuildActions); m_cleanAction->setEnabled(enableBuildActions); + + m_buildPrjOnlyMenu->setEnabled(enableBuildActions); + m_buildPrjOnlyAction->setEnabled(enableBuildActions); + m_rebuildPrjOnlyAction->setEnabled(enableBuildActions); + m_cleanPrjOnlyAction->setEnabled(enableBuildActions); + m_clearSession->setEnabled(hasProjects && !building); m_buildSessionAction->setEnabled(hasProjects && !building); m_rebuildSessionAction->setEnabled(hasProjects && !building); @@ -1332,15 +1371,30 @@ bool ProjectExplorerPlugin::saveModifiedFiles(const QList<Project *> & projects) //NBS handle case where there is no activeBuildConfiguration // because someone delete all build configurations -void ProjectExplorerPlugin::buildProject() +void ProjectExplorerPlugin::buildProjectOnly() { if (debug) - qDebug() << "ProjectExplorerPlugin::buildProject"; + qDebug() << "ProjectExplorerPlugin::buildProjectOnly"; if (saveModifiedFiles(QList<Project *>() << m_currentProject)) buildManager()->buildProject(m_currentProject, m_currentProject->activeBuildConfiguration()); } +void ProjectExplorerPlugin::buildProject() +{ + if (debug) + qDebug() << "ProjectExplorerPlugin::buildProject"; + + const QList<Project *> & projects = m_session->projectOrder(m_currentProject); + if (saveModifiedFiles(projects)) { + QStringList configurations; + foreach (const Project * pro, projects) + configurations << pro->activeBuildConfiguration(); + + m_buildManager->buildProjects(projects, configurations); + } +} + void ProjectExplorerPlugin::buildSession() { if (debug) @@ -1356,10 +1410,10 @@ void ProjectExplorerPlugin::buildSession() } } -void ProjectExplorerPlugin::rebuildProject() +void ProjectExplorerPlugin::rebuildProjectOnly() { if (debug) - qDebug() << "ProjectExplorerPlugin::rebuildProject"; + qDebug() << "ProjectExplorerPlugin::rebuildProjectOnly"; if (saveModifiedFiles(QList<Project *>() << m_currentProject)) { m_buildManager->cleanProject(m_currentProject, m_currentProject->activeBuildConfiguration()); @@ -1367,6 +1421,22 @@ void ProjectExplorerPlugin::rebuildProject() } } +void ProjectExplorerPlugin::rebuildProject() +{ + if (debug) + qDebug() << "ProjectExplorerPlugin::rebuildProject"; + + const QList<Project *> & projects = m_session->projectOrder(m_currentProject); + if (saveModifiedFiles(projects)) { + QStringList configurations; + foreach (const Project * pro, projects) + configurations << pro->activeBuildConfiguration(); + + m_buildManager->cleanProjects(projects, configurations); + m_buildManager->buildProjects(projects, configurations); + } +} + void ProjectExplorerPlugin::rebuildSession() { if (debug) @@ -1383,15 +1453,30 @@ void ProjectExplorerPlugin::rebuildSession() } } -void ProjectExplorerPlugin::cleanProject() +void ProjectExplorerPlugin::cleanProjectOnly() { if (debug) - qDebug() << "ProjectExplorerPlugin::cleanProject"; + qDebug() << "ProjectExplorerPlugin::cleanProjectOnly"; if (saveModifiedFiles(QList<Project *>() << m_currentProject)) m_buildManager->cleanProject(m_currentProject, m_currentProject->activeBuildConfiguration()); } +void ProjectExplorerPlugin::cleanProject() +{ + if (debug) + qDebug() << "ProjectExplorerPlugin::cleanProject"; + + const QList<Project *> & projects = m_session->projectOrder(m_currentProject); + if (saveModifiedFiles(projects)) { + QStringList configurations; + foreach (const Project * pro, projects) + configurations << pro->activeBuildConfiguration(); + + m_buildManager->cleanProjects(projects, configurations); + } +} + void ProjectExplorerPlugin::cleanSession() { if (debug) @@ -1426,8 +1511,13 @@ void ProjectExplorerPlugin::runProjectImpl(Project *pro) m_runMode = ProjectExplorer::Constants::RUNMODE; m_delayedRunConfiguration = pro->activeRunConfiguration(); - //NBS TODO make the build project step take into account project dependencies - m_buildManager->buildProject(pro, pro->activeBuildConfiguration()); + + const QList<Project *> & projects = m_session->projectOrder(pro); + QStringList configurations; + foreach (const Project * prj, projects) + configurations << prj->activeBuildConfiguration(); + + m_buildManager->buildProjects(projects, configurations); } } @@ -1440,8 +1530,14 @@ void ProjectExplorerPlugin::debugProject() if (saveModifiedFiles(QList<Project *>() << pro)) { m_runMode = ProjectExplorer::Constants::DEBUGMODE; m_delayedRunConfiguration = pro->activeRunConfiguration(); - //NBS TODO make the build project step take into account project dependencies - m_buildManager->buildProject(pro, pro->activeBuildConfiguration()); + + const QList<Project *> & projects = m_session->projectOrder(pro); + QStringList configurations; + foreach (const Project * prj, projects) + configurations << prj->activeBuildConfiguration(); + + m_buildManager->buildProjects(projects, configurations); + updateRunAction(); } } diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 08c27ef..852b742 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -127,10 +127,13 @@ signals: private slots: void buildStateChanged(ProjectExplorer::Project * pro); void buildQueueFinished(bool success); + void buildProjectOnly(); void buildProject(); void buildSession(); + void rebuildProjectOnly(); void rebuildProject(); void rebuildSession(); + void cleanProjectOnly(); void cleanProject(); void cleanSession(); void cancelBuild(); @@ -218,10 +221,13 @@ private: #endif QAction *m_unloadAction; QAction *m_clearSession; + QAction *m_buildPrjOnlyAction; QAction *m_buildAction; QAction *m_buildSessionAction; + QAction *m_rebuildPrjOnlyAction; QAction *m_rebuildAction; QAction *m_rebuildSessionAction; + QAction *m_cleanPrjOnlyAction; QAction *m_cleanAction; QAction *m_cleanSessionAction; QAction *m_runAction; @@ -239,6 +245,7 @@ private: QAction *m_removeFileAction; QAction *m_renameFileAction; + QMenu *m_buildPrjOnlyMenu; QMenu *m_buildConfigurationMenu; QActionGroup *m_buildConfigurationActionGroup; QMenu *m_runConfigurationMenu; diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h index a9638b2..9eb6cfc 100644 --- a/src/plugins/projectexplorer/projectexplorerconstants.h +++ b/src/plugins/projectexplorer/projectexplorerconstants.h @@ -43,12 +43,16 @@ const char * const NEWPROJECT = "ProjectExplorer.NewProject"; const char * const LOAD = "ProjectExplorer.Load"; const char * const UNLOAD = "ProjectExplorer.Unload"; const char * const CLEARSESSION = "ProjectExplorer.ClearSession"; +const char * const BUILDPRJONLY = "ProjectExplorer.BuildProjectOnly"; const char * const BUILD = "ProjectExplorer.Build"; const char * const BUILDSESSION = "ProjectExplorer.BuildSession"; +const char * const REBUILDPRJONLY = "ProjectExplorer.RebuildProjectOnly"; const char * const REBUILD = "ProjectExplorer.Rebuild"; const char * const REBUILDSESSION = "ProjectExplorer.RebuildSession"; +const char * const CLEANPRJONLY = "ProjectExplorer.CleanProjectOnly"; const char * const CLEAN = "ProjectExplorer.Clean"; const char * const CLEANSESSION = "ProjectExplorer.CleanSession"; +const char * const BUILDPRJONLYMENU = "ProjectExplorer.BuildProjectOnlyMenu"; const char * const BUILDCONFIGURATIONMENU = "ProjectExplorer.BuildConfigurationMenu"; const char * const CANCELBUILD = "ProjectExplorer.CancelBuild"; const char * const RUNCONFIGURATIONMENU = "ProjectExplorer.RunConfigurationMenu"; -- 1.6.0.6
_______________________________________________ Qt-creator mailing list [email protected] http://lists.trolltech.com/mailman/listinfo/qt-creator
