blob: ad1fd84b4efed7e0c9315cfb0a1d8c0ac2c38d18 [file] [log] [blame]
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
part of view;
/**
* A View that is composed of child views.
*/
class CompositeView extends View {
List<View> childViews;
// TODO(rnystrom): Allowing this to be public is gross. CompositeView should
// encapsulate its markup and provide accessors to do the limited amount of
// things that external users need to access this for.
Element container;
Scroller scroller;
Scrollbar _scrollbar;
final String _cssName;
final bool _scrollable;
final bool _vertical;
final bool _nestedContainer;
final bool _showScrollbar;
CompositeView(String this._cssName,
[nestedContainer = false,
scrollable = false,
vertical = false,
showScrollbar = false])
: _nestedContainer = nestedContainer,
_scrollable = scrollable,
_vertical = vertical,
_showScrollbar = showScrollbar,
childViews = new List<View>() {}
Element render() {
Element node = new Element.html('<div class="$_cssName"></div>');
if (_nestedContainer) {
container = new Element.html('<div class="scroll-container"></div>');
node.nodes.add(container);
} else {
container = node;
}
if (_scrollable) {
scroller = new Scroller(
container,
_vertical /* verticalScrollEnabled */,
!_vertical /* horizontalScrollEnabled */,
true /* momementumEnabled */);
if (_showScrollbar) {
_scrollbar = new Scrollbar(scroller);
}
}
for (View childView in childViews) {
container.nodes.add(childView.node);
}
return node;
}
void afterRender(Element node) {
if (_scrollbar != null) {
_scrollbar.initialize();
}
}
View addChild(View view) {
childViews.add(view);
// TODO(rnystrom): Container shouldn't be null. Remove this check.
if (container != null) {
container.nodes.add(view.node);
}
childViewAdded(view);
return view;
}
void removeChild(View view) {
childViews = childViews.where((e) {
return view != e;
}).toList();
// TODO(rnystrom): Container shouldn't be null. Remove this check.
if (container != null) {
view.node.remove();
}
}
}