From dbec3641d8fa0aadee1ee58013345ed2ecf70493 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Mon, 5 Jan 2026 15:19:21 +0300 Subject: [PATCH] Fixed cache issue on edit undo, and added an edit button for layers --- .../Helpers/NetworkingObjects/NetObjOrderedList.hpp | 12 ++++++------ .../Layers/DrawingProgramLayerManagerGUI.cpp | 4 ++++ src/DrawingProgram/Tools/EditTool.cpp | 2 ++ src/UndoManager.hpp | 2 +- src/WorldUndoManager.hpp | 2 +- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/include/Helpers/NetworkingObjects/NetObjOrderedList.hpp b/include/Helpers/NetworkingObjects/NetObjOrderedList.hpp index 5fb4b19..f9c12e7 100644 --- a/include/Helpers/NetworkingObjects/NetObjOrderedList.hpp +++ b/include/Helpers/NetworkingObjects/NetObjOrderedList.hpp @@ -305,8 +305,8 @@ namespace NetworkingObjects { protected: virtual std::list>& data_list() override { return data; } virtual const std::list>& data_list() const override { return data; } - virtual std::unordered_map>& data_map() { return idToDataMap; } - virtual const std::unordered_map>& data_map() const { return idToDataMap; } + virtual std::unordered_map>& data_map() override { return idToDataMap; } + virtual const std::unordered_map>& data_map() const override { return idToDataMap; } virtual std::vector> insert_ordered_list(const NetObjTemporaryPtr>& l, const std::shared_ptr& clientInserting, std::vector, NetObjOwnerPtr>>& newObjs) override { if(newObjs.empty()) return {}; @@ -343,7 +343,7 @@ namespace NetworkingObjects { NETOBJ_ORDERED_LIST_VERBOSE_DEBUG(data, idToDataMap); return toRet; } - virtual void erase_it_list(const NetObjTemporaryPtr>& l, const std::vector>& itList, std::vector>* erasedObjects) { + virtual void erase_it_list(const NetObjTemporaryPtr>& l, const std::vector>& itList, std::vector>* erasedObjects) override { if(itList.empty()) return; @@ -459,8 +459,8 @@ namespace NetworkingObjects { protected: virtual std::list>& data_list() override { return clientData; } virtual const std::list>& data_list() const override { return clientData; } - virtual std::unordered_map>& data_map() { return clientIdToDataMap; } - virtual const std::unordered_map>& data_map() const { return clientIdToDataMap; } + virtual std::unordered_map>& data_map() override { return clientIdToDataMap; } + virtual const std::unordered_map>& data_map() const override { return clientIdToDataMap; } virtual std::vector> insert_ordered_list(const NetObjTemporaryPtr>& l, const std::shared_ptr& clientInserting, std::vector, NetObjOwnerPtr>>& newObjs) override { if(newObjs.empty()) return {}; @@ -483,7 +483,7 @@ namespace NetworkingObjects { NETOBJ_ORDERED_LIST_VERBOSE_DEBUG(clientData, clientIdToDataMap); return toRet; } - virtual void erase_it_list(const NetObjTemporaryPtr>& l, const std::vector>& itList, std::vector>* erasedObjects) { + virtual void erase_it_list(const NetObjTemporaryPtr>& l, const std::vector>& itList, std::vector>* erasedObjects) override { if(itList.empty()) return; diff --git a/src/DrawingProgram/Layers/DrawingProgramLayerManagerGUI.cpp b/src/DrawingProgram/Layers/DrawingProgramLayerManagerGUI.cpp index 0c359ea..2b1d9ad 100644 --- a/src/DrawingProgram/Layers/DrawingProgramLayerManagerGUI.cpp +++ b/src/DrawingProgram/Layers/DrawingProgramLayerManagerGUI.cpp @@ -87,6 +87,10 @@ void DrawingProgramLayerManagerGUI::setup_list_gui(const std::string& id, bool& }) { gui.text_label(tempPtr->get_name()); } + if(gui.svg_icon_button_transparent("edit button", "data/icons/pencil.svg", false, GUIStuff::TreeListing::ENTRY_HEIGHT)) { + layerMan.editingLayer = tempPtr; + isButtonClicked = true; + } if(gui.svg_icon_button_transparent("visible button", tempPtr->get_visible() ? "data/icons/eyeopen.svg" : "data/icons/eyeclose.svg", false, GUIStuff::TreeListing::ENTRY_HEIGHT)) { tempPtr->set_visible(layerMan, !tempPtr->get_visible()); isButtonClicked = true; diff --git a/src/DrawingProgram/Tools/EditTool.cpp b/src/DrawingProgram/Tools/EditTool.cpp index 5b2c520..1b871a7 100644 --- a/src/DrawingProgram/Tools/EditTool.cpp +++ b/src/DrawingProgram/Tools/EditTool.cpp @@ -74,6 +74,7 @@ void EditTool::switch_tool(DrawingProgramToolType newTool) { return false; auto objPtr = undoMan.world.netObjMan.get_obj_temporary_ref_from_id(toEditID.value()); objPtr->get_comp().set_data_from(*oldData); + objPtr->commit_update(undoMan.world.drawProg); objPtr->send_comp_update(undoMan.world.drawProg, true); return true; } @@ -83,6 +84,7 @@ void EditTool::switch_tool(DrawingProgramToolType newTool) { return false; auto objPtr = undoMan.world.netObjMan.get_obj_temporary_ref_from_id(toEditID.value()); objPtr->get_comp().set_data_from(*newData); + objPtr->commit_update(undoMan.world.drawProg); objPtr->send_comp_update(undoMan.world.drawProg, true); return true; } diff --git a/src/UndoManager.hpp b/src/UndoManager.hpp index 39331d9..b561f3a 100644 --- a/src/UndoManager.hpp +++ b/src/UndoManager.hpp @@ -23,7 +23,7 @@ class UndoManager { private: void push_undo(const UndoRedoPair& undoRedoPair); void push_redo(const UndoRedoPair& undoRedoPair); - size_t queueLimit = 500; + size_t queueLimit = 250; std::deque undoQueue; std::deque redoQueue; }; diff --git a/src/WorldUndoManager.hpp b/src/WorldUndoManager.hpp index 5c1d337..267682f 100644 --- a/src/WorldUndoManager.hpp +++ b/src/WorldUndoManager.hpp @@ -42,7 +42,7 @@ class WorldUndoManager { private: void push_undo(std::unique_ptr undoAction); void push_redo(std::unique_ptr undoAction); - constexpr static size_t UNDO_QUEUE_LIMIT = 500; + constexpr static size_t UNDO_QUEUE_LIMIT = 250; std::unordered_map undoIDToNetID; std::unordered_map netIDToUndoID;