mapselector.h
changeset 3 2cc5ed6e6255
equal deleted inserted replaced
-1:000000000000 0:7e0cf8020232
       
     1 /* -*- C++ -*-
       
     2  *
       
     3  * This file is a part of LEMON, a generic C++ optimization library
       
     4  *
       
     5  * Copyright (C) 2003-2006
       
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
       
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).
       
     8  *
       
     9  * Permission to use, modify and distribute this software is granted
       
    10  * provided that this copyright notice appears in all copies. For
       
    11  * precise terms see the accompanying LICENSE file.
       
    12  *
       
    13  * This software is provided "AS IS" with no warranty of any kind,
       
    14  * express or implied, and with no claim as to its suitability for any
       
    15  * purpose.
       
    16  *
       
    17  */
       
    18 
       
    19 #ifndef MAPSELECTOR_H
       
    20 #define MAPSELECTOR_H
       
    21 
       
    22 #include <all_include.h>
       
    23 #include <libgnomecanvasmm.h>
       
    24 #include <libgnomecanvasmm/polygon.h>
       
    25 #include "map_value.h"
       
    26 
       
    27 ///A widget by which node and arcmaps can be selected, deselected and created.
       
    28 
       
    29 ///During the usage of \ref glemon we have to select
       
    30 ///maps several times. We also need some aid-function
       
    31 ///like new map creation and deselecting previously
       
    32 ///selected map. Instead of writing a the mapselection
       
    33 ///at all occurences we can use this widget by connecting
       
    34 ///its signals to the correct place.
       
    35 class MapSelector : public Gtk::HBox
       
    36 {
       
    37  protected:
       
    38   ///This signal indicates that the selection has been changed by user.
       
    39   sigc::signal<void, std::string> signal_cbt;
       
    40 
       
    41   ///Signal that indicates that user wants to create a new map.
       
    42   sigc::signal<void, bool> signal_newmapwin;
       
    43 
       
    44   ///If this is true, beyond the mapnames a 'Default' selection is available as well.
       
    45 
       
    46   ///For example \ref MapWin needs 'Default' option as well. In this case no map
       
    47   ///will be visualized by the appropriate property.
       
    48   ///But \ref AlgoWin do not need 'Default' option, because if no map is selected,
       
    49   ///no algorithm can be run.
       
    50   ///Its value is got and set in contructor.
       
    51   bool def;
       
    52 
       
    53   ///Are the names of arcmaps or nodemaps stored here.
       
    54   bool itisarc;
       
    55 
       
    56   ///Shows whether 'Default' option is selected or not.
       
    57   bool default_state;
       
    58 
       
    59   ///It is true when the new button had been pressed but the new map has not been registrated yet.
       
    60 
       
    61   ///Before signal of \ref NewMapWin request is emitted by the \ref MapSelector
       
    62   ///this variable is set to true. When the new map
       
    63   ///is done, it will be registrated in all existing \ref MapSelector 
       
    64   ///by \ref append_text function. That function checks
       
    65   ///whether this variable is true. If it is true that means
       
    66   ///that this \ref MapSelector has requested \ref NewMapWin.
       
    67   ///Therefore it set itself to the recently created map.
       
    68   ///After that \ref set_new_map is set again false, not to
       
    69   ///set maps active if \ref MapSelector piece is not the requester.
       
    70   bool set_new_map;
       
    71 
       
    72   ///The widget that holds the names of maps.
       
    73 
       
    74   ///It can be rolled down
       
    75   ///Names in it are selectable.
       
    76   Gtk::ComboBoxText cbt;
       
    77 
       
    78   std::vector<std::string> cbt_content;
       
    79 
       
    80   ///New button.
       
    81 
       
    82   ///By pressing it
       
    83   ///\ref NewMapWin wilol pop-up
       
    84   Gtk::Button newbut;
       
    85 
       
    86   ///Reset button.
       
    87 
       
    88   ///If pressed \ref cbt will
       
    89   ///set to 'Default' option.
       
    90   ///
       
    91   ///It is visible only if \ref def is true.
       
    92   Gtk::Button defbut;
       
    93 
       
    94   ///Shows purpose of \ref MapSelector piece.
       
    95   Gtk::Label label;
       
    96 
       
    97   /// Which types of maps (integer, string, ...) to display.
       
    98   MapType map_type;
       
    99 
       
   100  public:
       
   101 
       
   102   ///Constructor of \ref MapSelector
       
   103 
       
   104   ///Creates the layout and binds signal to the correct place.
       
   105   ///\param mapstorage Pointer to the \ref MapStorage to get the map list from.
       
   106   ///\param act preselected option
       
   107   ///\param purpose text of label indicating purpose of \ref MapStorage
       
   108   ///\param itisarc do \ref MapSelector contains arcmap names or nodemapnames.
       
   109   ///\param def do we need 'Default' option. See \ref def.
       
   110   ///\param type Specifies which types of maps to display.
       
   111   MapSelector(std::vector<std::string> n_ml,
       
   112       std::vector<std::string> s_ml, std::string act, std::string labeltext,
       
   113       bool arc, bool d = true, MapType type = ALL);
       
   114 
       
   115   ///Returns signal emitted if the user has changed the selection. (\ref signal_cbt)
       
   116   sigc::signal<void, std::string> signal_cbt_ch();
       
   117 
       
   118   ///Returns signal emitted if the user has pressed New button (\ref newbut) (\ref signal_newmapwin)
       
   119   sigc::signal<void, bool> signal_newmapwin_needed();
       
   120 
       
   121   ///Maintain \ref cbt.
       
   122 
       
   123   ///Fills in \ref cbt with names, taking
       
   124   ///into account that the previously selected option
       
   125   ///has to be set back after the operation.
       
   126   void update_list(std::vector<std::string> n_ml,
       
   127       std::vector<std::string> s_ml);
       
   128 
       
   129   ///Handles changement in \ref cbt.
       
   130 
       
   131   ///In default case it emits a signal with the selected option.
       
   132   ///But if 'Default' option is selected, it resets the \ref MapSelector
       
   133   virtual void comboChanged();
       
   134 
       
   135   ///Requests a \ref NewMapWin
       
   136 
       
   137   ///See \ref set_new_map.
       
   138   ///First it sets \ref set_new_map true to be identified
       
   139   ///at registration of new map that
       
   140   ///it has sent the \ref signal_newmapwin, therefore it
       
   141   ///has to set \ref cbt to that option.
       
   142   virtual void new_but_pressed();
       
   143 
       
   144   ///If called, 'Default' option is selected, that means unselection of any maps.
       
   145 
       
   146   ///Practically this means that if this is called,
       
   147   ///properties of digraph will set to default state.
       
   148   ///The function achieves this by emitting appropriately
       
   149   ///parametrized signal_cbt.
       
   150   virtual void reset();
       
   151 
       
   152   ///Returns the currently selected option.
       
   153   Glib::ustring get_active_text();
       
   154 
       
   155   ///Sets the parameter active in \ref cbt.
       
   156 
       
   157   ///\param new_value the
       
   158   ///new value to be set in \ref cbt.
       
   159   void set_active_text(Glib::ustring new_value);
       
   160 
       
   161   ///Sets the parameter active in \ref cbt.
       
   162   ///\param index the
       
   163   ///index of row to be set in \ref cbt.
       
   164   void set_active(int index){cbt.set_active(index);};
       
   165 
       
   166   ///Clear all options from \ref cbt.
       
   167   void clear(){cbt.clear();};
       
   168 
       
   169   ///Appends a new option to the existing ones in \ref cbt.
       
   170 
       
   171   ///If \ref set_new_map is true, the
       
   172   ///\ref MapSelector has requested the opened \ref NewMapWin,
       
   173   ///from that the option to append is coming. In this case
       
   174   ///this function  will set \ref cbt to the new option.
       
   175   ///\param new_option new option to append
       
   176   void append_text(Glib::ustring new_option, MapValue::Type);
       
   177 };
       
   178 #endif //MAPSELECTOR_H