diff --git a/src/plugins/analyzerbase/analyzerbase.pro b/src/plugins/analyzerbase/analyzerbase.pro index e42ee34fa8c9298ac7b383f3de4de304e5e31289..e735e82d01b11672c11e113f129ffe48cdc8be23 100644 --- a/src/plugins/analyzerbase/analyzerbase.pro +++ b/src/plugins/analyzerbase/analyzerbase.pro @@ -20,7 +20,8 @@ SOURCES += \ analyzeroptionspage.cpp \ analyzerrunconfigwidget.cpp \ analyzerutils.cpp \ - startremotedialog.cpp + startremotedialog.cpp \ + analyzerruncontrolfactory.cpp HEADERS += \ ianalyzerengine.h \ @@ -35,7 +36,8 @@ HEADERS += \ analyzeroptionspage.h \ analyzerrunconfigwidget.h \ analyzerutils.h \ - startremotedialog.h + startremotedialog.h \ + analyzerruncontrolfactory.h FORMS += \ startremotedialog.ui diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index cb24fb00087fc42f90b897853614013cf0d88f53..e57110177dd6cc04126969244f816cc752855148 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -908,7 +908,6 @@ IAnalyzerTool *AnalyzerManager::toolFromId(const Core::Id &id) foreach (IAnalyzerTool *tool, m_instance->d->m_tools) if (id.name().startsWith(tool->id().name())) return tool; - QTC_ASSERT(false, qDebug() << "NO ANAYLYZER TOOL FOUND FOR ID" << id.name()); return 0; } diff --git a/src/plugins/analyzerbase/analyzerplugin.cpp b/src/plugins/analyzerbase/analyzerplugin.cpp index c9a8b8237f52fda55331043bafafb3e437265f5c..b9fab35a2f36926f9c51bd8977683b46bc28ba5f 100644 --- a/src/plugins/analyzerbase/analyzerplugin.cpp +++ b/src/plugins/analyzerbase/analyzerplugin.cpp @@ -36,6 +36,7 @@ #include "analyzerconstants.h" #include "analyzermanager.h" #include "ianalyzertool.h" +#include "analyzerruncontrolfactory.h" #include <coreplugin/icore.h> #include <coreplugin/imode.h> @@ -79,6 +80,8 @@ bool AnalyzerPlugin::initialize(const QStringList &arguments, QString *errorStri (void) new AnalyzerManager(this); + addAutoReleasedObject(new AnalyzerRunControlFactory()); + // Task integration. ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ProjectExplorer::TaskHub *hub = pm->getObject<ProjectExplorer::TaskHub>(); diff --git a/src/plugins/analyzerbase/analyzerrunconfigwidget.cpp b/src/plugins/analyzerbase/analyzerrunconfigwidget.cpp index cc7a6220bdc3ba677fa401d69a2b32241ab05261..88117b2a2a417407cb1f87c44b3c3bec5840ebca 100644 --- a/src/plugins/analyzerbase/analyzerrunconfigwidget.cpp +++ b/src/plugins/analyzerbase/analyzerrunconfigwidget.cpp @@ -34,7 +34,6 @@ #include "analyzerrunconfigwidget.h" -#include <utils/detailswidget.h> #include <utils/qtcassert.h> #include <QtCore/QDebug> @@ -45,18 +44,31 @@ #include <QtGui/QPushButton> namespace Analyzer { +namespace Internal { + +AnalyzerToolDetailWidget::AnalyzerToolDetailWidget(AbstractAnalyzerSubConfig *config, QWidget *parent) + : Utils::DetailsWidget(parent) +{ + QTC_ASSERT(config!=0, return); + + // update summary text + setSummaryText(tr("<strong>%1</strong> settings").arg(config->displayName())); + + // create config widget + QWidget *configWidget = config->createConfigWidget(this); + setWidget(configWidget); +} AnalyzerRunConfigWidget::AnalyzerRunConfigWidget() - : m_detailsWidget(new Utils::DetailsWidget(this)) { - QWidget *mainWidget = new QWidget(this); - new QVBoxLayout(mainWidget); - m_detailsWidget->setWidget(mainWidget); + QVBoxLayout *layout = new QVBoxLayout(this); + layout->setContentsMargins(0, 0, 0, 0); - QWidget *globalSetting = new QWidget(mainWidget); + QWidget *globalSetting = new QWidget(this); QHBoxLayout *globalSettingLayout = new QHBoxLayout(globalSetting); - mainWidget->layout()->addWidget(globalSetting); - QLabel *label = new QLabel(displayName(), globalSetting); + globalSettingLayout->setContentsMargins(0, 0, 0, 0); + layout->addWidget(globalSetting); + QLabel *label = new QLabel(tr("Analyzer Settings:"), globalSetting); globalSettingLayout->addWidget(label); m_settingsCombo = new QComboBox(globalSetting); m_settingsCombo->addItems(QStringList() @@ -72,13 +84,9 @@ AnalyzerRunConfigWidget::AnalyzerRunConfigWidget() connect(m_restoreButton, SIGNAL(clicked()), this, SLOT(restoreGlobal())); globalSettingLayout->addStretch(2); - m_subConfigWidget = new QWidget(mainWidget); - mainWidget->layout()->addWidget(m_subConfigWidget); + m_subConfigWidget = new QWidget(this); new QVBoxLayout(m_subConfigWidget); - - QVBoxLayout *layout = new QVBoxLayout(this); - layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(m_detailsWidget); + layout->addWidget(m_subConfigWidget); } QString AnalyzerRunConfigWidget::displayName() const @@ -93,29 +101,28 @@ void AnalyzerRunConfigWidget::setRunConfiguration(ProjectExplorer::RunConfigurat m_settings = rc->extraAspect<AnalyzerProjectSettings>(); QTC_ASSERT(m_settings, return); - // update summary text - QStringList tools; - foreach (AbstractAnalyzerSubConfig *config, m_settings->subConfigs()) { - tools << QString("<strong>%1</strong>").arg(config->displayName()); - } - m_detailsWidget->setSummaryText(tr("Available settings: %1").arg(tools.join(", "))); - - // add group boxes for each sub config - QLayout *layout = m_subConfigWidget->layout(); + // add config widget for each sub config foreach (AbstractAnalyzerSubConfig *config, m_settings->customSubConfigs()) { - QWidget *widget = config->createConfigWidget(this); - layout->addWidget(widget); + QWidget *widget = new AnalyzerToolDetailWidget(config); + m_subConfigWidget->layout()->addWidget(widget); } - m_subConfigWidget->setEnabled(!m_settings->isUsingGlobalSettings()); + setDetailEnabled(!m_settings->isUsingGlobalSettings()); m_settingsCombo->setCurrentIndex(m_settings->isUsingGlobalSettings() ? 0 : 1); m_restoreButton->setEnabled(!m_settings->isUsingGlobalSettings()); } +void AnalyzerRunConfigWidget::setDetailEnabled(bool value) +{ + QList<AnalyzerToolDetailWidget*> details = findChildren<AnalyzerToolDetailWidget*>(); + foreach (AnalyzerToolDetailWidget *detail, details) + detail->widget()->setEnabled(value); +} + void AnalyzerRunConfigWidget::chooseSettings(int setting) { QTC_ASSERT(m_settings, return); + setDetailEnabled(setting != 0); m_settings->setUsingGlobalSettings(setting == 0); - m_subConfigWidget->setEnabled(!m_settings->isUsingGlobalSettings()); m_restoreButton->setEnabled(!m_settings->isUsingGlobalSettings()); } @@ -125,4 +132,5 @@ void AnalyzerRunConfigWidget::restoreGlobal() m_settings->resetCustomToGlobalSettings(); } +} // namespace Internal } // namespace Analyzer diff --git a/src/plugins/analyzerbase/analyzerrunconfigwidget.h b/src/plugins/analyzerbase/analyzerrunconfigwidget.h index 9d4469f8f95ad3d104ed545b9555bd57a29040f6..66d17b106515b3fdaedfd80316141f66de23bc0e 100644 --- a/src/plugins/analyzerbase/analyzerrunconfigwidget.h +++ b/src/plugins/analyzerbase/analyzerrunconfigwidget.h @@ -35,11 +35,12 @@ #ifndef ANALYZER_INTERNAL_ANALYZERRUNCONFIGWIDGET_H #define ANALYZER_INTERNAL_ANALYZERRUNCONFIGWIDGET_H -#include "analyzerbase_global.h" #include "analyzersettings.h" #include <projectexplorer/runconfiguration.h> +#include <utils/detailswidget.h> + QT_BEGIN_NAMESPACE class QComboBox; class QPushButton; @@ -52,8 +53,19 @@ class DetailsWidget; namespace Analyzer { class AnalyzerSettings; +class AbstractAnalyzerSubConfig; + +namespace Internal { + +class AnalyzerToolDetailWidget : public Utils::DetailsWidget +{ + Q_OBJECT -class ANALYZER_EXPORT AnalyzerRunConfigWidget : public ProjectExplorer::RunConfigWidget +public: + explicit AnalyzerToolDetailWidget(AbstractAnalyzerSubConfig *config, QWidget *parent=0); +}; + +class AnalyzerRunConfigWidget : public ProjectExplorer::RunConfigWidget { Q_OBJECT @@ -64,18 +76,21 @@ public: void setRunConfiguration(ProjectExplorer::RunConfiguration *rc); +private: + void setDetailEnabled(bool value); + private slots: void chooseSettings(int setting); void restoreGlobal(); private: - Utils::DetailsWidget *m_detailsWidget; QWidget *m_subConfigWidget; AnalyzerProjectSettings *m_settings; QComboBox *m_settingsCombo; QPushButton *m_restoreButton; }; +} // namespace Internal } // namespace Analyzer #endif // ANALYZER_INTERNAL_ANALYZERRUNCONFIGWIDGET_H diff --git a/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp b/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c27140c165fe7aae252603ead17c4e111eb00f43 --- /dev/null +++ b/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp @@ -0,0 +1,104 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (C) 2011 Kläralvdalens Datakonsult AB, a KDAB Group company. +** +** Contact: Kläralvdalens Datakonsult AB (info@kdab.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + +#include "analyzerruncontrolfactory.h" +#include "analyzersettings.h" +#include "analyzerruncontrol.h" +#include "analyzerrunconfigwidget.h" +#include "analyzermanager.h" +#include "ianalyzertool.h" +#include "analyzerstartparameters.h" + +#include <projectexplorer/applicationrunconfiguration.h> +#include <projectexplorer/projectexplorer.h> + +#include <utils/qtcassert.h> + +#include <QAction> + +using namespace ProjectExplorer; + +namespace Analyzer { +namespace Internal { + +AnalyzerRunControlFactory::AnalyzerRunControlFactory(QObject *parent) : + IRunControlFactory(parent) +{ +} + +QString AnalyzerRunControlFactory::displayName() const +{ + return tr("Analyzer"); +} + +bool AnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const +{ + IAnalyzerTool *tool = AnalyzerManager::toolFromId(Core::Id(mode)); + if (tool) + return tool->canRun(runConfiguration, mode); + return false; +} + +RunControl *AnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) +{ + IAnalyzerTool *tool = AnalyzerManager::toolFromId(Core::Id(mode)); + if (!tool) + return 0; + + QTC_ASSERT(canRun(runConfiguration, mode), return 0); + + AnalyzerStartParameters sp = tool->createStartParameters(runConfiguration, mode); + sp.toolId = tool->id(); + + AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration); + QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); + return rc; +} + +IRunConfigurationAspect *AnalyzerRunControlFactory::createRunConfigurationAspect() +{ + return new AnalyzerProjectSettings; +} + +RunConfigWidget *AnalyzerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) +{ + AnalyzerProjectSettings *settings = runConfiguration->extraAspect<AnalyzerProjectSettings>(); + if (!settings) + return 0; + + AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget; + ret->setRunConfiguration(runConfiguration); + return ret; +} + +} // namespace Internal +} // namespace Analyzer diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h b/src/plugins/analyzerbase/analyzerruncontrolfactory.h similarity index 77% rename from src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h rename to src/plugins/analyzerbase/analyzerruncontrolfactory.h index 5c87c1c2507c5cc5be69463aae69163e72f1ab41..0c43027e68c9ed29805753030047d10ed0f42203 100644 --- a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h +++ b/src/plugins/analyzerbase/analyzerruncontrolfactory.h @@ -2,9 +2,9 @@ ** ** This file is part of Qt Creator ** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Kläralvdalens Datakonsult AB, a KDAB Group company. ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Kläralvdalens Datakonsult AB (info@kdab.com) ** ** ** GNU Lesser General Public License Usage @@ -26,27 +26,26 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ -#ifndef QMLPROFILERRUNCONTROLFACTORY_H -#define QMLPROFILERRUNCONTROLFACTORY_H +#ifndef ANALYZERRUNCONTROLFACTORY_H +#define ANALYZERRUNCONTROLFACTORY_H #include <analyzerbase/analyzerruncontrol.h> #include <projectexplorer/runconfiguration.h> -namespace QmlProfiler { +namespace Analyzer { namespace Internal { -class QmlProfilerRunControlFactory : public ProjectExplorer::IRunControlFactory +class AnalyzerRunControlFactory : public ProjectExplorer::IRunControlFactory { Q_OBJECT - public: typedef ProjectExplorer::RunConfiguration RunConfiguration; - QmlProfilerRunControlFactory(QObject *parent = 0); + explicit AnalyzerRunControlFactory(QObject *parent = 0); // IRunControlFactory implementation QString displayName() const; @@ -55,11 +54,9 @@ public: ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect(); ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); -signals: - void runControlCreated(Analyzer::AnalyzerRunControl *); }; } // namespace Internal -} // namespace QmlProfiler +} // namespace Analyzer -#endif // QMLPROFILERRUNCONTROLFACTORY_H +#endif // ANALYZERRUNCONTROLFACTORY_H diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index ed2954373f3296002d9d32ce78581bca8fba8e9d..8ceafae63ed44415af05f876bbe89d26bf86c466 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -37,6 +37,7 @@ #include "analyzerbase_global.h" #include "analyzerconstants.h" +#include "analyzerstartparameters.h" #include <coreplugin/id.h> @@ -48,7 +49,6 @@ class RunConfiguration; namespace Analyzer { -class AnalyzerStartParameters; class IAnalyzerOutputPaneAdapter; class IAnalyzerEngine; @@ -121,6 +121,15 @@ public: virtual IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0; + /// Returns true if the tool can be run + virtual bool canRun(ProjectExplorer::RunConfiguration *runConfiguration, + const QString &mode) const = 0; + + /// Create the start parameters for the run control factory + virtual AnalyzerStartParameters createStartParameters( + ProjectExplorer::RunConfiguration *runConfiguration, + const QString &mode) const = 0; + virtual void startTool(StartMode mode) = 0; /// Called when tools gets selected. diff --git a/src/plugins/qmlprofiler/qmlprofiler.pro b/src/plugins/qmlprofiler/qmlprofiler.pro index 88b732031c0bd0297167c13376a1bf356dc43b64..d6807a64105f80d038052fa859252ab81dcdae2d 100644 --- a/src/plugins/qmlprofiler/qmlprofiler.pro +++ b/src/plugins/qmlprofiler/qmlprofiler.pro @@ -26,8 +26,7 @@ SOURCES += \ localqmlprofilerrunner.cpp \ codaqmlprofilerrunner.cpp \ remotelinuxqmlprofilerrunner.cpp \ - qmlprofilereventview.cpp \ - qmlprofilerruncontrolfactory.cpp + qmlprofilereventview.cpp HEADERS += \ qmlprofilerconstants.h \ @@ -42,8 +41,7 @@ HEADERS += \ localqmlprofilerrunner.h \ codaqmlprofilerrunner.h \ remotelinuxqmlprofilerrunner.h \ - qmlprofilereventview.h \ - qmlprofilerruncontrolfactory.h + qmlprofilereventview.h RESOURCES += \ qml/qmlprofiler.qrc diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp index 4080a34ef2543447fc4a5384bc1ec8769d70c3da..69e39097511d43aca45be26b8ef48d2bb61a172a 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp @@ -33,7 +33,6 @@ #include "qmlprofilerplugin.h" #include "qmlprofilertool.h" -#include "qmlprofilerruncontrolfactory.h" #include <analyzerbase/analyzermanager.h> @@ -48,11 +47,12 @@ bool QmlProfilerPlugin::initialize(const QStringList &arguments, QString *errorS { Q_UNUSED(arguments) Q_UNUSED(errorString) - addAutoReleasedObject(new QmlProfilerRunControlFactory()); + StartModes modes; modes.append(StartMode(StartLocal)); modes.append(StartMode(StartRemote)); AnalyzerManager::addTool(new QmlProfilerTool(this), modes); + return true; } diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp deleted file mode 100644 index d9b43c4cc0a002ffd57ec89a409a3342e6a72b17..0000000000000000000000000000000000000000 --- a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** -** GNU Lesser General Public License Usage -** -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this file. -** Please review the following information to ensure the GNU Lesser General -** Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** Other Usage -** -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -**************************************************************************/ - -#include "qmlprofilerruncontrolfactory.h" -#include "qmlprojectmanager/qmlprojectrunconfiguration.h" - -#include <analyzerbase/analyzerstartparameters.h> -#include <analyzerbase/analyzermanager.h> -#include <analyzerbase/analyzersettings.h> -#include <analyzerbase/analyzerrunconfigwidget.h> - -#include <projectexplorer/applicationrunconfiguration.h> -#include <projectexplorer/projectexplorer.h> -#include <projectexplorer/target.h> - -#include <remotelinux/linuxdeviceconfiguration.h> -#include <remotelinux/remotelinuxrunconfiguration.h> -#include <qt4projectmanager/qt-s60/s60devicedebugruncontrol.h> -#include <qt4projectmanager/qt-s60/s60devicerunconfiguration.h> -#include <qt4projectmanager/qt-s60/s60deployconfiguration.h> - -#include <utils/qtcassert.h> - -#include <QtGui/QAction> - -using namespace Analyzer; -using namespace ProjectExplorer; -using namespace QmlProfiler::Internal; -using namespace QmlProjectManager; - -QmlProfilerRunControlFactory::QmlProfilerRunControlFactory(QObject *parent) - : IRunControlFactory(parent) -{ - setObjectName(QLatin1String("QmlProfilerRunControlFactory")); -} - -bool QmlProfilerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const -{ - // FIXME: Should this just accept all mode == QLatin1String("QmlProfiler"); ? - if (qobject_cast<QmlProjectRunConfiguration *>(runConfiguration)) - return mode == QLatin1String("QmlProfiler"); - if (qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration)) - return mode == QLatin1String("QmlProfiler"); - if (qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) - return mode == QLatin1String("QmlProfiler"); - if (qobject_cast<Qt4ProjectManager::S60DeviceRunConfiguration *>(runConfiguration)) - return mode == QLatin1String("QmlProfiler"); - return false; -} - -RunControl *QmlProfilerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) -{ - QTC_ASSERT(canRun(runConfiguration, mode), return 0); - AnalyzerStartParameters sp; - sp.toolId = "QmlProfiler"; - sp.startMode = StartQml; // FIXME: The parameter struct is not needed/not used. - - - // FIXME: This is only used to communicate the connParams settings. - if (QmlProjectRunConfiguration *rc1 = - qobject_cast<QmlProjectRunConfiguration *>(runConfiguration)) { - // This is a "plain" .qmlproject. - sp.environment = rc1->environment(); - sp.workingDirectory = rc1->workingDirectory(); - sp.debuggee = rc1->observerPath(); - sp.debuggeeArgs = rc1->viewerArguments(); - sp.displayName = rc1->displayName(); - sp.connParams.host = QLatin1String("localhost"); - sp.connParams.port = rc1->qmlDebugServerPort(); - } else if (LocalApplicationRunConfiguration *rc2 = - qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) { - sp.environment = rc2->environment(); - sp.workingDirectory = rc2->workingDirectory(); - sp.debuggee = rc2->executable(); - sp.debuggeeArgs = rc2->commandLineArguments(); - sp.displayName = rc2->displayName(); - sp.connParams.host = QLatin1String("localhost"); - sp.connParams.port = rc2->qmlDebugServerPort(); - } else if (RemoteLinux::RemoteLinuxRunConfiguration *rc3 = - qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration)) { - sp.debuggee = rc3->remoteExecutableFilePath(); - sp.debuggeeArgs = rc3->arguments(); - sp.connParams = rc3->deviceConfig()->sshParameters(); - sp.analyzerCmdPrefix = rc3->commandPrefix(); - sp.displayName = rc3->displayName(); - } else if (Qt4ProjectManager::S60DeviceRunConfiguration *rc4 = - qobject_cast<Qt4ProjectManager::S60DeviceRunConfiguration *>(runConfiguration)) { - Qt4ProjectManager::S60DeployConfiguration *deployConf = - qobject_cast<Qt4ProjectManager::S60DeployConfiguration *>(runConfiguration->target()->activeDeployConfiguration()); - - sp.debuggeeArgs = rc4->commandLineArguments(); - sp.displayName = rc4->displayName(); - sp.connParams.host = deployConf->deviceAddress(); - sp.connParams.port = rc4->qmlDebugServerPort(); - } else { - // What could that be? - QTC_ASSERT(false, return 0); - } - - IAnalyzerTool *tool = AnalyzerManager::toolFromId(Core::Id(mode)); - AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration); - QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); - return rc; -} - -QString QmlProfilerRunControlFactory::displayName() const -{ - return tr("QML Profiler"); -} - -IRunConfigurationAspect *QmlProfilerRunControlFactory::createRunConfigurationAspect() -{ - return new AnalyzerProjectSettings; -} - -RunConfigWidget *QmlProfilerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) -{ - QmlProjectManager::QmlProjectRunConfiguration *localRc = - qobject_cast<QmlProjectManager::QmlProjectRunConfiguration *>(runConfiguration); - if (!localRc) - return 0; - - AnalyzerProjectSettings *settings = runConfiguration->extraAspect<AnalyzerProjectSettings>(); - if (!settings) - return 0; - - Analyzer::AnalyzerRunConfigWidget *ret = new Analyzer::AnalyzerRunConfigWidget; - - ret->setRunConfiguration(runConfiguration); - return ret; -} diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 694049913b75ca5e57dca9aaba4fe79754ef681a..80fb530037bc2840c944b6f72257ff503b322e29 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -60,6 +60,10 @@ #include <projectexplorer/project.h> #include <projectexplorer/target.h> #include <projectexplorer/session.h> +#include <projectexplorer/applicationrunconfiguration.h> + +#include <remotelinux/remotelinuxrunconfiguration.h> +#include <remotelinux/linuxdeviceconfiguration.h> #include <texteditor/itexteditor.h> #include <coreplugin/coreconstants.h> @@ -74,6 +78,8 @@ #include <coreplugin/actionmanager/actioncontainer.h> #include <qt4projectmanager/qt4buildconfiguration.h> +#include <qt4projectmanager/qt-s60/s60devicedebugruncontrol.h> +#include <qt4projectmanager/qt-s60/s60devicerunconfiguration.h> #include <qt4projectmanager/qt-s60/s60deployconfiguration.h> #include <QtCore/QFile> @@ -95,6 +101,8 @@ using namespace Analyzer::Constants; using namespace QmlProfiler::Internal; using namespace QmlJsDebugClient; using namespace ProjectExplorer; +using namespace QmlProjectManager; +using namespace RemoteLinux; class QmlProfilerTool::QmlProfilerToolPrivate { @@ -357,6 +365,68 @@ IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp return engine; } +bool QmlProfilerTool::canRun(RunConfiguration *runConfiguration, const QString &mode) const +{ + Q_UNUSED(mode); + + if (qobject_cast<QmlProjectRunConfiguration *>(runConfiguration) + || qobject_cast<RemoteLinuxRunConfiguration *>(runConfiguration) + || qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration) + || qobject_cast<Qt4ProjectManager::S60DeviceRunConfiguration *>(runConfiguration)) + return true; + return false; +} + +AnalyzerStartParameters QmlProfilerTool::createStartParameters(RunConfiguration *runConfiguration, const QString &mode) const +{ + Q_UNUSED(mode); + + AnalyzerStartParameters sp; + sp.startMode = StartQml; // FIXME: The parameter struct is not needed/not used. + + // FIXME: This is only used to communicate the connParams settings. + if (QmlProjectRunConfiguration *rc1 = + qobject_cast<QmlProjectRunConfiguration *>(runConfiguration)) { + // This is a "plain" .qmlproject. + sp.environment = rc1->environment(); + sp.workingDirectory = rc1->workingDirectory(); + sp.debuggee = rc1->observerPath(); + sp.debuggeeArgs = rc1->viewerArguments(); + sp.displayName = rc1->displayName(); + sp.connParams.host = QLatin1String("localhost"); + sp.connParams.port = rc1->qmlDebugServerPort(); + } else if (LocalApplicationRunConfiguration *rc2 = + qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) { + sp.environment = rc2->environment(); + sp.workingDirectory = rc2->workingDirectory(); + sp.debuggee = rc2->executable(); + sp.debuggeeArgs = rc2->commandLineArguments(); + sp.displayName = rc2->displayName(); + sp.connParams.host = QLatin1String("localhost"); + sp.connParams.port = rc2->qmlDebugServerPort(); + } else if (RemoteLinux::RemoteLinuxRunConfiguration *rc3 = + qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration)) { + sp.debuggee = rc3->remoteExecutableFilePath(); + sp.debuggeeArgs = rc3->arguments(); + sp.connParams = rc3->deviceConfig()->sshParameters(); + sp.analyzerCmdPrefix = rc3->commandPrefix(); + sp.displayName = rc3->displayName(); + } else if (Qt4ProjectManager::S60DeviceRunConfiguration *rc4 = + qobject_cast<Qt4ProjectManager::S60DeviceRunConfiguration *>(runConfiguration)) { + Qt4ProjectManager::S60DeployConfiguration *deployConf = + qobject_cast<Qt4ProjectManager::S60DeployConfiguration *>(runConfiguration->target()->activeDeployConfiguration()); + + sp.debuggeeArgs = rc4->commandLineArguments(); + sp.displayName = rc4->displayName(); + sp.connParams.host = deployConf->deviceAddress(); + sp.connParams.port = rc4->qmlDebugServerPort(); + } else { + // What could that be? + QTC_ASSERT(false, return sp); + } + return sp; +} + QWidget *QmlProfilerTool::createWidgets() { QTC_ASSERT(!d->m_traceWindow, return 0); diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index 12755645b1678c92613f8d6d60e2ca5467ee9139..b81bb83f2965d8e8fef4de9a7a023cb4736f8a4d 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -61,6 +61,13 @@ public: Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); + bool canRun(ProjectExplorer::RunConfiguration *runConfiguration, + const QString &mode) const; + + Analyzer::AnalyzerStartParameters createStartParameters( + ProjectExplorer::RunConfiguration *runConfiguration, + const QString &mode) const; + QWidget *createWidgets(); void startTool(Analyzer::StartMode mode); diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index 904e1da33257adc0401fa79eebcbe54f7aeccfca..74c1e027d9fceac220334848410133e5f8ae7b0a 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -497,7 +497,7 @@ static QToolButton *createToolButton(QAction *action) } CallgrindTool::CallgrindTool(QObject *parent) - : Analyzer::IAnalyzerTool(parent) + : ValgrindTool(parent) { d = new CallgrindToolPrivate(this); setObjectName(QLatin1String("CallgrindTool")); diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h index e6219e8caefcff735b9f7e90ed0c8e669686449c..014caa8f8e3d31779c003dcb194fae18c166ebb6 100644 --- a/src/plugins/valgrind/callgrindtool.h +++ b/src/plugins/valgrind/callgrindtool.h @@ -33,14 +33,14 @@ #ifndef CALLGRINDTOOL_H #define CALLGRINDTOOL_H -#include <analyzerbase/ianalyzertool.h> +#include "valgrindtool.h" namespace Valgrind { namespace Internal { class CallgrindToolPrivate; -class CallgrindTool : public Analyzer::IAnalyzerTool +class CallgrindTool : public ValgrindTool { Q_OBJECT diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 6f836a89d2fae9b62ffe041d39858d8e994eda3e..ecd4082601a3a052210826f7d7cd313514acc011 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -185,7 +185,7 @@ static void initKindFilterAction(QAction *action, const QList<int> &kinds) } MemcheckTool::MemcheckTool(QObject *parent) - : Analyzer::IAnalyzerTool(parent) + : ValgrindTool(parent) { m_settings = 0; m_errorModel = 0; diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index f808e3bc6284016c0e45a40b68470e2dba086809..f5c1d3f48b4ee3030d6b8fade6fd0bb4aa701f21 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -35,7 +35,7 @@ #ifndef MEMCHECKTOOL_H #define MEMCHECKTOOL_H -#include <analyzerbase/ianalyzertool.h> +#include "valgrindtool.h" #include <QtGui/QSortFilterProxyModel> #include <QtCore/QSharedPointer> @@ -86,7 +86,7 @@ private: bool m_filterExternalIssues; }; -class MemcheckTool : public Analyzer::IAnalyzerTool +class MemcheckTool : public ValgrindTool { Q_OBJECT diff --git a/src/plugins/valgrind/valgrind.pro b/src/plugins/valgrind/valgrind.pro index f5df7d4d128c0f530e66118754b15a86a24bb7c0..f88a5e4d147c3d32ef1a9cefec4aa0630cfc4701 100644 --- a/src/plugins/valgrind/valgrind.pro +++ b/src/plugins/valgrind/valgrind.pro @@ -30,7 +30,8 @@ HEADERS += \ memchecktool.h \ memcheckengine.h \ memcheckerrorview.h \ - suppressiondialog.h + suppressiondialog.h \ + valgrindtool.h SOURCES += \ valgrindplugin.cpp \ @@ -52,7 +53,8 @@ SOURCES += \ memchecktool.cpp \ memcheckengine.cpp \ memcheckerrorview.cpp \ - suppressiondialog.cpp + suppressiondialog.cpp \ + valgrindtool.cpp FORMS += \ valgrindconfigwidget.ui diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp index 0129a231c57971d886cecc4459d482f1c63aed2e..b083510412fbe748c28321b058aba6bb3e64c24e 100644 --- a/src/plugins/valgrind/valgrindplugin.cpp +++ b/src/plugins/valgrind/valgrindplugin.cpp @@ -59,112 +59,12 @@ #include <QtGui/QAction> using namespace Analyzer; -using namespace Valgrind::Internal; using namespace ProjectExplorer; -///////////////////////////////////////////////////////////////////////////////// -// -// ValgrindRunControlFactory -// -///////////////////////////////////////////////////////////////////////////////// namespace Valgrind { namespace Internal { -class ValgrindRunControlFactory : public ProjectExplorer::IRunControlFactory -{ - Q_OBJECT - -public: - ValgrindRunControlFactory(QObject *parent = 0); - - // IRunControlFactory - bool canRun(RunConfiguration *runConfiguration, const QString &mode) const; - RunControl *create(RunConfiguration *runConfiguration, const QString &mode); - QString displayName() const; - - IRunConfigurationAspect *createRunConfigurationAspect(); - RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); -}; - -ValgrindRunControlFactory::ValgrindRunControlFactory(QObject *parent) - : IRunControlFactory(parent) -{ - setObjectName(QLatin1String("ValgrindRunControlFactory")); -} - -bool ValgrindRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const -{ - Q_UNUSED(runConfiguration); - return mode.startsWith("Callgrind") || mode.startsWith("Memcheck"); -} - -RunControl *ValgrindRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) -{ - QTC_ASSERT(canRun(runConfiguration, mode), return 0); - - AnalyzerStartParameters sp; - if (LocalApplicationRunConfiguration *rc1 = - qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) { - sp.startMode = StartLocal; - sp.environment = rc1->environment(); - sp.workingDirectory = rc1->workingDirectory(); - sp.debuggee = rc1->executable(); - sp.debuggeeArgs = rc1->commandLineArguments(); - sp.displayName = rc1->displayName(); - sp.connParams.host = QLatin1String("localhost"); - sp.connParams.port = rc1->qmlDebugServerPort(); - } else if (RemoteLinux::RemoteLinuxRunConfiguration *rc2 = - qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration)) { - sp.startMode = StartRemote; - sp.debuggee = rc2->remoteExecutableFilePath(); - sp.debuggeeArgs = rc2->arguments(); - sp.connParams = rc2->deviceConfig()->sshParameters(); - sp.analyzerCmdPrefix = rc2->commandPrefix(); - sp.displayName = rc2->displayName(); - } else { - // Might be S60DeviceRunfiguration, or something else ... - //sp.startMode = StartRemote; - sp.startMode = StartRemote; - } - - IAnalyzerTool *tool = AnalyzerManager::toolFromId(Core::Id(mode)); - AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration); - QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); - return rc; -} - -QString ValgrindRunControlFactory::displayName() const -{ - return tr("Analyzer"); -} - -IRunConfigurationAspect *ValgrindRunControlFactory::createRunConfigurationAspect() -{ - return new AnalyzerProjectSettings; -} - -RunConfigWidget *ValgrindRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) -{ - LocalApplicationRunConfiguration *localRc = - qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration); - if (!localRc) - return 0; - AnalyzerProjectSettings *settings = runConfiguration->extraAspect<AnalyzerProjectSettings>(); - if (!settings) - return 0; - - AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget; - ret->setRunConfiguration(runConfiguration); - return ret; -} - -///////////////////////////////////////////////////////////////////////////////// -// -// ValgrindPlugin -// -///////////////////////////////////////////////////////////////////////////////// - static void startRemoteTool(IAnalyzerTool *tool) { Q_UNUSED(tool); @@ -219,9 +119,6 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *) AnalyzerManager::addTool(new MemcheckTool(this), modes); AnalyzerManager::addTool(new CallgrindTool(this), modes); - ValgrindRunControlFactory *factory = new ValgrindRunControlFactory(); - addAutoReleasedObject(factory); - return true; } @@ -230,5 +127,3 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *) Q_EXPORT_PLUGIN(Valgrind::Internal::ValgrindPlugin) - -#include "valgrindplugin.moc" diff --git a/src/plugins/valgrind/valgrindtool.cpp b/src/plugins/valgrind/valgrindtool.cpp new file mode 100644 index 0000000000000000000000000000000000000000..208ad7cae94dca196975c9039c4e1bc4824a0a48 --- /dev/null +++ b/src/plugins/valgrind/valgrindtool.cpp @@ -0,0 +1,91 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (C) 2011 Kläralvdalens Datakonsult AB, a KDAB Group company. +** +** Contact: Kläralvdalens Datakonsult AB (info@kdab.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + +#include "valgrindtool.h" + +#include <remotelinux/remotelinuxrunconfiguration.h> +#include <remotelinux/linuxdeviceconfiguration.h> + +#include <projectexplorer/applicationrunconfiguration.h> +#include <projectexplorer/projectexplorer.h> + +using namespace ProjectExplorer; +using namespace RemoteLinux; + +namespace Valgrind { +namespace Internal { + +ValgrindTool::ValgrindTool(QObject *parent) : + Analyzer::IAnalyzerTool(parent) +{ +} + +bool ValgrindTool::canRun(ProjectExplorer::RunConfiguration *, const QString &) const +{ + return true; +} + +Analyzer::AnalyzerStartParameters ValgrindTool::createStartParameters( + ProjectExplorer::RunConfiguration *runConfiguration, + const QString &mode) const +{ + Q_UNUSED(mode); + + Analyzer::AnalyzerStartParameters sp; + if (LocalApplicationRunConfiguration *rc1 = + qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) { + sp.startMode = Analyzer::StartLocal; + sp.environment = rc1->environment(); + sp.workingDirectory = rc1->workingDirectory(); + sp.debuggee = rc1->executable(); + sp.debuggeeArgs = rc1->commandLineArguments(); + sp.displayName = rc1->displayName(); + sp.connParams.host = QLatin1String("localhost"); + sp.connParams.port = rc1->qmlDebugServerPort(); + } else if (RemoteLinuxRunConfiguration *rc2 = + qobject_cast<RemoteLinuxRunConfiguration *>(runConfiguration)) { + sp.startMode = Analyzer::StartRemote; + sp.debuggee = rc2->remoteExecutableFilePath(); + sp.debuggeeArgs = rc2->arguments(); + sp.connParams = rc2->deviceConfig()->sshParameters(); + sp.analyzerCmdPrefix = rc2->commandPrefix(); + sp.displayName = rc2->displayName(); + } else { + // Might be S60DeviceRunfiguration, or something else ... + //sp.startMode = StartRemote; + sp.startMode = Analyzer::StartRemote; + } + return sp; +} + +} // namespace Internal +} // namespace Valgrind diff --git a/src/plugins/valgrind/valgrindtool.h b/src/plugins/valgrind/valgrindtool.h new file mode 100644 index 0000000000000000000000000000000000000000..8c384f4ddd89a227e5471e25f0e684ecbf3b17c6 --- /dev/null +++ b/src/plugins/valgrind/valgrindtool.h @@ -0,0 +1,58 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (C) 2011 Kläralvdalens Datakonsult AB, a KDAB Group company. +** +** Contact: Kläralvdalens Datakonsult AB (info@kdab.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + +#ifndef VALGRINDTOOL_H +#define VALGRINDTOOL_H + +#include <analyzerbase/ianalyzertool.h> + +namespace Valgrind { +namespace Internal { + +class ValgrindTool : public Analyzer::IAnalyzerTool +{ + Q_OBJECT +public: + explicit ValgrindTool(QObject *parent); + + bool canRun(ProjectExplorer::RunConfiguration *runConfiguration, + const QString &mode) const; + + Analyzer::AnalyzerStartParameters createStartParameters( + ProjectExplorer::RunConfiguration *runConfiguration, + const QString &mode) const; +}; + +} // namespace Internal +} // namespace Valgrind + +#endif // VALGRINDTOOL_H