elements

<factory type="grid" id="statusrow">

<!-- ... -->

  <element>
    <name>label</name>
  </element>

<!-- ... -->

</factory>


x::w::uielements element_factory{
  {
    {"label",
     []
     (const x::w::factory &factory)
     {
         factory->create_label("Label");
     }
    }
  }
};

An element with a name (a named element) invokes the named callback from the x::w::uielements parameter to generate(). This callback receives an x::w::factory parameter which gets used, presumably, to create a widget. The first member of the x::w::uielements object is map. The map's key is a std::string, and the name value gives the callback's key value. An exception gets thrown if the name key does not exist.

It's possible that the same name value appears more than once, in the same or different factorys. Each occurence of a name results in the callback getting invoked.

<element id="button">
  <button>
    <element>
      <label type="theme_text">Calculate</label>
    </element>
  </button>
</element></programlisting>
      </informalexample>
    </blockquote>

    <para>
      An <tag class='element'>element</tag> without a
      <tag class='element'>name</tag> creates one of several supported widgets
      directly, without invoking an application callback, using the
      given parameters. Supported widgets:
    </para>

    <itemizedlist>
      <listitem>
	<para>
	  <link linkend="uixmlfactorylabelelement"><classname>&ns;::w::label</classname></link>s
	</para>
      </listitem>
      <listitem>
	<para>
	  <link linkend="uixmlfactorycanvaselement"><classname>&ns;::w::canvas</classname></link>es
	</para>
      </listitem>
      <listitem>
	<para>
	  <link linkend="uixmlfactoryfocusablelabelelement"><classname>&ns;::w::focusable_label</classname></link>s
	</para>
      </listitem>
      <listitem>
	<para>
	  <link linkend="uixmlfactorybuttonelement"><classname>&ns;::w::button</classname></link>s
	</para>
      </listitem>
      <listitem>
	<para>
	  <link linkend="uixmlfactoryinputfieldelement"><classname>&ns;::w::input_field</classname></link>s
	</para>
      </listitem>
      <listitem>
	<para>
	  <link linkend="uixmlfactorydateinputfieldelement"><classname>&ns;::w::date_input_field</classname></link>s
	</para>
      </listitem>
      <listitem>
	<para>
	  <link linkend="uixmlfactorycheckboxelement">Checkbox</link>
	  <classname>&ns;::w::image_button</classname>s
	</para>
      </listitem>
      <listitem>
	<para>
	  <link linkend="uixmlfactoryradioelement">Radio</link>
	  <classname>&ns;::w::image_button</classname>s
	</para>
      </listitem>
      <listitem>
	<para>
	  <link linkend="uixmlfactoryprogressbarelement"><classname>&ns;::w::progressbar</classname></link>s
	</para>
      </listitem>
      <listitem>
	<para>
	  <link linkend="uixmlfactorycolorpickerelement"><classname>&ns;::w::color_picker</classname></link>s
	</para>
      </listitem>
      <listitem>
	<para>
	  <link linkend="uixmlfactoryfontpickerelement"><classname>&ns;::w::font_picker</classname></link>s
	</para>
      </listitem>
      <listitem>
	<para>
	  <link linkend="uixmlfactoryscrollbarelement"><classname>&ns;::w::scrollbar</classname></link>s
	</para>
      </listitem>
    </itemizedlist>

    <para>
      These <tag class="element">element</tag> elements have an optional
      <tag class="attribute">id</tag> attribute.
      After the widgets get generated,
      <link linkend="uixmlgenerate"><classname>&ns;::w::uielements</classname></link>'s
      <methodname>get_element</methodname>() retrieves the created widget
      with the specified <tag class="attribute">id</tag>.
      Duplicate <tag class="attribute">id</tag>s get ignored;
      <methodname>get_element</methodname>() returns the most recently-created
      widget with the specified <tag class="attribute">id</tag>.
    </para>

    <para>
      These <tag class="element">element</tag>s have optional
      <link linkend="uixmlelementtooltip">tooltip tags</link> and an optional
      <tag class="context">context</tag> that
      <link linkend="uixmlelementcontext">creates a context popup menu
	for the widget</link>.
    </para>

    <blockquote>
      <informalexample>
	<programlisting><![CDATA[
  <factory id="option-table-header-1" type="factory">
    <element>
      <label type='theme_text'>Name</label>
    </element>
  </header>
  

A type=factory factory represents a factory superclass that creates only these generic widgets.