Repository: flex-asjs Updated Branches: refs/heads/dual 9fd9b78b7 -> 31e3c55be
Initial changes for Mobile project. Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/e0b3528a Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/e0b3528a Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/e0b3528a Branch: refs/heads/dual Commit: e0b3528a795f1a99987ce5e25cc7f89986b6d735 Parents: ae5cb4e Author: Peter Ent <[email protected]> Authored: Wed Apr 12 15:39:56 2017 -0400 Committer: Peter Ent <[email protected]> Committed: Wed Apr 12 15:39:56 2017 -0400 ---------------------------------------------------------------------- .../ButtonBarButtonItemRenderer.as | 34 +++- .../Mobile/src/main/flex/MobileClasses.as | 1 + .../apache/flex/mobile/ManagedContentArea.as | 55 ++++++ .../apache/flex/mobile/StackedViewManager.as | 51 ++++-- .../org/apache/flex/mobile/TabbedViewManager.as | 42 +++++ .../flex/org/apache/flex/mobile/TitleView.as | 4 - .../org/apache/flex/mobile/ViewManagerBase.as | 52 ++---- .../flex/mobile/beads/StackedViewManagerView.as | 175 +++++++++++++------ .../flex/mobile/beads/TabbedViewManagerView.as | 175 +++++++++++++------ .../flex/mobile/beads/ViewManagerViewBase.as | 123 ++++++------- .../src/main/resources/basic-manifest.xml | 1 + .../Mobile/src/main/resources/defaults.css | 21 +++ 12 files changed, 511 insertions(+), 223 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0b3528a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as index 214125e..4e7ed07 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as @@ -26,6 +26,11 @@ package org.apache.flex.html.supportClasses import org.apache.flex.html.TextButton; import org.apache.flex.html.beads.ITextItemRenderer; import org.apache.flex.events.ItemClickedEvent; + + COMPILE::JS + { + import org.apache.flex.core.WrappedHTMLElement; + } /** * The ButtonBarButtonItemRenderer class handles the display of each item for the @@ -52,6 +57,18 @@ package org.apache.flex.html.supportClasses super(); } + /** + * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement + * @flexjsignorecoercion HTMLElement + */ + COMPILE::JS + override protected function createElement():WrappedHTMLElement + { + var result:WrappedHTMLElement = super.createElement(); + trace("Element "+element+"; positioner "+positioner); + return result; + } + protected var textButton:TextButton; /** @@ -96,8 +113,14 @@ package org.apache.flex.html.supportClasses */ override public function setWidth(value:Number, noEvent:Boolean = false):void { - super.setWidth(value, noEvent); + super.setWidth(value, true); textButton.width = value; + COMPILE::SWF { + textButton.height = height; + } + COMPILE::JS { + textButton.percentHeight = 100; + } } /** @@ -105,8 +128,14 @@ package org.apache.flex.html.supportClasses */ override public function setHeight(value:Number, noEvent:Boolean = false):void { - super.setHeight(value, noEvent); + super.setHeight(value, true); textButton.height = value; + COMPILE::SWF { + textButton.width = width; + } + COMPILE::JS { + textButton.percentWidth = 100; + } } /** @@ -125,7 +154,6 @@ package org.apache.flex.html.supportClasses var added:Boolean = false; if (textButton == null) { textButton = new TextButton(); - textButton.percentWidth = 100; // listen for clicks on the button and translate them into // an itemClicked event. http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0b3528a/frameworks/projects/Mobile/src/main/flex/MobileClasses.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Mobile/src/main/flex/MobileClasses.as b/frameworks/projects/Mobile/src/main/flex/MobileClasses.as index 7c650fd..ea74217 100644 --- a/frameworks/projects/Mobile/src/main/flex/MobileClasses.as +++ b/frameworks/projects/Mobile/src/main/flex/MobileClasses.as @@ -33,6 +33,7 @@ internal class MobileClasses import org.apache.flex.mobile.beads.DatePickerView; DatePickerView; import org.apache.flex.mobile.ToggleSwitch; ToggleSwitch; import org.apache.flex.mobile.ViewManagerBase; ViewManagerBase; + import org.apache.flex.mobile.ManagedContentArea; ManagedContentArea; import org.apache.flex.mobile.beads.StackedViewManagerView; StackedViewManagerView; import org.apache.flex.mobile.beads.TabbedViewManagerView; TabbedViewManagerView; import org.apache.flex.mobile.beads.ViewManagerViewBase; ViewManagerViewBase; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0b3528a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/ManagedContentArea.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/ManagedContentArea.as b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/ManagedContentArea.as new file mode 100644 index 0000000..16081e5 --- /dev/null +++ b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/ManagedContentArea.as @@ -0,0 +1,55 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package org.apache.flex.mobile +{ + import org.apache.flex.core.UIBase; + import org.apache.flex.html.Group; + import org.apache.flex.events.Event; + + COMPILE::JS + { + import org.apache.flex.core.WrappedHTMLElement; + } + + /** + * The ManagedContentArea is the space in which views are displayed by the + * view manager classes. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class ManagedContentArea extends Group + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function ManagedContentArea() + { + super(); + className = "ManagedContentArea"; + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0b3528a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/StackedViewManager.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/StackedViewManager.as b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/StackedViewManager.as index 9322e66..79368fd 100644 --- a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/StackedViewManager.as +++ b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/StackedViewManager.as @@ -26,6 +26,7 @@ package org.apache.flex.mobile import org.apache.flex.mobile.chrome.NavigationBar; import org.apache.flex.mobile.chrome.ToolBar; import org.apache.flex.mobile.models.ViewManagerModel; + import org.apache.flex.mobile.beads.StackedViewManagerView; [Event(name="viewChanged",type="org.apache.flex.events.Event")] @@ -127,6 +128,22 @@ package org.apache.flex.mobile { return _topView; } + + /** + * @private + */ + override public function addedToParent():void + { + super.addedToParent(); + +// var tabbedView:StackedViewManagerView = getBeadByType(StackedViewManagerView) as StackedViewManagerView; +// +// var n:int = ViewManagerModel(model).views.length; +// if (n > 0) { +// var view:IViewManagerView = ViewManagerModel(model).views[0] as IViewManagerView; +// push(view); +// } + } /** @@ -142,13 +159,15 @@ package org.apache.flex.mobile nextView.viewManager = this; ViewManagerModel(model).pushView(nextView); - if (_topView != null) { - removeElement(_topView); - } - _topView = nextView; - addElement(_topView); - - dispatchEvent( new Event("viewChanged") ); +// var stackedView:StackedViewManagerView = getBeadByType(StackedViewManagerView) as StackedViewManagerView; +// +// if (_topView != null) { +// stackedView.contentArea.removeElement(_topView); +// } +// _topView = nextView; +// stackedView.contentArea.addElement(_topView); +// +// dispatchEvent( new Event("viewChanged") ); } /** @@ -161,14 +180,16 @@ package org.apache.flex.mobile */ public function pop():void { - if (ViewManagerModel(model).views.length > 1) { - var lastView:IChild = ViewManagerModel(model).popView() as IChild; - removeElement(_topView); - addElement(lastView); - _topView = lastView as IViewManagerView; - - dispatchEvent( new Event("viewChanged") ); - } + var stackedView:StackedViewManagerView = getBeadByType(StackedViewManagerView) as StackedViewManagerView; + +// if (ViewManagerModel(model).views.length > 1) { +// var lastView:IChild = ViewManagerModel(model).popView() as IChild; +// stackedView.contentArea.removeElement(_topView); +// stackedView.contentArea.addElement(lastView); +// _topView = lastView as IViewManagerView; +// +// dispatchEvent( new Event("viewChanged") ); +// } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0b3528a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/TabbedViewManager.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/TabbedViewManager.as b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/TabbedViewManager.as index 243e285..3b0d89d 100644 --- a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/TabbedViewManager.as +++ b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/TabbedViewManager.as @@ -18,11 +18,13 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.flex.mobile { + import org.apache.flex.events.Event; import org.apache.flex.html.Container; import org.apache.flex.mobile.IViewManagerView; import org.apache.flex.mobile.IViewManager; import org.apache.flex.mobile.chrome.TabBar; import org.apache.flex.mobile.models.ViewManagerModel; + import org.apache.flex.mobile.beads.TabbedViewManagerView; [Event(name="viewChanged",type="org.apache.flex.events.Event")] @@ -82,6 +84,46 @@ package org.apache.flex.mobile { ViewManagerModel(model).selectedIndex = value; } + + /** + * @private + */ + override public function addedToParent():void + { + super.addedToParent(); + +// var tabbedView:TabbedViewManagerView = getBeadByType(TabbedViewManagerView) as TabbedViewManagerView; +// +// var n:int = ViewManagerModel(model).views.length; +// if (n > 0) { +// for (var i:int = 0; i < n; i++) +// { +// var view:IViewManagerView = ViewManagerModel(model).views[i] as IViewManagerView; +// view.viewManager = this; +// if (i == 0) { +// tabbedView.contentArea.addElement(view, true); +// } +// } +// ViewManagerModel(model).selectedIndex = 0; +// } + } + + /** + * @private + */ + override protected function changeView( event:Event ):void + { +// var tabbedView:TabbedViewManagerView = getBeadByType(TabbedViewManagerView) as TabbedViewManagerView; +// +// var index:Number = ViewManagerModel(model).selectedIndex; +// if (currentView) { +// tabbedView.contentArea.removeElement(currentView); +// } +// currentView = views[index]; +// tabbedView.contentArea.addElement(currentView); +// +// dispatchEvent( new Event("viewChanged") ); + } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0b3528a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/TitleView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/TitleView.as b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/TitleView.as index 504f62e..0200e72 100644 --- a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/TitleView.as +++ b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/TitleView.as @@ -33,10 +33,6 @@ package org.apache.flex.mobile public function TitleView() { super(); - - // views always take up 100% of their space - percentWidth = 100; - percentHeight = 100; } private var _title:String; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0b3528a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/ViewManagerBase.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/ViewManagerBase.as b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/ViewManagerBase.as index 6d7175e..cc16ae3 100644 --- a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/ViewManagerBase.as +++ b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/ViewManagerBase.as @@ -20,15 +20,12 @@ package org.apache.flex.mobile { import org.apache.flex.core.UIBase; import org.apache.flex.events.Event; - import org.apache.flex.html.Container; + import org.apache.flex.html.Group; import org.apache.flex.mobile.IViewManagerView; import org.apache.flex.mobile.IViewManager; import org.apache.flex.mobile.chrome.NavigationBar; import org.apache.flex.mobile.models.ViewManagerModel; -// import org.apache.flex.html.beads.SolidBackgroundBead; -// import org.apache.flex.html.beads.SingleLineBorderBead; - /** * Event dispatched when the current (selected) view changes. * @@ -47,7 +44,7 @@ package org.apache.flex.mobile * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public class ViewManagerBase extends UIBase implements IViewManager + public class ViewManagerBase extends Group implements IViewManager { /** * Constructor. @@ -61,9 +58,7 @@ package org.apache.flex.mobile percentHeight = 100; model.addEventListener("selectedIndexChanged", changeView); - -// addBead(new SolidBackgroundBead()); -// addBead(new SingleLineBorderBead()); + } /** @@ -162,40 +157,21 @@ package org.apache.flex.mobile /** * @private */ - override public function addedToParent():void + protected function changeView( event:Event ):void { - super.addedToParent(); - - var n:int = ViewManagerModel(model).views.length; - if (n > 0) { - for (var i:int = 0; i < n; i++) - { - var view:IViewManagerView = ViewManagerModel(model).views[i] as IViewManagerView; - view.viewManager = this; - if (i == 0) { - addElement(view, true); - } - } - ViewManagerModel(model).selectedIndex = 0; - } - } - - /** - * @private - */ - private function changeView( event:Event ):void - { - var index:Number = ViewManagerModel(model).selectedIndex; - if (_currentView) { - removeElement(_currentView); - } - _currentView = views[index]; - addElement(_currentView); - - dispatchEvent( new Event("viewChanged") ); + // handled in subclass } private var _currentView:IViewManagerView; + public function get currentView():IViewManagerView + { + return _currentView; + } + public function set currentView(value:IViewManagerView):void + { + _currentView = value; + // probably need to dispatch an event or do something more complex + } /** * The currently visible view. http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0b3528a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/StackedViewManagerView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/StackedViewManagerView.as b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/StackedViewManagerView.as index 85368ae..bd99b00 100644 --- a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/StackedViewManagerView.as +++ b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/StackedViewManagerView.as @@ -26,6 +26,8 @@ package org.apache.flex.mobile.beads import org.apache.flex.events.Event; import org.apache.flex.html.beads.ContainerView; import org.apache.flex.html.beads.layouts.HorizontalLayout; + import org.apache.flex.mobile.IViewManagerView; + import org.apache.flex.mobile.ManagedContentArea; import org.apache.flex.mobile.chrome.NavigationBar; import org.apache.flex.mobile.chrome.ToolBar; import org.apache.flex.mobile.models.ViewManagerModel; @@ -54,74 +56,145 @@ package org.apache.flex.mobile.beads super(); } - private var _toolBar:ToolBar; - + private var _strand:IStrand; + private var _contentArea:ManagedContentArea; + + public function get contentArea():ManagedContentArea + { + return _contentArea; + } + + public function get toolBar():ToolBar + { + var model:ViewManagerModel = strand.getBeadByType(IBeadModel) as ViewManagerModel; + return model.toolBar; + } + public function set toolBar(value:ToolBar):void + { + var model:ViewManagerModel = strand.getBeadByType(IBeadModel) as ViewManagerModel; + model.toolBar = value; + } + + override public function get strand():IStrand + { + return _strand; + } override public function set strand(value:IStrand):void { + _strand = value; + super.strand = value; + + // The content area will hold the views + _contentArea = new ManagedContentArea(); + var model:ViewManagerModel = value.getBeadByType(IBeadModel) as ViewManagerModel; if (model.toolBarItems) { - _toolBar = new ToolBar(); - _toolBar.controls = model.toolBarItems; - _toolBar.addBead(new HorizontalLayout()); - UIBase(value).addElement(_toolBar,false); + var tbar:ToolBar = new ToolBar(); + tbar.controls = model.toolBarItems; + tbar.addBead(new HorizontalLayout()); + toolBar = tbar; } - - super.strand = value; - } - override public function get strand():IStrand - { - return super.strand; } - /** - * @private - */ - override protected function layoutChromeElements():void - { - var host:UIBase = strand as UIBase; - var contentAreaY:Number = 0; - var contentAreaHeight:Number = host.height; - var toolbarHeight:Number = _toolBar == null ? 0 : _toolBar.height; - - var model:ViewManagerModel = strand.getBeadByType(IBeadModel) as ViewManagerModel; + override protected function handleInitComplete(event:Event):void + { + super.handleInitComplete(event); - if (navigationBar) - { - navigationBar.x = 0; - navigationBar.y = 0; - navigationBar.width = host.width; - - contentAreaHeight -= navigationBar.height; - contentAreaY = navigationBar.height; - - model.navigationBar = navigationBar; + COMPILE::SWF { + _contentArea.percentWidth = 100; + _contentArea.percentHeight = 100; } + UIBase(_strand).addElement(_contentArea); - if (_toolBar) - { - _toolBar.x = 0; - _toolBar.y = host.height - toolbarHeight; - _toolBar.width = host.width; - - contentAreaHeight -= toolbarHeight; - - model.toolBar = _toolBar; + if (toolBar) { + UIBase(_strand).addElement(toolBar); } - if (contentAreaY < 0) contentAreaY = 0; - if (contentAreaHeight < 0) contentAreaHeight = 0; + performLayout(event); - model.contentX = 0; - model.contentY = contentAreaY; - model.contentWidth = host.width; - model.contentHeight = contentAreaHeight; + showViewByIndex(0); + } + + private var _topView:IViewManagerView; + + protected function showViewByIndex(index:int):void + { + var model:ViewManagerModel = _strand.getBeadByType(IBeadModel) as ViewManagerModel; - sizeViewsToFitContentArea(); + if (_topView != null) { + contentArea.removeElement(_topView); + } + _topView = model.views[index] as IViewManagerView; + contentArea.addElement(_topView); - // notify the views that the content size has changed - IEventDispatcher(strand).dispatchEvent( new Event("contentSizeChanged") ); + COMPILE::JS { + if (_topView) { + UIBase(_topView).element.style["flex-grow"] = "1"; + } + } } + + override protected function layoutViewAfterContentLayout():void + { + super.layoutViewAfterContentLayout(); + + COMPILE::SWF { + if (_topView) { + UIBase(_topView).width = contentArea.width; + UIBase(_topView).height = contentArea.height; + } + } + } + + /** + * @private + */ +// override protected function layoutChromeElements():void +// { +// var host:UIBase = strand as UIBase; +// var contentAreaY:Number = 0; +// var contentAreaHeight:Number = host.height; +// var toolbarHeight:Number = _toolBar == null ? 0 : _toolBar.height; +// +// var model:ViewManagerModel = strand.getBeadByType(IBeadModel) as ViewManagerModel; +// +// if (navigationBar) +// { +// navigationBar.x = 0; +// navigationBar.y = 0; +// navigationBar.width = host.width; +// +// contentAreaHeight -= navigationBar.height; +// contentAreaY = navigationBar.height; +// +// model.navigationBar = navigationBar; +// } +// +// if (_toolBar) +// { +// _toolBar.x = 0; +// _toolBar.y = host.height - toolbarHeight; +// _toolBar.width = host.width; +// +// contentAreaHeight -= toolbarHeight; +// +// model.toolBar = _toolBar; +// } +// +// if (contentAreaY < 0) contentAreaY = 0; +// if (contentAreaHeight < 0) contentAreaHeight = 0; +// +// model.contentX = 0; +// model.contentY = contentAreaY; +// model.contentWidth = host.width; +// model.contentHeight = contentAreaHeight; +// +// sizeViewsToFitContentArea(); +// +// // notify the views that the content size has changed +// IEventDispatcher(strand).dispatchEvent( new Event("contentSizeChanged") ); +// } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0b3528a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/TabbedViewManagerView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/TabbedViewManagerView.as b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/TabbedViewManagerView.as index 787375d..227ae74 100644 --- a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/TabbedViewManagerView.as +++ b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/TabbedViewManagerView.as @@ -26,9 +26,12 @@ package org.apache.flex.mobile.beads import org.apache.flex.events.Event; import org.apache.flex.html.beads.ContainerView; import org.apache.flex.html.beads.layouts.HorizontalLayout; + import org.apache.flex.mobile.IViewManagerView; + import org.apache.flex.mobile.ManagedContentArea; import org.apache.flex.mobile.chrome.NavigationBar; import org.apache.flex.mobile.chrome.TabBar; import org.apache.flex.mobile.models.ViewManagerModel; + import org.apache.flex.mobile.beads.TabbedViewManagerView; /** * The TabbedViewManagerView constructs the visual elements of the TabbedViewManager. The @@ -54,9 +57,25 @@ package org.apache.flex.mobile.beads super(); } - private var _tabBar:TabBar; - private var _strand:IStrand; + private var _contentArea:ManagedContentArea; + + public function get tabBar():TabBar + { + var model:ViewManagerModel = strand.getBeadByType(IBeadModel) as ViewManagerModel; + return model.tabBar; + } + public function set tabBar(value:TabBar):void + { + var model:ViewManagerModel = strand.getBeadByType(IBeadModel) as ViewManagerModel; + model.tabBar = value; + } + + public function get contentArea():ManagedContentArea + { + return _contentArea; + } + override public function get strand():IStrand { return _strand; @@ -64,17 +83,69 @@ package org.apache.flex.mobile.beads override public function set strand(value:IStrand):void { _strand = value; + super.strand = value; + + // The content area will hold the views + _contentArea = new ManagedContentArea(); var model:ViewManagerModel = value.getBeadByType(IBeadModel) as ViewManagerModel; // TabbedViewManager always has a TabBar - _tabBar = new TabBar(); - _tabBar.dataProvider = model.views; - _tabBar.labelField = "title"; - _tabBar.addEventListener("change",handleButtonBarChange); - UIBase(_strand).addElement(_tabBar, false); + var tbar:TabBar = new TabBar(); + tbar.dataProvider = model.views; + tbar.labelField = "title"; + tbar.addEventListener("change",handleButtonBarChange); + tabBar = tbar; + } + + override protected function handleInitComplete(event:Event):void + { + super.handleInitComplete(event); - super.strand = value; + COMPILE::SWF { + _contentArea.percentWidth = 100; + _contentArea.percentHeight = 100; + } + UIBase(_strand).addElement(_contentArea); + + if (tabBar) { + UIBase(_strand).addElement(tabBar); + } + + performLayout(event); + + showViewByIndex(0); + } + + private var _currentView:IViewManagerView; + + protected function showViewByIndex(index:int):void + { + var model:ViewManagerModel = _strand.getBeadByType(IBeadModel) as ViewManagerModel; + + if (_currentView != null) { + contentArea.removeElement(_currentView); + } + _currentView = model.views[index] as IViewManagerView; + contentArea.addElement(_currentView); + + COMPILE::JS { + if (_currentView) { + UIBase(_currentView).element.style["flex-grow"] = "1"; + } + } + } + + override protected function layoutViewAfterContentLayout():void + { + super.layoutViewAfterContentLayout(); + + COMPILE::SWF { + if (_currentView) { + UIBase(_currentView).width = contentArea.width; + UIBase(_currentView).height = contentArea.height; + } + } } /** @@ -82,58 +153,60 @@ package org.apache.flex.mobile.beads */ private function handleButtonBarChange(event:Event):void { - var newIndex:Number = _tabBar.selectedIndex; + var newIndex:Number = tabBar.selectedIndex; var model:ViewManagerModel = strand.getBeadByType(IBeadModel) as ViewManagerModel; // doing this will trigger the selectedIndexChanged event which will // tell the strand to switch views model.selectedIndex = newIndex; + + showViewByIndex(newIndex); } /** * @private */ - override protected function layoutChromeElements():void - { - var host:UIBase = _strand as UIBase; - var contentAreaY:Number = 0; - var contentAreaHeight:Number = host.height; - - var model:ViewManagerModel = strand.getBeadByType(IBeadModel) as ViewManagerModel; - - if (navigationBar) - { - navigationBar.x = 0; - navigationBar.y = 0; - navigationBar.width = host.width; - - contentAreaHeight -= navigationBar.height; - contentAreaY = navigationBar.height; - - model.navigationBar = navigationBar; - } - - if (_tabBar) - { - _tabBar.x = 0; - _tabBar.y = host.height - _tabBar.height; - _tabBar.width = host.width; - _tabBar.dispatchEvent(new Event("layoutNeeded")); - - contentAreaHeight -= _tabBar.height; - - model.tabBar = _tabBar; - } - - model.contentX = 0; - model.contentY = contentAreaY; - model.contentWidth = host.width; - model.contentHeight = contentAreaHeight; - - sizeViewsToFitContentArea(); - - // notify the views that the content size has changed - IEventDispatcher(strand).dispatchEvent( new Event("contentSizeChanged") ); - } +// override protected function layoutChromeElements():void +// { +// var host:UIBase = _strand as UIBase; +// var contentAreaY:Number = 0; +// var contentAreaHeight:Number = host.height; +// +// var model:ViewManagerModel = strand.getBeadByType(IBeadModel) as ViewManagerModel; +// +// if (navigationBar) +// { +// navigationBar.x = 0; +// navigationBar.y = 0; +// navigationBar.width = host.width; +// +// contentAreaHeight -= navigationBar.height; +// contentAreaY = navigationBar.height; +// +// model.navigationBar = navigationBar; +// } +// +// if (_tabBar) +// { +// _tabBar.x = 0; +// _tabBar.y = host.height - _tabBar.height; +// _tabBar.width = host.width; +// _tabBar.dispatchEvent(new Event("layoutNeeded")); +// +// contentAreaHeight -= _tabBar.height; +// +// model.tabBar = _tabBar; +// } +// +// model.contentX = 0; +// model.contentY = contentAreaY; +// model.contentWidth = host.width; +// model.contentHeight = contentAreaHeight; +// +// sizeViewsToFitContentArea(); +// +// // notify the views that the content size has changed +// IEventDispatcher(strand).dispatchEvent( new Event("contentSizeChanged") ); +// } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0b3528a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/ViewManagerViewBase.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/ViewManagerViewBase.as b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/ViewManagerViewBase.as index f314fad..5599ad9 100644 --- a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/ViewManagerViewBase.as +++ b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/ViewManagerViewBase.as @@ -28,6 +28,7 @@ package org.apache.flex.mobile.beads import org.apache.flex.events.Event; import org.apache.flex.html.Container; import org.apache.flex.html.beads.layouts.HorizontalLayout; + import org.apache.flex.html.beads.GroupView; import org.apache.flex.mobile.IViewManagerView; import org.apache.flex.mobile.chrome.NavigationBar; import org.apache.flex.mobile.models.ViewManagerModel; @@ -41,7 +42,7 @@ package org.apache.flex.mobile.beads * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public class ViewManagerViewBase implements IBeadView + public class ViewManagerViewBase extends GroupView implements IBeadView { /** * Constructor. @@ -56,23 +57,15 @@ package org.apache.flex.mobile.beads super(); } - public function get host():IUIBase - { - return _strand as IUIBase; - } - public function set host(value:IUIBase):void - { - // not implemented; getter only. - } - - private var _navigationBar:NavigationBar; public function get navigationBar():NavigationBar { - return _navigationBar; + var model:ViewManagerModel = strand.getBeadByType(IBeadModel) as ViewManagerModel; + return model.navigationBar; } public function set navigationBar(value:NavigationBar):void { - // not implemented; getter only. + var model:ViewManagerModel = strand.getBeadByType(IBeadModel) as ViewManagerModel; + model.navigationBar = value; } private var _strand:IStrand; @@ -80,22 +73,29 @@ package org.apache.flex.mobile.beads { return _strand; } - public function set strand(value:IStrand):void + override public function set strand(value:IStrand):void { + super.strand = value; _strand = value; - UIBase(_strand).addEventListener("sizeChanged", sizeChangedHandler); - UIBase(_strand).addEventListener("widthChanged", sizeChangedHandler); - UIBase(_strand).addEventListener("heightChanged", sizeChangedHandler); var model:ViewManagerModel = value.getBeadByType(IBeadModel) as ViewManagerModel; model.addEventListener("selectedIndexChanged", viewsChangedHandler); if (model.navigationBarItems) { - _navigationBar = new NavigationBar(); - _navigationBar.controls = model.navigationBarItems; - _navigationBar.addBead(new HorizontalLayout()); - UIBase(_strand).addElement(_navigationBar, false); + var navBar:NavigationBar = new NavigationBar(); + navBar.controls = model.navigationBarItems; + navBar.addBead(new HorizontalLayout()); + navigationBar = navBar; + } + } + + override protected function handleInitComplete(event:Event):void + { + super.handleInitComplete(event); + + if (navigationBar) { + UIBase(_strand).addElement(navigationBar); } } @@ -110,56 +110,57 @@ package org.apache.flex.mobile.beads /** * @private */ - protected function sizeChangedHandler(event:Event):void - { - layoutChromeElements(); - } +// protected function sizeChangedHandler(event:Event):void +// { +// layoutChromeElements(); +// } /** * @private */ protected function layoutChromeElements():void { - var host:UIBase = _strand as UIBase; - var contentAreaY:Number = 0; - var contentAreaHeight:Number = host.height; - - var model:ViewManagerModel = _strand.getBeadByType(IBeadModel) as ViewManagerModel; - - if (_navigationBar) - { - _navigationBar.x = 0; - _navigationBar.y = 0; - _navigationBar.width = host.width; - - contentAreaHeight -= _navigationBar.height; - contentAreaY = _navigationBar.height; - - model.navigationBar = _navigationBar; - } - - model.contentX = 0; - model.contentY = contentAreaY; - model.contentWidth = host.width; - model.contentHeight = contentAreaHeight; - - sizeViewsToFitContentArea(); + performLayout(null); +// var host:UIBase = _strand as UIBase; +// var contentAreaY:Number = 0; +// var contentAreaHeight:Number = host.height; +// +// var model:ViewManagerModel = _strand.getBeadByType(IBeadModel) as ViewManagerModel; +// +// if (_navigationBar) +// { +// _navigationBar.x = 0; +// _navigationBar.y = 0; +// _navigationBar.width = host.width; +// +// contentAreaHeight -= _navigationBar.height; +// contentAreaY = _navigationBar.height; +// +// model.navigationBar = _navigationBar; +// } +// +// model.contentX = 0; +// model.contentY = contentAreaY; +// model.contentWidth = host.width; +// model.contentHeight = contentAreaHeight; +// +// sizeViewsToFitContentArea(); } protected function sizeViewsToFitContentArea():void { - var model:ViewManagerModel = _strand.getBeadByType(IBeadModel) as ViewManagerModel; - - var n:int = ViewManagerModel(model).views.length; - if (n > 0) { - for (var i:int = 0; i < n; i++) - { - var view:IViewManagerView = ViewManagerModel(model).views[i] as IViewManagerView; - UIBase(view).x = model.contentX; - UIBase(view).y = model.contentY; - UIBase(view).setWidthAndHeight(model.contentWidth, model.contentHeight, true); - } - } +// var model:ViewManagerModel = _strand.getBeadByType(IBeadModel) as ViewManagerModel; +// +// var n:int = ViewManagerModel(model).views.length; +// if (n > 0) { +// for (var i:int = 0; i < n; i++) +// { +// var view:IViewManagerView = ViewManagerModel(model).views[i] as IViewManagerView; +// UIBase(view).x = model.contentX; +// UIBase(view).y = model.contentY; +// UIBase(view).setWidthAndHeight(model.contentWidth, model.contentHeight, true); +// } +// } } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0b3528a/frameworks/projects/Mobile/src/main/resources/basic-manifest.xml ---------------------------------------------------------------------- diff --git a/frameworks/projects/Mobile/src/main/resources/basic-manifest.xml b/frameworks/projects/Mobile/src/main/resources/basic-manifest.xml index e0f523d..ac85e14 100644 --- a/frameworks/projects/Mobile/src/main/resources/basic-manifest.xml +++ b/frameworks/projects/Mobile/src/main/resources/basic-manifest.xml @@ -23,6 +23,7 @@ <component id="StackedViewManager" class="org.apache.flex.mobile.StackedViewManager" /> <component id="TabbedViewManager" class="org.apache.flex.mobile.TabbedViewManager" /> <component id="TitleView" class="org.apache.flex.mobile.TitleView" /> + <component id="ManagedContentArea" class="org.apache.flex.mobile.ManagedContentArea" /> <component id="NavigationBar" class="org.apache.flex.mobile.chrome.NavigationBar" /> <component id="ToolBar" class="org.apache.flex.mobile.chrome.ToolBar" /> <component id="TabBar" class="org.apache.flex.mobile.chrome.TabBar" /> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0b3528a/frameworks/projects/Mobile/src/main/resources/defaults.css ---------------------------------------------------------------------- diff --git a/frameworks/projects/Mobile/src/main/resources/defaults.css b/frameworks/projects/Mobile/src/main/resources/defaults.css index ddf9229..405a3a5 100644 --- a/frameworks/projects/Mobile/src/main/resources/defaults.css +++ b/frameworks/projects/Mobile/src/main/resources/defaults.css @@ -20,16 +20,29 @@ @namespace "library://ns.apache.org/flexjs/basic"; @namespace svg "library://ns.apache.org/flexjs/svg"; +NavigationBar +{ + IBeadLayout: ClassReference("org.apache.flex.html.beads.layouts.HorizontalFlexLayout"); +} + StackedViewManager { IBeadModel: ClassReference("org.apache.flex.mobile.models.ViewManagerModel"); IBeadView: ClassReference("org.apache.flex.mobile.beads.StackedViewManagerView"); + IBeadLayout: ClassReference("org.apache.flex.html.beads.layouts.VerticalFlexLayout"); } TabbedViewManager { IBeadModel: ClassReference("org.apache.flex.mobile.models.ViewManagerModel"); IBeadView: ClassReference("org.apache.flex.mobile.beads.TabbedViewManagerView"); + IBeadLayout: ClassReference("org.apache.flex.html.beads.layouts.VerticalFlexLayout"); +} + +ManagedContentArea +{ + display: flex; + flex-grow: 1; } ToggleSwitch @@ -63,3 +76,11 @@ DatePicker { IBeadModel: ClassReference("org.apache.flex.html.beads.models.RangeModelExtended"); IBeadController: ClassReference("org.apache.flex.html.beads.controllers.RangeStepperMouseController"); } + +@media -flex-flash +{ + NavigationBar { + IBackgroundBead: ClassReference("org.apache.flex.html.beads.SolidBackgroundBead"); + IBorderBead: ClassReference("org.apache.flex.html.beads.SingleLineBorderBead"); + } +}
