diff -r c7ae8642a8d8 -r 879e47e5b731 gui_reader.cc --- a/gui_reader.cc Wed May 02 20:33:58 2007 +0000 +++ b/gui_reader.cc Wed Jan 02 21:03:09 2008 +0000 @@ -20,6 +20,7 @@ #include #include +#include "io_helper.h" #include #include @@ -33,34 +34,139 @@ void GuiReader::read(std::istream& is) { + using std::vector; + using std::string; + using std::pair; + using std::make_pair; + using std::string; + using std::map; + XmlIo x(is); - std::map m; - x("arrow_pos", m); - if ((int)m.size() == countEdges(mapstorage->graph)) + { x("main_node_map_names", gui_data.main_node_map_names); } + { x("gui_node_map_names", gui_data.gui_node_map_names); } + + { x("node_map_types", gui_data.node_map_types); } + + { x("main_edge_map_names", gui_data.main_edge_map_names); } + { x("gui_edge_map_names", gui_data.gui_edge_map_names); } + + { x("edge_map_types", gui_data.edge_map_types); } + + for (vector::const_iterator it = gui_data.gui_node_map_names.begin(); + it != gui_data.gui_node_map_names.end(); ++it) + { + MapValue::Type type = gui_data.node_map_types[*it]; + switch (type) { - for (EdgeIt e(mapstorage->graph); e != INVALID; ++e) - { - int edgeid = (int)(*mapstorage->edgemap_storage["label"])[e]; - mapstorage->arrow_pos.set(e, m[edgeid]); - } - mapstorage->ArrowPosReadOK(); + case MapValue::NUMERIC: + { + map* p_map_data = + new map; + gui_data.numeric_node_maps[*it] = p_map_data; + { x(*it, *p_map_data); } + } + break; + case MapValue::STRING: + { + map* p_map_data = + new map; + gui_data.string_node_maps[*it] = p_map_data; + { x(*it, *p_map_data); } + } + break; } - + } + + for (vector::const_iterator it = gui_data.gui_edge_map_names.begin(); + it != gui_data.gui_edge_map_names.end(); ++it) + { + MapValue::Type type = gui_data.edge_map_types[*it]; + switch (type) + { + case MapValue::NUMERIC: + { + map* p_map_data = + new map; + gui_data.numeric_edge_maps[*it] = p_map_data; + { x(*it, *p_map_data); } + } + break; + case MapValue::STRING: + { + map* p_map_data = + new map; + gui_data.string_edge_maps[*it] = p_map_data; + { x(*it, *p_map_data); } + } + break; + } + } + + { + std::string node_coords_save_dest; + { x("node_coords_save_dest", node_coords_save_dest); } + if (node_coords_save_dest == "gui_sect") + { + // read the node coorinates + gui_data.node_coords_save_dest = MapStorage::SpecMapSaveOpts::GUI_SECT; + { x("node_coord_map", gui_data.node_coord_map); } + } + else if (node_coords_save_dest == "nodeset_sect_1_map") + { + gui_data.node_coords_save_dest = MapStorage::SpecMapSaveOpts::NESET_SECT; + gui_data.node_coords_save_map_num = MapStorage::SpecMapSaveOpts::ONE_MAP; + { x("map_name", gui_data.node_coords_one_map_name); } + } + else if (node_coords_save_dest == "nodeset_sect_2_maps") + { + gui_data.node_coords_save_dest = MapStorage::SpecMapSaveOpts::NESET_SECT; + gui_data.node_coords_save_map_num = MapStorage::SpecMapSaveOpts::TWO_MAPS; + { x("map1_name", gui_data.node_coords_two_maps_1_name); } + { x("map2_name", gui_data.node_coords_two_maps_2_name); } + } + } + + { + std::string arrow_coords_save_dest; + { x("arrow_coords_save_dest", arrow_coords_save_dest); } + if (arrow_coords_save_dest == "gui_sect") + { + // read the arrow coorinates + gui_data.arrow_coords_save_dest = MapStorage::SpecMapSaveOpts::GUI_SECT; + { x("arrow_coord_map", gui_data.arrow_coord_map); } + } + else if (arrow_coords_save_dest == "edgeset_sect_1_map") + { + gui_data.arrow_coords_save_dest = MapStorage::SpecMapSaveOpts::NESET_SECT; + gui_data.arrow_coords_save_map_num = MapStorage::SpecMapSaveOpts::ONE_MAP; + { x("map_name", gui_data.arrow_coords_one_map_name); } + } + else if (arrow_coords_save_dest == "edgeset_sect_2_maps") + { + gui_data.arrow_coords_save_dest = MapStorage::SpecMapSaveOpts::NESET_SECT; + gui_data.arrow_coords_save_map_num = MapStorage::SpecMapSaveOpts::TWO_MAPS; + { x("map1_name", gui_data.arrow_coords_two_maps_1_name); } + { x("map2_name", gui_data.arrow_coords_two_maps_2_name); } + } + } + + + std::map nm; x("active_nodemaps", nm); for(int i=0;ichangeActiveMap(false, i, nm[i]); - } + { + mapstorage->changeActiveMap(false, i, nm[i]); + } std::map em; x("active_edgemaps", em); for(int i=0;ichangeActiveMap(true, i, em[i]); - } + { + mapstorage->changeActiveMap(true, i, em[i]); + } double attraction; double propulsation; @@ -77,6 +183,10 @@ mapstorage->redesign_data_changed(); } -GuiReader::GuiReader(LemonReader& reader, MapStorage* ms) : Parent(reader), mapstorage(ms) +GuiReader::GuiReader(LemonReader& reader, MapStorage* _mapstorage, + MapStorage::GUISectData& _gui_data) : + Parent(reader), + mapstorage(_mapstorage), + gui_data(_gui_data) { }