Project dirty state manager -> management of gizmos dirty state WIP

This commit is contained in:
enricoturri1966 2021-04-15 15:19:03 +02:00
parent e89a14c8a7
commit 8c3d098ff6
4 changed files with 212 additions and 63 deletions

View file

@ -8,27 +8,52 @@
namespace Slic3r {
namespace UndoRedo {
class Stack;
struct Snapshot;
} // namespace UndoRedo
namespace GUI {
namespace GUI {
class ProjectDirtyStateManager
{
public:
enum class UpdateType : unsigned char
{
TakeSnapshot,
UndoRedoTo
};
struct DirtyState
{
struct Gizmos
{
struct Gizmo
{
std::vector<size_t> modified_timestamps;
};
bool current{ false };
std::map<std::string, Gizmo> used;
void add_used(const UndoRedo::Snapshot& snapshot);
void remove_obsolete_used(const Slic3r::UndoRedo::Stack& main_stack);
#if ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
bool any_used_modified() const;
#endif // ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
bool is_used_and_modified(const UndoRedo::Snapshot& snapshot) const;
};
bool plater{ false };
bool presets{ false };
bool current_gizmo{ false };
std::vector<std::string> gizmos;
Gizmos gizmos;
bool is_dirty() const { return plater || presets || current_gizmo || !gizmos.empty(); }
bool is_dirty() const { return plater || presets || gizmos.current; }
void reset() {
plater = false;
presets = false;
current_gizmo = false;
gizmos.clear();
gizmos.current = false;
}
};
private:
struct LastSaveTimestamps
{
size_t main{ 0 };
@ -48,7 +73,7 @@ class ProjectDirtyStateManager
public:
bool is_dirty() const { return m_state.is_dirty(); }
void update_from_undo_redo_stack(const Slic3r::UndoRedo::Stack& main_stack, const Slic3r::UndoRedo::Stack& active_stack);
void update_from_undo_redo_stack(UpdateType type, const Slic3r::UndoRedo::Stack& main_stack, const Slic3r::UndoRedo::Stack& active_stack);
void update_from_presets();
void reset_after_save();
void reset_initial_presets();
@ -57,8 +82,8 @@ public:
#endif // ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW
private:
void update_from_undo_redo_main_stack(const Slic3r::UndoRedo::Stack& stack);
void update_from_undo_redo_gizmo_stack(const Slic3r::UndoRedo::Stack& stack);
void update_from_undo_redo_main_stack(UpdateType type, const Slic3r::UndoRedo::Stack& stack);
void update_from_undo_redo_gizmo_stack(UpdateType type, const Slic3r::UndoRedo::Stack& stack);
};
} // namespace GUI