1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
--- wesnoth-1.8.6/src/gui/widgets/tree_view_node.cpp~ 2011-07-21 23:05:56.594879049 +0200
+++ wesnoth-1.8.6/src/gui/widgets/tree_view_node.cpp 2011-07-21 23:28:07.540358742 +0200
@@ -238,6 +238,17 @@ void ttree_view_node::clear()
struct ttree_view_node_implementation
{
+ template<class W, class It>
+ static W* find_at_aux(It begin, It end,
+ const tpoint& coordinate, const bool must_be_active) {
+ for (It it = begin; it != end; ++it) {
+ if(W* widget = it->find_at(coordinate, must_be_active)) {
+ return widget;
+ }
+ }
+ return NULL;
+ }
+
template<class W>
static W* find_at(
typename tconst_duplicator<W, ttree_view_node>::type&
@@ -255,13 +266,9 @@ struct ttree_view_node_implementation
}
typedef typename tconst_duplicator<W, ttree_view_node>::type thack;
- foreach(thack& node, tree_view_node.children_) {
- if(W* widget = node.find_at(coordinate, must_be_active)) {
- return widget;
- }
- }
-
- return NULL;
+ return find_at_aux<W>(tree_view_node.children_.begin(),
+ tree_view_node.children_.end(),
+ coordinate, must_be_active);
}
};
@@ -313,7 +320,9 @@ tpoint ttree_view_node::get_current_size
return size;
}
- foreach(const ttree_view_node& node, children_) {
+ for (boost::ptr_vector<ttree_view_node>::const_iterator it
+ = children_.begin (); it != children_.end (); ++it) {
+ const ttree_view_node& node = *it;
if(node.grid_.get_visible() == twidget::INVISIBLE) {
continue;
@@ -344,7 +353,9 @@ tpoint ttree_view_node::get_unfolded_siz
size.x += (get_indention_level() - 1) * tree_view().indention_step_size_;
}
- foreach(const ttree_view_node& node, children_) {
+ for (boost::ptr_vector<ttree_view_node>::const_iterator it
+ = children_.begin (); it != children_.end (); ++it) {
+ const ttree_view_node& node = *it;
if(node.grid_.get_visible() == twidget::INVISIBLE) {
continue;
@@ -378,7 +389,9 @@ tpoint ttree_view_node::calculate_best_s
DBG_GUI_L << LOG_HEADER << " own grid best size " << best_size << ".\n";
- foreach(const ttree_view_node& node, children_) {
+ for (boost::ptr_vector<ttree_view_node>::const_iterator it
+ = children_.begin (); it != children_.end (); ++it) {
+ const ttree_view_node& node = *it;
if(node.grid_.get_visible() == twidget::INVISIBLE) {
continue;
|