diff options
author | dt <qtc-committer@nokia.com> | 2010-03-25 16:16:38 +0100 |
---|---|---|
committer | dt <qtc-committer@nokia.com> | 2010-03-25 18:02:14 +0100 |
commit | 70dc75990f7d827e27d49fb981ff648a7d08a0ca (patch) | |
tree | 038a7b4c64626fd14d17612012c5d6bd25f5298e /src/plugins/projectexplorer/projectwindow.cpp | |
parent | 184fd353d294d9688919b8861b370ffa0733e046 (diff) | |
download | qt-creator-70dc75990f7d827e27d49fb981ff648a7d08a0ca.tar.gz |
Simplfy code dealing with the projects page
Distinguish between pages that are target specific and project specific.
Do the magic hierarchy reduction if only one target is supported just in
the projectwindow. Treat the targets page specially.
Reviewed-By: hunger
Diffstat (limited to 'src/plugins/projectexplorer/projectwindow.cpp')
-rw-r--r-- | src/plugins/projectexplorer/projectwindow.cpp | 117 |
1 files changed, 70 insertions, 47 deletions
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index c2cb2c28bc..b1cd90e9d3 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -72,28 +72,7 @@ const int ABOVE_HEADING_MARGIN(10); const int ABOVE_CONTENTS_MARGIN(4); const int BELOW_CONTENTS_MARGIN(16); -bool skipPanelFactory(Project *project, IPanelFactory *factory) -{ - bool simplifyTargets(project->supportedTargetIds().count() <= 1); - if (simplifyTargets) { - // Do not show the targets list: - if (factory->id() == QLatin1String(TARGETSETTINGS_PANEL_ID)) - return true; - // Skip build settigns if none are available anyway: - if (project->activeTarget() && - !project->activeTarget()->buildConfigurationFactory() && - factory->id() == QLatin1String(BUILDSETTINGS_PANEL_ID)) - return true; - } else { - // Skip panels embedded into the targets panel: - if (factory->id() == QLatin1String(BUILDSETTINGS_PANEL_ID) || - factory->id() == QLatin1String(RUNSETTINGS_PANEL_ID)) - return true; - } - return false; -} - -} // namespace +} // anonymous namespace /// // OnePixelBlackLine @@ -251,8 +230,7 @@ void PanelsWidget::addPanelWidget(IPropertiesPanel *panel, int row) ProjectWindow::ProjectWindow(QWidget *parent) : QWidget(parent), - m_currentWidget(0), - m_currentPanel(0) + m_currentWidget(0) { ProjectExplorer::SessionManager *session = ProjectExplorerPlugin::instance()->session(); @@ -314,10 +292,26 @@ void ProjectWindow::registerProject(ProjectExplorer::Project *project) } QStringList subtabs; - foreach (IPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<IPanelFactory>()) { - if (skipPanelFactory(project, panelFactory)) - continue; - subtabs << panelFactory->displayName(); + if (project->supportedTargetIds().count() <= 1) { + // Show the target specific pages directly + QList<ITargetPanelFactory *> factories = + ExtensionSystem::PluginManager::instance()->getObjects<ITargetPanelFactory>(); + + foreach (ITargetPanelFactory *factory, factories) { + if (factory->supports(project->activeTarget())) + subtabs << factory->displayName(); + } + } else { + // Use the Targets page + subtabs << QCoreApplication::translate("TargetSettingsPanelFactory", "Targets"); + } + + // Add the project specific pages + + QList<IProjectPanelFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<IProjectPanelFactory>(); + foreach (IProjectPanelFactory *panelFactory, factories) { + if (panelFactory->supports(project)) + subtabs << panelFactory->displayName(); } m_tabIndexToProject.insert(index, project); @@ -378,26 +372,59 @@ void ProjectWindow::showProperties(int index, int subIndex) // Set up custom panels again: int pos = 0; - foreach (IPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<IPanelFactory>()) { - if (skipPanelFactory(project, panelFactory)) - continue; - if (pos == subIndex) { + IPanelFactory *fac = 0; + if (project->supportedTargetIds().count() > 1) { + if (subIndex == 0) { + // Targets page removeCurrentWidget(); - IPropertiesPanel *panel(panelFactory->createPanel(project)); - if (panel->flags() & IPropertiesPanel::NoAutomaticStyle) { - m_currentWidget = panel->widget(); - m_currentPanel = panel; - } else { - PanelsWidget *panelsWidget = new PanelsWidget(m_centralWidget); - panelsWidget->addPropertiesPanel(panel); - m_currentWidget = panelsWidget; - } + m_currentWidget = new TargetSettingsPanelWidget(project); m_centralWidget->addWidget(m_currentWidget); m_centralWidget->setCurrentWidget(m_currentWidget); - break; } ++pos; + } else { + // No Targets page, target specific pages are first in the list + foreach (ITargetPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<ITargetPanelFactory>()) { + if (panelFactory->supports(project->activeTarget())) { + if (subIndex == pos) { + fac = panelFactory; + break; + } + ++pos; + } + } + } + + if (!fac) { + foreach (IProjectPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<IProjectPanelFactory>()) { + if (panelFactory->supports(project)) { + if (subIndex == pos) { + fac = panelFactory; + break; + } + ++pos; + } + } } + + if (fac) { + removeCurrentWidget(); + + IPropertiesPanel *panel; + if (ITargetPanelFactory *ipf = qobject_cast<ITargetPanelFactory *>(fac)) + panel = ipf->createPanel(project->activeTarget()); + else if (IProjectPanelFactory *ipf = qobject_cast<IProjectPanelFactory *>(fac)) + panel = ipf->createPanel(project); + Q_ASSERT(panel); + + PanelsWidget *panelsWidget = new PanelsWidget(m_centralWidget); + panelsWidget->addPropertiesPanel(panel); + m_currentWidget = panelsWidget; + m_centralWidget->addWidget(m_currentWidget); + m_centralWidget->setCurrentWidget(m_currentWidget); + + } + ProjectExplorerPlugin::instance()->session()->setStartupProject(project); } @@ -405,11 +432,7 @@ void ProjectWindow::removeCurrentWidget() { if (m_currentWidget) { m_centralWidget->removeWidget(m_currentWidget); - if (m_currentPanel) { - delete m_currentPanel; - m_currentPanel = 0; - m_currentWidget = 0; // is deleted by the panel - } else if (m_currentWidget) { + if (m_currentWidget) { delete m_currentWidget; m_currentWidget = 0; } |