<?xml version="1.0" encoding="UTF-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="ProjectGui">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="SchemaVersion" type="xs:string" />
        <xs:element name="Header" type="xs:string" />

        <!-- specific setting for windows view pool -->
        <xs:element minOccurs="0" maxOccurs="1" name="ViewPool" type="ViewPoolType">
        </xs:element>

        <!-- specific setting for other SECTreeCtrl like register, watch window etc. -->
        <xs:element minOccurs="0" maxOccurs="1" name="SECTreeCtrl">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" maxOccurs="unbounded" name="View">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="WinId" type="xs:int"/>
                    <xs:element name="ViewName" type="xs:string"/>
                    <xs:element name="TableColWidths" type="xs:string"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>

        <!-- specific setting for other CTreeListPane (e.g. CSymPane, CCallstackPane) which do not belong to the View Pool -->
        <xs:element minOccurs="0" maxOccurs="1" name="TreeListPane">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" maxOccurs="unbounded" name="View">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="WinId" type="xs:int"/>
                    <xs:element name="ViewName" type="xs:string"/>
                    <xs:element name="UserString" type="xs:string" />
                    <xs:element name="TableColWidths" type="xs:string"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>

        <!-- specific setting for other CRtePane -->
        <xs:element minOccurs="0" maxOccurs="1" name="RtePane">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="WinId" type="xs:int"/>
              <xs:element name="ViewName" type="xs:string"/>
              <xs:element name="UserString" type="xs:string" />
              <xs:element name="TableColWidths" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>

        <!-- specific settings for different windows like LA etc. -->
        <xs:element minOccurs="0" maxOccurs="1" name="WindowSettings">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" maxOccurs="1" name="LogicAnalizer">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="ShowLACursor" type="switcher" default ="1"/>
                    <xs:element name="ShowSignalInfo" type="switcher" default ="1"/>
                    <xs:element name="ShowCycles" type="switcher" default ="0"/>
                    <xs:element name="LeftSideBarSize" type="xs:int" default ="0"/>
                    <xs:element name="TimeBaseIndex" type="xs:int" default ="0"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>

        <xs:element minOccurs="0" maxOccurs="1" name="WinLayoutEx">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="sActiveDebugView" type="xs:string"/>
              <xs:element minOccurs="0" maxOccurs="1" name="WindowPosition" type="WindowPlacement"/>
              <xs:element minOccurs="0" maxOccurs="unbounded" name="MDIClientArea" type="MDIClientAreaType"/>
              <xs:element minOccurs="0" maxOccurs="unbounded" name="ViewEx">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="ViewType" type="xs:integer" />
                    <xs:element name="ViewName" type="xs:string" />
                    <xs:element minOccurs="0" maxOccurs="unbounded" name="Window" type="WinLayParType"/>
                    <xs:element name="DockMan" type="HexBinEx"/>
                    <xs:element minOccurs="0" maxOccurs="unbounded" name="ToolBar" type="ToolBarType"/>
                    <xs:element name="ControlBarsSummary" type="CtrlBarSumType"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        
        <xs:element minOccurs="0" maxOccurs="1" name="AlienFiles">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" maxOccurs="unbounded" name="Doc">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Name" type="xs:string" />
                    <xs:element name="ColumnNumber" type="xs:unsignedByte" />
                    <xs:element name="TopLine" type="xs:unsignedInt" />
                    <xs:element name="CurrentLine" type="xs:unsignedInt" />
                    <xs:element name="Folding" type="xs:integer" />
                    <xs:element name="ContractedFolders" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        
        <xs:element minOccurs="0" maxOccurs="unbounded" name="MDIGroups" type="MDIGroupsType"/>

        <xs:element minOccurs="0" maxOccurs="unbounded" name="Bookmarks">
          <xs:complexType>
            <xs:sequence>
              <!--filename and line number seperated by blank-->
              <xs:element name="ListItem" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>

      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!--types used by ProjectGui-->
  <!--type used by View Pool -->
  <xs:complexType name="ViewPoolType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="View">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ViewName" type="xs:string" />
            <xs:element minOccurs="0" maxOccurs="1" name="UserString" type="xs:string" />
            <xs:element name="PropColWidth" type="xs:integer" />
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Table">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="TablePath" type="xs:string" />
                  <!-- Column width of the table are separated by blank, e.g. 50 20 112 means a table with 3 columns and the width 50, 20 and 112 -->
                  <xs:element name="TableColWidths" type="xs:string" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="WinLayParType">
    <xs:sequence>
      <xs:element name="RegID" type="xs:string" />
      <xs:element name="PaneID" type="xs:integer" />
      <xs:element name="IsVisible" type="xs:integer" />
      <xs:element name="IsFloating" type="xs:integer" />
      <xs:element name="IsTabbed" type="xs:integer" />
      <xs:element name="IsActivated" type="xs:integer" />
      <xs:element name="MRUWidth" type="xs:integer" />
      <xs:element name="PinState" type="xs:integer" />
      <xs:element name="RecentFrameAlignment" type="xs:integer" />
      <xs:element name="RecentRowIndex" type="xs:integer" />
      <xs:element name="RectRecentDocked" type="HexBinEx" />
      <xs:element name="RectRecentFloat" type="HexBinEx" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ToolBarType">
    <xs:sequence>
      <xs:element name="RegID" type="xs:string" />
      <xs:element name="Name" type="xs:string" />
      <xs:element name="Buttons" type="HexBinEx" />
      <xs:element name="OriginalItems" type="HexBinEx" />
      <xs:element name="OrigResetItems" type="HexBinEx" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ToolBarParType">
    <xs:sequence>
      <xs:element name="CommandsUsage" type="HexBinEx" />
      <xs:element name="LargeIcons" type="xs:integer" />
      <xs:element name="MenuAnimation" type="xs:integer" />
      <xs:element name="MenuShadows" type="xs:integer" />
      <xs:element name="RecentlyUsedMenus" type="xs:integer" />
      <xs:element name="ShortcutKeys" type="xs:integer" />
      <xs:element name="ShowAllMenusAfterDelay" type="xs:integer" />
      <xs:element name="Tooltips" type="xs:integer" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="CtrlBarSumType">
    <xs:sequence>
      <xs:element name="Bars" type="xs:integer" />
      <xs:element name="ScreenCX" type="xs:integer" />
      <xs:element name="ScreenCY" type="xs:integer" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="MDIClientAreaType">
    <xs:sequence>
      <xs:element name="RegID" type="xs:integer" />
      <xs:element name="MDITabState" type="HexBinEx" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="MDIGroupsType">
    <xs:sequence>
      <xs:element name="Orientation" type="xs:integer" />
      <xs:element name="ActiveMDIGroup" type="xs:integer" />
      <xs:element minOccurs="0" maxOccurs="unbounded" name="MDIGroup">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Size" type="xs:integer" />
            <xs:element name="ActiveTab" type="xs:integer" />
              <xs:element minOccurs="0" maxOccurs="unbounded" name="Doc">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Name" type="xs:string" />
                    <xs:element name="ColumnNumber" type="xs:unsignedByte" />
                    <xs:element name="TopLine" type="xs:unsignedInt" />
                    <xs:element name="CurrentLine" type="xs:unsignedInt" />
                    <xs:element minOccurs="0" maxOccurs="1" name="PaneID" type="xs:integer" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="WindowPlacement">
    <xs:sequence>
      <xs:element name="length" type="xs:unsignedInt" />
      <xs:element name="flags" type="xs:unsignedInt" />
      <xs:element name="showCmd" type="xs:unsignedInt" />
      <xs:element name="MinPosition" type="Position"/>
      <xs:element name="MaxPosition" type="Position"/>
      <xs:element name="NormalPosition" type="Rectangle"/>
      <xs:element minOccurs="0" maxOccurs="1" name="MacDevice" type="Rectangle"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Rectangle">
    <xs:sequence>
      <xs:element name="Top" type="xs:long" />
      <xs:element name="Left" type="xs:long" />
      <xs:element name="Right" type="xs:long" />
      <xs:element name="Bottom" type="xs:long" />
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="Position">
    <xs:sequence>
      <xs:element name="xPos" type="xs:long" />
      <xs:element name="yPos" type="xs:long" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="HexBinEx">
    <xs:sequence>
      <xs:element name="Len" type="xs:integer" />
      <xs:element name="Data" type="xs:hexBinary" />
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="switcher">
    <!--one bit value: 0|1 -->
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="1"/>
    </xs:restriction>
  </xs:simpleType>
  
</xs:schema>