This is an automated email from the ASF dual-hosted git repository. gregdove pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit c256c4342e1d2e16a938ab08ef9049c94489685c Author: greg-dove <[email protected]> AuthorDate: Thu Dec 9 16:08:49 2021 +1300 Improvements in ViewStack and LinkBar (startup behaviour and integration). --- .../MXRoyale/src/main/resources/defaults.css | 7 +- .../MXRoyale/src/main/royale/MXRoyaleClasses.as | 1 + .../src/main/royale/mx/containers/ViewStack.as | 15 +++ .../src/main/royale/mx/controls/LinkBar.as | 33 ++++-- .../MXRoyale/src/main/royale/mx/controls/NavBar.as | 9 ++ .../src/main/royale/mx/skins/halo/LinkSeparator.as | 132 +++++++++++++++++++++ 6 files changed, 183 insertions(+), 14 deletions(-) diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css index 37ecc3b..4ac02f9 100644 --- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css +++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css @@ -415,9 +415,14 @@ NavBar paddingLeft: 1; paddingRight: 0; paddingTop: 1; - horizontalGap: 6; + horizontalGap: 6; } +LinkBar { + /* @todo restore this once rawChildren is working in LinkBar, otherwise selection indexing does not work + separatorSkin : ClassReference("mx.skins.halo.LinkSeparator"); + */ +} /* MenuItemRenderer { diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as index cc9a808..4be7101 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as +++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as @@ -306,6 +306,7 @@ internal class MXRoyaleClasses import mx.effects.IEffectTargetHost; IEffectTargetHost; /*import mx.events.RSLEvent; RSLEvent;*/ import mx.skins.halo.DataGridHeaderSeparator; DataGridHeaderSeparator; + import mx.skins.halo.LinkSeparator; LinkSeparator; import mx.filters.BaseDimensionFilter; BaseDimensionFilter; import mx.filters.BaseFilter; BaseFilter; import mx.filters.IBitmapFilter; IBitmapFilter; diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/ViewStack.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/ViewStack.as index 614d473..de038dd 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/ViewStack.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/ViewStack.as @@ -50,6 +50,8 @@ import mx.events.PropertyChangeEvent; //import mx.managers.HistoryManager; //import mx.managers.IHistoryManagerClient; +import mx.utils.RoyaleUtil; + import org.apache.royale.core.IChild; use namespace mx_internal; @@ -354,6 +356,19 @@ public class ViewStack extends Container implements /*IHistoryManagerClient,*/ I // //-------------------------------------------------------------------------- + //variation for emulation: + override public function invalidateProperties():void + { + var me:ViewStack = this; + if (RoyaleUtil.commitDeferred(commitProperties) && parent) { + //then force a view update after + RoyaleUtil.commitDeferred(function():void{ + me.measure(); + me.updateDisplayList(me.width, me.height); + }) + } + } + //---------------------------------- // autoLayout //---------------------------------- diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/LinkBar.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/LinkBar.as index 597d9cd..d75e036 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/LinkBar.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/LinkBar.as @@ -22,6 +22,7 @@ package mx.controls import mx.core.UIComponent; +import mx.core.IUIComponent; import mx.events.MouseEvent; import mx.core.ClassFactory; import mx.core.EdgeMetrics; @@ -35,6 +36,8 @@ import mx.styles.StyleProxy; import mx.containers.Box; import mx.controls.NavBar; +import org.apache.royale.events.IEventDispatcher; + use namespace mx_internal; //-------------------------------------- @@ -316,7 +319,7 @@ public class LinkBar extends NavBar /** * @private */ - // private static const SEPARATOR_NAME:String = "_separator"; + private static const SEPARATOR_NAME:String = "_separator"; //-------------------------------------------------------------------------- // @@ -555,10 +558,12 @@ public class LinkBar extends NavBar /** * @private + * + * @royaleignorecoercion Class */ - /* override protected function createNavItem( + override protected function createNavItem( label:String, - icon:Class = null):IFlexDisplayObject + icon:Class = null):IEventDispatcher { // Create the new LinkButton. @@ -581,18 +586,20 @@ public class LinkBar extends NavBar newLink.addEventListener(MouseEvent.CLICK, clickHandler); // Create the new separator to the left of the LinkButton. + var separatorClass:Class = Class(getStyle("separatorSkin")); //@todo, need to support rawChildren working below first + if (separatorClass) { + //porting notes, this conditional clause is different to the original Flex implementation, allowing native browser styles to create 'separation' + var separator:IUIComponent = IUIComponent(new separatorClass()); + + separator.name = SEPARATOR_NAME + (numChildren - 1); + if (separator is ISimpleStyleClient) + ISimpleStyleClient(separator).styleName = this; +//@todo, need to support rawChildren working below: + rawChildren.addChild(separator); + } - var separatorClass:Class = Class(getStyle("separatorSkin")); - var separator:DisplayObject = DisplayObject(new separatorClass()); - - separator.name = SEPARATOR_NAME + (numChildren - 1); - if (separator is ISimpleStyleClient) - ISimpleStyleClient(separator).styleName = this; - - rawChildren.addChild(separator); - return newLink; - } */ + } /** * @private diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/NavBar.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/NavBar.as index 28738f5..19df4c7 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/NavBar.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/NavBar.as @@ -45,6 +45,8 @@ import mx.managers.ISystemManager; import mx.managers.SystemManager; //import mx.styles.StyleProtoChain; +import mx.utils.RoyaleUtil; + use namespace mx_internal; //-------------------------------------- @@ -158,6 +160,13 @@ public class NavBar extends Box showInAutomationHierarchy = true; } + + //variation for emulation: + override public function invalidateProperties():void + { + RoyaleUtil.commitDeferred(commitProperties); + } + //-------------------------------------------------------------------------- // // Variables diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/skins/halo/LinkSeparator.as b/frameworks/projects/MXRoyale/src/main/royale/mx/skins/halo/LinkSeparator.as new file mode 100644 index 0000000..7dd48c3 --- /dev/null +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/skins/halo/LinkSeparator.as @@ -0,0 +1,132 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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 mx.skins.halo +{ + +import mx.display.Graphics; +import org.apache.royale.reflection.getQualifiedClassName; +import org.apache.royale.reflection.describeType; +import org.apache.royale.reflection.getAncestry; + +import mx.containers.BoxDirection; +import mx.skins.ProgrammaticSkin; + + + +/** + * The skin for the separator between the Links in a LinkBar. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ +public class LinkSeparator extends ProgrammaticSkin { + //include "../../core/Version.as"; + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public function LinkSeparator() { + super(); + } + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + /** + * @private + */ + override protected function updateDisplayList(w:Number, h:Number):void { + super.updateDisplayList(w, h); + + var separatorColor:uint = getStyle("separatorColor"); + var separatorWidth:Number = getStyle("separatorWidth"); + + var isVertical:Boolean = false; + + var g:Graphics = graphics; + + g.clear(); + + if (separatorWidth > 0) { + if (isBox(parent)) + isVertical = Object(parent).direction == BoxDirection.VERTICAL; + + g.lineStyle(separatorWidth, separatorColor); + if (isVertical) { + g.moveTo(4, h / 2); + g.lineTo(w - 4, h / 2); + } else { + g.moveTo(w / 2, 6); + g.lineTo(w / 2, h - 5); + } + } + } + + /** + * We don't use 'is' to prevent dependency issues + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + private static var boxes:Object = {}; + + private static function isBox(parent:Object):Boolean { + var s:String = getQualifiedClassName(parent); + if (boxes[s] == 1) + return true; + + if (boxes[s] == 0) + return false; + + if (s == "mx.containers.Box") { + boxes[s] == 1; + return true; + } + + var ancestry:Array = getAncestry(parent); + if (ancestry.indexOf('mx.containers.Box') != -1) { + boxes[s] = 0; + return false; + } + + + boxes[s] = 1; + return true; + } +} +} \ No newline at end of file
