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.
8 #include <all_include.h>
9 #include <mapstorage.h>
10 #include <mapselector.h>
11 #include <libgnomecanvasmm.h>
12 #include <libgnomecanvasmm/polygon.h>
14 ///Ancestor class of algorithm graphical interface classes.
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
21 ///IMPORTANT! In a child class only the following tasks are to do:
23 ///-call \ref init function with correct parameters from correctly parametrized constructor
25 ///-implement \ref build_box function
27 ///-implement \ref run function
29 ///because all other thing is automatically done in \ref init function!
31 class AlgoBox : public Gtk::VBox
33 ///Signal emitted in case of need for list of maps.
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
39 sigc::signal<void, std::string> signal_maplist_need;
41 ///Signal emitted in case of need for \ref NewMapWin.
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;
49 ///Holder of tabnames.
50 Gtk::ComboBoxText tabcbt;
52 ///Holder of widgets, in which nodemaps can be selected to work on.
53 std::vector<MapSelector *> nodemapcbts;
55 ///Holder of widgets, in which edgemaps can be selected to work on.
56 std::vector<MapSelector *> edgemapcbts;
58 ///Maps of selected tabs.
59 MapStorage * mapstorage;
62 ///Empty constructor called by children.
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
72 ///\param tablist list of tabs in \ref MainWin
73 AlgoBox(std::vector<std::string> tablist);
75 ///Initiates \ref AlgoBox.
77 ///Creates the graphical interface for the realized algorithm, initiates variables, connects signals.
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
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.
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>);
94 ///Signal emitted, when selected tab changes, and new list of maps required.
95 sigc::signal<void, std::string> signal_maplist_needed();
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;};
100 ///Emits signal that requires list of maps for the recently selected \ref NoteBookTab.
101 void emit_tab_change();
103 ///Interface, through which \ref AlgoBox can be notified about tab addition, deletion in \ref MainWin
107 void update_tablist( std::vector< std::string > tl );
109 ///Interface, through which \ref AlgoBox can get the maps of the recently selected \ref NoteBookTab
111 ///\param ms the maps
112 ///of the recently selected \ref NoteBookTab
113 void update_maplist( MapStorage * ms);
115 ///Interface, through which \ref AlgoBox can be notified about nodemap addition.
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);
122 ///Interface, through which \ref AlgoBox can be notified about edgemap addition.
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);
129 ///Aid function to provide data for a given entry.
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
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);
140 ///Runs the ralized algorithm.
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.
148 ///Creates the layout of the \ref AlgoBox
150 ///Place all the entries
151 ///required. Run and close button is not
152 ///its responsibility!
153 virtual void build_box();
155 ///Emits \ref signal_newmapwin_need if user wants to create new input or output map.
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);
161 ///Aid function to make addition of \ref MapSelector easy in \ref build_box.
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);