diff options
author | Jarek Kobus <jaroslaw.kobus@theqtcompany.com> | 2016-10-07 15:58:40 +0200 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2016-10-17 14:44:08 +0000 |
commit | 59c90e00c1e8b18d120f5b5c15b331b1ee427ace (patch) | |
tree | 813294816790a798877bd00e92a0a9b980b8d106 | |
parent | caf721430b1a02be6f76fb5d98d44ecb2e5cdab9 (diff) | |
download | qt-creator-59c90e00c1e8b18d120f5b5c15b331b1ee427ace.tar.gz |
Replace virtual isModified method with a getter/setter/notifier
We have lacked the setter and dedicated notifier before.
Change-Id: I58845a48259d260c5cc90ae94b173c79cddcfef9
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
28 files changed, 113 insertions, 136 deletions
diff --git a/src/libs/modelinglib/qmt/document_controller/documentcontroller.cpp b/src/libs/modelinglib/qmt/document_controller/documentcontroller.cpp index f6271ff14d..8af722de62 100644 --- a/src/libs/modelinglib/qmt/document_controller/documentcontroller.cpp +++ b/src/libs/modelinglib/qmt/document_controller/documentcontroller.cpp @@ -76,17 +76,20 @@ DocumentController::DocumentController(QObject *parent) : { // project controller connect(m_projectController, &ProjectController::changed, this, &DocumentController::changed); + connect(m_projectController, &ProjectController::modificationChanged, this, &DocumentController::modificationChanged); // model controller m_modelController->setUndoController(m_undoController); - connect(m_modelController, &ModelController::modified, - m_projectController, &ProjectController::setModified); + connect(m_modelController, &ModelController::modified, [this](){ + m_projectController->setModified(true); + }); // diagram controller m_diagramController->setModelController(m_modelController); m_diagramController->setUndoController(m_undoController); - connect(m_diagramController, &DiagramController::modified, - m_projectController, &ProjectController::setModified); + connect(m_diagramController, &DiagramController::modified, [this](){ + m_projectController->setModified(true); + }); // diagram scene controller m_diagramSceneController->setModelController(m_modelController); diff --git a/src/libs/modelinglib/qmt/document_controller/documentcontroller.h b/src/libs/modelinglib/qmt/document_controller/documentcontroller.h index d9a253773f..b9eb3a5371 100644 --- a/src/libs/modelinglib/qmt/document_controller/documentcontroller.h +++ b/src/libs/modelinglib/qmt/document_controller/documentcontroller.h @@ -61,6 +61,7 @@ public: signals: void changed(); + void modificationChanged(bool modified); void modelClipboardChanged(bool isEmpty); void diagramClipboardChanged(bool isEmpty); diff --git a/src/libs/modelinglib/qmt/project_controller/projectcontroller.cpp b/src/libs/modelinglib/qmt/project_controller/projectcontroller.cpp index 9698a2f601..384bb52281 100644 --- a/src/libs/modelinglib/qmt/project_controller/projectcontroller.cpp +++ b/src/libs/modelinglib/qmt/project_controller/projectcontroller.cpp @@ -43,8 +43,7 @@ ProjectIsModifiedException::ProjectIsModifiedException() } ProjectController::ProjectController(QObject *parent) - : QObject(parent), - m_isModified(false) + : QObject(parent) { } @@ -59,7 +58,7 @@ void ProjectController::newProject(const QString &fileName) rootPackage->setName(tr("Model")); m_project->setRootPackage(rootPackage); m_project->setFileName(fileName); - m_isModified = false; + setModified(false); emit fileNameChanged(m_project->fileName()); emit changed(); } @@ -68,17 +67,18 @@ void ProjectController::setFileName(const QString &fileName) { if (fileName != m_project->fileName()) { m_project->setFileName(fileName); - setModified(); + setModified(true); emit fileNameChanged(m_project->fileName()); } } -void ProjectController::setModified() +void ProjectController::setModified(bool modified) { - if (!m_isModified) { - m_isModified = true; - emit changed(); - } + if (m_isModified == modified) + return; + + m_isModified = modified; + emit modificationChanged(modified); } void ProjectController::load() @@ -89,7 +89,7 @@ void ProjectController::load() throw NoFileNameException(); ProjectSerializer serializer; serializer.load(m_project->fileName(), m_project.data()); - m_isModified = false; + setModified(false); emit changed(); } @@ -99,7 +99,7 @@ void ProjectController::save() throw NoFileNameException(); ProjectSerializer serializer; serializer.save(m_project->fileName(), m_project.data()); - m_isModified = false; + setModified(false); emit changed(); } diff --git a/src/libs/modelinglib/qmt/project_controller/projectcontroller.h b/src/libs/modelinglib/qmt/project_controller/projectcontroller.h index 73daf2a2ac..a4eb47f9a6 100644 --- a/src/libs/modelinglib/qmt/project_controller/projectcontroller.h +++ b/src/libs/modelinglib/qmt/project_controller/projectcontroller.h @@ -58,6 +58,7 @@ public: signals: void changed(); void fileNameChanged(const QString &fileName); + void modificationChanged(bool modified); public: Project *project() const { return m_project.data(); } @@ -65,7 +66,7 @@ public: void newProject(const QString &fileName); void setFileName(const QString &fileName); - void setModified(); + void setModified(bool modified); void load(); void save(); @@ -73,7 +74,7 @@ public: private: QScopedPointer<Project> m_project; - bool m_isModified; + bool m_isModified = false; }; } // namespace qmt diff --git a/src/plugins/android/androidmanifestdocument.cpp b/src/plugins/android/androidmanifestdocument.cpp index e3473a891b..01b1e3d810 100644 --- a/src/plugins/android/androidmanifestdocument.cpp +++ b/src/plugins/android/androidmanifestdocument.cpp @@ -43,8 +43,12 @@ AndroidManifestDocument::AndroidManifestDocument(AndroidManifestEditorWidget *ed setId(Constants::ANDROID_MANIFEST_EDITOR_ID); setMimeType(QLatin1String(Constants::ANDROID_MANIFEST_MIME_TYPE)); setSuspendAllowed(false); - connect(editorWidget, &AndroidManifestEditorWidget::guiChanged, - this, &Core::IDocument::changed); + connect(editorWidget, &AndroidManifestEditorWidget::modificationChanged, + this, &Core::IDocument::setModified); + connect(this, &Core::IDocument::modificationChanged, + editorWidget, &AndroidManifestEditorWidget::setModified); + + setModified(editorWidget->isModified()); } bool AndroidManifestDocument::save(QString *errorString, const QString &fileName, bool autoSave) @@ -55,11 +59,6 @@ bool AndroidManifestDocument::save(QString *errorString, const QString &fileName return result; } -bool AndroidManifestDocument::isModified() const -{ - return TextDocument::isModified() || m_editorWidget->isModified(); -} - bool AndroidManifestDocument::isSaveAsAllowed() const { return false; diff --git a/src/plugins/android/androidmanifestdocument.h b/src/plugins/android/androidmanifestdocument.h index 169047f051..28b8bc8306 100644 --- a/src/plugins/android/androidmanifestdocument.h +++ b/src/plugins/android/androidmanifestdocument.h @@ -39,7 +39,6 @@ public: bool save(QString *errorString, const QString &fileName = QString(), bool autoSave = false) override; - bool isModified() const override; bool isSaveAsAllowed() const override; private: diff --git a/src/plugins/android/androidmanifesteditorwidget.cpp b/src/plugins/android/androidmanifesteditorwidget.cpp index a2d1d8beed..6c8f767071 100644 --- a/src/plugins/android/androidmanifesteditorwidget.cpp +++ b/src/plugins/android/androidmanifesteditorwidget.cpp @@ -101,7 +101,7 @@ Project *androidProject(const Utils::FileName &fileName) AndroidManifestEditorWidget::AndroidManifestEditorWidget() : QStackedWidget(), - m_dirty(false), + m_modified(false), m_stayClean(false) { m_textEditorWidget = new AndroidManifestTextEditorWidget(this); @@ -138,7 +138,7 @@ void AndroidManifestEditorWidget::initializePage() QGroupBox *packageGroupBox = new QGroupBox(mainWidget); topLayout->addWidget(packageGroupBox); - auto setDirtyFunc = [this] { setDirty(); }; + auto setDirtyFunc = [this] { setModified(); }; packageGroupBox->setTitle(tr("Package")); { QFormLayout *formLayout = new QFormLayout(); @@ -206,7 +206,7 @@ void AndroidManifestEditorWidget::initializePage() connect(m_packageNameLineEdit, &QLineEdit::textEdited, this, &AndroidManifestEditorWidget::setPackageName); connect(m_versionCode, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), - this, &AndroidManifestEditorWidget::setDirty); + this, &AndroidManifestEditorWidget::setModified); connect(m_versionNameLinedit, &QLineEdit::textEdited, this, setDirtyFunc); connect(m_androidMinSdkVersion, @@ -524,17 +524,17 @@ void AndroidManifestEditorWidget::updateAfterFileLoad() setActivePage(Source); } -void AndroidManifestEditorWidget::setDirty(bool dirty) +void AndroidManifestEditorWidget::setModified(bool modified) { - if (m_stayClean || dirty == m_dirty) + if (m_stayClean || modified == m_modified) return; - m_dirty = dirty; - emit guiChanged(); + m_modified = modified; + emit modificationChanged(modified); } bool AndroidManifestEditorWidget::isModified() const { - return m_dirty + return m_modified || !m_hIconPath.isEmpty() || !m_mIconPath.isEmpty() || !m_lIconPath.isEmpty(); @@ -819,7 +819,7 @@ void AndroidManifestEditorWidget::syncToWidgets(const QDomDocument &doc) updateAddRemovePermissionButtons(); m_stayClean = false; - m_dirty = false; + m_modified = false; } int extractVersion(const QString &string) @@ -862,7 +862,7 @@ void AndroidManifestEditorWidget::syncToEditor() m_textEditorWidget->setPlainText(result); m_textEditorWidget->document()->setModified(true); - m_dirty = false; + m_modified = false; } namespace { @@ -1253,7 +1253,7 @@ void AndroidManifestEditorWidget::setLDPIIcon() return; m_lIconPath = file; m_lIconButton->setIcon(QIcon(file)); - setDirty(true); + setModified(true); } void AndroidManifestEditorWidget::setMDPIIcon() @@ -1263,7 +1263,7 @@ void AndroidManifestEditorWidget::setMDPIIcon() return; m_mIconPath = file; m_mIconButton->setIcon(QIcon(file)); - setDirty(true); + setModified(true); } void AndroidManifestEditorWidget::setHDPIIcon() @@ -1273,12 +1273,12 @@ void AndroidManifestEditorWidget::setHDPIIcon() return; m_hIconPath = file; m_hIconButton->setIcon(QIcon(file)); - setDirty(true); + setModified(true); } void AndroidManifestEditorWidget::defaultPermissionOrFeatureCheckBoxClicked() { - setDirty(true); + setModified(true); } void AndroidManifestEditorWidget::updateAddRemovePermissionButtons() @@ -1293,7 +1293,7 @@ void AndroidManifestEditorWidget::addPermission() { m_permissionsModel->addPermission(m_permissionsComboBox->currentText()); updateAddRemovePermissionButtons(); - setDirty(true); + setModified(true); } void AndroidManifestEditorWidget::removePermission() @@ -1302,7 +1302,7 @@ void AndroidManifestEditorWidget::removePermission() if (idx.isValid()) m_permissionsModel->removePermission(idx.row()); updateAddRemovePermissionButtons(); - setDirty(true); + setModified(true); } void AndroidManifestEditorWidget::setPackageName() @@ -1312,7 +1312,7 @@ void AndroidManifestEditorWidget::setPackageName() bool valid = checkPackageName(packageName); m_packageNameWarning->setVisible(!valid); m_packageNameWarningIcon->setVisible(!valid); - setDirty(true); + setModified(true); } diff --git a/src/plugins/android/androidmanifesteditorwidget.h b/src/plugins/android/androidmanifesteditorwidget.h index 9dab5e8d1a..899393ca34 100644 --- a/src/plugins/android/androidmanifesteditorwidget.h +++ b/src/plugins/android/androidmanifesteditorwidget.h @@ -101,10 +101,10 @@ public: Core::IEditor *editor() const; TextEditor::TextEditorWidget *textEditorWidget() const; - void setDirty(bool dirty = true); + void setModified(bool modified = true); signals: - void guiChanged(); + void modificationChanged(bool modified); protected: bool eventFilter(QObject *obj, QEvent *event); @@ -150,7 +150,7 @@ private: QString parseComment(QXmlStreamReader &reader, QXmlStreamWriter &writer); void parseUnknownElement(QXmlStreamReader &reader, QXmlStreamWriter &writer); - bool m_dirty; // indicates that we need to call syncToEditor() + bool m_modified; // indicates that we need to call syncToEditor() bool m_stayClean; int m_errorLine; int m_errorColumn; diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp index 5fcccd7838..050bbcb697 100644 --- a/src/plugins/bineditor/bineditorplugin.cpp +++ b/src/plugins/bineditor/bineditorplugin.cpp @@ -320,12 +320,6 @@ public: } public: - bool isModified() const override - { - return isTemporary()/*e.g. memory view*/ ? false - : m_widget->isModified(); - } - bool isFileReadOnly() const override { const FileName fn = filePath(); if (fn.isEmpty()) @@ -391,7 +385,12 @@ public: connect(m_addressEdit, &QLineEdit::editingFinished, this, &BinEditor::jumpToAddress); connect(widget, &BinEditorWidget::modificationChanged, - m_file, &IDocument::changed); + m_file, &IDocument::setModified); + connect(m_file, &IDocument::modificationChanged, + widget, &BinEditorWidget::setModified); + + m_file->setModified(widget->isModified()); + updateCursorPosition(widget->cursorPosition()); } diff --git a/src/plugins/coreplugin/idocument.cpp b/src/plugins/coreplugin/idocument.cpp index fefff6a701..9023eb73ea 100644 --- a/src/plugins/coreplugin/idocument.cpp +++ b/src/plugins/coreplugin/idocument.cpp @@ -79,6 +79,7 @@ public: bool hasWriteWarning = false; bool restored = false; bool isSuspendAllowed = false; + bool isModified = false; }; } // namespace Internal @@ -200,7 +201,17 @@ bool IDocument::shouldAutoSave() const bool IDocument::isModified() const { - return false; + return d->isModified; +} + +void IDocument::setModified(bool modified) +{ + if (d->isModified == modified) + return; + + d->isModified = modified; + emit modificationChanged(modified); + emit changed(); } bool IDocument::isSaveAsAllowed() const diff --git a/src/plugins/coreplugin/idocument.h b/src/plugins/coreplugin/idocument.h index acb1feb58b..79cc403e6f 100644 --- a/src/plugins/coreplugin/idocument.h +++ b/src/plugins/coreplugin/idocument.h @@ -106,6 +106,9 @@ public: bool isTemporary() const; void setTemporary(bool temporary); + bool isModified() const; + void setModified(bool modified); + virtual QString fallbackSaveAsPath() const; virtual QString fallbackSaveAsFileName() const; @@ -113,7 +116,6 @@ public: void setMimeType(const QString &mimeType); virtual bool shouldAutoSave() const; - virtual bool isModified() const; virtual bool isSaveAsAllowed() const; bool isSuspendAllowed() const; void setSuspendAllowed(bool value); @@ -136,6 +138,8 @@ signals: // For meta data changes: file name, modified state, ... void changed(); + void modificationChanged(bool modified); + // For changes in the contents of the document void contentsChanged(); diff --git a/src/plugins/designer/formwindowfile.cpp b/src/plugins/designer/formwindowfile.cpp index 44ec146b77..a6c58617fc 100644 --- a/src/plugins/designer/formwindowfile.cpp +++ b/src/plugins/designer/formwindowfile.cpp @@ -59,6 +59,9 @@ FormWindowFile::FormWindowFile(QDesignerFormWindowInterface *form, QObject *pare connect(m_formWindow->commandHistory(), &QUndoStack::indexChanged, this, &FormWindowFile::setShouldAutoSave); connect(m_formWindow.data(), &QDesignerFormWindowInterface::changed, this, &FormWindowFile::updateIsModified); + connect(this, &IDocument::modificationChanged, m_formWindow.data(), &QDesignerFormWindowInterface::setDirty); + + setModified(m_formWindow->isDirty()); m_resourceHandler = new ResourceHandler(form); connect(this, &FormWindowFile::filePathChanged, @@ -186,10 +189,7 @@ void FormWindowFile::updateIsModified() bool value = m_formWindow && m_formWindow->isDirty(); if (value) emit contentsChanged(); - if (value == m_isModified) - return; - m_isModified = value; - emit changed(); + setModified(value); } bool FormWindowFile::shouldAutoSave() const @@ -197,11 +197,6 @@ bool FormWindowFile::shouldAutoSave() const return m_shouldAutoSave; } -bool FormWindowFile::isModified() const -{ - return m_formWindow && m_formWindow->isDirty(); -} - bool FormWindowFile::isSaveAsAllowed() const { return true; diff --git a/src/plugins/designer/formwindowfile.h b/src/plugins/designer/formwindowfile.h index 7ee62bb951..f12e854a2a 100644 --- a/src/plugins/designer/formwindowfile.h +++ b/src/plugins/designer/formwindowfile.h @@ -53,7 +53,6 @@ public: QByteArray contents() const override; bool setContents(const QByteArray &contents) override; bool shouldAutoSave() const override; - bool isModified() const override; bool isSaveAsAllowed() const override; bool reload(QString *errorString, ReloadFlag flag, ChangeType type) override; QString fallbackSaveAsFileName() const override; @@ -82,7 +81,6 @@ private: // Might actually go out of scope before the IEditor due // to deleting the WidgetHost which owns it. QPointer<QDesignerFormWindowInterface> m_formWindow; - bool m_isModified = false; ResourceHandler *m_resourceHandler = nullptr; }; diff --git a/src/plugins/modeleditor/extpropertiesmview.cpp b/src/plugins/modeleditor/extpropertiesmview.cpp index 529f251dca..2037621658 100644 --- a/src/plugins/modeleditor/extpropertiesmview.cpp +++ b/src/plugins/modeleditor/extpropertiesmview.cpp @@ -92,7 +92,7 @@ void ExtPropertiesMView::onConfigPathChanged(const QString &path) if (path.isEmpty()) { if (!project->configPath().isEmpty()) { project->setConfigPath(QString()); - m_projectController->setModified(); + m_projectController->setModified(true); modified = true; } } else { @@ -103,7 +103,7 @@ void ExtPropertiesMView::onConfigPathChanged(const QString &path) QString configPath = projectDir.relativeFilePath(absConfigPath.filePath()); if (configPath != project->configPath()) { project->setConfigPath(configPath); - m_projectController->setModified(); + m_projectController->setModified(true); modified = true; } } diff --git a/src/plugins/modeleditor/modeldocument.cpp b/src/plugins/modeleditor/modeldocument.cpp index e75ff0760e..82a38f19ef 100644 --- a/src/plugins/modeleditor/modeldocument.cpp +++ b/src/plugins/modeleditor/modeldocument.cpp @@ -94,7 +94,7 @@ bool ModelDocument::save(QString *errorString, const QString &name, bool autoSav } if (autoSave) { - d->documentController->projectController()->setModified(); + d->documentController->projectController()->setModified(true); } else { setFilePath(Utils::FileName::fromString(d->documentController->projectController()->project()->fileName())); emit changed(); @@ -108,11 +108,6 @@ bool ModelDocument::shouldAutoSave() const return isModified(); } -bool ModelDocument::isModified() const -{ - return d->documentController ? d->documentController->projectController()->isModified() : false; -} - bool ModelDocument::isSaveAsAllowed() const { return true; @@ -140,6 +135,10 @@ Core::IDocument::OpenResult ModelDocument::load(QString *errorString, const QStr { d->documentController = ModelEditorPlugin::modelsManager()->createModel(this); connect(d->documentController, &qmt::DocumentController::changed, this, &IDocument::changed); + connect(d->documentController, &qmt::DocumentController::modificationChanged, this, &IDocument::setModified); + connect(this, &IDocument::modificationChanged, + d->documentController->projectController(), &qmt::ProjectController::setModified); + setModified(d->documentController->projectController()->isModified()); try { d->documentController->loadProject(fileName); diff --git a/src/plugins/modeleditor/modeldocument.h b/src/plugins/modeleditor/modeldocument.h index f83085866a..2d0a0aafee 100644 --- a/src/plugins/modeleditor/modeldocument.h +++ b/src/plugins/modeleditor/modeldocument.h @@ -52,7 +52,6 @@ public: const QString &realFileName) override; bool save(QString *errorString, const QString &fileName, bool autoSave) override; bool shouldAutoSave() const override; - bool isModified() const override; bool isSaveAsAllowed() const override; bool reload(QString *errorString, ReloadFlag flag, ChangeType type) override; diff --git a/src/plugins/resourceeditor/resourceeditorw.cpp b/src/plugins/resourceeditor/resourceeditorw.cpp index 2058c3a2ea..765aa5e110 100644 --- a/src/plugins/resourceeditor/resourceeditorw.cpp +++ b/src/plugins/resourceeditor/resourceeditorw.cpp @@ -63,10 +63,14 @@ ResourceEditorDocument::ResourceEditorDocument(QObject *parent) : setId(ResourceEditor::Constants::RESOURCEEDITOR_ID); setMimeType(QLatin1String(ResourceEditor::Constants::C_RESOURCE_MIMETYPE)); connect(m_model, &RelativeResourceModel::dirtyChanged, - this, &ResourceEditorDocument::dirtyChanged); + this, &ResourceEditorDocument::setModified); + connect(this, &IDocument::modificationChanged, + m_model, &RelativeResourceModel::setDirty); connect(m_model, &ResourceModel::contentsChanged, this, &IDocument::contentsChanged); + setModified(m_model->dirty()); + if (debugResourceEditorW) qDebug() << "ResourceEditorFile::ResourceEditorFile()"; } @@ -124,20 +128,16 @@ Core::IDocument::OpenResult ResourceEditorDocument::open(QString *errorString, if (debugResourceEditorW) qDebug() << "ResourceEditorW::open: " << fileName; - setBlockDirtyChanged(true); - m_model->setFileName(realFileName); OpenResult openResult = m_model->reload(); if (openResult != OpenResult::Success) { *errorString = m_model->errorMessage(); - setBlockDirtyChanged(false); emit loaded(false); return openResult; } setFilePath(FileName::fromString(fileName)); - setBlockDirtyChanged(false); m_model->setDirty(fileName != realFileName); m_shouldAutoSave = false; @@ -155,12 +155,10 @@ bool ResourceEditorDocument::save(QString *errorString, const QString &name, boo if (actualName.isEmpty()) return false; - m_blockDirtyChanged = true; m_model->setFileName(actualName.toString()); if (!m_model->save()) { *errorString = m_model->errorMessage(); m_model->setFileName(oldFileName.toString()); - m_blockDirtyChanged = false; return false; } @@ -168,12 +166,10 @@ bool ResourceEditorDocument::save(QString *errorString, const QString &name, boo if (autoSave) { m_model->setFileName(oldFileName.toString()); m_model->setDirty(true); - m_blockDirtyChanged = false; return true; } setFilePath(actualName); - m_blockDirtyChanged = false; emit changed(); return true; @@ -213,11 +209,6 @@ void ResourceEditorDocument::setFilePath(const FileName &newName) IDocument::setFilePath(newName); } -void ResourceEditorDocument::setBlockDirtyChanged(bool value) -{ - m_blockDirtyChanged = value; -} - RelativeResourceModel *ResourceEditorDocument::model() const { return m_model; @@ -238,11 +229,6 @@ bool ResourceEditorDocument::shouldAutoSave() const return m_shouldAutoSave; } -bool ResourceEditorDocument::isModified() const -{ - return m_model->dirty(); -} - bool ResourceEditorDocument::isSaveAsAllowed() const { return true; @@ -264,16 +250,6 @@ bool ResourceEditorDocument::reload(QString *errorString, ReloadFlag flag, Chang return true; } -void ResourceEditorDocument::dirtyChanged(bool dirty) -{ - if (m_blockDirtyChanged) - return; // We emit changed() afterwards, unless it was an autosave - - if (debugResourceEditorW) - qDebug() << " ResourceEditorW::dirtyChanged" << dirty; - emit changed(); -} - void ResourceEditorW::onUndoStackChanged(bool canUndo, bool canRedo) { m_plugin->onUndoStackChanged(this, canUndo, canRedo); diff --git a/src/plugins/resourceeditor/resourceeditorw.h b/src/plugins/resourceeditor/resourceeditorw.h index 3d8d139e3c..0ac7005df4 100644 --- a/src/plugins/resourceeditor/resourceeditorw.h +++ b/src/plugins/resourceeditor/resourceeditorw.h @@ -58,11 +58,9 @@ public: QByteArray contents() const override; bool setContents(const QByteArray &contents) override; bool shouldAutoSave() const override; - bool isModified() const override; bool isSaveAsAllowed() const override; bool reload(QString *errorString, ReloadFlag flag, ChangeType type) override; void setFilePath(const Utils::FileName &newName) override; - void setBlockDirtyChanged(bool value); RelativeResourceModel *model() const; void setShouldAutoSave(bool save); @@ -71,10 +69,8 @@ signals: void loaded(bool success); private: - void dirtyChanged(bool); RelativeResourceModel *m_model; - bool m_blockDirtyChanged = false; bool m_shouldAutoSave = false; }; diff --git a/src/plugins/scxmleditor/common/mainwidget.cpp b/src/plugins/scxmleditor/common/mainwidget.cpp index 09c00c0f62..e68b573600 100644 --- a/src/plugins/scxmleditor/common/mainwidget.cpp +++ b/src/plugins/scxmleditor/common/mainwidget.cpp @@ -789,6 +789,11 @@ bool MainWidget::isDirty() const return m_document->changed(); } +void MainWidget::setDirty(bool dirty) +{ + m_document->setChanged(dirty); +} + void MainWidget::fitToView() { StateView *view = m_views.last(); diff --git a/src/plugins/scxmleditor/common/mainwidget.h b/src/plugins/scxmleditor/common/mainwidget.h index 6b75895b0f..64e17a9730 100644 --- a/src/plugins/scxmleditor/common/mainwidget.h +++ b/src/plugins/scxmleditor/common/mainwidget.h @@ -87,6 +87,7 @@ public: QString contents() const; QUndoStack *undoStack() const; bool isDirty() const; + void setDirty(bool dirty); void newDocument(); void refresh(); OutputPane::WarningModel *warningModel() const; diff --git a/src/plugins/scxmleditor/plugin_interface/scxmldocument.cpp b/src/plugins/scxmleditor/plugin_interface/scxmldocument.cpp index 22cbdf4d4e..1ad7b9ba2f 100644 --- a/src/plugins/scxmleditor/plugin_interface/scxmldocument.cpp +++ b/src/plugins/scxmleditor/plugin_interface/scxmldocument.cpp @@ -643,6 +643,14 @@ bool ScxmlDocument::changed() const return !m_undoStack->isClean(); } +void ScxmlDocument::setChanged(bool modified) +{ + if (modified) + ; // we lack a setDirty method in QUndoStack + else + m_undoStack->setClean(); +} + ScxmlTag *ScxmlDocument::scxmlRootTag() const { ScxmlTag *tag = rootTag(); diff --git a/src/plugins/scxmleditor/plugin_interface/scxmldocument.h b/src/plugins/scxmleditor/plugin_interface/scxmldocument.h index 19506731f2..5d654d4d0b 100644 --- a/src/plugins/scxmleditor/plugin_interface/scxmldocument.h +++ b/src/plugins/scxmleditor/plugin_interface/scxmldocument.h @@ -156,6 +156,7 @@ public: * @return - true if changed, false otherwise */ bool changed() const; + void setChanged(bool modified); /** * @brief rootTag - return rootTag of the document @@ -277,6 +278,7 @@ private: ScxmlTag *createScxmlTag(); QString m_fileName; QUndoStack *m_undoStack; + int m_cleanIndex; QVector<ScxmlTag*> m_tags; QHash<QString, int> m_nextIdHash; QHash<QString, QString> m_idMap; diff --git a/src/plugins/scxmleditor/scxmleditordocument.cpp b/src/plugins/scxmleditor/scxmleditordocument.cpp index d7c09b9e88..97569bc7d2 100644 --- a/src/plugins/scxmleditor/scxmleditordocument.cpp +++ b/src/plugins/scxmleditor/scxmleditordocument.cpp @@ -52,9 +52,12 @@ ScxmlEditorDocument::ScxmlEditorDocument(MainWidget *designWidget, QObject *pare // Designer needs UTF-8 regardless of settings. setCodec(QTextCodec::codecForName("UTF-8")); - connect(m_designWidget.data(), &Common::MainWidget::dirtyChanged, this, [this]{ - emit changed(); + connect(m_designWidget.data(), &Common::MainWidget::dirtyChanged, this, [this](bool modified){ + setModified(modified); }); + connect(this, &IDocument::modificationChanged, m_designWidget.data(), &Common::MainWidget::setDirty); + + setModified(m_designWidget->isDirty()); } Core::IDocument::OpenResult ScxmlEditorDocument::open(QString *errorString, const QString &fileName, const QString &realFileName) @@ -129,11 +132,6 @@ MainWidget *ScxmlEditorDocument::designWidget() const return m_designWidget; } -bool ScxmlEditorDocument::isModified() const -{ - return m_designWidget && m_designWidget->isDirty(); -} - bool ScxmlEditorDocument::reload(QString *errorString, ReloadFlag flag, ChangeType type) { if (flag == FlagIgnore) { diff --git a/src/plugins/scxmleditor/scxmleditordocument.h b/src/plugins/scxmleditor/scxmleditordocument.h index 2ccb98213d..a3211c656e 100644 --- a/src/plugins/scxmleditor/scxmleditordocument.h +++ b/src/plugins/scxmleditor/scxmleditordocument.h @@ -53,7 +53,6 @@ public: bool save(QString *errorString, const QString &fileName, bool autoSave) override; bool shouldAutoSave() const override; bool isSaveAsAllowed() const override; - bool isModified() const override; bool reload(QString *errorString, ReloadFlag flag, ChangeType type) override; // Internal diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index e3e7354644..418a0bd11a 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -236,13 +236,16 @@ void TextDocumentPrivate::updateRevisions() TextDocument::TextDocument(Id id) : d(new TextDocumentPrivate) { - QObject::connect(&d->m_document, &QTextDocument::modificationChanged, [this](bool modified) { + connect(&d->m_document, &QTextDocument::modificationChanged, [this](bool modified) { // we only want to update the block revisions when going back to the saved version, // e.g. with undo if (!modified) d->updateRevisions(); - emit changed(); + setModified(modified); }); + connect(this, &IDocument::modificationChanged, &d->m_document, &QTextDocument::setModified); + + setModified(d->m_document.isModified()); connect(&d->m_document, &QTextDocument::contentsChanged, this, &Core::IDocument::contentsChanged); @@ -595,11 +598,6 @@ bool TextDocument::isFileReadOnly() const return d->m_fileIsReadOnly; } -bool TextDocument::isModified() const -{ - return d->m_document.isModified(); -} - void TextDocument::checkPermissions() { bool previousReadOnly = d->m_fileIsReadOnly; diff --git a/src/plugins/texteditor/textdocument.h b/src/plugins/texteditor/textdocument.h index 6aa2e0bd7c..78cd3dd4b8 100644 --- a/src/plugins/texteditor/textdocument.h +++ b/src/plugins/texteditor/textdocument.h @@ -103,7 +103,6 @@ public: bool setContents(const QByteArray &contents) override; bool shouldAutoSave() const override; bool isFileReadOnly() const override; - bool isModified() const override; bool isSaveAsAllowed() const override; void checkPermissions() override; bool reload(QString *errorString, ReloadFlag flag, ChangeType type) override; diff --git a/src/plugins/vcsbase/submiteditorfile.cpp b/src/plugins/vcsbase/submiteditorfile.cpp index 9136118bf7..9a38537078 100644 --- a/src/plugins/vcsbase/submiteditorfile.cpp +++ b/src/plugins/vcsbase/submiteditorfile.cpp @@ -44,7 +44,6 @@ using namespace Utils; SubmitEditorFile::SubmitEditorFile(const VcsBaseSubmitEditorParameters *parameters, VcsBaseSubmitEditor *parent) : Core::IDocument(parent), - m_modified(false), m_editor(parent) { setId(parameters->id); @@ -83,14 +82,6 @@ bool SubmitEditorFile::setContents(const QByteArray &contents) return m_editor->setFileContents(contents); } -void SubmitEditorFile::setModified(bool modified) -{ - if (m_modified == modified) - return; - m_modified = modified; - emit changed(); -} - bool SubmitEditorFile::save(QString *errorString, const QString &fileName, bool autoSave) { const FileName fName = fileName.isEmpty() ? filePath() : FileName::fromString(fileName); diff --git a/src/plugins/vcsbase/submiteditorfile.h b/src/plugins/vcsbase/submiteditorfile.h index e2da2f72fa..82263f9ef0 100644 --- a/src/plugins/vcsbase/submiteditorfile.h +++ b/src/plugins/vcsbase/submiteditorfile.h @@ -45,14 +45,10 @@ public: QByteArray contents() const override; bool setContents(const QByteArray &contents) override; - bool isModified() const override { return m_modified; } bool save(QString *errorString, const QString &fileName, bool autoSave) override; ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const override; - void setModified(bool modified = true); - private: - bool m_modified; VcsBaseSubmitEditor *m_editor; }; |