Hi Everyone,

I'm trying to dynamically create dragable TitleWindows with
ControlBars and the ControlBars are not showing up. At this point I am
adding a label to the control bar. Eventually it will be an image.

Thanks in Advance!

Here's the code:

<?xml version="1.0" encoding="utf-8"?>
<core:DashboardModuleBase
        xmlns:mx="http://www.adobe.com/2006/mxml";
        xmlns:core="com.arc90.dashboard.view.core.*"
        xmlns:arcComps="com.arc90.flexlib.controls.*"
        xmlns:comps="com.arc90.dashboard.view.components.*" 
        layout="absolute"
        creationComplete="facade.startup(this)">
        
        <mx:Script>
                <![CDATA[
                        import mx.controls.Button;
                        import mx.containers.ControlBar;
                        
                        import com.arc90.dashboard.ApplicationFacade;
                        import mx.events.DragEvent;
                        import mx.events.FlexEvent;
                        import mx.core.DragSource;
                        import mx.managers.DragManager;
                        import mx.containers.TitleWindow;
                        import com.arc90.dashboard.view.components.DragWindow;
                        import mx.events.CloseEvent;
                        import mx.collections.ArrayCollection;
                        import mx.containers.HBox;
                        import mx.controls.Label;
                        import mx.controls.TextInput;
                        
                                
                        [Embed(source="/assets/icons/policyicon.png")]
            [Bindable]
            private var policyWidgetAddImage:Class;
            
            [Embed(source="/assets/icons/reporticon.png")]
            [Bindable]
            private var reportWidgetAddImage:Class;
            
            [Embed(source="/assets/icons/rssicon.png")]
            [Bindable]
            private var rssWidgetAddImage:Class;
            
            private var policyWidgetID:int = -1;
            private var reportWidgetID:int = -1;
            private var rssWidgetID:int = -1;
                        
                        private var policyWidgetsAC:ArrayCollection = new 
ArrayCollection(); 
                        private var reportWidgetsAC:ArrayCollection = new 
ArrayCollection();
                        private var rssWidgetAC:ArrayCollection = new 
ArrayCollection();
                                
                         // Function called by the canvas dragEnter event; 
enables dropping
            private function doDragEnter(event:DragEvent):void 
            {
                DragManager.acceptDragDrop(Canvas(event.target));
            }
            
            // Variables used to hold the mouse pointer's location in
the title bar.
            // Since the mouse pointer can be anywhere in the title
bar, you have to 
            // compensate for it when you drop the panel. 
            public var xOff:Number;
            public var yOff:Number;
            
            // Function called by the Canvas dragDrop event; 
            // Sets the panel's position, 
            // "dropping" it in its new location.
            private function doDragDrop(event:DragEvent):void 
            {
                                // Compensate for the mouse pointer's location 
in the title bar.
                                var tempX:int = event.currentTarget.mouseX - 
xOff;
                                event.dragInitiator.x = tempX;
                                
                                var tempY:int = event.currentTarget.mouseY - 
yOff;
                                event.dragInitiator.y = tempY;
                                
                                // Put the dragged panel on top of all other 
components.
                                
canvas.setChildIndex(TitleWindow(event.dragInitiator),
canvas.numChildren-1);                  
            }
            
            // creates the widgets config view and adds it to the canvas.
            // this should happen in a widget creator file.
                        private function 
addWidgetClickHandler(event:MouseEvent):void{
                      var dw:DragWindow = new DragWindow();
                      var hbox:HBox = new HBox();
                      var label:Label = new Label();
                      var textField:TextInput = new TextInput();
                      var controlBar:ControlBar = new ControlBar();
                      
                      var img:Image = new Image();
                      img.source = rssWidgetAddImage;
                      
                      var lbl:Label = new Label();
                      lbl.text = "some text in the controlbar";
                      
                      controlBar.addChild(lbl);
                      
                      dw.setStyle("paddingLeft","10");
                      dw.setStyle("paddingRight","10");
                      dw.setStyle("paddingTop","10");
                      dw.setStyle("paddingBottom","10");   
                      dw.showCloseButton = true;
                      dw.horizontalScrollPolicy = "off";
                      dw.verticalScrollPolicy = "off";
                      dw.addEventListener(CloseEvent.CLOSE, removeMe);
                      
                      // widget specific config
                          switch(event.currentTarget.id)
                          {
                                        case "imgAddPolicy":
                                                dw.title = "Policy Search";
                                            policyWidgetID = policyWidgetID + 1;
                                            dw.id = policyWidgetID.toString();
                                            dw.width = 200;
                                            dw.height = 90;
                                            label.text = "Policy ID:";// dynamic
                                            textField.width = 90; // widget 
specific            
                                                break;
                                                
                                        case "imgAddReport":
                                                dw.title = "Report Search";
                                            reportWidgetID = reportWidgetID + 1;
                                            dw.id = reportWidgetID.toString();
                                            dw.width = 300;
                                            dw.height = 90;
                                            label.text = "Report URL:";// 
dynamic
                                            textField.width = 150; // widget 
specific
                                                break;
                                                
                                        case "imgAddRSS":
                                                dw.title = "RSS Feed";
                                            rssWidgetID = rssWidgetID + 1;
                                            dw.id = rssWidgetID.toString();
                                            dw.width = 300;
                                            dw.height = 90;
                                            label.text = "RSS Feed URL:";// 
dynamic
                                            textField.width = 150; // widget 
specific
                                                break;                          
                          }                   
                      
                      // add children to the hbox
                      hbox.addChild(label); // add label to the hbox
                      hbox.addChild(textField);// add text field to hbox
                      
                      // add children to the component
                      dw.addChild(hbox);// add hbox to display window 
(titleWindow
called dw)
                     
//dw.addEventListener(FlexEvent.CREATION_COMPLETE,onCompleteAddControlBar);
                      controlBar.percentWidth = 100;
                      
                      hbox.addChildAt(controlBar,dw.numChildren+1);
                        
                      dw.createComponentsFromDescriptors();
                     // dw.percentHeight = 100;
                      
                      // position component
                      var canvasHalfWidth:int =  canvas.width/2;
                      var widgetHalfWidth:int = dw.width/2;
                      dw.x = canvasHalfWidth - widgetHalfWidth;
                      canvas.addChild(dw);// add title window to canvas         
        
                          
                                                //textField.text = dw.id;// 
displays id in text box ** take out
                        }
                        
                        
                        private function removeMe(event:CloseEvent):void{       
        
                        canvas.removeChild(event.currentTarget as 
DisplayObject);
                    }
                    
                    // Creation complete handler for each panel to add the 
            // mouseMove event handler to the title bar. 
            // Clicking the mouse button, then moving the mouse on the
title bar (myTitleBar as exposed through DragWindow)
            // initiates the d&d operation. 
            private function myPanelCCHandler(event:Event):void 
            {
                
            
event.currentTarget.myTitleBar.addEventListener(MouseEvent.MOUSE_DOWN,
tbMouseMoveHandler);
            }
            
                        // Drag initiator event handler for
            // the title bar's mouseMove event.
            private function tbMouseMoveHandler(event:MouseEvent):void 
            {
                var
dragInitiator:TitleWindow=TitleWindow(event.currentTarget.parent);
                var ds:DragSource = new DragSource();
                ds.addData(event.currentTarget.parent, 'titleWindow'); 
                
                    // Update the xOff and yOff variables to show the
                // current mouse location in the Panel.  
                xOff = event.currentTarget.mouseX;
                yOff = event.currentTarget.mouseY;
                
                // Initiate d&d. 
                DragManager.doDrag(dragInitiator, ds, event);        
           
            } 
                        

                ]]>
        </mx:Script>
                
        <!-- view components here -->
        <mx:VBox id="dashboardVBox" width="100%" height="100%" >
                
                <arcComps:Banner id="myBanner" 
                        minHeight="40"
                        message="testing the banner"
                        backgroundColor="#FCA702" 
                        width="100%" visible="true" cornerRadius="10"/>
                        
                <mx:Canvas id="canvas" 
                        width="100%" height="100%"
                        dragEnter="doDragEnter(event);" 
                dragDrop="doDragDrop(event);">
                </mx:Canvas>
                
                <!-- add fisheye component -->
                <mx:HBox id="widgetBox" 
                        visible="true" 
                        horizontalGap="20" 
                        width="100%" 
                        borderColor="#ffcc00" borderStyle="solid" 
borderThickness="2" 
                        backgroundColor="#FFCC00" backgroundAlpha="0.3"
                        paddingBottom="5" paddingTop="10" paddingLeft="5" 
paddingRight="5">
                        <mx:Spacer width="100%"/>
                        <mx:Image id="imgAddPolicy" 
source="{policyWidgetAddImage}"
width="64" height="64" click="addWidgetClickHandler(event)"/>
                        <mx:Image id="imgAddReport" 
source="{reportWidgetAddImage}"
width="64" height="64" click="addWidgetClickHandler(event)"/>
                        <mx:Image id="imgAddRSS" source="{rssWidgetAddImage}"
click="addWidgetClickHandler(event)"/>
                        <mx:Spacer width="100%"/>
                </mx:HBox>
                        
        </mx:VBox>

        
</core:DashboardModuleBase>


DragWindow.as

package com.arc90.dashboard.view.components
{

        import flash.events.Event;
        
        import mx.containers.ControlBar;
        import mx.containers.TitleWindow;
        import mx.core.UIComponent;
        import mx.events.FlexEvent;

        public class DragWindow extends TitleWindow
        {
                // Add the creationCOmplete event handler.
                public function DragWindow()
                {
                        super();
                        isPopUp = true;
                        addEventListener(FlexEvent.CREATION_COMPLETE, 
creationCompleteHandler);
                }
                
                // Expose the title bar property for draggin and dropping.
                // can refer to myTitleBar outside of this file.
                [Bindable]
                public var myTitleBar:UIComponent;
                
                                        
                private function creationCompleteHandler(event:Event):void
                {
                        myTitleBar = titleBar;
                }

        }
}
 

Reply via email to