From 8defbe75696c686f8cd26f3777f09d4c7238cdf3 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Thu, 18 Dec 2025 17:01:42 +0300 Subject: [PATCH] Added bookmark list item --- CMakeLists.txt | 1 + src/Bookmarks/BookmarkListItem.cpp | 75 ++++++++++++++++++++++++++++++ src/Bookmarks/BookmarkListItem.hpp | 31 ++++++++++++ src/CanvasTheme.cpp | 2 +- 4 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 src/Bookmarks/BookmarkListItem.cpp create mode 100644 src/Bookmarks/BookmarkListItem.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c98ce9..851557e 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,6 +50,7 @@ set(sources "src/main.cpp" "src/FileHelpers.cpp" "src/BookmarkManager.cpp" "src/VersionConstants.cpp" + "src/Bookmarks/BookmarkListItem.cpp" "src/ResourceDisplay/ResourceDisplay.cpp" "src/ResourceDisplay/SvgResourceDisplay.cpp" "src/ResourceDisplay/ImageResourceDisplay.cpp" diff --git a/src/Bookmarks/BookmarkListItem.cpp b/src/Bookmarks/BookmarkListItem.cpp new file mode 100644 index 0000000..6b4a907 --- /dev/null +++ b/src/Bookmarks/BookmarkListItem.cpp @@ -0,0 +1,75 @@ +#include "BookmarkListItem.hpp" +#include + +using namespace NetworkingObjects; + +BookmarkListItem::BookmarkListItem() {} + +BookmarkListItem::BookmarkListItem(NetworkingObjects::NetObjManager& netObjMan, const std::string& initName, bool isFolder, const BookmarkData& initBookmarkData) { + name = initName; + if(isFolder) + folderList = netObjMan.make_obj>(); + else + bookmarkData = std::make_unique(initBookmarkData); +} + +bool BookmarkListItem::is_folder() const { + return folderList; +} + +const BookmarkData& BookmarkListItem::get_bookmark_data() const { + return *bookmarkData; +} + +const NetObjOwnerPtr>& BookmarkListItem::get_folder_list() const { + return folderList; +} + +const std::string& BookmarkListItem::get_name() const { + return name; +} + +void BookmarkListItem::set_name(const NetworkingObjects::NetObjTemporaryPtr& o, const std::string& newName) { + o->name = newName; + o.send_update_to_all(RELIABLE_COMMAND_CHANNEL, [](const NetObjTemporaryPtr& o, cereal::PortableBinaryOutputArchive& a) { + a(o->name); + }); +} + +void BookmarkListItem::register_class(NetObjManager& netObjMan) { + netObjMan.register_class({ + .writeConstructorFuncClient = write_constructor_data, + .readConstructorFuncClient = read_constructor_data, + .readUpdateFuncClient = [](const NetObjTemporaryPtr& o, cereal::PortableBinaryInputArchive& a, const std::shared_ptr&) { + a(o->name); + }, + .writeConstructorFuncServer = write_constructor_data, + .readConstructorFuncServer = read_constructor_data, + .readUpdateFuncServer = [](const NetObjTemporaryPtr& o, cereal::PortableBinaryInputArchive& a, const std::shared_ptr&) { + a(o->name); + o.send_server_update_to_all_clients(RELIABLE_COMMAND_CHANNEL, [](const NetObjTemporaryPtr& o, cereal::PortableBinaryOutputArchive& a) { + a(o->name); + }); + }, + }); +} + +void BookmarkListItem::write_constructor_data(const NetObjTemporaryPtr& o, cereal::PortableBinaryOutputArchive& a) { + a(o->name, o->is_folder()); + if(o->is_folder()) + o->folderList.write_create_message(a); + else + a(*o->bookmarkData); +} + +void BookmarkListItem::read_constructor_data(const NetworkingObjects::NetObjTemporaryPtr& o, cereal::PortableBinaryInputArchive& a, const std::shared_ptr& c) { + a(o->name); + bool isFolder; + a(isFolder); + if(isFolder) + o->folderList = o.get_obj_man()->read_create_message>(a, c); + else { + o->bookmarkData = std::make_unique(); + a(*o->bookmarkData); + } +} diff --git a/src/Bookmarks/BookmarkListItem.hpp b/src/Bookmarks/BookmarkListItem.hpp new file mode 100644 index 0000000..9e5e680 --- /dev/null +++ b/src/Bookmarks/BookmarkListItem.hpp @@ -0,0 +1,31 @@ +#pragma once +#include +#include +#include +#include "../CoordSpaceHelper.hpp" + +struct BookmarkData { + CoordSpaceHelper coords; + Vector windowSize; + template void serialize(Archive& a) { + a(coords, windowSize); + } +}; + +class BookmarkListItem { + public: + BookmarkListItem(); + BookmarkListItem(NetworkingObjects::NetObjManager& netObjMan, const std::string& initName, bool isFolder, const BookmarkData& initBookmarkData); + bool is_folder() const; + const BookmarkData& get_bookmark_data() const; + const NetworkingObjects::NetObjOwnerPtr>& get_folder_list() const; + const std::string& get_name() const; + static void register_class(NetworkingObjects::NetObjManager& netObjMan); + static void set_name(const NetworkingObjects::NetObjTemporaryPtr& o, const std::string& newName); // Set once after editing is finished + private: + static void write_constructor_data(const NetworkingObjects::NetObjTemporaryPtr& o, cereal::PortableBinaryOutputArchive& a); + static void read_constructor_data(const NetworkingObjects::NetObjTemporaryPtr& o, cereal::PortableBinaryInputArchive& a, const std::shared_ptr& c); + NetworkingObjects::NetObjOwnerPtr> folderList; + std::unique_ptr bookmarkData; + std::string name; +}; diff --git a/src/CanvasTheme.cpp b/src/CanvasTheme.cpp index c1ad423..44ceaec 100644 --- a/src/CanvasTheme.cpp +++ b/src/CanvasTheme.cpp @@ -20,7 +20,7 @@ void CanvasTheme::init() { SkColor4f CanvasTheme::get_back_color() const { if(!backColor) - return SkColor4f{DEFAULT_CANVAS_BACKGROUND_COLOR.x(), DEFAULT_CANVAS_BACKGROUND_COLOR.y(), DEFAULT_CANVAS_BACKGROUND_COLOR.z(), 1.0f}; + return SkColor4f{world.main.defaultCanvasBackgroundColor.x(), world.main.defaultCanvasBackgroundColor.y(), world.main.defaultCanvasBackgroundColor.z(), 1.0f}; else return SkColor4f{backColor->c.x(), backColor->c.y(), backColor->c.z(), 1.0f}; }