map_win.cc
author ladanyi
Fri, 29 Jul 2005 12:01:37 +0000
branchgui
changeset 53 e73d7540bd24
parent 48 b8ec84524fa2
child 62 80eefca04b1e
permissions -rw-r--r--
added support for saving files
     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::update()
   124 {
   125   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   126   {
   127     //filling in combo box with choices
   128     std::list<Glib::ustring> listStrings;
   129 
   130     listStrings.push_back("Default");
   131 
   132     std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
   133     for(;emsi!=ms.endOfEdgeMaps();emsi++)
   134     {
   135       listStrings.push_back(emsi->first);
   136     }
   137 
   138     e_combo_array[i].set_popdown_strings(listStrings);
   139   }
   140   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   141   {
   142     //filling in combo box with choices
   143     std::list<Glib::ustring> listStrings;
   144 
   145     listStrings.push_back("Default");
   146 
   147     std::map< std::string,Graph::NodeMap<double> * >::iterator emsi=ms.beginOfNodeMaps();
   148 
   149     for(;emsi!=ms.endOfNodeMaps();emsi++)
   150     {
   151       listStrings.push_back(emsi->first);
   152     }
   153 
   154     n_combo_array[i].set_popdown_strings(listStrings);
   155   }
   156 }
   157 
   158 void MapWin::eComboChanged(int prop)
   159 {
   160 
   161   Gtk::Entry* entry = e_combo_array[prop].get_entry();
   162 
   163   if(entry)
   164   {
   165     Glib::ustring mapname = entry->get_text();
   166     if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
   167     {
   168       if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") )
   169       {
   170 	switch(prop)
   171 	{
   172           case E_WIDTH:
   173 	    gdc.changeEdgeWidth(mapname);
   174 	    break;
   175           case E_COLOR:
   176 	    gdc.changeEdgeColor(mapname);
   177 	    break;
   178           case E_TEXT:
   179 	    gdc.changeEdgeText(mapname);
   180 	    break;
   181           default:
   182 	    std::cerr<<"Error\n";
   183 	}
   184       }
   185     }
   186   }
   187 };
   188 
   189 void MapWin::nComboChanged(int prop)
   190 {
   191 
   192   Gtk::Entry* entry = n_combo_array[prop].get_entry();
   193 
   194   if(entry)
   195   {
   196     Glib::ustring mapname = entry->get_text();
   197     if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
   198     {
   199       if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") )
   200       {
   201 	switch(prop)
   202 	{
   203           case N_RADIUS:
   204 	    gdc.changeNodeRadius(mapname);
   205 	    break;
   206           case N_COLOR:
   207 	    gdc.changeNodeColor(mapname);
   208 	    break;
   209           case N_TEXT:
   210 	    gdc.changeNodeText(mapname);
   211 	    break;
   212           default:
   213 	    std::cerr<<"Error\n";
   214 	}
   215       }
   216     }
   217   }
   218 };
   219 
   220 void MapWin::updateNode(Graph::Node node)
   221 {
   222   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   223     {
   224       Gtk::Entry* entry = n_combo_array[i].get_entry();
   225 
   226       if(entry)
   227 	{
   228 	  Glib::ustring mapname = entry->get_text();
   229 	  if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
   230 	    {
   231 	      if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") )
   232 		{
   233 		  switch(i)
   234 		    {
   235 		    case N_RADIUS:
   236 		      gdc.changeNodeRadius(mapname, node);
   237 		      break;
   238 		    case N_COLOR:
   239 		      gdc.changeNodeColor(mapname, node);
   240 		      break;
   241 		    case N_TEXT:
   242 		      gdc.changeNodeText(mapname, node);
   243 		      break;
   244 		    default:
   245 		      std::cerr<<"Error\n";
   246 		    }
   247 		}
   248 	    }
   249 	}
   250     }
   251 }
   252 
   253 void MapWin::updateEdge(Graph::Edge edge)
   254 {
   255   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   256     {
   257 
   258       Gtk::Entry* entry = e_combo_array[i].get_entry();
   259 
   260       if(entry)
   261 	{
   262 	  Glib::ustring mapname = entry->get_text();
   263 	  if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
   264 	    {
   265 
   266 	      if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") )
   267 		{
   268 		  switch(i)
   269 		    {
   270 		    case E_WIDTH:
   271 		      gdc.changeEdgeWidth(mapname, edge);
   272 		      break;
   273 		    case E_COLOR:
   274 		      gdc.changeEdgeColor(mapname, edge);
   275 		      break;
   276 		    case E_TEXT:
   277 		      gdc.changeEdgeText(mapname, edge);
   278 		      break;
   279 		    default:
   280 		      std::cerr<<"Error\n";
   281 		    }
   282 		}
   283 	    }
   284 	}
   285     }
   286 }
   287 
   288 void MapWin::registerNewEdgeMap(std::string newmapname)
   289 {
   290   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   291   {
   292     //filling in combo box with choices
   293     std::list<Glib::ustring> listStrings=e_combo_array[i].get_popdown_strings();
   294     listStrings.push_back(newmapname);
   295     e_combo_array[i].set_popdown_strings(listStrings);
   296   }
   297   //setting text property for the new map
   298   Gtk::Entry* entry = e_combo_array[E_TEXT].get_entry();
   299   entry->set_text((Glib::ustring)newmapname);
   300 }
   301 
   302 void MapWin::registerNewNodeMap(std::string newmapname)
   303 {
   304   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   305   {
   306     //filling in combo box with choices
   307     std::list<Glib::ustring> listStrings=n_combo_array[i].get_popdown_strings();
   308     listStrings.push_back(newmapname);
   309     n_combo_array[i].set_popdown_strings(listStrings);
   310   }
   311   //setting text property for the new map
   312   Gtk::Entry* entry = n_combo_array[N_TEXT].get_entry();
   313   entry->set_text((Glib::ustring)newmapname);
   314 }