Fixed auto-switching issues with QML inspector and c++ debugger

Reviewed-by: hjk
This commit is contained in:
Lasse Holmstedt
2010-04-13 15:15:02 +02:00
parent e959967f11
commit af3f10dfdd
4 changed files with 25 additions and 18 deletions

View File

@@ -1340,6 +1340,16 @@ void DebuggerPlugin::readSettings()
DebuggerSettings::instance()->readSettings(s); DebuggerSettings::instance()->readSettings(s);
} }
static bool isCurrentProjectCppBased()
{
ProjectExplorer::ProjectExplorerPlugin *projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance();
Project *startupProject = projectExplorer->startupProject();
const QStringList cppProjectIds = QStringList() << QLatin1String("GenericProjectManager.GenericProject")
<< QLatin1String("CMakeProjectManager.CMakeProject")
<< QLatin1String("Qt4ProjectManager.Qt4Project");
return (startupProject && cppProjectIds.contains(startupProject->id()));
}
void DebuggerPlugin::onModeChanged(IMode *mode) void DebuggerPlugin::onModeChanged(IMode *mode)
{ {
// FIXME: This one gets always called, even if switching between modes // FIXME: This one gets always called, even if switching between modes
@@ -1353,12 +1363,14 @@ void DebuggerPlugin::onModeChanged(IMode *mode)
if (editorManager->currentEditor()) { if (editorManager->currentEditor()) {
editorManager->currentEditor()->widget()->setFocus(); editorManager->currentEditor()->widget()->setFocus();
if (editorManager->currentEditor()->id() == CppEditor::Constants::C_CPPEDITOR) if (isCurrentProjectCppBased())
m_uiSwitcher->setActiveLanguage(LANG_CPP); m_uiSwitcher->setActiveLanguage(LANG_CPP);
} }
} }
void DebuggerPlugin::showSettingsDialog() void DebuggerPlugin::showSettingsDialog()
{ {
Core::ICore::instance()->showOptionsDialog( Core::ICore::instance()->showOptionsDialog(

View File

@@ -193,12 +193,14 @@ bool QmlInspector::connectToViewer()
m_conn = 0; m_conn = 0;
} }
ProjectExplorer::Project *project = ProjectExplorer::ProjectExplorerPlugin::instance()->currentProject(); ProjectExplorer::Project *project = ProjectExplorer::ProjectExplorerPlugin::instance()->startupProject();
if (!project) { if (!project) {
emit statusMessage(tr("No active project, debugging canceled.")); emit statusMessage(tr("No active project, debugging canceled."));
return false; return false;
} }
// FIXME if we have c++ project with qml files in it, it would make sense to be able to start
// the qml inspector simultaneously for that project. however, now it's not possible.
QmlProjectManager::QmlProjectRunConfiguration* config = QmlProjectManager::QmlProjectRunConfiguration* config =
qobject_cast<QmlProjectManager::QmlProjectRunConfiguration*>(project->activeTarget()->activeRunConfiguration()); qobject_cast<QmlProjectManager::QmlProjectRunConfiguration*>(project->activeTarget()->activeRunConfiguration());
if (!config) { if (!config) {

View File

@@ -37,8 +37,7 @@
#include <qmljseditor/qmljseditorconstants.h> #include <qmljseditor/qmljseditorconstants.h>
#include <coreplugin/modemanager.h> #include <coreplugin/modemanager.h>
#include <coreplugin/editormanager/ieditor.h> #include <projectexplorer/projectexplorer.h>
#include <coreplugin/editormanager/editormanager.h>
#include <extensionsystem/pluginmanager.h> #include <extensionsystem/pluginmanager.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
@@ -117,7 +116,7 @@ void QmlInspectorPlugin::extensionsInitialized()
{ {
ExtensionSystem::PluginManager *pluginManager = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pluginManager = ExtensionSystem::PluginManager::instance();
Debugger::DebuggerUISwitcher *uiSwitcher = pluginManager->getObject<Debugger::DebuggerUISwitcher>(); Debugger::DebuggerUISwitcher *uiSwitcher = pluginManager->getObject<Debugger::DebuggerUISwitcher>();
//connect(uiSwitcher, SIGNAL(languageChanged(QString)), SLOT(activateDebugger(QString)));
connect(uiSwitcher, SIGNAL(dockArranged(QString)), SLOT(setDockWidgetArrangement(QString))); connect(uiSwitcher, SIGNAL(dockArranged(QString)), SLOT(setDockWidgetArrangement(QString)));
ProjectExplorer::ProjectExplorerPlugin *pex = ProjectExplorer::ProjectExplorerPlugin::instance(); ProjectExplorer::ProjectExplorerPlugin *pex = ProjectExplorer::ProjectExplorerPlugin::instance();
@@ -143,18 +142,13 @@ void QmlInspectorPlugin::extensionsInitialized()
uiSwitcher->setToolbar(Qml::Constants::LANG_QML, configBar); uiSwitcher->setToolbar(Qml::Constants::LANG_QML, configBar);
} }
void QmlInspectorPlugin::activateDebugger(const QString &langName)
{
if (langName == Qml::Constants::LANG_QML) {
m_inspector->connectToViewer();
}
}
void QmlInspectorPlugin::activateDebuggerForProject(ProjectExplorer::Project *project, const QString &runMode) void QmlInspectorPlugin::activateDebuggerForProject(ProjectExplorer::Project *project, const QString &runMode)
{ {
if (runMode == ProjectExplorer::Constants::DEBUGMODE) { if (runMode == ProjectExplorer::Constants::DEBUGMODE) {
QmlProjectManager::QmlProject *qmlproj = qobject_cast<QmlProjectManager::QmlProject*>(project); // FIXME we probably want to activate the debugger for other projects than QmlProjects,
if (qmlproj) // if they contain Qml files. Some kind of options should exist for this behavior.
//QmlProjectManager::QmlProject *qmlproj = qobject_cast<QmlProjectManager::QmlProject*>(project);
//if (qmlproj)
m_connectionTimer->start(); m_connectionTimer->start();
} }
@@ -180,10 +174,10 @@ void QmlInspectorPlugin::prepareDebugger(Core::IMode *mode)
if (mode->id() != Debugger::Constants::MODE_DEBUG) if (mode->id() != Debugger::Constants::MODE_DEBUG)
return; return;
Core::EditorManager *editorManager = Core::EditorManager::instance(); ProjectExplorer::ProjectExplorerPlugin *pex = ProjectExplorer::ProjectExplorerPlugin::instance();
if (editorManager->currentEditor() && if (pex->startupProject() && pex->startupProject()->id() == "QmlProjectManager.QmlProject")
editorManager->currentEditor()->id() == QmlJSEditor::Constants::C_QMLJSEDITOR_ID) { {
ExtensionSystem::PluginManager *pluginManager = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pluginManager = ExtensionSystem::PluginManager::instance();
Debugger::DebuggerUISwitcher *uiSwitcher = pluginManager->getObject<Debugger::DebuggerUISwitcher>(); Debugger::DebuggerUISwitcher *uiSwitcher = pluginManager->getObject<Debugger::DebuggerUISwitcher>();
uiSwitcher->setActiveLanguage(Qml::Constants::LANG_QML); uiSwitcher->setActiveLanguage(Qml::Constants::LANG_QML);

View File

@@ -63,7 +63,6 @@ public:
virtual void shutdown(); virtual void shutdown();
public slots: public slots:
void activateDebugger(const QString &langName);
void activateDebuggerForProject(ProjectExplorer::Project *project, const QString &runMode); void activateDebuggerForProject(ProjectExplorer::Project *project, const QString &runMode);
void setDockWidgetArrangement(const QString &activeLanguage); void setDockWidgetArrangement(const QString &activeLanguage);