Title: MultiCore + AIR + resize window Post by: Ondina on February 27, 2009, 04:23:59 I'm 7 days old (puremvc time).
So I still know/remember what newbies go through when trying to use this (or other new) framework in their projects and I thought that before leaving (some day..) the puremvc-kindergarten I could tell the newbies coming after me how to play with the coolest puremvc-toys. I took the CodePeek example and simplified it and made it run under the MultiCore version. Maybe there is such an example already, but I didn't find it even after in depth search. If the post isn't useful or if it is redundant you (moderators) can delete it. I don't know if everything is correct in my code below but it works. MultiAir libs PureMVC_AS3_MultiCore_1_0_5.swc Utility_AS3_MultiCore_AIR_DesktopCitizen_1_2_1.swc (This utility provides the ability for PureMVC-based AIR applications remember their window size, position and maximized state each time it is launched. ) src org.controller StartupCommand.as org.view components AppControlBar.mxml AppControlBarMediator.as ApplicationMediator.as ApplicationFacade.as MultiAir.mxml ------------------------------------ MultiAir.mxml (main) <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:view="org.view.components.*" applicationComplete="facade.startup(this)" layout="absolute" > <mx:Script> <![CDATA[ import org.ApplicationFacade; // App name public static const NAME:String = "MultiAir"; // Initialize the PureMVC multicore-apparatus private var facade:ApplicationFacade = ApplicationFacade.getInstance( NAME ); [Bindable] public var showControls:Boolean = false; ]]> </mx:Script> <!-- The Application Control Bar --> <view:AppControlBar id="controlBar"/> <mx:TextArea x="10" y="10" width="250" height="250"/> </mx:WindowedApplication> ------------------------------------ ApplicationFacade.as package org { import org.puremvc.as3.multicore.utilities.air.desktopcitizen.DesktopCitizenConstants; import org.puremvc.as3.multicore.utilities.air.desktopcitizen.controller.WindowOpenCommand; import org.puremvc.as3.multicore.patterns.facade.Facade; import org.controller.StartupCommand; import org.controller.ShutdownCommand; public class ApplicationFacade extends Facade { // Notification name constants public static const STARTUP:String = "startup"; public function ApplicationFacade( key:String ) { super(key); } public static function getInstance( key:String ) : ApplicationFacade { if ( instanceMap[ key ] == null ) instanceMap[ key ] = new ApplicationFacade( key ); return instanceMap[ key ] as ApplicationFacade; } public function startup ( app:MultiAir ) : void { sendNotification( STARTUP, app ); } override protected function initializeController () : void { super.initializeController(); registerCommand( STARTUP, StartupCommand ); } } } -------------------------------------------- StartupCommand.as package org.controller { import org.puremvc.as3.multicore.interfaces.*; import org.puremvc.as3.multicore.patterns.command.*; import org.view.*; import org.puremvc.as3.multicore.utilities.air.desktopcitizen.DesktopCitizenConstants; /** * Create and register <code>Proxy</code>s with the <code>Model</code>. */ public class StartupCommand extends SimpleCommand { override public function execute( note:INotification ) :void { var app:MultiAir = note.getBody() as MultiAir; facade.registerMediator( new ApplicationMediator( app ) ); sendNotification( DesktopCitizenConstants.WINDOW_OPEN, app.stage ); } } } ------------------------------------- ApplicationMediator.as package org.view { import flash.events.Event; import org.puremvc.as3.multicore.interfaces.*; import org.puremvc.as3.multicore.patterns.mediator.*; import org.ApplicationFacade; import org.model.*; import org.puremvc.as3.multicore.utilities.air.desktopcitizen.DesktopCitizenConstants; public class ApplicationMediator extends Mediator implements IMediator { // Cannonical name of the Mediator public static const NAME:String = 'ApplicationMediator'; public function ApplicationMediator( viewComponent:Object ) { // pass the viewComponent to the superclass where // it will be stored in the inherited viewComponent property super( NAME, viewComponent ); } public function get app():MultiAir{ return viewComponent as MultiAir; } override public function onRegister( ):void { facade.registerMediator( new AppControlBarMediator( app.controlBar ) ); } override public function listNotificationInterests():Array { return [ DesktopCitizenConstants.WINDOW_READY]; } override public function handleNotification( note:INotification ):void { switch ( note.getName() ) { // Time to show the application window case DesktopCitizenConstants.WINDOW_READY: app.showControls = true; break; } } } } ----------------------------------------- AppControlBarMediator.as package org.view { import org.puremvc.as3.multicore.interfaces.*; import org.puremvc.as3.multicore.patterns.mediator.*; import org.ApplicationFacade; import org.view.components.AppControlBar; /** * A Mediator for interacting with the AppControlBar component. */ public class AppControlBarMediator extends Mediator implements IMediator { // Cannonical name of the Mediator public static const NAME:String = 'AppControlBarMediator'; public function AppControlBarMediator( viewComponent:Object ) { super( NAME, viewComponent ); } protected function get controlBar():AppControlBar{ return viewComponent as AppControlBar; } } } --------------------------------- AppControlBar.mxml <mx:ApplicationControlBar xmlns:mx="http://www.adobe.com/2006/mxml" dock="true"> <mx:Script> <![CDATA[ import org.ApplicationFacade; public static const BEGIN_CODE_SEARCH:String = "beginCodeSearch"; public static const CANCEL_CODE_SEARCH:String = "cancelCodeSearch"; [Bindable] public var comboOptions:Array; [Bindable] public var searching:Boolean = false; /** * Initiate Code Search. */ private function search() : void { searching=true; dispatchEvent( new Event( BEGIN_CODE_SEARCH ) ); } /** * Cancel Code Search */ private function cancel() : void { searching=false; dispatchEvent( new Event( CANCEL_CODE_SEARCH ) ); } ]]> </mx:Script> <!-- The Search Controls --> <mx:HBox width="75%"> <mx:ComboBox id="searchCombo" dataProvider="{comboOptions}" close="searchTI.setFocus()"/> <mx:TextInput id="searchTI" width="250" toolTip="Enter a language keyword or code fragment." enter="search()"/> <mx:Button label="Search" click="search()" enabled="{(searchTI.text.length != 0)&&(!searching)}" /> <mx:Button label="Cancel" click="cancel()" visible="{searching}" /> <mx:Label text="Searching..." fontFamily="Courier" fontSize="10" visible="{searching}"/> </mx:HBox> </mx:ApplicationControlBar> -------------------- N.B. I took out the long comments for readability's sake. Ondina |