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>
10 #include <libgnomecanvasmm.h>
11 #include <libgnomecanvasmm/polygon.h>
14 ///Graphical interface for node/edge map creation.
16 ///This class is responsible for creating a window,
17 ///on which the parameters of a new map can be set.
18 class NewMapWin : public Gtk::Dialog
20 ///The \ref NoteBookTab in which the new map has to be placed.
25 ///Struct to be able to evaluate expressions.
27 ///Initial values of map elements can be given
28 ///by numbers or by expressions. From expressions
29 ///we build first a tree according to the priorities
30 ///of operations in the expression. This is the data
32 ///that can store one tree element.
35 ///Character stored in this tree element
37 ///Left child of tree element.
38 tree_node * left_child;
39 ///Right child of tree element.
40 tree_node * right_child;
43 ///Constructor of NewMapWin.
45 ///It creates the widgets shown in
47 NewMapWin(const std::string& title, NoteBookTab &, bool itisedge=true, bool edgenode=true);
49 ///Callback function for OK button. It creates the map.
51 ///This function determines whether the input is correct:
52 ///the name of new map must not be already used, the expression
53 ///that gives tha initial values of map elements has to be valid.
54 ///If input is correct it creates and registrates the new map
55 ///to the correct place. (\ref mytab)
56 virtual void on_response(int response_id);
58 ///Close window if Esc key pressed.
59 virtual bool closeIfEscapeIsPressed(GdkEventKey*);
61 ///Function that creates a tree from an appropriately manipulated string.
63 ///Tree is builded according to priorities of operations in expression given by string.
64 ///Priorities are indicated in a vector that contains weights for each operation.
65 ///\param to_tree string to build tree from
66 ///\param weights weights (priorities)
67 ///\param offset this function call is recursive. This parameter tells us,
68 ///with which part of the string do we have to deal with.
69 tree_node * weightedString2Tree(std::string to_tree, std::vector<unsigned int> & weights, int offset);
71 ///Function that creates a string from a tree by postorder reading.
73 ///This is the last step of creating polishform
74 ///from a given expression string.
75 ///\param root the root of the tree to read through
76 std::string postOrder(tree_node * root);
78 ///From the given expression it creates expression given in polish form.
80 ///First it substitutes variables and numbers in the given expression.
81 ///The substitutions will be one character long local variables.
82 ///The substituted-substitution pair is registrated in \ref ch2var.
83 ///After that it gives weights fo each character in substituted expression.
84 ///Weights are calculated according to the priority of operations in expression.
85 ///Then it creates tree (\ref tree_node) from the weighted string. (\ref weightedString2Tree)
86 ///\param to_polish the string to turn into polish_form
87 ///\param itisedge do we have to create an edgemap or a nodemap.
88 ///It is important, because variables are maps and if expression
89 ///citates a map that does not exists the expression is not valid.
90 ///But to determine, whether the map exists we have to know where
91 ///to search for it. And of course for a new edgemap only edgemaps can be serve with values.
92 std::string string2Polishform(std::string to_polish, bool itisedge);
94 ///Returns whether a string can be used as value in an expression.
96 ///The given string has to be either a mapname or a number. If it is a mapname
97 ///we have to know whether it is an edgemap or a nodemap.
98 ///\param variable the string about the function has to determine whether it is usable in expressions
99 ///\param itisedge should the mapname be between edgemaps, or nodemaps
100 bool validVariable(std::string variable, bool itisedge);
102 ///Deletes the whole tree created for translating string to polishform.
106 void deleteTree(tree_node * root);
108 ///Dictionary of substitutions in expression.
110 ///Variables and numbers are substituted with one character long variables in expressions.
111 ///This is the dictionary.
112 std::map<char, std::string> ch2var;
114 ///Entry which gives us the name of new map.
117 ///Entry which gives us the initial values of elements of new map.
119 ///Initial value can be a number or an expression after that the
120 ///initial value for each map element can be calculated.
121 Gtk::Entry default_value;
123 ///GTK Designing object.
126 ///Information holder in window.
129 ///If selected, nodemap will be created.
130 Gtk::RadioButton node;
132 ///If selected, edgemap will be created.
133 Gtk::RadioButton edge;