<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
	<xsd:element name="Falagard" type="falagardSpecificationType" />
	<xsd:complexType name="falagardSpecificationType">
		<xsd:sequence>
			<xsd:element name="WidgetLook" type="widgetLookType" minOccurs="0" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="widgetLookType">
		<xsd:sequence>
            <xsd:element name="PropertyDefinition" type="propertyDefinitionType" minOccurs="0" maxOccurs="unbounded" />
            <xsd:element name="Property" type="propertyType" minOccurs="0" maxOccurs="unbounded" />
            <xsd:element name="NamedArea" type="namedAreaType" minOccurs="0" maxOccurs="unbounded" />
			<xsd:element name="Child" type="widgetComponentType" minOccurs="0" maxOccurs="unbounded" />
			<xsd:element name="ImagerySection" type="imagerySectionType" minOccurs="0" maxOccurs="unbounded" />
			<xsd:element name="StateImagery" type="stateType" minOccurs="0" maxOccurs="unbounded" />
		</xsd:sequence>
		<xsd:attribute name="name" type="xsd:string" use="required" />
	</xsd:complexType>
    <xsd:complexType name="propertyDefinitionType">
        <xsd:attribute name="type" type="propertyTypeEnum" use="optional" default="Generic" />
        <xsd:attribute name="name" type="xsd:string" use="required" />
        <xsd:attribute name="initialValue" type="xsd:string" use="optional" default="" />
        <xsd:attribute name="layoutOnWrite" type="xsd:boolean" use="optional" default="false" />
        <xsd:attribute name="redrawOnWrite" type="xsd:boolean" use="optional" default="false" />
    </xsd:complexType>
    <xsd:complexType name="namedAreaType">
        <xsd:sequence>
            <xsd:element name="Area" type="componentAreaType" />
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="required" />
    </xsd:complexType>
	<xsd:complexType name="stateType">
		<xsd:sequence>
			<xsd:element name="Layer" type="layerType" minOccurs="0" maxOccurs="unbounded" />
		</xsd:sequence>
		<xsd:attribute name="name" type="xsd:string" use="required" />
        <xsd:attribute name="clipped" type="xsd:boolean" use="optional" default="true" />
	</xsd:complexType>
	<xsd:complexType name="layerType">
		<xsd:sequence>
			<xsd:element name="Section" type="sectionSpecType" minOccurs="0" maxOccurs="unbounded" />
		</xsd:sequence>
		<xsd:attribute name="priority" type="xsd:integer" use="optional" default="0" />
	</xsd:complexType>
    <xsd:complexType name="sectionSpecType">
        <xsd:choice  minOccurs="0" maxOccurs="1">
            <xsd:element name="Colours" type="colourRectType" />
            <xsd:element name="ColourProperty" type="settingByPropertyType" />
            <xsd:element name="ColourRectProperty" type="settingByPropertyType" />
        </xsd:choice>
        <xsd:attribute name="look" type="xsd:string" use="optional" default="" />
        <xsd:attribute name="section" type="xsd:string" use="required" />
    </xsd:complexType>
	<xsd:complexType name="imagerySectionType">
		<xsd:sequence>
            <xsd:choice  minOccurs="0" maxOccurs="1">
                <xsd:element name="Colours" type="colourRectType" />
                <xsd:element name="ColourProperty" type="settingByPropertyType" />
                <xsd:element name="ColourRectProperty" type="settingByPropertyType" />
            </xsd:choice>
            <xsd:element name="FrameComponent" type="frameComponentType" minOccurs="0" maxOccurs="unbounded" />
			<xsd:element name="ImageryComponent" type="imageryComponentType" minOccurs="0" maxOccurs="unbounded" />
            <xsd:element name="TextComponent" type="textComponentType" minOccurs="0" maxOccurs="unbounded" />
		</xsd:sequence>
		<xsd:attribute name="name" type="xsd:string" use="required" />
	</xsd:complexType>
    <xsd:complexType name="frameComponentType">
        <xsd:sequence>
            <xsd:element name="Area" type="componentAreaType" />
            <xsd:element name="Image" type="frameImageType" minOccurs="0" maxOccurs="9" />
            <xsd:choice  minOccurs="0" maxOccurs="1">
                <xsd:element name="Colours" type="colourRectType" />
                <xsd:element name="ColourProperty" type="settingByPropertyType" />
                <xsd:element name="ColourRectProperty" type="settingByPropertyType" />
            </xsd:choice>
            <xsd:choice  minOccurs="0" maxOccurs="1">
                <xsd:element name="VertFormat" type="vertFormatType" />
                <xsd:element name="VertFormatProperty" type="settingByPropertyType" />
            </xsd:choice>
            <xsd:choice  minOccurs="0" maxOccurs="1">
                <xsd:element name="HorzFormat" type="horzFormatType" />
                <xsd:element name="HorzFormatProperty" type="settingByPropertyType" />
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="textComponentType">
        <xsd:sequence>
            <xsd:element name="Area" type="componentAreaType" />
            <xsd:element name="Text" type="textStringType" minOccurs="0" maxOccurs="1" />
            <xsd:choice  minOccurs="0" maxOccurs="1">
                <xsd:element name="Colours" type="colourRectType" />
                <xsd:element name="ColourProperty" type="settingByPropertyType" />
                <xsd:element name="ColourRectProperty" type="settingByPropertyType" />
            </xsd:choice>
            <xsd:choice  minOccurs="0" maxOccurs="1">
                <xsd:element name="VertFormat" type="vertTextFormatType" />
                <xsd:element name="VertFormatProperty" type="settingByPropertyType" />
            </xsd:choice>
            <xsd:choice  minOccurs="0" maxOccurs="1">
                <xsd:element name="HorzFormat" type="horzTextFormatType" />
                <xsd:element name="HorzFormatProperty" type="settingByPropertyType" />
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>
	<xsd:complexType name="imageryComponentType">
		<xsd:sequence>
			<xsd:element name="Area" type="componentAreaType" />
            <xsd:choice>
                <xsd:element name="Image" type="imageType" />
                <xsd:element name="ImageProperty" type="settingByPropertyType" />
            </xsd:choice>
            <xsd:choice  minOccurs="0" maxOccurs="1">
                <xsd:element name="Colours" type="colourRectType" />
                <xsd:element name="ColourProperty" type="settingByPropertyType" />
                <xsd:element name="ColourRectProperty" type="settingByPropertyType" />
            </xsd:choice>
            <xsd:choice  minOccurs="0" maxOccurs="1">
                <xsd:element name="VertFormat" type="vertFormatType" />
                <xsd:element name="VertFormatProperty" type="settingByPropertyType" />
            </xsd:choice>
            <xsd:choice  minOccurs="0" maxOccurs="1">
                <xsd:element name="HorzFormat" type="horzFormatType" />
                <xsd:element name="HorzFormatProperty" type="settingByPropertyType" />
            </xsd:choice>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="widgetComponentType">
		<xsd:sequence>
			<xsd:element name="Area" type="componentAreaType" />
			<xsd:element name="VertAlignment" type="vertAlignmentType" minOccurs="0" maxOccurs="1" />
			<xsd:element name="HorzAlignment" type="horzAlignmentType" minOccurs="0" maxOccurs="1" />
			<xsd:element name="Property" type="propertyType" minOccurs="0" maxOccurs="unbounded" />
		</xsd:sequence>
		<xsd:attribute name="type" type="xsd:string" use="required" />
		<xsd:attribute name="nameSuffix" type="xsd:string" use="required" />
		<xsd:attribute name="look" type="xsd:string" use="optional" default="" />
	</xsd:complexType>
	<xsd:complexType name="horzFormatType">
		<xsd:attribute name="type" type="horzFormatEnum" use="required" />
	</xsd:complexType>
	<xsd:complexType name="vertFormatType">
		<xsd:attribute name="type" type="vertFormatEnum" use="required" />
	</xsd:complexType>
        <xsd:complexType name="horzTextFormatType">
		<xsd:attribute name="type" type="horzTextFormatEnum" use="required" />
	</xsd:complexType>
	<xsd:complexType name="vertTextFormatType">
		<xsd:attribute name="type" type="vertTextFormatEnum" use="required" />
	</xsd:complexType>
	<xsd:complexType name="horzAlignmentType">
		<xsd:attribute name="type" type="horzAlignmentEnum" use="required" />
	</xsd:complexType>
	<xsd:complexType name="vertAlignmentType">
		<xsd:attribute name="type" type="vertAlignmentEnum" use="required" />
	</xsd:complexType>
	<xsd:complexType name="propertyType">
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="value" type="xsd:string" use="required" />
	</xsd:complexType>
	<xsd:complexType name="imageType">
		<xsd:attribute name="imageset" type="xsd:string" use="required" />
		<xsd:attribute name="image" type="xsd:string" use="required" />
	</xsd:complexType>
    <xsd:complexType name="frameImageType">
        <xsd:attribute name="type" type="frameImageComponentEnum" use="required" />
        <xsd:attribute name="imageset" type="xsd:string" use="required" />
        <xsd:attribute name="image" type="xsd:string" use="required" />
    </xsd:complexType>
	<xsd:complexType name="componentAreaType">
        <xsd:choice>
            <xsd:sequence>
                <xsd:element name="Dim" type="dimensionType" minOccurs="4" maxOccurs="4" />
            </xsd:sequence>
            <xsd:element name="AreaProperty" type="settingByPropertyType" />
        </xsd:choice>
	</xsd:complexType>
	<xsd:complexType name="dimensionType">
		<xsd:choice>
			<xsd:element name="UnifiedDim" type="unifiedDimType" />
			<xsd:element name="AbsoluteDim" type="absoluteDimType" />
			<xsd:element name="ImageDim" type="imageDimType" />
            <xsd:element name="WidgetDim" type="widgetDimType" />
            <xsd:element name="FontDim" type="fontDimType" />
            <xsd:element name="PropertyDim" type="propertyDimType" />
		</xsd:choice>
		<xsd:attribute name="type" type="dimensionTypeEnum" use="required" />
	</xsd:complexType>
    <xsd:complexType name="fontDimType">
        <xsd:sequence>
            <xsd:element name="DimOperator" type="dimensionOperatorType" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
        <xsd:attribute name="widget" type="xsd:string" use="optional" default="" />
        <xsd:attribute name="font" type="xsd:string" use="optional" default="" />
        <xsd:attribute name="string" type="xsd:string" use="optional" default="" />
        <xsd:attribute name="type" type="fontMetricTypeEnum" use="required" />
        <xsd:attribute name="padding" type="xsd:decimal" use="optional" default="0" />
    </xsd:complexType>
    <xsd:complexType name="propertyDimType">
        <xsd:sequence>
            <xsd:element name="DimOperator" type="dimensionOperatorType" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
        <xsd:attribute name="widget" type="xsd:string" use="optional" default="" />
        <xsd:attribute name="name" type="xsd:string" use="required" />
    </xsd:complexType>
	<xsd:complexType name="unifiedDimType">
        <xsd:sequence>
            <xsd:element name="DimOperator" type="dimensionOperatorType" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
		<xsd:attribute name="scale" type="xsd:decimal" use="optional" default="0" />
		<xsd:attribute name="offset" type="xsd:integer" use="optional" default="0" />
		<xsd:attribute name="type" type="dimensionTypeEnum" use="required" />
	</xsd:complexType>
	<xsd:complexType name="absoluteDimType">
        <xsd:sequence>
            <xsd:element name="DimOperator" type="dimensionOperatorType" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
		<xsd:attribute name="value" type="xsd:decimal" use="optional" default="0" />
	</xsd:complexType>
	<xsd:complexType name="imageDimType">
        <xsd:sequence>
            <xsd:element name="DimOperator" type="dimensionOperatorType" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
		<xsd:attribute name="imageset" type="xsd:string" use="required" />
		<xsd:attribute name="image" type="xsd:string" use="required" />
		<xsd:attribute name="dimension" type="dimensionTypeEnum" use="required" />
	</xsd:complexType>
	<xsd:complexType name="widgetDimType">
        <xsd:sequence>
            <xsd:element name="DimOperator" type="dimensionOperatorType" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
		<xsd:attribute name="widget" type="xsd:string" use="optional" default="" />
		<xsd:attribute name="dimension" type="dimensionTypeEnum" use="required" />
	</xsd:complexType>
    <xsd:complexType name="settingByPropertyType">
        <xsd:attribute name="name" type="xsd:string" use="required" />
    </xsd:complexType>
	<xsd:complexType name="colourRectType">
		<xsd:attribute name="topLeft" type="colourValType" use="required" />
		<xsd:attribute name="topRight" type="colourValType" use="required" />
		<xsd:attribute name="bottomLeft" type="colourValType" use="required" />
		<xsd:attribute name="bottomRight" type="colourValType" use="required" />
	</xsd:complexType>
	<xsd:simpleType name="colourValType">
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="[a-fA-F0-9]{8}" />
		</xsd:restriction>
	</xsd:simpleType>
    <xsd:complexType name="textStringType">
        <xsd:attribute name="string" type="xsd:string" use="optional" default="" />
        <xsd:attribute name="font" type="xsd:string" use="optional" default="" />
    </xsd:complexType>
    <xsd:complexType name="dimensionOperatorType">
        <xsd:choice>
            <xsd:element name="UnifiedDim" type="unifiedDimType" />
            <xsd:element name="AbsoluteDim" type="absoluteDimType" />
            <xsd:element name="ImageDim" type="imageDimType" />
            <xsd:element name="WidgetDim" type="widgetDimType" />
            <xsd:element name="FontDim" type="fontDimType" />
            <xsd:element name="PropertyDim" type="propertyDimType" />
        </xsd:choice>
        <xsd:attribute name="op" type="dimensionOperatorEnum" use="required" />
    </xsd:complexType>
	<xsd:simpleType name="dimensionTypeEnum">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="LeftEdge" />
			<xsd:enumeration value="TopEdge" />
			<xsd:enumeration value="RightEdge" />
			<xsd:enumeration value="BottomEdge" />
			<xsd:enumeration value="XPosition" />
			<xsd:enumeration value="YPosition" />
			<xsd:enumeration value="Width" />
			<xsd:enumeration value="Height" />
			<xsd:enumeration value="XOffset" />
			<xsd:enumeration value="YOffset" />
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="vertFormatEnum">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="TopAligned" />
			<xsd:enumeration value="CentreAligned" />
			<xsd:enumeration value="BottomAligned" />
			<xsd:enumeration value="Stretched" />
			<xsd:enumeration value="Tiled" />
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="horzFormatEnum">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="LeftAligned" />
			<xsd:enumeration value="CentreAligned" />
			<xsd:enumeration value="RightAligned" />
			<xsd:enumeration value="Stretched" />
			<xsd:enumeration value="Tiled" />
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="vertAlignmentEnum">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="TopAligned" />
			<xsd:enumeration value="CentreAligned" />
			<xsd:enumeration value="BottomAligned" />
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="horzAlignmentEnum">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="LeftAligned" />
			<xsd:enumeration value="CentreAligned" />
			<xsd:enumeration value="RightAligned" />
		</xsd:restriction>
	</xsd:simpleType>
    <xsd:simpleType name="horzTextFormatEnum">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="LeftAligned" />
            <xsd:enumeration value="RightAligned" />
            <xsd:enumeration value="CentreAligned" />
            <xsd:enumeration value="Justified" />
            <xsd:enumeration value="WordWrapLeftAligned" />
            <xsd:enumeration value="WordWrapRightAligned" />
            <xsd:enumeration value="WordWrapCentreAligned" />
            <xsd:enumeration value="WordWrapJustified" />
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="vertTextFormatEnum">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="TopAligned" />
            <xsd:enumeration value="BottomAligned" />
            <xsd:enumeration value="CentreAligned" />
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="propertyTypeEnum">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="Generic" />
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="fontMetricTypeEnum">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="LineSpacing" />
            <xsd:enumeration value="Baseline" />
            <xsd:enumeration value="HorzExtent" />
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="dimensionOperatorEnum">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="Noop" />
            <xsd:enumeration value="Add" />
            <xsd:enumeration value="Subtract" />
            <xsd:enumeration value="Multiply" />
            <xsd:enumeration value="Divide" />
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="frameImageComponentEnum">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="Background" />
            <xsd:enumeration value="TopLeftCorner" />
            <xsd:enumeration value="TopRightCorner" />
            <xsd:enumeration value="BottomLeftCorner" />
            <xsd:enumeration value="BottomRightCorner" />
            <xsd:enumeration value="LeftEdge" />
            <xsd:enumeration value="RightEdge" />
            <xsd:enumeration value="TopEdge" />
            <xsd:enumeration value="BottomEdge" />
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>