diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp index 45fff8a260e..e59a597caac 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp @@ -294,6 +294,9 @@ void GraphicsObjectNodeInstance::paintUpdate() bool GraphicsObjectNodeInstance::isMovable() const { + if (isRootNodeInstance()) + return false; + return m_isMovable && graphicsObject() && graphicsObject()->parentItem(); } diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp index 84f3adc18fd..0092e7beab3 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp @@ -204,6 +204,9 @@ void QmlGraphicsItemNodeInstance::doComponentComplete() bool QmlGraphicsItemNodeInstance::isResizable() const { + if (isRootNodeInstance()) + return false; + return m_isResizable && qmlGraphicsItem() && qmlGraphicsItem()->parentItem(); } diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/main.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/main.cpp index bbc168008f1..e09ffabe8f2 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/main.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/main.cpp @@ -63,7 +63,7 @@ int main(int argc, char *argv[]) new QmlDesigner::Qt4NodeInstanceClientProxy(&application); -#if defined(Q_OS_WIN) && defined(QT_NO_DEBUG) +#if defined(Q_OS_WIN) && defined(QT_NO_DEBUG) && !defined(ENABLE_QT_BREAKPAD) SetErrorMode(SEM_NOGPFAULTERRORBOX); //We do not want to see any message boxes #endif diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 7235c497d09..dd62d49f2c3 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -23368,7 +23368,7 @@ a = a + Would you like to delete the remote "%1"? - Möchten Sie den '%1' löschen? + Möchten Sie '%1' löschen? diff --git a/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.cpp b/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.cpp index 0e6d942a0ca..3f96d89edd9 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.cpp +++ b/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.cpp @@ -830,7 +830,11 @@ bool QStyleItem::eventFilter(QObject *o, QEvent *e) { void QStyleItem::showToolTip(const QString &str) { QPointF scene = mapToScene(width() - 20, 0); - QPoint global = qApp->focusWidget()->mapToGlobal(scene.toPoint()); + QWidget *focusWidget = qApp->focusWidget(); + if (!focusWidget) + return; + + QPoint global = focusWidget->mapToGlobal(scene.toPoint()); QToolTip::showText(QPoint(global.x(), global.y()), str); } diff --git a/share/qtcreator/welcomescreen/newssupport.qml b/share/qtcreator/welcomescreen/newssupport.qml deleted file mode 100644 index 55e223655f2..00000000000 --- a/share/qtcreator/welcomescreen/newssupport.qml +++ /dev/null @@ -1,7 +0,0 @@ -import QtQuick 1.0 - -Rectangle { - width: 200; height: 200 - color: "blue" -} - diff --git a/share/qtcreator/welcomescreen/widgets/NewsListing.qml b/share/qtcreator/welcomescreen/widgets/NewsListing.qml index 7ccc33decfa..a756ef7fc3b 100644 --- a/share/qtcreator/welcomescreen/widgets/NewsListing.qml +++ b/share/qtcreator/welcomescreen/widgets/NewsListing.qml @@ -1,4 +1,5 @@ import Qt 4.7 +import "../components/" as Components Item { id: root @@ -50,10 +51,17 @@ Item { Image { id: icon; source: blogIcon; asynchronous: true } Text { id: heading2; text: blogName; font.italic: true; wrapMode: Text.WrapAtWordBoundaryOrAnywhere; textFormat: Text.RichText; width: parent.width-icon.width-5 } } - Text { id: text; text: description; wrapMode: Text.WrapAtWordBoundaryOrAnywhere; textFormat: Text.RichText ; width: parent.width-10 } + Text { + id: text; + text: description; + wrapMode: Text.WrapAtWordBoundaryOrAnywhere + textFormat: Text.RichText + width: parent.width-10 + } Text { visible: link !== ""; id: readmore; text: qsTr("Click to read more..."); font.italic: true; wrapMode: Text.WrapAtWordBoundaryOrAnywhere; textFormat: Text.RichText } } - MouseArea { anchors.fill: parent; onClicked: Qt.openUrlExternally(link); hoverEnabled: true; id: mouseArea } + Components.QStyleItem { id: styleItem; cursor: "pointinghandcursor"; anchors.fill: column } + MouseArea { anchors.fill: column; onClicked: Qt.openUrlExternally(link); hoverEnabled: true; id: mouseArea } StateGroup { id: activeState diff --git a/share/qtcreator/welcomescreen/widgets/RecentSessions.qml b/share/qtcreator/welcomescreen/widgets/RecentSessions.qml index 6956df9df28..3f10805ff97 100644 --- a/share/qtcreator/welcomescreen/widgets/RecentSessions.qml +++ b/share/qtcreator/welcomescreen/widgets/RecentSessions.qml @@ -35,7 +35,7 @@ HeaderItemView { anchors.leftMargin: 10 } - Timer { id: timer; interval: 500; onTriggered: { styleItem.showToolTip(sessionName); print("triggered")} } + Timer { id: timer; interval: 500; onTriggered: styleItem.showToolTip(sessionName) } MouseArea { anchors.fill: parent diff --git a/src/plugins/analyzerbase/analyzerconstants.h b/src/plugins/analyzerbase/analyzerconstants.h index a543bdbc4d1..883f77b9cf4 100644 --- a/src/plugins/analyzerbase/analyzerconstants.h +++ b/src/plugins/analyzerbase/analyzerconstants.h @@ -57,14 +57,9 @@ const char * const C_ANALYZEMODE = "Analyzer.AnalyzeMode"; // menu const char * const M_DEBUG_ANALYZER = "Analyzer.Menu.StartAnalyzer"; -const char * const G_ANALYZER_STARTSTOP = "Menu.Group.Analyzer.StartStop"; -const char * const G_ANALYZER_TOOLS = "Menu.Group.Analyzer.Tools"; - const char * const START = "Analyzer.Start"; const char * const STARTREMOTE = "Analyzer.StartRemote"; const char * const STOP = "Analyzer.Stop"; -const char * const ANALYZER_TOOLS = "Menu.Action.Analyzer.Tools."; -const char * const ANALYZER_TOOLS_SEPARATOR = "Menu.Action.Analyzer.Tools.Separator"; // options dialog const char * const ANALYZER_SETTINGS_CATEGORY = "T.Analyzer"; diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index d0ba26b9377..8553afab86a 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -104,32 +104,10 @@ using namespace Analyzer::Internal; namespace Analyzer { namespace Internal { -class DockWidgetEventFilter : public QObject -{ - Q_OBJECT - -public: - explicit DockWidgetEventFilter(QObject *parent = 0) : QObject(parent) {} - -signals: - void widgetResized(); - -protected: - virtual bool eventFilter(QObject *obj, QEvent *event); -}; - -bool DockWidgetEventFilter::eventFilter(QObject *obj, QEvent *event) -{ - switch (event->type()) { - case QEvent::Resize: - case QEvent::ZOrderChange: - emit widgetResized(); - break; - default: - break; - } - return QObject::eventFilter(obj, event); -} +const char lastActiveToolC[] = "Analyzer.Plugin.LastActiveTool"; +const char G_ANALYZER_TOOLS[] = "Menu.Group.Analyzer.Tools"; +const char G_ANALYZER_REMOTE_TOOLS[] = "Menu.Group.Analyzer.RemoteTools"; +const char INITIAL_DOCK_AREA[] = "initial_dock_area"; // AnalyzerMode //////////////////////////////////////////////////// @@ -163,15 +141,19 @@ public: } }; -const char * const INITIAL_DOCK_AREA = "initial_dock_area"; - - } // namespace Internal } // namespace Analyzer -// AnalyzerManagerPrivate //////////////////////////////////////////////////// -class AnalyzerManager::AnalyzerManagerPrivate +//////////////////////////////////////////////////////////////////// +// +// AnalyzerManagerPrivate +// +//////////////////////////////////////////////////////////////////// + +class AnalyzerManager::AnalyzerManagerPrivate : public QObject { + Q_OBJECT + public: typedef QHash FancyMainWindowSettings; @@ -179,7 +161,7 @@ public: ~AnalyzerManagerPrivate(); /** - * After calling this, a proper instance of Core::IMore is initialized + * After calling this, a proper instance of Core::IMode is initialized * It is delayed since an analyzer mode makes no sense without analyzer tools * * \note Call this before adding a tool to the manager @@ -189,24 +171,50 @@ public: void setupActions(); QWidget *createModeContents(); QWidget *createModeMainWindow(); - bool showPromptDialog(const QString &title, - const QString &text, - const QString &stopButtonText, - const QString &cancelButtonText) const; + bool showPromptDialog(const QString &title, const QString &text, + const QString &stopButtonText, const QString &cancelButtonText) const; void addDock(Qt::DockWidgetArea area, QDockWidget *dockWidget); - void startTool(); + void startAction(int tool); + void addTool(IAnalyzerTool *tool); + void addToolAction(IAnalyzerTool *tool, bool local); + int indexOf(IAnalyzerTool *tool) const; + int indexOf(QAction *action) const; + IAnalyzerTool *toolAt(int idx) const; + +public slots: + void startAction() { startAction(m_currentIndex); } + void startToolRemote(); + void stopTool(); + + void handleToolFinished(); + void selectAction(); + void selectAction(int); + void selectAction(QAction *); + void modeChanged(Core::IMode *mode); + void runControlCreated(Analyzer::AnalyzerRunControl *); + void resetLayout(); + void saveToolSettings(Analyzer::IAnalyzerTool *tool); + void loadToolSettings(Analyzer::IAnalyzerTool *tool); + void updateRunActions(); + void registerRunControlFactory(ProjectExplorer::IRunControlFactory *factory); + +public: + struct ToolData { + IAnalyzerTool *tool; + QAction *action; + bool local; + }; AnalyzerManager *q; AnalyzerMode *m_mode; AnalyzerRunControlFactory *m_runControlFactory; ProjectExplorer::RunControl *m_currentRunControl; Utils::FancyMainWindow *m_mainWindow; - IAnalyzerTool *m_currentTool; + int m_currentIndex; + QList m_actions; QList m_tools; - QActionGroup *m_toolGroup; QAction *m_startAction; - QAction *m_startRemoteAction; QAction *m_stopAction; ActionContainer *m_menu; QComboBox *m_toolBox; @@ -215,8 +223,6 @@ public: Utils::StatusLabel *m_statusLabel; typedef QMap MainWindowSettingsMap; QMap > m_toolWidgets; - DockWidgetEventFilter *m_resizeEventFilter; - MainWindowSettingsMap m_defaultSettings; // list of dock widgets to prevent memory leak @@ -233,29 +239,30 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager m_runControlFactory(0), m_currentRunControl(0), m_mainWindow(0), - m_currentTool(0), - m_toolGroup(0), + m_currentIndex(-1), m_startAction(0), - m_startRemoteAction(0), m_stopAction(0), m_menu(0), m_toolBox(new QComboBox), m_controlsWidget(new QStackedWidget), m_viewsMenu(0), m_statusLabel(new Utils::StatusLabel), - m_resizeEventFilter(new DockWidgetEventFilter(qq)), m_restartOnStop(false), m_initialized(false) { m_toolBox->setObjectName(QLatin1String("AnalyzerManagerToolBox")); + connect(m_toolBox, SIGNAL(currentIndexChanged(int)), SLOT(selectAction(int))); + m_runControlFactory = new AnalyzerRunControlFactory(); - - q->registerRunControlFactory(m_runControlFactory); - - connect(m_toolBox, SIGNAL(currentIndexChanged(int)), - q, SLOT(toolSelected(int))); + registerRunControlFactory(m_runControlFactory); setupActions(); + + connect(ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)), + this, SLOT(modeChanged(Core::IMode*))); + ProjectExplorer::ProjectExplorerPlugin *pe = + ProjectExplorer::ProjectExplorerPlugin::instance(); + connect(pe, SIGNAL(updateRunActions()), SLOT(updateRunActions())); } AnalyzerManager::AnalyzerManagerPrivate::~AnalyzerManagerPrivate() @@ -268,11 +275,12 @@ AnalyzerManager::AnalyzerManagerPrivate::~AnalyzerManagerPrivate() } } -void AnalyzerManager::registerRunControlFactory(ProjectExplorer::IRunControlFactory *factory) +void AnalyzerManager::AnalyzerManagerPrivate::registerRunControlFactory + (ProjectExplorer::IRunControlFactory *factory) { AnalyzerPlugin::instance()->addAutoReleasedObject(factory); - connect(factory, SIGNAL(runControlCreated(Analyzer::AnalyzerRunControl *)), - this, SLOT(runControlCreated(Analyzer::AnalyzerRunControl *))); + connect(factory, SIGNAL(runControlCreated(Analyzer::AnalyzerRunControl*)), + this, SLOT(runControlCreated(Analyzer::AnalyzerRunControl*))); } void AnalyzerManager::AnalyzerManagerPrivate::setupActions() @@ -282,14 +290,13 @@ void AnalyzerManager::AnalyzerManagerPrivate::setupActions() const Core::Context globalcontext(Core::Constants::C_GLOBAL); Core::Command *command = 0; - m_menu = am->createMenu(Constants::M_DEBUG_ANALYZER); - // Menus + m_menu = am->createMenu(Constants::M_DEBUG_ANALYZER); m_menu->menu()->setTitle(tr("&Analyze")); m_menu->menu()->setEnabled(true); - m_menu->appendGroup(Constants::G_ANALYZER_STARTSTOP); - m_menu->appendGroup(Constants::G_ANALYZER_TOOLS); + m_menu->appendGroup(G_ANALYZER_TOOLS); + m_menu->appendGroup(G_ANALYZER_REMOTE_TOOLS); Core::ActionContainer *menubar = am->actionContainer(Core::Constants::MENU_BAR); @@ -297,37 +304,22 @@ void AnalyzerManager::AnalyzerManagerPrivate::setupActions() am->actionContainer(Core::Constants::M_TOOLS); menubar->addMenu(mtools, m_menu); - m_toolGroup = new QActionGroup(m_menu); - connect(m_toolGroup, SIGNAL(triggered(QAction*)), - q, SLOT(toolSelected(QAction*))); - m_startAction = new QAction(tr("Start"), m_menu); m_startAction->setIcon(QIcon(Constants::ANALYZER_CONTROL_START_ICON)); command = am->registerAction(m_startAction, Constants::START, globalcontext); - m_menu->addAction(command, Constants::G_ANALYZER_STARTSTOP); - connect(m_startAction, SIGNAL(triggered()), q, SLOT(startTool())); - - m_startRemoteAction = new QAction(tr("Start Remote"), m_menu); - m_startRemoteAction->setIcon(QIcon(Constants::ANALYZER_CONTROL_START_ICON)); - ///FIXME: get an icon for this -// m_startRemoteAction->setIcon(QIcon(QLatin1String(":/images/analyzer_start_remote_small.png"))); - command = am->registerAction(m_startRemoteAction, - Constants::STARTREMOTE, globalcontext); - m_menu->addAction(command, Constants::G_ANALYZER_STARTSTOP); - connect(m_startRemoteAction, SIGNAL(triggered()), q, SLOT(startToolRemote())); + connect(m_startAction, SIGNAL(triggered()), this, SLOT(startAction())); m_stopAction = new QAction(tr("Stop"), m_menu); m_stopAction->setEnabled(false); m_stopAction->setIcon(QIcon(Constants::ANALYZER_CONTROL_STOP_ICON)); command = am->registerAction(m_stopAction, Constants::STOP, globalcontext); - m_menu->addAction(command, Constants::G_ANALYZER_STARTSTOP); - connect(m_stopAction, SIGNAL(triggered()), q, SLOT(stopTool())); - + connect(m_stopAction, SIGNAL(triggered()), this, SLOT(stopTool())); QAction *separatorAction = new QAction(m_menu); separatorAction->setSeparator(true); - command = am->registerAction(separatorAction, Constants::ANALYZER_TOOLS_SEPARATOR, globalcontext); - m_menu->addAction(command, Constants::G_ANALYZER_TOOLS); + command = am->registerAction(separatorAction, + "Menu.Action.Analyzer.Tools.Separator", globalcontext); + m_menu->addAction(command, G_ANALYZER_REMOTE_TOOLS); m_viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS)); } @@ -374,12 +366,11 @@ QWidget *AnalyzerManager::AnalyzerManagerPrivate::createModeMainWindow() { m_mainWindow = new Utils::FancyMainWindow(); m_mainWindow->setObjectName(QLatin1String("AnalyzerManagerMainWindow")); - connect(m_mainWindow, SIGNAL(resetLayout()), - q, SLOT(resetLayout())); m_mainWindow->setDocumentMode(true); m_mainWindow->setDockNestingEnabled(true); m_mainWindow->setDockActionsVisible(ModeManager::instance()->currentMode()->id() == Constants::MODE_ANALYZE); + connect(m_mainWindow, SIGNAL(resetLayout()), SLOT(resetLayout())); QBoxLayout *editorHolderLayout = new QVBoxLayout; editorHolderLayout->setMargin(0); @@ -402,7 +393,6 @@ QWidget *AnalyzerManager::AnalyzerManagerPrivate::createModeMainWindow() analyzeToolBarLayout->setMargin(0); analyzeToolBarLayout->setSpacing(0); analyzeToolBarLayout->addWidget(toolButton(m_startAction)); - analyzeToolBarLayout->addWidget(toolButton(m_startRemoteAction)); analyzeToolBarLayout->addWidget(toolButton(m_stopAction)); analyzeToolBarLayout->addWidget(new Utils::StyledSeparator); analyzeToolBarLayout->addWidget(m_toolBox); @@ -487,9 +477,37 @@ bool AnalyzerManager::AnalyzerManagerPrivate::showPromptDialog(const QString &ti return messageBox.clickedStandardButton() == QDialogButtonBox::Yes; } -void AnalyzerManager::AnalyzerManagerPrivate::startTool() +void AnalyzerManager::AnalyzerManagerPrivate::startToolRemote() { - QTC_ASSERT(q->currentTool(), return); + StartRemoteDialog dlg; + if (dlg.exec() != QDialog::Accepted) + return; + + AnalyzerStartParameters sp; + sp.connParams = dlg.sshParams(); + sp.debuggee = dlg.executable(); + sp.debuggeeArgs = dlg.arguments(); + sp.displayName = dlg.executable(); + sp.startMode = StartRemote; + sp.workingDirectory = dlg.workingDirectory(); + + AnalyzerRunControl *runControl = m_runControlFactory->create(sp, 0); + + QTC_ASSERT(runControl, return); + ProjectExplorer::ProjectExplorerPlugin::instance() + ->startRunControl(runControl, Constants::MODE_ANALYZE); +} + +void AnalyzerManager::AnalyzerManagerPrivate::startAction(int index) +{ + QTC_ASSERT(index >= 0, return); + QTC_ASSERT(index < m_actions.size(), return); + QTC_ASSERT(index == m_currentIndex, return); + + if (!m_actions.at(index).local) { + startToolRemote(); + return; + } // make sure mode is shown q->showMode(); @@ -511,11 +529,13 @@ void AnalyzerManager::AnalyzerManagerPrivate::startTool() if (!runConfig || !runConfig->isEnabled()) return; - // check if there already is an analyzer run + // Check if there already is an analyzer run. if (m_currentRunControl) { // ask if user wants to restart the analyzer - const QString msg = tr("
%1 is still running. You have to quit the Analyzer before being able to run another instance.
" - "
Force it to quit?
").arg(m_currentRunControl->displayName()); + const QString msg = tr("
%1 is still running. " + "You have to quit the Analyzer before being able to run another instance." + "
Force it to quit?
") + .arg(m_currentRunControl->displayName()); bool stopRequested = showPromptDialog(tr("Analyzer Still Running"), msg, tr("Stop Active Run"), tr("Keep Running")); if (!stopRequested) @@ -523,18 +543,18 @@ void AnalyzerManager::AnalyzerManagerPrivate::startTool() // user selected to stop the active run. stop it, activate restart on stop m_restartOnStop = true; - q->stopTool(); + stopTool(); return; } - IAnalyzerTool::ToolMode toolMode = q->currentTool()->mode(); + IAnalyzerTool *tool = toolAt(index); + IAnalyzerTool::ToolMode toolMode = tool->mode(); - // check the project for whether the build config is in the correct mode - // if not, notify the user and urge him to use the correct mode - if (!buildTypeAccepted(toolMode, buildType)) - { - const QString &toolName = q->currentTool()->displayName(); - const QString &toolMode = IAnalyzerTool::modeString(q->currentTool()->mode()); + // Check the project for whether the build config is in the correct mode + // if not, notify the user and urge him to use the correct mode. + if (!buildTypeAccepted(toolMode, buildType)) { + const QString &toolName = tool->displayName(); + const QString &toolMode = IAnalyzerTool::modeString(tool->mode()); const QString currentMode = buildType == ProjectExplorer::BuildConfiguration::Debug ? tr("Debug") : tr("Release"); QSettings *settings = Core::ICore::instance()->settings(); @@ -565,84 +585,48 @@ void AnalyzerManager::AnalyzerManagerPrivate::startTool() pe->runProject(pro, Constants::MODE_ANALYZE); - q->updateRunActions(); + updateRunActions(); } -// AnalyzerManager //////////////////////////////////////////////////// -AnalyzerManager *AnalyzerManager::m_instance = 0; -AnalyzerManager::AnalyzerManager(QObject *parent) - : QObject(parent), - d(new AnalyzerManagerPrivate(this)) +void AnalyzerManager::AnalyzerManagerPrivate::stopTool() { - m_instance = this; + if (m_currentRunControl) + return; - connect(ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)), - this, SLOT(modeChanged(Core::IMode*))); - ProjectExplorer::ProjectExplorerPlugin *pe = - ProjectExplorer::ProjectExplorerPlugin::instance(); - connect(pe, SIGNAL(updateRunActions()), - this, SLOT(updateRunActions())); + // be sure to call handleToolFinished only once, and only when the engine is really finished + if (m_currentRunControl->stop() == ProjectExplorer::RunControl::StoppedSynchronously) + handleToolFinished(); + // else: wait for the finished() signal to trigger handleToolFinished() } -AnalyzerManager::~AnalyzerManager() +void AnalyzerManager::AnalyzerManagerPrivate::modeChanged(IMode *mode) { - delete d; -} - -bool AnalyzerManager::isInitialized() const -{ - return d->m_initialized; -} - -void AnalyzerManager::shutdown() -{ - saveToolSettings(currentTool()); -} - -AnalyzerManager * AnalyzerManager::instance() -{ - return m_instance; -} - -void AnalyzerManager::modeChanged(IMode *mode) -{ - if (!d->m_mainWindow) + if (!m_mainWindow) return; const bool makeVisible = mode->id() == Constants::MODE_ANALYZE; if (!makeVisible) return; - - d->m_mainWindow->setDockActionsVisible(makeVisible); + m_mainWindow->setDockActionsVisible(makeVisible); } -void AnalyzerManager::selectTool(IAnalyzerTool *tool) +void AnalyzerManager::AnalyzerManagerPrivate::selectAction(int idx) { - QTC_ASSERT(d->m_tools.contains(tool), return); - toolSelected(d->m_tools.indexOf(tool)); -} - -void AnalyzerManager::toolSelected(int idx) -{ - static bool selectingTool = false; - - IAnalyzerTool *oldTool = currentTool(); - IAnalyzerTool *newTool = d->m_tools.at(idx); - - if (selectingTool || oldTool == newTool) + QTC_ASSERT(idx >= 0, return); + if (m_currentIndex == idx) return; - selectingTool = true; - if (oldTool != 0) { + if (m_currentIndex != -1) { + IAnalyzerTool *oldTool = toolAt(m_currentIndex); saveToolSettings(oldTool); ActionManager *am = ICore::instance()->actionManager(); - foreach (QDockWidget *widget, d->m_toolWidgets.value(oldTool)) { + foreach (QDockWidget *widget, m_toolWidgets.value(oldTool)) { QAction *toggleViewAction = widget->toggleViewAction(); am->unregisterAction(toggleViewAction, QString("Analyzer." + widget->objectName())); - d->m_mainWindow->removeDockWidget(widget); + m_mainWindow->removeDockWidget(widget); ///NOTE: QMainWindow (and FancyMainWindow) just look at /// @c findChildren() ///if we don't do this, all kind of havoc might happen, including: @@ -651,68 +635,225 @@ void AnalyzerManager::toolSelected(int idx) ///- ... widget->setParent(0); } + oldTool->toolDeselected(); } - d->m_currentTool = newTool; + m_currentIndex = idx; - d->m_toolGroup->actions().at(idx)->setChecked(true); - d->m_toolBox->setCurrentIndex(idx); - d->m_controlsWidget->setCurrentIndex(idx); + m_toolBox->setCurrentIndex(idx); + m_controlsWidget->setCurrentIndex(idx); - const bool firstTime = !d->m_defaultSettings.contains(newTool); + IAnalyzerTool *newTool = toolAt(idx); + + const bool firstTime = !m_defaultSettings.contains(newTool); if (firstTime) { newTool->initializeDockWidgets(); - d->m_defaultSettings.insert(newTool, d->m_mainWindow->saveSettings()); + m_defaultSettings.insert(newTool, m_mainWindow->saveSettings()); } else { - foreach (QDockWidget *widget, d->m_toolWidgets.value(newTool)) - d->addDock(Qt::DockWidgetArea(widget->property(INITIAL_DOCK_AREA).toInt()), widget); + foreach (QDockWidget *widget, m_toolWidgets.value(newTool)) + addDock(Qt::DockWidgetArea(widget->property(INITIAL_DOCK_AREA).toInt()), widget); } loadToolSettings(newTool); updateRunActions(); - - selectingTool = false; - - emit currentToolChanged(newTool); } -void AnalyzerManager::toolSelected(QAction *action) +void AnalyzerManager::AnalyzerManagerPrivate::selectAction() { - toolSelected(d->m_toolGroup->actions().indexOf(action)); + selectAction(qobject_cast(sender())); +} + +void AnalyzerManager::AnalyzerManagerPrivate::selectAction(QAction *action) +{ + selectAction(indexOf(action)); +} + +int AnalyzerManager::AnalyzerManagerPrivate::indexOf(QAction *action) const +{ + for (int i = 0; i != m_actions.size(); ++i) + if (m_actions.at(i).action == action) + return i; + return -1; +} + +int AnalyzerManager::AnalyzerManagerPrivate::indexOf(IAnalyzerTool *tool) const +{ + for (int i = 0; i != m_actions.size(); ++i) + if (toolAt(i) == tool) + return i; + return -1; +} + +IAnalyzerTool *AnalyzerManager::AnalyzerManagerPrivate::toolAt(int idx) const +{ + QTC_ASSERT(idx >= 0, return 0); + QTC_ASSERT(idx < m_actions.size(), return 0); + return m_actions.at(idx).tool; +} + +void AnalyzerManager::AnalyzerManagerPrivate::addToolAction(IAnalyzerTool *tool, bool local) +{ + ActionManager *am = Core::ICore::instance()->actionManager(); + + QString actionId = QString("Action.Analyzer.Tools.%1").arg(m_actions.size()); + QString displayName = tool->displayName() + (local ? QString() : tr(" (Remote)")); + QAction *action = new QAction(displayName, 0); + + ToolData data; + data.tool = tool; + data.local = local; + data.action = action; + m_actions.append(data); + + Core::Command *command = am->registerAction(action, actionId, + Core::Context(Core::Constants::C_GLOBAL)); + m_menu->addAction(command, local ? G_ANALYZER_TOOLS : G_ANALYZER_REMOTE_TOOLS); + connect(action, SIGNAL(triggered()), SLOT(selectAction())); + + const bool blocked = m_toolBox->blockSignals(true); // Do not make current. + m_toolBox->addItem(displayName); + m_toolBox->blockSignals(blocked); + m_toolBox->setEnabled(true); +} + +void AnalyzerManager::AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool) +{ + delayedInit(); // be sure that there is a valid IMode instance + m_tools.append(tool); + if (tool->canRunLocally()) + addToolAction(tool, true); + if (tool->canRunRemotely()) + addToolAction(tool, false); + // Populate controls widget. + QWidget *controlWidget = tool->createControlWidget(); // might be 0 + m_controlsWidget->addWidget(controlWidget + ? controlWidget : AnalyzerUtils::createDummyWidget()); + tool->initialize(); +} + +void AnalyzerManager::AnalyzerManagerPrivate::runControlCreated(AnalyzerRunControl *rc) +{ + QTC_ASSERT(!m_currentRunControl, /**/); + m_currentRunControl = rc; + connect(rc, SIGNAL(finished()), this, SLOT(handleToolFinished())); +} + +void AnalyzerManager::AnalyzerManagerPrivate::handleToolFinished() +{ + m_currentRunControl = 0; + updateRunActions(); + + if (m_restartOnStop) { + startAction(m_currentIndex); + m_restartOnStop = false; + } +} + +void AnalyzerManager::AnalyzerManagerPrivate::loadToolSettings(IAnalyzerTool *tool) +{ + QTC_ASSERT(m_mainWindow, return); + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup(QLatin1String("AnalyzerViewSettings_") + tool->id()); + if (settings->value("ToolSettingsSaved", false).toBool()) + m_mainWindow->restoreSettings(settings); + settings->endGroup(); +} + +void AnalyzerManager::AnalyzerManagerPrivate::saveToolSettings(IAnalyzerTool *tool) +{ + if (!tool) + return; // no active tool, do nothing + QTC_ASSERT(m_mainWindow, return); + + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup(QLatin1String("AnalyzerViewSettings_") + tool->id()); + m_mainWindow->saveSettings(settings); + settings->setValue("ToolSettingsSaved", true); + settings->endGroup(); + settings->setValue(QLatin1String(lastActiveToolC), tool->id()); +} + +void AnalyzerManager::AnalyzerManagerPrivate::updateRunActions() +{ + ProjectExplorer::ProjectExplorerPlugin *pe = + ProjectExplorer::ProjectExplorerPlugin::instance(); + ProjectExplorer::Project *project = pe->startupProject(); + + bool startEnabled = !m_currentRunControl + && pe->canRun(project, Constants::MODE_ANALYZE) + && m_currentIndex >= 0; + + QString disabledReason; + if (m_currentRunControl) + disabledReason = tr("An analysis is still in progress."); + else if (m_currentIndex == -1) + disabledReason = tr("No analyzer tool selected."); + else + disabledReason = pe->cannotRunReason(project, Constants::MODE_ANALYZE); + + m_startAction->setEnabled(startEnabled); + m_startAction->setToolTip(disabledReason); + m_toolBox->setEnabled(!m_currentRunControl); + m_stopAction->setEnabled(m_currentRunControl); +} + +//////////////////////////////////////////////////////////////////// +// +// AnalyzerManager +// +//////////////////////////////////////////////////////////////////// + +static AnalyzerManager *m_instance = 0; + +AnalyzerManager::AnalyzerManager(QObject *parent) + : QObject(parent), + d(new AnalyzerManagerPrivate(this)) +{ + m_instance = this; +} + +AnalyzerManager::~AnalyzerManager() +{ + delete d; +} + +void AnalyzerManager::extensionsInitialized() +{ + if (d->m_tools.isEmpty()) + return; + + const QSettings *settings = Core::ICore::instance()->settings(); + const QString lastActiveToolId = + settings->value(QLatin1String(lastActiveToolC), QString()).toString(); + int lastAction = 0; + + foreach (IAnalyzerTool *tool, d->m_tools) { + tool->extensionsInitialized(); + if (tool->id() == lastActiveToolId) + lastAction = d->indexOf(tool); + } + + d->selectAction(lastAction); +} + +void AnalyzerManager::shutdown() +{ + d->saveToolSettings(d->m_actions[d->m_currentIndex].tool); +} + +AnalyzerManager *AnalyzerManager::instance() +{ + return m_instance; +} + +void AnalyzerManager::registerRunControlFactory(ProjectExplorer::IRunControlFactory *factory) +{ + d->registerRunControlFactory(factory); } void AnalyzerManager::addTool(IAnalyzerTool *tool) { - d->delayedInit(); // be sure that there is a valid IMode instance - - QAction *action = new QAction(tool->displayName(), d->m_toolGroup); - action->setData(d->m_tools.count()); - action->setCheckable(true); - action->setChecked(false); - - ActionManager *am = Core::ICore::instance()->actionManager(); - - QString actionId = QString(Constants::ANALYZER_TOOLS) - + QString::number(d->m_toolGroup->actions().count()); - Core::Command *command = am->registerAction(action, actionId, - Core::Context(Core::Constants::C_GLOBAL)); - d->m_menu->addAction(command, Constants::G_ANALYZER_TOOLS); - - d->m_toolGroup->setVisible(d->m_toolGroup->actions().count() > 1); - d->m_tools.append(tool); - - const bool blocked = d->m_toolBox->blockSignals(true); // Do not make current. - d->m_toolBox->addItem(tool->displayName()); - d->m_toolBox->blockSignals(blocked); - - // Populate controls widget. - QWidget *controlWidget = tool->createControlWidget(); // might be 0 - d->m_controlsWidget->addWidget(controlWidget - ? controlWidget : AnalyzerUtils::createDummyWidget()); - - d->m_toolBox->setEnabled(d->m_toolBox->count() > 1); - - tool->initialize(); + d->addTool(tool); } QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QString &title, @@ -722,76 +863,29 @@ QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QStrin QDockWidget *dockWidget = d->m_mainWindow->addDockForWidget(widget); dockWidget->setProperty(INITIAL_DOCK_AREA, int(area)); - d->m_dockWidgets << AnalyzerManagerPrivate::DockPtr(dockWidget); + d->m_dockWidgets.append(AnalyzerManagerPrivate::DockPtr(dockWidget)); dockWidget->setWindowTitle(title); - d->m_toolWidgets[tool].push_back(dockWidget); d->addDock(area, dockWidget); - dockWidget->installEventFilter(d->m_resizeEventFilter); return dockWidget; } -IAnalyzerTool *AnalyzerManager::currentTool() const +IAnalyzerEngine *AnalyzerManager::createEngine(const AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration) { - return d->m_currentTool; + IAnalyzerTool *tool = d->toolAt(d->m_currentIndex); + QTC_ASSERT(tool, return 0); + return tool->createEngine(sp, runConfiguration); } -QList AnalyzerManager::tools() const +void AnalyzerManager::selectTool(IAnalyzerTool *tool) { - return d->m_tools; + d->selectAction(d->indexOf(tool)); } -void AnalyzerManager::startTool() +void AnalyzerManager::startTool(IAnalyzerTool *tool) { - d->startTool(); -} - -void AnalyzerManager::startToolRemote() -{ - StartRemoteDialog dlg; - if (dlg.exec() != QDialog::Accepted) - return; - - AnalyzerStartParameters params; - params.connParams = dlg.sshParams(); - params.debuggee = dlg.executable(); - params.debuggeeArgs = dlg.arguments(); - params.displayName = dlg.executable(); - params.startMode = StartRemote; - params.workingDirectory = dlg.workingDirectory(); - - AnalyzerRunControl *rc = createAnalyzer(params); - QTC_ASSERT(rc, return); - ProjectExplorer::ProjectExplorerPlugin::instance()->startRunControl(rc, Constants::MODE_ANALYZE); -} - -void AnalyzerManager::runControlCreated(AnalyzerRunControl *rc) -{ - QTC_ASSERT(!d->m_currentRunControl, qt_noop()); - d->m_currentRunControl = rc; - connect(rc, SIGNAL(finished()), this, SLOT(handleToolFinished())); -} - -void AnalyzerManager::stopTool() -{ - if (!d->m_currentRunControl) - return; - - // be sure to call handleToolFinished only once, and only when the engine is really finished - if (d->m_currentRunControl->stop() == ProjectExplorer::RunControl::StoppedSynchronously) - handleToolFinished(); - // else: wait for the finished() signal to trigger handleToolFinished() -} - -void AnalyzerManager::handleToolFinished() -{ - d->m_currentRunControl = 0; - updateRunActions(); - - if (d->m_restartOnStop) { - startTool(); - d->m_restartOnStop = false; - } + d->startAction(d->indexOf(tool)); } Utils::FancyMainWindow *AnalyzerManager::mainWindow() const @@ -799,64 +893,9 @@ Utils::FancyMainWindow *AnalyzerManager::mainWindow() const return d->m_mainWindow; } -void AnalyzerManager::resetLayout() +void AnalyzerManager::AnalyzerManagerPrivate::resetLayout() { - d->m_mainWindow->restoreSettings(d->m_defaultSettings.value(currentTool())); -} - -void AnalyzerManager::loadToolSettings(IAnalyzerTool *tool) -{ - QTC_ASSERT(d->m_mainWindow, return; ) - QSettings *settings = Core::ICore::instance()->settings(); - settings->beginGroup(QLatin1String("AnalyzerViewSettings_") + tool->id()); - if (settings->value("ToolSettingsSaved", false).toBool()) { - d->m_mainWindow->restoreSettings(settings); - } - settings->endGroup(); -} - -void AnalyzerManager::saveToolSettings(IAnalyzerTool *tool) -{ - if (!tool) - return; // no active tool, do nothing - QTC_ASSERT(d->m_mainWindow, return ; ) - - QSettings *settings = Core::ICore::instance()->settings(); - settings->beginGroup(QLatin1String("AnalyzerViewSettings_") + tool->id()); - d->m_mainWindow->saveSettings(settings); - settings->setValue("ToolSettingsSaved", true); - settings->endGroup(); -} - -void AnalyzerManager::updateRunActions() -{ - ProjectExplorer::ProjectExplorerPlugin *pe = - ProjectExplorer::ProjectExplorerPlugin::instance(); - ProjectExplorer::Project *project = pe->startupProject(); - - bool startEnabled = !d->m_currentRunControl - && pe->canRun(project, Constants::MODE_ANALYZE) - && currentTool(); - - QString disabledReason; - if (d->m_currentRunControl) - disabledReason = tr("An analysis is still in progress."); - else if (!currentTool()) - disabledReason = tr("No analyzer tool selected."); - else - disabledReason = pe->cannotRunReason(project, Constants::MODE_ANALYZE); - - d->m_startAction->setEnabled(startEnabled); - d->m_startAction->setToolTip(disabledReason); - if (currentTool() && !currentTool()->canRunRemotely()) - disabledReason = tr("Current analyzer tool cannot be run remotely."); - d->m_startRemoteAction->setEnabled(!d->m_currentRunControl && currentTool() - && currentTool()->canRunRemotely()); - d->m_startRemoteAction->setToolTip(disabledReason); - d->m_toolBox->setEnabled(!d->m_currentRunControl); - d->m_toolGroup->setEnabled(!d->m_currentRunControl); - - d->m_stopAction->setEnabled(d->m_currentRunControl); + m_mainWindow->restoreSettings(m_defaultSettings.value(toolAt(m_currentIndex))); } void AnalyzerManager::showStatusMessage(const QString &message, int timeoutMS) @@ -881,16 +920,15 @@ QString AnalyzerManager::msgToolFinished(const QString &name, int issuesFound) tr("Tool \"%1\" finished, no issues were found.").arg(name); } -AnalyzerRunControl *AnalyzerManager::createAnalyzer(const AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *rc) -{ - return d->m_runControlFactory->create(sp, rc); -} - void AnalyzerManager::showMode() { if (d->m_mode) ModeManager::instance()->activateMode(d->m_mode->id()); } +void AnalyzerManager::stopTool() +{ + d->stopTool(); +} + #include "analyzermanager.moc" diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h index 774193b688a..a46ce59cb10 100644 --- a/src/plugins/analyzerbase/analyzermanager.h +++ b/src/plugins/analyzerbase/analyzermanager.h @@ -41,14 +41,9 @@ #include QT_BEGIN_NAMESPACE -class QAction; class QDockWidget; QT_END_NAMESPACE -namespace Core { -class IMode; -} - namespace Utils { class FancyMainWindow; } @@ -59,7 +54,7 @@ class RunConfiguration; namespace Analyzer { class IAnalyzerTool; -class AnalyzerRunControl; +class IAnalyzerEngine; class AnalyzerStartParameters; class ANALYZER_EXPORT AnalyzerManager : public QObject @@ -73,15 +68,13 @@ public: static AnalyzerManager *instance(); void registerRunControlFactory(ProjectExplorer::IRunControlFactory *factory); - bool isInitialized() const; + void extensionsInitialized(); void shutdown(); /** * Register a tool and initialize it. */ void addTool(Analyzer::IAnalyzerTool *tool); - IAnalyzerTool *currentTool() const; - QList tools() const; // Dockwidgets are registered to the main window. QDockWidget *createDockWidget(IAnalyzerTool *tool, const QString &title, @@ -89,44 +82,25 @@ public: Utils::FancyMainWindow *mainWindow() const; + void showMode(); void selectTool(IAnalyzerTool *tool); + void startTool(IAnalyzerTool *tool); + void stopTool(); static QString msgToolStarted(const QString &name); static QString msgToolFinished(const QString &name, int issuesFound); - // Used by Maemo analyzer support. - AnalyzerRunControl *createAnalyzer(const AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *rc = 0); - void showMode(); + IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration); public slots: - void startTool(); - void startToolRemote(); - void stopTool(); - void showStatusMessage(const QString &message, int timeoutMS = 10000); void showPermanentStatusMessage(const QString &message); -private slots: - void handleToolFinished(); - void toolSelected(int); - void toolSelected(QAction *); - void modeChanged(Core::IMode *mode); - void runControlCreated(Analyzer::AnalyzerRunControl *); - void resetLayout(); - void saveToolSettings(Analyzer::IAnalyzerTool *tool); - void loadToolSettings(Analyzer::IAnalyzerTool *tool); - void updateRunActions(); - -signals: - void currentToolChanged(Analyzer::IAnalyzerTool *tool); - private: class AnalyzerManagerPrivate; friend class AnalyzerManagerPrivate; AnalyzerManagerPrivate *const d; - - static AnalyzerManager *m_instance; }; } // namespace Analyzer diff --git a/src/plugins/analyzerbase/analyzerplugin.cpp b/src/plugins/analyzerbase/analyzerplugin.cpp index fb520ee4d32..e914130f0dd 100644 --- a/src/plugins/analyzerbase/analyzerplugin.cpp +++ b/src/plugins/analyzerbase/analyzerplugin.cpp @@ -54,9 +54,7 @@ using namespace Analyzer; using namespace Analyzer::Internal; -static const char lastActiveToolC[] = "Analyzer.Plugin.LastActiveTool"; - -AnalyzerPlugin *AnalyzerPlugin::m_instance = 0; +static AnalyzerPlugin *m_instance = 0; //////////////////////////////////////////////////////////////////////// @@ -113,34 +111,11 @@ bool AnalyzerPlugin::initialize(const QStringList &arguments, QString *errorStri void AnalyzerPlugin::extensionsInitialized() { - const QList tools = d->m_manager->tools(); - if (tools.isEmpty()) - return; - - const QSettings *settings = Core::ICore::instance()->settings(); - const QString lastActiveToolId = - settings->value(QLatin1String(lastActiveToolC), QString()).toString(); - IAnalyzerTool *lastActiveTool = 0; - - foreach (IAnalyzerTool *tool, tools) { - tool->extensionsInitialized(); - if (tool->id() == lastActiveToolId) - lastActiveTool = tool; - } - - if (!lastActiveTool) - lastActiveTool = tools.back(); - if (lastActiveTool) - d->m_manager->selectTool(lastActiveTool); + d->m_manager->extensionsInitialized(); } ExtensionSystem::IPlugin::ShutdownFlag AnalyzerPlugin::aboutToShutdown() { - if (const IAnalyzerTool *tool = d->m_manager->currentTool()) { - QSettings *settings = Core::ICore::instance()->settings(); - settings->setValue(QLatin1String(lastActiveToolC), tool->id()); - } - d->m_manager->shutdown(); return SynchronousShutdown; } diff --git a/src/plugins/analyzerbase/analyzerplugin.h b/src/plugins/analyzerbase/analyzerplugin.h index 8863d25f459..dc187de6862 100644 --- a/src/plugins/analyzerbase/analyzerplugin.h +++ b/src/plugins/analyzerbase/analyzerplugin.h @@ -38,7 +38,6 @@ #include namespace Analyzer { - namespace Internal { class AnalyzerPlugin : public ExtensionSystem::IPlugin @@ -59,8 +58,6 @@ public: private: class AnalyzerPluginPrivate; AnalyzerPluginPrivate *d; - - static AnalyzerPlugin *m_instance; }; } // namespace Internal diff --git a/src/plugins/analyzerbase/analyzerruncontrol.cpp b/src/plugins/analyzerbase/analyzerruncontrol.cpp index ad1fb6bb0b1..920c62ef107 100644 --- a/src/plugins/analyzerbase/analyzerruncontrol.cpp +++ b/src/plugins/analyzerbase/analyzerruncontrol.cpp @@ -62,7 +62,7 @@ public: }; AnalyzerRunControl::Private::Private() - : m_isRunning(false) , m_engine(0) + : m_isRunning(false), m_engine(0) {} @@ -72,8 +72,7 @@ AnalyzerRunControl::AnalyzerRunControl(const AnalyzerStartParameters &sp, : RunControl(runConfiguration, Constants::MODE_ANALYZE), d(new Private) { - IAnalyzerTool *tool = AnalyzerManager::instance()->currentTool(); - d->m_engine = tool->createEngine(sp, runConfiguration); + d->m_engine = AnalyzerManager::instance()->createEngine(sp, runConfiguration); if (!d->m_engine) return; diff --git a/src/plugins/analyzerbase/ianalyzerengine.h b/src/plugins/analyzerbase/ianalyzerengine.h index 59c4257abda..d8a9bd88957 100644 --- a/src/plugins/analyzerbase/ianalyzerengine.h +++ b/src/plugins/analyzerbase/ianalyzerengine.h @@ -62,7 +62,7 @@ class ANALYZER_EXPORT IAnalyzerEngine : public QObject public: explicit IAnalyzerEngine(const AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration = 0); + ProjectExplorer::RunConfiguration *runConfiguration = 0); /// start analyzation process virtual void start() = 0; diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index f9c45662de6..0e77b82199f 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -112,8 +112,17 @@ public: virtual IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0; + /// Returns true when this tool can be run on the loca machine. + virtual bool canRunLocally() const = 0; + /// Returns true when this tool can be run on a remote machine. virtual bool canRunRemotely() const = 0; + + /// Called when tools gets selected. + virtual void toolSelected() const {} + + /// Called when tools gets deselected. + virtual void toolDeselected() const {} }; } // namespace Analyzer diff --git a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp index 568f7cbe942..0b4d5105dd3 100644 --- a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp @@ -239,4 +239,8 @@ void AbstractFormEditorTool::showContextMenu(QGraphicsSceneMouseEvent *event) view()->showContextMenu(event->screenPos(), event->scenePos().toPoint(), true); } +void AbstractFormEditorTool::clear() +{ + m_itemList.clear(); +} } diff --git a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h index a0cc8ba979c..eed1ec30884 100644 --- a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h +++ b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h @@ -77,7 +77,7 @@ public: // QGraphicsItem::GraphicsItemChange change, // const QVariant &value ) = 0; // virtual void update() = 0; - virtual void clear() = 0; + virtual void clear(); virtual void formEditorItemsChanged(const QList &itemList) = 0; @@ -94,10 +94,9 @@ public: static FormEditorItem* topFormEditorItem(const QList &itemList); static FormEditorItem* topFormEditorItemWithRootItem(const QList &itemList); + protected: - virtual void selectedItemsChanged(const QList &itemList) = 0; - virtual void showContextMenu(QGraphicsSceneMouseEvent *event); FormEditorView *view() const; diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp index cda3d78efe2..ec62f391f16 100644 --- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp @@ -66,7 +66,6 @@ DragTool::DragTool(FormEditorView *editorView) m_blockMove(false), m_Aborted(false) { -// view()->setCursor(Qt::SizeAllCursor); } diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index 515e20d54d6..3e0ebe06c41 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -135,7 +135,7 @@ void FormEditorView::nodeCreated(const ModelNode &createdNode) QmlModelView::nodeCreated(createdNode); ModelNode node(createdNode); //If the node has source for components/custom parsers we ignore it. - if (QmlItemNode(node).isValid() && nextNode.modelNode().nodeSourceType() == ModelNode::NodeWithoutSource) //only setup QmlItems + if (QmlItemNode(node).isValid() && node.nodeSourceType() == ModelNode::NodeWithoutSource) //only setup QmlItems setupFormEditorItemTree(QmlItemNode(node)); } @@ -296,7 +296,6 @@ bool FormEditorView::changeToMoveTool() scene()->setPaintMode(FormEditorScene::NormalMode); m_scene->updateAllFormEditorItems(); - setCursor(Qt::SizeAllCursor); m_currentTool->clear(); m_currentTool = m_moveTool; m_currentTool->clear(); @@ -311,7 +310,6 @@ void FormEditorView::changeToDragTool() scene()->setPaintMode(FormEditorScene::NormalMode); m_scene->updateAllFormEditorItems(); - setCursor(Qt::ArrowCursor); m_currentTool->clear(); m_currentTool = m_dragTool; m_currentTool->clear(); @@ -329,7 +327,6 @@ bool FormEditorView::changeToMoveTool(const QPointF &beginPoint) scene()->setPaintMode(FormEditorScene::NormalMode); m_scene->updateAllFormEditorItems(); - setCursor(Qt::SizeAllCursor); m_currentTool->clear(); m_currentTool = m_moveTool; m_currentTool->clear(); @@ -345,7 +342,6 @@ void FormEditorView::changeToSelectionTool() scene()->setPaintMode(FormEditorScene::NormalMode); m_scene->updateAllFormEditorItems(); - setCursor(Qt::ArrowCursor); m_currentTool->clear(); m_currentTool = m_selectionTool; m_currentTool->clear(); @@ -359,7 +355,6 @@ void FormEditorView::changeToItemCreatorTool() scene()->setPaintMode(FormEditorScene::NormalMode); m_scene->updateAllFormEditorItems(); - setCursor(Qt::CrossCursor); m_currentTool->clear(); m_currentTool = m_itemCreatorTool; m_currentTool->clear(); @@ -374,7 +369,6 @@ void FormEditorView::changeToSelectionTool(QGraphicsSceneMouseEvent *event) scene()->setPaintMode(FormEditorScene::NormalMode); m_scene->updateAllFormEditorItems(); - setCursor(Qt::ArrowCursor); m_currentTool->clear(); m_currentTool = m_selectionTool; m_currentTool->clear(); @@ -390,7 +384,6 @@ void FormEditorView::changeToResizeTool() scene()->setPaintMode(FormEditorScene::NormalMode); m_scene->updateAllFormEditorItems(); - setCursor(Qt::ArrowCursor); m_currentTool->clear(); m_currentTool = m_resizeTool; m_currentTool->clear(); @@ -404,7 +397,6 @@ void FormEditorView::changeToAnchorTool() scene()->setPaintMode(FormEditorScene::AnchorMode); m_scene->updateAllFormEditorItems(); - setCursor(Qt::ArrowCursor); m_currentTool->clear(); m_currentTool = m_anchorTool; m_currentTool->clear(); @@ -421,11 +413,6 @@ void FormEditorView::changeToTransformTools() changeToSelectionTool(); } -void FormEditorView::setCursor(const QCursor &cursor) -{ - m_formEditorWidget->setCursor(cursor); -} - void FormEditorView::nodeSlidedToIndex(const NodeListProperty &listProperty, int /*newIndex*/, int /*oldIndex*/) { QList newOrderModelNodeList = listProperty.toModelNodeList(); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h index 27fbc9df82c..2657d6ae3b0 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h @@ -100,8 +100,6 @@ public: void changeToAnchorTool(); void changeToTransformTools(); - void setCursor(const QCursor &cursor); - void nodeSlidedToIndex(const NodeListProperty &listProperty, int newIndex, int oldIndex); void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data); diff --git a/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp b/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp index d9032d7c7cc..4d6c3a769fb 100644 --- a/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp @@ -70,7 +70,6 @@ void ItemCreatorTool::mousePressEvent(const QList &/*itemList*/, void ItemCreatorTool::mouseMoveEvent(const QList &/*itemList*/, QGraphicsSceneMouseEvent *event) { - view()->setCursor(Qt::CrossCursor); if (m_rubberbandSelectionManipulator.isActive()) { m_rubberbandSelectionManipulator.update(event->scenePos()); } else { diff --git a/src/plugins/qmldesigner/components/formeditor/movetool.cpp b/src/plugins/qmldesigner/components/formeditor/movetool.cpp index f72994d6461..5b8226fff40 100644 --- a/src/plugins/qmldesigner/components/formeditor/movetool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/movetool.cpp @@ -54,7 +54,7 @@ MoveTool::MoveTool(FormEditorView *editorView) m_selectionIndicator(editorView->scene()->manipulatorLayerItem()), m_resizeIndicator(editorView->scene()->manipulatorLayerItem()) { -// view()->setCursor(Qt::SizeAllCursor); + m_selectionIndicator.setCursor(Qt::SizeAllCursor); } @@ -69,6 +69,8 @@ void MoveTool::clear() m_movingItems.clear(); m_selectionIndicator.clear(); m_resizeIndicator.clear(); + + AbstractFormEditorTool::clear(); } void MoveTool::mousePressEvent(const QList &itemList, diff --git a/src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp b/src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp index 85e9f885a74..3c49627bf7c 100644 --- a/src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp +++ b/src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp @@ -102,6 +102,7 @@ void SelectionIndicator::setItems(const QList &itemList) QPen pen; pen.setColor(QColor(108, 141, 221)); newSelectionIndicatorGraphicsItem->setPen(pen); + newSelectionIndicatorGraphicsItem->setCursor(m_cursor); } } @@ -120,5 +121,13 @@ void SelectionIndicator::updateItems(const QList &itemList) } } +void SelectionIndicator::setCursor(const QCursor &cursor) +{ + m_cursor = cursor; + + foreach (QGraphicsItem *item, m_indicatorShapeHash.values()) + item->setCursor(cursor); +} + } diff --git a/src/plugins/qmldesigner/components/formeditor/selectionindicator.h b/src/plugins/qmldesigner/components/formeditor/selectionindicator.h index a5b5c7ab864..b3d6fb1b9ef 100644 --- a/src/plugins/qmldesigner/components/formeditor/selectionindicator.h +++ b/src/plugins/qmldesigner/components/formeditor/selectionindicator.h @@ -37,7 +37,7 @@ #include #include "layeritem.h" #include "formeditoritem.h" - +#include namespace QmlDesigner { @@ -57,9 +57,12 @@ public: void setItems(const QList &itemList); void updateItems(const QList &itemList); + void setCursor(const QCursor &cursor); + private: QHash m_indicatorShapeHash; QWeakPointer m_layerItem; + QCursor m_cursor; }; diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp index ca21e6d7000..110c7512934 100644 --- a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp @@ -56,7 +56,7 @@ SelectionTool::SelectionTool(FormEditorView *editorView) m_resizeIndicator(editorView->scene()->manipulatorLayerItem()), m_selectOnlyContentItems(false) { -// view()->setCursor(Qt::CrossCursor); + m_selectionIndicator.setCursor(Qt::ArrowCursor); } @@ -99,6 +99,7 @@ void SelectionTool::mousePressEvent(const QList &itemList, } } } + AbstractFormEditorTool::mousePressEvent(itemList, event); } @@ -254,6 +255,8 @@ void SelectionTool::clear() m_singleSelectionManipulator.clear(); m_selectionIndicator.clear(); m_resizeIndicator.clear(); + + AbstractFormEditorTool::clear(); } void SelectionTool::selectedItemsChanged(const QList &itemList) diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.h b/src/plugins/qmldesigner/components/formeditor/selectiontool.h index fd32f49a71b..d9b1edcc377 100644 --- a/src/plugins/qmldesigner/components/formeditor/selectiontool.h +++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.h @@ -85,6 +85,8 @@ public: void setSelectOnlyContentItems(bool selectOnlyContentItems); + void setCursor(const QCursor &cursor); + private: RubberBandSelectionManipulator m_rubberbandSelectionManipulator; SingleSelectionManipulator m_singleSelectionManipulator; @@ -92,6 +94,7 @@ private: ResizeIndicator m_resizeIndicator; QTime m_mousePressTimer; bool m_selectOnlyContentItems; + QCursor m_cursor; }; } diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 65560485515..bb810d04e86 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -277,13 +277,10 @@ void QmlProfilerTool::initializeDockWidgets() Core::Command *command = am->registerAction(d->m_attachAction, Constants::ATTACH, globalcontext); command->setAttribute(Core::Command::CA_UpdateText); - manalyzer->addAction(command, Analyzer::Constants::G_ANALYZER_STARTSTOP); + //manalyzer->addAction(command, Analyzer::Constants::G_ANALYZER_STARTSTOP); connect(d->m_attachAction, SIGNAL(triggered()), this, SLOT(attach())); - connect(analyzerMgr, SIGNAL(currentToolChanged(Analyzer::IAnalyzerTool*)), - this, SLOT(updateAttachAction())); - - updateAttachAction(); + updateAttachAction(false); QDockWidget *summaryDock = analyzerMgr->createDockWidget(this, tr("Bindings"), @@ -307,6 +304,15 @@ void QmlProfilerTool::initializeDockWidgets() mw->tabifyDockWidget(calleeDock, callerDock); } +void QmlProfilerTool::toolSelected() +{ + updateAttachAction(true); +} + +void QmlProfilerTool::toolDeselected() +{ + updateAttachAction(false); +} QWidget *QmlProfilerTool::createControlWidget() { @@ -447,6 +453,11 @@ bool QmlProfilerTool::canRunRemotely() const return true; } +bool QmlProfilerTool::canRunLocally() const +{ + return true; +} + void QmlProfilerTool::clearDisplay() { d->m_traceWindow->clearDisplay(); @@ -469,26 +480,21 @@ void QmlProfilerTool::attach() connectClient(d->m_tcpPort); AnalyzerManager::instance()->showMode(); - //AnalyzerManager::instance()->popupOutputPane(); } else { stopRecording(); } d->m_isAttached = !d->m_isAttached; - updateAttachAction(); + updateAttachAction(true); } -void QmlProfilerTool::updateAttachAction() +void QmlProfilerTool::updateAttachAction(bool isCurrentTool) { - if (d->m_attachAction) { - if (d->m_isAttached) { - d->m_attachAction->setText(tr("Detach")); - } else { - d->m_attachAction->setText(tr("Attach...")); - } - } - - d->m_attachAction->setEnabled(Analyzer::AnalyzerManager::instance()->currentTool() == this); + if (d->m_isAttached) + d->m_attachAction->setText(tr("Detach")); + else + d->m_attachAction->setText(tr("Attach...")); + d->m_attachAction->setEnabled(isCurrentTool); } void QmlProfilerTool::tryToConnect() diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index 583070d55ac..13e34375cda 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -56,6 +56,8 @@ public: void initialize(); void extensionsInitialized(); void initializeDockWidgets(); + void toolSelected(); + void toolDeselected(); Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); @@ -63,6 +65,7 @@ public: QWidget *createControlWidget(); bool canRunRemotely() const; + bool canRunLocally() const; public slots: void connectClient(int port); @@ -85,11 +88,11 @@ signals: private slots: void updateProjectFileList(); void attach(); - void updateAttachAction(); void tryToConnect(); void connectionStateChanged(); private: + void updateAttachAction(bool isCurrentTool); void connectToClient(); void updateRecordingState(); diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro index 2c1b26e0338..5452bf28be7 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.pro +++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro @@ -132,7 +132,6 @@ FORMS += makestep.ui \ librarydetailswidget.ui \ wizards/testwizardpage.ui \ wizards/targetsetuppage.ui \ - wizards/qtquickappwizardsourcespage.ui \ wizards/html5appwizardsourcespage.ui \ wizards/mobilelibrarywizardoptionpage.ui \ wizards/mobileappwizardgenericoptionspage.ui \ diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp index 0c2d8a3e72e..27eda758e4d 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp @@ -57,7 +57,6 @@ protected: bool validateCurrentPage(); private: - class QtQuickAppWizardSourcesPage *m_qmlSourcesPage; class QtQuickComponentSetOptionsPage *m_componentOptionsPage; int m_componentOptionsPageId; @@ -68,22 +67,18 @@ private: QtQuickAppWizardDialog::QtQuickAppWizardDialog(QWidget *parent) : AbstractMobileAppWizardDialog(parent, QtSupport::QtVersionNumber(4, 7, 1)) - , m_qmlSourcesPage(0) { setWindowTitle(tr("New Qt Quick Application")); setIntroDescription(tr("This wizard generates a Qt Quick application project.")); m_componentOptionsPage = new Internal::QtQuickComponentSetOptionsPage; - m_componentOptionsPageId = addPageWithTitle(m_componentOptionsPage, tr("Component Set")); + m_componentOptionsPageId = addPageWithTitle(m_componentOptionsPage, tr("Application Type")); m_componentItem = wizardProgress()->item(m_componentOptionsPageId); AbstractMobileAppWizardDialog::addMobilePages(); m_componentItem->setNextItems(QList() << targetsPageItem()); - - m_qmlSourcesPage = new QtQuickAppWizardSourcesPage; - addPageWithTitle(m_qmlSourcesPage, tr("QML Sources")); } bool QtQuickAppWizardDialog::validateCurrentPage() @@ -163,10 +158,10 @@ void QtQuickAppWizard::prepareGenerateFiles(const QWizard *w, { Q_UNUSED(errorMessage) const QtQuickAppWizardDialog *wizard = qobject_cast(w); - if (wizard->m_qmlSourcesPage->mainQmlMode() == QtQuickApp::ModeGenerate) { + if (wizard->m_componentOptionsPage->mainQmlMode() == QtQuickApp::ModeGenerate) { m_d->app->setMainQml(QtQuickApp::ModeGenerate); } else { - const QString mainQmlFile = wizard->m_qmlSourcesPage->mainQmlFile(); + const QString mainQmlFile = wizard->m_componentOptionsPage->mainQmlFile(); m_d->app->setMainQml(QtQuickApp::ModeImport, mainQmlFile); } m_d->app->setComponentSet(wizard->m_componentOptionsPage->componentSet()); diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.cpp b/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.cpp index ad5903e79d8..e3f9b473e06 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.cpp @@ -32,7 +32,6 @@ #include "qtquickappwizardpages.h" #include "ui_qtquickcomponentsetoptionspage.h" -#include "ui_qtquickappwizardsourcespage.h" #include #include @@ -43,28 +42,32 @@ namespace Qt4ProjectManager { namespace Internal { - class QtQuickComponentSetOptionsPagePrivate { Ui::QtQuickComponentSetOptionsPage ui; friend class QtQuickComponentSetOptionsPage; }; -class QtQuickAppWizardSourcesPagePrivate -{ - Ui::QtQuickAppWizardSourcesPage ui; - friend class QtQuickAppWizardSourcesPage; -}; - - QtQuickComponentSetOptionsPage::QtQuickComponentSetOptionsPage(QWidget *parent) : QWizardPage(parent) , m_d(new QtQuickComponentSetOptionsPagePrivate) { m_d->ui.setupUi(this); + + m_d->ui.importLineEdit->setExpectedKind(Utils::PathChooser::File); + m_d->ui.importLineEdit->setPromptDialogFilter(QLatin1String("*.qml")); + m_d->ui.importLineEdit->setPromptDialogTitle(tr("Select QML File")); + connect(m_d->ui.importLineEdit, SIGNAL(changed(QString)), SIGNAL(completeChanged())); + connect(m_d->ui.importRadioButton, + SIGNAL(toggled(bool)), SIGNAL(completeChanged())); + + connect(m_d->ui.importRadioButton, SIGNAL(toggled(bool)), + m_d->ui.importLineEdit, SLOT(setEnabled(bool))); + m_d->ui.buttonGroup->setId(m_d->ui.qtquick10RadioButton, 0); m_d->ui.buttonGroup->setId(m_d->ui.symbian10RadioButton, 1); m_d->ui.buttonGroup->setId(m_d->ui.meego10RadioButton, 2); + m_d->ui.buttonGroup->setId(m_d->ui.importRadioButton, 3); connect(m_d->ui.buttonGroup, SIGNAL(buttonClicked(int)), this, SLOT(radioButtonChecked(int))); } @@ -98,40 +101,19 @@ void QtQuickComponentSetOptionsPage::radioButtonChecked(int index) m_d->ui.descriptionStackedWidget->setCurrentIndex(index); } -QtQuickAppWizardSourcesPage::QtQuickAppWizardSourcesPage(QWidget *parent) - : QWizardPage(parent) - , m_d(new QtQuickAppWizardSourcesPagePrivate) +QtQuickApp::Mode QtQuickComponentSetOptionsPage::mainQmlMode() const { - m_d->ui.setupUi(this); - m_d->ui.importLineEdit->setExpectedKind(Utils::PathChooser::File); - m_d->ui.importLineEdit->setPromptDialogFilter(QLatin1String("*.qml")); - m_d->ui.importLineEdit->setPromptDialogTitle(tr("Select QML File")); - connect(m_d->ui.importLineEdit, SIGNAL(changed(QString)), SIGNAL(completeChanged())); - connect(m_d->ui.importRadioButton, - SIGNAL(toggled(bool)), SIGNAL(completeChanged())); - connect(m_d->ui.generateRadioButton, SIGNAL(toggled(bool)), - m_d->ui.importLineEdit, SLOT(setDisabled(bool))); - m_d->ui.generateRadioButton->setChecked(true); + return m_d->ui.importRadioButton->isChecked() ? QtQuickApp::ModeImport + : QtQuickApp::ModeGenerate; } -QtQuickAppWizardSourcesPage::~QtQuickAppWizardSourcesPage() -{ - delete m_d; -} - -QtQuickApp::Mode QtQuickAppWizardSourcesPage::mainQmlMode() const -{ - return m_d->ui.generateRadioButton->isChecked() ? QtQuickApp::ModeGenerate - : QtQuickApp::ModeImport; -} - -QString QtQuickAppWizardSourcesPage::mainQmlFile() const +QString QtQuickComponentSetOptionsPage::mainQmlFile() const { return mainQmlMode() == QtQuickApp::ModeImport ? m_d->ui.importLineEdit->path() : QString(); } -bool QtQuickAppWizardSourcesPage::isComplete() const +bool QtQuickComponentSetOptionsPage::isComplete() const { return mainQmlMode() != QtQuickApp::ModeImport || m_d->ui.importLineEdit->isValid(); diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.h b/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.h index 303074c9f38..7ce96823d15 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.h +++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.h @@ -48,6 +48,10 @@ public: explicit QtQuickComponentSetOptionsPage(QWidget *parent = 0); virtual ~QtQuickComponentSetOptionsPage(); + QtQuickApp::Mode mainQmlMode() const; + QString mainQmlFile() const; + virtual bool isComplete() const; + QtQuickApp::ComponentSet componentSet() const; void setComponentSet(QtQuickApp::ComponentSet componentSet); @@ -58,23 +62,6 @@ private: class QtQuickComponentSetOptionsPagePrivate *m_d; }; -class QtQuickAppWizardSourcesPage : public QWizardPage -{ - Q_OBJECT - Q_DISABLE_COPY(QtQuickAppWizardSourcesPage) - -public: - explicit QtQuickAppWizardSourcesPage(QWidget *parent = 0); - virtual ~QtQuickAppWizardSourcesPage(); - - QtQuickApp::Mode mainQmlMode() const; - QString mainQmlFile() const; - virtual bool isComplete() const; - -private: - class QtQuickAppWizardSourcesPagePrivate *m_d; -}; - } // namespace Internal } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizardsourcespage.ui b/src/plugins/qt4projectmanager/wizards/qtquickappwizardsourcespage.ui deleted file mode 100644 index e451920b635..00000000000 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizardsourcespage.ui +++ /dev/null @@ -1,94 +0,0 @@ - - - QtQuickAppWizardSourcesPage - - - - 0 - 0 - 605 - 386 - - - - WizardPage - - - - - - Main QML File - - - - - - Generate a main.qml file - - - - - - - Import an existing .qml file - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Maximum - - - - 12 - 20 - - - - - - - - - - - - 0 - 1 - - - - Note: All files and directories that reside in the same directory as the main QML file are deployed. You can modify the contents of the directory any time before deploying. - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - - - - - - Utils::PathChooser - QLineEdit -
utils/pathchooser.h
- 1 - - editingFinished() - browsingFinished() - -
-
- - -
diff --git a/src/plugins/qt4projectmanager/wizards/qtquickcomponentsetoptionspage.ui b/src/plugins/qt4projectmanager/wizards/qtquickcomponentsetoptionspage.ui index cf514765ef3..34b697384ac 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickcomponentsetoptionspage.ui +++ b/src/plugins/qt4projectmanager/wizards/qtquickcomponentsetoptionspage.ui @@ -20,7 +20,7 @@ - Qt Quick Component Set + Qt Quick Application Type false @@ -38,7 +38,7 @@ true - buttonGroup + buttonGroup @@ -48,7 +48,7 @@ Qt Quick Components for Symbian - buttonGroup + buttonGroup @@ -58,10 +58,43 @@ Qt Quick Components for Meego/Harmattan - buttonGroup + buttonGroup + + + + Use an existing .qml file + + + buttonGroup + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Maximum + + + + 12 + 20 + + + + + + + + + @@ -81,7 +114,7 @@ - 0 + 3 @@ -140,6 +173,23 @@ Requires Qt 4.7.4 or newer, and the component set installed for your Qt version. + + + + + + All files and directories that reside in the same directory as the main QML file are deployed. You can modify the contents of the directory any time before deploying. + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + @@ -147,6 +197,18 @@ Requires Qt 4.7.4 or newer, and the component set installed for your Qt version. + + + Utils::PathChooser + QLineEdit +
utils/pathchooser.h
+ 1 + + editingFinished() + browsingFinished() + +
+
diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index da9a37da70a..874a4fc00c6 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -939,7 +939,7 @@ void CallgrindToolPrivate::handleShowCostsOfFunction() m_toggleCollectFunction = QString("%1()").arg(qualifiedFunctionName); AnalyzerManager::instance()->selectTool(q); - AnalyzerManager::instance()->startTool(); + AnalyzerManager::instance()->startTool(q); } void CallgrindToolPrivate::slotRequestDump() @@ -999,6 +999,15 @@ void CallgrindToolPrivate::createTextMarks() } } +bool CallgrindTool::canRunLocally() const +{ +#ifdef Q_OS_WINDOWS + return false; +#else + return true; +#endif +} + } // namespace Internal } // namespace Valgrind diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h index 3e6d1eeb515..e3a438b70ac 100644 --- a/src/plugins/valgrind/callgrindtool.h +++ b/src/plugins/valgrind/callgrindtool.h @@ -62,6 +62,7 @@ public: QWidget *createControlWidget(); bool canRunRemotely() const { return true; } + bool canRunLocally() const; private: CallgrindToolPrivate *d; diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 54a399b1e92..109029a15b9 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -564,5 +564,14 @@ bool MemcheckTool::canRunRemotely() const return true; } +bool MemcheckTool::canRunLocally() const +{ +#ifdef Q_OS_WINDOWS + return false; +#else + return true; +#endif +} + } // namespace Internal } // namespace Valgrind diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index fe75afb6b76..611471290ce 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -113,6 +113,7 @@ private slots: private: void ensureWidgets(); bool canRunRemotely() const; + bool canRunLocally() const; void initializeDockWidgets(); void initialize() {} void extensionsInitialized();