Fixed cache issue on edit undo, and added an edit button for layers

This commit is contained in:
Yousef Khadadeh 2026-01-05 15:19:21 +03:00
parent 6e13c5742e
commit dbec3641d8
5 changed files with 14 additions and 8 deletions

View file

@ -305,8 +305,8 @@ namespace NetworkingObjects {
protected:
virtual std::list<NetObjOrderedListObjectInfo<T>>& data_list() override { return data; }
virtual const std::list<NetObjOrderedListObjectInfo<T>>& data_list() const override { return data; }
virtual std::unordered_map<NetworkingObjects::NetObjID, NetObjOrderedListIterator<T>>& data_map() { return idToDataMap; }
virtual const std::unordered_map<NetworkingObjects::NetObjID, NetObjOrderedListIterator<T>>& data_map() const { return idToDataMap; }
virtual std::unordered_map<NetworkingObjects::NetObjID, NetObjOrderedListIterator<T>>& data_map() override { return idToDataMap; }
virtual const std::unordered_map<NetworkingObjects::NetObjID, NetObjOrderedListIterator<T>>& data_map() const override { return idToDataMap; }
virtual std::vector<NetObjOrderedListIterator<T>> insert_ordered_list(const NetObjTemporaryPtr<NetObjOrderedList<T>>& l, const std::shared_ptr<NetServer::ClientData>& clientInserting, std::vector<std::pair<NetObjOrderedListIterator<T>, NetObjOwnerPtr<T>>>& 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<NetObjOrderedList<T>>& l, const std::vector<NetObjOrderedListIterator<T>>& itList, std::vector<NetObjOwnerPtr<T>>* erasedObjects) {
virtual void erase_it_list(const NetObjTemporaryPtr<NetObjOrderedList<T>>& l, const std::vector<NetObjOrderedListIterator<T>>& itList, std::vector<NetObjOwnerPtr<T>>* erasedObjects) override {
if(itList.empty())
return;
@ -459,8 +459,8 @@ namespace NetworkingObjects {
protected:
virtual std::list<NetObjOrderedListObjectInfo<T>>& data_list() override { return clientData; }
virtual const std::list<NetObjOrderedListObjectInfo<T>>& data_list() const override { return clientData; }
virtual std::unordered_map<NetworkingObjects::NetObjID, NetObjOrderedListIterator<T>>& data_map() { return clientIdToDataMap; }
virtual const std::unordered_map<NetworkingObjects::NetObjID, NetObjOrderedListIterator<T>>& data_map() const { return clientIdToDataMap; }
virtual std::unordered_map<NetworkingObjects::NetObjID, NetObjOrderedListIterator<T>>& data_map() override { return clientIdToDataMap; }
virtual const std::unordered_map<NetworkingObjects::NetObjID, NetObjOrderedListIterator<T>>& data_map() const override { return clientIdToDataMap; }
virtual std::vector<NetObjOrderedListIterator<T>> insert_ordered_list(const NetObjTemporaryPtr<NetObjOrderedList<T>>& l, const std::shared_ptr<NetServer::ClientData>& clientInserting, std::vector<std::pair<NetObjOrderedListIterator<T>, NetObjOwnerPtr<T>>>& 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<NetObjOrderedList<T>>& l, const std::vector<NetObjOrderedListIterator<T>>& itList, std::vector<NetObjOwnerPtr<T>>* erasedObjects) {
virtual void erase_it_list(const NetObjTemporaryPtr<NetObjOrderedList<T>>& l, const std::vector<NetObjOrderedListIterator<T>>& itList, std::vector<NetObjOwnerPtr<T>>* erasedObjects) override {
if(itList.empty())
return;

View file

@ -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;

View file

@ -74,6 +74,7 @@ void EditTool::switch_tool(DrawingProgramToolType newTool) {
return false;
auto objPtr = undoMan.world.netObjMan.get_obj_temporary_ref_from_id<CanvasComponentContainer>(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<CanvasComponentContainer>(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;
}

View file

@ -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<UndoRedoPair> undoQueue;
std::deque<UndoRedoPair> redoQueue;
};

View file

@ -42,7 +42,7 @@ class WorldUndoManager {
private:
void push_undo(std::unique_ptr<WorldUndoAction> undoAction);
void push_redo(std::unique_ptr<WorldUndoAction> undoAction);
constexpr static size_t UNDO_QUEUE_LIMIT = 500;
constexpr static size_t UNDO_QUEUE_LIMIT = 250;
std::unordered_map<UndoObjectID, NetworkingObjects::NetObjID> undoIDToNetID;
std::unordered_map<NetworkingObjects::NetObjID, UndoObjectID> netIDToUndoID;