<?xml version="1.0" standalone="no"?>

<!--
* 
*
*  ProLinga-UI
*
*  Copyright (C) 2002-2008 Xobas Software.
*  All rights reserved.
*  
*  This file is part of ProLinga-UI.
*
*  ProLinga-UI is free software: you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation, either version 3 of the License, or
*  (at your option) any later version.
*
*  ProLinga-UI is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with ProLinga-UI.  If not, see <http://www.gnu.org/licenses/>.
*
*  More information is available at the following addresses:
*
*  Website     : http://www.prolinga.org
*
*  Email       : prolinga-list@prolinga.org
*
*
-->

<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
    "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [

<!ENTITY version SYSTEM "version.txt" >
<!ENTITY prolinga-ui-userguide  SYSTEM "prolinga-ui-userguide.xml" >
<!ENTITY fdl  SYSTEM "fdl.xml" >
<!ENTITY PRODUCT "prolinga-ui" >
<!ENTITY xobas '<emphasis><ulink url="http://www.xobas.com">Xobas Software</ulink></emphasis>'>

]>

<book id="prolinga-ui" lang="en">
  <bookinfo>
    <title>ProLinga-UI Project</title>
    <releaseinfo>Release: &PRODUCT;-&version; - February 12, 2007 (Second draft)</releaseinfo>
    <authorgroup>
      <author>
	<firstname>Bas</firstname>
	<surname>Driessen</surname>
	<affiliation>
          <orgname>&xobas;</orgname>
	    <address><email>bas.driessen@xobas.com</email></address>
	</affiliation>
	<contrib>Original author and current maintainer.</contrib>
      </author>
    </authorgroup>

    <copyright>
      <year>2002-2008</year>
      <holder>The ProLinga Team</holder>
    </copyright>

    <legalnotice>
      <para>Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.2
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
      A copy of the license is included in the section entitled
      <ulink type="http"
      url="gfdl.html">"GNU Free Documentation License"</ulink>.</para>
    </legalnotice>

    <abstract>
      <para>This document describes the ProLinga-UI Project and how to
      build the software components. 
      </para>
    </abstract>
  </bookinfo>

  <chapter id="prolinga-ui-product-info">
    <title>ProLinga-UI Project</title>

    <para>The ProLinga-UI project focusses on the development of a User Interfaces for
    the ProLinga-Run (4GL Interpreter) project. The event-driven User Interface sends 
    off XML requests to ProLinga-Run where the 4GL logic is executed. As soon as a 4GL
    statement is being executed that is related to an UI update, an XML response
    is sent back to the UI containing information regarding this update (ie open
    new screen, clear screen field, etc). This response can also include a request 
    for a return request if there is more logic to be interpreted.</para>

    <para>Storing and managing
    of data is controlled by UI Commands (UC) using the concept of request
    and response. An UC request is an XML document containing a command as 
    "Execute Logic XYZ" or "Move value to a screen field".
    This request is presented to the run engine for processing.
    After processing, the result will be placed in an UC response document and 
    returned to the caller.</para>

    <para>The project will at first focus on the graphical user interface 
    <ulink type="http" url="http://gtk.org">GTK+</ulink> for
    the GNOME/Linux desktop. The project can be build around other (G)UIs as well,
    as long as they support the concept of storing screen and widget information
    in a text format (pref. XML) and if they have the ability to create/render
    screens and screen information from this text format at run-time.</para>

    <para>ProLinga-UI contains a binary (prolingaui) that can be started from the
    desktop.
    The sophisticated prolinga-soap
    SOAP layer on top controls the flow and processing of incoming and outgoing
    requests/responses over the TCP/IP network. Using this concept, programs appear
    to run locally on a machine, but in fact they can access a wide range of machines
    (= Web Services),
    centrally located in an intranet environment or anywhere in the world via the 
    internet, to share the load and execute the application.
    ProLinga-UI
    is the perfect base for platform and user interface independent multi-developer
    and run-time environments.</para>

    <para>Main purpose for the creation of this project, is to provide an
    easy way to unlink the 4GL interpreter from user interface calls to provide
    a base for a user interface independent platform.</para>

    <para>At the moment ProLinga-UI has only been built and tested on
    the RedHat Fedora Core 2 platform (i386 and x86_64), but since all code is written
    in C++, it can be ported to all modern UNIX systems, Linux variants
    as well as Windows and Mac O/S platforms. When choosing a Windows or
    Mac O/S native format, code changes are required to port to the 
    GUI toolset used.</para>

    <sect1 id="prolinga-ui-ui_commands">
      <title>UI Commands</title>

      <para>UI Commands are used to communicate with the 4GL-interpreter.
      A request XML document containing a command is presented
      to the interpreter. This document is processed and a response XML document is
      returned. The response can be a follow up request.</para>

      <para>UI Commands have the following format:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="]]><parameter>command</parameter><![CDATA[" Service="]]><parameter>svc</parameter><![CDATA[" Mode="Request" SessionId="]]><parameter>sessid</parameter><![CDATA[">
      <Object Application="]]><parameter>appn</parameter><![CDATA[">
         ....
         ....
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>


      <para>The following UI Commands are available:</para>

      <itemizedlist>
        <listitem><para>Connect</para></listitem>
        <listitem><para>Disconnect</para></listitem>
        <listitem><para>ExecuteAction</para></listitem>
        <listitem><para>GetDataReference</para></listitem>
        <listitem><para>PutDataReference</para></listitem>
        <listitem><para>GetListStore</para></listitem>
        <listitem><para>GetPickList</para></listitem>
        <listitem><para>Continue</para></listitem>
        <listitem><para>Screen</para></listitem>
        <listitem><para>Ping</para></listitem>
      </itemizedlist>

      <para>The following sections describe the various UI commands. The
      response examples given all are non-request responses.</para>

      <sect2 id="prolinga-ui-uc_connect">
        <title>Connect</title>

        <para>With the connect command, a session is created. A valid session is
        required to be able to send UI Commands. The 4GL interpreter will hold
        all information like variables etc within this session.</para>

        <para>Example Connect Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Connect" Service="LiveOrder" Mode="Request"/>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example Connect Response:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Connect" Service="LiveOrder" Mode="Response" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd" Status="Ok"/>
  </UI>
</ProLinga>
]]></programlisting>
        <para/>
      </sect2>

<sect2 id="prolinga-ui-uc_disconnect">
        <title>Disconnect</title>

        <para>With the disconnect command, a session is destroyed.</para>

        <para>Example Disconnect Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Disconnect" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd"/>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example Disconnect Response:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Disconnect" Service="LiveOrder" Mode="Response" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd" Status="Ok"/>
  </UI>
</ProLinga>
]]></programlisting>
        <para/>

      </sect2>

<sect2 id="prolinga-ui-uc_execute_action">
        <title>ExecuteAction</title>

        <para>With the ExecuteAction command, an action can be executed in the run environment.
        The available actions are described in the 4GL Reference Manual.</para>

        <para>Example ExecuteAction Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="ExecuteAction" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder">
        <ExecuteAction>
          <Type>Logic</Type>
          <Name>UpdateStock</Name>
        </ExecuteAction>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example ExecuteAction Response:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="ExecuteAction" Service="LiveOrder" Mode="Response" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd" Status="Ok"/>
  </UI>
</ProLinga>
]]></programlisting>
        <para/>

      </sect2>

<sect2 id="prolinga-ui-uc_get_data_reference">
        <title>GetDataReference</title>

        <para>With the GetDataReference command, the contents of a data reference
        can be retrieved from the run-time environment and assigned to a screen
        field when a focus-in-event is triggered for instance.</para>

        <para>Example GetDataReference Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="GetDataReference" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder" DataReference="V-OrderStatus"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example GetDataReference Response:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="GetDataReference" Service="LiveOrder" Mode="Response" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd" Status="Ok">
      <Object Application="MyOrder" DataReference="V-OrderStatus">
        <DataReference>
          <Value>Open</Value>
        </DataReference>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>
        <para/>

      </sect2>

<sect2 id="prolinga-ui-uc_put_data_reference">
        <title>PutDataReference</title>

        <para>With the PutDataReference command, the contents of a data reference
        can be updated in the run-time environment after a screen
        field receives a new value when a focus-out-event is triggered for instance.</para>

        <para>Example PutDataReference Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="PutDataReference" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder" DataReference="V-OrderStatus">
        <DataReference>
          <Value>Closed</Value>
        </DataReference>
      <Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example PutDataReference Response:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="PutDataReference" Service="LiveOrder" Mode="Response" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd" Status="Ok">
      <Object Application="MyOrder" DataReference="V-OrderStatus"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>
        <para/>

      </sect2>

<sect2 id="prolinga-ui-uc_get_list_store">
        <title>GetListStore</title>

        <para>With the GetListStore command, the (initial) contents of a 
        multi column list box can be retrieved from the run-time environment
        and assigned to the mclb screen widget.</para>

        <para>Example GetListStore Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="GetListStore" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder" DataReference="ProductSizes"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example GetListStore Response:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="GetDataReference" Service="LiveOrder" Mode="Response" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd" Status="Ok">
      <Object Application="MyOrder" DataReference="ProductSizes">
        <ListStore>
          <NumColumns>2</NumColumns>
          <MaxNumRows>3</MaxNumRows>
          <OccurencesListColumnHeader>
             <ListColumnHeader SequenceNo="1">
                <ColumnId>1</ColumnId>
                <ColumnLabel>Size</ColumnLabel>
                <ColumnType>Text</ColumnType>
                <DefaultSort>False</DefaultSort>
             </ListColumnHeader>
             <ListColumnHeader SequenceNo="2">
                <ColumnId>2</ColumnId>
                <ColumnLabel>Description</ColumnLabel>
                <ColumnType>Text</ColumnType>
                <DefaultSort>False</DefaultSort>
             </ListColumnHeader>
          </OccurencesListColumnHeader>
          <OccurencesListData>
             <ListData SequenceNo="1">
                <ColumnId>1</ColumnId>
                <RowId>1</RowId>
                <Value>Small</Value>
             </ListData>
             <ListData SequenceNo="2">
                <ColumnId>2</ColumnId>
                <RowId>1</RowId>
                <Value>Small Size</Value>
             </ListData>
             <ListData SequenceNo="3">
                <ColumnId>1</ColumnId>
                <RowId>2</RowId>
                <Value>Medium</Value>
             </ListData>
             <ListData  SequenceNo="4">
                <ColumnId>2</ColumnId>
                <RowId>2</RowId>
                <Value>Medium Size</Value>
             </ListData>
             <ListData SequenceNo="5">
                <ColumnId>1</ColumnId>
                <RowId>3</RowId>
                <Value>Large</Value>
             </ListData>
             <ListData SequenceNo="6">
                <ColumnId>2</ColumnId>
                <RowId>3</RowId>
                <Value>Large Size</Value>
             </ListData>
          </OccurencesListRowData>
        </ListStore>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>
        <para/>

      </sect2>

<sect2 id="prolinga-ui-uc_get_pick_list">
        <title>GetPickList</title>

        <para>With the GetPickList command, the list contents of an combo box 
        (dropdown list)
        can be retrieved from the run-time environment and assigned to 
        combo box screen widget</para>

        <para>Example GetPickList Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="GetPickList" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder" DataReference="Size"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example GetPickList Response:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="GetDataReference" Service="LiveOrder" Mode="Response" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd" Status="Ok">
      <Object Application="MyOrder" DataReference="Size">
        <PickList>
          <OccurencesPickListEntry>
             <PickListEntry>
                <Value>Small</Value>
             </PickListEntry>
             <PickListEntry>
                <Value>Medium</Value>
             </PickListEntry>
             <PickListEntry>
                <Value>Large</Value>
             </PickListEntry>
          </OccurencesPickList>
        </PickList>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>
        <para/>

      </sect2>

<sect2 id="prolinga-ui-uc_continue">
        <title>Continue</title>

        <para>The continue command is issued when a response is a return
        request command, so processing can continue in the run 
        environment.</para>

        <para>Example Continue Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Continue" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example Continue Response:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Continue" Service="LiveOrder" Mode="Response" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd" Status="Ok">
      <Object Application="MyOrder"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>
        <para/>

      </sect2>

<sect2 id="prolinga-ui-uc_screen">
        <title>Screen</title>

        <para>The screen command displays a screen.
        </para>

        <para>Example Screen Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Screen" Mode="Request">
      <Object Name="MyOrder">
        <DisplayData>
            <glade-interface>
              <widget class="GtkWindow" id="Parts">
                <property name="visible">True</property>
                <property name="title" translatable="yes">Parts</property>
                <property name="type">GTK_WINDOW_TOPLEVEL</property>
                <property name="window_position">GTK_WIN_POS_NONE</property>
                <property name="modal">False</property>
                <property name="resizable">True</property>
                <property name="destroy_with_parent">False</property>
                <property name="decorated">True</property>
                <property name="skip_taskbar_hint">False</property>
                <property name="skip_pager_hint">False</property>
                <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
                <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
                <child>
                  <widget class="GtkScrolledWindow" id="parts_include">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
                    <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
                    <property name="shadow_type">GTK_SHADOW_NONE</property>
                    <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
                    <child>
                      . . . .
                      . . . .
                      . . . .
                      . . . .
                    </child>
                  </widget>
                </child>
              </widget>
            </glade-interface>
        </DisplayData>
        <AllowMultipleInstances>False</AllowMultipleInstances>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example Screen Response:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Screen" Mode="Response" Status="Ok">
      <Object Name="MyOrder"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>
        <para/>

      </sect2>

      <sect2 id="prolinga-ui-uc_ping">
        <title>Ping</title>

        <para>The ping command can be used to test if an UI-host and service is on-line
        and responding to requests.</para>

        <para>Example Ping Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Ping" Mode="Request"/>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example Ping Response:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Ping" Mode="Response" Status="Ok"/>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Additionial error information from the underlying SOAP layer will be 
        presented as well in the response document in case of an error.</para>

      </sect2>


    </sect1>

    <sect1 id="prolinga-ui-ui_response_commands">
      <title>UI Response Commands</title>

      <para>Every UI Command will get a response back. This response can be
      a simple "OK" to confirm that the request has been processed successfully,
      but it can also be a return request. A return request is issued when a
      4GL logic command is being processed by the interpreter that requires
      a screen update. The request of this update is being sent as the response
      request and a return request will be requested to be able to continue
      4GL processing.</para>

      <para>UI Response Commands have the following format:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="]]><parameter>command</parameter><![CDATA[" Service="]]><parameter>svc</parameter><![CDATA[" Mode="ReturnRequest" SessionId="]]><parameter>sessid</parameter><![CDATA[">
      <Object Application="]]><parameter>appn</parameter><![CDATA[">
         ....
         ....
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>


      <para>The following UI Response Commands are available:</para>

      <itemizedlist>
        <listitem><para>CmdClear</para></listitem>
        <listitem><para>CmdDisplay</para></listitem>
        <listitem><para>CmdError</para></listitem>
        <listitem><para>CmdList</para></listitem>
        <listitem><para>CmdMessage</para></listitem>
        <listitem><para>CmdScreen</para></listitem>
        <listitem><para>GetScreenRef</para></listitem>
        <listitem><para>PutScreenRef</para></listitem>
        <listitem><para>RepositoryList</para></listitem>
      </itemizedlist>


      <sect2 id="prolinga-ui-uc_cmd_clear">
        <title>CmdClear</title>

        <para>With the CmdClear command one or more screen widgets
        are ordered to clear their contents.</para>

        <para>Example CmdClear Response Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="CmdClear" Service="LiveOrder" Mode="ReturnRequest" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder">
        <CmdClearArguments>
          <Argument>SCREENFIELD</Argument>
          <Argument>entryQuantity</Argument>
        </CmdClearArguments>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example CmdClear Response -> Follow up request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Continue" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>The description of the logic command CLEAR in the Reference Manual,
        describes the available arguments.</para>

      </sect2>

      <sect2 id="prolinga-ui-uc_cmd_display">
        <title>CmdDisplay</title>

        <para>With the CmdDisplay command one or more screen widgets
        are ordered to update their contents.</para>

        <para>Example CmdDisplay Response Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="CmdDisplay" Service="LiveOrder" Mode="ReturnRequest" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder">
        <CmdDisplayArguments>
          <Argument>entryQuantity</Argument>
        </CmdDisplayArguments>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example CmdDisplay Response -> Follow up request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Continue" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Instead of a single widget name, the word "ALL" can be used to 
        display all screen widgets. See the logic command DISPLAY in the
        reference manual for more information.</para>

      </sect2>

      <sect2 id="prolinga-ui-uc_cmd_error">
        <title>CmdError</title>

        <para>With the CmdError command an error message is 
        displayed on the screen.</para>

        <para>Example CmdError Response Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="CmdError" Service="LiveOrder" Mode="ReturnRequest" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder">
        <CmdErrorArguments>
          <Argument>"Total stock : "</Argument>
          <Argument>L-TotalStock</Argument>
          <Argument>SEVERITY</Argument>
          <Argument>Info</Argument>
        </CmdErrorArguments>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example CmdError Response -> Follow up request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Continue" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>See the 4GL command "ERROR" in the Reference Manual for more
        information.</para>

      </sect2>

      <sect2 id="prolinga-ui-uc_cmd_list">
        <title>CmdList</title>

        <para>With the CmdList command the list store linked to
        a multi column list box can be updated.</para>

        <para>Example CmdList Response Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="CmdList" Service="LiveOrder" Mode="ReturnRequest" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder">
        <CmdListArguments>
          <Argument>APPEND</Argument>
          <Argument>sizes</Argument>
          <Argument>VALUE</Argument>
          <Argument>"XXXL"</Argument>
          <Argument>"JumboSize"</Argument>
        </CmdListArguments>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example CmdList Response -> Follow up request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Continue" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>See the 4GL logic command LIST for more (syntax) information.</para>

      </sect2>

      <sect2 id="prolinga-ui-uc_cmd_message">
        <title>CmdMessage</title>

        <para>With the CmdMessage command a message
        can be printed on the status line.</para>

        <para>Example CmdMessage Response Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="CmdMessage" Service="LiveOrder" Mode="ReturnRequest" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder">
        <CmdMessageArguments>
          <Argument>"New order opened."</Argument>
        </CmdMessageArguments>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example CmdMessage Response -> Follow up request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Continue" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>See the 4GL logic command MESSAGE for more (syntax) information.</para>

      </sect2>

      <sect2 id="prolinga-ui-uc_cmd_screen">
        <title>CmdScreen</title>

        <para>With the CmdScreen a screen will be displayed
        on the desktop or an action on an existing screen
        will be undertaken.</para>

        <para>Example CmdScreen Response Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="CmdScreen" Service="LiveOrder" Mode="ReturnRequest" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder">
        <CmdScreenArguments>
          <Argument>Order</Argument>
        </CmdScreenArguments>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example CmdScreen Response -> Follow up request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Continue" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>See the 4GL logic command SCREEN for more (syntax) information. When creating a new
        screen, actions linked to initiating a screen will be executed first, before returning to
        the "continue" point. The "continue" status will get stacked.</para>

      </sect2>


      <sect2 id="prolinga-ui-uc_get_screen_reference">
        <title>GetScreenReference</title>

        <para>With the GetScreenReference command, the contents of a screen widget
        can be moved to the run-time environment and assigned to a data reference
        when a "S-screenfield" name is used in 4GL logic for instance.</para>

        <para>Example GetScreenReference Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="GetScreenReference" Service="LiveOrder" Mode="ReturnRequest" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder" ScreenReference="orderStatus"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example GetScreenReference Response -> Follow up request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Continue" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder">
        <Response>
          <ScreenReference>
            <Value>Open</Value>
          </ScreenReference>
        </Response>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>
        <para/>

      </sect2>

<sect2 id="prolinga-ui-uc_put_screen_reference">
        <title>PutDataReference</title>

        <para>With the PutScreenReference command, the contents of a screen field reference
        can be updated when a "S-screenfield" assignment is used in 4GL.</para>

        <para>Example PutScreenReference Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="PutScreenReference" Service="LiveOrder" Mode="ReturnRequest" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder" ScreenReference="orderStatus">
        <ScreenReference>
          <Value>Closed</Value>
        </ScreenReference>
      <Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example PutScreenReference Response:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Continue" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

      </sect2>

      <sect2 id="prolinga-ui-uc_repository_list">
        <title>RepositoryList</title>

        <para>With the RepositoryList command a list of repository 
        objects can be loaded into a list store.</para>

        <para>Example RepositoryList Response Request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="RepositoryList" Service="LiveOrder" Mode="ReturnRequest" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder">
        <RepositoryList>
          <Entry>small</Entry>
          <Entry>medium</Entry>
          <Entry>large</Entry>
        </RepositoryList>
      </Object>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>Example RepositoryList Response -> Follow up request:</para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Continue" Service="LiveOrder" Mode="Request" SessionId="XR-jfiifheg4388dhgbxgtdg398hhd">
      <Object Application="MyOrder"/>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

        <para>This will typically only be used in development applications and not
        in end-user applications.</para>

      </sect2>

    </sect1>

    <sect1 id="prolinga-ui-error_handling">
      <title>Error Handling</title>

      <para>As soon as something goes wrong when processing a request, an error is 
      generated and put into the response document. The status of the response will 
      be set to "Error" or "Warning" depending on the severity of the error. In 
      case of an error, processing will abort immediately, while in case of a 
      warning processing continues.</para>

      <para>An error has the following format:</para>

<programlisting><![CDATA[
<Error Id=”12345”>
  <Severity>Error/Warning</Severity>
  <Description>Short description</Description>
  <ExternalDescription>An external error text if available</ExternalDescription>
</Error>
]]></programlisting>

      <para>Example response when trying to connect a non-existent service:
      </para>

<programlisting><![CDATA[
<ProLinga>
  <UI Version="1.0">
    <Command Name="Connect" Service="XLiveOrder" Mode="Response" Status="Error">
      <Error Id="80005">
        <Severity>Error</Severity>
        <Description>Service not available</Description>
        <ExternalDescription/>
      </Error>
    </Command>
  </UI>
</ProLinga>
]]></programlisting>

       <para>The "External" element will contain any error text passed on from
       the O/S or 3rd party products.</para>

       <para>The following initial errors are defined (this list is under construction):</para>

        <table frame="all" tocentry="1" >
        <title>Errors</title>
        <tgroup cols="3">
          <thead>
            <row>
              <entry>Error Id</entry>
              <entry>Severity</entry>
              <entry>Description</entry>
            </row>
          </thead>
          <tbody>
            <row>
              <entry>80000</entry>
              <entry>Ok</entry>
              <entry>No Error</entry>
            </row>
            <row>
              <entry>80001</entry>
              <entry>Error</entry>
              <entry>Error parsing XML document</entry>
            </row>
            <row>
              <entry>80002</entry>
              <entry>Error</entry>
              <entry>Empty XML Document</entry>
            </row>
            <row>
              <entry>80003</entry>
              <entry>Error</entry>
              <entry>Invalid root element</entry>
            </row>
            <row>
              <entry>80004</entry>
              <entry>Error</entry>
              <entry>Invalid UI XML file</entry>
            </row>
            <row>
              <entry>80005</entry>
              <entry>Error</entry>
              <entry>Service not available</entry>
            </row>
            <row>
              <entry>...</entry>
              <entry>...</entry>
              <entry>...</entry>
            </row>
          </tbody>
        </tgroup>
        </table>

    </sect1>

  </chapter>

  <chapter id="prolinga-ui-download">
    <title>Download ProLinga-UI</title>

    <para>There are two types of product versions available for download:</para>

    <orderedlist>
      <listitem><para>Production Version</para></listitem>
      <listitem><para>Development Version</para></listitem>
    </orderedlist>

    <sect1 id="prolinga-ui-production_version">
      <title>Production Version</title>

      <para>The production version is an official product release. This is a
      stable completed version which should be used in production environments. At this 
      stage the product is only available as a source archive. Binary packages for a wide
      range of platforms will be available for download as the project progresses.
      Please visit the 
      <ulink type="http"
      url="http://download.prolinga.org">
      download page</ulink> for the latest details.</para>
    </sect1>

    <sect1 id="prolinga-ui-development_version">
      <title>Development Version</title>

      <para>The development version is a snapshot of the latest source files. Since
      it can contain bugs as part of "work in progress", this version should not
      be used in production environments. Only developers who want to help with
      further development of the ProLinga Projects should download this version. Please
      read the details at the <ulink type="http"
      url="prolinga-ui-subversion.html">Subversion section</ulink>
      of how to obtain the latest development version.</para>

    </sect1>

  </chapter>

  <chapter id="prolinga-ui-build">
    <title>Build ProLinga-UI</title>

    <sect1 id="prolinga-ui-prerequisites">
      <title>Prerequisites</title>

      <para>ProLinga-UI &version; has currently only been built and tested
      on Fedora Core 2 (i386 and x86_64). The product should compile and run successfully on
      other Linux distributions as well as UNIX, but this can not be
      confirmed at this stage. GNU gcc/g++ 3.3 compilers/tools are required
      for a successful build. This is the standard gcc/g++ set that ship
      with Fedora Core 2.</para>

      <para>Required 3rd party package(s) for a successful build:</para>
      <itemizedlist>
        <listitem>
          <para><ulink type="http"
          url="http://xmlsoft.org"><parameter>libxml2.</parameter></ulink>
          This product provides XML libraries.</para>
        </listitem>
        <listitem>
          <para><ulink type="http"
          url="http://www.prolinga.org"><parameter>ProLinga-Soap</parameter></ulink>
          This product provides a SOAP/XML engine.</para>
        </listitem>
        <listitem>
          <para><ulink type="http"
          url="http://www.daa.com.au/~james/software/libglade"><parameter>Libglade</parameter></ulink>
          This product loads XML files to create the user interface dynamically.</para>
        </listitem>
        <listitem>
          <para><ulink type="http"
          url="http://gtk.org"><parameter>GTK+ (GLib, GTK+, Pango, ATK)</parameter></ulink>
          This project is used provides a complete set of widgets.</para>
        </listitem>
      </itemizedlist>

      <sect2 id="prolinga-ui-3rd_party_download">
        <title>General Download and Installation Instructions 3rd Party Products.</title>

        <para>Assuming the directory /opt/builds will be used for 3rd party products, 
        then in general the following steps need to be taken to download and extract
        a 3rd party product source archive.</para>

      <itemizedlist>
        <listitem>
          <para>Download source tar/gz archive to /opt/builds/[product] Example: 
           place libxml2-<parameter>x.x.x</parameter>.tar.gz in /opt/builds/libxml2</para>
        </listitem>
        <listitem>
          <para>Use 'gunzip' to unzip the archive</para>
        </listitem>
        <listitem>
          <para>Use 'tar xvf [product.tar] to extract the archive. Example:
           tar xvf libxml2-<parameter>x.x.x.</parameter>tar.</para>
        </listitem>
        <listitem>
          <para>A new sub directory will be created with the new version of
          the product. Example: /opt/builds/libxml2/libxml2-<parameter>x.x.x</parameter>
          This way several versions of the same products can be installed next to
          each other.</para>
        </listitem>
      </itemizedlist>

      <para>For product specific installation instructions see following sections.</para>

      </sect2>

      <sect2 id="prolinga-ui-3rd_party_libxml2">
        <title>Libxml2:</title>
        <para>Product root dir: /opt/builds/libxml2</para>
        <para>Current version: 2.6.31</para>
        <para>Download:
        <ulink type="http"
        url="ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/libxml2-2.6.31.tar.gz">
        ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/libxml2-2.6.31.tar.gz</ulink></para>
        <para>Build Instructions:</para>

<programlisting>
cd /opt/builds/libxml2/libxml2-2.6.31
./configure --prefix=/opt/builds/libxml2/libxml2-2.6.31
make
make install
</programlisting>

      </sect2>

      <sect2 id="prolinga-ui-3rd_party_prolingasoap">
        <title>ProLinga-Soap:</title>
        <para>Product root dir: /opt/builds/prolinga</para>
        <para>Current version: 0.0.1</para>
        <para>Download:
        <ulink type="http"
        url="http://download.prolinga.org">
        http://download.prolinga.org</ulink></para>
        <para>Build Instructions:</para>

<programlisting>
cd /opt/builds/prolinga/prolinga-soap-0.0.1
./configure --prefix=/opt/builds/prolinga/prolinga-soap-0.0.1
make
make install
</programlisting>

       <note>See the ProLinga-Soap Project documentation for more installation
       information.</note>

      </sect2>

      <sect2 id="prolinga-ui-3rd_party_libglade">
        <title>Libglade:</title>
        <para>Product root dir: /opt/builds/libglade</para>
        <para>Current version: 2.6.0</para>
        <para>Download:
        <ulink type="http"
        url="ftp://ftp.gnome.org/pub/GNOME/sources/libglade/2.6/libglade-2.6.0.tar.gz">
        ftp://ftp.gnome.org/pub/GNOME/sources/libglade/2.6/libglade-2.6.0.tar.gz</ulink></para>
        <para>Build Instructions:</para>

<programlisting>
cd /opt/builds/libglade/libglade-2.6.0
./configure --prefix=/opt/builds/libglade/libglade-2.6.0
make
make install
</programlisting>

      </sect2>

      <sect2 id="prolinga-ui-3rd_party_gtk">
        <title>GTK+:</title>
        <para>Use the GTK+ version that ships with O/S. Version 2.6.0 or higher required.</para>

      </sect2>
    </sect1>

    <sect1 id="prolinga-ui-build_instructions">
      <title>Build Instructions</title>

      <sect2 id="prolinga-ui-extracting_archive">
        <title>Extracting archive</title>

        <para>The product archive can be extracted to any desired directory
        using <parameter>unzip</parameter> (.zip file extension) or
        <parameter>gunzip</parameter> (.gz file extension)/
        <parameter>bunzip2</parameter> (.bz2 file extension) and 
        <parameter>tar</parameter>. After extracting, the following directories
        will be created:
        </para>

        <table frame="all" tocentry="0" >
        <title>Directory Structure.</title>
        <tgroup cols="2">
          <thead>
            <row>
              <entry>Directory</entry>
              <entry>Description</entry>
            </row>
          </thead>
          <tbody>
            <row>
              <entry>&PRODUCT;-&version;</entry>
              <entry>Product version root directory.</entry>
            </row>
            <row>
              <entry>&PRODUCT;-&version;/config</entry>
              <entry>Config build information.</entry>
            </row>
            <row>
              <entry>&PRODUCT;-&version;/doc</entry>
              <entry>Documentation.</entry>
            </row>
            <row>
              <entry>&PRODUCT;-&version;/src</entry>
              <entry>All source and internal header files.</entry>
            </row>
            <row>
              <entry>&PRODUCT;-&version;/tests</entry>
              <entry>Self tests.</entry>
            </row>
          </tbody>
        </tgroup>
        </table>

      </sect2>

      <sect2 id="prolinga-ui-compiling_linking">
        <title>Compiling and Linking</title>

        <para>To build the product go to the product root directory and run the 
        configure script. For default installation in /usr/local type:</para>

<programlisting>
./configure
</programlisting>

        <para>To install into another directory type:</para>

<programlisting>
./configure --prefix=<parameter>/any/dirname/</parameter>
</programlisting>

        <para>For all other configure options, type:</para>

<programlisting>
./configure --help
</programlisting>

        <para>After running the configure script, the product can be build with:</para>

<programlisting>
make
</programlisting>

        <para>To run the optional self-test type:</para>

<programlisting>
make check
</programlisting>

        <para>After compilation, the binaries, libraries and header files can be 
        installed with:</para>

<programlisting>
make install
</programlisting>

        <para>You may need root access for this last option.</para>

        <para>By default, HTML documentation pages are available in
        the doc/html directory. These pages are generated from 
        <ulink type="http"
        url="http://www.docbook.org">DocBook</ulink> XML file format
        files in /doc. To re-generate the HTML pages from these files type: </para>

<programlisting>
make html
</programlisting>

        <para>The command line XSLT processor <parameter>xsltproc</parameter> must be
        available from $PATH to be able to generate the HTML documentation.</para>

      </sect2>

      <sect2 id="prolinga-ui-dependencies">
        <title>Dependencies</title>

        <para>Many of the ProLinga Projects are dependent on 3rd party libraries.
        These (non system) dependencies of ProLinga-UI are outlined below. 
        If these 3rd party
        products are not installed in either /usr/bin, /usr/lib, /usr/include
        or /usr/local/bin, /usr/local/lib, /usr/local/include, the additional
        configure option needs to be provided when building.</para>

        <table frame="all" tocentry="1" >
        <title>Dependencies</title>
        <tgroup cols="3">
          <thead>
            <row>
              <entry>Dependency</entry>
              <entry>Version</entry>
              <entry>Configure Option</entry>
            </row>
          </thead>
          <tbody>
            <row>
              <entry>libxml2</entry>
              <entry>>=2.6.31</entry>
              <entry>--with-libxml-prefix=<parameter>/path/to/libxml2</parameter></entry>
            </row>
            <row>
              <entry>ProLinga-Soap</entry>
              <entry>>=0.0.1</entry>
              <entry>--with-prolingasoap-prefix=<parameter>/path/to/prolingasoap</parameter></entry>
            </row>
            <row>
              <entry>Libglade</entry>
              <entry>>=2.6.0</entry>
              <entry>--with-libglade-prefix=<parameter>/path/to/libglade</parameter></entry>
            </row>
            <row>
              <entry>GTK+</entry>
              <entry>>=2.6.0</entry>
              <entry>--with-gtk-prefix=<parameter>/path/to/gtk</parameter></entry>
            </row>
          </tbody>
        </tgroup>
        </table>
        <para></para>

      </sect2>

      <sect2 id="prolinga-ui-choose_build">
        <title>Choosing the right type of build</title>

        <para>The default configuration options provide libraries which 
        can be used both to develop/debug as to run the product. However better builds 
        are possible for a dedicated development or production environment.</para>

        <para>In <emphasis>production</emphasis> environments, builds are needed which contain minimal (debug) 
        overhead, so they are fast and small. To build such binaries/libraries, the 
        --enable-final options can be used. Example:</para>

<programlisting>
./configure --enable-final
</programlisting>

        <para>The enable-final flag is configured to be used with GCC environments only. 
        If access to more compilers become available over time, the enable-flag will be 
        ported to those compilers as well.</para>

        <para>In <emphasis>development</emphasis> environments, builds are needed producing warnings, enabling
        maximum debugging info etc. Several options are available here.</para>

        <itemizedlist>
           <listitem>
             <para>--enable-warnings : Set all compiler warning flags</para>
           </listitem>
           <listitem>
             <para>--enable-debug : Enable all debug messages</para>
           </listitem>
           <listitem>
             <para>--enable-gprof : Enables profiling with gprof (GCC only)</para>
           </listitem>
        </itemizedlist>

      </sect2>

    </sect1>

  </chapter>

  <chapter id="prolinga-ui-development">
    <title>Further development of ProLinga-UI</title>

    <para>All ProLinga Projects are under constant active development. This includes
    issues related to fixing bugs, increasing performance etc, as well as expanding
    the various projects with new features. This chapter provides information of
    all these types of tasks as well as details of how to join the development team.</para>

    <sect1 id="prolinga-ui-todo">
      <title>To-do List</title>

      <para>This section contains a list of work that needs to be done on the product.
      This should be worked out further using a priority system and categories (bug,
      enhancement, etc),
      but this will do for now.</para>

      <itemizedlist>
         <listitem>
           <para>Implement XML Schemas for validation. Libxml2 is finishing up XML schemas.
           If it is still too far away, start with DTD.</para>
         </listitem>
         <listitem>
           <para>ProLinga-UI is written in C++. Libxml2 however is C only. There is a C++ wrapper
           for this XML parser library. Details at <ulink type="http"
           url="http://libxmlplusplus.sourceforge.net/">http://libxmlplusplus.sourceforge.net/</ulink>.
           </para>
         </listitem>
         <listitem>
           <para>Some strings/paths are hardcoded in the product. This all should be
           reviewed and be removed or made all configurable using a config file.</para>
         </listitem>
         <listitem>
           <para>Utilities.</para>
         </listitem>
         <listitem>
           <para>Code review and cleanup.</para>
         </listitem>
         <listitem>
           <para>Logging</para>
         </listitem>
         <listitem>
           <para>Self-tests need to be developed for quality control.</para>
         </listitem>
         <listitem>
           <para>Porting to other platforms. (Windows/Solaris?), so we can make a distribution
            available on a specific port if we need to.</para>
         </listitem>
         <listitem>
           <para> Add command line options to the binaries. At least a -? should be
           available.</para>
         </listitem>
       </itemizedlist>

    </sect1>

    <sect1 id="prolinga-ui-subversion">
      <title>Subversion</title>

      <para>A Subversion tree containing the latest project sources is available at
      <ulink type="http" url="http://svn.prolinga.org">http://svn.prolinga.org</ulink>.
      For access please contact the <ulink type="http"
      url="http://lists.prolinga.org">ProLinga Development team</ulink>.</para>

    </sect1>

    <sect1 id="prolinga-ui-bugzilla">
      <title>Bugzilla</title>

      <para>Bugzilla software development and bug tracking system to manage the ProLinga
      projects is available at
      <ulink type="http" url="http://bugzilla.prolinga.org">http://bugzilla.prolinga.org</ulink>.
      For access please contact the <ulink type="http"
      url="http://lists.prolinga.org">ProLinga Development team</ulink>.</para>

    </sect1>

    <sect1 id="prolinga-ui-help_develop">
      <title>Help to Develop</title>

      <para>Are you ready to join the ProLinga development team? There are several ways you
      can help:</para>

      <itemizedlist>
         <listitem>
           <para>Use the product. Tell <ulink type="http"
           url="http://lists.prolinga.org">us</ulink> what you think, ideas, bugs etc.</para>
         </listitem>
         <listitem>
           <para>Fixing bugs. Look at the on-line <ulink type="http"
           url="http://www.prolinga.org">development page</ulink>
           , choose a
           bug, fix it and send <ulink type="http"
           url="http://lists.prolinga.org">us</ulink> the code changes.
           </para>
         </listitem>
         <listitem>
           <para>Enhancements. Have a look at the enhancement section of the
           <ulink type="http"
           url="prolinga-ui-development.html#prolinga-ui-todo">to-do list</ulink>
           and let <ulink type="http"
           url="http://lists.prolinga.org">us</ulink> know which new feature you
           want to help to develop.</para>
         </listitem>
         <listitem>
           <para>Porting. To be successful it is essential that the ProLinga Projects
           are available on a wide range of platforms. We need help in porting and
           testing as well as providing binary releases for many different platforms.
           Let <ulink type="http"
           url="http://lists.prolinga.org">us</ulink> know if and how you can help out.
           </para>
         </listitem>
         <listitem>
           <para>Real world examples. Are you using ProLinga products or do you know people
           who are happily using it. Tell <ulink type="http"
           url="http://lists.prolinga.org">us</ulink> the story and provide some screenshots.
           </para>
         </listitem>
      </itemizedlist>

    </sect1>

  </chapter>

  <part id="prolinga-ui-userguide">
    <title>ProLinga-UI User Guide</title>

    <partintro>
      <para>This section contains the user guide for the ProLinga-UI. All
      the binaries are documented here.</para>
    </partintro>

    <!-- The user guide documentation -->
    &prolinga-ui-userguide;

  </part>

  <!-- The document license -->
  &fdl;

</book>
