ResourceEditor: Hide ResourceDocument class definition

... and simplify setup a bit.

Change-Id: Ib9aedbf9ed8449d76e2e6ceb7b4cc9063e4756ea
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
hjk
2024-01-16 18:43:18 +01:00
parent b5b356c680
commit 9d72867ab6
5 changed files with 80 additions and 128 deletions

View File

@@ -555,8 +555,7 @@ void ResourceFile::clearPrefixList()
** ResourceModel ** ResourceModel
*/ */
ResourceModel::ResourceModel(QObject *parent) ResourceModel::ResourceModel()
: QAbstractItemModel(parent), m_dirty(false)
{ {
static QIcon resourceFolderIcon = Utils::FileIconProvider::directoryIcon(QLatin1String(ProjectExplorer::Constants::FILEOVERLAY_QRC)); static QIcon resourceFolderIcon = Utils::FileIconProvider::directoryIcon(QLatin1String(ProjectExplorer::Constants::FILEOVERLAY_QRC));
m_prefixIcon = resourceFolderIcon; m_prefixIcon = resourceFolderIcon;
@@ -1191,11 +1190,7 @@ void PrefixEntryBackup::restore() const
} }
} }
RelativeResourceModel::RelativeResourceModel(QObject *parent) : RelativeResourceModel::RelativeResourceModel() = default;
ResourceModel(parent),
m_resourceDragEnabled(false)
{
}
Qt::ItemFlags RelativeResourceModel::flags(const QModelIndex &index) const Qt::ItemFlags RelativeResourceModel::flags(const QModelIndex &index) const
{ {

View File

@@ -176,7 +176,7 @@ class ResourceModel : public QAbstractItemModel
Q_OBJECT Q_OBJECT
public: public:
explicit ResourceModel(QObject *parent = nullptr); ResourceModel();
QModelIndex index(int row, int column, const QModelIndex &parent = {}) const override; QModelIndex index(int row, int column, const QModelIndex &parent = {}) const override;
QModelIndex parent(const QModelIndex &index) const override; QModelIndex parent(const QModelIndex &index) const override;
@@ -250,7 +250,7 @@ signals:
private: private:
ResourceFile m_resource_file; ResourceFile m_resource_file;
bool m_dirty; bool m_dirty = false;
QString m_lastResourceDir; QString m_lastResourceDir;
QIcon m_prefixIcon; QIcon m_prefixIcon;
}; };
@@ -275,10 +275,10 @@ public:
virtual ~EntryBackup() = default; virtual ~EntryBackup() = default;
}; };
class RelativeResourceModel : public ResourceModel class RelativeResourceModel final : public ResourceModel
{ {
public: public:
RelativeResourceModel(QObject *parent = nullptr); RelativeResourceModel();
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
{ {
@@ -301,7 +301,7 @@ public:
EntryBackup * removeEntry(const QModelIndex &index); EntryBackup * removeEntry(const QModelIndex &index);
private: private:
bool m_resourceDragEnabled; bool m_resourceDragEnabled = false;
}; };
} // ResourceEditor::Internal } // ResourceEditor::Internal

View File

@@ -106,8 +106,6 @@ public:
void updateContextActions(Node *node); void updateContextActions(Node *node);
ResourceEditorW * currentEditor() const;
// project tree's folder context menu // project tree's folder context menu
QAction *m_addPrefix = nullptr; QAction *m_addPrefix = nullptr;
QAction *m_removePrefix = nullptr; QAction *m_removePrefix = nullptr;

View File

@@ -15,6 +15,7 @@
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditorfactory.h> #include <coreplugin/editormanager/ieditorfactory.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/idocument.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/fsengine/fileiconprovider.h> #include <utils/fsengine/fileiconprovider.h>
@@ -34,19 +35,53 @@ namespace ResourceEditor::Internal {
enum { debugResourceEditorW = 0 }; enum { debugResourceEditorW = 0 };
QAction *m_redoAction = nullptr; static QAction *s_redoAction = nullptr;
QAction *m_undoAction = nullptr; static QAction *s_undoAction = nullptr;
QAction *m_refreshAction = nullptr; static QAction *s_refreshAction = nullptr;
ResourceEditorDocument::ResourceEditorDocument(QObject *parent) : class ResourceEditorDocument final : public IDocument
IDocument(parent), {
m_model(new RelativeResourceModel(this)) Q_OBJECT
Q_PROPERTY(QString plainText READ plainText STORED false) // For access by code pasters
public:
ResourceEditorDocument(QObject *parent = nullptr);
OpenResult open(QString *errorString, const FilePath &filePath,
const FilePath &realFilePath) final;
QString plainText() const;
QByteArray contents() const final;
bool setContents(const QByteArray &contents) final;
bool shouldAutoSave() const final { return m_shouldAutoSave; }
bool isModified() const final { return m_model.dirty(); }
bool isSaveAsAllowed() const final { return true; }
bool reload(QString *errorString, ReloadFlag flag, ChangeType type) final;
void setFilePath(const FilePath &newName) final;
void setBlockDirtyChanged(bool value) { m_blockDirtyChanged = value; }
RelativeResourceModel *model() { return &m_model; }
void setShouldAutoSave(bool save) { m_shouldAutoSave = save; }
signals:
void loaded(bool success);
private:
bool saveImpl(QString *errorString, const FilePath &filePath, bool autoSave) final;
void dirtyChanged(bool);
RelativeResourceModel m_model;
bool m_blockDirtyChanged = false;
bool m_shouldAutoSave = false;
};
ResourceEditorDocument::ResourceEditorDocument(QObject *parent)
: IDocument(parent)
{ {
setId(ResourceEditor::Constants::RESOURCEEDITOR_ID); setId(ResourceEditor::Constants::RESOURCEEDITOR_ID);
setMimeType(Utils::Constants::RESOURCE_MIMETYPE); setMimeType(Utils::Constants::RESOURCE_MIMETYPE);
connect(m_model, &RelativeResourceModel::dirtyChanged, connect(&m_model, &RelativeResourceModel::dirtyChanged,
this, &ResourceEditorDocument::dirtyChanged); this, &ResourceEditorDocument::dirtyChanged);
connect(m_model, &ResourceModel::contentsChanged, connect(&m_model, &ResourceModel::contentsChanged,
this, &IDocument::contentsChanged); this, &IDocument::contentsChanged);
if (debugResourceEditorW) if (debugResourceEditorW)
@@ -69,9 +104,9 @@ public:
} }
IDocument *document() const final { return m_resourceDocument; } IDocument *document() const final { return m_resourceDocument; }
QWidget *toolBar() final { return m_toolBar; }
QByteArray saveState() const final; QByteArray saveState() const final;
void restoreState(const QByteArray &state) final; void restoreState(const QByteArray &state) final;
QWidget *toolBar() final;
private: private:
void onUndoStackChanged(bool canUndo, bool canRedo); void onUndoStackChanged(bool canUndo, bool canRedo);
@@ -158,11 +193,11 @@ IDocument::OpenResult ResourceEditorDocument::open(QString *errorString,
setBlockDirtyChanged(true); setBlockDirtyChanged(true);
m_model->setFilePath(realFilePath); m_model.setFilePath(realFilePath);
OpenResult openResult = m_model->reload(); OpenResult openResult = m_model.reload();
if (openResult != OpenResult::Success) { if (openResult != OpenResult::Success) {
*errorString = m_model->errorMessage(); *errorString = m_model.errorMessage();
setBlockDirtyChanged(false); setBlockDirtyChanged(false);
emit loaded(false); emit loaded(false);
return openResult; return openResult;
@@ -170,7 +205,7 @@ IDocument::OpenResult ResourceEditorDocument::open(QString *errorString,
setFilePath(filePath); setFilePath(filePath);
setBlockDirtyChanged(false); setBlockDirtyChanged(false);
m_model->setDirty(filePath != realFilePath); m_model.setDirty(filePath != realFilePath);
m_shouldAutoSave = false; m_shouldAutoSave = false;
emit loaded(true); emit loaded(true);
@@ -186,18 +221,18 @@ bool ResourceEditorDocument::saveImpl(QString *errorString, const FilePath &file
return false; return false;
m_blockDirtyChanged = true; m_blockDirtyChanged = true;
m_model->setFilePath(filePath); m_model.setFilePath(filePath);
if (!m_model->save()) { if (!m_model.save()) {
*errorString = m_model->errorMessage(); *errorString = m_model.errorMessage();
m_model->setFilePath(this->filePath()); m_model.setFilePath(this->filePath());
m_blockDirtyChanged = false; m_blockDirtyChanged = false;
return false; return false;
} }
m_shouldAutoSave = false; m_shouldAutoSave = false;
if (autoSave) { if (autoSave) {
m_model->setFilePath(this->filePath()); m_model.setFilePath(this->filePath());
m_model->setDirty(true); m_model.setDirty(true);
m_blockDirtyChanged = false; m_blockDirtyChanged = false;
return true; return true;
} }
@@ -211,12 +246,12 @@ bool ResourceEditorDocument::saveImpl(QString *errorString, const FilePath &file
QString ResourceEditorDocument::plainText() const QString ResourceEditorDocument::plainText() const
{ {
return m_model->contents(); return m_model.contents();
} }
QByteArray ResourceEditorDocument::contents() const QByteArray ResourceEditorDocument::contents() const
{ {
return m_model->contents().toUtf8(); return m_model.contents().toUtf8();
} }
bool ResourceEditorDocument::setContents(const QByteArray &contents) bool ResourceEditorDocument::setContents(const QByteArray &contents)
@@ -226,10 +261,10 @@ bool ResourceEditorDocument::setContents(const QByteArray &contents)
if (!saver.finalize(ICore::dialogParent())) if (!saver.finalize(ICore::dialogParent()))
return false; return false;
const FilePath originalFileName = m_model->filePath(); const FilePath originalFileName = m_model.filePath();
m_model->setFilePath(saver.filePath()); m_model.setFilePath(saver.filePath());
const bool success = (m_model->reload() == OpenResult::Success); const bool success = (m_model.reload() == OpenResult::Success);
m_model->setFilePath(originalFileName); m_model.setFilePath(originalFileName);
m_shouldAutoSave = false; m_shouldAutoSave = false;
if (debugResourceEditorW) if (debugResourceEditorW)
qDebug() << "ResourceEditorW::createNew: " << contents << " (" << saver.filePath() << ") returns " << success; qDebug() << "ResourceEditorW::createNew: " << contents << " (" << saver.filePath() << ") returns " << success;
@@ -239,25 +274,10 @@ bool ResourceEditorDocument::setContents(const QByteArray &contents)
void ResourceEditorDocument::setFilePath(const FilePath &newName) void ResourceEditorDocument::setFilePath(const FilePath &newName)
{ {
m_model->setFilePath(newName); m_model.setFilePath(newName);
IDocument::setFilePath(newName); IDocument::setFilePath(newName);
} }
void ResourceEditorDocument::setBlockDirtyChanged(bool value)
{
m_blockDirtyChanged = value;
}
RelativeResourceModel *ResourceEditorDocument::model() const
{
return m_model;
}
void ResourceEditorDocument::setShouldAutoSave(bool save)
{
m_shouldAutoSave = save;
}
QByteArray ResourceEditorW::saveState() const QByteArray ResourceEditorW::saveState() const
{ {
QByteArray bytes; QByteArray bytes;
@@ -274,25 +294,7 @@ void ResourceEditorW::restoreState(const QByteArray &state)
m_resourceEditor->restoreState(splitterState); m_resourceEditor->restoreState(splitterState);
} }
QWidget *ResourceEditorW::toolBar()
{
return m_toolBar;
}
bool ResourceEditorDocument::shouldAutoSave() const
{
return m_shouldAutoSave;
}
bool ResourceEditorDocument::isModified() const
{
return m_model->dirty();
}
bool ResourceEditorDocument::isSaveAsAllowed() const
{
return true;
}
bool ResourceEditorDocument::reload(QString *errorString, ReloadFlag flag, ChangeType type) bool ResourceEditorDocument::reload(QString *errorString, ReloadFlag flag, ChangeType type)
{ {
@@ -318,8 +320,8 @@ void ResourceEditorDocument::dirtyChanged(bool dirty)
void ResourceEditorW::onUndoStackChanged(bool canUndo, bool canRedo) void ResourceEditorW::onUndoStackChanged(bool canUndo, bool canRedo)
{ {
if (currentEditor() == this) { if (currentEditor() == this) {
m_undoAction->setEnabled(canUndo); s_undoAction->setEnabled(canUndo);
m_redoAction->setEnabled(canRedo); s_redoAction->setEnabled(canRedo);
} }
} }
@@ -394,24 +396,24 @@ void setupResourceEditor(QObject *guard)
// Register undo and redo // Register undo and redo
const Context context(Constants::C_RESOURCEEDITOR); const Context context(Constants::C_RESOURCEEDITOR);
m_undoAction = new QAction(Tr::tr("&Undo"), guard); s_undoAction = new QAction(Tr::tr("&Undo"), guard);
m_redoAction = new QAction(Tr::tr("&Redo"), guard); s_redoAction = new QAction(Tr::tr("&Redo"), guard);
m_refreshAction = new QAction(Tr::tr("Recheck Existence of Referenced Files"), guard); s_refreshAction = new QAction(Tr::tr("Recheck Existence of Referenced Files"), guard);
ActionManager::registerAction(m_undoAction, Core::Constants::UNDO, context); ActionManager::registerAction(s_undoAction, Core::Constants::UNDO, context);
ActionManager::registerAction(m_redoAction, Core::Constants::REDO, context); ActionManager::registerAction(s_redoAction, Core::Constants::REDO, context);
ActionManager::registerAction(m_refreshAction, Constants::REFRESH, context); ActionManager::registerAction(s_refreshAction, Constants::REFRESH, context);
QObject::connect(m_undoAction, &QAction::triggered, guard, [] { QObject::connect(s_undoAction, &QAction::triggered, guard, [] {
if (ResourceEditorW *editor = ResourceEditorW::currentEditor()) if (ResourceEditorW *editor = ResourceEditorW::currentEditor())
editor->onUndo(); editor->onUndo();
}); });
QObject::connect(m_redoAction, &QAction::triggered, guard, [] { QObject::connect(s_redoAction, &QAction::triggered, guard, [] {
if (ResourceEditorW *editor = ResourceEditorW::currentEditor()) if (ResourceEditorW *editor = ResourceEditorW::currentEditor())
editor->onRedo(); editor->onRedo();
}); });
QObject::connect(m_refreshAction, &QAction::triggered, guard, [] { QObject::connect(s_refreshAction, &QAction::triggered, guard, [] {
if (ResourceEditorW *editor = ResourceEditorW::currentEditor()) if (ResourceEditorW *editor = ResourceEditorW::currentEditor())
editor->onRefresh(); editor->onRefresh();
}); });

View File

@@ -3,53 +3,10 @@
#pragma once #pragma once
#include <coreplugin/idocument.h> #include <QObject>
namespace ResourceEditor::Internal { namespace ResourceEditor::Internal {
class RelativeResourceModel;
class ResourceEditorW;
class QrcEditor;
class ResourceEditorDocument
: public Core::IDocument
{
Q_OBJECT
Q_PROPERTY(QString plainText READ plainText STORED false) // For access by code pasters
public:
ResourceEditorDocument(QObject *parent = nullptr);
//IDocument
OpenResult open(QString *errorString, const Utils::FilePath &filePath,
const Utils::FilePath &realFilePath) override;
QString plainText() const;
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::FilePath &newName) override;
void setBlockDirtyChanged(bool value);
RelativeResourceModel *model() const;
void setShouldAutoSave(bool save);
signals:
void loaded(bool success);
protected:
bool saveImpl(QString *errorString, const Utils::FilePath &filePath, bool autoSave) override;
private:
void dirtyChanged(bool);
RelativeResourceModel *m_model;
bool m_blockDirtyChanged = false;
bool m_shouldAutoSave = false;
};
void setupResourceEditor(QObject *guard); void setupResourceEditor(QObject *guard);
} // ResourceEditor::Internal } // ResourceEditor::Internal