This is an automated email from the ASF dual-hosted git repository.

carlosrovira 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 73e894b  New Jewel Wizard component
73e894b is described below

commit 73e894be6aad858ecadc81937ef2e98a06f947c4
Author: Carlos Rovira <carlosrov...@apache.org>
AuthorDate: Wed Nov 14 20:26:03 2018 +0100

    New Jewel Wizard component
---
 .../projects/Jewel/src/main/resources/defaults.css |  28 ++
 .../Jewel/src/main/resources/jewel-manifest.xml    |   6 +-
 .../projects/Jewel/src/main/royale/JewelClasses.as |  11 +
 .../main/royale/org/apache/royale/jewel/Wizard.as  | 238 +++++++++++++
 .../org/apache/royale/jewel/WizardContent.as       | 100 ++++++
 .../royale/org/apache/royale/jewel/WizardPage.as   | 183 ++++++++++
 .../jewel/beads/controllers/WizardController.as    | 174 +++++++++
 .../royale/jewel/beads/layouts/WizardLayout.as     |  51 +++
 .../royale/jewel/beads/models/WizardModel.as       | 111 ++++++
 .../apache/royale/jewel/beads/models/WizardStep.as | 183 ++++++++++
 .../apache/royale/jewel/beads/views/WizardView.as  | 388 +++++++++++++++++++++
 .../supportClasses/wizard/WizardLayoutProxy.as     | 237 +++++++++++++
 .../Jewel/src/main/sass/components/_wizard.sass    |  71 ++++
 .../projects/Jewel/src/main/sass/defaults.sass     |   1 +
 14 files changed, 1781 insertions(+), 1 deletion(-)

diff --git a/frameworks/projects/Jewel/src/main/resources/defaults.css 
b/frameworks/projects/Jewel/src/main/resources/defaults.css
index dfbee22..d4f5076 100644
--- a/frameworks/projects/Jewel/src/main/resources/defaults.css
+++ b/frameworks/projects/Jewel/src/main/resources/defaults.css
@@ -3664,6 +3664,34 @@ j|TopAppBarTitle {
   IBeadLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.NullLayout");
 }
 
+.jewel .wizard {
+  width: 100%;
+}
+.jewel .next {
+  flex: 1 1 0;
+}
+.jewel .previous {
+  flex: 1 1 0;
+}
+.jewel .wizardcontent {
+  flex-grow: 100;
+}
+
+j|Wizard {
+  IBeadView: ClassReference("org.apache.royale.jewel.beads.views.WizardView");
+  IBeadController: 
ClassReference("org.apache.royale.jewel.beads.controllers.WizardController");
+  IBeadModel: 
ClassReference("org.apache.royale.jewel.beads.models.WizardModel");
+  IWizardLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.WizardLayout");
+  IWizardContentArea: ClassReference("org.apache.royale.jewel.WizardContent");
+}
+
+j|WizardContent {
+  IBeadView: ClassReference("org.apache.royale.html.beads.ContainerView");
+  IBeadLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.NullLayout");
+  IViewport: ClassReference("org.apache.royale.jewel.supportClasses.Viewport");
+  IViewportModel: 
ClassReference("org.apache.royale.html.beads.models.ViewportModel");
+}
+
 .jewel.main {
   width: 100%;
   min-height: 100%;
diff --git a/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml 
b/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
index ca63bd8..e7bc4bb 100644
--- a/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
+++ b/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
@@ -169,7 +169,11 @@
     <component id="RemoveAllItemRendererForArrayListData" 
class="org.apache.royale.jewel.beads.itemRenderers.RemoveAllItemRendererForArrayListData"
 />
     
     <!-- <component id="JewelLabelViewBead" 
class="org.apache.royale.jewel.beads.views.JewelLabelViewBead"/> -->
-    
+
+    <component id="Wizard" class="org.apache.royale.jewel.Wizard"/>
+    <component id="WizardContent" 
class="org.apache.royale.jewel.WizardContent"/>
+    <component id="WizardPage" class="org.apache.royale.jewel.WizardPage"/>
+    <component id="WizardStep" 
class="org.apache.royale.jewel.beads.models.WizardStep"/>
 
      <component id="ResponsiveSizeMonitor" 
class="org.apache.royale.jewel.debugger.ResponsiveSizeMonitor"/>
 
diff --git a/frameworks/projects/Jewel/src/main/royale/JewelClasses.as 
b/frameworks/projects/Jewel/src/main/royale/JewelClasses.as
index ec20445..8d0b6ff 100644
--- a/frameworks/projects/Jewel/src/main/royale/JewelClasses.as
+++ b/frameworks/projects/Jewel/src/main/royale/JewelClasses.as
@@ -104,6 +104,17 @@ package
         import 
org.apache.royale.jewel.supportClasses.util.positionInsideBoundingClientRect; 
positionInsideBoundingClientRect;
 
         //import org.apache.royale.jewel.beads.views.JewelLabelViewBead; 
JewelLabelViewBead;
+
+        import org.apache.royale.jewel.beads.views.WizardView; WizardView;
+        
+        import 
org.apache.royale.jewel.supportClasses.wizard.WizardLayoutProxy; 
WizardLayoutProxy;
+
+        import org.apache.royale.jewel.beads.controllers.WizardController; 
WizardController;
+
+        import org.apache.royale.jewel.beads.models.WizardModel; WizardModel;
+        import org.apache.royale.jewel.beads.models.WizardStep; WizardStep;
+
+        import org.apache.royale.jewel.beads.layouts.WizardLayout; 
WizardLayout;
     }
 
 }
\ No newline at end of file
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Wizard.as 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Wizard.as
new file mode 100644
index 0000000..4a8b2ef
--- /dev/null
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Wizard.as
@@ -0,0 +1,238 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.jewel
+{
+    import org.apache.royale.core.IChild;
+    import org.apache.royale.core.IContainerBaseStrandChildrenHost;
+    import org.apache.royale.events.Event;
+    import org.apache.royale.jewel.beads.models.WizardModel;
+    import org.apache.royale.jewel.beads.models.WizardStep;
+    import org.apache.royale.jewel.beads.views.WizardView;
+
+       /**
+        *  Indicates that wizard navigates to the previous page.
+        *
+     *  @toplevel
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9.4
+        */
+       [Event(name="goToPreviousStep", type="org.apache.royale.events.Event")]
+
+       /**
+        *  Indicates that wizard navigates to the next page.
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9.4
+        */
+    [Event(name="goToNextStep", type="org.apache.royale.events.Event")]
+
+       /**
+        * 
+        */
+    public class Wizard extends Group implements 
IContainerBaseStrandChildrenHost
+    {
+        /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function Wizard()
+               {
+                       super();
+
+            typeNames = "jewel wizard";
+               }
+
+               public function showPage(id:String):void
+               {
+                       content.showContent(id);
+               }
+
+               /**
+                * @royalesuppresspublicvarwarning
+                */
+        public var previousButton:IconButton = null;
+
+               /**
+                * @royalesuppresspublicvarwarning
+                */
+        public var nextButton:IconButton = null;
+
+               /**
+                * the pages of the wizard
+                */
+               public function get content():WizardContent
+               {
+                       return (view as WizardView).contentArea as 
WizardContent;
+               }
+
+               /**
+                *  the current step or page visualized in this wizard
+                * 
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               [Bindable("change")]
+        public function get currentStep():WizardStep
+               {
+                       return WizardModel(model).currentStep;
+               }
+               /**
+                * @royaleignorecoercion 
org.apache.royale.jewel.beads.models.WizardModel
+                */
+               public function set currentStep(value:WizardStep):void
+               {
+                       WizardModel(model).currentStep = value;
+               }
+
+               /**
+                * @private
+                * @royaleignorecoercion 
org.apache.royale.jewel.beads.views.WizardView
+                * @royaleignorecoercion org.apache.royale.jewel.WizardPage
+                */
+               override public function addElement(c:IChild, 
dispatchEvent:Boolean = true):void
+               {
+                       var wizardView:WizardView = view as WizardView;
+                       wizardView.contentArea.addElement(c, dispatchEvent);
+                       wizardView.contentArea.dispatchEvent(new 
Event("layoutNeeded"));
+
+                       var page:WizardPage = c as WizardPage;
+                       page.step.page = c as WizardPage;
+                       page.addWizardListeners(this);
+               }
+               
+               /**
+                * @private
+                * @royaleignorecoercion 
org.apache.royale.jewel.beads.views.WizardView
+                * @royaleignorecoercion org.apache.royale.jewel.WizardPage
+                */
+               override public function addElementAt(c:IChild, index:int, 
dispatchEvent:Boolean = true):void
+               {
+                       var wizardView:WizardView = view as WizardView;
+                       wizardView.contentArea.addElementAt(c, index, 
dispatchEvent);
+                       wizardView.contentArea.dispatchEvent(new 
Event("layoutNeeded"));
+                       
+                       var page:WizardPage = c as WizardPage;
+                       page.step.page = c as WizardPage;
+                       page.addWizardListeners(this);
+               }
+               
+               /**
+                * @private
+                * @royaleignorecoercion 
org.apache.royale.jewel.beads.views.WizardView
+                * @royaleignorecoercion org.apache.royale.jewel.WizardPage
+                */
+               override public function getElementIndex(c:IChild):int
+               {
+                       var wizardView:WizardView = view as WizardView;
+                       return wizardView.contentArea.getElementIndex(c);
+               }
+               
+               /**
+                * @private
+                * @royaleignorecoercion 
org.apache.royale.jewel.beads.views.WizardView
+                * @royaleignorecoercion org.apache.royale.jewel.WizardPage
+                */
+               override public function removeElement(c:IChild, 
dispatchEvent:Boolean = true):void
+               {
+                       var wizardView:WizardView = view as WizardView;
+                       wizardView.contentArea.removeElement(c, dispatchEvent);
+                       
+                       var page:WizardPage = c as WizardPage;
+                       page.removeWizardListeners(this);
+                       page.step.page = null;
+               }
+               
+               /**
+                * @private
+                * @royaleignorecoercion 
org.apache.royale.jewel.beads.views.WizardView
+                */
+               override public function get numElements():int
+               {
+                       var wizardView:WizardView = view as WizardView;
+                       return wizardView.contentArea.numElements;
+               }
+               
+               /**
+                * @private
+                * @royaleignorecoercion 
org.apache.royale.jewel.beads.views.WizardView
+                */
+               override public function getElementAt(index:int):IChild
+               {
+                       var wizardView:WizardView = view as WizardView;
+                       return wizardView.contentArea.getElementAt(index);
+               }
+
+
+
+               public function $addElement(c:IChild, dispatchEvent:Boolean = 
true):void
+               {
+                       super.addElement(c, dispatchEvent);
+               }
+               
+        /**
+         * @private
+         * @suppress {undefinedNames}
+         * Support strandChildren.
+         */
+        public function $addElementAt(c:IChild, index:int, 
dispatchEvent:Boolean = true):void
+        {
+            super.addElementAt(c, index, dispatchEvent);
+        }
+        
+               public function get $numElements():int
+               {
+                       return super.numElements;
+               }
+               
+               public function $getElementAt(index:int):IChild
+               {
+                       return super.getElementAt(index);
+               }
+               
+        /**
+         * @private
+         * @suppress {undefinedNames}
+         * Support strandChildren.
+         */
+        public function $removeElement(c:IChild, dispatchEvent:Boolean = 
true):void
+        {
+            super.removeElement(c, dispatchEvent);
+        }
+        
+        /**
+         * @private
+         * @suppress {undefinedNames}
+         * Support strandChildren.
+         */
+        public function $getElementIndex(c:IChild):int
+        {
+            return super.getElementIndex(c);
+        }
+    }
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/WizardContent.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/WizardContent.as
new file mode 100644
index 0000000..31521a8
--- /dev/null
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/WizardContent.as
@@ -0,0 +1,100 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.jewel
+{
+    COMPILE::JS
+    {
+        import org.apache.royale.core.WrappedHTMLElement;
+        import org.apache.royale.html.util.addElementToWrapper;
+    }
+       
+       import org.apache.royale.jewel.Container;
+       import org.apache.royale.jewel.supportClasses.IActivable;
+
+       /**
+        *  The ApplicationMainContent class is a Container component capable 
of parenting
+        *  the other organized content that implements IActivable interface
+        *  (i.e, a SectionContent)
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9.4
+        */
+       public class WizardContent extends Container
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function WizardContent()
+               {
+                       super();
+
+            typeNames = "jewel wizardcontent";
+               }
+
+               /**
+                *  shows a concrete content and hides the rest
+                * 
+                *  @param id, the id of the container to show
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+        public function showContent(id:String):void
+        {
+                       try
+                       {
+                               for (var i:int = 0; i < numElements; i++)
+                               {
+                                       var content:IActivable = 
getElementAt(i) as IActivable;
+                                       
+                                       if(content.id == id)
+                                       {
+                                               content.isActive = true;
+                                       }
+                                       else
+                                       {
+                                               content.isActive = false;
+                                       }
+                               }
+                       }
+                       catch (error:Error)
+                       {
+                               throw new Error ("One or more content in 
TabBarContent is not implementing IActivable interface.");     
+                       }
+        }
+
+        /**
+         * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
+         */
+        COMPILE::JS
+        override protected function createElement():WrappedHTMLElement
+        {
+                       return addElementToWrapper(this, 'div');
+        }
+       }
+}
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/WizardPage.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/WizardPage.as
new file mode 100644
index 0000000..2bec885
--- /dev/null
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/WizardPage.as
@@ -0,0 +1,183 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.jewel
+{
+    import org.apache.royale.events.Event;
+    import org.apache.royale.jewel.beads.models.WizardModel;
+    import org.apache.royale.jewel.beads.models.WizardStep;
+
+       /**
+        *  Dispatched When the wizard reach to this page
+        *
+     *  @toplevel
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9.4
+        */
+       [Event(name="enterPage", type="org.apache.royale.events.Event")]
+
+       /**
+        *  Dispatched When the wizard exit this page
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9.4
+        */
+    [Event(name="exitPage", type="org.apache.royale.events.Event")]
+
+       /**
+        * WizardPage is the main class for a page inside the WizardContent
+        */
+    public class WizardPage extends SectionContent
+    {
+        /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function WizardPage()
+               {
+                       super();
+
+            typeNames = "jewel section wizardpage";
+               }
+
+               /**
+                * @royalesuppresspublicvarwarning
+                */
+        public var initialized:Boolean;
+
+               /**
+                * @royalesuppresspublicvarwarning
+                */
+        // public var previousButton:Button;
+
+               /**
+                * @royalesuppresspublicvarwarning
+                */
+        // public var nextButton:Button;
+
+               private var _step:WizardStep;
+               /**
+                *  the step data of this page
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               [Bindable("change")]
+        public function get step():WizardStep
+               {
+                       return _step;
+               }
+               /**
+                * @royaleignorecoercion 
org.apache.royale.jewel.beads.models.WizardModel
+                */
+               public function set step(value:WizardStep):void
+               {
+                       _step = value;
+               }
+
+               /**
+                * Determines whether a view is valid or not
+                *
+                * defaults true if the form has no validation
+                */
+               public function validate():Boolean
+               {
+                       return true;
+               }
+
+               /**
+                * add listeners to wizard events when add this page to the 
wizard
+                */
+               public function addWizardListeners(wizard:Wizard):void
+               {
+                       wizard.addEventListener("goToPreviousStep", 
goToPreviousStepHandler);
+                       wizard.addEventListener("goToNextStep", 
goToNextStepHandler);
+               }
+
+               /**
+                * remove listeners to wizard events when remove this page from 
the wizard
+                */
+               public function removeWizardListeners(wizard:Wizard):void
+               {
+                       wizard.removeEventListener("goToPreviousStep", 
goToPreviousStepHandler);
+                       wizard.removeEventListener("goToNextStep", 
goToNextStepHandler);
+               }
+
+               /**
+                *
+                */
+               protected function goToPreviousStepHandler(event:Event):void
+               {
+                       var model:WizardModel = (event.target as 
Wizard).getBeadByType(WizardModel) as WizardModel;
+                       if(model.currentStep.name == step.name)
+                       {
+                               dispatchEvent(new Event("exitPage"));
+                               exitPage();
+                       }
+                       if(model.currentStep.previousStep == step.name)
+                       {
+                               dispatchEvent(new Event("enterPage"));
+                               enterPage();
+                       }
+               }
+
+               /**
+                * exit page
+                */
+               public function exitPage():void
+               {
+                       // trace("exitPage", step.name);
+               }
+
+               /**
+                *
+                */
+               protected function goToNextStepHandler(event:Event):void
+               {
+                       var model:WizardModel = (event.target as 
Wizard).getBeadByType(WizardModel) as WizardModel;
+                       if(model.currentStep.name == step.name)
+                       {
+                               dispatchEvent(new Event("exitPage"));
+                               exitPage();
+                       }
+                       if(model.currentStep.nextStep == step.name)
+                       {
+                               dispatchEvent(new Event("enterPage"));
+                               enterPage();
+                       }
+               }
+
+               /**
+                * enter page
+                */
+               public function enterPage():void
+               {
+                       // trace("enterPage", step.name);
+               }
+    }
+}
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/WizardController.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/WizardController.as
new file mode 100644
index 0000000..8442688
--- /dev/null
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/WizardController.as
@@ -0,0 +1,174 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.jewel.beads.controllers
+{
+       import org.apache.royale.core.IBead;
+       import org.apache.royale.core.IBeadController;
+       import org.apache.royale.core.IStrand;
+       import org.apache.royale.events.Event;
+       import org.apache.royale.events.MouseEvent;
+       import org.apache.royale.jewel.Wizard;
+       import org.apache.royale.jewel.WizardPage;
+       import org.apache.royale.jewel.beads.models.WizardModel;
+       import org.apache.royale.jewel.beads.views.WizardView;
+       import org.apache.royale.jewel.beads.models.WizardStep;
+       
+    /**
+     *  The WizardController class is the controller for
+     *  org.apache.royale.jewel.Wizard.  Controllers
+     *  watch for events from the interactive portions of a View and
+     *  update the data model or dispatch a semantic event.
+     * 
+     *  This controller watches for the click event in previous/next buttons
+     *  and makes the wizard navigate to the corresponding view
+     *  updates the selection model accordingly.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.9.4
+     */
+       public class WizardController implements IBead, IBeadController
+       {
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.4
+         */
+               public function WizardController()
+               {
+               }
+               
+               /**
+                *  The org.apache.royale.jewel.Wizard component
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               protected var wizard:Wizard;
+               
+        /**
+         *  @copy org.apache.royale.core.IBead#strand
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.4
+         */
+               public function set strand(value:IStrand):void
+               {
+                       wizard = value as Wizard;
+            wizard.addEventListener("initComplete", finishSetUp);
+            
+            model = wizard.getBeadByType(WizardModel) as WizardModel;
+            model.addEventListener("currentStepChange", handleStepChange);
+            
+            view = wizard.getBeadByType(WizardView) as WizardView;
+               }
+
+        /**
+                * @private
+                */
+               protected function handleStepChange(event:Event):void
+               {
+            wizard.showPage(model.currentStep.name);
+               }
+
+        private var model:WizardModel;
+        private var view:WizardView;
+
+        private function finishSetUp(event:Event):void
+        {
+            view.previousButton.addEventListener(MouseEvent.CLICK, 
previousButtonClickHandler);
+            view.nextButton.addEventListener(MouseEvent.CLICK, 
nextButtonClickHandler);
+
+            var n:int = wizard.numElements;
+            for (var i:int = 0; i < n; i++)
+            {
+                var page:WizardPage = wizard.getElementAt(i) as WizardPage;
+                
+                if(page.step.initialPage)
+                {
+                    wizard.currentStep = page.step;
+                    page.enterPage();
+                    break;
+                }
+            }
+        }
+
+        /**
+         * logic to perform when user clicks previous button
+         * We assume previous button is visible and enabled so we have a 
previous step to go
+         * We consider going backwards doesn't require validation
+         */
+        private function previousButtonClickHandler(event:MouseEvent):void
+        {
+            // if(model.currentStep.page.validate())
+            // {
+            var stepToGo:WizardStep = findStep(model.currentStep, true);
+            wizard.dispatchEvent(new Event("goToPreviousStep"));
+            model.currentStep = stepToGo;
+            // }
+        }
+
+        /**
+         * logic to perform when user clicks next button
+         * We assume next button is visible and enabled so we have a next step 
to go
+         * - First validate the data in the actual page
+         * - if valid findStep to go forward
+         */
+        private function nextButtonClickHandler(event:MouseEvent):void
+        {
+            if(model.currentStep.page.validate())
+            {
+                trace("next:", model.currentStep.autoSkip);
+                var stepToGo:WizardStep = findStep(model.currentStep, false);
+                wizard.dispatchEvent(new Event("goToNextStep"));
+                model.currentStep = stepToGo;
+            }
+        }
+
+        /**
+         * Given a step, find a next or previous one taking autoSkip into 
account
+         * autoSkip is only evaluated when going forward.
+         * 
+         * @param step, the step to discover its next
+         * @param previous, if true find the previous step, if false find the 
next step. Defaults to find next step
+         */
+        private function findStep(step:WizardStep, previous:Boolean):WizardStep
+        {
+            var n:int = wizard.numElements;
+            for (var i:int = 0; i < n; i++)
+            {
+                var page:WizardPage = wizard.getElementAt(i) as WizardPage;
+                if(page.step.name == (previous ? step.previousStep : 
step.nextStep))
+                {
+                    return !previous && step.autoSkip ? findStep(page.step, 
previous) : page.step;
+                }
+            }
+            
+            return null;
+        }
+    }
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/WizardLayout.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/WizardLayout.as
new file mode 100644
index 0000000..7c7084c
--- /dev/null
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/WizardLayout.as
@@ -0,0 +1,51 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.jewel.beads.layouts
+{
+    import org.apache.royale.jewel.beads.layouts.HorizontalLayout;
+
+    /**
+     *  The BasicLayout class is a simple layout
+     *  bead.  It takes the set of children and lays them out
+     *  as specified by CSS properties like left, right, top
+     *  and bottom.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.9.4
+     */
+       public class WizardLayout extends HorizontalLayout
+       {
+        /**
+         *  Constructor.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.4
+         */
+               public function WizardLayout()
+               {
+                       super();
+
+            gap = 3;
+               }
+    }
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/WizardModel.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/WizardModel.as
new file mode 100644
index 0000000..0e67d85
--- /dev/null
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/WizardModel.as
@@ -0,0 +1,111 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.jewel.beads.models
+{
+       import org.apache.royale.core.IBeadModel;
+       import org.apache.royale.core.IStrand;
+       import org.apache.royale.events.Event;
+       import org.apache.royale.events.EventDispatcher;
+       
+       /**
+        *  The WizardModel bead class holds the values for a 
org.apache.royale.jewel.Wizard
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9.4
+        */
+       [Bindable]
+       public class WizardModel extends EventDispatcher implements IBeadModel
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function WizardModel()
+               {
+                       super();
+               }
+
+               private var _strand:IStrand;
+               
+        /**
+         *  @copy org.apache.royale.core.IBead#strand
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+               }
+               
+        private var _title:String;
+               
+               /**
+                *  The title string for the org.apache.royale.jewel.Wizard.
+                * 
+                *  @copy org.apache.royale.core.ITitleBarModel#title
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function get title():String
+               {
+                       return _title;
+               }
+               public function set title(value:String):void
+               {
+                       if(value != _title) {
+                               _title = value;
+                               dispatchEvent(new Event('titleChange'));
+                       }
+               }
+               
+               private var _currentStep:WizardStep;
+               
+               /**
+                *  the current step or page visualized in this wizard
+                * 
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function get currentStep():WizardStep
+               {
+                       return _currentStep;
+               }
+               public function set currentStep(value:WizardStep):void
+               {
+                       if(value != _currentStep) {
+                               _currentStep = value;
+                               dispatchEvent(new Event('currentStepChange'));
+                       }
+               }
+       }
+}
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/WizardStep.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/WizardStep.as
new file mode 100644
index 0000000..48e2941
--- /dev/null
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/WizardStep.as
@@ -0,0 +1,183 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.jewel.beads.models
+{
+       import org.apache.royale.jewel.WizardPage;
+
+       /**
+        *  The WizardModel bead class holds the values for a 
org.apache.royale.html.Panel, such as its
+        *  title.
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9.4
+        */
+       [Bindable]
+       public class WizardStep
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function WizardStep(name:String, previousStep:String, 
nextStep:String)
+               {
+                       super();
+                       
+                       this.name = name;
+                       this.previousStep = previousStep;
+                       this.nextStep = nextStep;
+               }
+
+        private var _name:String;
+               
+               /**
+                *  the name of the step
+                * 
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function get name():String
+               {
+                       return _name;
+               }
+               public function set name(value:String):void
+               {
+                       if(value != _name) {
+                               _name = value;
+                       }
+               }
+        
+               private var _previousStep:String = null;
+               
+               /**
+                *  the previous step to go
+                * 
+                *  defaults to null if there's no previous step
+                * 
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function get previousStep():String
+               {
+                       return _previousStep;
+               }
+               public function set previousStep(value:String):void
+               {
+                       if(value != _previousStep) {
+                               _previousStep = value;
+                       }
+               }
+        
+               private var _nextStep:String = null;
+               
+               /**
+                *  the next step to go
+                * 
+                *  defaults to null if there's no next step
+                * 
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function get nextStep():String
+               {
+                       return _nextStep;
+               }
+               public function set nextStep(value:String):void
+               {
+                       if(value != _nextStep) {
+                               _nextStep = value;
+                       }
+               }
+               
+               private var _page:WizardPage;
+               
+               /**
+                *  the page associated with this data
+                * 
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function get page():WizardPage
+               {
+                       return _page;
+               }
+               public function set page(value:WizardPage):void
+               {
+                       if(value != _page) {
+                               _page = value;
+                       }
+               }
+               
+               private var _initialPage:Boolean;
+               
+               /**
+                *  the initial page to show in the wizard
+                * 
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function get initialPage():Boolean
+               {
+                       return _initialPage;
+               }
+               public function set initialPage(value:Boolean):void
+               {
+                       if(value != _initialPage) {
+                               _initialPage = value;
+                       }
+               }
+
+               private var _autoSkip:Boolean = false;
+               /**
+                *  true to skip automatically next step
+                * 
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function get autoSkip():Boolean
+               {
+                       return _autoSkip;
+               }
+               
+               public function set autoSkip(value:Boolean):void
+               {
+                       if(value != _autoSkip)
+                       {
+                               _autoSkip=value;
+                       }
+               }
+    }
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/WizardView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/WizardView.as
new file mode 100644
index 0000000..5055a5d
--- /dev/null
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/WizardView.as
@@ -0,0 +1,388 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.jewel.beads.views
+{
+       COMPILE::SWF {
+               import org.apache.royale.core.SimpleCSSStylesWithFlex;
+       }
+       import org.apache.royale.core.IBeadLayout;
+       import org.apache.royale.core.IBeadView;
+       import org.apache.royale.core.IChild;
+       import org.apache.royale.core.IContainerBaseStrandChildrenHost;
+       import org.apache.royale.core.ILayoutView;
+       import org.apache.royale.core.IStrand;
+       import org.apache.royale.core.IViewport;
+       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.html.beads.GroupView;
+       import org.apache.royale.jewel.Button;
+       import org.apache.royale.jewel.IconButton;
+       import org.apache.royale.jewel.Wizard;
+       import org.apache.royale.jewel.beads.layouts.WizardLayout;
+       import org.apache.royale.jewel.beads.models.WizardModel;
+       import org.apache.royale.jewel.supportClasses.wizard.WizardLayoutProxy;
+
+       /**
+        *  The Wizard class creates the visual elements of the 
org.apache.royale.jewel.Wizard
+        *  component. A Wizard has two org.apache.royale.jewel.Button, and 
content. The buttons 
+        *  navigate pages to previous or next.
+        *
+        *  @viewbead
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9.4
+        */
+       public class WizardView extends GroupView implements IBeadView
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function WizardView()
+               {
+                       super();
+               }
+
+               /**
+                *  The org.apache.royale.jewel.Wizard component
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               protected var wizard:Wizard;
+
+               /**
+                *  The org.apache.royale.jewel.Wizard.previousButton
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+        public function get previousButton():IconButton
+        {
+               return wizard.previousButton;
+        }
+        public function set previousButton(value:IconButton):void
+        {
+               wizard.previousButton = value;
+        }
+
+               /**
+                *  The org.apache.royale.jewel.Wizard.nextButton
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+        public function get nextButton():IconButton
+        {
+               return wizard.nextButton;
+        }
+        public function set nextButton(value:IconButton):void
+        {
+               wizard.nextButton = value;
+        }
+
+               // private var _titleBar:UIBase;
+
+               /**
+                *  The org.apache.royale.jewel.TitleBar component of the
+                *  org.apache.royale.jewel.Wizard.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               // public function get titleBar():UIBase
+               // {
+               //      return _titleBar;
+               // }
+
+        /**
+         *  @private
+         */
+        // public function set titleBar(value:UIBase):void
+        // {
+        //     _titleBar = value;
+        // }
+
+               private var _contentArea:UIBase;
+               /**
+                * The content area of the wizard.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function get contentArea():UIBase
+               {
+                       return _contentArea;
+               }
+               public function set contentArea(value:UIBase):void
+               {
+                       _contentArea = value;
+               }
+
+               private var model:WizardModel;
+
+               /**
+                *  @copy org.apache.royale.core.IBead#strand
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                *  @royaleignorecoercion org.apache.royale.core.UIBase
+                *  @royaleignorecoercion org.apache.royale.core.IBeadLayout
+                *  @royaleignorecoercion org.apache.royale.core.IChild
+                *  @royaleignorecoercion org.apache.royale.core.IViewport
+                *  @royaleignorecoercion 
org.apache.royale.core.IContainerBaseStrandChildrenHost
+                */
+               override public function set strand(value:IStrand):void
+               {
+                       super.strand = value;
+
+            wizard = value as Wizard;
+
+                       model = _strand.getBeadByType(WizardModel) as 
WizardModel;
+                       model.addEventListener("currentStepChange", 
handleStepChange);
+
+                       // Look for a layout and/or viewport bead on the 
wizard's beads list. If one
+                       // is found, pull it off so it will not be added 
permanently
+                       // to the strand.
+            var beads:Array = wizard.beads;
+            var transferLayoutBead:IBeadLayout;
+            var transferViewportBead:IViewport;
+                       if (wizard.beads != null) {
+                               for(var i:int=wizard.beads.length-1; i >= 0; 
i--) {
+                                       if (wizard.beads[i] is IBeadLayout) {
+                                               transferLayoutBead = 
wizard.beads[i] as IBeadLayout;
+                                               wizard.beads.splice(i, 1);
+                                       }
+                                       else if (wizard.beads[i] is IViewport) {
+                                               transferViewportBead = 
wizard.beads[i] as IViewport
+                                               wizard.beads.splice(i, 1);
+                                       }
+                               }
+                       }
+
+            // if (!_titleBar) {
+            //     _titleBar = new TitleBar();
+                       // }
+                       // _titleBar.id = "wizardTitleBar";
+                       // _titleBar.addEventListener("close", handleClose);
+                       // replace the TitleBar's model with the Wizard's model 
(it implements ITitleBarModel) so that
+                       // any changes to values in the Wizard's model that 
correspond values in the TitleBar will
+                       // be picked up automatically by the TitleBar.
+                       // titleBar.model = wizard.model;
+                       // if (titleBar.parent == null) {
+                       //      (_strand as 
IContainerBaseStrandChildrenHost).$addElement(titleBar);
+                       // }
+                       
+                       if (!_contentArea) {
+                var cls:Class = ValuesManager.valuesImpl.getValue(_strand, 
"iWizardContentArea");
+                               _contentArea = new cls() as UIBase;
+                               // _contentArea.id = "content";
+
+                               // add the layout bead to the content area.
+                               if (transferLayoutBead) 
+                    _contentArea.addBead(transferLayoutBead);
+                else
+                    setupContentAreaLayout();
+                
+                               // add the viewport bead to the content area.
+                               if (transferViewportBead) 
+                                       
_contentArea.addBead(transferViewportBead);
+
+                       }
+
+                       COMPILE::SWF {
+                               
IEventDispatcher(value).addEventListener("widthChanged", handleSizeChange);
+                               
IEventDispatcher(value).addEventListener("heightChanged", handleSizeChange);
+                               
IEventDispatcher(value).addEventListener("sizeChanged", handleSizeChange);
+                               
IEventDispatcher(value).addEventListener("childrenAdded", handleChildrenAdded);
+                IEventDispatcher(value).addEventListener("initComplete", 
handleInitComplete);
+                       }
+
+            // super.strand = value;
+
+                       if (previousButton == null) {
+                               previousButton = createButton("previous", 
Button.SECONDARY);
+                               previousButton.className = "previous";
+                       }
+                       if (previousButton != null && previousButton.parent == 
null) {
+                               (_strand as 
IContainerBaseStrandChildrenHost).$addElement(previousButton);
+                       }
+
+                       if (contentArea.parent == null) {
+                               (_strand as 
IContainerBaseStrandChildrenHost).$addElement(contentArea as IChild);
+                       }
+
+                       if (nextButton == null) {
+                               nextButton = createButton("next", 
Button.SECONDARY);
+                               nextButton.className = "next";
+                       }
+                       if (nextButton != null && nextButton.parent == null) {
+                               (_strand as 
IContainerBaseStrandChildrenHost).$addElement(nextButton);
+                       }
+
+            setupLayout();
+        }
+        
+               /**
+                * 
+                */
+               public function createButton(labelText:String = null, 
emphasis:String = null):IconButton
+               {
+                       var b:IconButton = new IconButton();
+                       if(labelText != null)
+                               b.text = labelText;
+                       if(emphasis != null)
+                               b.emphasis = emphasis;
+
+                       return b;
+               }
+
+               /**
+                * @private
+                */
+               protected function handleStepChange(event:Event):void
+               {
+                       stepChangeAction();
+               }
+
+               /**
+                * @private
+                * @royaleignorecoercion 
org.apache.royale.jewel.beads.models.WizardModel
+                */
+               protected function stepChangeAction():void
+               {
+                       previousButton.visible = 
(model.currentStep.previousStep != null);
+                       nextButton.visible = (model.currentStep.nextStep != 
null);
+               }
+               
+        protected function setupContentAreaLayout():void
+        {
+            
+        }
+        
+        protected function setupLayout():void
+        {
+            // COMPILE::JS {
+            //     _titleBar.element.style["flex-grow"] = "0";
+            //     _titleBar.element.style["order"] = "1";
+            // }
+                
+            COMPILE::SWF {
+                _contentArea.percentWidth = 100;
+                
+                if (_contentArea.style == null) {
+                    _contentArea.style = new SimpleCSSStylesWithFlex();
+                }
+                _contentArea.style.flexGrow = 1;
+                _contentArea.style.order = 2;
+            }
+                
+            // COMPILE::SWF {
+            //     _titleBar.percentWidth = 100;
+                
+            //     if (_titleBar.style == null) {
+            //         _titleBar.style = new SimpleCSSStylesWithFlex();
+            //     }
+            //     _titleBar.style.flexGrow = 0;
+            //     _titleBar.style.order = 1;
+            // }
+            
+            // COMPILE::JS {
+            //     _contentArea.element.style["flex-grow"] = "1";
+            //     _contentArea.element.style["order"] = "2";
+            //     _contentArea.element.style["overflow"] = "auto"; // 
temporary
+            // }
+            
+                       // Now give the Wizard its own layout
+                       var layoutBead:WizardLayout = new WizardLayout();
+                       layoutBead.itemsVerticalAlign = "itemsCentered";
+                       _strand.addBead(layoutBead);
+               }
+
+               private var _wizardLayoutProxy:WizardLayoutProxy;
+
+               /**
+                * The sub-element used as the parent of the container's 
elements. This does not
+                * include the chrome elements.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               override public function get contentView():ILayoutView
+               {
+                       // we want to return a proxy for the wizard which will 
have numElements, getElementAt, etc.
+                       // functions that will use the wizard.$numElements, 
wizard.$getElementAt, etc. functions
+                       if (_wizardLayoutProxy == null) {
+                               _wizardLayoutProxy = new 
WizardLayoutProxy(_strand);
+                       }
+                       return _wizardLayoutProxy;
+               }
+
+               override protected function completeSetup():void
+               {
+                       super.completeSetup();
+
+                       performLayout(null);
+               }
+
+               protected function handleSizeChange(event:Event):void
+               {
+                       COMPILE::JS {
+                               // _titleBar.percentWidth = 100;
+                               _contentArea.percentWidth = 100;
+                       }
+
+                       performLayout(event);
+               }
+        
+        private var sawInitComplete:Boolean;
+
+               private function handleChildrenAdded(event:Event):void
+               {
+            if (sawInitComplete || 
+                ((wizard.isHeightSizedToContent() || 
!isNaN(wizard.explicitHeight)) &&
+                    (wizard.isWidthSizedToContent() || 
!isNaN(wizard.explicitWidth))))
+            {
+                       _contentArea.dispatchEvent(new Event("layoutNeeded"));
+                       performLayout(event);
+            }
+               }
+       }
+}
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/wizard/WizardLayoutProxy.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/wizard/WizardLayoutProxy.as
new file mode 100644
index 0000000..a1060d3
--- /dev/null
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/wizard/WizardLayoutProxy.as
@@ -0,0 +1,237 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.jewel.supportClasses.wizard
+{
+       import org.apache.royale.core.UIBase;
+    import org.apache.royale.core.IChild;
+    import org.apache.royale.core.IContainerBaseStrandChildrenHost;
+    import org.apache.royale.core.ILayoutView;
+    import org.apache.royale.core.IParent;
+       import org.apache.royale.events.IEventDispatcher;
+
+       COMPILE::JS {
+               import org.apache.royale.core.WrappedHTMLElement;
+       }
+
+    /**
+     *  The WizardLayoutProxy class is used by Wizard in order for layouts to 
operate
+        *  on the Wizard itself. If Wizard were being used, its numElements, 
getElementAt, etc.
+        *  functions would actually redirect to its Container content. In 
order for a layout
+        *  to work on the Wizard directly (its PreviousButton, NextButton and 
Container),
+        *  this proxy is used which will invoke the Wizard's $numElements, 
$getElementAt, etc
+        *  functions.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.9.4
+     */
+       public class WizardLayoutProxy implements ILayoutView, IParent
+       {
+        /**
+         *  Constructor.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.4
+         */
+               public function WizardLayoutProxy(host:Object)
+               {
+                       super();
+                       _host = host;
+               }
+
+               private var _host:Object;
+
+               public function get host():Object
+               {
+                       return _host;
+               }
+
+               /**
+                *  @royaleignorecoercion org.apache.royale.core.UIBase
+                *  The width of the bounding box.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function get width():Number {
+                       return (host as UIBase).width;
+               }
+
+               /**
+                *  @royaleignorecoercion org.apache.royale.core.UIBase
+                * The height of the bounding box.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function get height():Number {
+                       return (host as UIBase).height;
+               }
+
+               /**
+                *  @royaleignorecoercion 
org.apache.royale.core.IContainerBaseStrandChildrenHost
+                *  The number of elements in the parent.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function get numElements():int
+               {
+                       return (host as 
IContainerBaseStrandChildrenHost).$numElements;
+               }
+
+               /**
+                *  @royaleignorecoercion 
org.apache.royale.core.IContainerBaseStrandChildrenHost
+                *  Get a component from the parent.
+                *
+                *  @param c The index of the subcomponent.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               public function getElementAt(index:int):IChild
+               {
+                       return (host as 
IContainerBaseStrandChildrenHost).$getElementAt(index);
+               }
+
+        /**
+         *  @royaleignorecoercion 
org.apache.royale.core.IContainerBaseStrandChildrenHost
+         *  Gets the index of this subcomponent.
+         * 
+         *  @param c The subcomponent to add.
+         *  @return The index (zero-based).
+         * 
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.4
+         */
+        public function getElementIndex(c:IChild):int
+        {
+            return (host as 
IContainerBaseStrandChildrenHost).$getElementIndex(c);
+        }
+        
+        /**
+         *  @royaleignorecoercion 
org.apache.royale.core.IContainerBaseStrandChildrenHost
+         *  Add a component to the parent.
+         * 
+         *  @param c The subcomponent to add.
+         *  @param dispatchEvent Whether to dispatch an event after adding the 
child.
+         * 
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.4
+         */
+        public function addElement(c:IChild, dispatchEvent:Boolean = true):void
+        {
+            (host as IContainerBaseStrandChildrenHost).$addElement(c);
+        }
+        
+        /**
+         *  @royaleignorecoercion 
org.apache.royale.core.IContainerBaseStrandChildrenHost
+         *  Add a component to the parent.
+         * 
+         *  @param c The subcomponent to add.
+         *  @param index The index where the subcomponent should be added.
+         *  @param dispatchEvent Whether to dispatch an event after adding the 
child.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.4
+         */
+        public function addElementAt(c:IChild, index:int, 
dispatchEvent:Boolean = true):void
+        {
+            return (host as IContainerBaseStrandChildrenHost).$addElementAt(c, 
index);
+        }
+        
+        /**
+         *  @royaleignorecoercion 
org.apache.royale.core.IContainerBaseStrandChildrenHost
+         *  Remove a component from the parent.
+         * 
+         *  @param c The subcomponent to remove.
+         *  @param dispatchEvent Whether to dispatch an event after removing 
the child.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.4
+         */
+        public function removeElement(c:IChild, dispatchEvent:Boolean = 
true):void
+        {
+            return (host as 
IContainerBaseStrandChildrenHost).$removeElement(c);
+        }
+        
+               /**
+                * @royaleignorecoercion org.apache.royale.core.UIBase
+                */
+               COMPILE::JS
+               public function get somethingelse():WrappedHTMLElement
+               {
+                       return (host as UIBase).element;
+               }
+
+               /**
+                * @royaleignorecoercion org.apache.royale.core.UIBase
+                */
+               COMPILE::JS
+               public function get element():WrappedHTMLElement
+               {
+                       return (host as UIBase).element;
+               }
+
+               /**
+                *  @royaleignorecoercion org.apache.royale.core.UIBase
+                *  The display style is used for both visible
+                *  and layout so is managed as a special case.
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               COMPILE::JS
+               public function setDisplayStyleForLayout(value:String):void
+               {
+                       (host as UIBase).setDisplayStyleForLayout(value);
+               }
+               /**
+                * @royaleignorecoercion org.apache.royale.core.UIBase
+                */
+               COMPILE::JS
+               public function get displayStyleForLayout():String
+               {
+                       return (host as UIBase).displayStyleForLayout;
+               }
+
+       }
+}
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_wizard.sass 
b/frameworks/projects/Jewel/src/main/sass/components/_wizard.sass
new file mode 100644
index 0000000..1cc981a
--- /dev/null
+++ b/frameworks/projects/Jewel/src/main/sass/components/_wizard.sass
@@ -0,0 +1,71 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+// Jewel Wizard
+
+// Wizard variables
+
+.jewel
+    .wizard
+        width: 100%
+    .next
+        flex: 1 1 0
+    .previous
+        flex: 1 1 0
+    .wizardcontent
+        flex-grow: 100
+
+j|Wizard
+    IBeadView: ClassReference("org.apache.royale.jewel.beads.views.WizardView")
+    IBeadController: 
ClassReference("org.apache.royale.jewel.beads.controllers.WizardController")
+    // IBeadLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.WizardLayout")
+    IBeadModel: 
ClassReference("org.apache.royale.jewel.beads.models.WizardModel")
+    IWizardLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.WizardLayout")
+    IWizardContentArea: ClassReference("org.apache.royale.jewel.WizardContent")
+
+// j|WizardNavigator
+//     IBeadView: 
ClassReference("org.apache.royale.jewel.beads.views.ListView")
+//     IBeadController: 
ClassReference("org.apache.royale.jewel.beads.controllers.ListSingleSelectionMouseController")
+//     IBeadLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.HorizontalLayout")
+//     IItemRendererClassFactory: 
ClassReference("org.apache.royale.core.ItemRendererClassFactory")
+//     IItemRenderer: 
ClassReference("org.apache.royale.jewel.itemRenderers.WizardButtonItemRenderer")
+//     IViewport: 
ClassReference("org.apache.royale.jewel.supportClasses.scrollbar.ScrollingViewport")
+//     IViewportModel: 
ClassReference("org.apache.royale.html.beads.models.ViewportModel")
+//     IBeadModel: 
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel")
+//     IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.jewel.beads.itemRenderers.DataItemRendererFactoryForCollectionView")
+
+// Jewel WizardButtonItemRenderer
+// $wizardbutton-margin: 0 !default
+// $wizardbutton-padding: 0.68em 1.12em !default
+
+// WizardButtonItemRenderer variables
+// .jewel.wizardbutton
+//     min-height: 48px
+//     margin: $wizardbutton-margin
+//     padding: $wizardbutton-padding
+
+// j|WizardButtonItemRenderer
+//     IBeadController: 
ClassReference("org.apache.royale.jewel.beads.controllers.ItemRendererMouseController")
+
+
+j|WizardContent
+    IBeadView: ClassReference("org.apache.royale.html.beads.ContainerView")
+    IBeadLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.NullLayout")
+    IViewport: 
ClassReference("org.apache.royale.jewel.supportClasses.Viewport")
+    IViewportModel: 
ClassReference("org.apache.royale.html.beads.models.ViewportModel")
diff --git a/frameworks/projects/Jewel/src/main/sass/defaults.sass 
b/frameworks/projects/Jewel/src/main/sass/defaults.sass
index 5c8afd6..a5d047e 100644
--- a/frameworks/projects/Jewel/src/main/sass/defaults.sass
+++ b/frameworks/projects/Jewel/src/main/sass/defaults.sass
@@ -56,4 +56,5 @@
 @import "components/togglebutton"
 @import "components/tooltip"
 @import "components/topappbar"
+@import "components/wizard"
 @import "components/applicationmaincontent"

Reply via email to