EHELP_METHOD
|
WSupported on Windows
|
USupported on Unix
|
VSupported on OpenVMS
|
NSupported in Synergy .NET
|
subroutine EHELP_METHOD
a_ident ,a
Arguments
a_ident
(optional) The help identifier. (a)
Discussion
EHELP_METHOD is a subroutine that you write and name. The name of your subroutine is registered with UI Toolkit using the E_METHOD subroutine.
EHELP_METHOD is called by UI Toolkit when a menu entry with the internal name O_HELP is selected. This routine will not be called unless that entry name is present on one of your menu columns.
UI Toolkit provides a help processing subroutine named TKP_HELP. You can overload it with a more robust or application-specific version.
EHELP_METHOD can be passed one argument, a_ident. UI Toolkit determines whether it will pass this argument, and if so, what it will pass in it. This is determined as follows:
- If the user has a menu column dropped down and selects O_HELP, UI Toolkit will set g_enthlp to the internal menu entry name of the highlighted menu entry. The a_ident argument will not be passed.
- If the user has no menu column dropped down and selects O_HELP while on an input field that has a help identifier specified (either in the .FIELD script or with IB_FIELD), UI Toolkit will pass help identifier as the a_ident argument.
- If the user has no menu column dropped down and is not on an input field with a help identifier specified, but the current subroutine was passed a help identifier, UI Toolkit will pass that help identifier value as the a_ident argument. The following subroutines can be passed a help identifier:
IB_FIELD
L_CHR
L_SELECT
M_PROCESS
S_SELECT
S_SELECTCB
T_EDIT
T_VIEW
U_CHR
U_EDITKEYS
U_EDITREND
U_FLD
%U_GETFILENAME
U_MODREND
%U_MSGBOX
- In all other cases, UI Toolkit will not pass the a_ident argument. (This includes the case where O_HELP is selected while the input termination message is displayed.)
The help identifier associated with an input field or passed to one of the above routines can be used to support the mechanism you choose to provide help for the user. The help identifier can be the name of a help window or, perhaps, the key for an ISAM record that contains help text.
When writing your EHELP_METHOD, be sure to consider whether you want to support a second O_HELP request (for example, enabling the user to select Help while they are viewing the first Help window).
The TKP_HELP subroutine distributed with UI Toolkit goes through the following steps:
| 1. | If g_enthlp is non-blank, UI Toolkit will search the window library for the window h_name where name is the contents of g_enthlp. This window will be displayed, if found, and UI Toolkit will skip to step 4. If not found, UI Toolkit proceeds to step 2. |
| 2. | If g_enthlp is blank or if the window h_name (in step 1) was not found, and if a_ident was passed, UI Toolkit will search the library for a window name, where name is the contents of a_ident. (If a_ident was not passed, UI Toolkit goes to step 3.) This window will be displayed, if found, and UI Toolkit will skip to step 4. If the window is not found, Toolkit will issue the message “No help available for identifier name” and proceed to step 3. (This message is in the text message file, facility DTK, mnemonic NOHELP. See Synergy UI Toolkit Control Panel (synctl) for information on customizing messages using the Synergy UI Toolkit Control Panel.) |
| 3. | If g_enthlp is blank or if the window h_name (in step 1) was not found, and a_ident was not passed, the window library is searched for a window named h_general. If this window cannot be found, Toolkit will issue the message “No help available for identifier ‘h_general.’” |
If a window could be loaded, then TKP_HELP carries out steps 4 through 7.
| 4. | It loads the information line with the message found in text message facility DTK, mnemonic HELPINFO, and a column named c_help is sought in the library opened on g_utlib. If found, TKP_HELP places the column. If not, no error occurs, but the user probably won’t be able to scroll the text. (Some of these actions are only applicable for scrollable windows. See the comments within the TKP_HELP source listed in the Examples.) |
| 5. | TKP_HELP calls U_HELPREND and applies any help renditions to the window. TKP_HELP also places the window at this time. |
| 6. | The help window is displayed: |
- On Windows, TKP_HELP calls U_WINDOW and uses a Windows-style pop-up window with an OK button.
- On Unix and OpenVMS if the entire window is visible (i.e., the display area matches the window area), TKP_HELP displays a message requesting the user to press Return (Enter) when done viewing the window.
- On Unix and OpenVMS if TKP_HELP can show only part of the window, the window is considered scrollable, and T_VIEW is used to enable the user to browse the window.
| 7. | If the user makes another selection of O_HELP, TKP_HELP looks for and displays a second help window named h_help (if found). When the user exits from this second help window, they will return to the first help window. (TKP_HELP will then return to the calling routine when one of the first two scenarios is true.) |
| 8. | TKP_HELP returns to the calling routine when |
- the entire window is visible and the user presses Enter or, on Windows, the user clicks on the OK button.
- the window is scrollable and the user selects any menu entry that T_VIEW does not recognize (other than O_HELP). If the entry is O_EXIT, g_select is returned false to the caller in order to avoid further exiting. Any other menu entry is returned to the caller.
See also
- Synergy UI Toolkit Control Panel (synctl) for information on customizing the HELPINFO and NOHELP text messages
- S_SELECT routine for an example of how a help identifier is passed
- U_HELPREND routine for help window renditions
- Overloading UI Toolkit routines for more information on creating this subroutine
- Appendix D: Methods
The following is a listing of the TKP_HELP subroutine supplied with UI Toolkit. It includes comments that explain the operation of the subroutine. Note the following:
- g_select must be cleared so that the menu processing subroutine (M_PROCESS or I_INPUT) continues without interruption.
- Synmsw_popup and u_chr_p are internal routines. They are not supported for any other use or in any other context.
subroutine tkp_help
;
; Description: Default version of help utility
;
a_id ,a ;(Optional) help identifier
;
; Notes:
; This routine is called from within the higher-level input
; routines whenever the menu entry "O_HELP" is selected.
; Developers are encouraged to replace this version with
; whatever help mechanisms are desired.
;
; If a_id is passed, it is a help identifier, which is either
; associated with an input field or was passed into the
; routine which performed input. If no such help identifier
; exists, a_id is not passed.
;
; If g_enthlp is non-blank, it contains the name of a menu
; entry which was highlighted on a dropped-down menu column
; when the shortcut for O_HELP was pressed.
;
; This default version operates as follows:
;
; 1. Determine the help identifier to use
; A. If g_enthlp is non-blank, use "h_%a", where %a is
; the contents of g_enthlp.
; B. Otherwise
; 1. If a_id is passed, use it
; 2. Otherwise, use "h_general"
; 2. Attempt to load a window from g_utlib named after the
; identifier
; A. If unsuccessful and 1.A. was used above, go to
; 1.B.
; B. If unsuccessful and 1.B. was used above, issue an
; error and exit.
; 3. Apply help renditions to the window.
; 4. Compare the display area to the size of the window
; A. If the entire window is visible, ask the user to
; press return.
; B. If part of the window is not visible, perform text
; viewing.
; 1. Load an information line from the text message
; file.
; 2. Attempt to load column "c_help" from g_utlib,
; ignoring errors.
; 3. Setup the window for text viewing.
; 4. View the text with T_VIEW.
; 5. Exit on any non-text-viewing menu entry,
; clearing any "O_EXIT" to avoid further exiting.
; 5. Return to the calling routine.
;
; This routine also enters a private environment and exits it
; before returning.
.include "WND:tools.def"
.include "UTL:dtkmsg.def"
.include "WND:windows.def"
.include "UTL:inpctl.def"
.align
record
len ,i4 ;Length of message line
wnd ,2i4 ;Help window ID
ndx ,i4 ;Index into help windows
col ,i4 ;Help column ID
err ,i4 ;Error return
srch ,i4 ;Search flag for window loads
mnu ,i4 ;Are we attempting menu entry help?
line ,a132 ;Message line
helpid ,a15 ;Help identifier to use
chr ,a1 ;Character typed
wareas ,8d3 ;Window areas from W_INFO
display,a12 @wareas ;Display area coordinates
proc ,a12 @wareas+12 ;Processing area coordinates
proc
clear g_select, ndx ;Assume we will satisfy O_HELP
if (g_enthlp) then ;Were we sitting on a menu entry?
begin
mnu = TRUE ;Yes, attempt menu help
xcall s_bld(helpid, , "h_%a", g_enthlp)
end
else
begin
use_id, clear mnu ;No, use any passed identifier
if (^passed(a_id)) then
helpid = a_id
else
helpid = "h_general" ;Or h_general if none
end
call do_help
xreturn
do_help,
xcall e_enter ;Enter a private environment
xcall e_state(D_OFF, D_ECHO, D_CURSOR)
incr ndx
;Attempt to load the window
xcall u_ldwnd(wnd(ndx), g_utlib, helpid,, srch, err,,, TRUE)
if (err)
begin ;Could not find it
if (mnu) ;If we were attempting menu entry
begin
decr ndx
xcall e_exit
call use_id ;try any passed identifier instead
return
end
xcall u_msg("DTK", DTK_NOHELP, D_ERROR, , helpid)
goto exit ;Issue error message and exit
end
xcall u_helprend(wnd(ndx)) ;Apply help renditions to window
.ifdef D_DTKGUI
xcall u_window(D_REMOVE, wnd(ndx))
xcall synmsw_popup(wnd(ndx))
.else
xcall w_area(wnd(ndx), WA_COPY, WAC_WTOP) ;Test window areas
xcall w_info(WI_AREAS, wnd(ndx), wareas)
if (display .ne. proc) then ;Scrollable?
begin
xcall u_text(g_txtlib, "DTK", DTK_HELPINFO2, line, len)
xcall e_sect(line(1:len), D_INFO, D_CENTER);Load info from msg
;file
;Attempt to load column, ignoring errors
xcall m_ldcol(col, g_utlib, "c_help", D_NOPLC, srch, err)
xcall t_setup(wnd(ndx)) ;Setup for text viewing
repeat
begin
xcall t_view(wnd(ndx), col, err) ;View the text
if (g_select) then
begin
case g_entnam of
begincase
"O_EXIT ": clear g_select
"O_ABANDON ": clear g_select
"O_HELP ": begin
clear g_select
if (helpid .ne. "h_help ")
begin
helpid = "h_help"
clear mnu
call do_help
end
nextloop
end
endcase
exitloop
end
else
if (err) then
xcall u_beep
else
exitloop ;On return
end
end
else
begin
xcall u_text(g_txtlib, "DTK", DTK_HELPINFO2, line, len)
;Load info line from our message file
xcall e_sect(line(1:len), D_INFO, D_CENTER)
repeat ;Full window
begin
xcall u_chr_p(chr)
if (g_select) then
begin
case g_entnam of
begincase
"O_EXIT ": clear g_select
"O_ABANDON ": clear g_select
"O_HELP ": begin
clear g_select
if (helpid .ne. "h_help")
begin
helpid = "h_help"
clear mnu
call do_help
end
nextloop
end
endcase
exitloop
end
else
if (gi_sts .eq. RETURN_KEY) then
exitloop
else
xcall u_beep
end
end
.endc
exit,
decr ndx
xcall e_exit ;Exit the private environment
return ;Return to caller
endsubroutine
