gui/algobox.h
author deba
Wed, 01 Mar 2006 10:17:25 +0000
changeset 1990 15fb7a4ea6be
parent 1886 8b225c2935e7
permissions -rw-r--r--
Some classes assumed that the GraphMaps should be inherited
from an ObserverBase. These classes parents replaced with
DefaultMap which cause that the graph maps should not be
inherited from the ObserverBase.
     1 // -*- C++ -*- //
     2 
     3 #ifndef ALGOBOX_H
     4 #define ALGOBOX_H
     5 
     6 class AlgoBox;
     7 
     8 #include <all_include.h>
     9 #include <mapstorage.h>
    10 #include <mapselector.h>
    11 #include <libgnomecanvasmm.h>
    12 #include <libgnomecanvasmm/polygon.h>
    13 
    14 ///Ancestor class of algorithm graphical interface classes.
    15 
    16 ///It also demonstrates, how should an algorithm graphical interface
    17 ///work. Children of this class have the same functions and attributes,
    18 ///therefore with all of them can the holder \ref AlgoWin communicate
    19 ///in the same way.
    20 ///
    21 ///IMPORTANT! In a child class only the following tasks are to do:
    22 ///
    23 ///-call \ref init function with correct parameters from correctly parametrized constructor
    24 ///
    25 ///-implement \ref build_box function
    26 ///
    27 ///-implement \ref run function
    28 ///
    29 ///because all other thing is automatically done in \ref init function!
    30 
    31 class AlgoBox : public Gtk::VBox
    32 {
    33   ///Signal emitted in case of need for list of maps.
    34 
    35   ///If the user has selected different tab to work on
    36   ///new maps are selected as well. These new maps should be
    37   ///provided for \ref AlgoBox. To get these maps, \ref AlgoBox
    38   ///emits this signal.
    39   sigc::signal<void, std::string> signal_maplist_need;
    40 
    41   ///Signal emitted in case of need for \ref NewMapWin.
    42 
    43   ///If user wants to create a new for an input, or output
    44   ///it can let \ref NewMapWin popped up from here as well.
    45   ///In that case will be this signal emitted.
    46   sigc::signal<void, std::string, bool> signal_newmapwin_need;
    47 
    48 protected:
    49   ///Holder of tabnames.
    50   Gtk::ComboBoxText tabcbt;
    51 
    52   ///Holder of widgets, in which nodemaps can be selected to work on.
    53   std::vector<MapSelector *> nodemapcbts;
    54 
    55   ///Holder of widgets, in which edgemaps can be selected to work on.
    56   std::vector<MapSelector *> edgemapcbts;
    57 
    58   ///Maps of selected tabs.
    59   MapStorage * mapstorage;
    60 
    61 public:
    62   ///Empty constructor called by children.
    63   AlgoBox(){};
    64 
    65   ///Constructor
    66 
    67   ///Calls \ref init function
    68   ///with the provided parameters. \ref init function
    69   ///is needed, because it is virtual, therefore the
    70   ///functions of the proper class will be called when
    71   ///running.
    72   ///\param tablist list of tabs in \ref MainWin
    73   AlgoBox(std::vector<std::string> tablist);
    74 
    75   ///Initiates \ref AlgoBox.
    76 
    77   ///Creates the graphical interface for the realized algorithm, initiates variables, connects signals.
    78   ///
    79   ///List of tabs in \ref MainWin is required, but no one
    80   ///will be selected automatically. Every other
    81   ///entry field remains empty (unselected), until a \ref NoteBookTab
    82   ///is selected.
    83   ///
    84   ///It also have to bind all the signals to the correct place.
    85   ///This function is virtual, in all type of children of
    86   ///\ref AlgoBox the correct function willbe called.
    87   ///
    88   ///Therefore it is IMPORTANT that only \ref run and \ref build_box
    89   ///has to be implemented in children of \ref AlgoBox, every other
    90   ///thing will automatically work properly by the help of this
    91   ///function that must be called in constructor of child!!!
    92   virtual void init(std::vector<std::string>);
    93 
    94   ///Signal emitted, when selected tab changes, and new list of maps required.
    95   sigc::signal<void, std::string> signal_maplist_needed();
    96 
    97   ///Emitted if user wants to create a new map for inpuit or output.
    98   sigc::signal<void, std::string, bool> signal_newmapwin_needed(){return signal_newmapwin_need;};
    99 
   100   ///Emits signal that requires list of maps for the recently selected \ref NoteBookTab.
   101   void emit_tab_change();
   102 
   103   ///Interface, through which \ref AlgoBox can be notified about tab addition, deletion in \ref MainWin
   104 
   105   ///\param tl list
   106   ///of new tab state.
   107   void update_tablist( std::vector< std::string > tl );
   108 
   109   ///Interface, through which \ref AlgoBox can get the maps of the recently selected \ref NoteBookTab
   110 
   111   ///\param ms the maps
   112   ///of the recently selected \ref NoteBookTab
   113   void update_maplist( MapStorage * ms);
   114 
   115   ///Interface, through which \ref AlgoBox can be notified about nodemap addition.
   116 
   117   ///If new map was added to \ref MapStorage of currently selected \ref NoteBookTab
   118   ///a signal is emitted by it. This signal is connected to this function, so \ref MapSelector s
   119   ///in \ref nodemapcbts can be notified, and those can registrate the new map. (\ref MapSelector::append_text)
   120   void nodemaplist_changed(std::string);
   121 
   122   ///Interface, through which \ref AlgoBox can be notified about edgemap addition.
   123 
   124   ///If new map was added to \ref MapStorage of currently selected \ref NoteBookTab
   125   ///a signal is emitted by it. This signal is connected to this function, so \ref MapSelector s
   126   ///in \ref edgemapcbts can be notified, and those can registrate the new map. (\ref MapSelector::append_text)
   127   void edgemaplist_changed(std::string);
   128 
   129   ///Aid function to provide data for a given entry.
   130 
   131   ///At the moment it is only used for updating info
   132   ///in \ref tabcbt. It clears it first, after that
   133   ///inserts the data got from caller, and if there
   134   ///was previously selected item it switches entry
   135   ///to that.
   136   ///\param tl list of entries (at the moment tabs in \ref MainWin)
   137   ///\param cbt the entry to update (at the moment only \ref tabcbt)
   138   void update_cbt( std::vector< std::string > tl, Gtk::ComboBoxText & cbt);
   139 
   140   ///Runs the ralized algorithm.
   141 
   142   ///Prepare the data for it
   143   ///and after that postprocess it if necessary.
   144   ///This is only a demo here, but in children it
   145   ///runs the algorithm really.
   146   virtual void run();
   147 
   148   ///Creates the layout of the \ref AlgoBox
   149 
   150   ///Place all the entries
   151   ///required. Run and close button is not
   152   ///its responsibility!
   153   virtual void build_box();
   154 
   155   ///Emits \ref signal_newmapwin_need if user wants to create new input or output map.
   156 
   157   ///Called in case of pressing \ref MapSelector::newbut.
   158   ///\param itisedge edge or nodemap is required.
   159   virtual void emit_new_map_signal(bool itisedge);
   160 
   161   ///Aid function to make addition of \ref MapSelector easy in \ref build_box.
   162 
   163   ///\param label label to show in \ref MapSelector
   164   ///\param itisedge whether edge or nodemaps stored in \ref MapSelector
   165   void addMapSelector(std::string label, bool itisedge);
   166 };
   167 #endif //ALGOBOX_H