Working with @UIDialog

For requesting general information about EViews, sharing your own tips and tricks, and information on EViews training or guides.

Moderators: EViews Gareth, EViews Moderator

madm
Posts: 12
Joined: Mon Oct 23, 2017 1:13 pm

Working with @UIDialog

Postby madm » Thu Nov 09, 2023 6:15 pm

I have found the @uidialog function quite cumbersome to work with so I came up with a slightly more manageable subroutine.

Code: Select all

subroutine add_dialog_item(string %DIALOG, string %TYPE, string %IOVAR, string %PROMPT, string %OPTION_LIST, scalar !MAX_EDIT_LENGTH)
' Adds a dialog item to a string dialog spec. The item can be one of:
' Edit field: "Edit", IO_String, prompt_string[, max_edit_length]
' Listbox: "List", IO_StringOrScalar, prompt_string, list_string
' Radio buttons: "Radio", IO_Scalar, prompt_string, list_string
' Checkbox: "Check", IO_Scalar, prompt_string
' Text: "Text", text_string
' Caption: "Caption", caption_string
' Column break: "Colbreak"
' OK Button: "Button", button_string
' Cancel Button: "Buttonc", button_string
' Subroutine arguments:
' %DIALOG - Name of the dialog to fill
' %TYPE - One of "Edit", "List", "Radio", "Check", "Text", "Caption", "Colbreak", "Button", "Buttonc"
' %IOVAR - Name of the control variable enclosed in quotes (don't pass the variable itself!!) -- for an Edit control this will contain the text entered in the control (e.g., "%NAME") or fore a checkbox it contains the name of the scalar contained the result (e.g. "!CHECK"), 0=unchecked or 1=checked
' %PROMPT - The string argument (description, prompt etc.)
' %OPTION_LIST - The options for the List or Radio control as a space separated list
' !MAX_EDIT_LENGTH - The maximum length of text that can be entered in the EDIT control

   if @trim(%DIALOG)<>"" then
      %DIALOG = %DIALOG + "," + """" + %TYPE + """"
   else
      %DIALOG = """" + %TYPE + """"
   endif
   if %IOVAR<>"" then
      %DIALOG = %DIALOG + "," + %IOVAR
   endif
   if %PROMPT<>"" then
      %PROMPT = @replace(%PROMPT, """", "'")
      %DIALOG = %DIALOG + "," + """" + %PROMPT + """"
   endif
   if %OPTION_LIST<>"" then 'TODO: This won't work as soon as you have space chars in the options
      %DIALOG = %DIALOG + "," + """" + %OPTION_LIST + """"
   endif
   if !MAX_EDIT_LENGTH>0 then
      %DIALOG = %DIALOG + "," + @str(!MAX_EDIT_LENGTH)
   endif
endsub



Here's an example of how to use it:

Code: Select all

logmode l
%DIALOG_DATA = ""
%TEXT = "A string of text"
%NAME = "<name goes here>"
!CHECK = 0
!RADIO = 2
%RADIO_OPTIONS = "High Medium Low"

call add_dialog_item(%DIALOG_DATA, "Caption", "", "My first dialog", "", 0)
call add_dialog_item(%DIALOG_DATA, "Text", "", %TEXT, "", 0)
call add_dialog_item(%DIALOG_DATA, "Edit", "%NAME", "A text entry", "", 0)
call add_dialog_item(%DIALOG_DATA, "Button", "", "A button", "", 0)
call add_dialog_item(%DIALOG_DATA, "Check", "!CHECK", "A checkbox", "", 0)
call add_dialog_item(%DIALOG_DATA, "Colbreak", "", "", "", 0)
for %g one two three
   call add_dialog_item(%DIALOG_DATA, "Button", "", "", "OPTION "+%g, 0)
next
call add_dialog_item(%DIALOG_DATA, "Radio", "!RADIO", "A radio group", %RADIO_OPTIONS, 0)
!result = @uidialog({%DIALOG_DATA})
logmsg RESULT=!result NAME=%NAME CHECK=!CHECK RADIO=!RADIO

Return to “General Information and Tips and Tricks”

Who is online

Users browsing this forum: No registered users and 2 guests