<?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>BreakpointDialog</class>
 <widget class="QDialog" name="BreakpointDialog">
  <property name="windowModality">
   <enum>Qt::ApplicationModal</enum>
  </property>
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>460</width>
    <height>420</height>
   </rect>
  </property>
  <property name="sizePolicy">
   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
    <horstretch>0</horstretch>
    <verstretch>0</verstretch>
   </sizepolicy>
  </property>
  <property name="minimumSize">
   <size>
    <width>460</width>
    <height>420</height>
   </size>
  </property>
  <property name="maximumSize">
   <size>
    <width>460</width>
    <height>420</height>
   </size>
  </property>
  <property name="windowTitle">
   <string>Breakpoints</string>
  </property>
  <property name="windowIcon">
   <iconset resource="Resource.qrc">
    <normaloff>:/file/R_DUMMY</normaloff>:/file/R_DUMMY</iconset>
  </property>
  <property name="windowOpacity">
   <double>0.000000000000000</double>
  </property>
  <property name="modal">
   <bool>true</bool>
  </property>
  <layout class="QHBoxLayout" name="horizontalLayout">
   <item>
    <widget class="QGroupBox" name="groupBoxBreakpoint">
     <property name="sizePolicy">
      <sizepolicy hsizetype="Fixed" vsizetype="Expanding">
       <horstretch>0</horstretch>
       <verstretch>0</verstretch>
      </sizepolicy>
     </property>
     <property name="font">
      <font>
       <weight>50</weight>
       <bold>false</bold>
      </font>
     </property>
     <property name="title">
      <string>Display Breakpoints</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
     </property>
     <layout class="QVBoxLayout" name="verticalLayout_2">
      <item>
       <widget class="QCheckBox" name="chkDisplayAfterParsing">
        <property name="text">
         <string>Display after parsing</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QCheckBox" name="chkDisplayAfterBinding">
        <property name="text">
         <string>Display after binding</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QCheckBox" name="chkDisplayAfterTransformation">
        <property name="text">
         <string>Display after transformation</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QCheckBox" name="chkDisplayAfterNormalization">
        <property name="text">
         <string>Display after normalization</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QCheckBox" name="chkDisplayAfterSemanticQueryOpt">
        <property name="text">
         <string>Display after semantic query optimization</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QCheckBox" name="chkDisplayAfterAnalysis">
        <property name="text">
         <string>Display after analysis</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QCheckBox" name="chkDisplayAfterOptimization1">
        <property name="text">
         <string>Display after optimization (pass 1)</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QCheckBox" name="chkDisplayAfterOptimization2">
        <property name="text">
         <string>Display after optimization (pass 2)</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QCheckBox" name="chkDisplayAfterPrecodegen">
        <property name="text">
         <string>Display after pre-codegen</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QCheckBox" name="chkDisplayAfterCodegen">
        <property name="text">
         <string>Display after codegen</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QCheckBox" name="chkDisplayAfterTdbGeneration">
        <property name="text">
         <string>Display after TDB generation</string>
        </property>
       </widget>
      </item>
     </layout>
    </widget>
   </item>
   <item>
    <layout class="QVBoxLayout" name="verticalLayout">
     <item>
      <spacer name="verticalSpacer_2">
       <property name="orientation">
        <enum>Qt::Vertical</enum>
       </property>
       <property name="sizeType">
        <enum>QSizePolicy::Fixed</enum>
       </property>
       <property name="sizeHint" stdset="0">
        <size>
         <width>20</width>
         <height>10</height>
        </size>
       </property>
      </spacer>
     </item>
     <item>
      <widget class="QPushButton" name="bkptOK">
       <property name="text">
        <string>OK</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QPushButton" name="bkptCancel">
       <property name="text">
        <string>Cancel</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QPushButton" name="bkptSA">
       <property name="text">
        <string>SelectAll</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QPushButton" name="bkptClrA">
       <property name="text">
        <string>ClearAll</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>
 </widget>
 <resources>
  <include location="Resource.qrc"/>
 </resources>
 <connections/>
</ui>
