// 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. // @dart = 2.9 part of view; /** * A View that is composed of child views. */ class CompositeView extends View { List 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() {} Element render() { Element node = new Element.html('
'); if (_nestedContainer) { container = new Element.html('
'); 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(); } } }