7 Replies Latest reply on Apr 25, 2007 9:11 AM by parallaxed

    Center a Title Window PopUp?

    flashgruven
      How do you center a title window popup when it is bigger than it's parent Display Object?

      Is there an easy way to find the root application Display Object??

      Thanks,
      George
        • 1. Re: Center a Title Window PopUp?
          peterent Level 2
          Use PopUpManager.centerPopUp( popup ).
          • 2. Re: Center a Title Window PopUp?
            flashgruven Level 1
            That doesn't work in my situation... perhaps I didn't describe the problem fully.

            The containment hierarchy is:
            mx.Application // 1024 x 768
            mx:HDividedBox // 100% x 100%
            mx:Canvas // 180 wide 100% height
            mx:ViewStack // 100% x 100%
            mx:VBox // 100% x 100%
            mx:ControlBox // <=== this container has a mx:Button click="createPopUp"

            createPopUp()
            {
            var tw = PopUpManager.createPopUp(this.parent.parent.parent , DealershipEditor, true) as TitleWindow; // parentDisplayObject!!!
            PopUpManager.centerPopUp(tw);
            }

            if the first parameter to createPopUp() is this, then the popup centers on ControlBox which isn't wide enough.

            I have found that if I pass in this.parent.parent.parent.parent to createPopUp() as the first parameter, then it works the way I want.

            The problem is... if I ever change the containment hierarchy, then this.parent.parent.parent may not work.

            In other environments we walk up the containment hierarchy until parent is null... but I couldn't get that to work.

            So, my question might be answered best with, is there a way to find the 'root' DisplayObjectContainer (application screen) so that the Title Window popup will center on the full application?

            When I tried using the stage as the first parameter, the popUp never showed.

            • 3. Re: Center a Title Window PopUp?
              robsharma1985

              public var tw:TileWindow;
              createPopUp()
              {
              tw = TitleWindow( PopUpManager.createPopUp(this , DealershipEditor, true)
              tw =TitleWindow( PopUpManager.centerPopUp(tw));
              }
              • 4. Re: Center a Title Window PopUp?
                parallaxed Level 1
                If your overall application is more complicated, and you want pop ups to appear under (possible) multiple instances of other components, you may want to look into Caringorm's ViewHelper/ViewLocator pattern.

                http://labs.adobe.com/wiki/index.php/Cairngorm

                It would be a good move to implement that if things have the potential to get complex.

                A simple solution would be to keep a static variable in your root component that you can reference from other components when creating your centered PopUps.

                So do something like:

                [PopUpRoot.mxml]
                <mx:Application ...[ blarg ]
                initialize="{PopUpRoot.view = this.document}">
                <mx:Script>
                <![CDATA[
                public static var view:Object = null;
                ]]>
                </mx:Script>

                Then when you call PopUpManager.createPopUp() from anywhere in your application, pass it:

                PopUpManager.createPopUp(PopUpRoot.view as DisplayObject,MyPopUpClass);

                FYI, you can call PopUpManger.centrePopUp(this) in the creationComplete event handler of MyPopUpClass.

                HTH
                • 5. Center a Title Window PopUp?
                  flashgruven Level 1
                  Thanks * 5 parallaxed!

                  Turns out, I have a Global object that I create at my Application level and make available thru a getter() accessor... so, I saw your response, and added the PopUpRoot to it and started to test and found that every DisplayObject (actually, UIComponent) has a property parrentApplication and that seems to work if I cast it to a DisplayObject like so:
                  PopUpManager.createPopUp(DisplayObject(this.parentApplication) ,...

                  I will check out Cairngorm's ViewHelper pattern.

                  AND, thanks for the centerPopUp trick! I've added a creationComplete event handler and encapsulated the centering functionality where it belongs.

                  Thanks again,
                  George
                  • 6. Re: Center a Title Window PopUp?
                    peterent Level 2
                    All UIComponent-based classes have the parentApplication property. It is typed as Object because it may not always be a mx.core.Application object (in some future version of Flex/Apollo) so you have to cast to a DisplayObject.

                    The static, Application.application, is also an Object for the same reason.
                    • 7. Re: Center a Title Window PopUp?
                      parallaxed Level 1
                      quote:

                      Originally posted by: peterent
                      All UIComponent-based classes have the parentApplication property.

                      Smashing :-)

                      So you don't *need* to set a static var if the root is the Application itself.

                      Although if your pop up root is another component within the Application, then the above trick might come in handy for a quick solution.