Some network messages relayout GUI
This commit is contained in:
parent
4aa810fe43
commit
99c2657434
15 changed files with 71 additions and 9 deletions
|
|
@ -65,6 +65,22 @@ BookmarkCompleteUndoData BookmarkListItem::get_complete_undo_data(WorldUndoManag
|
|||
return toRet;
|
||||
}
|
||||
|
||||
void BookmarkListItem::set_list_callbacks(World& w) {
|
||||
if(folderData) {
|
||||
folderData->folderList->set_insert_callback([&](auto&) {
|
||||
w.set_to_layout_gui_if_focus();
|
||||
});
|
||||
folderData->folderList->set_erase_callback([&](auto&) {
|
||||
w.set_to_layout_gui_if_focus();
|
||||
});
|
||||
folderData->folderList->set_move_callback([&](auto&, uint32_t) {
|
||||
w.set_to_layout_gui_if_focus();
|
||||
});
|
||||
for(auto& listItem : *folderData->folderList)
|
||||
listItem.obj->set_list_callbacks(w);
|
||||
}
|
||||
}
|
||||
|
||||
void BookmarkListItem::reassign_netobj_ids_call() {
|
||||
if(folderData)
|
||||
folderData->folderList.reassign_ids();
|
||||
|
|
@ -136,7 +152,11 @@ void BookmarkListItem::register_class(World& w) {
|
|||
.readUpdateFuncServer = nullptr
|
||||
});
|
||||
NetworkingObjects::register_ordered_list_class<BookmarkListItem>(w.netObjMan);
|
||||
w.delayedUpdateObjectManager.register_class<NameData>(w.netObjMan);
|
||||
w.delayedUpdateObjectManager.register_class<NameData>(w.netObjMan, NetworkingObjects::DelayUpdateSerializedClassManager::CustomConstructors<NameData>{
|
||||
.postUpdateFunc = [&](NameData& o) {
|
||||
w.set_to_layout_gui_if_focus();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void BookmarkListItem::write_constructor_data(const NetObjTemporaryPtr<BookmarkListItem>& o, cereal::PortableBinaryOutputArchive& a) {
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ class BookmarkListItem {
|
|||
BookmarkListItem();
|
||||
BookmarkListItem(World& w, const BookmarkCompleteUndoData& undoData);
|
||||
BookmarkListItem(NetworkingObjects::NetObjManager& netObjMan, const std::string& initName, bool isFolder, const BookmarkData& initBookmarkData);
|
||||
void set_list_callbacks(World& w);
|
||||
bool is_folder() const;
|
||||
const BookmarkData& get_bookmark_data() const;
|
||||
const NetworkingObjects::NetObjOwnerPtr<NetworkingObjects::NetObjOrderedList<BookmarkListItem>>& get_folder_list() const;
|
||||
|
|
|
|||
|
|
@ -18,6 +18,12 @@ BookmarkManager::BookmarkManager(World& w):
|
|||
|
||||
void BookmarkManager::server_init_no_file() {
|
||||
bookmarkListRoot = world.netObjMan.make_obj_from_ptr<BookmarkListItem>(new BookmarkListItem(world.netObjMan, "ROOT", true, {}));
|
||||
bookmarkListRoot->set_list_callbacks(world); // Only need to call set_component_list_callbacks on root, and the rest will get the callbacks set as well
|
||||
}
|
||||
|
||||
void BookmarkManager::read_create_message(cereal::PortableBinaryInputArchive& a) {
|
||||
bookmarkListRoot = world.netObjMan.read_create_message<BookmarkListItem>(a, nullptr);
|
||||
bookmarkListRoot->set_list_callbacks(world);
|
||||
}
|
||||
|
||||
void BookmarkManager::refresh_gui_data() {
|
||||
|
|
@ -517,6 +523,7 @@ void BookmarkManager::load_file(cereal::PortableBinaryInputArchive& a, VersionNu
|
|||
if(version >= VersionNumber(0, 4, 0)) {
|
||||
bookmarkListRoot = world.netObjMan.make_obj_from_ptr<BookmarkListItem>(new BookmarkListItem());
|
||||
bookmarkListRoot->load_file(a, version, *this);
|
||||
bookmarkListRoot->set_list_callbacks(world); // Only need to call set_component_list_callbacks on root, and the rest will get the callbacks set as well
|
||||
}
|
||||
else {
|
||||
server_init_no_file();
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ class BookmarkManager {
|
|||
public:
|
||||
BookmarkManager(World& w);
|
||||
void server_init_no_file();
|
||||
void read_create_message(cereal::PortableBinaryInputArchive& a);
|
||||
void scale_up(const WorldScalar& scaleUpAmount);
|
||||
void setup_list_gui();
|
||||
void refresh_gui_data();
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ void CanvasTheme::set_tool_front_color(DrawingProgram& drawP) {
|
|||
else
|
||||
toolFrontColor = SkColor4f{1.0f, 1.0f, 1.0f, 1.0f};
|
||||
drawP.drawCache.clear_own_cached_surfaces();
|
||||
world.set_to_layout_gui_if_focus();
|
||||
}
|
||||
|
||||
void CanvasTheme::register_class() {
|
||||
|
|
|
|||
|
|
@ -323,6 +323,7 @@ void DrawingProgram::process_transform_message(const std::vector<std::pair<Netwo
|
|||
objPtr->coords = coords;
|
||||
objPtr->commit_transform(*this);
|
||||
}
|
||||
world.set_to_layout_gui_if_focus();
|
||||
}
|
||||
|
||||
void DrawingProgram::send_transforms_for(const std::vector<CanvasComponentContainer::ObjInfo*>& objsToSendTransformsFor) {
|
||||
|
|
|
|||
|
|
@ -15,13 +15,16 @@ void DrawingProgramLayerFolder::set_component_list_callbacks(DrawingProgramLayer
|
|||
folderList->set_insert_callback([&](auto& c) {
|
||||
layerMan.drawP.drawCache.clear_own_cached_surfaces();
|
||||
c->obj->set_component_list_callbacks(layerMan);
|
||||
layerMan.drawP.world.set_to_layout_gui_if_focus();
|
||||
});
|
||||
folderList->set_erase_callback([&](auto& c) {
|
||||
layerMan.drawP.drawCache.clear_own_cached_surfaces();
|
||||
c->obj->set_to_erase();
|
||||
layerMan.drawP.world.set_to_layout_gui_if_focus();
|
||||
});
|
||||
folderList->set_move_callback([&](auto& c, uint32_t oldPos) {
|
||||
layerMan.drawP.drawCache.clear_own_cached_surfaces();
|
||||
layerMan.drawP.world.set_to_layout_gui_if_focus();
|
||||
});
|
||||
for(auto& listItem : *folderList)
|
||||
listItem.obj->set_component_list_callbacks(layerMan);
|
||||
|
|
|
|||
|
|
@ -287,10 +287,15 @@ void DrawingProgramLayerListItem::register_class(World& w) {
|
|||
.readConstructorFuncServer = read_constructor_func,
|
||||
.readUpdateFuncServer = nullptr,
|
||||
});
|
||||
w.delayedUpdateObjectManager.register_class<NameData>(w.netObjMan);
|
||||
w.delayedUpdateObjectManager.register_class<NameData>(w.netObjMan, NetworkingObjects::DelayUpdateSerializedClassManager::CustomConstructors<NameData>{
|
||||
.postUpdateFunc = [&](NameData& o) {
|
||||
w.set_to_layout_gui_if_focus();
|
||||
}
|
||||
});
|
||||
w.delayedUpdateObjectManager.register_class<DisplayData>(w.netObjMan, NetworkingObjects::DelayUpdateSerializedClassManager::CustomConstructors<DisplayData>{
|
||||
.postUpdateFunc = [&](DisplayData& o) {
|
||||
w.drawProg.drawCache.clear_own_cached_surfaces();
|
||||
w.set_to_layout_gui_if_focus();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,18 @@ GridManager::GridManager(World& w):
|
|||
|
||||
void GridManager::server_init_no_file() {
|
||||
grids = world.netObjMan.make_obj<NetworkingObjects::NetObjOrderedList<WorldGrid>>();
|
||||
set_grid_list_callbacks();
|
||||
}
|
||||
|
||||
void GridManager::read_create_message(cereal::PortableBinaryInputArchive& a) {
|
||||
grids = world.netObjMan.read_create_message<NetworkingObjects::NetObjOrderedList<WorldGrid>>(a, nullptr);
|
||||
set_grid_list_callbacks();
|
||||
}
|
||||
|
||||
void GridManager::set_grid_list_callbacks() {
|
||||
grids->set_insert_callback([&](auto&) { world.set_to_layout_gui_if_focus(); });
|
||||
grids->set_erase_callback([&](auto&) { world.set_to_layout_gui_if_focus(); });
|
||||
grids->set_move_callback([&](auto&, uint32_t) { world.set_to_layout_gui_if_focus(); });
|
||||
}
|
||||
|
||||
void GridManager::add_default_grid(const std::string& newName) {
|
||||
|
|
@ -207,7 +219,7 @@ void GridManager::save_file(cereal::PortableBinaryOutputArchive& a) const {
|
|||
}
|
||||
|
||||
void GridManager::load_file(cereal::PortableBinaryInputArchive& a, VersionNumber version) {
|
||||
grids = world.netObjMan.make_obj<NetworkingObjects::NetObjOrderedList<WorldGrid>>();
|
||||
server_init_no_file();
|
||||
if(version >= VersionNumber(0, 4, 0)) {
|
||||
uint32_t gridSize;
|
||||
a(gridSize);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#pragma once
|
||||
#include "WorldGrid.hpp"
|
||||
#include "cereal/archives/portable_binary.hpp"
|
||||
#include <Helpers/NetworkingObjects/NetObjOrderedList.hpp>
|
||||
#include <Helpers/NetworkingObjects/NetObjOwnerPtr.hpp>
|
||||
|
||||
|
|
@ -9,6 +10,8 @@ class GridManager {
|
|||
public:
|
||||
GridManager(World& w);
|
||||
void server_init_no_file();
|
||||
void read_create_message(cereal::PortableBinaryInputArchive& a);
|
||||
void set_grid_list_callbacks();
|
||||
|
||||
void add_default_grid(const std::string& newName);
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,6 @@ MainProgram::MainProgram():
|
|||
Logger::get().add_log("CHAT", [&](const std::string& text) {
|
||||
*logFile << "[CHAT] " << text << std::endl;
|
||||
std::cout << "[CHAT] " << text << std::endl;
|
||||
g.gui.set_to_layout();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
#include "ResourceDisplay/FileResourceDisplay.hpp"
|
||||
#include <cereal/archives/portable_binary.hpp>
|
||||
#include <cereal/types/unordered_map.hpp>
|
||||
#include "MainProgram.hpp"
|
||||
|
||||
ResourceManager::ResourceManager(World& initWorld):
|
||||
world(initWorld)
|
||||
|
|
@ -25,6 +26,7 @@ void ResourceManager::init_client_callbacks() {
|
|||
// There is a scenario where the resource id and data messages can be sent twice for the same resource (a resource can be sent early before CLIENT_INITIAL_DATA is sent, and then resent with CLIENT_INITIAL_DATA), so check if resource already exists, and only keep track of the ID if the resource doesn't exist yet
|
||||
if(!world.netObjMan.get_obj_temporary_ref_from_id<ResourceData>(idBeingRetrieved))
|
||||
resourcesBeingRetrieved.emplace(idBeingRetrieved, std::weak_ptr<NetServer::ClientData>());
|
||||
world.main.g.gui.set_to_layout();
|
||||
});
|
||||
world.netClient->add_recv_callback(SERVER_NEW_RESOURCE_DATA, [&](cereal::PortableBinaryInputArchive& message) {
|
||||
if(!resourcesBeingRetrieved.empty()) { // If the resource was sent for the second time, this will be empty, so we can ignore the message
|
||||
|
|
@ -33,6 +35,7 @@ void ResourceManager::init_client_callbacks() {
|
|||
resourceList.emplace_back(world.netObjMan.make_obj_direct_with_specific_id<ResourceData>(resourcesBeingRetrieved.begin()->first, newResource));
|
||||
resourcesBeingRetrieved.clear();
|
||||
}
|
||||
world.main.g.gui.set_to_layout();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -137,8 +137,8 @@ void World::init_client(const std::string& serverFullID) {
|
|||
NetworkingObjects::NetObjID clientDataObjID;
|
||||
message(fileDisplayName, clientDataObjID);
|
||||
set_name(fileDisplayName);
|
||||
bMan.bookmarkListRoot = netObjMan.read_create_message<BookmarkListItem>(message, nullptr);
|
||||
gridMan.grids = netObjMan.read_create_message<NetworkingObjects::NetObjOrderedList<WorldGrid>>(message, nullptr);
|
||||
bMan.read_create_message(message);
|
||||
gridMan.read_create_message(message);
|
||||
drawProg.read_components_client(message);
|
||||
canvasTheme.read_create_message(message);
|
||||
clients = netObjMan.read_create_message<NetworkingObjects::NetObjUnorderedSet<ClientData>>(message, nullptr);
|
||||
|
|
@ -151,15 +151,13 @@ void World::init_client(const std::string& serverFullID) {
|
|||
#endif
|
||||
|
||||
clientStillConnecting = false;
|
||||
drawProg.world.main.g.gui.set_to_layout();
|
||||
set_to_layout_gui_if_focus();
|
||||
});
|
||||
netClient->add_recv_callback(CLIENT_UPDATE_NETWORK_OBJECT, [&](cereal::PortableBinaryInputArchive& message) {
|
||||
netObjMan.read_update_message(message, nullptr);
|
||||
drawProg.world.main.g.gui.set_to_layout();
|
||||
});
|
||||
netClient->add_recv_callback(CLIENT_UPDATE_MANY_NETWORK_OBJECTS, [&](cereal::PortableBinaryInputArchive& message) {
|
||||
netObjMan.read_many_update_message(message, nullptr);
|
||||
drawProg.world.main.g.gui.set_to_layout();
|
||||
});
|
||||
netClient->add_recv_callback(CLIENT_KEEP_ALIVE, [&](cereal::PortableBinaryInputArchive& message) {
|
||||
});
|
||||
|
|
@ -228,6 +226,11 @@ bool World::is_focus() {
|
|||
return main.world.get() == this;
|
||||
}
|
||||
|
||||
void World::set_to_layout_gui_if_focus() {
|
||||
if(is_focus())
|
||||
main.g.gui.set_to_layout();
|
||||
}
|
||||
|
||||
void World::undo_with_checks() {
|
||||
if(!clientStillConnecting && !drawProg.prevent_undo_or_redo())
|
||||
undo.undo();
|
||||
|
|
@ -349,6 +352,7 @@ void World::add_chat_message(const std::string& name, const std::string& message
|
|||
chatMessages.emplace_front(Toolbar::ChatMessage{name, message, type});
|
||||
if(chatMessages.size() == CHAT_SIZE)
|
||||
chatMessages.pop_back();
|
||||
set_to_layout_gui_if_focus();
|
||||
}
|
||||
|
||||
void World::early_destroy() {
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ class World {
|
|||
bool should_ask_before_closing();
|
||||
void set_has_unsaved_local_changes(bool newHasUnsavedLocalChangesVal);
|
||||
bool is_focus();
|
||||
void set_to_layout_gui_if_focus();
|
||||
|
||||
NetworkingObjects::DelayUpdateSerializedClassManager delayedUpdateObjectManager;
|
||||
|
||||
|
|
|
|||
|
|
@ -179,6 +179,7 @@ void WorldGrid::register_class(World& w) {
|
|||
auto readWorldGrid = [&](WorldGrid& o, cereal::PortableBinaryInputArchive& a, const std::shared_ptr<NetServer::ClientData>& c) {
|
||||
a(o);
|
||||
canvas_scale_up_check(o, w, c);
|
||||
w.set_to_layout_gui_if_focus();
|
||||
};
|
||||
w.delayedUpdateObjectManager.register_class<WorldGrid>(w.netObjMan, NetworkingObjects::DelayUpdateSerializedClassManager::CustomConstructors<WorldGrid>{
|
||||
.readConstructor = readWorldGrid,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue