COIN-OR::LEMON - Graph Library

Changeset 1446:320f73c5cfc1 in lemon-0.x for gui/map_win.cc


Ignore:
Timestamp:
06/06/05 19:01:12 (19 years ago)
Author:
Hegyi Péter
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1926
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gui/map_win.cc

    r1442 r1446  
    22#include <set>
    33
    4 MapWin::MapWin(const std::string& title, MapStorage & mapst, GraphDisplayerCanvas & grdispc):gdc(grdispc),ms(mapst)
     4bool MapWin::close_if_escape_is_pressed(GdkEventKey* e)
    55{
     6  if(e->keyval==GDK_Escape)
     7  {
     8    hide();
     9  }
     10  return true;
     11}
    612
    7   //most nem kommentezem fel, mert ugyis valtozik
     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);
    817
    9   set_title(title);
    10   set_default_size(400, 200);
     18  signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::close_if_escape_is_pressed));
    1119
    12   rb_array=new Gtk::RadioButton * [PROPERTY_NUM];
    13   vbox_r1=new Gtk::VBox[PROPERTY_NUM];
    14   vbox_r2=new Gtk::VBox[PROPERTY_NUM];
    15   radios=new Gtk::HBox[PROPERTY_NUM];
     20  combo_array=new Gtk::Combo [PROPERTY_NUM];
     21
    1622  for(int i=0;i<PROPERTY_NUM;i++)
    1723  {
    18     rb_array[i]=new Gtk::RadioButton[ms.numOfEdgeMaps()+1];
    19 
    20     Gtk::RadioButton::Group group;
    2124
    2225    std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
     
    2427
    2528    int actprop;
     29
     30    //here we find out, which map is the default in MapStorage for this property, which are not
    2631    for(int j=0;j<ms.numOfEdgeMaps();j++)
    2732    {
    28 
     33      //this is the default value for this property
    2934      if(emsi->second==&(ms.default_edgemaps[i]))
    3035      {
    3136        actprop=j;
    3237      }
     38      //this is the other maps to show for this property
    3339      for(int k=0;k<PROPERTY_NUM;k++)
    3440      {
     
    4147    }
    4248
    43     rb_array[i][0].set_group(group);
    44     rb_array[i][0].set_label("Default");
    45     rb_array[i][0].signal_clicked().connect( sigc::bind( sigc::bind( sigc::mem_fun(*this, &MapWin::radio_click), 0), i) );
    46     vbox_r1[i].pack_start(rb_array[i][0]);
     49    //combo_array[i].set_group(group);
    4750
     51    //filling in combo box with choices
     52    std::list<Glib::ustring> listStrings;
     53
     54    listStrings.push_back("Default");
    4855
    4956    emsi=ms.beginOfEdgeMaps();
    50     int actpos=1;
     57
    5158    for(int j=0;j<ms.numOfEdgeMaps();j++)
    5259    {
    5360      if( ( props.find(j) )==( props.end() ) )
    5461      {
    55         rb_array[i][actpos].set_group(group);
    56         rb_array[i][actpos].set_label(emsi->first);
    57         rb_array[i][actpos].signal_clicked().connect
    58           (
    59            sigc::bind(
    60             sigc::bind(
    61              sigc::mem_fun(*this, &MapWin::radio_click),
    62              actpos
    63             ),
    64             i
    65            )
    66           );
    67 
    68         if(actpos<(ms.numOfEdgeMaps()-PROPERTY_NUM+1)/2)
    69         {
    70           vbox_r1[i].pack_start(rb_array[i][actpos]);
    71         }
    72         else
    73         {
    74           vbox_r2[i].pack_start(rb_array[i][actpos]);
    75         }
    76         actpos++;
     62        listStrings.push_back(emsi->first);
    7763      }
    7864      emsi++;
    7965    }
    80     radios[i].pack_start(vbox_r1[i]);
    81     radios[i].pack_start(vbox_r2[i]);
    82     notebook.append_page(radios[i], property_strings[i]);
     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
    83106  }
    84107
    85   add(vbox_b);
    86   vbox_b.pack_start(notebook);
     108  combos.pack_start(vbox_r1);
     109  combos.pack_start(vbox_r2);
     110
     111  //add(combos);
     112  add(table);
    87113
    88114  show_all_children();
     
    90116}
    91117
    92 void MapWin::radio_click(int prop, int actpos)
     118void MapWin::combo_changed(int prop)
    93119{
    94120
    95121  //most nem kommentezem fel, mert ugyis valtozik
     122  Gtk::Entry* entry = combo_array[prop].get_entry();
    96123
    97   if(rb_array[prop][actpos].get_active())
     124  if(entry)
    98125  {
     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      }
    99133
    100     std::string mapname=rb_array[prop][actpos].get_label();
    101 
    102     if(mapname=="Default")
    103     {
    104       mapname=property_strings[prop];
    105     }
    106 
    107     switch(prop)
    108     {
    109       case WIDTH:
    110         gdc.changeLineWidth(mapname);
    111         break;
    112       case COLOR:
    113         gdc.changeColor(mapname);
    114         break;
    115       case TEXT:
    116         gdc.changeText(mapname);
    117         break;
    118       default:
    119         std::cout<<"Error\n";
     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      }
    120151    }
    121152  }
Note: See TracChangeset for help on using the changeset viewer.