<?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:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
		xmlns:s="library://ns.adobe.com/flex/spark" title="VerticalLayout">
	
	<fx:Script>
		<![CDATA[
			import spark.primitives.BitmapImage;
			protected function buttonHandler(event:MouseEvent):void
			{
				var random:Number = Math.ceil(Math.random()*3);
				
				var bitmapImage:BitmapImage = new BitmapImage();
				bitmapImage.width =  Math.ceil(Math.random()*150);
				bitmapImage.height = bitmapImage.width;
				bitmapImage.source = "assets/images/box"+random+".png";
				group.addElement(bitmapImage);
				
				group.verticalScrollPosition = group.contentHeight;
			}
		]]>
	</fx:Script>
	
	<s:Rect left="10" right="10" top="10" bottom="10" radiusX="5" radiusY="5">
		<s:fill>
			<s:SolidColor color="#FFFFFF"/>
		</s:fill>
	</s:Rect>
	
	<s:Scroller id="scroller" left="20" right="20" top="20" bottom="20">
		<s:Group id="group">
			<s:layout>
				<s:VerticalLayout horizontalAlign="center" useVirtualLayout="true" />
			</s:layout>
		</s:Group>
	</s:Scroller>
	
	<s:navigationContent>
		<s:Button click="navigator.popView()">
			<s:icon>
				<s:MultiDPIBitmapSource source160dpi="@Embed('assets/icons/160/1_navigation_previous_item.png')"
										source240dpi="@Embed('assets/icons/240/1_navigation_previous_item.png')"
										source320dpi="@Embed('assets/icons/320/1_navigation_previous_item.png')"/>
			</s:icon>
		</s:Button>
	</s:navigationContent>
	
	<s:actionContent>
		<s:Button click="buttonHandler(event)" label="Add Image" color="#FFFFFF">
			<s:icon>
				<s:MultiDPIBitmapSource source160dpi="@Embed('assets/icons/160/add.png')" source240dpi="@Embed('assets/icons/240/add.png')" source320dpi="@Embed('assets/icons/320/add.png')" />
			</s:icon>
		</s:Button>
	</s:actionContent>
			
	
</s:View>
