OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 /** | |
6 * A View that is composed of child views. | |
7 */ | |
8 class CompositeView extends View { | |
9 | |
10 List<View> childViews; | |
11 | |
12 // TODO(rnystrom): Allowing this to be public is gross. CompositeView should | |
13 // encapsulate its markup and provide accessors to do the limited amount of | |
14 // things that external users need to access this for. | |
15 Element container; | |
16 | |
17 Scroller scroller; | |
18 Scrollbar _scrollbar; | |
19 | |
20 final String _cssName; | |
21 final bool _scrollable; | |
22 final bool _vertical; | |
23 final bool _nestedContainer; | |
24 final bool _showScrollbar; | |
25 | |
26 CompositeView(String this._cssName, [nestedContainer = false, | |
27 scrollable = false, vertical = false, | |
28 showScrollbar = false]) | |
29 : super(), | |
30 _nestedContainer = nestedContainer, | |
31 _scrollable = scrollable, | |
32 _vertical = vertical, | |
33 _showScrollbar = showScrollbar, | |
34 childViews = new List<View>() { | |
35 } | |
36 | |
37 Element render() { | |
38 Element node = new Element.html('<div class="$_cssName"></div>'); | |
39 | |
40 if (_nestedContainer) { | |
41 container = new Element.html('<div class="scroll-container"></div>'); | |
42 node.nodes.add(container); | |
43 } else { | |
44 container = node; | |
45 } | |
46 | |
47 if (_scrollable) { | |
48 scroller = new Scroller(container, | |
49 _vertical /* verticalScrollEnabled */, | |
50 !_vertical /* horizontalScrollEnabled */, | |
51 true /* momementumEnabled */); | |
52 if (_showScrollbar) { | |
53 _scrollbar = new Scrollbar(scroller); | |
54 } | |
55 } | |
56 | |
57 for (View childView in childViews) { | |
58 container.nodes.add(childView.node); | |
59 } | |
60 | |
61 return node; | |
62 } | |
63 | |
64 void afterRender(Element node) { | |
65 if (_scrollbar !== null) { | |
66 _scrollbar.initialize(); | |
67 } | |
68 } | |
69 | |
70 View addChild(View view) { | |
71 childViews.add(view); | |
72 // TODO(rnystrom): Container shouldn't be null. Remove this check. | |
73 if (container !== null) { | |
74 container.nodes.add(view.node); | |
75 } | |
76 childViewAdded(view); | |
77 return view; | |
78 } | |
79 | |
80 void removeChild(View view) { | |
81 childViews = childViews.filter(bool _(e) { return view != e; }); | |
82 // TODO(rnystrom): Container shouldn't be null. Remove this check. | |
83 if (container !== null) { | |
84 view.node.remove(); | |
85 } | |
86 } | |
87 } | |
OLD | NEW |