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