gui/mw-mapselector.cc
changeset 1837 8dd6160ff699
parent 1823 cb082cdf3667
child 1838 b61682f0ee96
equal deleted inserted replaced
1:64cf28671a4c 2:b29deeb4f1f2
     1 #include "map_win.h"
     1 #include "map_win.h"
     2 
     2 
     3 MapWin::MapSelector::MapSelector(GraphDisplayerCanvas & grdispc, MapStorage & mapst, int identifier, bool edge):gdc(grdispc),ms(mapst),id(identifier),itisedge(edge),default_state(true),set_new_map(false),node_to_update(INVALID),edge_to_update(INVALID)
     3 MapWin::MapSelector::MapSelector(std::vector<std::string> ml, int identifier, bool edge):id(identifier),itisedge(edge),default_state(true),set_new_map(false)
     4 {
     4 {
     5   update_list();
     5   update_list(ml);
     6 
     6 
     7   cbt.set_active(0);
     7   cbt.set_active(0);
     8 
     8 
     9   //binding signal to the actual entry
     9   //binding signal to the actual entry
    10   cbt.signal_changed().connect
    10   cbt.signal_changed().connect
    48 }
    48 }
    49 
    49 
    50 void MapWin::MapSelector::new_but_pressed()
    50 void MapWin::MapSelector::new_but_pressed()
    51 {
    51 {
    52   set_new_map=true;
    52   set_new_map=true;
    53   (new NewMapWin("NewMapWin", gdc, itisedge, false))->run();
    53   signal_newmapwin.emit(itisedge);
    54 }
    54 }
    55 
    55 
    56 void MapWin::MapSelector::update_list()
    56 void MapWin::MapSelector::update_list( std::vector< std::string > ml )
    57 {
    57 {
    58   cbt.clear();
    58   cbt.clear();
    59   if(itisedge)
    59   std::vector< std::string >::iterator emsi=ml.begin();
       
    60   for(;emsi!=ml.end();emsi++)
    60     {
    61     {
    61       std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
    62       cbt.append_text(*emsi);
    62       for(;emsi!=ms.endOfEdgeMaps();emsi++)
       
    63 	{
       
    64 	  cbt.append_text(emsi->first);
       
    65 	}
       
    66     }
       
    67   else
       
    68     {
       
    69       std::map< std::string,Graph::NodeMap<double> * >::iterator emsi=ms.beginOfNodeMaps();
       
    70       for(;emsi!=ms.endOfNodeMaps();emsi++)
       
    71 	{
       
    72 	  cbt.append_text(emsi->first);
       
    73 	}
       
    74     }
    63     }
    75   cbt.prepend_text("Default values");
    64   cbt.prepend_text("Default values");
    76 }
    65 }
    77 
    66 
    78 void MapWin::MapSelector::comboChanged()
    67 void MapWin::MapSelector::comboChanged()
    81     {
    70     {
    82       default_state=false;
    71       default_state=false;
    83       Glib::ustring mapname = cbt.get_active_text();
    72       Glib::ustring mapname = cbt.get_active_text();
    84       if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
    73       if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
    85 	{
    74 	{
    86 	  if(itisedge)
    75 	  signal_cbt.emit(mapname);
    87 	    {
       
    88 	      if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) )
       
    89 		{
       
    90 		  Edge edge=edge_to_update;
       
    91 		  switch(id)
       
    92 		    {
       
    93 		    case E_WIDTH:
       
    94 		      gdc.changeEdgeWidth(mapname, edge);
       
    95 		      break;
       
    96 		    case E_COLOR:
       
    97 		      gdc.changeEdgeColor(mapname, edge);
       
    98 		      break;
       
    99 		    case E_TEXT:
       
   100 		      gdc.changeEdgeText(mapname, edge);
       
   101 		      break;
       
   102 		    default:
       
   103 		      std::cerr<<"Error\n";
       
   104 		    }
       
   105 		}
       
   106 	    }
       
   107 	  else
       
   108 	    {
       
   109 	      if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) )
       
   110 		{
       
   111 		  Node node=node_to_update;
       
   112 		  switch(id)
       
   113 		    {
       
   114 		    case N_RADIUS:
       
   115 		      gdc.changeNodeRadius(mapname, node);
       
   116 		      break;
       
   117 		    case N_COLOR:
       
   118 		      gdc.changeNodeColor(mapname, node);
       
   119 		      break;
       
   120 		    case N_TEXT:
       
   121 		      gdc.changeNodeText(mapname, node);
       
   122 		      break;
       
   123 		    default:
       
   124 		      std::cerr<<"Error\n";
       
   125 		    }
       
   126 		}
       
   127 	    }
       
   128 	}
    76 	}
   129     }
    77     }
   130   else if((!default_state)&&(cbt.get_active_row_number()==0))
    78   else if((!default_state)&&(cbt.get_active_row_number()==0))
   131     {
    79     {
       
    80       signal_cbt.emit("");
   132       reset();
    81       reset();
   133     }
    82     }
   134 }
    83 }
   135 
    84 
   136 void MapWin::MapSelector::reset()
    85 void MapWin::MapSelector::reset()
   137 {
    86 {
   138   default_state=true;
    87   default_state=true;
   139   cbt.set_active(0);
    88   cbt.set_active(0);
   140 
    89 
   141   if(itisedge)
    90   signal_cbt.emit("");
   142     {
       
   143       Edge edge=edge_to_update;
       
   144       switch(id)
       
   145 	{
       
   146 	case E_WIDTH:
       
   147 	  gdc.resetEdgeWidth(edge);
       
   148 	  break;
       
   149 	case E_COLOR:
       
   150 	  gdc.resetEdgeColor(edge);
       
   151 	  break;
       
   152 	case E_TEXT:
       
   153 	  gdc.resetEdgeText(edge);
       
   154 	  break;
       
   155 	default:
       
   156 	  std::cerr<<"Error\n";
       
   157 	}
       
   158     }
       
   159   else
       
   160     {
       
   161       Node node=node_to_update;	
       
   162       switch(id)
       
   163 	{
       
   164 	case N_RADIUS:
       
   165 	  gdc.resetNodeRadius(node);
       
   166 	  break;
       
   167 	case N_COLOR:
       
   168 	  gdc.resetNodeColor(node);
       
   169 	  break;
       
   170 	case N_TEXT:
       
   171 	  gdc.resetNodeText(node);
       
   172 	  break;
       
   173 	default:
       
   174 	  std::cerr<<"Error\n";
       
   175 	}
       
   176     }
       
   177 }
    91 }
   178 
    92 
   179 void MapWin::MapSelector::update(Node node)
       
   180 {
       
   181   node_to_update=node;
       
   182   if(default_state)
       
   183     {
       
   184       reset();
       
   185     }
       
   186   else
       
   187     {
       
   188       comboChanged();
       
   189     }
       
   190   node_to_update=INVALID;
       
   191 }
       
   192 
       
   193 void MapWin::MapSelector::update(Edge edge)
       
   194 {
       
   195   edge_to_update=edge;
       
   196   if(default_state)
       
   197     {
       
   198       reset();
       
   199     }
       
   200   else
       
   201     {
       
   202       comboChanged();
       
   203     }
       
   204   edge_to_update=INVALID;
       
   205 }
       
   206 
    93 
   207 Glib::ustring MapWin::MapSelector::get_active_text()
    94 Glib::ustring MapWin::MapSelector::get_active_text()
   208 {
    95 {
   209   return cbt.get_active_text();
    96   return cbt.get_active_text();
   210 }
    97 }
   221     {
   108     {
   222       set_active_text(text);
   109       set_active_text(text);
   223       set_new_map=false;
   110       set_new_map=false;
   224     }
   111     }
   225 }
   112 }
       
   113 
       
   114 sigc::signal<void, std::string> MapWin::MapSelector::signal_cbt_ch()
       
   115 {
       
   116   return signal_cbt;
       
   117 }
       
   118 
       
   119 sigc::signal<void, bool> MapWin::MapSelector::signal_newmapwin_needed()
       
   120 {
       
   121   return signal_newmapwin;
       
   122 }