A Genie Style Dialog with Tabs
Description
This script shows how you can create a Genie style Xdialog that also has tabs allowing quick access to individual pages of the Genie.
First specify the tab names.
dim lv as P lv = local_variables() 'Specify the List of Tab Names for the Genie panes = <<%a% Page 1 Page 2 Page 3 %a%
Next, specify the Xdialog code (dialog body and event code) for each Genie page.
dim code_pages[1] as P code_pages[1].name = "Page 1" code_pages[1].dialog_body = <<%dlg% This is the body of the 'Page 1' page; %dlg% code_pages[1].dialog_events = <<%code% 1=1 %code% code_pages.insert(1,1) code_pages[1].name = "Page 2" code_pages[1].dialog_body = <<%dlg% This is the body of the 'Page 2' page; %dlg% code_pages[1].dialog_events = <<%code% 1=1 %code% code_pages.insert(1,1) code_pages[1].name = "Page 3" code_pages[1].dialog_body = <<%dlg% This is the body of the 'Page 3' page; %dlg% code_pages[1].dialog_events = <<%code% 1=1 %code%
Next, display the dialog box.
current_pane = 1
dim flag_next as L
dim flag_prev as L
dim flag_finish as L
flag_next = .t.
flag_prev = .f.
flag_finish = .f.
ui_dlg_box("Genie with Tabs",<<%dlg%
{startup=init}
[%R=1%.144,19current_pane^^panes!current_pane_*]
{embedded=142,13embedded1}
{line=1,0};
{justify=right}<10&Cancel> <10&< Previous!prev?flag_prev><10&Next \>!next?flag_next> <10&Finish?flag_finish>;
%dlg%,<<%code%
if a_dlg_button = "init" then
a_dlg_button = ""
show_page(lv)
end if
if left(a_dlg_button, 13) = "current_pane_" then
if a_dlg_button = "current_pane_change" then
show_page(lv)
set_flags(lv)
end if
a_dlg_button = ""
end if
if a_dlg_button = "prev" then
a_dlg_button = ""
current_pane = current_pane - 1
if current_pane = 0 then
current_pane = 1
end if
show_page(lv)
set_flags(lv)
end if
if a_dlg_button = "next" then
current_pane = current_pane + 1
if current_pane > line_count(panes) then
current_pane = line_count(panes)
end if
a_dlg_button = ""
show_page(lv)
set_flags(lv)
end if
%code%)The show_page()function swaps the embedded dialog boxes as the user clicks the tabs.
function show_page as v (vars as P)
with vars
dim page_to_show as C
dim dlg_body_embedded as C
dim dlg_event_embedded as C
page_to_show = word(panes,current_pane,crlf())
dim tempIndx as N
tempIndx = code_pages.find(ut(page_to_show), "ut(name)")
if tempIndx > 0 then
dlg_body_embedded = code_pagestempIndx.dialog_body
dlg_event_embedded = code_pagestempIndx.dialog_events
else
dlg_body_embedded = "Code for this page not found"
dlg_event_embedded = "1=1"
end if
ui_modeless_dlg_box("embedded1", dlg_body_embedded, dlg_event_embedded)
end with
end functionThe set_flags()function sets the values of the logical variables, which in turn determine whether buttons will display.
function set_flags as v (vars as P)
with vars
if current_pane = 1 then
flag_prev = .f.
else
flag_prev = .t.
end if
if current_pane = line_count(panes) then
flag_next = .f.
flag_finish = .t.
else
flag_next = .t.
end if
end with
end functionLimitations
Desktop applications only.
See Also
