チェンジセット 3100: as3/GeniusFramework

差分発生行の前後
無視リスト:
コミット日時:
2009/09/15 11:58:04 (2 年前)
コミッタ:
seagirl
ログメッセージ:

まだまだ試行錯誤中

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/GeniusFramework/branches/2.0/.actionScriptProperties

    r2773 r3100  
    1 <?xml version="1.0" encoding="UTF-8"?> 
     1<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
    22<actionScriptProperties mainApplicationPath="Genius2.as" projectUUID="b96a7f6a-4ff8-4cae-b833-2386b84f0cb6" version="6"> 
    33  <compiler additionalCompilerArguments="" autoRSLOrdering="true" copyDependentFiles="false" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="false" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="app-template/libs" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="true" useDebugRSLSwfs="true" verifyDigests="true" warn="true"> 
  • as3/GeniusFramework/branches/2.0/.flexLibProperties

    r2774 r3100  
    1 <?xml version="1.0" encoding="UTF-8"?> 
     1<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
    22<flexLibProperties version="1"> 
    33  <includeClasses> 
     
    1010    <classEntry path="jp.seagirl.genius.controllers.ViewController"/> 
    1111    <classEntry path="jp.seagirl.collections.LabelFunction"/> 
    12     <classEntry path="jp.seagirl.genius.events.ApplicationEvent"/> 
     12    <classEntry path="jp.seagirl.genius.events.GeniusEvent"/> 
    1313    <classEntry path="jp.seagirl.containers.GeniusViewStack"/> 
    1414    <classEntry path="jp.seagirl.genius.core.Config"/> 
  • as3/GeniusFramework/branches/2.0/app-template/src/MyAppDelegate.as

    r2591 r3100  
    99        { 
    1010                public var view:[% name %]; 
    11                  
    12                 /** 
    13                  * アプリケーションの設定  
    14                  */              
    15                 override protected function createConfig():Config 
    16                 {                                
    17                         return new Config("assets/config.json"); 
    18                          
    19                         //return new Config("assets/config.yaml"); 
    20                          
    21                         /* return new Config({ 
    22                                 applicationName: 'GettingStarted', 
    23                                 applicationVersion: '1.0.0' 
    24                         }); */ 
    25                 } 
    2611                 
    2712                /** 
     
    5338                 * 状態に変化があると呼び出されます。。 
    5439                 */              
    55                 override protected function changePage(data:Object):void 
     40                override public function changePage(data:Object):void 
    5641                { 
    5742                        view.viewStack.selectViewByClassName(data.page); 
  • as3/GeniusFramework/branches/2.0/src/jp/seagirl/containers/GeniusViewStack.as

    r2596 r3100  
    33        import flash.display.InteractiveObject; 
    44        import flash.events.ContextMenuEvent; 
     5        import flash.events.Event; 
    56        import flash.ui.ContextMenu; 
    67        import flash.ui.ContextMenuItem; 
    78         
     9        import jp.seagirl.genius.events.GeniusEvent; 
    810        import jp.seagirl.genius.threads.ChangeStateThread; 
    911         
     
    3638                                var newIndex:int = getChildIndex(view); 
    3739                                 
    38                                 selectedIndex = newIndex; 
     40                                if (oldIndex == newIndex) 
     41                                { 
     42                                        view.dispatchEvent(new GeniusEvent(GeniusEvent.UPDATE_PAGE)); 
     43                                } 
     44                                else 
     45                                { 
     46                                        selectedIndex = newIndex;        
     47                                } 
    3948                        } 
    4049                        else 
  • as3/GeniusFramework/branches/2.0/src/jp/seagirl/controls/NotifierBase.as

    r925 r3100  
    1212                public var text:String; 
    1313                 
    14                 public function create(target:UIComponent = null):void 
     14                public function init(target:UIComponent = null):void 
    1515                { 
    1616                        if (target == null) 
  • as3/GeniusFramework/branches/2.0/src/jp/seagirl/genius/controllers/ViewController.as

    r2773 r3100  
    3232         
    3333        import jp.seagirl.controls.Notifier; 
     34        import jp.seagirl.genius.core.Config; 
    3435        import jp.seagirl.genius.core.Context; 
    3536        import jp.seagirl.genius.effects.IGeniusEffect; 
     37        import jp.seagirl.genius.events.GeniusEvent; 
    3638        import jp.seagirl.genius.models.IModel; 
    3739        import jp.seagirl.genius.views.ApplicationDelegate; 
     
    4850        import mx.events.FlexEvent; 
    4951        import mx.validators.Validator; 
    50          
     52 
    5153        public class ViewController 
    5254        { 
     
    165167                //-------------------------------------------------------------------------- 
    166168                 
     169                protected function getConfig():Config 
     170                { 
     171                        return context.config; 
     172                } 
     173                 
    167174                protected function getModel(modelName:String):IModel 
    168175                { 
    169176                        return context.getModel(modelName); 
     177                } 
     178                 
     179                protected function getController(controllerName:String):ViewController 
     180                { 
     181                        return context.getController(controllerName); 
    170182                } 
    171183                 
     
    205217                        this['view'].addEventListener(FlexEvent.INITIALIZE, view_initializeHandler); 
    206218                        this['view'].addEventListener(FlexEvent.CREATION_COMPLETE, view_creationCompleteHandler); 
     219                         
     220                        if (this['view'].processedDescriptors) 
     221                                view_initializeHandler(new FlexEvent(FlexEvent.INITIALIZE)); 
     222                         
     223                        if (this['view'].initialized) 
     224                                view_creationCompleteHandler(new FlexEvent(FlexEvent.CREATION_COMPLETE)); 
    207225                } 
    208226                 
     
    326344                        initialize(); 
    327345                         
     346                        this['view'].addEventListener(GeniusEvent.UPDATE_PAGE, view_updatePageHandler); 
    328347                        this['view'].addEventListener(FlexEvent.SHOW, view_showHandler); 
    329348                        this['view'].addEventListener(FlexEvent.HIDE, view_hideHandler); 
    330349                         
    331                         notifier.create(); 
     350                        notifier.init(); 
    332351                         
    333352                        if (context.state.page == this['view'].className) 
     
    352371                 * @private 
    353372                 */                      
     373                protected function view_updatePageHandler(event:GeniusEvent):void 
     374                { 
     375                        if (!active) 
     376                                return; 
     377                         
     378                        update(); 
     379                } 
     380                 
     381                /** 
     382                 * @private 
     383                 */                      
    354384                protected function view_showHandler(event:FlexEvent):void 
    355385                { 
  • as3/GeniusFramework/branches/2.0/src/jp/seagirl/genius/core/Config.as

    r2774 r3100  
    1 package jp.seagirl.genius.core 
    2 
    3         import com.adobe.serialization.json.JSON; 
    4          
    5         import flash.events.ErrorEvent; 
    6         import flash.events.Event; 
    7         import flash.events.EventDispatcher; 
    8         import flash.events.IOErrorEvent; 
    9         import flash.events.SecurityErrorEvent; 
    10         import flash.net.URLLoader; 
    11         import flash.net.URLRequest; 
    12         import flash.system.Security; 
    13          
    14         import jp.seagirl.genius.events.ApplicationEvent; 
    15          
    16         import mx.core.Application; 
    17          
    18         import org.as3yaml.YAML; 
    19          
    20         [Event(name="applicationDidFinishedInitializingConfig", type="jp.seagirl.genius.events.ApplicationEvent")] 
    21          
    22         dynamic public class Config extends EventDispatcher 
     1/** 
     2 * Licensed under the MIT License 
     3 *  
     4 * Copyright (c) 2009 seagirl 
     5 *  
     6 * Permission is hereby granted, free of charge, to any person obtaining a copy 
     7 * of this software and associated documentation files (the "Software"), to deal 
     8 * in the Software without restriction, including without limitation the rights 
     9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
     10 * copies of the Software, and to permit persons to whom the Software is 
     11 * furnished to do so, subject to the following conditions: 
     12 *  
     13 * The above copyright notice and this permission notice shall be included in 
     14 * all copies or substantial portions of the Software. 
     15 *  
     16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
     17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
     18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
     19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
     20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
     21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
     22 * THE SOFTWARE. 
     23 *  
     24 */ 
     25  
     26 package jp.seagirl.genius.core 
     27{        
     28        public class Config 
    2329        { 
    24                 public function Config(source:Object = null
     30                public function Config(
    2531                { 
    26                         this.source = source; 
    27                         initialize(); 
     32 
    2833                } 
    29                  
    30                 private var source:Object; 
    3134                 
    3235                private var _applicationName:String = 'Genius Application'; 
     
    113116                 
    114117                private var _serviceURL:String; 
    115                 private var _application:Application = Application.application as Application; 
    116118                 
    117119                public function set serviceURL(val:String):void 
     
    122124                public function get serviceURL():String 
    123125                { 
    124                         return Security.sandboxType.indexOf('local') != -1 
    125                                 ? _localBaseURL + _serviceURL 
    126                                 : _application.url.replace(/\/[0-9a-zA-Z_-]+\.swf$/, _serviceURL); 
     126                        return _serviceURL; 
    127127                } 
    128                  
    129                 public function initialize():void 
    130                 { 
    131                         if (source != null && source is String) 
    132                         { 
    133                                 load(); 
    134                                 return; 
    135                         } 
    136                          
    137                         process(source); 
    138                 } 
    139                  
    140                 private function load():void 
    141                 {        
    142                         var loader:URLLoader = new URLLoader(); 
    143                         loader.addEventListener(Event.COMPLETE, loaderCompleteHandler); 
    144                         loader.addEventListener(IOErrorEvent.IO_ERROR, loaderErrorHandler); 
    145                         loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderErrorHandler); 
    146                         loader.load(new URLRequest(source as String)); 
    147                 } 
    148                  
    149                 private function process(data:Object = null):void 
    150                 { 
    151                         for (var key:Object in data) 
    152                         { 
    153                                 this[key] = data[key]; 
    154                         } 
    155                          
    156                         dispatchEvent(new ApplicationEvent(ApplicationEvent.APPLICATION_DID_FINISHED_INITIALIZING_CONFIG)); 
    157                 } 
    158                  
    159                 private function loaderErrorHandler(event:ErrorEvent):void 
    160                 { 
    161                         process(); 
    162                 } 
    163                  
    164                 private function loaderCompleteHandler(event:Event):void 
    165                 { 
    166                         var flagments:Array = source.split('.'); 
    167                         var extension:String = flagments[flagments.length - 1] as String; 
    168                         var data:Object; 
    169                          
    170                         switch (extension) 
    171                         { 
    172                                 case "yaml": 
    173                                 { 
    174                                         data = YAML.decode(event.target.data); 
    175                                         break; 
    176                                 } 
    177                                 case "json": 
    178                                 { 
    179                                         data = JSON.decode(event.target.data);   
    180                                         break; 
    181                                 } 
    182                         } 
    183                  
    184                         process(data); 
    185                 }        
    186128        } 
    187129} 
  • as3/GeniusFramework/branches/2.0/src/jp/seagirl/genius/core/Context.as

    r2773 r3100  
    3131        import jp.seagirl.genius.controllers.ViewController; 
    3232        import jp.seagirl.genius.models.IModel; 
    33         import jp.seagirl.genius.models.Model; 
    3433         
    3534        import mx.events.BrowserChangeEvent; 
     
    8382                 
    8483                //---------------------------------- 
     84                //  defaultState 
     85                //---------------------------------- 
     86                 
     87                /** 
     88                 * デフォルトの状態です。  
     89                 */              
     90                public function get defaultState():Object 
     91                { 
     92                        return config.defaultState; 
     93                } 
     94                 
     95                //---------------------------------- 
     96                //  ignoredState 
     97                //---------------------------------- 
     98                 
     99                /** 
     100                 * ブラウザに同期させない状態のキーを定義した配列です。 
     101                 */      
     102                public var ignoredState:Array = []; 
     103                 
     104                //---------------------------------- 
    85105                //  state 
    86106                //---------------------------------- 
     
    109129                        if (browserManager != null) 
    110130                        { 
    111                                 var string:String = URLUtil.objectToString(_state, '&'); 
     131                                var aState:Object = {}; 
     132                                 
     133                                for (var aKey:String in _state) 
     134                                { 
     135                                        var ignore:Boolean = false; 
     136                                         
     137                                        for each (var ignoredKey:String in ignoredState) 
     138                                        { 
     139                                                if (aKey == ignoredKey) 
     140                                                        ignore = true; 
     141                                        } 
     142                                         
     143                                        if (!ignore) 
     144                                                aState[aKey] = _state[aKey]; 
     145                                } 
     146                                 
     147                                var string:String = URLUtil.objectToString(aState, '&'); 
    112148                                browserManager.setFragment(string); 
    113149                        } 
  • as3/GeniusFramework/branches/2.0/src/jp/seagirl/genius/events/GeniusEvent.as

    r2579 r3100  
    33        import flash.events.Event; 
    44 
    5         public class ApplicationEvent extends Event 
     5        public class GeniusEvent extends Event 
    66        { 
    7                 public static const APPLICATION_DID_FINISHED_INITIALIZING_CONFIG:String = 'applicationDidFinishedInitializingConfig'; 
     7                public static const ASSETES_LOADED:String = 'assetsLoaded'; 
     8                public static const UPDATE_PAGE:String = 'updatePage'; 
    89                 
    9                 public function ApplicationEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false) 
     10                public function GeniusEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false) 
    1011                { 
    1112                        super(type, bubbles, cancelable); 
  • as3/GeniusFramework/branches/2.0/src/jp/seagirl/genius/threads/GeniusThread.as

    r2554 r3100  
    2626package jp.seagirl.genius.threads 
    2727{ 
     28        import jp.seagirl.genius.controllers.ViewController; 
     29        import jp.seagirl.genius.core.Config; 
     30        import jp.seagirl.genius.core.Context; 
     31        import jp.seagirl.genius.models.IModel; 
    2832        import jp.seagirl.genius.views.ApplicationDelegate; 
    29         import jp.seagirl.genius.core.Context; 
    3033         
    3134        import org.libspark.thread.Thread; 
     
    7376                } 
    7477                 
     78                protected function getConfig():Config 
     79                { 
     80                        return context.config; 
     81                } 
     82                 
     83                protected function getModel(modelName:String):IModel 
     84                { 
     85                        return context.getModel(modelName); 
     86                } 
     87                 
     88                protected function getController(controllerName:String):ViewController 
     89                { 
     90                        return context.getController(controllerName); 
     91                } 
     92                 
    7593                /** 
    7694                 * 汎用的なデータを追加するためのメソッドです. 
  • as3/GeniusFramework/branches/2.0/src/jp/seagirl/genius/views/AbstractDelegate.as

    r2554 r3100  
    2626 package jp.seagirl.genius.views 
    2727{ 
     28        import flash.events.EventDispatcher; 
    2829        import flash.utils.getDefinitionByName; 
    2930        import flash.utils.getQualifiedClassName; 
     
    3435        import mx.events.FlexEvent; 
    3536 
    36         public class AbstractDelegate implements IMXMLObject 
     37        public class AbstractDelegate extends EventDispatcher implements IMXMLObject 
    3738        { 
    3839                public function AbstractDelegate() 
     
    7071                        if (!hasOwnProperty('view')) 
    7172                                throw new Error("対応する View が見つかりません。"); 
     73                         
     74                        context = ApplicationDelegate.sharedApplicationDelegate().context; 
    7275                         
    7376                        this['view'] = document; 
  • as3/GeniusFramework/branches/2.0/src/jp/seagirl/genius/views/ApplicationDelegate.as

    r2774 r3100  
    3636        import jp.seagirl.genius.core.Config; 
    3737        import jp.seagirl.genius.core.Context; 
     38        import jp.seagirl.genius.events.GeniusEvent; 
    3839        import jp.seagirl.genius.models.IModel; 
    3940         
     
    7172                override public function initialized(document:Object, id:String):void 
    7273                { 
    73                         Thread.initialize(new EnterFrameThreadExecutor()); 
    74                  
    75                         context = new Context(createConfig()); 
    76                         context.traceApplicationInformation(); 
    77                          
    78                         BindingUtils.bindSetter(onContextStateChange, context, 'state'); 
     74                        if (!Thread.isReady) 
     75                                Thread.initialize(new EnterFrameThreadExecutor()); 
    7976                         
    8077                        if (!hasOwnProperty('view')) 
     
    10198                override protected function initialize():void 
    10299                { 
    103                         initializeModels(); 
    104                         initializeViews(); 
    105                         initializeControllers(); 
    106                         initializeContextMenu(); 
    107                 } 
    108                  
    109                 protected function initializeModels():void 
    110                 { 
    111                          
    112                 } 
    113                  
    114                 protected function initializeViews():void 
    115                 { 
    116                          
    117                 } 
    118                  
    119                 protected function initializeControllers():void 
    120                 { 
    121                          
    122                 } 
    123                  
    124                 protected function initializeContextMenu():void 
     100 
     101                } 
     102                 
     103                protected function loadAssets():void 
     104                { 
     105                        dispatchEvent(new GeniusEvent(GeniusEvent.ASSETES_LOADED)); 
     106                } 
     107                 
     108                protected function createContextMenu():void 
    125109                { 
    126110                        var target:Application = this['view'] as Application; 
     
    189173                } 
    190174                 
     175                private function assetsLoadedHandler(event:GeniusEvent):void 
     176                { 
     177                        initialize(); 
     178                } 
     179                 
    191180                override protected function view_preinitializeHandler(event:FlexEvent):void 
    192181                { 
    193182                        this['view'].removeEventListener(FlexEvent.PREINITIALIZE, view_preinitializeHandler); 
     183                         
     184                        preinitialize(); 
     185                } 
     186                 
     187                override protected function view_initializeHandler(event:FlexEvent):void 
     188                { 
     189                        this['view'].removeEventListener(FlexEvent.INITIALIZE, view_initializeHandler); 
    194190                         
    195191                        var application:Application = this['view'] as Application; 
     
    197193                        if (application) 
    198194                        { 
     195                                context = new Context(createConfig()); 
     196                                context.traceApplicationInformation(); 
     197                                 
     198                                BindingUtils.bindSetter(onContextStateChange, context, 'state'); 
     199                                 
    199200                                SWFWheel.initialize(application.systemManager.stage); 
    200201                                SWFProfiler.init(application.systemManager.stage, application); 
    201202                        } 
    202203                         
    203                         preinitialize(); 
    204                 } 
    205                  
    206                 override protected function view_initializeHandler(event:FlexEvent):void 
    207                 { 
    208                         this['view'].removeEventListener(FlexEvent.INITIALIZE, view_initializeHandler); 
    209                          
    210                         initialize(); 
     204                        addEventListener(GeniusEvent.ASSETES_LOADED, assetsLoadedHandler); 
     205                        loadAssets(); 
    211206                } 
    212207                 
  • as3/GeniusFramework/branches/2.0/src/jp/seagirl/genius/views/ItemRendererDelegate.as

    r2554 r3100  
    2626 package jp.seagirl.genius.views 
    2727{ 
     28        import jp.seagirl.genius.controllers.ViewController; 
     29        import jp.seagirl.genius.core.Config; 
     30        import jp.seagirl.genius.models.IModel; 
     31         
    2832        import mx.events.FlexEvent; 
    29          
     33 
    3034        public class ItemRendererDelegate extends AbstractDelegate 
    3135        {        
     36                protected function getConfig():Config 
     37                { 
     38                        return context.config; 
     39                } 
     40                 
     41                protected function getModel(modelName:String):IModel 
     42                { 
     43                        return context.getModel(modelName); 
     44                } 
     45                 
     46                protected function getController(controllerName:String):ViewController 
     47                { 
     48                        return context.getController(controllerName); 
     49                } 
     50                 
    3251                override protected function view_initializeHandler(event:FlexEvent):void 
    3352                { 
     
    3958                protected function view_dataChangeHandler(event:FlexEvent):void 
    4059                { 
    41                         update(); 
     60                        if (this['view'].data) 
     61                                update(); 
    4262                } 
    4363