gui/map_win.cc
author hegyi
Tue, 26 Jul 2005 21:19:41 +0000
changeset 1592 4708b716d2f4
parent 1589 9192e1b26d32
child 1594 0bd9e53c8b28
permissions -rw-r--r--
EdgeMap and NodeMap creation is done, at last. Bach 4ever.
     1 #include <map_win.h>
     2 #include <set>
     3 
     4 bool MapWin::closeIfEscapeIsPressed(GdkEventKey* e)
     5 {
     6   if(e->keyval==GDK_Escape)
     7   {
     8     hide();
     9   }
    10   return true;
    11 }
    12 
    13 MapWin::MapWin(const std::string& title, MapStorage & mapst, GraphDisplayerCanvas & grdispc):gdc(grdispc),ms(mapst)
    14 {
    15   set_title(title);
    16   set_default_size(200, 50);
    17 
    18   signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::closeIfEscapeIsPressed));
    19 
    20   e_combo_array=new Gtk::Combo [EDGE_PROPERTY_NUM];
    21 
    22   table=new Gtk::Table(EDGE_PROPERTY_NUM, 2, false);
    23 
    24   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
    25   {
    26     //filling in combo box with choices
    27     std::list<Glib::ustring> listStrings;
    28 
    29     listStrings.push_back("Default");
    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   }
    62 
    63   vbox.pack_start(*(new Gtk::Label("Edge properties")));
    64 
    65   vbox.pack_start(*table);
    66 
    67   vbox.pack_start(*(new Gtk::HSeparator));
    68 
    69   n_combo_array=new Gtk::Combo [NODE_PROPERTY_NUM];
    70 
    71   table=new Gtk::Table(NODE_PROPERTY_NUM, 2, false);
    72 
    73   for(int i=0;i<NODE_PROPERTY_NUM;i++)
    74   {
    75     //filling in combo box with choices
    76     std::list<Glib::ustring> listStrings;
    77 
    78     listStrings.push_back("Default");
    79 
    80     std::map< std::string,Graph::NodeMap<double> * >::iterator emsi=ms.beginOfNodeMaps();
    81 
    82     for(;emsi!=ms.endOfNodeMaps();emsi++)
    83     {
    84       listStrings.push_back(emsi->first);
    85     }
    86 
    87     n_combo_array[i].set_popdown_strings(listStrings);
    88 
    89     //Restrict it to these choices only:
    90     n_combo_array[i].set_value_in_list();
    91 
    92     //binding signal to thew actual entry
    93     n_combo_array[i].get_entry()->signal_changed().connect
    94     (
    95      sigc::bind
    96      (
    97       sigc::mem_fun(*this, &MapWin::nComboChanged),
    98       i
    99      )
   100     );
   101 
   102     //placing actual entry in the right place
   103 
   104     label=new Gtk::Label;
   105     label->set_text(node_property_strings[i]);
   106         
   107     (*table).attach(*label,0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
   108     (*table).attach(n_combo_array[i],1,2,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
   109 
   110 
   111   }
   112 
   113   add(vbox);
   114 
   115   vbox.pack_start(*(new Gtk::Label("Node properties")));
   116 
   117   vbox.pack_start(*table);
   118 
   119   show_all_children();
   120 
   121 }
   122 
   123 void MapWin::eComboChanged(int prop)
   124 {
   125 
   126   Gtk::Entry* entry = e_combo_array[prop].get_entry();
   127 
   128   if(entry)
   129   {
   130     Glib::ustring mapname = entry->get_text();
   131     if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
   132     {
   133       if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") )
   134       {
   135 	switch(prop)
   136 	{
   137           case E_WIDTH:
   138 	    gdc.changeEdgeWidth(mapname);
   139 	    break;
   140           case E_COLOR:
   141 	    gdc.changeEdgeColor(mapname);
   142 	    break;
   143           case E_TEXT:
   144 	    gdc.changeEdgeText(mapname);
   145 	    break;
   146           default:
   147 	    std::cout<<"Error\n";
   148 	}
   149       }
   150     }
   151   }
   152 };
   153 
   154 void MapWin::nComboChanged(int prop)
   155 {
   156 
   157   Gtk::Entry* entry = n_combo_array[prop].get_entry();
   158 
   159   if(entry)
   160   {
   161     Glib::ustring mapname = entry->get_text();
   162     if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
   163     {
   164       if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") )
   165       {
   166 	switch(prop)
   167 	{
   168           case N_RADIUS:
   169 	    gdc.changeNodeRadius(mapname);
   170 	    break;
   171           case N_COLOR:
   172 	    gdc.changeNodeColor(mapname);
   173 	    break;
   174           case N_TEXT:
   175 	    gdc.changeNodeText(mapname);
   176 	    break;
   177           default:
   178 	    std::cout<<"Error\n";
   179 	}
   180       }
   181     }
   182   }
   183 };
   184 
   185 void MapWin::updateNode(Graph::Node node)
   186 {
   187   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   188     {
   189       Gtk::Entry* entry = n_combo_array[i].get_entry();
   190 
   191       if(entry)
   192 	{
   193 	  Glib::ustring mapname = entry->get_text();
   194 	  if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
   195 	    {
   196 	      if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") )
   197 		{
   198 		  switch(i)
   199 		    {
   200 		    case N_RADIUS:
   201 		      gdc.changeNodeRadius(mapname, node);
   202 		      break;
   203 		    case N_COLOR:
   204 		      gdc.changeNodeColor(mapname, node);
   205 		      break;
   206 		    case N_TEXT:
   207 		      gdc.changeNodeText(mapname, node);
   208 		      break;
   209 		    default:
   210 		      std::cout<<"Error\n";
   211 		    }
   212 		}
   213 	    }
   214 	}
   215     }
   216 }
   217 
   218 void MapWin::updateEdge(Graph::Edge edge)
   219 {
   220   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   221     {
   222 
   223       Gtk::Entry* entry = e_combo_array[i].get_entry();
   224 
   225       if(entry)
   226 	{
   227 	  Glib::ustring mapname = entry->get_text();
   228 	  if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
   229 	    {
   230 
   231 	      if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") )
   232 		{
   233 		  switch(i)
   234 		    {
   235 		    case E_WIDTH:
   236 		      gdc.changeEdgeWidth(mapname, edge);
   237 		      break;
   238 		    case E_COLOR:
   239 		      gdc.changeEdgeColor(mapname, edge);
   240 		      break;
   241 		    case E_TEXT:
   242 		      gdc.changeEdgeText(mapname, edge);
   243 		      break;
   244 		    default:
   245 		      std::cout<<"Error\n";
   246 		    }
   247 		}
   248 	    }
   249 	}
   250     }
   251 }
   252 
   253 void MapWin::registerNewEdgeMap(std::string newmapname)
   254 {
   255   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   256   {
   257     //filling in combo box with choices
   258     std::list<Glib::ustring> listStrings=e_combo_array[i].get_popdown_strings();
   259     listStrings.push_back(newmapname);
   260     e_combo_array[i].set_popdown_strings(listStrings);
   261   }
   262   Gtk::Entry* entry = e_combo_array[E_TEXT].get_entry();
   263   entry->set_text((Glib::ustring)newmapname);
   264 }
   265 
   266 void MapWin::registerNewNodeMap(std::string newmapname)
   267 {
   268   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   269   {
   270     //filling in combo box with choices
   271     std::list<Glib::ustring> listStrings=n_combo_array[i].get_popdown_strings();
   272     listStrings.push_back(newmapname);
   273     n_combo_array[i].set_popdown_strings(listStrings);
   274   }
   275   Gtk::Entry* entry = n_combo_array[N_TEXT].get_entry();
   276   entry->set_text((Glib::ustring)newmapname);
   277 }