<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	
	<xs:element name="UI">
		<xs:complexType>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="actions">
					<xs:complexType>
						<xs:sequence maxOccurs="unbounded">
							<xs:element name="action">
								<xs:complexType>
									<xs:sequence maxOccurs="unbounded">
										<xs:element name="property" type="property" />
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="author" type="xs:string" />
				<xs:element name="class" type="xs:string" />
				<xs:element name="comment" type="xs:string" />
				<xs:element name="connections">
					<xs:complexType>
						<xs:sequence maxOccurs="unbounded">
							<xs:element name="connection">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="sender" type="xs:string" />
										<xs:element name="signal" type="xs:string" />
										<xs:element name="receiver" type="xs:string" />
										<xs:element name="slot" type="xs:string" />
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="customWidgets" type="xs:string" />
				<xs:element name="exportmacro" type="xs:string" />
				<xs:element name="forwards">
					<xs:complexType>
						<xs:sequence maxOccurs="unbounded">
							<xs:element name="forward" type="xs:string" />
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="images">
					<xs:complexType>
						<xs:sequence maxOccurs="unbounded">
							<xs:element name="image">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="data">
											<xs:complexType>
												<xs:sequence />
												<xs:attribute name="format" type="xs:string" />
												<xs:attribute name="length" type="xs:integer" />
											</xs:complexType>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="name" type="xs:string" />
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="includes">
					<xs:complexType>						
						<xs:sequence maxOccurs="unbounded">
							<xs:element name="include">
								<xs:complexType>
									<xs:simpleContent>
										<xs:extension base="xs:string">
											<xs:attribute name="location" type="xs:string" />
											<xs:attribute name="impldecl" type="xs:string" />
										</xs:extension>
									</xs:simpleContent>
								</xs:complexType>
							</xs:element>									
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="layoutDefaults">
					<xs:complexType>
						<xs:sequence />
						<xs:attribute name="spacing" type="xs:integer" />
						<xs:attribute name="margin" type="xs:integer" />
					</xs:complexType>
				</xs:element>
				<xs:element name="layoutFunctions">
					<xs:complexType>
						<xs:sequence />
						<xs:attribute name="spacing" type="xs:string" />
						<xs:attribute name="margin" type="xs:string" />
					</xs:complexType>
				</xs:element>
				<xs:element name="menubar">
					<xs:complexType>
						<xs:sequence>
							<xs:choice maxOccurs="unbounded">
								<xs:element name="property" type="property" />
								<xs:element name="item">
									<xs:complexType>
										<xs:sequence>
											<xs:choice maxOccurs="unbounded">
												<xs:element name="action">
													<xs:complexType>
														<xs:sequence />
														<xs:attribute name="name" type="xs:string" />
													</xs:complexType>
												</xs:element>
												<xs:element name="item">
												</xs:element>
												<xs:element name="separator" type="xs:string" />
											</xs:choice>
										</xs:sequence>
										<xs:attribute name="name" type="xs:string" />
										<xs:attribute name="text" type="xs:string" />
									</xs:complexType>
								</xs:element>
							</xs:choice>
							<xs:element name="class" type="xs:string" />
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="pixmapfunction" type="xs:string" />
				<xs:element name="signals">
					<xs:complexType>
						<xs:sequence maxOccurs="unbounded">
							<xs:element name="signal" type="xs:string" />
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="slots">
					<xs:complexType>						
						<xs:sequence maxOccurs="unbounded">
							<xs:element name="slot">
								<xs:complexType>
									<xs:simpleContent>
										<xs:extension base="xs:string">
											<xs:attribute name="access" type="xs:string" />
											<xs:attribute name="specifier" type="xs:string" />
											<xs:attribute name="language" type="xs:string" />
											<xs:attribute name="returnType" type="xs:string" />
										</xs:extension>
									</xs:simpleContent>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="tabstops">
					<xs:complexType>
						<xs:sequence maxOccurs="unbounded">
							<xs:element name="tabstop" type="xs:string" />
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="toolbars">
					<xs:complexType>
						<xs:sequence maxOccurs="unbounded">
							<xs:element name="toolbar">
								<xs:complexType>
									<xs:choice maxOccurs="unbounded">
										<xs:element name="property" type="property" />
										<xs:element name="action">
											<xs:complexType>
												<xs:sequence />
												<xs:attribute name="name" type="xs:string" />
											</xs:complexType>
										</xs:element>
										<xs:element name="separator" type="xs:string" />
									</xs:choice>
									<xs:attribute name="dock" type="xs:integer" />
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="variables">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="variable">
								<xs:complexType>
									<xs:sequence />
									<xs:attribute name="access" type="xs:string" />
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="widget" type="widget" />
				<xs:element name="include" type="xs:string" />
				<xs:element name="variable" type="xs:string" />
			</xs:choice>
			<xs:attribute name="version" type="xs:string" />
			<xs:attribute name="stdsetdef" type="xs:integer" />
		</xs:complexType>
	</xs:element>

	<xs:complexType name="layout">
		<xs:choice maxOccurs="unbounded">
			<xs:element name="property" type="property" />
			<xs:element name="widget" type="widget" />
			<xs:element name="spacer" type="spacer" />
		</xs:choice>
	</xs:complexType>
	
	<xs:complexType name="widget">
			<xs:choice maxOccurs="unbounded">
				<xs:element name="class" type="xs:string" />
				<xs:element name="property" type="property" />
				<xs:element name="hbox" type="layout" />
				<xs:element name="vbox" type="layout" />
				<xs:element name="grid" type="layout" />
				<xs:element name="widget" type="widget" />
			</xs:choice>
		<xs:attribute name="class" type="xs:string" />
		<xs:attribute name="row" type="xs:integer" />            <!-- ### remove me -->
		<xs:attribute name="column" type="xs:integer" />         <!-- ### remove me -->
	</xs:complexType>
		
	<xs:complexType name="spacer">
		<xs:sequence maxOccurs="unbounded">
			<xs:element name="property" type="property" />
		</xs:sequence>
		<xs:attribute name="row" type="xs:integer" />            <!-- ### remove me -->
		<xs:attribute name="column" type="xs:integer" />         <!-- ### remove me -->
		<xs:attribute name="rowspan" type="xs:integer" />        <!-- ### remove me -->
		<xs:attribute name="colspan" type="xs:integer" />        <!-- ### remove me -->
	</xs:complexType>

	<xs:complexType name="color">
		<xs:sequence>
			<xs:element name="red" type="xs:integer" />
			<xs:element name="green" type="xs:integer" />
			<xs:element name="blue" type="xs:integer" />
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="colorGroup">
		<xs:choice maxOccurs="unbounded">
			<xs:element name="color" type="color" />
			<xs:element name="pixmap" type="xs:string" />
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="palette">
		<xs:sequence>
			<xs:element name="active" type="colorGroup" />
			<xs:element name="inactive" type="colorGroup" />
			<xs:element name="disabled" type="colorGroup" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="font">
		<xs:sequence>
			<xs:element name="family" type="xs:string" />
			<xs:element name="pointSize" type="xs:integer" />
			<xs:element name="weight" type="xs:integer" />
			<xs:element name="italic" type="xs:boolean" />
			<xs:element name="bold" type="xs:boolean" />
			<xs:element name="underline" type="xs:boolean" />
			<xs:element name="strikeout" type="xs:boolean" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="point">
		<xs:sequence>
			<xs:element name="x" type="xs:integer" />
			<xs:element name="y" type="xs:integer" />
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="rect">
		<xs:sequence>
			<xs:element name="x" type="xs:integer" />
			<xs:element name="y" type="xs:integer" />
			<xs:element name="width" type="xs:integer" />
			<xs:element name="height" type="xs:integer" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="sizePolicy">
		<xs:sequence>
			<xs:element name="hsizetype" type="xs:integer" />
			<xs:element name="vsizetype" type="xs:integer" />
			<xs:element name="horstretch" type="xs:integer" />
			<xs:element name="verstretch" type="xs:integer" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="size">
		<xs:sequence>
			<xs:element name="width" type="xs:integer" />
			<xs:element name="height" type="xs:integer" />
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="date">
		<xs:sequence>
			<xs:element name="year" type="xs:integer" />
			<xs:element name="month" type="xs:integer" />
			<xs:element name="day" type="xs:integer" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="time">
		<xs:sequence>
			<xs:element name="hour" type="xs:integer" />
			<xs:element name="minute" type="xs:integer" />
			<xs:element name="second" type="xs:integer" />
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="dateTime">
		<xs:sequence>
			<xs:element name="hour" type="xs:integer" />
			<xs:element name="minute" type="xs:integer" />
			<xs:element name="second" type="xs:integer" />
			<xs:element name="year" type="xs:integer" />
			<xs:element name="month" type="xs:integer" />
			<xs:element name="day" type="xs:integer" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="property">
		<xs:choice>
			<xs:element name="bool" type="xs:boolean" />
			<xs:element name="color" type="color" />
			<xs:element name="cstring" type="xs:string" />
			<xs:element name="cursor" type="xs:integer" />
			<xs:element name="enum" type="xs:string" />
			<xs:element name="font" type ="font" />
			<xs:element name="iconset" type="xs:string" />
			<xs:element name="palette" type="palette" />
			<xs:element name="point" type="point" />
			<xs:element name="rect" type="rect" />
			<xs:element name="set" type="xs:string" />
			<xs:element name="sizePolicy" type="sizePolicy" />
			<xs:element name="size" type="size" />
			<xs:element name="string" type="xs:string" />
			<xs:element name="number" type="xs:integer" />
			<xs:element name="date" type="date" />
			<xs:element name="time" type="time" />
			<xs:element name="dateTime" type="dateTime" />
		</xs:choice>
		<xs:attribute name="name" type="xs:string" />
		<xs:attribute name="stdset" type="xs:integer" />
	</xs:complexType>
	
</xs:schema>