gui/map_win.cc
changeset 1731 616bc933c2bc
parent 1648 dd8672338691
child 1733 5e0d97823ba2
equal deleted inserted replaced
14:dec1cbf5ff76 15:6e2b4002ece5
    15   set_title(title);
    15   set_title(title);
    16   set_default_size(200, 50);
    16   set_default_size(200, 50);
    17 
    17 
    18   signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::closeIfEscapeIsPressed));
    18   signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::closeIfEscapeIsPressed));
    19 
    19 
    20   e_combo_array=new Gtk::Combo [EDGE_PROPERTY_NUM];
    20   e_combo_array=new MapSelector * [EDGE_PROPERTY_NUM];
    21 
    21 
    22   table=new Gtk::Table(EDGE_PROPERTY_NUM, 2, false);
    22   table=new Gtk::Table(EDGE_PROPERTY_NUM, 1, false);
    23 
    23 
    24   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
    24   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
    25   {
    25   {
    26     //filling in combo box with choices
    26     e_combo_array[i]=new MapSelector(gdc, ms, *this, i, true);
    27     std::list<Glib::ustring> listStrings;
       
    28 
    27 
    29     listStrings.push_back("Default");
    28     (*table).attach((*(e_combo_array[i])),0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
    30 
       
    31     std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
       
    32     for(;emsi!=ms.endOfEdgeMaps();emsi++)
       
    33     {
       
    34 	listStrings.push_back(emsi->first);
       
    35     }
       
    36 
       
    37     e_combo_array[i].set_popdown_strings(listStrings);
       
    38 
       
    39     //Restrict it to these choices only:
       
    40     e_combo_array[i].set_value_in_list();
       
    41 
       
    42     //binding signal to the actual entry
       
    43     e_combo_array[i].get_entry()->signal_changed().connect
       
    44     (
       
    45      sigc::bind
       
    46      (
       
    47       sigc::mem_fun(*this, &MapWin::eComboChanged),
       
    48       i
       
    49      )
       
    50     );
       
    51 
       
    52     //placing actual entry in the right place
       
    53 
       
    54     label=new Gtk::Label;
       
    55     label->set_text(edge_property_strings[i]);
       
    56         
       
    57     (*table).attach(*label,0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
       
    58     (*table).attach(e_combo_array[i],1,2,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
       
    59 
       
    60 
       
    61   }
    29   }
    62 
    30 
    63   vbox.pack_start(*(new Gtk::Label("Edge properties")));
    31   vbox.pack_start(*(new Gtk::Label("Edge properties")));
    64 
    32 
    65   vbox.pack_start(*table);
    33   vbox.pack_start(*table);
    66 
    34 
    67   vbox.pack_start(*(new Gtk::HSeparator));
    35   vbox.pack_start(*(new Gtk::HSeparator));
    68 
    36 
    69   n_combo_array=new Gtk::Combo [NODE_PROPERTY_NUM];
    37   n_combo_array=new MapSelector * [NODE_PROPERTY_NUM];
    70 
    38 
    71   table=new Gtk::Table(NODE_PROPERTY_NUM, 2, false);
    39   table=new Gtk::Table(NODE_PROPERTY_NUM, 1, false);
    72 
    40 
    73   for(int i=0;i<NODE_PROPERTY_NUM;i++)
    41   for(int i=0;i<NODE_PROPERTY_NUM;i++)
    74   {
    42   {
    75     //filling in combo box with choices
    43     n_combo_array[i]=new MapSelector(gdc, ms, *this, i, false);
    76     std::list<Glib::ustring> listStrings;
       
    77 
    44 
    78     listStrings.push_back("Default");
    45     (*table).attach((*(n_combo_array[i])),0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
    79 
       
    80     std::map< std::string,Graph::NodeMap<double> * >::iterator emsi=ms.beginOfNodeMaps();
       
    81 
       
    82     for(;emsi!=ms.endOfNodeMaps();emsi++)
       
    83     {
       
    84       if ((emsi->first != "coordinates_x") && (emsi->first != "coordinates_y"))
       
    85       {
       
    86         listStrings.push_back(emsi->first);
       
    87       }
       
    88     }
       
    89 
       
    90     n_combo_array[i].set_popdown_strings(listStrings);
       
    91 
       
    92     //Restrict it to these choices only:
       
    93     n_combo_array[i].set_value_in_list();
       
    94 
       
    95     //binding signal to thew actual entry
       
    96     n_combo_array[i].get_entry()->signal_changed().connect
       
    97     (
       
    98      sigc::bind
       
    99      (
       
   100       sigc::mem_fun(*this, &MapWin::nComboChanged),
       
   101       i
       
   102      )
       
   103     );
       
   104 
       
   105     //placing actual entry in the right place
       
   106 
       
   107     label=new Gtk::Label;
       
   108     label->set_text(node_property_strings[i]);
       
   109         
       
   110     (*table).attach(*label,0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
       
   111     (*table).attach(n_combo_array[i],1,2,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
       
   112 
       
   113 
       
   114   }
    46   }
   115 
    47 
   116   add(vbox);
    48   add(vbox);
   117 
    49 
   118   vbox.pack_start(*(new Gtk::Label("Node properties")));
    50   vbox.pack_start(*(new Gtk::Label("Node properties")));
   125 
    57 
   126 void MapWin::update()
    58 void MapWin::update()
   127 {
    59 {
   128   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
    60   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   129   {
    61   {
   130     //filling in combo box with choices
    62     e_combo_array[i]->update_list();
   131     std::list<Glib::ustring> listStrings;
    63   }
   132 
    64 
   133     listStrings.push_back("Default");
       
   134 
       
   135     std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
       
   136     for(;emsi!=ms.endOfEdgeMaps();emsi++)
       
   137     {
       
   138       listStrings.push_back(emsi->first);
       
   139     }
       
   140 
       
   141     e_combo_array[i].set_popdown_strings(listStrings);
       
   142   }
       
   143   for(int i=0;i<NODE_PROPERTY_NUM;i++)
    65   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   144   {
    66   {
   145     //filling in combo box with choices
    67     n_combo_array[i]->update_list();
   146     std::list<Glib::ustring> listStrings;
       
   147 
       
   148     listStrings.push_back("Default");
       
   149 
       
   150     std::map< std::string,Graph::NodeMap<double> * >::iterator emsi=ms.beginOfNodeMaps();
       
   151 
       
   152     for(;emsi!=ms.endOfNodeMaps();emsi++)
       
   153     {
       
   154       if ((emsi->first != "coordinates_x") && (emsi->first != "coordinates_y"))
       
   155       {
       
   156         listStrings.push_back(emsi->first);
       
   157       }
       
   158     }
       
   159 
       
   160     n_combo_array[i].set_popdown_strings(listStrings);
       
   161   }
    68   }
   162 }
    69 }
   163 
    70 
   164 void MapWin::eComboChanged(int prop)
       
   165 {
       
   166 
       
   167   Gtk::Entry* entry = e_combo_array[prop].get_entry();
       
   168 
       
   169   if(entry)
       
   170   {
       
   171     Glib::ustring mapname = entry->get_text();
       
   172     if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
       
   173     {
       
   174       if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") )
       
   175       {
       
   176 	switch(prop)
       
   177 	{
       
   178           case E_WIDTH:
       
   179 	    gdc.changeEdgeWidth(mapname);
       
   180 	    break;
       
   181           case E_COLOR:
       
   182 	    gdc.changeEdgeColor(mapname);
       
   183 	    break;
       
   184           case E_TEXT:
       
   185 	    gdc.changeEdgeText(mapname);
       
   186 	    break;
       
   187           default:
       
   188 	    std::cerr<<"Error\n";
       
   189 	}
       
   190       }
       
   191     }
       
   192   }
       
   193 };
       
   194 
       
   195 void MapWin::nComboChanged(int prop)
       
   196 {
       
   197 
       
   198   Gtk::Entry* entry = n_combo_array[prop].get_entry();
       
   199 
       
   200   if(entry)
       
   201   {
       
   202     Glib::ustring mapname = entry->get_text();
       
   203     if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
       
   204     {
       
   205       if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") )
       
   206       {
       
   207 	switch(prop)
       
   208 	{
       
   209           case N_RADIUS:
       
   210 	    gdc.changeNodeRadius(mapname);
       
   211 	    break;
       
   212           case N_COLOR:
       
   213 	    gdc.changeNodeColor(mapname);
       
   214 	    break;
       
   215           case N_TEXT:
       
   216 	    gdc.changeNodeText(mapname);
       
   217 	    break;
       
   218           default:
       
   219 	    std::cerr<<"Error\n";
       
   220 	}
       
   221       }
       
   222     }
       
   223   }
       
   224 };
       
   225 
    71 
   226 void MapWin::updateNode(Node node)
    72 void MapWin::updateNode(Node node)
   227 {
    73 {
   228   for(int i=0;i<NODE_PROPERTY_NUM;i++)
    74   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   229     {
    75     {
   230       Gtk::Entry* entry = n_combo_array[i].get_entry();
    76       n_combo_array[i]->update(node);
   231 
       
   232       if(entry)
       
   233 	{
       
   234 	  Glib::ustring mapname = entry->get_text();
       
   235 	  if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
       
   236 	    {
       
   237 	      if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") )
       
   238 		{
       
   239 		  switch(i)
       
   240 		    {
       
   241 		    case N_RADIUS:
       
   242 		      gdc.changeNodeRadius(mapname, node);
       
   243 		      break;
       
   244 		    case N_COLOR:
       
   245 		      gdc.changeNodeColor(mapname, node);
       
   246 		      break;
       
   247 		    case N_TEXT:
       
   248 		      gdc.changeNodeText(mapname, node);
       
   249 		      break;
       
   250 		    default:
       
   251 		      std::cerr<<"Error\n";
       
   252 		    }
       
   253 		}
       
   254 	    }
       
   255 	}
       
   256     }
    77     }
   257 }
    78 }
   258 
    79 
   259 void MapWin::updateEdge(Edge edge)
    80 void MapWin::updateEdge(Edge edge)
   260 {
    81 {
   261   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
    82   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   262     {
    83     {
   263 
    84       e_combo_array[i]->update(edge);
   264       Gtk::Entry* entry = e_combo_array[i].get_entry();
       
   265 
       
   266       if(entry)
       
   267 	{
       
   268 	  Glib::ustring mapname = entry->get_text();
       
   269 	  if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
       
   270 	    {
       
   271 
       
   272 	      if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") )
       
   273 		{
       
   274 		  switch(i)
       
   275 		    {
       
   276 		    case E_WIDTH:
       
   277 		      gdc.changeEdgeWidth(mapname, edge);
       
   278 		      break;
       
   279 		    case E_COLOR:
       
   280 		      gdc.changeEdgeColor(mapname, edge);
       
   281 		      break;
       
   282 		    case E_TEXT:
       
   283 		      gdc.changeEdgeText(mapname, edge);
       
   284 		      break;
       
   285 		    default:
       
   286 		      std::cerr<<"Error\n";
       
   287 		    }
       
   288 		}
       
   289 	    }
       
   290 	}
       
   291     }
    85     }
   292 }
    86 }
   293 
    87 
   294 void MapWin::registerNewEdgeMap(std::string newmapname)
    88 void MapWin::registerNewEdgeMap(std::string newmapname)
   295 {
    89 {
   296   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
    90   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   297   {
    91   {
   298     //filling in combo box with choices
    92     //filling in combo box with choices
   299     std::list<Glib::ustring> listStrings=e_combo_array[i].get_popdown_strings();
    93     e_combo_array[i]->append_text((Glib::ustring)newmapname);
   300     listStrings.push_back(newmapname);
       
   301     e_combo_array[i].set_popdown_strings(listStrings);
       
   302   }
    94   }
   303   //setting text property for the new map
    95   //setting text property for the new map
   304   Gtk::Entry* entry = e_combo_array[E_TEXT].get_entry();
    96   e_combo_array[N_TEXT]->set_active_text((Glib::ustring)newmapname);
   305   entry->set_text((Glib::ustring)newmapname);
       
   306 }
    97 }
   307 
    98 
   308 void MapWin::registerNewNodeMap(std::string newmapname)
    99 void MapWin::registerNewNodeMap(std::string newmapname)
   309 {
   100 {
   310   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   101   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   311   {
   102   {
   312     //filling in combo box with choices
   103     //filling in combo box with choices
   313     std::list<Glib::ustring> listStrings=n_combo_array[i].get_popdown_strings();
   104     e_combo_array[i]->append_text((Glib::ustring)newmapname);
   314     listStrings.push_back(newmapname);
       
   315     n_combo_array[i].set_popdown_strings(listStrings);
       
   316   }
   105   }
   317   //setting text property for the new map
   106   //setting text property for the new map
   318   Gtk::Entry* entry = n_combo_array[N_TEXT].get_entry();
   107   n_combo_array[N_TEXT]->set_active_text((Glib::ustring)newmapname);
   319   entry->set_text((Glib::ustring)newmapname);
       
   320 }
   108 }