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