gui/mapselector.h
author deba
Wed, 01 Mar 2006 10:25:30 +0000
changeset 1991 d7442141d9ef
parent 1892 1d384b30157f
permissions -rw-r--r--
The graph adadptors can be alteration observed.
In most cases it uses the adapted graph alteration notifiers.
Only special case is now the UndirGraphAdaptor, where
we have to proxy the signals from the graph.

The SubBidirGraphAdaptor is removed, because it doest not
gives more feature than the EdgeSubGraphAdaptor<UndirGraphAdaptor<Graph>>.

The ResGraphAdaptor is based on this composition.
     1 // -*- C++ -*- //
     2 
     3 #ifndef MAPSELECTOR_H
     4 #define MAPSELECTOR_H
     5 
     6 class MapSelector;
     7 
     8 #include <all_include.h>
     9 #include <map_win.h>
    10 #include <libgnomecanvasmm.h>
    11 #include <libgnomecanvasmm/polygon.h>
    12 
    13 ///A widget by which node and edgemaps can be selected, deselected and created.
    14 
    15 ///During the usage of \ref glemon we have to select
    16 ///maps several times. We also need some aid-function
    17 ///like new map creation and deselecting previously
    18 ///selected map. Instead of writing a the mapselection
    19 ///at all occurences we can use this widget by connecting
    20 ///its signals to the correct place.
    21 class MapSelector : public Gtk::HBox
    22 {
    23  protected:
    24   ///This signal indicates that the selection has been changed by user.
    25   sigc::signal<void, std::string> signal_cbt;
    26 
    27   ///Signal that indicates that user wants to create a new map.
    28   sigc::signal<void, bool> signal_newmapwin;
    29 
    30   ///If this is true, beyond the mapnames a 'Default' selection is available as well.
    31 
    32   ///For example \ref MapWin needs 'Default' option as well. In this case no map
    33   ///will be visualized by the appropriate property.
    34   ///But \ref AlgoWin do not need 'Default' option, because if no map is selected,
    35   ///no algorithm can be run.
    36   ///Its value is got and set in contructor.
    37   bool def;
    38 
    39   ///Are the names of edgemaps or nodemaps stored here.
    40   bool itisedge;
    41 
    42   ///Shows whether 'Default' option is selected or not.
    43   bool default_state;
    44 
    45   ///It is true when the new button had been pressed but the new map has not been registrated yet.
    46 
    47   ///Before signal of \ref NewMapWin request is emitted by the \ref MapSelector
    48   ///this variable is set to true. When the new map
    49   ///is done, it will be registrated in all existing \ref MapSelector 
    50   ///by \ref append_text function. That function checks
    51   ///whether this variable is true. If it is true that means
    52   ///that this \ref MapSelector has requested \ref NewMapWin.
    53   ///Therefore it set itself to the recently created map.
    54   ///After that \ref set_new_map is set again false, not to
    55   ///set maps active if \ref MapSelector piece is not the requester.
    56   bool set_new_map;
    57 
    58   ///The widget that holds the names of maps.
    59 
    60   ///It can be rolled down
    61   ///Names in it are selectable.
    62   Gtk::ComboBoxText cbt;
    63 
    64   ///New button.
    65 
    66   ///By pressing it
    67   ///\ref NewMapWin wilol pop-up
    68   Gtk::Button * newbut;
    69 
    70   ///Reset button.
    71 
    72   ///If pressed \ref cbt will
    73   ///set to 'Default' option.
    74   ///
    75   ///It is visible only if \ref def is true.
    76   Gtk::Button * defbut;
    77 
    78   ///Container in which GUI elements are packed.
    79   Gtk::HBox hbox;
    80 
    81   ///Shows purpose of \ref MapSelector piece.
    82   Gtk::Label * label;
    83 
    84  public:
    85 
    86   ///Constructor of \ref MapSelector
    87 
    88   ///Creates the layout and binds signal to the correct place.
    89   ///\param optionlist list of names to place in \ref cbt
    90   ///\param act preselected option
    91   ///\param purpose text of label indicating purpose of \ref MapStorage
    92   ///\param itisedge do \ref MapSelector contains edgemap names or nodemapnames.
    93   ///\param def do we need 'Default' option. See \ref def.
    94   MapSelector(std::vector<std::string> optionlist, std::string act, std::string purpose, bool itisedge, bool def=true);
    95 
    96   ///Returns signal emitted if the user has changed the selection. (\ref signal_cbt)
    97   sigc::signal<void, std::string> signal_cbt_ch();
    98 
    99   ///Returns signal emitted if the user has pressed New button (\ref newbut) (\ref signal_newmapwin)
   100   sigc::signal<void, bool> signal_newmapwin_needed();
   101 
   102   ///Maintain \ref cbt.
   103 
   104   ///Fills in \ref cbt with names, taking
   105   ///into account that the previously selected option
   106   ///has to be set back after the operation.
   107   void update_list( std::vector<std::string> );
   108 
   109   ///Handles changement in \ref cbt.
   110 
   111   ///In default case it emits a signal with the selected option.
   112   ///But if 'Default' option is selected, it resets the \ref MapSelector
   113   virtual void comboChanged();
   114 
   115   ///Requests a \ref NewMapWin
   116 
   117   ///See \ref set_new_map.
   118   ///First it sets \ref set_new_map true to be identified
   119   ///at registration of new map that
   120   ///it has sent the \ref signal_newmapwin, therefore it
   121   ///has to set \ref cbt to that option.
   122   virtual void new_but_pressed();
   123 
   124   ///If called, 'Default' option is selected, that means unselection of any maps.
   125 
   126   ///Practically this means that if this is called,
   127   ///properties of graph will set to default state.
   128   ///The function achieves this by emitting appropriately
   129   ///parametrized signal_cbt.
   130   virtual void reset();
   131 
   132   ///Returns the currently selected option.
   133   Glib::ustring get_active_text();
   134 
   135   ///Sets the parameter active in \ref cbt.
   136 
   137   ///\param new_value the
   138   ///new value to be set in \ref cbt.
   139   void set_active_text(Glib::ustring new_value);
   140 
   141   ///Sets the parameter active in \ref cbt.
   142   ///\param index the
   143   ///index of row to be set in \ref cbt.
   144   void set_active(int index){cbt.set_active(index);};
   145 
   146   ///Clear all options from \ref cbt.
   147   void clear(){cbt.clear();};
   148 
   149   ///Appends a new option to the existing ones in \ref cbt.
   150 
   151   ///If \ref set_new_map is true, the
   152   ///\ref MapSelector has requested the opened \ref NewMapWin,
   153   ///from that the option to append is coming. In this case
   154   ///this function  will set \ref cbt to the new option.
   155   ///\param new_option new option to append
   156   void append_text(Glib::ustring new_option);
   157 };
   158 #endif //MAPSELECTOR_H