gui/map_win.cc
author hegyi
Fri, 27 May 2005 10:34:20 +0000
changeset 1440 3d2e3cfb2a6c
parent 1435 8e85e6bbefdf
child 1442 1e3c69aa035b
permissions -rw-r--r--
Small documentation is added to GUI
     1 #include <map_win.h>
     2 #include <set>
     3 
     4 MapWin::MapWin(const std::string& title, MapStorage & mapst, GraphDisplayerCanvas & grdispc):gdc(grdispc),ms(mapst)
     5 {
     6 
     7   //most nem kommentezem fel, mert ugyis valtozik
     8 
     9   set_title(title);
    10   set_default_size(400, 200);
    11 
    12   rb_array=new Gtk::RadioButton * [PROPERTY_NUM];
    13   vbox_r1=new Gtk::VBox[PROPERTY_NUM];
    14   vbox_r2=new Gtk::VBox[PROPERTY_NUM];
    15   radios=new Gtk::HBox[PROPERTY_NUM];
    16   for(int i=0;i<PROPERTY_NUM;i++)
    17   {
    18     rb_array[i]=new Gtk::RadioButton[ms.numOfEdgeMaps()+1];
    19 
    20     Gtk::RadioButton::Group group;
    21 
    22     std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
    23     std::set<int> props;
    24 
    25     int actprop;
    26     for(int j=0;j<ms.numOfEdgeMaps();j++)
    27     {
    28 
    29       if(emsi->second==&(ms.default_edgemaps[i]))
    30       {
    31 	actprop=j;
    32       }
    33       for(int k=0;k<PROPERTY_NUM;k++)
    34       {
    35 	if(emsi->second==&(ms.default_edgemaps[k]))
    36 	{
    37 	  props.insert(j);
    38 	}
    39       }
    40       emsi++;
    41     }
    42 
    43     rb_array[i][0].set_group(group);
    44     rb_array[i][0].set_label("Default");
    45     rb_array[i][0].signal_clicked().connect( sigc::bind( sigc::bind( sigc::mem_fun(*this, &MapWin::radio_click), 0), i) );
    46     vbox_r1[i].pack_start(rb_array[i][0]);
    47 
    48 
    49     emsi=ms.beginOfEdgeMaps();
    50     int actpos=1;
    51     for(int j=0;j<ms.numOfEdgeMaps();j++)
    52     {
    53       if( ( props.find(j) )==( props.end() ) )
    54       {
    55 	rb_array[i][actpos].set_group(group);
    56 	rb_array[i][actpos].set_label(emsi->first);
    57 	rb_array[i][actpos].signal_clicked().connect
    58 	  (
    59 	   sigc::bind( 
    60 	    sigc::bind(
    61 	     sigc::mem_fun(*this, &MapWin::radio_click),
    62 	     actpos
    63 	    ),
    64 	    i
    65 	   ) 
    66 	  );
    67 
    68     	if(actpos<(ms.numOfEdgeMaps()-PROPERTY_NUM+1)/2)
    69         {
    70           vbox_r1[i].pack_start(rb_array[i][actpos]);
    71 	}
    72 	else
    73         {
    74 	  vbox_r2[i].pack_start(rb_array[i][actpos]);
    75 	}
    76 	actpos++;
    77       }
    78       emsi++;
    79     }
    80     radios[i].pack_start(vbox_r1[i]);
    81     radios[i].pack_start(vbox_r2[i]);
    82     notebook.append_page(radios[i], property_strings[i]);
    83   }
    84 
    85   add(vbox_b);
    86   vbox_b.pack_start(notebook);
    87 
    88   show_all_children();
    89 
    90 }
    91 
    92 void MapWin::radio_click(int prop, int actpos)
    93 {
    94 
    95   //most nem kommentezem fel, mert ugyis valtozik
    96 
    97   if(rb_array[prop][actpos].get_active())
    98   {
    99 
   100     std::string mapname=rb_array[prop][actpos].get_label();
   101 
   102     if(mapname=="Default")
   103     {
   104       mapname=property_strings[prop];
   105     }
   106 
   107     switch(prop)
   108     {
   109       case WIDTH:
   110         gdc.changeLineWidth(mapname);
   111         break;
   112       case COLOR:
   113         gdc.changeColor(mapname);
   114         break;
   115       case TEXT:
   116         gdc.changeText(mapname);
   117         break;
   118       default:
   119         std::cout<<"Error\n";
   120     }
   121   }
   122 };