You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by al...@apache.org on 2018/05/15 07:17:24 UTC

[royale-asjs] branch feature/MXRoyale updated: PopUpAnchor.as Added

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

alinakazi pushed a commit to branch feature/MXRoyale
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/feature/MXRoyale by this push:
     new a38125e  PopUpAnchor.as Added
a38125e is described below

commit a38125e47b6ccb05db5b6574c9fc20f2bdca31ad
Author: alinakazi <AL...@GMAIL.COM>
AuthorDate: Tue May 15 00:17:21 2018 -0700

    PopUpAnchor.as Added
---
 .../main/royale/spark/components/PopUpAnchor.as    | 652 +++++++++++++++++++++
 1 file changed, 652 insertions(+)

diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/PopUpAnchor.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/PopUpAnchor.as
new file mode 100644
index 0000000..21add0b
--- /dev/null
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/PopUpAnchor.as
@@ -0,0 +1,652 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 spark.components
+{
+/* 
+import flash.display.DisplayObject;
+import flash.events.Event;
+import flash.geom.Matrix;
+import flash.geom.Point;
+import flash.geom.Rectangle; */
+
+import mx.core.IFlexDisplayObject;
+import mx.core.IUIComponent;
+//import mx.core.LayoutDirection;
+import mx.core.UIComponent;
+import mx.core.mx_internal;
+//import mx.managers.PopUpManager;
+import mx.styles.ISimpleStyleClient;
+//import mx.utils.MatrixUtil;
+//import mx.utils.PopUpUtil;
+import org.apache.royale.events.Event;
+
+use namespace mx_internal;
+
+[DefaultProperty("popUp")]
+
+/**
+ *  The PopUpAnchor component is used to position a control that pops up
+ *  or drops down, such as a DropDownList component, in layout. Because a popup or drop-down 
+ *  control is added to the display list by the PopUpManager, it doesn't normally 
+ *  participate in layout. The PopUpAnchor component is a UIComponent that is added to a 
+ *  container and is laid out. It is then responsible for sizing and 
+ *  positioning the popup or drop-down control relative to itself. 
+ *  It has no visual appearance.
+ *
+ *  <p>The PopUpAnchor control has the following default characteristics:</p>
+ *     <table class="innertable">
+ *        <tr>
+ *           <th>Characteristic</th>
+ *           <th>Description</th>
+ *        </tr>
+ *        <tr>
+ *           <td>Default size</td>
+ *           <td>0</td>
+ *        </tr>
+ *        <tr>
+ *           <td>Minimum size</td>
+ *           <td>0</td>
+ *        </tr>
+ *        <tr>
+ *           <td>Maximum size</td>
+ *           <td>10000 pixels wide and 10000 pixels high</td>
+ *        </tr>
+ *     </table>
+ *  
+ *  @mxml
+ *
+ *  <p>The <code>&lt;s:PopUpAnchor&gt;</code> tag inherits all of the tag 
+ *  attributes of its superclass and adds the following tag attributes:</p>
+ *
+ *  <pre>
+ *  &lt;s:PopUpAnchor
+ * 
+ *    <strong>Properties</strong>
+ *    displayPopUp="false"
+ *    popUp=""
+ *    popUpHeightMatchesAnchorHeight="false"
+ *    popUpPosition="topLeft"
+ *    popUpWidthMatchesAnchorWidth="false"
+ *  /&gt;
+ *  </pre>
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 1.5
+ *  @productversion Royale 0.9.4
+ *
+ *  @includeExample examples/PopUpAnchorExample.mxml
+ */ 
+public class PopUpAnchor extends UIComponent
+{
+    
+    /**
+     *  Constructor
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+      *  @playerversion AIR 1.5
+      *  @productversion Royale 0.9.4
+      */
+    public function PopUpAnchor()
+    {
+      //  addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
+      //  addEventListener(Event.REMOVED_FROM_STAGE, removedFromStageHandler);
+    }
+    
+    /* private var popUpWidth:Number = 0;
+    private var popUpHeight:Number = 0;
+    
+    private var popUpIsDisplayed:Boolean = false;
+    private var addedToStage:Boolean = false;
+    
+    private var popUpSizeCaptured:Boolean = false;
+    
+    private static var decomposition:Vector.<Number> = new <Number>[0,0,0,0,0]; */
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+    
+    //----------------------------------
+    //  popUpHeightMatchesAnchorHeight
+    //----------------------------------
+    
+  //  private var _popUpHeightMatchesAnchorHeight:Boolean = false;
+    
+    /**
+     *  If <code>true</code>, the height of the <code>popUp</code> control is set 
+     *  to the value of the PopUpAnchor's height.
+     * 
+     *  @default false
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Royale 0.9.4
+     */ 
+    /* public function set popUpHeightMatchesAnchorHeight(value:Boolean):void
+    {
+        if (_popUpHeightMatchesAnchorHeight == value)
+            return;
+            
+        _popUpHeightMatchesAnchorHeight = value;
+        
+        invalidateDisplayList();
+    } */
+    
+    /**
+     *  @private
+     */
+   /*  public function get popUpHeightMatchesAnchorHeight():Boolean
+    {
+        return _popUpHeightMatchesAnchorHeight;
+    } */
+    
+    //----------------------------------
+    //  popUpWidthMatchesAnchorWidth
+    //----------------------------------
+    
+    private var _popUpWidthMatchesAnchorWidth:Boolean = false;
+    
+    /**
+     *  If <code>true</code>, the width of the <code>popUp</code> control 
+     *  is set to the value of the PopUpAnchor's width.
+     * 
+     *  @default false
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Royale 0.9.4
+     */ 
+    public function set popUpWidthMatchesAnchorWidth(value:Boolean):void
+    {
+        if (_popUpWidthMatchesAnchorWidth == value)
+            return;
+            
+        _popUpWidthMatchesAnchorWidth = value;
+        
+        invalidateDisplayList();
+    }
+    
+    /**
+     *  @private
+     */
+    public function get popUpWidthMatchesAnchorWidth():Boolean
+    {
+        return _popUpWidthMatchesAnchorWidth;
+    }
+
+    //----------------------------------
+    //  displayPopUp
+    //----------------------------------
+    
+    private var _displayPopUp:Boolean = false;
+    
+    
+    /**
+     *  If <code>true</code>, adds the <code>popUp</code> control to the PopUpManager. 
+     *  If <code>false</code>, it removes the control.  
+     *  
+     *  @default false
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Royale 0.9.4
+     */
+    public function set displayPopUp(value:Boolean):void
+    {
+        if (_displayPopUp == value)
+            return;
+            
+        _displayPopUp = value;
+        //addOrRemovePopUp();
+    }
+    
+    /**
+     *  @private
+     */
+    public function get displayPopUp():Boolean
+    {
+        return _displayPopUp;
+    }
+
+
+    
+    //----------------------------------
+    //  popUp
+    //----------------------------------
+    
+    private var _popUp:IFlexDisplayObject;
+    
+    [Bindable ("popUpChanged")]
+    
+    /**
+     *  The IFlexDisplayObject to add to the PopUpManager when the PopUpAnchor is opened. 
+     *  If the <code>popUp</code> control implements IFocusManagerContainer, the 
+     *  <code>popUp</code> control will have its
+     *  own FocusManager. If the user uses the Tab key to navigate between
+     *  controls, only the controls in the <code>popUp</code> control are accessed. 
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Royale 0.9.4
+     */ 
+    public function set popUp(value:IFlexDisplayObject):void
+    {
+        if (_popUp == value)
+            return;
+            
+        _popUp = value;
+                
+       /*  if (_popUp is ISimpleStyleClient)
+            ISimpleStyleClient(_popUp).styleName = this;
+             */
+        dispatchEvent(new Event("popUpChanged"));
+    }
+    
+    /**
+     *  @private
+     */
+    public function get popUp():IFlexDisplayObject 
+    { 
+        return _popUp 
+    }
+    
+    //----------------------------------
+    //  popUpPosition
+    //----------------------------------
+    
+    private var _popUpPosition:String = "topLeft" //PopUpPosition.TOP_LEFT;
+    
+   // [Inspectable(category="General", enumeration="left,right,above,below,center,topLeft", defaultValue="topLeft")]
+    
+    /**
+     *  Position of the <code>popUp</code> control when it is opened, relative
+     *  to the PopUpAnchor component.
+     *  Possible values are <code>"left", "right", "above", "below", "center",</code>
+     *  and <code>"topLeft"</code>.
+     * 
+     *   
+     *  @default PopUpPosition.TOP_LEFT
+     * 
+     *  @see spark.components.PopUpPosition
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Royale 0.9.4
+     */ 
+    
+    public function set popUpPosition(value:String):void
+    {
+        if (_popUpPosition == value)
+            return;
+            
+        _popUpPosition = value;
+        invalidateDisplayList();    
+    }
+    
+    public function get popUpPosition():String
+    {
+        return _popUpPosition;
+    }
+        
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private 
+     */
+    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        super.updateDisplayList(unscaledWidth, unscaledHeight);                
+      //  applyPopUpTransform(unscaledWidth, unscaledHeight);            
+    }
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Public Methods
+    //
+    //--------------------------------------------------------------------------   
+
+    /* private var _isModal:Boolean = false;
+
+    [Inspectable(category="General", defaultValue="false")] */
+    /**
+     *  Flag indicating whether the popup should be modal.
+     *  A modal container takes all keyboard and mouse input until it is closed.
+     *  A non-modal container allows other components to accept input while the pop-up window is open.
+     *
+     *  @default false
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Royale 0.9.4.12
+     */
+    /* public function get isModal():Boolean
+    {
+        return _isModal;
+    }
+
+    public function set isModal(value:Boolean):void
+    {
+        _isModal = value;
+    } */
+
+    /**
+     *  Updates the <code>popUp</code> control's transform matrix. Typically, 
+     *  you would call this function while performing an effect on the PopUpAnchor. 
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Royale 0.9.4
+     */
+    /* public function updatePopUpTransform():void
+    {
+        applyPopUpTransform(width, height);
+    } */
+    
+    /**
+     *  Called when the <code>popUp</code> control is positioned, when it is displayed,
+     *  or when <code>updatePopUpTransform()</code> is called. Override this function to 
+     *  alter the position of the <code>popUp</code> control.  
+     * 
+     *  @return The absolute position of the <code>popUp</code> control in the global coordinate system.  
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Royale 0.9.4
+     */
+    /* protected function calculatePopUpPosition():Point
+    {
+        // This implementation doesn't handle rotation
+        var sandboxRoot:DisplayObject = systemManager.getSandboxRoot();
+        var matrix:Matrix = MatrixUtil.getConcatenatedMatrix(this, sandboxRoot);
+             
+        var regPoint:Point = new Point();
+        
+        if (!matrix)
+            return regPoint;
+        
+        var popUpBounds:Rectangle = new Rectangle(); 
+        var popUpAsDisplayObject:DisplayObject = popUp as DisplayObject;
+        
+        determinePosition(popUpPosition, popUpAsDisplayObject.width, popUpAsDisplayObject.height,
+                          matrix, regPoint, popUpBounds);
+        
+        var adjustedPosition:String;
+        
+        // Position the popUp in the opposite direction if it 
+        // does not fit on the screen. 
+        if (screen)
+        {
+            switch(popUpPosition)
+            {
+                case PopUpPosition.BELOW :
+                    if (popUpBounds.bottom > screen.bottom)
+                        adjustedPosition = PopUpPosition.ABOVE; 
+                    break;
+                case PopUpPosition.ABOVE :
+                    if (popUpBounds.top < screen.top)
+                        adjustedPosition = PopUpPosition.BELOW; 
+                    break;
+                case PopUpPosition.LEFT :
+                    if (popUpBounds.left < screen.left)
+                        adjustedPosition = PopUpPosition.RIGHT; 
+                    break;
+                case PopUpPosition.RIGHT :
+                    if (popUpBounds.right > screen.right)
+                        adjustedPosition = PopUpPosition.LEFT; 
+                    break;
+            }
+        }
+        
+        // Get the new registration point based on the adjusted position
+        if (adjustedPosition != null)
+        {
+            var adjustedRegPoint:Point = new Point();
+            var adjustedBounds:Rectangle = new Rectangle(); 
+            determinePosition(adjustedPosition, popUpAsDisplayObject.width, 
+                              popUpAsDisplayObject.height,
+                              matrix, adjustedRegPoint, adjustedBounds);
+         
+            if (screen)
+            {
+                // If we adjusted the position but the popUp still doesn't fit, 
+                // then revert to the original position. 
+                switch(adjustedPosition)
+                {
+                   case PopUpPosition.BELOW :
+                        if (adjustedBounds.bottom > screen.bottom)
+                            adjustedPosition = null; 
+                        break;
+                    case PopUpPosition.ABOVE :
+                        if (adjustedBounds.top < screen.top)
+                            adjustedPosition = null; 
+                        break;
+                    case PopUpPosition.LEFT :
+                        if (adjustedBounds.left < screen.left)
+                            adjustedPosition = null; 
+                        break;
+                    case PopUpPosition.RIGHT :
+                        if (adjustedBounds.right > screen.right)
+                            adjustedPosition = null;  
+                        break;
+                }    
+            }
+            
+            if (adjustedPosition != null)
+            {
+                regPoint = adjustedRegPoint;
+                popUpBounds = adjustedBounds;
+            }
+        }
+        
+        MatrixUtil.decomposeMatrix(decomposition, matrix, 0, 0);
+        var concatScaleX:Number = decomposition[3];
+        var concatScaleY:Number = decomposition[4]; 
+        
+        // If the popUp still doesn't fit, then nudge it
+        // so it is completely on the screen. Make sure to include scale.
+
+        if (popUpBounds.top < screen.top)
+            regPoint.y += (screen.top - popUpBounds.top) / concatScaleY;
+        else if (popUpBounds.bottom > screen.bottom)
+            regPoint.y -= (popUpBounds.bottom - screen.bottom) / concatScaleY;
+        
+        if (popUpBounds.left < screen.left)
+            regPoint.x += (screen.left - popUpBounds.left) / concatScaleX;    
+        else if (popUpBounds.right > screen.right)
+            regPoint.x -= (popUpBounds.right - screen.right) / concatScaleX;
+        
+        // Compute the stage coordinates of the upper,left corner of the PopUp, taking
+        // the postTransformOffsets - which include mirroring - into account.
+        // If we're mirroring, then the implicit assumption that x=left will fail,
+        // so we compensate here.
+        
+        if (layoutDirection == LayoutDirection.RTL)
+            regPoint.x += popUpBounds.width;
+        return MatrixUtil.getConcatenatedComputedMatrix(this, sandboxRoot).transformPoint(regPoint);
+    } */
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Private and protected methods
+    //
+    //-------------------------------------------------------------------------- 
+
+    /**
+     *  @private
+     */
+    /* protected function addOrRemovePopUp():void
+    {
+        if (!addedToStage)
+            return;
+        
+        if (popUp == null)
+            return;
+                        
+        if (DisplayObject(popUp).parent == null && displayPopUp)
+        {
+            PopUpManager.addPopUp(popUp,this,_isModal);
+			if (popUp is IUIComponent)
+				IUIComponent(popUp).owner = this;
+            popUpIsDisplayed = true;
+            if (popUp is UIComponent && !popUpSizeCaptured)
+            {
+                popUpWidth = UIComponent(popUp).explicitWidth;
+                popUpHeight = UIComponent(popUp).explicitHeight;
+                UIComponent(popUp).validateNow();
+                popUpSizeCaptured = true;
+            }   
+            
+            applyPopUpTransform(width, height);
+        }
+        else if (DisplayObject(popUp).parent != null && displayPopUp == false)
+        {
+            removeAndResetPopUp();
+        }
+    } */
+    
+    /**
+     *  @private
+     */
+   /*  private function removeAndResetPopUp():void
+    {
+        PopUpManager.removePopUp(popUp);
+        popUpIsDisplayed = false;
+    } */
+
+    /**
+     *  @private
+     */
+    /* protected function determinePosition(placement:String, popUpWidth:Number, popUpHeight:Number,
+                                           matrix:Matrix, registrationPoint:Point, bounds:Rectangle):void
+    {
+        switch(placement)
+        {
+            case PopUpPosition.BELOW:
+                registrationPoint.x = 0;
+                registrationPoint.y = unscaledHeight;
+                break;
+            case PopUpPosition.ABOVE:
+                registrationPoint.x = 0;
+                registrationPoint.y = -popUpHeight;
+                break;
+            case PopUpPosition.LEFT:
+                registrationPoint.x = -popUpWidth;
+                registrationPoint.y = 0;
+                break;
+            case PopUpPosition.RIGHT:
+                registrationPoint.x = unscaledWidth;
+                registrationPoint.y = 0;
+                break;            
+            case PopUpPosition.CENTER:
+                registrationPoint.x = (unscaledWidth - popUpWidth) / 2;
+                registrationPoint.y = (unscaledHeight - popUpHeight) / 2;
+                break;            
+            case PopUpPosition.TOP_LEFT:
+                // already 0,0
+                break;
+        }
+        
+        var popUpAsDisplayObject:DisplayObject = popUp as DisplayObject;
+        
+        var topLeft:Point = registrationPoint.clone();
+        var size:Point = MatrixUtil.transformBounds(popUpAsDisplayObject.width, popUpAsDisplayObject.height, matrix, topLeft);
+        bounds.left = topLeft.x;
+        bounds.top = topLeft.y;
+        bounds.width = size.x;
+        bounds.height = size.y;
+    }
+ */
+    /**
+     *  @private
+     */
+    /* protected function applyPopUpTransform(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        if (!popUpIsDisplayed)
+            return;
+        
+        // Set the dimensions explicitly because UIComponents always set themselves to their
+        // measured / explicit dimensions if they are parented by the SystemManager. 
+        if (popUp is UIComponent)
+        {
+            if (popUpWidthMatchesAnchorWidth)
+                UIComponent(popUp).width = unscaledWidth;
+            else
+                UIComponent(popUp).explicitWidth = popUpWidth;
+            
+            if (popUpHeightMatchesAnchorHeight)
+                UIComponent(popUp).height = unscaledHeight;
+            else
+                UIComponent(popUp).explicitHeight = popUpHeight;
+        }
+        else
+        {
+            var w:Number = popUpWidthMatchesAnchorWidth ? unscaledWidth : popUp.measuredWidth;
+            var h:Number = popUpHeightMatchesAnchorHeight ? unscaledHeight : popUp.measuredHeight;
+            popUp.setActualSize(w, h);
+        }
+        
+        var popUpPoint:Point = calculatePopUpPosition();
+        PopUpUtil.applyPopUpTransform(this, $transform.concatenatedColorTransform, systemManager, popUp, popUpPoint);
+    } */
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Event Handlers
+    //
+    //-------------------------------------------------------------------------- 
+    
+    /**
+     *  @private 
+     */ 
+    /* private function addedToStageHandler(event:Event):void
+    {
+        addedToStage = true;
+        addOrRemovePopUp();    
+    } */
+    
+    /**
+     *  @private 
+     */ 
+    /* private function removedFromStageHandler(event:Event):void
+    {
+        if (popUp != null && DisplayObject(popUp).parent != null)
+            removeAndResetPopUp();
+        
+        addedToStage = false;
+    } */
+    
+}
+}

-- 
To stop receiving notification emails like this one, please contact
alinakazi@apache.org.