diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /doc/kexi/designingforms.docbook | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'doc/kexi/designingforms.docbook')
-rw-r--r-- | doc/kexi/designingforms.docbook | 1480 |
1 files changed, 1480 insertions, 0 deletions
diff --git a/doc/kexi/designingforms.docbook b/doc/kexi/designingforms.docbook new file mode 100644 index 00000000..b205fe71 --- /dev/null +++ b/doc/kexi/designingforms.docbook @@ -0,0 +1,1480 @@ +<!-- + <!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" > + + --> + + <sect1 id="designing-forms"> + <title>Designing Forms</title> + + <sect2 id="most-important-terms"> + <title>Most important terms</title> + <glosslist> + <glossentry id="gloss-form"> + <glossterm>Form</glossterm> + <glossdef> + <para> + A window provided for easy data entry and presentation on the + computer screen. + </para> + </glossdef> + </glossentry> + <glossentry id="gloss-form-data-source"> + <glossterm>Form's data source</glossterm> + <glossdef> + <para> + Database table or query providing data displayed in the + form. The data source is needed because forms itself are only + <emphasis>tools</emphasis> for displaying and entering data, + while tables and queries are the source of data. New, empty + forms have no data source assigned, so they are not displaying + any data from your database unless you assign a data source + to them. + </para> + </glossdef> + </glossentry> + <glossentry id="gloss-form-field"> + <glossterm>Form field</glossterm> + <glossdef> + <para> + Direct equivalent of a column in a table or query. Most frequently + used are fields for displaying text and numbers. Entering a new + value or changing the existing value of such a field causes a change + in the bound table or query column (after accepting the change). + </para> + </glossdef> + </glossentry> + <glossentry id="gloss-form-design"> + <glossterm>Form design</glossterm> + <glossdef> + <para> + Tasks you are performing to define the appearance and functions of + the form. To do this, you need to provide + <glossterm linkend="gloss-form-data-source">data source</glossterm>, + insert <glossterm linkend="gloss-form-field">form fields</glossterm> + of various types and place them at the appropriate location. + </para> + </glossdef> + </glossentry> + <glossentry id="gloss-form-widget"> + <glossterm>Form widget</glossterm> + <glossdef> + <para>Form's element. Main widget types are:</para> + <itemizedlist> + <listitem> + <para> + Widgets displaying information, ⪚ a text box or an image box. Each + widget of this type can be <emphasis>bound</emphasis> to a data + source field (a table or a query column). Therefore, such widgets + are called in short <glossterm linkend="gloss-form-field">form fields</glossterm>. + </para> + </listitem> + <listitem> + <para> + Widgets able to perform a specified action, ⪚ a push button + that can close the current form. Within other applications this + widget type is sometimes called <firstterm>form control</firstterm> + because it can perform previously defined action of + <emphasis>controlling</emphasis> your database application's + behavior. + </para> + </listitem> + <listitem> + <para> + Other widgets allowing to enrich a form's appearance, ⪚ + a <quote>line widget</quote> can visually separate two form + areas. + </para> + </listitem> + </itemizedlist> + </glossdef> + </glossentry> + <glossentry id="gloss-container-widget"> + <glossterm>Container widget</glossterm> + <glossdef> + <para> + A widget that can <emphasis>contain</emphasis> other widgets within + its area. For example, frame widget or tab widget are containers. + The form's surface itself is a container as well. A command button cannot + be called as container because it is not possible to insert a widget + inside it. In more complex cases, container widgets can be inserted + inside a container, so nesting is possible. + </para> + <!-- + <screenshot> + <screeninfo>Example container widgets</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_01_widget_containers.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Example container widgets</phrase> + </textobject> + </mediaobject> + </screenshot>--> + </glossdef> + </glossentry> + </glosslist> + </sect2> + + <sect2 id="forms-versus-tables"> + <title>Forms versus tables</title> + <para> + In chapter <!--<a href="05_02_00_entering_data_into_tables.html">5.2</a>--> + 5.2 you learned about how to enter data directly into tables using their + data sheet view. However, in many cases forms are better suited for data + entry: + </para> + <itemizedlist> + <listitem> + <para> + A table can contain too many columns to display them on your + screen. A form can display such a data using multiple rows. + </para> + </listitem> + <listitem> + <para> + A form allows to visually split data <glossterm linkend="gloss-form-field">fields</glossterm> + into logical groups, thus increasing readability. Labels with + additional information can be inserted to give users more hints + on how to use the form or what given data <glossterm linkend="gloss-form-field">fields</glossterm> mean. + </para> + </listitem> + <listitem> + <para> + Command buttons can be used within forms for commonly used commands + so users can use forms in a similar way as a standalone applications they + know. + </para> + </listitem> + <listitem> + <para>In data sheet view displaying multi-row data text + <glossterm linkend="gloss-form-field">fields</glossterm> or images + is as easy as within forms. + </para> + </listitem> + </itemizedlist> + </sect2> + + <sect2> + <title>Working with form design</title> + <para>As with table or query design, you are able to use <interface>Data View</interface> + and <interface>Design View</interface>. Form designing is performed in + <interface>Design View</interface>. We will often refer to the form design window as to + <interface>Form Designer</interface>. + </para> + <procedure> + <step> + <para>To create a new empty form, select + <menuchoice><guimenu>Insert</guimenu><guimenuitem> + <!--<img src="img/form_newobj.png" class="icon">-->Form</guimenuitem></menuchoice> + from the Menubar. Optionally, you can use + <menuchoice><guimenuitem> + <!--<img src="img/form_newobj.png" class="icon">-->New Form</guimenuitem></menuchoice> + command from drop-down button on the <interface>Project Navigator's</interface> + toolbar or <menuchoice><guimenuitem>Create Object: Form</guimenuitem></menuchoice> command from the context menu. + </para> + </step> + <step> + <para>A new frame will appear, you can resize the form by moving the + borders. The form is covered with a grid which simplifies + accurate positioning of the widgets. + </para> + <!--<screenshot> + <screeninfo>A window with design of a new form</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_03_new_empty_form.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>A window with design of a new form</phrase> + </textobject> + </mediaobject> + </screenshot>--> + </step> + </procedure> + <para>As with table design, <interface>Form Designer</interface> provides + <interface>Property pane</interface>. To save some space on the screen, + the pane has three tabs related to the currently + selected form: + </para> + <variablelist> + <varlistentry> + <term>The <guilabel>Properties</guilabel> tab</term> + <listitem> + <para>Contains a list of properties for the currently selected widget.</para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <!--<img src="img/property_pane_datasource_tab.png" class="icon">--> + The <guilabel>Data source</guilabel> tab + </term> + <listitem> + <para> + Contains properties related specifically to the <glossterm linkend="gloss-form-data-source">data source</glossterm> + of the currently selected widget or the form itself. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <!--<img src="img/property_pane_widget_tab.png" class="icon">--> + The <guilabel>Widgets</guilabel> tab + </term> + <listitem> + <para> + Contains a hierarchy of all widgets of the form. The list simplifies + widgets lookup by name and navigation between them. + </para> + </listitem> + </varlistentry> + </variablelist> + <para> + There is information about currently selected widget's name and type displayed + on the first and second tab. + </para> + <para>Additional toolbars are also available:</para> + <itemizedlist> + <listitem> + <para> + The <guilabel>Widgets</guilabel> toolbar used for inserting new widgets + into the form + </para> + </listitem> + <listitem> + <para> + The <guilabel>Format</guilabel> toolbar used to format form's elements (⪚ + adjusting widget's size, grouping). Formatting commands are also available + in the <guimenu>Format</guimenu> menu. More about these commands can be found + in <xref linkend="formatmenu"/>. + <!--<a href="aa_05_00_menu.html#menu_format">A.6. Format Menu</a>--> + </para> + </listitem> + </itemizedlist> + </sect2> + + <sect2 id="using-the-widgets-tab"> + <title>Using the <guilabel>Widgets</guilabel> tab</title> + <para> + The <guilabel>Widgets</guilabel> tab in the <interface>Property pane</interface> provides + a list of form widgets and their hierarchy. Each widget is presented + within the hierarchy beside other widgets being on the same level + (the same parent container). Child widgets (inside containers) are + presented using indented names. + </para> + <!--<para>In the picture below, the form (a container) contains two widgets: + <guilabel>groupBox2</guilabel> and <guibutton>options</guibutton> command button. In + turn, <guilabel>groupBox2</guilabel> (being a container itself) contains two check box + widgets. + </para> + <screenshot> + <screeninfo>Using the <quote>Widgets</quote> tab</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_04_widgets_tab.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Using the <quote>Widgets</quote> tab</phrase> + </textobject> + </mediaobject> + </screenshot>--> + <para> + Each widget has displayed its name and type. The type has also an icon + displayed - the same as the one displayed on the toolbar used while + form designing is performed. + </para> + <note> + <itemizedlist> + <listitem> + <para> + Changing the current selection on the list causes appropriate selection + on the designed form. This allows for easier widget lookup by name and + easier navigation. For example, it is possible to select a widget by + name, and then switch to the <guilabel>Properties</guilabel> tab to change the + widget's properties.</para> + </listitem> + <listitem> + <para> + Keeping the <keycap>Ctrl</keycap> key pressed while an item on the + widgets list is being selected allows to select multiple widgets at a time. + Keeping the <keycap>Shift</keycap> key pressed allows to select entire lists + of widgets.</para> + </listitem> + <!--<listitem> + <para> + When widget is inserted, it is recommended to give it a reasonable name. + For example, <guilabel>green</guilabel> check box widget has been named specifically + for its meaning, using the <guilabel>Properties</guilabel> tab + (<guilabel>Name</guilabel> property has been used to do that). Such change + can make it easier to find a widget within the list. + </para> + <screenshot> + <screeninfo>Naming the widget as <guilabel>green</guilabel></screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_04_renaming_widgets.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Naming the widget as <guilabel>green</guilabel></phrase> + </textobject> + </mediaobject> + </screenshot> + </listitem>--> + </itemizedlist> + </note> + <para> + Giving widgets reasonable names can be useful but is not mandatory. Note + that widget's name is a property that is not visible to the user of your form. + Users will only see a widget text, provided by <varname>Text</varname> property + or similar. + </para> + </sect2> + + <sect2 id="inserting-widgets-text-fields"> + <title>Inserting widgets - text fields</title> + <para> + Let's create a form providing information about persons, i.e. a form connected + it with <literal>Persons</literal> table. + </para> + <para> + If the form being designed should present data obtained from the database, + you need to place appropriate <glossterm linkend="gloss-form-field">fields</glossterm> + on it. To do this, use the buttons on the <guilabel>Widgets</guilabel> toolbar. Each button corresponds to a single widget type. + </para> + <procedure> + <step> + <para> + Click <!--<img src="img/lineedit.png" class="icon">--> + <guibutton>Text Box</guibutton> button on the <guilabel>Widgets</guilabel> toolbar. + </para> + </step> + <step> + <para> + Click on the form surface with the <mousebutton>left</mousebutton> mouse + button. A new text box widget will be placed in the point where you clicked. + Before you release you can drag your mouse to specify a desired size for the widget. + </para> + </step> + <step> + <para> + If needed, move the inserted widget using drag & drop to a desired + position. You can resize the widget afterwards by dragging one of the + small boxes appearing near its corners. Note that the boxes are only + visible when the widget is selected. If you select another widget or the + form surface, the boxes disappear. + </para> + </step> + <step> + <para>Click the <guibutton>Text Box</guibutton> toolbar button again and click + on the form surface to insert another widget. Repeat this action once + again until you get three text boxes inserted in your form. For sake of + simplicity we will limit ourselves to three data + <glossterm linkend="gloss-form-field">fields</glossterm>. + </para> + </step> + </procedure> + <note> + <itemizedlist> + <listitem> + <para> + There is a context menu available in form's design mode, activated by a + <mousebutton>right</mousebutton> mouse button click the desired widget + or the form's surface. The menu offers commands like + <!--<img src="img/editcut.png" class="icon">--><guimenuitem>Cut</guimenuitem>, + <!--<img src="img/editcopy.png" class="icon">--><guimenuitem>Copy</guimenuitem>, + <!--<img src="img/editpaste.png" class="icon">--><guimenuitem>Paste</guimenuitem>, + <!--<img src="img/editdelete.png" class="icon">--><guimenuitem>Delete</guimenuitem> + and other, more complex. Many of the commands are also provided in the + <guilabel>Menubar</guilabel>, usually <guimenuitem>Edit</guimenuitem>. + Keyboard shortcuts are also available for these commands. Some of the + commands are only available for certain types of widgets. + </para> + </listitem> + <listitem> + <para> + The commands <guimenuitem> + <!--<img src="img/editcut.png" class="icon">-->Cut</guimenuitem>,<guimenuitem> + <!--<img src="img/editcopy.png" class="icon">-->Copy</guimenuitem> and <guimenuitem> + <!--<img src="img/editpaste.png" class="icon">-->Paste</guimenuitem> + makes it possible to move or copy widgets between forms, even between separate + database projects. + </para> + </listitem> + <listitem> + <para> + Holding the <keycap>Ctrl</keycap> key down while clicking a widget allows to select + multiple widgets. + </para> + </listitem> + <listitem> + <para> + Instead of using <guimenuitem> + <!--<img src="img/editcopy.png" class="icon">-->Copy</guimenuitem> + and <guimenuitem> + <!--<img src="img/editpaste.png" class="icon">-->Paste</guimenuitem> + commands, to duplicate a widget within the same form you can hold down the + <keycap>Ctrl</keycap> key while moving the widget. After the <keycap>Ctrl</keycap> + key is released, the dragged widget will not be moved but copied in the new location. + </para> + </listitem> + </itemizedlist> + </note> + </sect2> + + <sect2 id="assigning-data-sources"> + <title>Assigning data sources</title> + <para> + The <glossterm linkend="gloss-form-field">fields</glossterm> you inserted + have no <emphasis>data source</emphasis> assigned yet, + so these are not able to display information from the database. To assign data + source, use the <!--<img src="img/database.png" class="icon">--> + <guilabel>Data Source</guilabel> tab of the <interface>Property pane</interface>. + </para> + <para> + The very first step is to specify the <glossterm linkend="gloss-form-data-source">form's data source</glossterm>, + i.e. a place the displayed data will be fetched from. As mentioned above, you + will use table <literal>persons</literal> as a + <glossterm linkend="gloss-form-data-source">data source</glossterm> + for your new form. + </para> + <procedure> + <step> + <para>Click on the form's surface, as you will alter its properties.</para> + </step> + <step> + <para> + Switch to the <!--<img src="img/database.png" class="icon">--> + <guilabel>Data Source</guilabel> tab and enter <literal>persons</literal> + table name in the <guilabel>Form's data source</guilabel> drop down list. + Alternatively, you can select this name from the drop down list. + </para> + <!--<screenshot> + <screeninfo>Entering <glossterm linkend="gloss-form-data-source">form's data source</glossterm> name</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_05_entering_form_data_source.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Entering <glossterm linkend="gloss-form-data-source">form's data source</glossterm> name</phrase> + </textobject> + </mediaobject> + </screenshot>--> + </step> + </procedure> + <para> + You have assigned <glossterm linkend="gloss-form-data-source">form's data source</glossterm>. Now you need to do specify + widget's data source. + </para> + <procedure> + <step> + <para>Click the first text field widget at the top of the form.</para> + </step> + <step> + <para> + In the <!--<img src="img/database.png" class="icon">--><guilabel>Data Source</guilabel> + tab of the property pane enter field name <varname>name</varname> in the + <emphasis>Widget's data source</emphasis> drop down list. Alternatively, you can select + this name from the drop down list. + </para> + <!--<screenshot> + <screeninfo>Entering widget's data source name</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_05_entering_text_field_data_source.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Entering widget's data source name</phrase> + </textobject> + </mediaobject> + </screenshot>--> + </step> + <step> + <para>Click on next text field widget and enter <varname>surname</varname> as the data source.</para> + </step> + <step> + <para> + Enter data sources for <varname>street</varname>, <varname>house_number</varname> + and <varname>city</varname> text <glossterm linkend="gloss-form-field">fields</glossterm> + in a similar way. + </para> + </step> + </procedure> + <para> + You can now save the form's design (this is not mandatory to test the + form in action). To save, click the + <!--<img src="img/filesave.png" class="icon">--> + <guilabel>Save object changes</guilabel> toolbar button or use the + <menuchoice><shortcut><keycombo action="simul"><keycap>Ctrl</keycap><keycap>S</keycap></keycombo></shortcut> + <guimenu>File</guimenu><guimenuitem> + <!--<img src="img/filesave.png" class="icon">-->Save</guimenuitem></menuchoice> + menu command. Upon saving you will be asked for entering the form's name. Enter + <literal>Persons</literal> as caption and click the <guibutton>OK</guibutton> + button. The form's name will be filled automatically. + </para> + <para> + This is the right moment for testing your form. Click the <!--<img src="img/state_data.png" class="icon">--> + <guibutton>Switch to data view</guibutton> toolbar button. Unless you made a + mistake while entering data sources, you should see + <glossterm linkend="gloss-form-field">form's fields</glossterm> filled + with data from the <literal>persons</literal> table. + </para> + <!--<screenshot> + <screeninfo>The <literal>Persons</literal> form in data view after inserting text fields and assigning data sources</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_06_form_with_text_fields.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>The <literal>Persons</literal> form in data view after inserting text fields and assigning data sources</phrase> + </textobject> + </mediaobject> + </screenshot>--> + <note> + <itemizedlist> + <listitem> + <para> + If you want to remove widget's <glossterm linkend="gloss-form-data-source">data source</glossterm> + assignment for a form widget, you can use <!--<img src="img/clear_left.png" class="icon">--> + <guibutton>Clear widget's data source</guibutton> button near + the <guilabel>Widet's data source</guilabel> drop down list. Similarly, you can use the + <!--<img src="img/clear_left.png" class="icon">--> + <guibutton>Clear form's data source</guibutton> button near the + <guilabel>Form's data source</guilabel> drop down list. + </para> + </listitem> + <listitem> + <para> + Use the <!--<img src="img/goto.png" class="icon">--> + <guibutton>Go to selected form's data source</guibutton> button to select + appropriate table or query in the <interface>Project Navigator</interface>, + so you can quickly open a table or query being the + <glossterm linkend="gloss-form-data-source">data source</glossterm> + of the form. + </para> + </listitem> + </itemizedlist> + <!-- TODO: mention about creating Auto Fields by using drag & drop --> + </note> + </sect2> + + <sect2 id="inserting-text-labels"> + <title>Inserting text labels</title> + <para> + To make it easier for the form's user to identify the meaning of every field + widget, these should have added text labels with appropriate titles. To + create text labels the <!--<img src="img/label.png" class="icon">--> + <literal>Label</literal> widget is used. + </para> + <para> + Insert three text label widgets onto the form, placing them on the left + side of the text fields (or on the right hand if your operating system + uses right-to-left layout). On inserting a new label, a text cursor + appears at the location where you can enter the desired title. Enter consecutively: + <literal>Name</literal>, <literal>Surname</literal> and <literal>Street</literal>. Additionally, + on the top of the form insert another label displaying name of the form, + i.e. <literal>Persons</literal>. Enlarge this label's size and and increase the font size using + <!--<a href="aa_00_00_menu.html#menu_format_font">--> + <menuchoice><guimenu>Format</guimenu><guimenuitem>Font...</guimenuitem></menuchoice> + <!--</a>--> + menu command. + </para> + <!--<screenshot> + <screeninfo>Ready to use form after adding text labels</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_06_form_with_labels.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Ready to use form after adding text labels</phrase> + </textobject> + </mediaobject> + </screenshot>--> + </sect2> + + <sect2 id="actions"> + <title>Actions</title> + <para> + An <literal>Action</literal> is a single activity isolated in the application, + available for the user to execute. It can also be executed automatically as a + reaction for a given event (⪚ after opening a form). + </para> + + <sect3 id="assigning-actions-to-form-buttons"> + <title>Assigning actions to form buttons</title> + <para> + Many actions can be assigned to form button. The assigned action is executed + after button is clicked. + </para> + <para>To assign action:</para> + <procedure> + <step> + <para>Switch to form's <interface>Design view</interface> if you have not done yet.</para> + </step> + <step> + <para> + Select the existing button widget by clicking on it or put a new button + widget onto the form. If you inserted a new button, enter its title and + press <keycombo action="press"><keycap>Enter</keycap></keycombo> key. + </para> + </step> + <step> + <para> + Click the button widget with the <mousebutton>right</mousebutton> mouse + button to display the context menu. + </para> + </step> + <step> + <para> + From the context menu select + <!--<img src="img/form_action.png" class="icon">--> + <guimenuitem>Assign action...</guimenuitem> command. + </para> + </step> + <step> + <para> + An <guilabel>Assigning Action to Command Button</guilabel> dialog window + will appear presenting a list of available actions. One of the actions + is selected if the widget already has action assigned. Otherwise the + <guilabel>Action type</guilabel> drop down list has the <guilabel>No type</guilabel> + item selected. + </para> + </step> + <step> + <para> + From the <guilabel>Action type</guilabel> drop down list select + <guilabel>Application</guilabel> item. Available application-wide actions + will be listed. + </para> + </step> + <step> + <para>Select one of the actions on the list (⪚ <guilabel>Delete Row</guilabel>).</para> + </step> + <step> + <para> + Click the <guibutton>OK</guibutton> button or press + the <keycombo action="press"><keycap>Enter</keycap></keycombo> key to + accept your selection. + </para> + </step> + </procedure> + <!--<screenshot> + <screeninfo>Assigning <guilabel>Delete Row</guilabel> action to a form's button</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_07_assigning_action_to_button.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Assigning <guilabel>Delete Row</guilabel> action to a form's button</phrase> + </textobject> + </mediaobject> + </screenshot>--> + <para> + After switching to the form's <emphasis>data view</emphasis> you can try + whether the action works. For example, if you assigned <guilabel>Delete Row</guilabel> + action, clicking the button, the current database row will be deleted, similarly + to executing <menuchoice><shortcut><keycombo action="simul"><keycap>Ctrl</keycap><keycap>Delete</keycap></keycombo></shortcut><guimenu>Edit</guimenu><guimenuitem>Delete Row</guimenuitem></menuchoice> + menu command (depending on your settings you may be asked to confirm the removal). + </para> + + <note> + <itemizedlist> + <listitem> + <para> + To remove an action assignment, select <guilabel>No type</guilabel> item from + the <guilabel>Action type</guilabel> drop down list of the + <guilabel>Assigning Action to Command Button</guilabel> dialog window. + </para> + </listitem> + <listitem> + <para> + Actions only work in the form's <emphasis>data view</emphasis>. Not every + action's assignment is reasonable. For example, the + <guimenuitem>Font...</guimenuitem> action is available in data view, but + only if you have a widget selected in the <interface>Design view</interface>. If you + make changes to the font settings the changes are applied to the text + of that selected widget. + </para> + </listitem> + </itemizedlist> + </note> + </sect3> + </sect2> + + <sect2 id="widget-layouts"> + <title>Widget layouts</title> + <para> + In most cases form widgets should be conveniently arranged and aligned. + Positioning, aligning and resizing widgets by hand is not easy and these + parameters are not adjusted when the user resizes the form. In fact the + situation is even worse because you cannot assume a given form requires + a given space because users have different font sizes and display resolutions. + </para> + <!-- + <para> + The following example presents a form where text fields and labels were + placed by hand. Some of them cannot fit in the form's window. + </para> + <screenshot> + <screeninfo>An example form with widgets that cannot not fit in the window</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_08_form_no_fit.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>An example form with widgets that cannot not fit in the window</phrase> + </textobject> + </mediaobject> + </screenshot>--> + <para> + Using special tool called widget layouts can help to automatically lay + out the form widgets. Widget layout is an action of grouping two or more + widgets so these are well positioned and have appropriate sizes. + </para> + <para> + Using layout in a form improves alignment. Moreover, its space is + better used. Text fields are closer to each other, spacing is constant. + </para> + <!--<screenshot> + <screeninfo>Example form with layout used</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_08_form_well_fit.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Example form with layout used</phrase> + </textobject> + </mediaobject> + </screenshot>--> + <para>There are two methods to create widget layout.</para> + <itemizedlist> + <listitem> + <para> + Select two or more widgets that should be placed in a common layout, + and select one of the layout types from the context menu item + <!--<a href="aa_00_00_menu.html#menu_format_layout">--> + <guilabel>Layout Widgets</guilabel> + <!--</a>-->. + </para> + </listitem> + <listitem> + <para> + Click a container widget (or a form surface itself), where widgets are + inserted and select one of the layout types from the context menu item + <!--<a href="aa_00_00_menu.html#menu_format_layout">-->Layout Widgets + <!--</a>-->. + All widgets existing within the container or within the + form, being on the same level will be put into a single common layout. + </para> + </listitem> + </itemizedlist> + <para> + In each of these cases you can also use + <menuchoice><guimenu>Format</guimenu><guimenuitem>Layout Widgets</guimenuitem></menuchoice> + menu. + </para> + <!--<screenshot> + <screeninfo>Selecting widgets that will be put into a layout</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_08_form_layout_selecting.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Selecting widgets that will be put into a layout</phrase> + </textobject> + </mediaobject> + </screenshot> + <screenshot> + <screeninfo>Four widgets are selected</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_08_form_layout_selected.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Four widgets are selected</phrase> + </textobject> + </mediaobject> + </screenshot> + <screenshot> + <screeninfo>Using the context menu for putting the widgets into a grid layout</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_08_form_layout_popup.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Using the context menu for putting the widgets into a grid layout</phrase> + </textobject> + </mediaobject> + </screenshot>--> + <para> + Widget layout is presented in the design view using a blue, green or + red box drawn with a broken line. This line is displayed only in the + form's design view. + </para> + <!--<screenshot> + <screeninfo>Widgets within a grid layout</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_08_form_layout_grid.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Widgets within a grid layout</phrase> + </textobject> + </mediaobject> + </screenshot>--> + <para>Besides the grid type, there are other widget layout types.</para> + <variablelist> + <varlistentry> + <term>vertical</term> + <listitem> + <para>Vertical widget layout</para> + <!--<screenshot> + <screeninfo>Vertical widget layout</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_08_form_layout_vertical.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Vertical widget layout</phrase> + </textobject> + </mediaobject> + </screenshot>--> + </listitem> + </varlistentry> + <varlistentry> + <term>horizontal</term> + <listitem> + <para>Horizontal widget layout</para> + <!--<screenshot> + <screeninfo>Horizontal widget layout</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_08_form_layout_horizontal.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Horizontal widget layout</phrase> + </textobject> + </mediaobject> + </screenshot>--> + </listitem> + </varlistentry> + <!-- TODO podzia poziomy / pionowy + <br><img src="img/05_04_08_form_layout_vertical_splitter.png"> + <br><br> + <br><img src="img/05_04_08_form_layout_horizontal_splitter.png"> + <br><br> + </li> --> + </variablelist> + + <sect3 id="springs-in-widget-layouts"> + <title>Springs in widget layouts</title> + <para> + A <emphasis>spring</emphasis> in widget layouts is a special, invisible element allowing + to adjust widget's position and size within layouts. Such a spring + stretches or squeezes a widget on the right, top, bottom or left hand, + so it can have desired size and position. + </para> + <para>To use a spring:</para> + <procedure> + <step> + <para> + Select <!--<img src="img/spring.png" class="icon">-->spring icon on the + <guilabel>Widgets</guilabel> toolbar. + </para> + </step> + <step> + <para>Click on a selected point of the form to insert the spring.</para> + </step> + </procedure> + <!--<para> + For the following example, the spring has been inserted on the left + hand of the text label "Persons". The label is thus displayed on the + right hand of the form. To make the spring work, it has been put into + a common horizontal layout with the label. + </para> + <screenshot> + <screeninfo>Horizontal layout containing a spring and a text label</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_08_form_spring.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Horizontal layout containing a spring and a text label</phrase> + </textobject> + </mediaobject> + </screenshot>--> + <para> + To make springs work you need to create a global widget layout, i.e. a + layout for the form itself. Then, springs can use edges of the form as + a boundary for expanding. + </para> + </sect3> + <!-- + + TODO: The entire text in this section is built around a screenshot + example, so it's commented out for now. + + <sect3 id="advanced-widget-layouts"> + <title>Advanced widget layouts</title> + <para> + Widget layouts can be combined (or nested). On the following example + you can identify two nested layouts: + </para> + <orderedlist> + <listitem> + <para> + Horizontal layout with a spring, aligning the <literal>Persons</literal> + text label to the right. + </para> + </listitem> + <listitem> + <para>Grid layout grouping widgets on the whole form.</para> + </listitem> + </orderedlist> + <screenshot> + <screeninfo>Two widget layouts combined: horizontal layout inside of a grid layout</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_08_form_advanced_layout.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Two widget layouts combined: horizontal layout inside of a grid layout</phrase> + </textobject> + </mediaobject> + </screenshot> + <para> + The horizontal layout is treated in the example as a single widget by + the grid layout - it takes exactly one <quote>cell</quote> of the grid. + After opening a form designed this way in the data view, you can notice + (by resizing the form) that: + </para> + <itemizedlist> + <listitem> + <para> + <literal>Persons</literal> text label thanks to the spring used is constantly + aligned to the to the right side of the form. + </para> + </listitem> + <listitem> + <para> + Text fields take all of the available width thanks to putting them + into the grid layout. + </para> + </listitem> + <listitem> + <para> + All the form's widgets are pushed to the top thanks to the spring + used at the bottom of the form. + </para> + </listitem> + </itemizedlist> + <screenshot> + <screeninfo>The form using the two layouts displayed in data view</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_08_form_advanced_layout_view.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>The form using the two layouts displayed in data view</phrase> + </textobject> + </mediaobject> + </screenshot> + </sect3>--> + + <sect3 id="removing-widget-layouts"> + <title>Removing widget layouts</title> + <para> + To remove widget layout without removing widgets, perform one of + these actions: + </para> + <itemizedlist> + <listitem> + <para> + Click with the <mousebutton>right</mousebutton> mouse button on + the layout's border and select <guimenuitem>Break Layout</guimenuitem> + command from the context menu. + </para> + </listitem> + <listitem> + <para> + Click with the <mousebutton>left</mousebutton> mouse button on + the layout's border and select + <menuchoice><guimenu>Format</guimenu><guimenuitem>Break Layout</guimenuitem></menuchoice> + menu command. + </para> + </listitem> + </itemizedlist> + <note> + <para> + Removing widget layout using the <guimenuitem>Break Layout</guimenuitem> + command will not remove widgets contained in the layout. If you want to + remove the widgets as well, just select the layout by clicking on its + border and press <keycap>Delete</keycap> key or use + <menuchoice><guimenu>Edit</guimenu><guimenuitem> + <!--<img src="img/editdelete.png" class="icon">-->Delete</guimenuitem></menuchoice> + menu command or context menu command. + </para> + </note> + </sect3> + + <sect3 id="size-policies-for-widgets-within-a-layout"> + <title>Size policies for widgets within a layout</title> + <para> + Instead of setting a fixed size for your widgets, in &kexi; you can + choose between various widget's size policies. A <emphasis>size policy</emphasis> + is a flexible strategy for controlling how a widget is stretched (or shrunk) + depending on other neighbouring widgets and space available within the form. + </para> + <para> + After putting widgets into a <emphasis>layout</emphasis>, typically each widget + gets a proportional (<guilabel>Preferred</guilabel>) size policy. These widgets + will be automatically resized with preferred settings, depending on their + type and size of the entire layout itself. For example, three buttons put + into the horizontal layout will be resized to fit their visible text. + </para> + <para>For each widget inserted into the form, there are settings for size policy + available in the <interface>Property Editor</interface>. The settings are presented + as a group of properties called <guilabel>Size Policy</guilabel>. + </para> + <!--<screenshot> + <screeninfo>A group of properties for defining a widget's size policy</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_09_size_policy_properties.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>A group of properties for defining a widget's size policy</phrase> + </textobject> + </mediaobject> + </screenshot>--> + <para>This group of properties contains:</para> + <variablelist> + <varlistentry> + <term><guilabel>Horizontal Size Policy</guilabel></term> + <listitem> + <para>defining horizontal size of the widget,</para> + </listitem> + </varlistentry> + <varlistentry> + <term><guilabel>Vertical Size Policy</guilabel></term> + <listitem> + <para>defining vertical size of the widget,</para> + </listitem> + </varlistentry> + <varlistentry> + <term><guilabel>Horizontal Stretch</guilabel></term> + <listitem> + <para> + defining strength of activity of the + <guilabel>Horizontal Size Policy</guilabel>, + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><guilabel>Vertical Stretch</guilabel></term> + <listitem> + <para> + defining strength of activity of the + <guilabel>Vertical Size Policy</guilabel> + </para> + </listitem> + </varlistentry> + </variablelist> + + <sect4> + <title>Values of size policies</title> + <para> + The following values are available in the drop down list for + <guilabel>Horizontal Size Policy</guilabel> and + <guilabel>Vertical Size Policy</guilabel> properties visible + in the <interface>Property Editor</interface>: + </para> + <variablelist> + <varlistentry> + <term><guilabel>Fixed</guilabel></term> + <listitem> + <para> + this value means that the widget cannot be automatically resized; it + should maintain the constant size defined at design time (width or height), + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><guilabel>Minimum</guilabel></term> + <listitem> + <para> + this value means that the original size of the widget is set as minimal + allowed, it is sufficient and there is no need for expanding the widget, + but the widget will be expanded if needed. This type of policy can be used + to force the widget to be expanded to the whole width or height, especially + if you set a stretch value greater than 0. + </para> + <!--<screenshot> + <screeninfo>Text field and two buttons within a grid layout (Minimum horizontal size policy is set for both buttons, so these are slightly wider than needed)</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_09_size_policy_minimum.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Text field and two buttons within a grid layout (Minimum horizontal size policy is set for both buttons, so these are slightly wider than needed)</phrase> + </textobject> + </mediaobject> + </screenshot>--> + </listitem> + </varlistentry> + <varlistentry> + <term><guilabel>Maximum</guilabel></term> + <listitem> + <para> + this value means that the original size of the widget is set as maximum + allowed and can be decreased without breaking the widget's usability + and readability if other widgets need more space, + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><guilabel>Preferred</guilabel></term> + <listitem> + <para> + this value means that the original size of the widget is the best and + preferred; the widget can be shrunk or expanded however and it + will stay readable, + </para> + <!--<screenshot> + <screeninfo>Text field and two buttons within a grid layout (Preferred horizontal size policy is set for both buttons)</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_09_size_policy_preferred.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Text field and two buttons within a grid layout (Preferred horizontal size policy is set for both buttons)</phrase> + </textobject> + </mediaobject> + </screenshot>--> + </listitem> + </varlistentry> + <varlistentry> + <term><guilabel>Expanding</guilabel></term> + <listitem> + <para> + this value means that the original size of the widget is reasonable but + the widget can be also shrunk; it can be expanded as well to take + as much space as possible, + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><guilabel>Minimum Expanding</guilabel></term> + <listitem> + <para> + this value means that the original size of the widget is allowed; it + can be expanded to take as much space as possible, + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><guilabel>Ignored</guilabel></term> + <listitem> + <para> + this value means that the original size of the widget is ignored; the + widget can be expanded to take as much space as possible but other + widgets usually will not allow for that + </para> + </listitem> + </varlistentry> + </variablelist> + <para> + Different widget types have various default size policies; for example, + button widgets have default size policy set to <guilabel>Minimum</guilabel> (in both directions), + while text field widgets have vertical size policy set to <guilabel>Fixed</guilabel>. + </para> + <para> + The most frequently used size policies are <guilabel>Preferred</guilabel>, + <guilabel>Minimum</guilabel> and <guilabel>Maximum</guilabel>. + </para> + </sect4> + + <sect4> + <title>Vertical and horizontal stretch</title> + <para> + The <guilabel>Vertical Stretch</guilabel> and <guilabel>Horizontal Stretch</guilabel> + properties accept integer values greater than or equal to 0. These properties allow to fine-tune the + behavior of size policies. The default value for the properties is 0. + A higher value of the stretch means that the widget will be expanded + more than widgets for which a lower stretch value is set. <!--For example, + the following image presents two buttons where the first button has + Vertical Stretch set to 0 and the second button has Vertical Stretch + set to 1.--> + </para> + <!--<screenshot> + <screeninfo>Size of button widgets affected by setting Vertical Stretch property of the second button to 1</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_09_size_policy_vertical_stretch.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Size of button widgets affected by setting Vertical Stretch property of the second button to 1</phrase> + </textobject> + </mediaobject> + </screenshot>--> + </sect4> + </sect3> + </sect2> + + <sect2 id="setting-widgets-size-and-position-by-hand"> + <title>Setting widgets size and position by hand</title> + <para>In case when your form has no main layout set for auto-positioning and + auto-resizing its widgets, you will probably want to modify the position and size of widgets so the form can look cleaner and be easier to use. The &kexi; form + designer simplifies this task by offering the following groups of commands: + </para> + <itemizedlist> + <listitem> + <para> + Adjusting sizes of selected widgets. The commands are available in the + <menuchoice><guimenu>Format</guimenu><guisubmenu>Adjust Widgets Size</guisubmenu></menuchoice> + submenu of the menubar and in the + <menuchoice><guisubmenu>Adjust Widgets Size</guisubmenu></menuchoice> + submenu of the context menu. The toolbar's drop down + button <!--<img src="img/aogrid.png" class="icon">--><guibutton>Adjust Widgets Size</guibutton> + is also available. + </para> + <variablelist> + <varlistentry> + <term><!--<img src="img/aofit.png" class="icon">--><guilabel>To Fit</guilabel></term> + <listitem> + <para> + The size of the selected widgets will be altered so each widget will be + resized to its preferred size and its contents; for example, a text + label's size will be changed to fit its text. The position of the widgets + will not be changed. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><!--<img src="img/aogrid.png" class="icon">--><guilabel>To Grid</guilabel></term> + <listitem> + <para> + The size of the selected widgets will be altered so each widget's corner + will be placed on the form's (or other container's) grid point. + The widget's position can be slightly altered. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><!--<img src="img/aoshortest.png" class="icon">--><guilabel>To Shortest</guilabel></term> + <listitem> + <para> + The height of the selected widgets will be altered so that each of them + will have the same height as the shortest one. The position of the widgets + will not be changed. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><!--<img src="img/aotallest.png" class="icon">--><guilabel>To Tallest</guilabel></term> + <listitem> + <para> + The height of the selected widgets will be altered so that each of them + will have the same height as the tallest one. The position of the widgets + will not be changed. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><!--<img src="img/aonarrowest.png" class="icon">--><guilabel>To Narrowest</guilabel></term> + <listitem> + <para> + The width of the selected widgets will be altered so that each of them + will have the same height as the narrowest one. The position of the + widgets will not be changed. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><!--<img src="img/aowidest.png" class="icon">--><guilabel>To Widest</guilabel></term> + <listitem> + <para> + The width of the selected widgets will be altered so that each of them + will have the same height as the widest one. The position of the widgets + will not be changed. + </para> + </listitem> + </varlistentry> + </variablelist> + </listitem> + <listitem> + <para> + Aligning positions of the selected widgets. The commands are available + in the + <menuchoice><guimenu>Format</guimenu><guisubmenu>Align Widgets Position</guisubmenu></menuchoice> + submenu of the menubar and in the + <menuchoice><guisubmenu>Align Widgets Position</guisubmenu></menuchoice> + submenu of the context menu. The toolbar's drop + down button <!--<img src="img/aoleft.png" class="icon">--> + <guibutton>Align Widgets Position</guibutton> is also available. + </para> + <variablelist> + <varlistentry> + <term><!--<img src="img/aoleft.png" class="icon">--><guilabel>To Left</guilabel></term> + <listitem> + <para> + All the selected widgets' left positions will be moved to the + position of the leftmost widget's left edge. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><!--<img src="img/aoright.png" class="icon">--><guilabel>To Right</guilabel></term> + <listitem> + <para> + All the selected widgets' right positions will be moved to the + position of the rightmost widget's right edge. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><!--<img src="img/aotop.png" class="icon">--><guilabel>To Top</guilabel></term> + <listitem> + <para> + All the selected widgets' top positions will be moved to the + position of the uppermost widget's upper edge. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><!--<img src="img/aobottom.png" class="icon">--><guilabel>To Bottom</guilabel></term> + <listitem> + <para> + All the selected widgets' bottom positions will be moved to the + position of the bottommost widget's bottom edge. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><!--<img src="img/aopos2grid.png" class="icon">--><guilabel>To Grid</guilabel></term> + <listitem> + <para> + All the selected widgets' top-left corners will be moved so that + they are positioned in the nearest grid point. + </para> + </listitem> + </varlistentry> + </variablelist> + <para>None of the above commands resizes the widgets.</para> + </listitem> + </itemizedlist> + <para> + There are also additional commands available: + <!--<img src="img/raise.png" class="icon">--><guimenuitem>Bring Widget to Front</guimenuitem> + (i.e. above all other widgets) and + <!--<img src="img/lower.png" class="icon">--><guimenuitem>Send Widget to Back</guimenuitem> (i.e. below all + other widgets). These two commands are rarely used, as it is not + common to place one widget on top of an other (except when a + container widget contains other widget inside). Also note that clicking + a widget with a mouse button is enough to bring the widget to front. + </para> + </sect2> + + <sect2 id="setting-the-tab-order"> + <title>Setting the tab order</title> + <para> + A widget's focus determines that widget's activity available using keyboard. + Focus is related to widgets displayed in the form's data view. Exactly one + form widget can have focus at the same time. The most frequent use of focus + is text entry (when a given text field is active, i.e. it is focused). + An other example is a button widget - when focused, it is possible to + <quote>press</quote> it using the <keycombo action="press"><keycap>Enter</keycap></keycombo> + or <keycombo action="press"><keycap>Space</keycap></keycombo> key instead of a mouse button. + </para> + <para> + There are a few methods of making the widgets active (moving the focus + to the widget): clicking with a mouse button, rotating the mouse wheel + over the widget, or using the <keycombo action="press"><keycap>Tab</keycap></keycombo> + key. The latter method is often used because of its speed and convenience + for users. Availability of the focusing methods is controlled by + <guilabel>Focus Policy</guilabel> property of a given widget. + </para> + <para> + There is a relationship between focusing (activating) widgets using <keycombo action="press"><keycap>Tab</keycap></keycombo> + key and tab order setting of a form. After pressing the <keycombo action="press"><keycap>Tab</keycap></keycombo> key, the + next widget should be focused, so the form should know about the tab order. + </para> + <para>To alter tab order for a form's widget:</para> + <procedure> + <step> + <para>Switch to design view of the form.</para> + </step> + <step> + <para> + Execute <menuchoice><guimenu>Edit</guimenu><guimenuitem>Edit Tab Order...</guimenuitem></menuchoice> + menu command. The <guilabel>Edit Tab Order</guilabel> dialog will appear with settings for this form. + </para> + <!--<screenshot> + <screeninfo>A window for editing tab order for a form</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_11_tab_stop_dialog.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>A window for editing tab order for a form</phrase> + </textobject> + </mediaobject> + </screenshot>--> + <para> + The window contains a list with two columns: the first column displays + widget names, the second - types of the widgets. To make it easier to + recognize meaning of the names and types for the user, icons related + to the types are also displayed. The list contains only widgets having + focus policy allowing to use the <keycap>Tab</keycap> key. The window + allows you to change the tab order or set the automatic tab order. + </para> + </step> + <step> + <para>To change tab order, either:</para> + <itemizedlist> + <listitem> + <para> + Click a selected widget name in the widgets list and drag it + to a desired position (up or down) using the mouse. + </para> + </listitem> + <listitem> + <para> + Click a selected widget name on the widgets list and use + <guibutton>Move Up</guibutton> or <guibutton>Move Down</guibutton> + buttons, to move the widgets to a desired position. + </para> + </listitem> + <listitem> + <para> + Click the <guilabel>Handle tab order automatically</guilabel> check box to set the + automatic tab order for the form. If this option has been switched + on, any changes made to the list of widgets by hand are not taken + into account - &kexi; will be handling the tab orders on its own. + The automatic ordering means that the top-left widget will be focused + first (or the top-right if your operating system uses right-to-left + layout), and the order comes from the left to right (from the right + to left, respectively) and from the top to bottom. + </para> + <!--<screenshot> + <screeninfo>Automatic tab order for a form</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="img/05_04_11_auto_tab_stop.png" format="PNG"/> + </imageobject> + <textobject> + <phrase>Automatic tab order for a form</phrase> + </textobject> + </mediaobject> + </screenshot>--> + </listitem> + </itemizedlist> + </step> + <step> + <para> + Click the <guibutton>OK</guibutton> button to accept the changes or <guibutton>Cancel</guibutton> button to dismiss + the changes. + </para> + </step> + </procedure> + </sect2> + </sect1> |