forked from qt-creator/qt-creator
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:
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
@@ -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();
|
||||||
});
|
});
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user