aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLasse Holmstedt <lasse.holmstedt@nokia.com>2010-03-05 11:11:05 +0100
committercon <qtc-committer@nokia.com>2010-03-09 18:26:14 +0100
commit90eb7c62611e130147ddb2577f06fe618eba0835 (patch)
treef3d56840b13f0276e2f5e063a0cacded7f55ae13
parent464940ce95eca88d812d179a3573c88cb945a8b5 (diff)
Disable run controls if no qml file is selected
Task-number: BAUHAUS-396 Reviewed-by: dt (cherry picked from commit cba54bf47db89ef1f1c0e595eaecf3e5490a85bf)
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp12
-rw-r--r--src/plugins/projectexplorer/runconfiguration.h3
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp64
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h21
4 files changed, 89 insertions, 11 deletions
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index f2d67e2bf5..470ad5cfbd 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1344,6 +1344,7 @@ void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node
newContext = project->projectManager()->projectContext();
newLanguageID = project->projectManager()->projectLanguage();
}
+
core->removeAdditionalContext(oldContext);
core->removeAdditionalContext(oldLanguageID);
core->addAdditionalContext(newContext);
@@ -1685,6 +1686,9 @@ void ProjectExplorerPlugin::startupProjectChanged()
if (previousStartupProject) {
disconnect(previousStartupProject, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)),
this, SLOT(updateRunActions()));
+ disconnect(previousStartupProject->activeTarget()->activeRunConfiguration(),
+ SIGNAL(isEnabledChanged(bool)), this, SLOT(updateRunActions()));
+
foreach (Target *t, previousStartupProject->targets())
disconnect(t, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)),
this, SLOT(updateActions()));
@@ -1695,6 +1699,8 @@ void ProjectExplorerPlugin::startupProjectChanged()
if (project) {
connect(project, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)),
this, SLOT(updateRunActions()));
+ connect(previousStartupProject->activeTarget()->activeRunConfiguration(), SIGNAL(isEnabledChanged(bool)),
+ this, SLOT(updateRunActions()));
foreach (Target *t, project->targets())
connect(t, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)),
this, SLOT(updateActions()));
@@ -1726,8 +1732,10 @@ void ProjectExplorerPlugin::updateRunActions()
return;
}
- bool canRun = findRunControlFactory(project->activeTarget()->activeRunConfiguration(), ProjectExplorer::Constants::RUNMODE);
- const bool canDebug = !d->m_debuggingRunControl && findRunControlFactory(project->activeTarget()->activeRunConfiguration(), ProjectExplorer::Constants::DEBUGMODE);
+ bool canRun = findRunControlFactory(project->activeTarget()->activeRunConfiguration(), ProjectExplorer::Constants::RUNMODE)
+ && project->activeTarget()->activeRunConfiguration()->isEnabled();
+ const bool canDebug = !d->m_debuggingRunControl && findRunControlFactory(project->activeTarget()->activeRunConfiguration(), ProjectExplorer::Constants::DEBUGMODE)
+ && project->activeTarget()->activeRunConfiguration()->isEnabled();
const bool building = d->m_buildManager->isBuilding();
d->m_runAction->setEnabled(canRun && !building);
diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h
index a7b918210b..76b9c612a2 100644
--- a/src/plugins/projectexplorer/runconfiguration.h
+++ b/src/plugins/projectexplorer/runconfiguration.h
@@ -79,6 +79,9 @@ public:
Target *target() const;
+signals:
+ void isEnabledChanged(bool value);
+
protected:
RunConfiguration(Target *parent, const QString &id);
RunConfiguration(Target *parent, RunConfiguration *source);
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
index e0a6e4ee13..a8c21398b9 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
@@ -32,6 +32,8 @@
#include "qmlprojectrunconfiguration.h"
#include "qmlprojecttarget.h"
+#include <coreplugin/mimedatabase.h>
+#include <projectexplorer/buildconfiguration.h>
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/icore.h>
@@ -51,7 +53,9 @@ namespace QmlProjectManager {
QmlProjectRunConfiguration::QmlProjectRunConfiguration(Internal::QmlProjectTarget *parent) :
ProjectExplorer::RunConfiguration(parent, QLatin1String(Constants::QML_RC_ID)),
m_debugServerAddress("127.0.0.1"),
- m_debugServerPort(Constants::QML_DEFAULT_DEBUG_SERVER_PORT)
+ m_debugServerPort(Constants::QML_DEFAULT_DEBUG_SERVER_PORT),
+ m_usingCurrentFile(false),
+ m_isEnabled(false)
{
ctor();
}
@@ -67,8 +71,24 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Internal::QmlProjectTarge
ctor();
}
+bool QmlProjectRunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *bc) const
+{
+ Q_UNUSED(bc);
+
+ if (!QFile::exists(mainScript())
+ || !Core::ICore::instance()->mimeDatabase()->findByFile(mainScript()).matchesType(QLatin1String("application/x-qml")))
+ {
+ return false;
+ }
+ return true;
+}
+
void QmlProjectRunConfiguration::ctor()
{
+ Core::EditorManager *em = Core::EditorManager::instance();
+ connect(em, SIGNAL(currentEditorChanged(Core::IEditor*)),
+ this, SLOT(changeCurrentFile(Core::IEditor*)));
+
setDisplayName(tr("QML Viewer", "QMLRunConfiguration display name."));
// prepend creator/bin dir to search path (only useful for special creator-qml package)
@@ -193,14 +213,10 @@ QWidget *QmlProjectRunConfiguration::configurationWidget()
QString QmlProjectRunConfiguration::mainScript() const
{
- if (m_scriptFile.isEmpty() || m_scriptFile == tr("<Current File>")) {
- Core::EditorManager *editorManager = Core::ICore::instance()->editorManager();
- if (Core::IEditor *editor = editorManager->currentEditor()) {
- return editor->file()->fileName();
- }
- }
+ if (m_usingCurrentFile)
+ return m_currentFileFilename;
- return qmlTarget()->qmlProject()->projectDir().absoluteFilePath(m_scriptFile);
+ return m_mainScriptFilename;
}
void QmlProjectRunConfiguration::onDebugServerAddressChanged()
@@ -212,6 +228,15 @@ void QmlProjectRunConfiguration::onDebugServerAddressChanged()
void QmlProjectRunConfiguration::setMainScript(const QString &scriptFile)
{
m_scriptFile = scriptFile;
+
+ if (m_scriptFile.isEmpty() || m_scriptFile == CURRENT_FILE) {
+ m_usingCurrentFile = true;
+ changeCurrentFile(Core::EditorManager::instance()->currentEditor());
+ } else {
+ m_usingCurrentFile = false;
+ m_mainScriptFilename = qmlTarget()->qmlProject()->projectDir().absoluteFilePath(scriptFile);
+ setEnabled(true);
+ }
}
void QmlProjectRunConfiguration::onViewerChanged()
@@ -250,11 +275,32 @@ bool QmlProjectRunConfiguration::fromMap(const QVariantMap &map)
{
m_qmlViewerCustomPath = map.value(QLatin1String(Constants::QML_VIEWER_KEY)).toString();
m_qmlViewerArgs = map.value(QLatin1String(Constants::QML_VIEWER_ARGUMENTS_KEY)).toString();
- m_scriptFile = map.value(QLatin1String(Constants::QML_MAINSCRIPT_KEY), tr("<Current File>")).toString();
+ m_scriptFile = map.value(QLatin1String(Constants::QML_MAINSCRIPT_KEY), CURRENT_FILE).toString();
m_debugServerPort = map.value(QLatin1String(Constants::QML_DEBUG_SERVER_PORT_KEY), Constants::QML_DEFAULT_DEBUG_SERVER_PORT).toUInt();
m_debugServerAddress = map.value(QLatin1String(Constants::QML_DEBUG_SERVER_ADDRESS_KEY), QLatin1String("127.0.0.1")).toString();
+ setMainScript(m_scriptFile);
return RunConfiguration::fromMap(map);
}
+void QmlProjectRunConfiguration::changeCurrentFile(Core::IEditor *editor)
+{
+ if (m_usingCurrentFile) {
+ bool enable = false;
+ if (editor) {
+ m_currentFileFilename = editor->file()->fileName();
+ if (Core::ICore::instance()->mimeDatabase()->findByFile(mainScript()).matchesType(QLatin1String("application/x-qml")))
+ enable = true;
+ }
+
+ setEnabled(enable);
+ }
+}
+
+void QmlProjectRunConfiguration::setEnabled(bool value)
+{
+ m_isEnabled = value;
+ emit isEnabledChanged(m_isEnabled);
+}
+
} // namespace QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h
index 89db90b4e2..76efd3147e 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h
@@ -33,13 +33,20 @@
#include "qmlprojectmanager_global.h"
#include <projectexplorer/runconfiguration.h>
+namespace Core {
+ class IEditor;
+}
+
namespace QmlProjectManager {
namespace Internal {
class QmlProjectTarget;
class QmlProjectRunConfigurationFactory;
+
}
+const char * const CURRENT_FILE = QT_TRANSLATE_NOOP("QmlManager", "<Current File>");
+
class QMLPROJECTMANAGER_EXPORT QmlProjectRunConfiguration : public ProjectExplorer::RunConfiguration
{
Q_OBJECT
@@ -51,6 +58,8 @@ public:
Internal::QmlProjectTarget *qmlTarget() const;
+ bool isEnabled(ProjectExplorer::BuildConfiguration *bc) const;
+
QString viewerPath() const;
QStringList viewerArguments() const;
QString workingDirectory() const;
@@ -63,8 +72,10 @@ public:
QVariantMap toMap() const;
private slots:
+ void changeCurrentFile(Core::IEditor*);
QString mainScript() const;
void setMainScript(const QString &scriptFile);
+
void onViewerChanged();
void onViewerArgsChanged();
void onDebugServerAddressChanged();
@@ -73,16 +84,26 @@ private slots:
protected:
QmlProjectRunConfiguration(Internal::QmlProjectTarget *parent, QmlProjectRunConfiguration *source);
virtual bool fromMap(const QVariantMap &map);
+ void setEnabled(bool value);
private:
void ctor();
+ // absolute path to current file (if being used)
+ QString m_currentFileFilename;
+ // absolute path to selected main script (if being used)
+ QString m_mainScriptFilename;
+
QString m_scriptFile;
QString m_qmlViewerCustomPath;
QString m_qmlViewerDefaultPath;
QString m_qmlViewerArgs;
QString m_debugServerAddress;
uint m_debugServerPort;
+
+ bool m_usingCurrentFile;
+ bool m_isEnabled;
+
};
} // namespace QmlProjectManager