forked from qt-creator/qt-creator
QmlDesigner: Fix for Annotation images crash
- removed direct usage of SessionManager - replaced it with DesignDocument usage - deactivated add image button for files without projects - add hasProject method to DesignDocument Task-number: QDS-4810 Change-Id: I77c74f3c6e9b5b9dcbda68f7937cfeda531d0309 Reviewed-by: Tapani Mattila <tapani.mattila@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Copyright (C) 2021 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
@@ -24,18 +24,17 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include "annotationcommenttab.h"
|
||||
#include "defaultannotations.h"
|
||||
#include "ui_annotationcommenttab.h"
|
||||
|
||||
#include "richtexteditor/richtexteditor.h"
|
||||
#include "defaultannotations.h"
|
||||
|
||||
#include <qmldesignerplugin.h>
|
||||
#include <richtexteditor/richtexteditor.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <qmlprojectmanager/qmlproject.h>
|
||||
|
||||
#include <QCryptographicHash>
|
||||
|
||||
#include "projectexplorer/session.h"
|
||||
#include "projectexplorer/target.h"
|
||||
#include "qmldesignerplugin.h"
|
||||
#include "qmlprojectmanager/qmlproject.h"
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
AnnotationCommentTab::AnnotationCommentTab(QWidget *parent)
|
||||
@@ -50,10 +49,27 @@ AnnotationCommentTab::AnnotationCommentTab(QWidget *parent)
|
||||
filePath = backupFile(filePath);
|
||||
});
|
||||
|
||||
Utils::FilePath projPath = ProjectExplorer::SessionManager::startupProject()->projectFilePath();
|
||||
m_editor->setImageActionVisible(false);
|
||||
|
||||
m_editor->setDocumentBaseUrl(QUrl::fromLocalFile(projPath.toString()));
|
||||
m_editor->setImageActionVisible(true);
|
||||
const QmlDesigner::DesignDocument *designDocument = QmlDesigner::QmlDesignerPlugin::instance()
|
||||
->documentManager().currentDesignDocument();
|
||||
Utils::FilePath projectPath;
|
||||
|
||||
Q_ASSERT(designDocument);
|
||||
|
||||
if (designDocument) {
|
||||
if (designDocument->currentTarget() && designDocument->currentTarget()->project()) {
|
||||
projectPath = designDocument->currentTarget()->project()->projectFilePath();
|
||||
m_editor->setImageActionVisible(true);
|
||||
}
|
||||
|
||||
if (projectPath.isEmpty()) {
|
||||
projectPath = designDocument->fileName();
|
||||
m_editor->setImageActionVisible(false);
|
||||
}
|
||||
|
||||
m_editor->setDocumentBaseUrl(QUrl::fromLocalFile(projectPath.toString()));
|
||||
}
|
||||
|
||||
ui->formLayout->setWidget(3, QFormLayout::FieldRole, m_editor);
|
||||
|
||||
@@ -124,14 +140,35 @@ void AnnotationCommentTab::setDefaultAnnotations(DefaultAnnotationsModel *defaul
|
||||
|
||||
QString AnnotationCommentTab::backupFile(const QString &filePath)
|
||||
{
|
||||
const QDir projDir(
|
||||
ProjectExplorer::SessionManager::startupProject()->projectDirectory().toString());
|
||||
const QmlDesigner::DesignDocument *designDocument = QmlDesigner::QmlDesignerPlugin::instance()
|
||||
->documentManager().currentDesignDocument();
|
||||
Utils::FilePath projectFolderPath;
|
||||
|
||||
Q_ASSERT(designDocument);
|
||||
|
||||
if (designDocument) {
|
||||
if (designDocument->hasProject())
|
||||
projectFolderPath = designDocument->projectFolder();
|
||||
if (projectFolderPath.isEmpty())
|
||||
projectFolderPath = designDocument->fileName().parentDir();
|
||||
}
|
||||
else
|
||||
return {};
|
||||
|
||||
const QDir projDir(projectFolderPath.toDir());
|
||||
|
||||
if (!projDir.exists())
|
||||
return {};
|
||||
|
||||
const QString imageSubDir(".AnnotationImages");
|
||||
const QDir imgDir(projDir.absolutePath() + QDir::separator() + imageSubDir);
|
||||
|
||||
ensureDir(imgDir);
|
||||
|
||||
Q_ASSERT(imgDir.exists());
|
||||
if (!imgDir.exists())
|
||||
return {};
|
||||
|
||||
const QFileInfo oldFile(filePath);
|
||||
QFileInfo newFile(imgDir, oldFile.fileName());
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Copyright (C) 2021 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "annotation.h"
|
||||
#include <annotation.h>
|
||||
|
||||
#include <QWidget>
|
||||
#include <QPointer>
|
||||
@@ -67,16 +67,17 @@ public:
|
||||
signals:
|
||||
void titleChanged(const QString &text, QWidget *widget);
|
||||
|
||||
private:
|
||||
QString backupFile(const QString &filePath);
|
||||
void ensureDir(const QDir &dir);
|
||||
int compareFileChecksum(const QString &firstFile, const QString &secondFile);
|
||||
|
||||
private:
|
||||
std::unique_ptr<Ui::AnnotationCommentTab> ui;
|
||||
RichTextEditor *m_editor;
|
||||
|
||||
Comment m_comment;
|
||||
QPointer<DefaultAnnotationsModel> m_defaults;
|
||||
|
||||
QString backupFile(const QString &filePath);
|
||||
void ensureDir(const QDir &dir);
|
||||
int compareFileChecksum(const QString &firstFile, const QString &secondFile);
|
||||
};
|
||||
|
||||
} //namespace QmlDesigner
|
||||
|
@@ -288,6 +288,11 @@ Utils::FilePath DesignDocument::projectFolder() const
|
||||
return {};
|
||||
}
|
||||
|
||||
bool DesignDocument::hasProject() const
|
||||
{
|
||||
return ProjectExplorer::SessionManager::projectForFile(fileName());
|
||||
}
|
||||
|
||||
void DesignDocument::changeToInFileComponentModel(ComponentTextModifier *textModifer)
|
||||
{
|
||||
m_inFileComponentTextModifier.reset(textModifer);
|
||||
|
@@ -101,6 +101,7 @@ public:
|
||||
bool isQtForMCUsProject() const;
|
||||
|
||||
Utils::FilePath projectFolder() const;
|
||||
bool hasProject() const;
|
||||
|
||||
signals:
|
||||
void displayNameChanged(const QString &newFileName);
|
||||
|
Reference in New Issue
Block a user