gui/map_win.cc
author athos
Mon, 04 Jul 2005 13:08:31 +0000
changeset 1530 d99c3c84f797
parent 1524 587a823bcdd0
child 1586 1a8630f2e944
permissions -rw-r--r--
Doc.
     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   Gtk::Entry* entry = e_combo_array[prop].get_entry();
   126 
   127   if(entry)
   128   {
   129     Glib::ustring mapname = entry->get_text();
   130     if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
   131     {
   132       if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") )
   133       {
   134 	switch(prop)
   135 	{
   136           case E_WIDTH:
   137 	    gdc.changeEdgeWidth(mapname);
   138 	    break;
   139           case E_COLOR:
   140 	    gdc.changeEdgeColor(mapname);
   141 	    break;
   142           case E_TEXT:
   143 	    gdc.changeEdgeText(mapname);
   144 	    break;
   145           default:
   146 	    std::cout<<"Error\n";
   147 	}
   148       }
   149     }
   150   }
   151 };
   152 
   153 void MapWin::nComboChanged(int prop)
   154 {
   155 
   156   Gtk::Entry* entry = n_combo_array[prop].get_entry();
   157 
   158   if(entry)
   159   {
   160     Glib::ustring mapname = entry->get_text();
   161     if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
   162     {
   163       if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") )
   164       {
   165 	switch(prop)
   166 	{
   167           case N_RADIUS:
   168 	    gdc.changeNodeRadius(mapname);
   169 	    break;
   170           case N_COLOR:
   171 	    gdc.changeNodeColor(mapname);
   172 	    break;
   173           case N_TEXT:
   174 	    gdc.changeNodeText(mapname);
   175 	    break;
   176           default:
   177 	    std::cout<<"Error\n";
   178 	}
   179       }
   180     }
   181   }
   182 };
   183 
   184 void MapWin::updateNode(Graph::Node node)
   185 {
   186   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   187     {
   188       Gtk::Entry* entry = n_combo_array[i].get_entry();
   189 
   190       if(entry)
   191 	{
   192 	  Glib::ustring mapname = entry->get_text();
   193 	  if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
   194 	    {
   195 	      if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") )
   196 		{
   197 		  switch(i)
   198 		    {
   199 		    case N_RADIUS:
   200 		      gdc.changeNodeRadius(mapname, node);
   201 		      break;
   202 		    case N_COLOR:
   203 		      gdc.changeNodeColor(mapname, node);
   204 		      break;
   205 		    case N_TEXT:
   206 		      gdc.changeNodeText(mapname, node);
   207 		      break;
   208 		    default:
   209 		      std::cout<<"Error\n";
   210 		    }
   211 		}
   212 	    }
   213 	}
   214     }
   215 }
   216 
   217 void MapWin::updateEdge(Graph::Edge edge)
   218 {
   219   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   220     {
   221 
   222       Gtk::Entry* entry = e_combo_array[i].get_entry();
   223 
   224       if(entry)
   225 	{
   226 	  Glib::ustring mapname = entry->get_text();
   227 	  if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
   228 	    {
   229 
   230 	      if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") )
   231 		{
   232 		  switch(i)
   233 		    {
   234 		    case E_WIDTH:
   235 		      gdc.changeEdgeWidth(mapname, edge);
   236 		      break;
   237 		    case E_COLOR:
   238 		      gdc.changeEdgeColor(mapname, edge);
   239 		      break;
   240 		    case E_TEXT:
   241 		      gdc.changeEdgeText(mapname, edge);
   242 		      break;
   243 		    default:
   244 		      std::cout<<"Error\n";
   245 		    }
   246 		}
   247 	    }
   248 	}
   249     }
   250 }