COIN-OR::LEMON - Graph Library

source: lemon-0.x/gui/algobox.h @ 1896:92ef660710f1

Last change on this file since 1896:92ef660710f1 was 1896:92ef660710f1, checked in by Hegyi Péter, 14 years ago

Documentation of classes realizing algorithm running.

File size: 6.0 KB
Line 
1// -*- C++ -*- //
2
3#ifndef ALGOBOX_H
4#define ALGOBOX_H
5
6class 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
31class 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
48protected:
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
61public:
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
Note: See TracBrowser for help on using the repository browser.