QmlProject: Make sure 'mainFile: "xxx"' is always respected

Prevent user from overriding the file to launch through the run configuration
dialog. The old logic was broken (main file was always the editor), and
arbitrary files can now be previewed conveniently with
Tools->External->Qt Quick->Preview.

Task-number: QTCREATORBUG-6683
Change-Id: Icee1d11e5063ca634e835bb57ffc77bf973ee93f
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
This commit is contained in:
Kai Koehne
2012-01-02 11:53:37 +01:00
parent ed7b5c9c75
commit c158ae1337
3 changed files with 23 additions and 45 deletions

View File

@@ -65,7 +65,6 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(QmlProjectTarget *parent)
m_qtVersionId(-1),
m_scriptFile(M_CURRENT_FILE),
m_projectTarget(parent),
m_usingCurrentFile(true),
m_isEnabled(false)
{
ctor();
@@ -79,7 +78,6 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(QmlProjectTarget *parent,
m_scriptFile(source->m_scriptFile),
m_qmlViewerArgs(source->m_qmlViewerArgs),
m_projectTarget(parent),
m_usingCurrentFile(source->m_usingCurrentFile),
m_isEnabled(source->m_isEnabled),
m_userEnvironmentChanges(source->m_userEnvironmentChanges)
{
@@ -227,13 +225,12 @@ Utils::OutputFormatter *QmlProjectRunConfiguration::createOutputFormatter() cons
QmlProjectRunConfiguration::MainScriptSource QmlProjectRunConfiguration::mainScriptSource() const
{
if (m_usingCurrentFile) {
return FileInEditor;
}
if (!qmlTarget()->qmlProject()->mainFile().isEmpty())
return FileInProjectFile;
if (!m_mainScriptFilename.isEmpty()) {
return FileInSettings;
}
return FileInProjectFile;
return FileInEditor;
}
/**
@@ -241,23 +238,18 @@ QmlProjectRunConfiguration::MainScriptSource QmlProjectRunConfiguration::mainScr
*/
QString QmlProjectRunConfiguration::mainScript() const
{
if (m_usingCurrentFile) {
return m_currentFileFilename;
if (!qmlTarget()->qmlProject()->mainFile().isEmpty()) {
const QString pathInProject = qmlTarget()->qmlProject()->mainFile();
if (QFileInfo(pathInProject).isAbsolute())
return pathInProject;
else
return qmlTarget()->qmlProject()->projectDir().absoluteFilePath(pathInProject);
}
if (!m_mainScriptFilename.isEmpty()) {
if (!m_mainScriptFilename.isEmpty())
return m_mainScriptFilename;
}
const QString path = qmlTarget()->qmlProject()->mainFile();
if (path.isEmpty()) {
return m_currentFileFilename;
}
if (QFileInfo(path).isAbsolute()) {
return path;
} else {
return qmlTarget()->qmlProject()->projectDir().absoluteFilePath(path);
}
return m_currentFileFilename;
}
void QmlProjectRunConfiguration::setScriptSource(MainScriptSource source,
@@ -266,16 +258,13 @@ void QmlProjectRunConfiguration::setScriptSource(MainScriptSource source,
if (source == FileInEditor) {
m_scriptFile = M_CURRENT_FILE;
m_mainScriptFilename.clear();
m_usingCurrentFile = true;
} else if (source == FileInProjectFile) {
m_scriptFile.clear();
m_mainScriptFilename.clear();
m_usingCurrentFile = false;
} else { // FileInSettings
m_scriptFile = settingsPath;
m_mainScriptFilename
= qmlTarget()->qmlProject()->projectDir().absoluteFilePath(m_scriptFile);
m_usingCurrentFile = false;
}
updateEnabled();
if (m_configurationWidget)
@@ -340,7 +329,7 @@ void QmlProjectRunConfiguration::changeCurrentFile(Core::IEditor *editor)
void QmlProjectRunConfiguration::updateEnabled()
{
bool qmlFileFound = false;
if (m_usingCurrentFile) {
if (mainScriptSource() == FileInEditor) {
Core::IEditor *editor = Core::EditorManager::instance()->currentEditor();
Core::MimeDatabase *db = ICore::instance()->mimeDatabase();
if (editor) {