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
The following commit(s) were added to refs/heads/develop by this push:
new 87d0fb2 Fix for TabNavigator TabBar updates (removal) when navigator
content is removed.
87d0fb2 is described below
commit 87d0fb29b7279647ea035339604cb2a1fa01fd47
Author: greg-dove <[email protected]>
AuthorDate: Thu Jan 13 18:50:45 2022 +1300
Fix for TabNavigator TabBar updates (removal) when navigator content is
removed.
---
.../src/main/royale/mx/containers/TabNavigator.as | 3 ++
.../royale/mx/containers/beads/TabNavigatorView.as | 59 +++++++++++++++++-----
2 files changed, 50 insertions(+), 12 deletions(-)
diff --git
a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/TabNavigator.as
b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/TabNavigator.as
index 69cf7e0..92ee428 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/TabNavigator.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/TabNavigator.as
@@ -31,6 +31,7 @@ import mx.controls.TabBar;
import org.apache.royale.core.IBeadView;
import org.apache.royale.core.IChild;
import org.apache.royale.events.Event;
+import org.apache.royale.events.ValueEvent;
import org.apache.royale.html.util.getModelByType;
import org.apache.royale.core.ISelectionModel;
//--------------------------------------
@@ -479,6 +480,8 @@ public class TabNavigator extends ViewStack implements
IFocusManagerComponent
{
var tnView:TabNavigatorView = view as TabNavigatorView;
tnView.contentArea.removeElement(c, dispatchEvent);
+ if (dispatchEvent)
+ this.dispatchEvent(new ValueEvent('childrenRemoved', c));
}
/**
diff --git
a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/TabNavigatorView.as
b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/TabNavigatorView.as
index c19c7b1..d1e5b02 100644
---
a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/TabNavigatorView.as
+++
b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/TabNavigatorView.as
@@ -40,6 +40,7 @@ import org.apache.royale.core.UIBase;
import org.apache.royale.core.ValuesManager;
import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
+import org.apache.royale.events.ValueEvent;
import org.apache.royale.html.beads.GroupView;
import org.apache.royale.html.supportClasses.PanelLayoutProxy;
@@ -143,8 +144,9 @@ public class TabNavigatorView extends GroupView
contentArea.percentHeight = 100;
// try to listen for childrenAdded before ViewStackLayout listens for
childrenAdded
// so we can update the selection before the layout picks the visible
child
- (_strand as IEventDispatcher).addEventListener("childrenAdded",
childrenAddedHandler);
- contentArea.addEventListener("childrenAdded", childrenAddedHandler);
+ (_strand as IEventDispatcher).addEventListener("childrenAdded",
childrenChangedHandler);
+ contentArea.addEventListener("childrenAdded", childrenChangedHandler);
+ contentArea.addEventListener("childrenRemoved",
childrenChangedHandler);
var vsl:ViewStackLayout = new ViewStackLayout();
vsl.target = contentArea as UIComponent;
vsl.model = tabBar.model as ISelectionModel;
@@ -152,29 +154,53 @@ public class TabNavigatorView extends GroupView
if (contentArea.parent == null) {
(_strand as
IContainerBaseStrandChildrenHost).$addElement(contentArea as IChild);
}
-
+
// Now give the TabNavigator its own layout
var boxLayout:BoxLayout = new BoxLayout();
boxLayout.direction = "vertical";
_strand.addBead(boxLayout);
-
+
}
-
+
private var tabDP:Array = [];
-
- private function childrenAddedHandler(event:Event):void
+
+ private function childrenChangedHandler(event:Event):void
{
+ var isRemoval:Boolean = event.type == 'childrenRemoved';
+ var child:INavigatorContent;
+ var removeIndex:int = -1;
+
+ var n:int;
+ var i:int;
+
+ if (isRemoval) {
+ child = ValueEvent(event).value as INavigatorContent;
+ if (child) {
+ tabDP = (tabBar as TabBar).dataProvider as Array;
+ n = tabDP.length;
+ for (i = 0; i < n; i++)
+ {
+ var item:Object = tabDP[i];
+ if (item.label == child.label) {
+ removeIndex = i;
+ break;
+ }
+ }
+ }
+ }
tabDP = [];
- var n:int = contentArea.numElements;
- for (var i:int = 0; i < n; i++)
+ n = contentArea.numElements;
+ for (i = 0; i < n; i++)
{
- var child:INavigatorContent = contentArea.getElementAt(i) as
INavigatorContent;
+ child = contentArea.getElementAt(i) as INavigatorContent;
tabDP.push({ label: child.label});
// run this again if the label changes
- child.addEventListener("labelChanged", childrenAddedHandler);
+ child.addEventListener("labelChanged", childrenChangedHandler);
}
+ var oldIndex:int = (tabBar.model as ISelectionModel).selectedIndex;
(tabBar as TabBar).dataProvider = tabDP;
- if ((tabBar.model as ISelectionModel).selectedIndex == -1 && n > 0)
+
+ if (oldIndex == -1 && n > 0)
{
(tabBar.model as ISelectionModel).selectedIndex = 0;
var tabNavigator:TabNavigator = _strand as TabNavigator;
@@ -182,6 +208,15 @@ public class TabNavigatorView extends GroupView
{
tabNavigator.selectedIndex = 0;
}
+ } else {
+ if (removeIndex != -1 ) {
+ var tabNavigator:TabNavigator = _strand as TabNavigator;
+ if (removeIndex == tabDP.length) removeIndex--;
+ if (tabNavigator)
+ {
+ tabNavigator.selectedIndex = removeIndex;
+ }
+ }
}
}