载入中...
搜索中...
未找到
EditorTransactionService.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
6
7namespace eve::editor {
8
18public:
20 virtual ~IEditorTransactionBackend() = default;
21
23 [[nodiscard]] virtual Result<TransactionId> begin(TransactionSpec specification) = 0;
25 [[nodiscard]] virtual Result<void> append(DomainOperation operation) = 0;
27 [[nodiscard]] virtual Result<EditorDryRunReport> preview() = 0;
29 [[nodiscard]] virtual Result<TransactionReceipt> commit() = 0;
31 [[nodiscard]] virtual Result<void> discard() = 0;
33 [[nodiscard]] virtual Result<TransactionReceipt> retry() = 0;
35 [[nodiscard]] virtual Result<TransactionReceipt> undo() = 0;
37 [[nodiscard]] virtual Result<TransactionReceipt> redo() = 0;
38
40 [[nodiscard]] virtual bool active() const noexcept = 0;
42 [[nodiscard]] virtual bool canUndo() const noexcept = 0;
44 [[nodiscard]] virtual bool canRedo() const noexcept = 0;
45};
46
49public:
51 explicit LocalTransactionBackend(IEditAuthority* authority = nullptr) : consumer_(authority) {}
52
54 [[nodiscard]] Result<void> setAuthority(IEditAuthority* authority);
56 [[nodiscard]] Result<TransactionId> begin(TransactionSpec specification) override;
58 [[nodiscard]] Result<void> append(DomainOperation operation) override;
60 [[nodiscard]] Result<EditorDryRunReport> preview() override;
62 [[nodiscard]] Result<TransactionReceipt> commit() override;
64 [[nodiscard]] Result<void> discard() override;
66 [[nodiscard]] Result<void> rollback();
68 [[nodiscard]] Result<TransactionReceipt> retry() override;
70 [[nodiscard]] Result<TransactionReceipt> undo() override;
72 [[nodiscard]] Result<TransactionReceipt> redo() override;
73
75 [[nodiscard]] bool active() const noexcept override { return consumer_.active(); }
77 [[nodiscard]] bool canUndo() const noexcept override { return consumer_.canUndo(); }
79 [[nodiscard]] bool canRedo() const noexcept override { return consumer_.canRedo(); }
81 void clear() { consumer_.clear(); }
82
83private:
87 static Result<void> project(eve::Result<void>&& result);
88
90};
91
92} // namespace eve::editor
ActionParameterOperation operation
#define EVENGINE_API_ORCHESTRATION
Definition Export.h:111
float begin
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Final validation and commit boundary for editor mutations.
Editor consumer of the common transaction participant/coordinator protocol.
Transaction boundary consumed by editor property and other UI models.
virtual Result< TransactionReceipt > redo()=0
Reapply the latest compensated transaction.
virtual Result< void > discard()=0
Discard pending work after reverting any provisional preview.
virtual Result< TransactionReceipt > undo()=0
Compensate the latest committed transaction.
virtual Result< TransactionReceipt > commit()=0
Publish the pending transaction and retain it for undo.
virtual Result< TransactionReceipt > retry()=0
Retry a failed commit while retaining its original operation list.
virtual ~IEditorTransactionBackend()=default
Releases IEditorTransactionBackend resources.
virtual Result< void > append(DomainOperation operation)=0
Append a serializable operation to the pending transaction.
virtual bool active() const noexcept=0
Whether a transaction is currently pending.
virtual Result< EditorDryRunReport > preview()=0
Validate the pending transaction without publishing target state.
virtual bool canUndo() const noexcept=0
Whether committed history can be compensated.
virtual bool canRedo() const noexcept=0
Whether compensated history can be reapplied.
virtual Result< TransactionId > begin(TransactionSpec specification)=0
Begin an explicit transaction without mutating its target.
Local transaction coordinator backed by an injected edit authority.
bool canUndo() const noexcept override
True when one or more committed transactions can be compensated.
void clear()
Clear pending work and local undo/redo history without mutating the authority target.
LocalTransactionBackend(IEditAuthority *authority=nullptr)
Bind a non-owning authority that outlives this backend.
bool active() const noexcept override
True while begin/append has an uncommitted transaction.
bool canRedo() const noexcept override
True when one or more compensated transactions can be reapplied.
ssq::Table project(HSQUIRRELVM vm, const eve::Result< void > &result)
Project a completed editing result that has no payload.
DomainOperation public API.
TransactionSpec public API.