Index: client/view/ConveyorView.dart |
=================================================================== |
--- client/view/ConveyorView.dart (revision 4144) |
+++ client/view/ConveyorView.dart (working copy) |
@@ -1,98 +0,0 @@ |
-// 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. |
- |
-/** |
- * Holds a number of child views. As you switch between views, the old |
- * view is pushed off to the side and the new view slides in from the other |
- * side. |
- */ |
-class ConveyorView extends CompositeView { |
- // TODO(jmesserly): some places use this property to know when the slide |
- // transition is finished. It would be better to have an event that fires |
- // when we're done sliding |
- static final ANIMATE_SECONDS = 0.25; |
- |
- View targetView; |
- // TODO(rnystrom): Should not be settable. |
- View selectedView; |
- // TODO(rnystrom): Hackish. Should use a real multicast event-like class. |
- // Or just have it depend on an Observable to select a view and indicate |
- // which view is selected? (e.g. the MVVM pattern) |
- Function viewSelected; |
- |
- int animationTimeoutId; |
- |
- ConveyorView() |
- : super('conveyor-view', true), |
- animationTimeoutId = null { |
- } |
- |
- Element render() { |
- final result = super.render(); |
- // TODO(rnystrom): Have to do this in render() because container doesn't |
- // exist before then. Hack. Should find a cleaner solution. One of: |
- // - Add a ctor param to CompositeView for container class name. |
- // - Make ConveyorView contain a CompositeView instead of subclass. |
- // - Add method to CompositeView to set class name. |
- container.attributes['class'] = 'conveyor-view-container'; |
- return result; |
- } |
- |
- void selectView(View targetView_, [bool animate = true]) { |
- selectedView = targetView_; |
- |
- // Only animate if we're actually in the document now. |
- if (isRendered) { |
- adjustOffset(animate); |
- } |
- } |
- |
- void adjustOffset(bool animate) { |
- int index = getIndexOfSelectedView(); |
- final durationSeconds = animate ? ANIMATE_SECONDS : 0.0; |
- |
- final style = container.style; |
- // TODO(jacobr): modify setTransitionDuration so the input is always |
- // specified in miliseconds rather than accepting a string. |
- style.transitionDuration = '${durationSeconds}s'; |
- final xTranslationPercent = -index * 100; |
- style.transform = 'translate3d(${xTranslationPercent}%, 0px, 0px)'; |
- |
- if (animationTimeoutId != null) { |
- window.clearTimeout(animationTimeoutId); |
- } |
- |
- if (animate) { |
- animationTimeoutId = window.setTimeout( |
- () { _onAnimationEnd(); }, (durationSeconds * 1000).toInt()); |
- } |
- // TODO(mattsh), we should set the visibility to hide everything but the |
- // selected view. |
- } |
- |
- int getIndexOfSelectedView() { |
- for (int i = 0; i < childViews.length; i++) { |
- if (childViews[i] == selectedView) { |
- return i; |
- } |
- } |
- throw "view not found"; |
- } |
- |
- /** |
- * Adds a child view to the ConveyorView. The views are stacked horizontally |
- * in the order they are added. |
- */ |
- View addChild(View view) { |
- view.addClass('conveyor-item'); |
- view.transform = 'translate3d(' + (childViews.length * 100) + '%, 0, 0)'; |
- return super.addChild(view); |
- } |
- |
- void _onAnimationEnd() { |
- if (viewSelected != null) { |
- viewSelected(selectedView); |
- } |
- } |
-} |