COIN-OR::LEMON - Graph Library

source: glemon-0.x/map_win.cc @ 20:a3bd39d50930

gui
Last change on this file since 20:a3bd39d50930 was 8:abac0179a26a, checked in by Hegyi Péter, 19 years ago

Maps are now selectable through ComboBoxes?, and Escape makes MapWin? disappeared.

File size: 3.3 KB
RevLine 
[6]1#include <map_win.h>
2#include <set>
3
[8]4bool MapWin::close_if_escape_is_pressed(GdkEventKey* e)
[6]5{
[8]6  if(e->keyval==GDK_Escape)
7  {
8    hide();
9  }
10  return true;
11}
[6]12
[8]13MapWin::MapWin(const std::string& title, MapStorage & mapst, GraphDisplayerCanvas & grdispc):gdc(grdispc),ms(mapst),table(PROPERTY_NUM, 2, false)
14{
15  set_title(title);
16  set_default_size(200, 50);
[6]17
[8]18  signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::close_if_escape_is_pressed));
[6]19
[8]20  combo_array=new Gtk::Combo [PROPERTY_NUM];
21
[6]22  for(int i=0;i<PROPERTY_NUM;i++)
23  {
24
25    std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
26    std::set<int> props;
27
28    int actprop;
[8]29
30    //here we find out, which map is the default in MapStorage for this property, which are not
[6]31    for(int j=0;j<ms.numOfEdgeMaps();j++)
32    {
[8]33      //this is the default value for this property
[6]34      if(emsi->second==&(ms.default_edgemaps[i]))
35      {
36        actprop=j;
37      }
[8]38      //this is the other maps to show for this property
[6]39      for(int k=0;k<PROPERTY_NUM;k++)
40      {
41        if(emsi->second==&(ms.default_edgemaps[k]))
42        {
43          props.insert(j);
44        }
45      }
46      emsi++;
47    }
48
[8]49    //combo_array[i].set_group(group);
[6]50
[8]51    //filling in combo box with choices
52    std::list<Glib::ustring> listStrings;
53
54    listStrings.push_back("Default");
[6]55
56    emsi=ms.beginOfEdgeMaps();
[8]57
[6]58    for(int j=0;j<ms.numOfEdgeMaps();j++)
59    {
60      if( ( props.find(j) )==( props.end() ) )
61      {
[8]62        listStrings.push_back(emsi->first);
[6]63      }
64      emsi++;
65    }
[8]66
67    combo_array[i].set_popdown_strings(listStrings);
68
69    //Restrict it to these choices only:
70    combo_array[i].set_value_in_list();
71
72    //binding signal to thew actual entry
73    combo_array[i].get_entry()->signal_changed().connect
74    (
75     sigc::bind
76     (
77      sigc::mem_fun(*this, &MapWin::combo_changed),
78      i
79     )
80    );
81
82    //placing actual entry in the right place
83
84    label=new Gtk::Label;
85    label->set_text(property_strings[i]);
86
87    //    labelpluscombo=new Gtk::HBox;
88    //    labelpluscombo->pack_start(*label);
89    //    labelpluscombo->pack_start(combo_array[i]);
90       
91    table.attach(*label,0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
92    table.attach(combo_array[i],1,2,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
93
94    /*
95    if(actpos<(ms.numOfEdgeMaps()-PROPERTY_NUM+1)/2)
96    {
97      vbox_r1.pack_start(*labelpluscombo);
98    }
99    else
100    {
101      vbox_r2.pack_start(*labelpluscombo);
102    }
103    actpos++;
104    //*/
105
[6]106  }
107
[8]108  combos.pack_start(vbox_r1);
109  combos.pack_start(vbox_r2);
110
111  //add(combos);
112  add(table);
[6]113
114  show_all_children();
115
116}
117
[8]118void MapWin::combo_changed(int prop)
[6]119{
120
121  //most nem kommentezem fel, mert ugyis valtozik
[8]122  Gtk::Entry* entry = combo_array[prop].get_entry();
[6]123
[8]124  if(entry)
[6]125  {
[8]126    Glib::ustring mapname = entry->get_text();
127    if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
128    {
129      if(mapname=="Default")
130      {
131        mapname=property_strings[prop];
132      }
[6]133
[8]134      if( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() )
135      {
136        switch(prop)
137        {
138          case WIDTH:
139            gdc.changeLineWidth(mapname);
140            break;
141          case COLOR:
142            gdc.changeColor(mapname);
143            break;
144          case TEXT:
145            gdc.changeText(mapname);
146            break;
147          default:
148            std::cout<<"Error\n";
149        }
150      }
[6]151    }
152  }
153};
Note: See TracBrowser for help on using the repository browser.