<?xml version="1.1" 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.

-->

<Form version="1.3" maxVersion="1.3" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
  <AuxValues>
    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
  </AuxValues>

  <Layout>
    <DimensionLayout dim="0">
      <Group type="103" groupAlignment="0" attributes="0">
          <Group type="102" attributes="0">
              <EmptySpace max="-2" attributes="0"/>
              <Group type="103" groupAlignment="0" attributes="0">
                  <Group type="102" attributes="0">
                      <Group type="103" groupAlignment="0" attributes="0">
                          <Component id="localeLabel" alignment="0" min="-2" max="-2" attributes="0"/>
                          <Component id="languageLabel" alignment="0" min="-2" max="-2" attributes="0"/>
                          <Component id="countryLabel" alignment="0" min="-2" max="-2" attributes="0"/>
                          <Component id="variantLabel" alignment="0" min="-2" max="-2" attributes="0"/>
                      </Group>
                      <EmptySpace max="-2" attributes="0"/>
                      <Group type="103" groupAlignment="0" attributes="0">
                          <Component id="languageCombo" alignment="0" pref="297" max="32767" attributes="0"/>
                          <Component id="countryCombo" alignment="0" pref="297" max="32767" attributes="0"/>
                          <Component id="variantCombo" alignment="0" pref="297" max="32767" attributes="0"/>
                          <Component id="localeText" alignment="0" pref="297" max="32767" attributes="0"/>
                      </Group>
                  </Group>
                  <Component id="jScrollPane1" alignment="0" pref="424" max="32767" attributes="0"/>
                  <Component id="supportedLabel" alignment="0" min="-2" max="-2" attributes="0"/>
              </Group>
              <EmptySpace max="-2" attributes="0"/>
          </Group>
      </Group>
    </DimensionLayout>
    <DimensionLayout dim="1">
      <Group type="103" groupAlignment="0" attributes="0">
          <Group type="102" attributes="0">
              <EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
              <Group type="103" groupAlignment="3" attributes="0">
                  <Component id="localeLabel" alignment="3" min="-2" max="-2" attributes="0"/>
                  <Component id="localeText" alignment="3" min="-2" max="-2" attributes="0"/>
              </Group>
              <EmptySpace min="-2" max="-2" attributes="0"/>
              <Group type="103" groupAlignment="3" attributes="0">
                  <Component id="languageLabel" alignment="3" min="-2" max="-2" attributes="0"/>
                  <Component id="languageCombo" alignment="3" min="-2" max="-2" attributes="0"/>
              </Group>
              <EmptySpace min="-2" max="-2" attributes="0"/>
              <Group type="103" groupAlignment="3" attributes="0">
                  <Component id="countryLabel" alignment="3" min="-2" max="-2" attributes="0"/>
                  <Component id="countryCombo" alignment="3" min="-2" max="-2" attributes="0"/>
              </Group>
              <EmptySpace min="-2" max="-2" attributes="0"/>
              <Group type="103" groupAlignment="3" attributes="0">
                  <Component id="variantLabel" alignment="3" min="-2" max="-2" attributes="0"/>
                  <Component id="variantCombo" alignment="3" min="-2" max="-2" attributes="0"/>
              </Group>
              <EmptySpace min="-2" pref="17" max="-2" attributes="0"/>
              <Component id="supportedLabel" min="-2" max="-2" attributes="0"/>
              <EmptySpace max="-2" attributes="0"/>
              <Component id="jScrollPane1" pref="128" max="32767" attributes="0"/>
              <EmptySpace max="-2" attributes="0"/>
          </Group>
      </Group>
    </DimensionLayout>
  </Layout>
  <SubComponents>
    <Component class="javax.swing.JLabel" name="languageLabel">
      <Properties>
        <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
          <Connection code="languageCombo" type="code"/>
        </Property>
        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
          <ResourceString bundle="org/netbeans/modules/properties/Bundle.properties" key="CTL_LanguageCode" replaceFormat="NbBundle.getBundle(LocalePanel.class).getString(&quot;{key}&quot;)"/>
        </Property>
      </Properties>
      <AuxValues>
        <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
      </AuxValues>
    </Component>
    <Component class="javax.swing.JComboBox" name="languageCombo">
      <Properties>
        <Property name="editable" type="boolean" value="true"/>
        <Property name="renderer" type="javax.swing.ListCellRenderer" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
          <Connection code="new NbBasicComboBoxRenderer() {&#xa;    public Component getListCellRendererComponent(&#xa;        JList list,&#xa;        Object value,            // value to display&#xa;        int index,               // cell index&#xa;        boolean isSelected,      // is the cell selected&#xa;        boolean cellHasFocus)    // the list and the cell have the focus&#xa;    {&#xa;        JLabel label = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);&#xa;&#xa;        if(&quot;&quot;.equals(value.toString())) // NOI18N&#xa;        label.setText(&quot;&quot;); // NOI18N&#xa;        else&#xa;        label.setText(value.toString() + &quot; - &quot; + new Locale((String)value, &quot;&quot;, &quot;&quot;).getDisplayLanguage()); // NOI18N&#xa;&#xa;        return label;&#xa;    }&#xa;}" type="code"/>
        </Property>
      </Properties>
      <Events>
        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="languageComboActionPerformed"/>
      </Events>
      <AuxValues>
        <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JComboBox(Locale.getISOLanguages())"/>
        <AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="// Insert empty string at the beginning.&#xa;languageCombo.insertItemAt(&quot;&quot;, 0); // NOI18N&#xa;languageCombo.setSelectedIndex(0);"/>
      </AuxValues>
    </Component>
    <Component class="javax.swing.JLabel" name="countryLabel">
      <Properties>
        <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
          <Connection code="countryCombo" type="code"/>
        </Property>
        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
          <ResourceString bundle="org/netbeans/modules/properties/Bundle.properties" key="CTL_CountryCode" replaceFormat="NbBundle.getBundle(LocalePanel.class).getString(&quot;{key}&quot;)"/>
        </Property>
      </Properties>
      <AuxValues>
        <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
      </AuxValues>
    </Component>
    <Component class="javax.swing.JComboBox" name="countryCombo">
      <Properties>
        <Property name="editable" type="boolean" value="true"/>
        <Property name="renderer" type="javax.swing.ListCellRenderer" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
          <Connection code="new NbBasicComboBoxRenderer() {&#xa;    public Component getListCellRendererComponent(&#xa;        JList list,&#xa;        Object value,            // value to display&#xa;        int index,               // cell index&#xa;        boolean isSelected,      // is the cell selected&#xa;        boolean cellHasFocus)    // the list and the cell have the focus&#xa;    {&#xa;        JLabel label = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);&#xa;&#xa;        if(&quot;&quot;.equals(value.toString())) // NOI18N&#xa;        label.setText(&quot;&quot;); // NOI18N&#xa;        else&#xa;        label.setText(value.toString() + &quot; - &quot; + new Locale(&quot;&quot;, (String)value, &quot;&quot;).getDisplayCountry()); // NOI18N&#xa;&#xa;        return label;&#xa;    }&#xa;}" type="code"/>
        </Property>
      </Properties>
      <Events>
        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="countryComboActionPerformed"/>
      </Events>
      <AuxValues>
        <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JComboBox(Locale.getISOCountries())"/>
        <AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="// Insert empty string at the beginning.&#xa;countryCombo.insertItemAt(&quot;&quot;, 0); // NOI18N&#xa;countryCombo.setSelectedIndex(0);"/>
      </AuxValues>
    </Component>
    <Component class="javax.swing.JLabel" name="variantLabel">
      <Properties>
        <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
          <Connection code="variantCombo" type="code"/>
        </Property>
        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
          <ResourceString bundle="org/netbeans/modules/properties/Bundle.properties" key="CTL_Variant" replaceFormat="NbBundle.getBundle(LocalePanel.class).getString(&quot;{key}&quot;)"/>
        </Property>
      </Properties>
      <AuxValues>
        <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
      </AuxValues>
    </Component>
    <Component class="javax.swing.JComboBox" name="variantCombo">
      <Properties>
        <Property name="editable" type="boolean" value="true"/>
        <Property name="renderer" type="javax.swing.ListCellRenderer" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
          <Connection code="new NbBasicComboBoxRenderer() {&#xa;    public Component getListCellRendererComponent(&#xa;        JList list,&#xa;        Object value,            // value to display&#xa;        int index,               // cell index&#xa;        boolean isSelected,      // is the cell selected&#xa;        boolean cellHasFocus)    // the list and the cell have the focus&#xa;    {&#xa;        JLabel label = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);&#xa;&#xa;        if(&quot;&quot;.equals(value.toString())) // NOI18N&#xa;        label.setText(&quot;&quot;); // NOI18N&#xa;        else&#xa;        label.setText(value.toString() + &quot; - &quot; + new Locale(&quot;&quot;, &quot;&quot;, (String)value).getDisplayVariant()); // NOI18N&#xa;&#xa;        return label;&#xa;    }&#xa;}" type="code"/>
        </Property>
      </Properties>
      <Events>
        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="variantComboActionPerformed"/>
      </Events>
      <AuxValues>
        <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JComboBox(new String[] {&#xa;    &quot;B&quot;, // Bokmal // NOI18N&#xa;    &quot;EURO&quot;, // EURO // NOI18N&#xa;    &quot;NY&quot; // Nynorsk // NOI18N&#xa;});&#xa;"/>
        <AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="// Insert empty string at the beginning.&#xa;variantCombo.insertItemAt(&quot;&quot;, 0); // NOI18N&#xa;variantCombo.setSelectedIndex(0);"/>
      </AuxValues>
    </Component>
    <Component class="javax.swing.JLabel" name="supportedLabel">
      <Properties>
        <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
          <Connection code="supportedList" type="code"/>
        </Property>
        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
          <ResourceString bundle="org/netbeans/modules/properties/Bundle.properties" key="CTL_SupportedLocales" replaceFormat="NbBundle.getBundle(LocalePanel.class).getString(&quot;{key}&quot;)"/>
        </Property>
      </Properties>
      <AuxValues>
        <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
      </AuxValues>
    </Component>
    <Container class="javax.swing.JScrollPane" name="jScrollPane1">

      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
      <SubComponents>
        <Component class="javax.swing.JList" name="supportedList">
          <Properties>
            <Property name="selectionMode" type="int" value="0"/>
            <Property name="cellRenderer" type="javax.swing.ListCellRenderer" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
              <Connection code="new DefaultListCellRenderer() {&#xa;    public Component getListCellRendererComponent(&#xa;           JList list,&#xa;           Object value,            // value to display&#xa;           int index,               // cell index&#xa;           boolean isSelected,      // is the cell selected&#xa;           boolean cellHasFocus)    // the list and the cell have the focus&#xa;    {    &#xa;        JLabel label = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);&#xa;&#xa;        Locale locale = (Locale)value;&#xa;        &#xa;        label.setText(locale.toString() +&#xa;            (locale.getLanguage().equals(&quot;&quot;) ? &quot;&quot; : &quot; - &quot; + locale.getDisplayLanguage()) + // NOI18N&#xa;            (locale.getCountry().equals(&quot;&quot;) ? &quot;&quot; : &quot; / &quot; + locale.getDisplayCountry()) + // NOI18N&#xa;            (locale.getVariant().equals(&quot;&quot;) ? &quot;&quot; : &quot; / &quot; + locale.getDisplayVariant()) // NOI18N&#xa;        );&#xa;        &#xa;        return label;&#xa;    }&#xa;}" type="code"/>
            </Property>
          </Properties>
          <Events>
            <EventHandler event="valueChanged" listener="javax.swing.event.ListSelectionListener" parameters="javax.swing.event.ListSelectionEvent" handler="supportedListValueChanged"/>
          </Events>
          <AuxValues>
            <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JList(supportedLocales);"/>
          </AuxValues>
        </Component>
      </SubComponents>
    </Container>
    <Component class="javax.swing.JLabel" name="localeLabel">
      <Properties>
        <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
          <Connection component="localeText" type="bean"/>
        </Property>
        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
          <ResourceString bundle="org/netbeans/modules/properties/Bundle.properties" key="CTL_Locale" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
        </Property>
      </Properties>
      <AuxValues>
        <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
      </AuxValues>
    </Component>
    <Component class="javax.swing.JTextField" name="localeText">
      <Properties>
        <Property name="editable" type="boolean" value="false"/>
      </Properties>
      <Events>
        <EventHandler event="focusGained" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="localeTextFocusGained"/>
      </Events>
      <AuxValues>
        <AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="localeText.selectAll();"/>
      </AuxValues>
    </Component>
  </SubComponents>
</Form>
