<?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.
 */
-->
<ui version="4.0">
 <class>RulesDialog</class>
 <widget class="QDialog" name="RulesDialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>551</width>
    <height>451</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Rules</string>
  </property>
  <property name="windowIcon">
   <iconset resource="Resource.qrc">
    <normaloff>:/file/R_DUMMY</normaloff>:/file/R_DUMMY</iconset>
  </property>
  <layout class="QVBoxLayout" name="verticalLayout_3">
   <item>
    <layout class="QHBoxLayout" name="horizontalLayout">
     <item>
      <layout class="QVBoxLayout" name="verticalLayout_2">
       <item>
        <widget class="QLabel" name="label">
         <property name="text">
          <string>Application Rules</string>
         </property>
        </widget>
       </item>
       <item>
        <widget class="QListWidget" name="listWidget"/>
       </item>
      </layout>
     </item>
     <item>
      <layout class="QVBoxLayout" name="verticalLayout">
       <property name="topMargin">
        <number>30</number>
       </property>
       <item>
        <widget class="QPushButton" name="btnApply">
         <property name="text">
          <string>Apply</string>
         </property>
        </widget>
       </item>
       <item>
        <widget class="QPushButton" name="btnUndo">
         <property name="text">
          <string>Undo</string>
         </property>
        </widget>
       </item>
       <item>
        <widget class="QPushButton" name="btnNextSubst">
         <property name="text">
          <string>Next Subst.</string>
         </property>
        </widget>
       </item>
       <item>
        <widget class="QPushButton" name="btnCancel">
         <property name="text">
          <string>Cancel</string>
         </property>
        </widget>
       </item>
       <item>
        <widget class="QPushButton" name="btnOK">
         <property name="text">
          <string>OK</string>
         </property>
        </widget>
       </item>
       <item>
        <spacer name="verticalSpacer">
         <property name="orientation">
          <enum>Qt::Vertical</enum>
         </property>
         <property name="sizeHint" stdset="0">
          <size>
           <width>20</width>
           <height>40</height>
          </size>
         </property>
        </spacer>
       </item>
      </layout>
     </item>
    </layout>
   </item>
  </layout>
 </widget>
 <resources>
  <include location="Resource.qrc"/>
 </resources>
 <connections/>
</ui>
