ladanyi@6: #include ladanyi@6: #include ladanyi@6: hegyi@30: bool MapWin::closeIfEscapeIsPressed(GdkEventKey* e) ladanyi@6: { hegyi@8: if(e->keyval==GDK_Escape) hegyi@8: { hegyi@8: hide(); hegyi@8: } hegyi@8: return true; hegyi@8: } ladanyi@6: hegyi@28: MapWin::MapWin(const std::string& title, MapStorage & mapst, GraphDisplayerCanvas & grdispc):gdc(grdispc),ms(mapst) hegyi@8: { hegyi@8: set_title(title); hegyi@8: set_default_size(200, 50); ladanyi@6: hegyi@30: signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::closeIfEscapeIsPressed)); ladanyi@6: hegyi@28: e_combo_array=new Gtk::Combo [EDGE_PROPERTY_NUM]; hegyi@8: hegyi@28: table=new Gtk::Table(EDGE_PROPERTY_NUM, 2, false); hegyi@28: hegyi@28: for(int i=0;i listStrings; hegyi@8: hegyi@8: listStrings.push_back("Default"); ladanyi@6: hegyi@31: std::map< std::string,Graph::EdgeMap * >::iterator emsi=ms.beginOfEdgeMaps(); hegyi@31: for(;emsi!=ms.endOfEdgeMaps();emsi++) ladanyi@6: { hegyi@8: listStrings.push_back(emsi->first); ladanyi@6: } hegyi@8: hegyi@28: e_combo_array[i].set_popdown_strings(listStrings); hegyi@8: hegyi@8: //Restrict it to these choices only: hegyi@28: e_combo_array[i].set_value_in_list(); hegyi@8: hegyi@28: //binding signal to the actual entry hegyi@28: e_combo_array[i].get_entry()->signal_changed().connect hegyi@8: ( hegyi@8: sigc::bind hegyi@8: ( hegyi@30: sigc::mem_fun(*this, &MapWin::eComboChanged), hegyi@8: i hegyi@8: ) hegyi@8: ); hegyi@8: hegyi@8: //placing actual entry in the right place hegyi@8: hegyi@8: label=new Gtk::Label; hegyi@28: label->set_text(edge_property_strings[i]); hegyi@28: hegyi@28: (*table).attach(*label,0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3); hegyi@28: (*table).attach(e_combo_array[i],1,2,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3); hegyi@8: hegyi@8: ladanyi@6: } ladanyi@6: hegyi@28: vbox.pack_start(*(new Gtk::Label("Edge properties"))); hegyi@8: hegyi@28: vbox.pack_start(*table); hegyi@28: hegyi@28: vbox.pack_start(*(new Gtk::HSeparator)); hegyi@28: hegyi@28: n_combo_array=new Gtk::Combo [NODE_PROPERTY_NUM]; hegyi@28: hegyi@28: table=new Gtk::Table(NODE_PROPERTY_NUM, 2, false); hegyi@28: hegyi@28: for(int i=0;i listStrings; hegyi@28: hegyi@28: listStrings.push_back("Default"); hegyi@28: hegyi@31: std::map< std::string,Graph::NodeMap * >::iterator emsi=ms.beginOfNodeMaps(); hegyi@28: hegyi@31: for(;emsi!=ms.endOfNodeMaps();emsi++) hegyi@28: { hegyi@31: listStrings.push_back(emsi->first); hegyi@28: } hegyi@28: hegyi@28: n_combo_array[i].set_popdown_strings(listStrings); hegyi@28: hegyi@28: //Restrict it to these choices only: hegyi@28: n_combo_array[i].set_value_in_list(); hegyi@28: hegyi@28: //binding signal to thew actual entry hegyi@28: n_combo_array[i].get_entry()->signal_changed().connect hegyi@28: ( hegyi@28: sigc::bind hegyi@28: ( hegyi@30: sigc::mem_fun(*this, &MapWin::nComboChanged), hegyi@28: i hegyi@28: ) hegyi@28: ); hegyi@28: hegyi@28: //placing actual entry in the right place hegyi@28: hegyi@28: label=new Gtk::Label; hegyi@28: label->set_text(node_property_strings[i]); hegyi@28: hegyi@28: (*table).attach(*label,0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3); hegyi@28: (*table).attach(n_combo_array[i],1,2,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3); hegyi@28: hegyi@28: hegyi@28: } hegyi@28: hegyi@28: add(vbox); hegyi@28: hegyi@28: vbox.pack_start(*(new Gtk::Label("Node properties"))); hegyi@28: hegyi@28: vbox.pack_start(*table); ladanyi@6: ladanyi@6: show_all_children(); ladanyi@6: ladanyi@6: } ladanyi@6: hegyi@30: void MapWin::eComboChanged(int prop) ladanyi@6: { hegyi@40: hegyi@28: Gtk::Entry* entry = e_combo_array[prop].get_entry(); ladanyi@6: hegyi@8: if(entry) ladanyi@6: { hegyi@8: Glib::ustring mapname = entry->get_text(); hegyi@8: if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty. hegyi@8: { hegyi@31: if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") ) hegyi@8: { hegyi@8: switch(prop) hegyi@8: { hegyi@28: case E_WIDTH: hegyi@28: gdc.changeEdgeWidth(mapname); hegyi@8: break; hegyi@28: case E_COLOR: hegyi@28: gdc.changeEdgeColor(mapname); hegyi@8: break; hegyi@28: case E_TEXT: hegyi@28: gdc.changeEdgeText(mapname); hegyi@8: break; hegyi@8: default: hegyi@8: std::cout<<"Error\n"; hegyi@8: } hegyi@8: } ladanyi@6: } ladanyi@6: } ladanyi@6: }; hegyi@28: hegyi@30: void MapWin::nComboChanged(int prop) hegyi@28: { hegyi@28: hegyi@28: Gtk::Entry* entry = n_combo_array[prop].get_entry(); hegyi@28: hegyi@28: if(entry) hegyi@28: { hegyi@28: Glib::ustring mapname = entry->get_text(); hegyi@28: if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty. hegyi@28: { hegyi@31: if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") ) hegyi@28: { hegyi@28: switch(prop) hegyi@28: { hegyi@28: case N_RADIUS: hegyi@28: gdc.changeNodeRadius(mapname); hegyi@28: break; hegyi@28: case N_COLOR: hegyi@28: gdc.changeNodeColor(mapname); hegyi@28: break; hegyi@28: case N_TEXT: hegyi@28: gdc.changeNodeText(mapname); hegyi@28: break; hegyi@28: default: hegyi@28: std::cout<<"Error\n"; hegyi@28: } hegyi@28: } hegyi@28: } hegyi@28: } hegyi@28: }; hegyi@28: hegyi@30: void MapWin::updateNode(Graph::Node node) hegyi@28: { hegyi@28: for(int i=0;iget_text(); hegyi@28: if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty. hegyi@28: { hegyi@31: if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") ) hegyi@28: { hegyi@28: switch(i) hegyi@28: { hegyi@28: case N_RADIUS: hegyi@31: gdc.changeNodeRadius(mapname, node); hegyi@28: break; hegyi@28: case N_COLOR: hegyi@28: gdc.changeNodeColor(mapname, node); hegyi@28: break; hegyi@28: case N_TEXT: hegyi@28: gdc.changeNodeText(mapname, node); hegyi@28: break; hegyi@28: default: hegyi@28: std::cout<<"Error\n"; hegyi@28: } hegyi@28: } hegyi@28: } hegyi@28: } hegyi@28: } hegyi@28: } hegyi@28: hegyi@30: void MapWin::updateEdge(Graph::Edge edge) hegyi@28: { hegyi@28: for(int i=0;iget_text(); hegyi@28: if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty. hegyi@28: { hegyi@28: hegyi@31: if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") ) hegyi@28: { hegyi@28: switch(i) hegyi@28: { hegyi@28: case E_WIDTH: hegyi@31: gdc.changeEdgeWidth(mapname, edge); hegyi@28: break; hegyi@28: case E_COLOR: hegyi@28: gdc.changeEdgeColor(mapname, edge); hegyi@28: break; hegyi@28: case E_TEXT: hegyi@28: gdc.changeEdgeText(mapname, edge); hegyi@28: break; hegyi@28: default: hegyi@28: std::cout<<"Error\n"; hegyi@28: } hegyi@28: } hegyi@28: } hegyi@28: } hegyi@28: } hegyi@28: } hegyi@38: hegyi@40: void MapWin::registerNewEdgeMap(std::string newmapname) hegyi@38: { hegyi@40: for(int i=0;i listStrings=e_combo_array[i].get_popdown_strings(); hegyi@40: listStrings.push_back(newmapname); hegyi@40: e_combo_array[i].set_popdown_strings(listStrings); hegyi@40: } hegyi@40: Gtk::Entry* entry = e_combo_array[E_TEXT].get_entry(); hegyi@40: entry->set_text((Glib::ustring)newmapname); hegyi@38: } hegyi@38: hegyi@40: void MapWin::registerNewNodeMap(std::string newmapname) hegyi@38: { hegyi@40: for(int i=0;i listStrings=n_combo_array[i].get_popdown_strings(); hegyi@40: listStrings.push_back(newmapname); hegyi@40: n_combo_array[i].set_popdown_strings(listStrings); hegyi@40: } hegyi@38: }