QmlDesigner: Indicate if a file is modified

Task-number: QDS-12361
Change-Id: I7a6c5f112b0f193f5bb975a331e2f0d44d19ddc2
Reviewed-by: Henning Gründl <henning.gruendl@qt.io>
This commit is contained in:
Thomas Hartmann
2024-04-11 16:00:51 +02:00
parent 3f597a5935
commit b5aac705ea
3 changed files with 47 additions and 0 deletions

View File

@@ -190,6 +190,26 @@ Rectangle {
onActivated: backend.openFileByIndex(index)
}
Text {
parent:currentFile.contentItem
visible: backend.isDocumentDirty
anchors.right: parent.right
anchors.rightMargin: parent.width - metric.textWidth - 18
color: StudioTheme.Values.themeTextColor
text: StudioTheme.Constants.wildcard
font.family: StudioTheme.Constants.iconFont.family
font.pixelSize: StudioTheme.Values.smallIconFont
anchors.verticalCenter: parent.verticalCenter
anchors.verticalCenterOffset: -4
FontMetrics {
id: metric
font: currentFile.font
property int textWidth: metric.boundingRect(currentFile.currentText).width
}
}
ToolbarButton {
id: backButton
anchors.verticalCenter: parent.verticalCenter

View File

@@ -21,6 +21,9 @@
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/icore.h>
#include <coreplugin/modemanager.h>
#include <texteditor/textdocument.h>
#include <projectexplorer/kitmanager.h>
#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorer.h>
@@ -302,6 +305,20 @@ ToolBarBackend::ToolBarBackend(QObject *parent)
this,
&ToolBarBackend::documentIndexChanged);
connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged, this, [this]() {
static QMetaObject::Connection *lastConnection = nullptr;
delete lastConnection;
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(
Core::EditorManager::currentDocument())) {
connect(textDocument->document(),
&QTextDocument::modificationChanged,
this,
&ToolBarBackend::isDocumentDirtyChanged);
emit isDocumentDirtyChanged();
}
});
connect(Core::EditorManager::instance(),
&Core::EditorManager::currentEditorChanged,
this,
@@ -740,6 +757,12 @@ bool ToolBarBackend::isSharingEnabled()
return QmlDesigner::checkEnterpriseLicense();
}
bool ToolBarBackend::isDocumentDirty() const
{
return Core::EditorManager::currentDocument()
&& Core::EditorManager::currentDocument()->isModified();
}
void ToolBarBackend::launchGlobalAnnotations()
{
QmlDesignerPlugin::emitUsageStatistics(Constants::EVENT_TOOLBAR_EDIT_GLOBAL_ANNOTATION);

View File

@@ -97,6 +97,7 @@ class ToolBarBackend : public QObject
Q_PROPERTY(bool isMCUs READ isMCUs NOTIFY isMCUsChanged)
Q_PROPERTY(bool projectOpened READ projectOpened NOTIFY projectOpenedChanged)
Q_PROPERTY(bool isSharingEnabled READ isSharingEnabled NOTIFY isSharingEnabledChanged)
Q_PROPERTY(bool isDocumentDirty READ isDocumentDirty NOTIFY isDocumentDirtyChanged)
public:
ToolBarBackend(QObject *parent = nullptr);
@@ -147,6 +148,8 @@ public:
bool isSharingEnabled();
bool isDocumentDirty() const;
static void launchGlobalAnnotations();
signals:
@@ -167,6 +170,7 @@ signals:
void isMCUsChanged();
void projectOpenedChanged();
void isSharingEnabledChanged();
void isDocumentDirtyChanged();
private:
void setupWorkspaces();