Creating the topmenu dynamically
Topmenus can be created at runtime by creating the corresponding XML representation in the AUI tree.
In the abstract user interface tree, the TopMenu
node must be created under the
Form
node, and must contain TopMenuGroup
nodes. The
TopMenuGroup
nodes group topmenu commands and other topmenu groups. A
TopMenuCommand
is a leaf node in the topmenu tree that will trigger an action:
TopMenu
+- TopMenuGroup
+- TopMenuCommand
+- TopMenuCommand
+- TopMenuCommand
+- TopMenuGroup
+- TopMenuGroup
+- TopMenuCommand
+- TopMenuCommand
+- TopMenuGroup
+- TopMenuCommand
+- TopMenuCommand
+- TopMenuCommand
This example shows how to create a topmenu in all forms by using the default initialization
function and the
om.DomNode
class:
CALL ui.Form.setDefaultInitializerFunction(FUNCTION myinit)
OPEN FORM f1 FROM "form1"
DISPLAY FORM f1
...
FUNCTION myinit(form ui.Form) RETURNS ()
DEFINE n om.DomNode
LET n = form.getNode()
...
END FUNCTION
After getting the DOM node of the form, create a node with the "
TopMenu
" tag
name: DEFINE tm om.DomNode
LET tm = n.createChild("TopMenu")
For each Topmenu group, create a subnode with the "
TopMenuGroup
"
tag name and set the attributes to define the group: DEFINE tmg om.DomNode
LET tmg = tm.createChild("TopMenuGroup")
CALL tmg.setAttribute("text","Reports")
For each Topmenu option, create a sub-node in a group node with
the "
TopMenuCommand
" tag name and set the attributes
to define the option:DEFINE tmi om.DomNode
LET tmi = tmg.createChild("TopMenuCommand")
CALL tmi.setAttribute("name","report")
CALL tmi.setAttribute("text","Order report")
CALL tmi.setAttribute("comment","Orders entered today")
CALL tmi.setAttribute("image","smiley")
If needed, you can create a "
TopMenuSeparator
"
node inside a group, to separate menu options: DEFINE tms om.DomNode
LET tms = tmg.createChild("TopMenuSeparator")