Eloquence JDLG 1.5 ================== Revision: 1.5.7 2010-12-21 JDLG 1.5.0 was released in July 2009. Release history: - JDLG 1.5.1 (August 2009): Bug fixes - JDLG 1.5.2 (October 2009): Enhancements and bug fixes - JDLG 1.5.3 (October 2009): Bug fixes - JDLG 1.5.4 (November 2009): Enhancements and bug fixes - JDLG 1.5.5 (March 2010): Enhancements and bug fixes - JDLG 1.5.6 (August 2010): Bug fixes - JDLG 1.5.7 (December 2010): Enhancements and bug fixes Please refer to the section "Recent changes" below for details. Please refer to the section "Known issues" at the end of this document for a list of known issues and limitations. Enhancement Summary ------------------- JDLG 1.5 adds the splitter and tree object classes and enhances the groupbox object class to support scrolling. It also adds support for context specific popup menus. Starting with JDLG 1.5.2, EditText and ComboBox objects support the overwrite editing mode (to be explicitly enabled through a configuration property or System attribute). Configuration changes --------------------- The following new configuration options are supported: eloquence.config.sessionview.quitonclose If set to true (the default) the close button of the JDLG console window will exit JDLG. If set to false, the close button will minimize the JDLG console window. This option is only effective if a tray icon is active. Otherwise, the windows close button will always exit JDLG. eloquence.config.editmode Specifies if the overwrite mode is activated for EditText and ComboBox objects, if the insert or overwrite mode is used when JDLG starts, and if the user may toggle between insert and overwrite mode using the INSERT key. Possible values are: - insert-only : Activates insert mode, user cannot toggle between insert and overwrite mode. This is the default. - overwrite-only : Activates overwrite mode, user cannot toggle between insert and overwrite mode. - insert : JDLG starts in insert mode, user may use the INSERT key to toggle between insert and overwrite mode. - overwrite : JDLG starts in overwrite mode, user may use the INSERT key to toggle between insert and overwrite mode. In overwrite mode, a blinking block cursor is displayed in EditText and ComboBox objects. When using TAB/ENTER to enter a single-line EditText or ComboBox object, the contents are not selected and the cursor is put on the leftmost position. The editing mode (insert or overwrite) is a global property. If multiple sessions are opened in JDLG, switching from insert to overwrite mode and vice-versa affects all sessions, not just the current session. A program may query or modify the editing mode using the System.editmode string attribute. Please note that modifying the editing mode through the System.editmode attribute does not affect a currently focused EditText or ComboBox object. Application config file enhancements ------------------------------------ The parser of the application config file was replaced. This simplifies configuration changes and also in addition supports using an "INI" config file format as an option. The new parser is fully backwards compatible and accepts either format. The following section describes the enhancements: - The order of applications listed in the JDLG console window is now equivalent to the order in the application configuration file. - The syntax of the .parameter and .environment keywords in the application configuration file was simplified. It is no longer required to provide a sequence number (for example .parameter.0 .parameter.1 etc.). The .parameter and .environment values are read in the order they are specified in the configuration file. The numbering is ignored and may be omitted. The example below defines the environment variables HOME and DRIVER: APPL.environment = HOME=/home/$login APPL.environment = DRIVER=$host:$port The sequence number of the parameters (for example, APP.environment.1) is no longer required. However, if the sequence number is omitted the specified .parameter value is parsed as a list of entries, separated by spaces. The usual command line quoting rules apply. The example below defines a command line consisting of the -dlg option and the program to be execxuted. The line specifying the -log option may be uncommented without renumbering the remaining .parameter lines. APPL.parameter = -dlg $host:$port #APPL.parameter = -log "C:\Temporary Files\eq.log" APPL.parameter = PROGRAM,VOLUME As the log file name contains a space it must be quoted here (single or double quotes may be used). The .command keyword may now be used as a synonym for .parameter. For example: APPL.command = -dlg $host:$port PROGRAM,VOLUME - The INI file format may be used for the application configuration file as an option. Please note that this requires that the whole configuration file follows the INI file format. It is not possible to mix the original configuration file format with the INI format. For example: # The first application [APP1] name = Application 1 server = 192.168.77.88 protocol = rdlg command = APP1,APPS # The second application [APP2] name = Application 2 server = 192.168.77.88 protocol = rdlg command = APP2,APPS Context menus ------------- By specifying a context menu for an object (or a parent object) a popup menu may be opened with the right mouse button. New attributes: contextmenu, string, get/set specifies the path to a MENU object (in the current dialog or a model) that is opened at the mouse position when the right mouse button is pressed. The .contextmenu attribute specifies the path of a menu object in either the current or another dialog (for example, a model). It is only validated when opening the popup menu. An invalid value has no effect. The .contextmenu attribute is available for all object types. A .contextmenu object path starting with a '.' dot character is considered dialog-relative, i.e., the id of the current dialog is prepended. Pressing the right mouse button does not change the focus object. When selecting an entry in the context menu that specifies a rule value other than zero, DLG DO will return with this rule value and the path to the object under the mouse cursor when the popup menu was opened. If the selected menu item has a zero rule value, DLG DO will not return. Any change in the status of a menuitem (eg checked, or radio item selected) is kept. When pressing the right mouse button, the following behavior applies: - If the object under the mouse cursor specifies a .contextmenu the context menu is opened. When the popup menu is completed the DLG DO may return, depending on the selected menu item. - If the object under the mouse cursor does not specify a .contextmenu the further behavior depends on the object type. - For EditText or ComboBox objects the edit clipboard context menu is opened, unless disabled in the configuration using eloquence.config.clipboardcontextmenu = off. - Otherwise the parent objects are inquired if a .contextmenu is specified. - If none of the parent objects specify a .contextmenu and the dialog specifies a nonzero .rmbr value, the DLG DO returns with this rule value. The returned path specifies the object under the mouse cursor when the right mouse button was pressed. This applies to objects of all classes, including those that do not act upon a mouse click or return a rule value, for example StaticText objects. With all object classes, the .rmbmask integer attribute may be used to specify which mouse button(s) trigger a context menu or .rmbr rule. Possible values are: - 1: the left mouse button - 2: the middle mouse button (e.g., the mouse-wheel button) - 4: the right mouse button and any combination of these, for example 6 (middle and right) or 7 (all buttons). By default, .rmbmask is set to 4 so that JDLG opens the context menu or executes the .rmbr rule when the right mouse button is clicked. Dialog object class ------------------- new attributes: margin: integer get/set If set to a nonzero value, a half cell margin is assumed for any children in the dialog. The default value is zero. minheight: integer get/set The minheight attribute may be used to specify a minmal height of a dialog. This is only effective if the dialog is set to the "layout" resizepolicy. minwidth: integer get/set The minwidth attribute may be used to specify a minmal width of a dialog. This is only effective if the dialog is set to the "layout" resizepolicy. Groupbox object class --------------------- A groupbox may have a virtual size that may exceed the visible size. If defined, scroll bars are provided as needed. This allows using a groupbox to implement dialog elements that exceed the dialog size, for example a variable list of fields. new attributes: margin: integer get/set If set to a nonzero value, a half cell margin is assumed for any children in the groupbox. The default value is zero. vheight: integer, get/set Virtual height of the dialog. If it exceeds the visible height a scroll bar is provided. The default vheight is zero. vwidth: integer, get/set Virtual width of the dialog. If it exceeds the visible width a scroll bar is provided. The default vwidth is zero. Example programs: TABLE Pushbutton object class ----------------------- new attributes: focuscolor: string, get/set The focuscolor attribute may be used to specify the background color of a push button that has the keyboard focus. ListBox object class -------------------- new attributes: colcontextmenu: integer, get/set This attribute allows to enable or disable the column context menu to show or hide selected ListBox columns. By default, it is set to nonzero to enable the column context menu. To disable the context menu it may be set to zero. PopText object class -------------------- new attributes: traversecr: integer, get/set If traversecr is set to nonzero (the default value), pressing the ENTER key either confirms the current selection and issues the PopText rule to the program if the selection list is open, or moves the focus to the next focusable object if the selection list is closed. If traversecr is set to zero, the ENTER key always triggers the PopText rule and does not move the focus. HTMLView object class --------------------- new attributes: border: integer, get/set By default, an HTMLView displays a line border around its scroll pane, plus a white border around the HTML body area. This is equivalent to setting the border attribute to 2. To disable one or both of these borders, the values below are supported: 0 = no border 1 = line border around scroll pane 2 = like 1, plus white border around HTML body area (default) Atom attribute (system and application object) ---------------------------------------------- The atom attribute may be used to save application key/data value pairs in JDLG. This attribute is supported for the system and application objects. Values stored in the system.atom attribute are accessible to all applications connected to the same JDLG process and stay in memory until the JDLG process ends. Values stored in the application.atom attribute are only accessible to the application session. An empty string is returned if no associated key is present. To remove a key/value pair, the key may be set to an empty string. For example: DLG GET "system.atom[sample]",Value$ IF LEN(Value$) THEN PRINT "sample atom is present." ELSE PRINT "sample atom is not present" DLG SET "system.atom[sample]","TIME="&TIME$ END IF PRINT "value=";Value$ Splitter object class --------------------- The splitter object is a layout element that contains exactly two objects of type groupbox or splitter and offers user- controlled resizing of its elements. The splitting may be vertical or horizontal. class name: splitter attributes: border: integer, get/set 1 (default) = the default splitter border is displayed 0 = no border is displayed The splitter border, if displayed, reduces the usable size for contained objects. orientation: integer, get/set 0 = vertical (default), 1 = horizontal position: integer, get/set relative position of the divider in size units dividersize: integer, get/set size of the divider in pixel units, 0 = default size (default) quickexpand: integer, get/set 0 = no buttons (default), 1 = show buttons Notes: - The size of an embedded group box or splitter is ignored and it is resized as needed. A virtual size may be defined for a group box, it is then scrollable if insufficient space is available. - The border attribute of the embedded group box is ignored and no border is drawn. - The splitter object itself never gets the keyboard focus. Example programs: SPLITTER TREE3 Tree object class ----------------- The tree object may be used to display hierarchical data. There are two types of entries, "nodes" that may contain dependent entries ("children") and "leaves" that do not. Entries may be added dynamically (when opening a node). The tree content is internally maintained as a linear list. Dependent entries ("children") are immediately ordered below their parent node. Nodes may be empty and return an event when opened. This allows an application to dynamically fill the tree content as needed. Optionally, these nodes may automatically become emptied when closed (collapsed). The line, add and ins attributes expect an entry definition as an argument. It has multiple fields, separated by the character defined with the delim attribute. {level}[+-] | Text [ | UDATA ] The | character represents the delimiter character. It is used to separate different fields. (Please note that by default the TAB character is used as delimiter.) The level field is an integer specifying the indention level of this entry. Higher indention levels designate a dependent ("child") entry. After the indention level, a + or - character may be present. A "+" indicates the entry is a node and should default to an expanded state. A "-" indicates a node entry that is displayed collapsed (the default for a node). By default, an entry that has no dependent entries ("children") is considered a leaf. An entry that has dependent entries is considered a node. The Text field specfies the text of the entry. It may use HTML content. If present, the udata field defines the udata attribute of the entry. If not present the udata value is unchanged. class name: tree attributes: activeline, integer, get/set The activeline attribute represents the currently selected node or leaf. A zero value indicates no entry is selected. Please note that DLG SET activeline automatically expands any parent node of the selected node or leaf on the next DLG DO or DLG DRAW. add, string, set The add attribute adds a new entry at the end of the tree. Multiple entries may be added, separated by a LF character. The first field of each entry specifies the indention level. A zero indention level adds a top-level entry. A nonzero positive indention level adds an entry in the specified level, which presumes that this level or the parent level exists. add[n], string, set The add[n] attribute adds a new dependent entry to the node specified by n (1-based). Multiple entries may be added, separated by a LF character. If n is zero it behaves the same as the add attribute and adds a new entry at the end of the tree. If n is nonzero a new entry is added as dependent entry of the specified node. If dependent entries already exist, the new entry is appended after the last dependent entry. If multiple entries are added, the first field of each entry specifies the relative indention level among the new entries. children, integer, get The children attribute may be used to obtain the number of dependent entries of the "current" entry, specified by the cy attribute. A zero result indicates an empty node or a leaf. children[n], integer, get The children[n] attribute may be used to obtain the number of dependent entries of the node specified by n (1-based). If n is zero it behaves the same as the children attribute. clear, integer, set The clear attribute is used to reset the content of the tree. The argument is ignored. content, string, get/set Obtains the tree content or replaces the tree content. Multiple entries are separated by a LF character. cy, integer, get/set cy represents the index (1-based) of the "current" entry in the tree. It is set implicitly when an event is returned (like opening an empty node or selecting an entry). Otherwise it indicates the currently selected entry. del, integer, set The del attribute deletes the "current" entry from the tree, specified by the cy attribute. If the argument is nonzero, the specified entry is deleted, including all dependent entries if present. If the argument is zero, only the dependent entries are deleted. If no dependent entries are present, nothing is deleted. del[n], integer, set The del attribute deletes the entry specified by n (1-based) from the tree. If n is zero it behaves the same as the del attribute. If the argument is nonzero, the specified entry is deleted, including all dependent entries if present. If the argument is zero, only the dependent entries are deleted. If no dependent entries are present, nothing is deleted. delim, string, get/set Separates different fields in a line. The default delimiter is the TAB character. emptynode, integer, get/set The emptynode attribute specifies the rule to be returned when an empty node is opened (expanded). If set to zero (the default) the event is ignored. If set to a nonzero value, this causes a DLG DO operation to return when a user tries to open an empty node. The cy attribute is set. emptynodeauto, integer, get/set A program may use the emptynode attribute to fill an empty node on demand. In this context, if the emptynodeauto attribute is set to 1, a node that was filled on demand will be emptied automatically as soon as it is closed (collapsed). The default value is 0. ins, string, set The ins attribute inserts a new entry to the tree before the "current" entry, specified by the cy attribute. Multiple entries may be inserted, separated by a LF character. If multiple entries are inserted, the first field of each entry specifies the relative indention level among the new entries. ins[n], string, set The ins[n] attribute inserts a new entry to the tree before the entry specified by n (1-based). If n is zero it behaves the same as the ins attribute. Multiple entries may be inserted, separated by a LF character. If multiple entries are inserted, the first field of each entry specifies the relative indention level among the new entries. line, string, get/set The line attribute may be used to access the "current" entry in the tree, specified by the cy attribute. When setting data it may be used to change the text and the udata value (the first field is ignored). When obtaining data, only the first and second fields are returned. line[n], string, get/set The line[n] attribute may be used to obtain or change the entry in the tree specified by n (1-based). If n is zero it behaves the same as the line attribute. lines, integer, get Returns the current number of entries in the tree. open, integer, get/set The open attribute may be used to change the expansion state of the "current" node, specified by the cy attribute, or obtain its state. A zero argument specifies to close the node or indicates that the node is closed (collapsed), 1 opens a node or indicates a node is open (expanded). For empty nodes or leaves a zero is assumed. open[n], integer, get/set The open[n] attribute may be used to change the expansion state of the node specified by n (1-based) or to obtain its state. If n is zero, it behaves the same as the open attribute. openall, integer, set The openall attribute may be used to expand or collapse all expandable/collapsable nodes in the tree at once. Specify a nonzero argument to expand all nodes or a zero argument to collapse all nodes. Please note that this attribute behaves in a special way until the tree has been displayed for the first time. In this case, the openall status is marked for delayed execution on the first DLG DO or DLG DRAW. This has the following implications: If used with a nonzero argument, any subsequent DLG SET open will reset the saved openall status. If used with a zero argument (collapse all), subsequent DLG SET open,1 invocations are also marked for delayed execution. This way it is possible to collapse all nodes and then expand selected nodes before the tree is displayed for the first time. parent, integer, get The parent attribute may be used to obtain the index of the parent node (1-based) of the "current" entry specified by the cy attribute. A zero result indicates that the entry has no parent (i.e., it is a top-level entry). parent[n], integer, get The parent[n] attribute may be used to obtain the index of the parent node (1-based) of the entry specified by n (1-based). If n is zero it behaves the same as the parent attribute. rule, integer, get/set The rule attribute specifies the rule to be returned on the event type specified by the singleclick attribute. If set to zero (the default) the event is ignored. If set to a nonzero value this causes a DLG DO operation to return when an event occurs that should issue a rule (depends on the setting of the singleclick attribute). The cy and activeline attributes are set. ruleoverride, integer, get/set This attribute defines the behavior when a mouse click moves the focus away from an EditText or ComboBox object to a Tree object and changes the current Tree selection so that a rule should be issued (depends on the setting of the singleclick attribute). In this situation, the program should be notified about both the EditText/ComboBox and the Tree event. If ruleoverride is set to 0, first the EditText/ComboBox rule is issued. The Tree rule is saved to become issued immediately on the next DLG DO invocation, except if a DLG SET .focus is executed in between these two DLG DO invocations. If set to 1, only the Tree rule is issued, where the object path returned to the program refers the EditText/ComboBox object. The default value is 0. singleclick, integer, get/set The singleclick attribute specifies which event type will issue a Tree rule to the program. 0 = mouse double click, ENTER and SPACE keys 1 = mouse single click (*), ENTER and SPACE keys 2 = mouse double click, UP/DOWN and ENTER and SPACE keys 3 = mouse single click (*), UP/DOWN and ENTER and SPACE keys The default value is 3. *) A mouse single click on a node entry only issues a rule if this changes the selection in the tree. udata, integer/string, get/set The udata attribute may be used to obtain or set the udata field of the "current" entry in the tree, specified by the cy attribute. udata[n], integer/string, get/set The udata[n] attribute may be used to obtain or set the udata field of the entry in the tree specified by n (1-based). If n is zero it behaves the same as the udata attribute. useicons, integer, get/set The useicons attribute specifies whether the default icons for a node or leaf are displayed. A zero value causes the icons to not be displayed. The default is 1. Please note that the useicons attribute has the side effect that all nodes in the tree are closed (collapsed). Example programs: TREE2 TREE3 Recent changes -------------- Changes in JDLG version 1.5.7: - The dialog layout calculation was revised and fixed (#3999). If a dialog is set to the "layout" resizepolicy, the dialog size calculation could be wrong in some cases if the dialog was made invisible and then visible again. This could cause an unexpected dialog layout. - ListBox: DLG GET .content could return a wrong result (#3988). - ListBox: The columns popup menu is now scrollable if a ListBox contains a high number of columns so that the popup menu would otherwise expand beyond the screen height (#3990). - A .contextmenu object path starting with a '.' dot character is now considered dialog-relative, i.e., the id of the current dialog is prepended. - PopText: The .traversecr attribute was added (#3989). The default value is nonzero to retain the previous PopText behavior. If traversecr is set to nonzero (the default value), pressing the ENTER key either confirms the current selection and issues the PopText rule to the program if the selection list is open, or moves the focus to the next focusable object if the selection list is closed. If traversecr is set to zero, the ENTER key always triggers the PopText rule and does not move the focus. - Fixed a regression where the cursor keys could no longer be used to navigate the POPUP BOX buttons (#4011). This was caused by a side effect of a change implemented in JDLG version 1.5.4. - Pressing a button (PushButton, RadioButton, CheckBox) which has the attributes .ruleoverride=1 and .tabstop=0 set did not return the path of a currently focused EditText or ComboBox object to the program (#4012). Instead, the path of the button object was returned to the program, regardless which object was currently focused. - Pressing a button (PushButton, RadioButton, CheckBox) located in a TabBox or StatusBar does not change the current focus. A side-effect was fixed where such a button could trigger an EditText or ComboBox rule, although the current focus is not changed, if the button has the .ruleoverride=0 attribute set. - Pressing a non-focusable button, i.e., a PushButton, RadioButton or CheckBox which has either the .tabstop=0 attribute set or is located in a TabBox or StatusBar, or clicking an Image should return the path of a currently focused EditText or ComboBox object to the program (#3896, #4012). Two problems were fixed in this context: First, if the currently focused object is not an EditText or ComboBox, the path of the non-focusable button or Image is now correctly returned. Second, if the non-focusable button or Image has the .ruleoverride=0 attribute set, the path of the button or Image is now always returned to the program, regardless whether or not the currently focused object is an EditText or ComboBox. - Splitter: The .dividersize attribute was added to specify the size of the splitter divider in pixel units (#4007). The default value is 0 which sets the default divider size defined by the active look and feel. - Using the eloquence.config.logoicon configuration parameter caused the specified URL to be loaded multiple times (#4006). - DLG GET Application.logoicon did not return the URL that was previously set with DLG SET Application.logoicon (#4006). Changes in JDLG version 1.5.6: - ComboBox .content was not always set as expected (#3980). - After deleting the last ListBox line with .delln, the .cy and .activeline attribute values became incorrect (#3960). - Clicking an Image object where the image could not be loaded could cause JDLG to abort the current session due to an internal NullPointerException (#3961). - Maximizing a dialog window always set the Application.scalefactor attribute value to 100% (#3975). - Programmatically changing the content of a focused single-line EditText or ComboBox object could result in a wrong text selection (#3976). - An URL starting with ftp: was not recognized as absolute URL (#3936). The implementation was changed to recognize an absolute URL in a more general way. - Regression: The content of a single-line EditText was not selected after setting the content and then the focus (#3959). - The CheckBox .active state could go out of sync if a CheckBox was triggered by an accelerator key (#3958). - A nested TabBox was not always affected by DLG SET .sensitive,1 on a container object (#3956). - Regression: DLG SET ListBox.cy,0 on an empty ListBox resulted in ERROR 660 (#3955). Changes in JDLG version 1.5.5: - Tree: The add/ins/del attributes did not always work as expected (#3920). Please note that the revised implementation may affect existing programs because it introduces a few behavior changes: - add attribute: If used to append to the end of the tree (i.e., if using the add or add[0] attribute), the indention level of the new elements now specifies the exact level where the new elements are added: A zero indention level adds a top-level entry. A nonzero positive indention level adds an entry in the specified level, which presumes that this level or the parent level exists. - add attribute: If used to add new entries to a specific node (i.e., if using the add[n] attribute), multiple elements may be added at once, separated by a LF character, where the first field of each entry specifies the relative indention level among the new entries. - ins attribute: As with the add attribute, multiple elements may be inserted at once, separated by a LF character, where the first field of each entry specifies the relative indention level among the new entries. - del attribute: The del argument may now be 1 or 0 (more precisely: nonzero or zero) to specify whether an entry or just its children should be deleted. If the argument is nonzero, the specified entry is deleted, including all dependent entries (children) if present. If the argument is zero, only the dependent entries are deleted. If no dependent entries are present, nothing is deleted. The previous implementation, where the del attribute specified the number of entries to be deleted, was dismissed because it makes the common cases (deleting an entry including its children or just deleting a node's children) too difficult to use in a program. - Tree: The emptynodeauto attribute was added (#3913). A program may use the emptynode attribute to fill an empty node on demand. In this context, if the emptynodeauto attribute is set to 1 (more precisely: nonzero), a node that was filled on demand will be emptied automatically as soon as it is closed (collapsed). The default value is 0. - Tree: The singleclick attribute was added (#3915). The singleclick attribute specifies which event type will issue a Tree rule to the program. 0 = mouse double click, ENTER and SPACE keys 1 = mouse single click (*), ENTER and SPACE keys 2 = mouse double click, UP/DOWN and ENTER and SPACE keys 3 = mouse single click (*), UP/DOWN and ENTER and SPACE keys The default value is 3. *) A mouse single click on a node entry only issues a rule if this changes the selection in the tree. - Tree: The ruleoverride attribute was added. This attribute defines the behavior when a mouse click moves the focus away from an EditText or ComboBox object to a Tree object and changes the current Tree selection so that a rule should be issued (depends on the setting of the singleclick attribute). In this situation, the program should be notified about both the EditText/ComboBox and the Tree event. If ruleoverride is set to 0, first the EditText/ComboBox rule is issued. The Tree rule is saved to become issued immediately on the next DLG DO invocation, except if a DLG SET .focus is executed in between these two DLG DO invocations. If set to 1 (more precisely: nonzero), only the Tree rule is issued, where the object path returned to the program refers the EditText or ComboBox object. The default value is 0. - Tree: On the Windows platform, selected Tree entries were hardly legible because a wrong foreground/background color combination was used (#3902). - Tree: A mouse click that moves the focus away from an EditText or ComboBox object did not issue the EditText/ComboBox rule to the program. - ListBox: If multiple columns are made invisible and then visible again, the original view order of these columns is now correctly retained (#3914). - ListBox: On an insensitive ListBox, the header and content are now correctly displayed using the insensitive foreground color (#3906). Also, an insensitive ListBox now correctly locks the show/hide column popup menu. - The colcontextmenu attribute was added (#3910). This attribute allows to enable or disable the column context menu to show or hide selected ListBox columns. By default, it is set to nonzero to enable the column context menu. To disable the context menu it may be set to zero. - EditText: Switching from multi-line to single-line mode could cause an EditText object to become invisible (#3925). - EditText: If an EditText is the only focusable object in a dialog, every mouse click issued the EditText rule to the program (#3903). - EditText/ComboBox: The right mouse button now triggers the clipboard context menu if a rmbmask is used that does not include the right mouse button (#3939). - ComboBox: The keyboard navigation (up/down keys) on a ComboBox object that is not editable did not work (#3919). - ComboBox: A Java platform issue was fixed that could cause JDLG to abort on the Mac platform. - HTMLView: Fixed a problem where setting an empty content did not clear the HTMLView (#3905). Please note that setting an empty content only clears a previously set content but does not clear an url if set. - HTMLView: The right mouse button was not recognized (#3905). A context menu or right mouse button rule could not be used in an HTMLView object. - HTMLView: The border attribute was added (#3905). By default, an HTMLView displays a line border around its scroll pane, plus a white border around the HTML body area. This is equivalent to setting the border attribute to 2. To disable one or both of these borders, the values below are supported: 0 = no border 1 = line border around scroll pane 2 = like 1, plus white border around HTML body area (default) - Splitter: The border attribute did not work as expected (#3916). Setting tbe border attribute to zero, the Splitter border was still displayed and reduced the usable size for contained objects. - GroupBox: On an insensitive GroupBox, the border and title are now correctly displayed using the insensitive foreground color (#3906). - TabBox: JDLG could abort the current session due to an internal IndexOutOfBoundsException after a tab was removed (#3937). - Dialog: JDLG could abort the current session due to an internal NullPointerException. - StaticText: Fixed a side effect where setting the font of a Tree object could cause an unexpected bold font style on subsequent StaticText objects. - Accelerator keys: The digit keys on the numeric key pad were not recognized as accelerator keys (#3940). - POPUP BOX: Numeric accelerator keys are now recognized (#3032). The first character in a POPUP BOX button text defines the button accelerator key. This now includes digits, not just letters. - DLG protocol: DLG GET .content could cause a DLG protocol failure (DLG status 684) if the maximum content size was exceeded (#3922). The current implementation of the DLG protocol defines a maximum content size of 8075 bytes. If this limit is exceeded in a DLG GET, JDLG now returns a DLG status 685 without aborting the session. - Application config file: A session name containing national characters (umlauts) was not correctly displayed on platforms using a character set encoding other than ISO-8859-1 (#3911). - GroupBox: If the focused object in a scrollable GroupBox is located outside the visible GroupBox area, the GroupBox should scroll the object into the visible area. If the size of an object exceeds the size of the visible GroupBox area, this did not work as expected. If the object already covered the entire visible GroupBox area but the lower right corner of the object was outside the visible area, the GroupBox always scrolled the lower right corner of the object into the visible area. This was changed so that the GroupBox no longer scrolls at all if an object exceeds the size of the visible area and the object already covers the entire visible area. - Tree: A mouse click could trigger the rule multiple times, the SPACE and ENTER keys could trigger the rule even if no item is selected, the navigation keys could trigger the rule even if the tree selection does not change. - PopText: When using incremental search to select a PopText item, no rule was triggered (#3898). Changes in JDLG version 1.5.4: - Enhancement: If the content of a single line EditText object does not completely fit into the object, the content's beginning is now always displayed when the object is not focused, i.e., the content is scrolled to the leftmost position (#2653). - Enhancement: Image objects now return to the program with their rule value and the path of the currently focused object (#3896). If no object is focued, the path of the Image object is returned. Previously, Image objects always returned their own path to the program and this way behaved differently from Button objects and function keys. - Enhancement: Implemented incremental search to select PopText entries (#3895). If multiple entries exist that begin with the same character(s), more characters may be typed quickly one after another to narrow the search. A pause of more than 750 milliseconds resets the current search pattern and starts a new search. Also, multiple entries that begin with the same character(s) may be selected one after another by repeatedly typing the first character while pausing a little (i.e., more than 750 ms) between two key strokes. - The ComboBox .clear attribute did not behave as expected (#3864). It cleared the pulldown list but not the editable content. - On a focused PopText, the function keys sometimes did not work, i.e., the function key rule was not triggered (#3866). - ToolBar objects that are made invisible still occupied their previous space in the ToolBar, i.e., consecutive objects did not move up to the previous position of the invisible objects (#3870). - DLG GET TabBox.selectedtab could return a wrong identifier (#3871). If the selected tab refers to a GroupBox that is derived from a model, the model identifier could be returned instead of the new identifier of the derived GroupBox. - DLG GET System.dlgport could return a zero port number (#3874). If the eloquence.config.dlg.port property is set to zero so that JDLG assigns an available DLG port number, a program may use the System.dlgport attribute to query the port number that was assigned. However, due to an internal race condition System.dlgport could return zero in this case. - Loading a session configuration through a high latency network connection could result in a "file format not recognized" error message or an incomplete session configuration being read (#3887). - If a Tree object is derived from a model, the .openall and .udata attribute values were not correctly derived (#3892). - If a GroupBox object is derived from a model, the .borderstyle, .margin, .vwidth and .vheight attributes were not correctly derived (#3893). - Navigating ComboBox and PopText list entries using the Up/Down keys stopped on duplicate entries, i.e., consecutive entries with identical content (#3893). - If the right mouse button is clicked on an insensitive object, the .contextmenu or .rmbr action was wrongly triggered (#3897). Changes in JDLG version 1.5.3: - Button rules were not correctly returned if an EditText or ComboBox object is focused that specifies a rule value. - Clicking a CheckBox or a RadioButton that does not specify a rule value did not return the rule value of a previously focused EditText or ComboBox object. The same could occur if a RadioButton object was clicked that is already checked. Changes in JDLG version 1.5.2: - Added EditText and ComboBox support for insert/overwrite editing mode through the eloquence.config.editmode configuration property and the System.editmode attribute (see above for details). - The .contextmenu attribute now takes priority over the .rmbr dialog attribute. This allows to use .rmbr as a fallback in a dialog where only some of the objects specify a .contextmenu. The section on Context Menus above has been modified accordingly. - Added the .rmbrmask attribute on all object classes to specify which mouse button(s) trigger a context menu or .rmbr rule. This is explained in detail in the section on Context Menus above. - Using the right mouse button sometimes changed the focus object in addition to trigger a context menu or .rmbr rule. This could cause unexpected dialog behavior. - ComboBox: Selection on focus was inconsistent to EditText objects. - ComboBox: Using a .focuscolor could affect the background color when leaving a ComboBox object. - ListBox, PopText: DLG GET/SET .rowdata on an invalid line could issue an IndexOutOfBoundException, causing the current session to abort. - The session startup progess was not indicated as expected. - JDLG could fail with a NoSuchMethodError on Java versions below Java 1.5. Changes in JDLG version 1.5.1: - ListBoxHeader with .coltype = 1: Values were incorrectly sorted if positive and negative values are present in a column. - POPUP BOX could be incorrectly positioned in a multi-screen environment. - Disconnecting a running sesion from the Program -> Sessions list could leave the session's dialogs visible (#3830). Also, a misleading "Exception caught during wait" message could be output. Known issues ------------ - Some example programs use OS dependent system calls and were only tested on the Linux platform. - The Mouse cursor may not change in listbox header in some cases. - Moving a dialog so that it violates the screen boundaries may change the reference point. - Space used by the desktop task bar or menu bar is not properly accounted for in JDLG on the Linux platform. This is caused by a Java/Swing limitation where the necessary information is not available. This should have little consequences besides that JDLG cannot ensure that a dialog window is not obscured by desktop elements.