<?xml version="1.0" encoding="utf-8"?>
<!--

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

-->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="1024" minHeight="768" creationComplete="application1_creationCompleteHandler(event)">
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayList;
			import mx.core.UIComponent;
			import mx.events.FlexEvent;
			
			private var arr:Array =
				[
					{ label:'Apple', data:10.00},
					{ label:'Banana', data:15.00 },
					{ label:'Melon', data:3.50 },
					{ label:'Kiwi', data:7.65},
					{ label:'Strawberry',data:12.35 },
					{ label:'Other', data:00.00}
				];
			
			private var listArr :ArrayList = new ArrayList(arr);
			
			protected function application1_creationCompleteHandler(event:FlexEvent):void
			{
				appList.dataProvider = listArr;
				myStyleManager = StyleManager.getStyleManager(systemManager);
			}
			
			public var myStyleManager: IStyleManager2;
			
			
			
			public function iniit():void
			{
				mod_loader.url = "assets/StyleMgrModule.swf";
			}
			
			public function unload():void
			{
				mod_loader.unloadModule();
				mod_loader.url = "";
			}
			
			public function findModuleStyleManager(): IStyleManager2
			{
				return StyleManager.getStyleManager((mod_loader.child as UIComponent).moduleFactory);
				 
			}

			public function findParentForModuleStyleManager(): IStyleManager2
			{
				return  StyleManager.getStyleManager((mod_loader.child as UIComponent).moduleFactory).parent;
				
			}
		]]>
	</fx:Script>
	<s:layout>
		<s:VerticalLayout paddingLeft="5"/>
	</s:layout>
	<s:HGroup id="hgroupContainer"  >
		<s:List id="appList"  />
		<mx:ModuleLoader id="mod_loader" />
	</s:HGroup>
	
	<s:Button label="Load Module" click="iniit()" />
	<s:Button label="UnLoad Module" click="unload()" />
	
</s:Application>
