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