<?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"
			   width="100%" height="100%" viewSourceURL="srcview/index.html">
	<fx:Style>
		@namespace s "library://ns.adobe.com/flex/spark";
		@namespace mx "library://ns.adobe.com/flex/mx";
		s|Label {
			color: #FFFFFF;
			font-weight: bold;
		}
		#titleL {
			font-size: 20;
		}
		s|ComboBox, s|List {
			alternating-item-colors: #424242;
		}
		
		s|Form {
			background-color: #424242;
		}
	</fx:Style>
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			[Bindable]
			private var _locales:ArrayCollection = new ArrayCollection(['en-US','de-DE','ja-JP','ru-RU','ar-SA','fr-FR']);
			[Bindable]
			private var employeeArrColl:ArrayCollection = new ArrayCollection(['côte','b','coté','xyz','ABC','Öhlund','Oehland','Zorn','Aaron','Ohlin','Aaron']);
			
			protected function button1_clickHandler(event:MouseEvent):void
			{
				mySort.fields = [sortField];
				employeeArrColl.sort = mySort;
				employeeArrColl.refresh();
			}
			
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
		<s:Sort id="mySort" locale="{localeCB.selectedItem}"/>
		<s:SortField id="sortField" />
	</fx:Declarations>
	<s:Scroller width="100%" height="100%">
		<s:Group>
			<s:Form>
				<s:Label id="titleL" text="Spark Sort and SortField"/>
				<s:Label text="Sort strings in List by using Spark Sort and SortField"/>
				<s:Spacer height="15"/>
				<s:FormItem label="Locale: ">
					<s:ComboBox id="localeCB" dataProvider="{_locales}" selectedIndex="0"/>
				</s:FormItem>
				<s:FormItem label="List: ">
					<s:List dataProvider="{employeeArrColl}"/>
				</s:FormItem>
				<s:FormItem>
					<s:Button label="Click to sort" click="button1_clickHandler(event)"/>
				</s:FormItem>
			</s:Form>
		</s:Group>
	</s:Scroller>
</s:Application>
