You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by gr...@apache.org on 2021/12/09 03:10:07 UTC
[royale-asjs] 01/02: Improvements in ViewStack and LinkBar (startup behaviour and integration).
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 <gr...@gmail.com>
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