MDI Xdialog Framework

Description

You can take advantage of a technique for creating MDI Xdialogs. Refer to the sample 'Learning Xdialog' database that ships with Alpha Anywhere and refer to the 'mdi_xdialog_frameworkV8' script. The main difference between the new technique, and the technique described here is that in the new technique, a 'context' is established and the menu and toolbar are instantiated in that 'context'. This is done in the Xdialog's OnInit event. It is no longer necessary to instantiate the menus and toolbars in the onactivate event and then destroy them in the ondeactivate event.

This Xdialog box script displays a MDI (Multiple Document Interface) child window. It assumes that you have created a toolbar called MDI_test, and a menu called MDI_test. The toolbar should have at least two buttons called set_title and close.

  • The event for the set_title button should be Internal Action and the event name should be set_title.

  • The event for the close button should be close.

The menu has two commands, File > Set window title, and File > Close. The xdialog menu string for this menu is:

File|{DATA=command:set_title}Set window title
File|{DATA=command:close}Close window

Note that the menu action for each of these menu items is the same as for their corresponding action in the toolbar. This script shows that it is possible to launch multiple instances of the MDI child window. Each instance operates independently of the other. The key to the way in which the toolbar and menu events get executed is the function command()defined at the end of this script.

Examples 

This function sends the events to the Xdialog box.

dim event_string as C
dim menu_string as C
dim toolbar_string as P
dim message as C
dim pDummy as P
title_var_name = "title_var"+stritran(time(),":","_")
eval(title_var_name) = "Dialog Title"
dlg_title = "@=" + title_var_name

This is how we register a new MDI window class so that it appears in the Window menu and the Window menubar. This function takes three arguments: the class name, the class description, and the class icon.

a5_mdi_windowclass_add("mymdiclass","My Special MDI Window Type","A5_ball_green")
'This is the event handler string for the Top Menu
event_string = <<%code%
if left(a_command,3) = "A5." then
    a5.command(substr(a_command,4) )
    a_command = ""
else if left(a_command,1) = "!" then
    evaluate_template(substr(a_command,2) )
    a_command = ""
else if left(a_command,6) = "addin:" then
    evaluate_template(substr(a_command,7) )
else if left(a_command,8) = "command:" then
    ui_dlg_event(dlg_title,substr(a_command,9) )
else if .not. ("|" $ a_command) then
    this.command(a_command)
    a_command = ""
end if
%code%
menu_string = a5_menu_def_load("MDI_test")
toolbar_string = a5_toolbar_def_load("mdi_test")
message = "This is a standard MDI child window. It can be maximized, minimized, resized, or restored."
ui_modeless_dlg_box(dlg_title,<<%dlg%
{icon=A5_ball_green}
{mdichild=mymdiclass}
{on_activate=activate}
{on_deactivate=deactivate}
{text=50,4:Message};
dlg title .30title!title_change;
%dlg%,<<%code%
if a_dlg_button = "set_title" then
    title = ui_get_text("Title","Enter the text for the Window Title")
    if title <> "" then
        eval(title_var_name) = title
    end if
end if
if a_dlg_button = "activate" then 'show the toolbar
    pDummy.dummy = ""
    toolbar_name = a5_system_toolbar_show(pDummy,toolbar_string)

Show the menu. The UI_EXPAND_BRANCHES() function is used to expand certain menu 'macros' (such as recent file list, or window list) at runtime.

ui_top_menu(ui_expand_branches(menu_string), event_string)
end if

Before closing the toolbar we check to see if it still exists -- the user could have undocked the toolbar and closed it before closing the dialog box.

if a_dlg_button = "deactivate" then
    if ui_modeless_dlg_exist(toolbar_name) then
        ui_modeless_dlg_close(toolbar_name)
    end if
end if
if a_dlg_button = "title_change" then
    eval(title_var_name) = title
end if
if a_dlg_button = "close" then
    ui_modeless_dlg_close(dlg_title)
end if
%code%)

This is the event handler for the toolbar.

function command as v ( vars as P,command as C )
with vars
    if left(command,6) = "event:" then

       command = substr(command,7)
    end if
    ui_dlg_event(dlg_title,command)
    command = ""
end with
end function

Limitations

Desktop applications only.

See Also