MeshLib
 
Loading...
Searching...
No Matches
MRHistoryStore.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRViewerFwd.h"
5#include "MRMesh/MRSignal.h"
6#include <memory>
7
8namespace MR
9{
10
13
16{
17public:
19 MRVIEWER_API static const std::shared_ptr<HistoryStore>& getViewerInstance();
20
21 MRVIEWER_API virtual ~HistoryStore();
22
25 MRVIEWER_API virtual void appendAction( const std::shared_ptr<HistoryAction>& action );
26
28 HistoryActionsVector* getScopeBlockPtr() const { return scopedBlock_; }
30 void setScopeBlockPtr( HistoryActionsVector* scopedBlock ) { scopedBlock_ = scopedBlock; }
31
33 bool isSceneModified() const { return firstRedoIndex_ != savedSceneIndex_; }
35 void setSavedState() { savedSceneIndex_ = firstRedoIndex_; }
36
38 MRVIEWER_API void clear();
39
41 void setMemoryLimit( size_t limit ) { storageLimit_ = limit; }
43 size_t getMemoryLimit() const { return storageLimit_; }
44
46 const HistoryActionsVector& getHistoryStack() const { return stack_; }
48 size_t getStackPointer() const { return firstRedoIndex_; }
49
51 MRVIEWER_API void filterStack( HistoryStackFilter filteringCondition, bool deepFiltering = true );
52
53 MRVIEWER_API virtual bool undo();
54 MRVIEWER_API virtual bool redo();
55
57 MRVIEWER_API std::vector<std::string> getNActions( unsigned n, HistoryAction::Type type )const;
59 MRVIEWER_API std::string getLastActionName( HistoryAction::Type type ) const;
60
62 enum class ChangeType
63 {
65 Undo,
66 Redo,
67 Clear,
68 Filter
69 };
70 using HistoryStoreChangedSignal = boost::signals2::signal<void( const HistoryStore& store, ChangeType )>;
72
73private:
75 HistoryActionsVector* scopedBlock_{ nullptr };
79 size_t firstRedoIndex_{ 0 };
82 size_t savedSceneIndex_{ 0 };
84 size_t storageLimit_{ size_t( ~0 ) };
85};
86
88
89}
Type
Definition MRHistoryAction.h:19
This class stores history stack for undo/redo.
Definition MRHistoryStore.h:16
virtual MRVIEWER_API bool undo()
virtual MRVIEWER_API ~HistoryStore()
MRVIEWER_API void filterStack(HistoryStackFilter filteringCondition, bool deepFiltering=true)
remove some actions according to condition
boost::signals2::signal< void(const HistoryStore &store, ChangeType)> HistoryStoreChangedSignal
Definition MRHistoryStore.h:70
HistoryActionsVector * getScopeBlockPtr() const
Returns current scope ptr.
Definition MRHistoryStore.h:28
size_t getMemoryLimit() const
Returns current memory limit for this store (by default uint64 max)
Definition MRHistoryStore.h:43
void setMemoryLimit(size_t limit)
Set memory limit for this store, if history stack exceed it - old actions are removed.
Definition MRHistoryStore.h:41
virtual MRVIEWER_API bool redo()
size_t getStackPointer() const
Returns index of first redo action in stack.
Definition MRHistoryStore.h:48
const HistoryActionsVector & getHistoryStack() const
Returns full history stack.
Definition MRHistoryStore.h:46
MRVIEWER_API std::vector< std::string > getNActions(unsigned n, HistoryAction::Type type) const
Returns names of last N undo actions or first N redo actions.
static MRVIEWER_API const std::shared_ptr< HistoryStore > & getViewerInstance()
returns the instance (if any) of HistoryStore from the viewer
ChangeType
Signal is called after this store changed.
Definition MRHistoryStore.h:63
@ AppendAction
additions in scoped block does not provide signal
virtual MRVIEWER_API void appendAction(const std::shared_ptr< HistoryAction > &action)
void setSavedState()
Consider the current scene state as saved.
Definition MRHistoryStore.h:35
MRVIEWER_API std::string getLastActionName(HistoryAction::Type type) const
Returns the name of last undo or redo action (or empty string if there is no such action)
MRVIEWER_API void clear()
Clears this HistoryStore.
bool isSceneModified() const
Returns true if the current scene state does not match the saved state.
Definition MRHistoryStore.h:33
HistoryStoreChangedSignal changedSignal
Definition MRHistoryStore.h:71
void setScopeBlockPtr(HistoryActionsVector *scopedBlock)
Sets pointer to current scope block.
Definition MRHistoryStore.h:30
Definition MRCameraOrientationPlugin.h:7
std::function< bool(const std::shared_ptr< HistoryAction > &)> HistoryStackFilter
Definition MRHistoryAction.h:30
std::vector< std::shared_ptr< HistoryAction > > HistoryActionsVector
Definition MRHistoryAction.h:31