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