<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:include schemaLocation="Base.xsd"/>
  <xs:include schemaLocation="Buttons.xsd"/>


  <xs:complexType name="FieldsSheet_GroupFieldType">
    <xs:sequence>
      <xs:group ref="FieldsSheet_FieldsSequence" minOccurs="1" maxOccurs="unbounded" />
      <xs:element name="rules" minOccurs="0" maxOccurs="1">
        <xs:annotation>
          <xs:documentation xml:lang="ru-ru">
            События группирующего элемента.
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="rule" minOccurs="0" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation xml:lang="ru-ru">
                  Событие группирующего элемента.
                </xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:complexContent>
                  <xs:restriction base="EventItemType">
                    <xs:attribute name="event" use="required">
                      <xs:simpleType>
                        <xs:union memberTypes="FieldsSheet_Field_Events"/>
                      </xs:simpleType>
                    </xs:attribute>
                  </xs:restriction>
                </xs:complexContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
        <xs:unique name="FieldsSheet_GroupField_UniqueRules">
          <xs:selector xpath="rule"/>
          <xs:field xpath="@event"/>
        </xs:unique>
      </xs:element>
    </xs:sequence>
    <xs:attributeGroup ref="FieldsSheet_Field_Attrs"/>
  </xs:complexType>
  
  <xs:group name="FieldsSheet_FieldsSequence">
    <xs:choice>
      <xs:element name="field" type="FieldsSheet_DataFieldType" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation xml:lang="ru-ru">
            Редактор поля табличного листа. Может редактировать либо отображать любые поля таблицы, 
            поддерживать обязательность заполнения, скрываться и показываться при необходимости сложной логики заполнения.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="group" type="FieldsSheet_GroupFieldType" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation xml:lang="ru-ru">
            Группирующий элемент табличного листа. Может скрываться и показываться.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:choice>    
  </xs:group>


  <xs:complexType name="FieldsSheet_DataFieldType">
    <xs:sequence>
      <xs:element ref="buttons" minOccurs="0" maxOccurs="1" />
      <xs:element name="rules" minOccurs="0" maxOccurs="1">
        <xs:annotation>
          <xs:documentation xml:lang="ru-ru">
            События редактора поля.
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="rule" minOccurs="0" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation xml:lang="ru-ru">
                  Событие редактора поля.
                </xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:complexContent>
                  <xs:restriction base="EventItemType">
                    <xs:attribute name="event" use="required">
                      <xs:simpleType>
                        <xs:union memberTypes="FieldsSheet_Field_Events FieldsSheet_DataField_Events"/>
                      </xs:simpleType>
                    </xs:attribute>
                  </xs:restriction>
                </xs:complexContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
        <xs:unique name="FieldsSheet_DataField_UniqueRules">
          <xs:selector xpath="rule"/>
          <xs:field xpath="@event"/>
        </xs:unique>
      </xs:element>
    </xs:sequence>
    <xs:attributeGroup ref="FieldsSheet_Field_Attrs"/>
    <xs:attributeGroup ref="FieldsSheet_DataField_Attrs"/>
  </xs:complexType>

  <xs:attributeGroup name="FieldsSheet_Field_Attrs">
    <xs:attribute name="caption" type="xs:string" use="optional">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Подпись элемента. Если отсутствует, то берется с подписи поля (если не группирующий элемент), иначе будет пустой.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="captionHint" type="xs:string" use="optional">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Подсказка к подписи элемента. Если она отсутствует, то берется с подсказки подписи поля (если не группирующий элемент), иначе будет пустой.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:attributeGroup>
  
  <xs:attributeGroup name="FieldsSheet_DataField_Attrs">
    <xs:attribute name="name" type="xs:string" use="required">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Имя поля таблицы значение которой редактируется.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="breakLine" type="xs:boolean" use="optional" default="true">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Признак необходимости разместить редактор поля на новой линии.
          По умолчанию - false
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="width" type="xs:positiveInteger" use="optional">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Ширина редактора. По умолчанию редактор растягивается на всю доступную ширину.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="height" type="xs:positiveInteger" use="optional">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Высота редактора. По умолчанию для всех типов редакторов 23 пикселя, для многострочных редакторов - 60.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="labelColor" type="Color" use="optional">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Цвет подписи. Если используется, то цветовой индикации обязательности заполнения не будет.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="isShowEditButton" type="xs:boolean" use="optional" default="true">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Признак отображения стандартной кнопки для добавления, редактирования элементов для редактора со списком элементов. 
          По умолчанию - false.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="isShowAddEditButton" type="xs:boolean" use="optional">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Добавляет к контролу кнопки для возможности редактирования и добавления элементов (в основном для combobox элемента).
          По умолчанию false.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="isShowAddButton" type="xs:boolean" use="optional">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Добавляет к контролу кнопки для возможности добавления элементов (в основном для combobox элемента).
          По умолчанию false.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="readonly" type="xs:boolean" use="optional" default="true">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Признак только для чтения. Если отсутствует, то берется из признак readonly у поля таблицы листа.
          По умолчанию - false.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="required" type="xs:boolean" use="optional" default="true">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Признак необходимости ввода значения. Если отсутствует, то берется из признак isNull у поля таблицы листа.
          По умолчанию - false.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="filterRule" type="xs:string" use="optional">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Правило фильтрации для редактора со списком элементов.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="editMask" type="xs:string" use="optional">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Маска редактирования в виде регулярного выражения. Работает для чисел, дат и строк с максимальной длинной до 600 символов.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="errorMessage" type="xs:string" use="optional">
      <xs:annotation>
        <xs:documentation xml:lang="ru-ru">
          Текст ошибки, при нарушении условий маски редактирования.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:attributeGroup>

  <xs:simpleType name="FieldsSheet_DataField_Events">
    <xs:restriction base="xs:string">
      <xs:enumeration value="OnGetIsReadOnly">
        <xs:annotation>
          <xs:documentation xml:lang="ru-ru">
            Событие наступает при проверке допустимости ввода в редактор. 
            Должно вернуть true (только на чтение) или false (можно редактировать).
            Если редактор поля уже доступен только для чтения, то событие не будет вызваться.
            1й параметр - имя поля из атрибута name.
          </xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="OnGetIsRequired">
        <xs:annotation>
          <xs:documentation xml:lang="ru-ru">
            Событие наступает при проверке допустимости пустого значения в редакторе. 
            Должно вернуть true (должно быть значение) или false (допустимо пустое значение).
            Если редактор поля уже является обязательным, то событие не будет вызваться.
            1й параметр - имя поля из атрибута name.
          </xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="FieldsSheet_Field_Events">
    <xs:restriction base="xs:string">
      <xs:enumeration value="OnClick">
        <xs:annotation>
          <xs:documentation xml:lang="ru-ru">
            Не используется.
          </xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="OnGetIsVisible">
        <xs:annotation>
          <xs:documentation xml:lang="ru-ru">
            Событие наступает при проверке видимости. 
            Должно вернуть true (должно быть значение) или false (допустимо пустое значение).
            Если редактор поля уже является обязательным, то событие не будет вызваться.
            1й параметр - имя поля из атрибута name.
          </xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="OnGetCaption">
        <xs:annotation>
          <xs:documentation xml:lang="ru-ru">
            Событие наступает при получении подписи для редактора. Должно вернуть строку.
            1й параметр - имя поля из атрибута name.
            2й параметр - подпись по умолчанию.
          </xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="OnGetCaptionHint">
        <xs:annotation>
          <xs:documentation xml:lang="ru-ru">
            Событие наступает при получении подсказки для подписи редактора. Должно вернуть строку.
            1й параметр - имя поля из атрибута name.
            2й параметр - подсказка подпись по умолчанию.
          </xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>

</xs:schema>
