forked from qt-creator/qt-creator
Fixed auto-switching issues with QML inspector and c++ debugger
Reviewed-by: hjk
This commit is contained in:
@@ -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(
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user