| package org.apache.flex.runtimelocale.model { | |
| import flash.events.Event; | |
| import flash.events.EventDispatcher; | |
| import org.apache.flex.runtimelocale.event.LocaleEvent; | |
| import org.apache.flex.runtimelocale.event.LocaleFileEvent; | |
| import org.apache.flex.runtimelocale.event.ReferenceLocaleRequestEvent; | |
| import org.apache.flex.runtimelocale.event.ShowHelpRequestEvent; | |
| import org.apache.flex.runtimelocale.event.ShowLogFileRequestEvent; | |
| import org.apache.flex.runtimelocale.model.locale.LocaleDataVO; | |
| import org.apache.flex.runtimelocale.view.LocaleView; | |
| import org.apache.flex.runtimelocale.view.MainView; | |
| import org.as3commons.logging.api.ILogger; | |
| import org.as3commons.logging.api.getClassLogger; | |
| public class MainViewPM extends EventDispatcher { | |
| private static const logger:ILogger = getClassLogger(MainViewPM); | |
| public function MainViewPM() { | |
| super(); | |
| } | |
| private var _applicationModel:ApplicationModel; | |
| private var _mainView:MainView; | |
| public function addLocale():void { | |
| dispatchEvent(new LocaleEvent(LocaleEvent.NEW_LOCALE_REQUEST)); | |
| } | |
| [Bindable(event="applicationModelChanged")] | |
| public function get applicationModel():ApplicationModel { | |
| return _applicationModel; | |
| } | |
| public function set applicationModel(value:ApplicationModel):void { | |
| if (value !== _applicationModel) { | |
| _applicationModel = value; | |
| if (_applicationModel.localeData == null) { | |
| _applicationModel.addEventListener("localeDataChanged", handleLocaleDataChange); | |
| } else { | |
| createLocaleViews(_applicationModel.localeData); | |
| } | |
| dispatchEvent(new Event("applicationModelChanged")); | |
| } | |
| } | |
| public function handleNewLocale(event:LocaleEvent):void { | |
| var view:LocaleView = createLocaleView(event.localeData); | |
| _mainView.localesTab.selectedChild = view; | |
| logger.info("Handled {0} event for locale '{1}'", [event.type, event.localeData.name]); | |
| } | |
| public function handleRemovedLocale(event:LocaleEvent):void { | |
| var len:int = _mainView.localesTab.numChildren; | |
| for (var i:int = 0; i < len; ++i) { | |
| var view:LocaleView = _mainView.localesTab.getChildAt(i) as LocaleView; | |
| if (view) { | |
| if (view.localeData === event.localeData) { | |
| _mainView.localesTab.removeChild(view); | |
| logger.info("Handled {0} event, removed tab for locale '{1}'", [event.type, event.localeData.name]); | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| public function initialize(view:MainView):void { | |
| _mainView = view; | |
| logger.info("MainViewPM initialized"); | |
| } | |
| public function requestReferenceLocale(localeName:String):void { | |
| dispatchEvent(new ReferenceLocaleRequestEvent(ReferenceLocaleRequestEvent.REFERENCE_LOCALE_REQUEST, localeName)); | |
| } | |
| public function saveLocaleFile():void { | |
| dispatchEvent(new LocaleFileEvent(LocaleFileEvent.FILE_SAVE_REQUEST)); | |
| } | |
| public function showHelp():void { | |
| dispatchEvent(new ShowHelpRequestEvent(ShowHelpRequestEvent.SHOW_HELP_REQUEST)); | |
| } | |
| public function showLocaleFile():void { | |
| dispatchEvent(new LocaleFileEvent(LocaleFileEvent.FILE_SHOW_REQUEST)); | |
| } | |
| public function showLogFile():void { | |
| dispatchEvent(new ShowLogFileRequestEvent(ShowLogFileRequestEvent.SHOW_LOG_FILE_REQUEST)); | |
| } | |
| private function createLocaleView(localeData:LocaleDataVO):LocaleView { | |
| var view:LocaleView = new LocaleView(); | |
| view.localeData = localeData; | |
| view.percentHeight = 100; | |
| view.percentWidth = 100; | |
| _mainView.localesTab.addChild(view); | |
| logger.info("Created tab for locale '{0}'", [localeData.name]); | |
| return view; | |
| } | |
| private function createLocaleViews(localeDataCollection:Vector.<LocaleDataVO>):void { | |
| for each (var localeData:LocaleDataVO in localeDataCollection) { | |
| createLocaleView(localeData); | |
| } | |
| } | |
| private function handleLocaleDataChange(event:Event):void { | |
| if (_applicationModel.localeData != null) { | |
| _applicationModel.removeEventListener("localeDataChanged", handleLocaleDataChange); | |
| createLocaleViews(_applicationModel.localeData); | |
| } | |
| } | |
| } | |
| } |