Undo now takes into account list position, and started work on bookmark undo

This commit is contained in:
Yousef Khadadeh 2026-01-02 21:06:13 +03:00
parent 92115957b2
commit 0e22c8ac3e
7 changed files with 64 additions and 16 deletions

View file

@ -11,8 +11,26 @@ void BookmarkData::jump_to(World& world) const {
world.drawData.cam.smooth_move_to(world, coords, windowSize.cast<float>());
}
void BookmarkData::scale_up(const WorldScalar& scaleUpAmount) {
coords.scale_about(WorldVec{0, 0}, scaleUpAmount, true);
}
BookmarkListItem::BookmarkListItem() {}
BookmarkListItem::BookmarkListItem(NetworkingObjects::NetObjManager& netObjMan, const BookmarkCompleteInitData& initData) {
nameData = netObjMan.make_obj<NameData>();
nameData->name = initData.name;
if(initData.folderList) {
auto& initFolderList = initData.folderList.value();
folderData = std::make_unique<BookmarkFolderData>();
folderData->folderList = netObjMan.make_obj<NetworkingObjects::NetObjOrderedList<BookmarkListItem>>();
for(auto& initFolder : initFolderList)
folderData->folderList->emplace_back_direct(folderData->folderList, netObjMan, initFolder);
}
else
bookmarkData = std::make_unique<BookmarkData>(initData.bookmarkData.value());
}
BookmarkListItem::BookmarkListItem(NetworkingObjects::NetObjManager& netObjMan, const std::string& initName, bool isFolder, const BookmarkData& initBookmarkData) {
if(isFolder) {
folderData = std::make_unique<BookmarkFolderData>();
@ -24,6 +42,20 @@ BookmarkListItem::BookmarkListItem(NetworkingObjects::NetObjManager& netObjMan,
nameData->name = initName;
}
BookmarkCompleteInitData BookmarkListItem::get_complete_init_data() {
BookmarkCompleteInitData toRet;
toRet.name = nameData->name;
if(folderData) {
toRet.folderList = std::vector<BookmarkCompleteInitData>();
auto& folderListToRet = toRet.folderList.value();
for(auto& b : *folderData->folderList)
folderListToRet.emplace_back(b.obj->get_complete_init_data());
}
else
toRet.bookmarkData = *bookmarkData;
return toRet;
}
void BookmarkListItem::reassign_netobj_ids_call() {
if(folderData)
folderData->folderList.reassign_ids();
@ -36,7 +68,7 @@ void BookmarkListItem::scale_up(const WorldScalar& scaleUpAmount) {
i.obj->scale_up(scaleUpAmount);
}
else
bookmarkData->coords.scale_about(WorldVec{0, 0}, scaleUpAmount, true);
bookmarkData->scale_up(scaleUpAmount);
}
bool BookmarkListItem::is_folder() const {

View file

@ -14,12 +14,20 @@ struct BookmarkData {
template <class Archive> void serialize(Archive& a) {
a(coords, windowSize);
}
void scale_up(const WorldScalar& scaleUpAmount);
void jump_to(World& world) const;
};
struct BookmarkCompleteInitData {
std::string name;
std::optional<std::vector<BookmarkCompleteInitData>> folderList;
std::optional<BookmarkData> bookmarkData;
};
class BookmarkListItem {
public:
BookmarkListItem();
BookmarkListItem(NetworkingObjects::NetObjManager& netObjMan, const BookmarkCompleteInitData& initData);
BookmarkListItem(NetworkingObjects::NetObjManager& netObjMan, const std::string& initName, bool isFolder, const BookmarkData& initBookmarkData);
bool is_folder() const;
const BookmarkData& get_bookmark_data() const;
@ -32,6 +40,7 @@ class BookmarkListItem {
void scale_up(const WorldScalar& scaleUpAmount);
void save_file(cereal::PortableBinaryOutputArchive& a) const;
void load_file(cereal::PortableBinaryInputArchive& a, VersionNumber version, BookmarkManager& bMan);
BookmarkCompleteInitData get_complete_init_data();
void set_name(NetworkingObjects::DelayUpdateSerializedClassManager& delayedNetObjMan, const std::string& newName);
private: