BBjMsgBox

Description

In BBj 25.03 and higher, the BBjMsgBox object is equivalent to the MSGBOX() Function.

Creation

BBjAPI > BBjMsgBox

The BBjMsgBox object is created through the following BBjAPI methods:

Return Value Method
BBjMsgBox msgbox()
BBjMsgBox msgbox(String message)

Methods of BBjMsgBox

Return Value Method
BBjMsgBox button1(String button1)
BBjMsgBox button2(String button2)
BBjMsgBox button3(String button3)
BBjMsgBox message(String message)
BBjMsgBox modes(String modes)
BBjMsgBox options(int options)
int show()
BBjMsgBox timeout(int timeout)
BBjMsgBox title(String title)

Constants

Buttons

Value BBjMsgBox Constant Buttons
0 MSGBOX_BUTTONS_OK OK
1 MSGBOX_BUTTONS_OK_CANCEL OK and Cancel
2 MSGBOX_BUTTONS_ABORT_RETRY_IGNORE Abort, Retry, and Ignore
3 MSGBOX_BUTTONS_YES_NO_CANCEL Yes, No, and Cancel
4 MSGBOX_BUTTONS_YES_NO Yes and No
5 MSGBOX_BUTTONS_RETRY_CANCEL Retry and Cancel
7 MSGBOX_BUTTONS_CUSTOM Custom

Icon

Value BBjMsgBox Constant Icon
0 MSGBOX_ICON_NONE (default) None
16 MSGBOX_ICON_STOP Stop Sign
32 MSGBOX_ICON_QUESTION Question Mark
48 MSGBOX_ICON_EXCLAMATION Exclamation Point
64 MSGBOX_ICON_INFORMATION Information Symbol

Default Button

Value BBjMsgBox Constant Default Button
0 MSGBOX_DEFAULT_FIRST First Button
256 MSGBOX_DEFAULT_SECOND Second Button
512 MSGBOX_DEFAULT_THIRD Third Button
65536 MSGBOX_DEFAULT_NONE Do not allow the currently highlighted button to be selected with Enter.

Render HTML

Value BBjMsgBox Constant Action
0 (Default, no constant) Render title and/or message as HTML if the string starts with <html>.
32768 MSGBOX_RAW_TEXT Disable HTML processing. Render both title and message as raw text, even if the string starts with <html>.

MDI

Value BBjMsgBox Constant Action
131072 MSGBOX_MDI_DESKTOP If the current window is contained within an MDI desktop, limit the BBjMsgBox dialog to the MDI desktop. Ignored if not in MDI.

Example

rem ' bbjapi() msgbox & prompt

sysgui = unt
open (sysgui)"X0"
sysgui! = bbjapi().getSysGui()
window! = sysgui!.addWindow(10,10,730,525,"BBJAPI() MSGBOX & PROMPT",$00090083$)
window!.setCallback(window!.ON_CLOSE,"eoj")
LocaleBox! = window!.addListBox(100,10,10,350,340,$$,$$)

UIDefaults! = javax.swing.UIManager@.getDefaults()
print UIDefaults!.get("OptionPane.errorSound")
print UIDefaults!.get("OptionPane.informationSound")
print UIDefaults!.get("OptionPane.questionSound")
print UIDefaults!.get("OptionPane.warningSound")
UIDefaults!.put("AuditoryCues.playList",null())

x$ = "", y$ = "", w$ = $$, h$ = $$, html = 0
window!.addStaticText(101,0,365,25,25,"&X:",$8000$)
x! = window!.addEditBox(102,30,360,50,25,"",$$)
x!.setToolTipText("X location of dialog")
x!.setCallback(x!.ON_EDIT_MODIFY,"x")
window!.addStaticText(103,90,365,25,25,"&Y:",$8000$)
y! = window!.addEditBox(104,120,360,50,25,"",$$)
y!.setToolTipText("Y location of dialog")
y!.setCallback(y!.ON_EDIT_MODIFY,"y")
window!.addStaticText(105,180,365,25,25,"&W:",$8000$)
w! = window!.addEditBox(106,210,360,50,25,"",$$)
w!.setToolTipText("Maximum width of content")
w!.setCallback(w!.ON_EDIT_MODIFY,"w")
window!.addStaticText(107,270,365,25,25,"&H:",$8000$)
h! = window!.addEditBox(108,300,360,50,25,"",$$)
h!.setToolTipText("Maximum height of content")
h!.setCallback(h!.ON_EDIT_MODIFY,"h")

window!.addStaticText(109,360,365,75,25,"Extra &rows:",$8000$)
rows! = window!.addInputNSpinner(110,440,360,75,25,0,5000)
rows!.setCallback(rows!.ON_SPIN,"rows")
rows!.setToolTipText("Extra rows of content")
rows!.setCallback(rows!.ON_EDIT_MODIFY,"rows")
rows = 0

window!.addStaticText(111,525,365,75,25,"Extra &cols:",$8000$)
cols! = window!.addInputNSpinner(112,605,360,75,25,0,2000)
cols!.setCallback(cols!.ON_SPIN,"cols")
cols!.setToolTipText("Extra columns of content")
cols!.setCallback(cols!.ON_EDIT_MODIFY,"cols")
cols = 0

rem ' config.bbx: SET !OPTIONS=NATIVE_BROWSER_MSGBOX=TRUE
native_dialog$ = stbl("!OPTIONS","NATIVE_BROWSER_MSGBOX")
native_dialog = sgn(pos("TRUE"=native_dialog$))
flags$ = iff(native_dialog,$0004$,$0000$)
native_dialog! = window!.addCheckBox(113,10,400,110,25,"&Native dialog",flags$)
native_dialog!.setToolTipText("BUI: Use native browser dialog for OK and OK/Cancel")
native_dialog!.setCallback(native_dialog!.ON_CHECK_ON,"native_dialog_true")
native_dialog!.setCallback(native_dialog!.ON_CHECK_OFF,"native_dialog_false")

use_html! = window!.addCheckBox(114,120,400,120,25,"HTML content",$0000$)
use_html!.setToolTipText("Always set MSGBOX content using html")
use_html!.setCallback(use_html!.ON_CHECK_ON,"use_html_true")
use_html!.setCallback(use_html!.ON_CHECK_OFF,"use_html_false")

window!.addStaticText(115,245,405,60,25,"&Timeout:",$8000$)
timeout! = window!.addInputNSpinner(116,310,400,50,25,0,10)
timeout!.setCallback(timeout!.ON_SPIN,"timeout")
timeout!.setCallback(timeout!.ON_EDIT_MODIFY,"timeout")
timeout!.setToolTipText("MSGBOX timeout (seconds)")
timeout = 0

mdi_desktop! = window!.addCheckBox(117,10,435,120,25,"&MDI Desktop",$0000$)
mdi_desktop!.setToolTipText("Restrict dialogue to the MDI desktop")
mdi_desktop!.setCallback(mdi_desktop!.ON_CHECK_ON,"mdi_desktop_true")
mdi_desktop!.setCallback(mdi_desktop!.ON_CHECK_OFF,"mdi_desktop_false")

disable_html! = window!.addCheckBox(118,120,435,120,25,"&Disable HTML",$0000$)
disable_html!.setToolTipText("Render HTML content as raw text")
disable_html!.setCallback(disable_html!.ON_CHECK_ON,"disable_html_true")
disable_html!.setCallback(disable_html!.ON_CHECK_OFF,"disable_html_false")

window!.addStaticText(119,245,440,60,25,"&Modes:",$8000$)
modes$ = "theme=primary"
mode! = window!.addEditBox(120,310,430,410,25,modes$,$$)
mode!.setToolTipText("Add comma-separated modes/attributes here.")

window!.addGroupBox(200,380,10,130,190,"Icon",$$)
Icon0! = window!.addRadioButton(201,390,40,110,25,"No Icon",$0004$)
Icon16! = window!.addRadioButton(202,390,70,110,25,"Stop Sign",$$)
Icon32! = window!.addRadioButton(203,390,100,110,25,"Question",$$)
Icon48! = window!.addRadioButton(204,390,130,110,25,"Exclamation",$$)
Icon64! = window!.addRadioButton(205,390,160,110,25,"Information",$$)
IconGroup! = window!.addRadioGroup()
IconGroup!.add(Icon0!)
IconGroup!.add(Icon16!)
IconGroup!.add(Icon32!)
IconGroup!.add(Icon48!)
IconGroup!.add(Icon64!)

window!.addGroupBox(300,380,220,130,130,"Default Button",$$)
Default0! = window!.addRadioButton(301,390,250,110,25,"First",$0004$)
Default256! = window!.addRadioButton(302,390,280,110,25,"Second",$$)
Default512! = window!.addRadioButton(303,390,310,110,25,"Third",$$)
DefaultGroup! = window!.addRadioGroup()
DefaultGroup!.add(Default0!)
DefaultGroup!.add(Default256!)
DefaultGroup!.add(Default512!)

window!.addGroupBox(400,530,10,190,340,"Buttons",$$)
Buttons0! = window!.addRadioButton(401,540,40,160,25,"OK",$0004$)
Buttons1! = window!.addRadioButton(402,540,70,160,25,"OK/Cancel",$$)
Buttons2! = window!.addRadioButton(403,540,100,160,25,"Abort/Retry/Ignore",$$)
Buttons3! = window!.addRadioButton(404,540,130,160,25,"Yes/No/Cancel",$$)
Buttons4! = window!.addRadioButton(405,540,160,160,25,"Yes/No",$$)
Buttons5! = window!.addRadioButton(406,540,190,160,25,"Retry/Cancel",$$)
Buttons7! = window!.addRadioButton(407,540,220,160,25,"Custom",$$)
ButtonsGroup! = window!.addRadioGroup()
ButtonsGroup!.add(Buttons0!)
ButtonsGroup!.add(Buttons1!)
ButtonsGroup!.add(Buttons2!)
ButtonsGroup!.add(Buttons3!)
ButtonsGroup!.add(Buttons4!)
ButtonsGroup!.add(Buttons5!)
ButtonsGroup!.add(Buttons7!)

Custom1! = window!.addEditBox(501,540,250,170,25,"&1",$$)
Custom2! = window!.addEditBox(502,540,280,170,25,"&2",$$)
Custom3! = window!.addEditBox(503,540,310,170,25,"&3",$$)

Close! = window!.addButton(2,380,400,100,25,"Close")
Close!.setCallback(Close!.ON_BUTTON_PUSH,"eoj")
Msgbox! = window!.addButton(1,490,400,110,25,"MSGBOX()")
Msgbox!.setCallback(Msgbox!.ON_BUTTON_PUSH,"msgbox")
Prompt! = window!.addButton(3,610,400,110,25,"PROMPT()")
Prompt!.setCallback(Prompt!.ON_BUTTON_PUSH,"prompt")

imagefile! = window!.addButton(121,10,470,120,25,"Image File",$$)
imagefile!.setCallback(imagefile!.ON_BUTTON_PUSH,"imagefile")

iconwidth! = window!.addEditBox(122,140,470,50,25,"",$$)
iconwidth!.setToolTipText("Scaled icon width")
iconheight! = window!.addEditBox(123,200,470,50,25,"",$$)
iconheight!.setToolTipText("Scaled icon height")

window!.addStaticText(128,250,470,50,25,"Icon:",$8000$)
icon$ = ""
icon! = window!.addEditBox(129,310,470,410,25,icon$,$$)
icon!.setToolTipText("Specify a custom icon here.")

status! = window!.addStatusBar(99)

gosub init

process_events
eoj:
release

native_dialog_true:
  native_dialog$="TRUE"
  native_dialog$ = stbl("!OPTIONS","NATIVE_BROWSER_MSGBOX="+native_dialog$)
return

native_dialog_false:
  native_dialog$="FALSE"
  native_dialog$ = stbl("!OPTIONS","NATIVE_BROWSER_MSGBOX="+native_dialog$)
return

use_html_true:
  html = 1
return

use_html_false:
  html = 0
return

disable_html_true:
  disable_html = 1
return

disable_html_false:
  disable_html = 0
return

mdi_desktop_true:
  mdi_desktop = 1
return

mdi_desktop_false:
  mdi_desktop = 0
return

msgbox:
  Locale = LocaleBox!.getSelectedIndex()
  if Locale<0 then
     Locale$ = stbl("!LOCALE",Locale.getDefault().toString())
     Locale! = Locale.getDefault()
     Message! = Locale!.getDisplayName(Locale!)
     Title! = Locale!.getDisplayName()
  else
     Locale$ = stbl("!LOCALE",Locales!.get(Locale))
     Locale! = LocaleList!.get(Locale)
     Message! = localNameList!.get(Locale)
     Title! = defaultNameList!.get(Locale)
  endif

  Title$ = fnhtml$(Title!,html)

  if rows then
     for i = 1 to rows
      extra$ = fill(cols,"row"+str(i)+",")
      Message! = Message!.concat($0a$).concat(extra$)
     next i
  endif

  Message$ = fnhtml$(Message!,html)
  expr = 0, custom = 0
  switch ButtonsGroup!.getSelected().getID()
    case Buttons0!.getID(); break
    case Buttons1!.getID(); expr=1; break
    case Buttons2!.getID(); expr=2; break
    case Buttons3!.getID(); expr=3; break
    case Buttons4!.getID(); expr=4; break
    case Buttons5!.getID(); expr=5; break
    case Buttons7!.getID(); expr=7,custom=1; break
    case default; escape
  swend

  switch IconGroup!.getSelected().getID()
    case Icon0!.getID(); break
    case Icon16!.getID(); expr=expr+16; break
    case Icon32!.getID(); expr=expr+32; break
    case Icon48!.getID(); expr=expr+48; break
    case Icon64!.getID(); expr=expr+64; break
    case default; escape
  swend

  switch DefaultGroup!.getSelected().getID()
    case Default0!.getID(); break
    case Default256!.getID(); expr=expr+256; break
    case Default512!.getID(); expr=expr+512; break
    case default; escape
  swend

  if disable_html then expr=expr+32768
  if mdi_desktop then expr=expr+131072

  mode$ = "x="+x$+",y="+y$+",w="+w$+",h="+h$
  if len(mode!.getText().trim()) then mode$ = mode$ + "," +mode!.getText().trim()
  iconwidth$ = iconwidth!.getText().trim()
  if len(iconwidth$) then mode$ = mode$ + ",iconwidth=" + iconwidth$
  iconheight$ = iconheight!.getText().trim()
  if len(iconheight$) then mode$ = mode$ + ",iconheight=" + iconheight$
  icon$ = icon!.getText().trim()
  if pos(","=icon$) then icon$ = """" + icon$ + """"
  if len(icon$) then mode$ = mode$ + ",icon=" + icon$

print mode$,expr
rem System.err.println(mode$)

msgbox! = bbjapi().msgbox().message(Message$).title(title$).options(expr).timeout(timeout).modes(mode$)

  if custom then
    Button1! = Custom1!.getText().trim(),Button1$=fnhtml$(Button1!,html)
    Button2! = Custom2!.getText().trim(),Button2$=fnhtml$(Button2!,html)
    Button3! = Custom3!.getText().trim(),Button3$=fnhtml$(Button3!,html)
    if Button3!.length() then
       rem result = msgbox(Message$,expr,Title$,Button1$,Button2$,Button3$,tim=timeout,mode=mode$,err=oops)
       msgbox!.button1(Button1$).button2(Button2$).button3(Button3$)
       print msgbox!
       result = msgbox!.show(err=oops)
    else
       if Button2!.length() then
          rem result = msgbox(Message$,expr,Title$,Button1$,Button2$,tim=timeout,mode=mode$,err=oops)
          msgbox!.button1(Button1$).button2(Button2$)
          print msgbox!
          result = msgbox!.show(err=oops)
       else
          if Button1!.length() then
             rem result = msgbox(Message$,expr,Title$,Button1$,tim=timeout,mode=mode$,err=oops)
             msgbox!.button1(Button1$)
             print msgbox!
             result = msgbox!.show(err=oops)
          else
             rem result = msgbox(Message$,expr,Title$,tim=timeout,mode=mode$,err=oops)
             print msgbox!
             result = msgbox!.show(err=oops)
          endif
       endif
    endif
    switch result
      case -1; result$ = "Timeout"; break
      case 0; result$ = "None"; break
      case 1; result$ = Button1$; break
      case 2; result$ = Button2$; break
      case 3; result$ = Button3$; break
      case default; result$ = "Undefined"
    swend
  else
    rem result = msgbox(Message$,expr,Title$,tim=timeout,mode=mode$,err=oops)
    print msgbox!
    result = msgbox!.show(err=oops)
    switch result
      case -1; result$ = "Timeout"; break
      case 0; result$ = "None"; break
      case 1; result$ = "OK"; break
      case 2; result$ = "Cancel"; break
      case 3; result$ = "Abort"; break
      case 4; result$ = "Retry"; break
      case 5; result$ = "Ignore"; break
      case 6; result$ = "Yes"; break
      case 7; result$ = "No"; break
      case default; result$ = "Undefined"
    swend
  endif
  result$ = "MSGBOX result = " + result$ + " ("+str(result)+")"
  status!.setText(result$)
return

oops:
  rem result = msgbox(errmes(-1),48,"*** ERROR ***")
  result = bbjapi().msgbox().message(errmes(-1)).options(48).title("*** ERROR ***").show()
return

prompt:
  Locale = LocaleBox!.getSelectedIndex()
  if Locale<0 then
     Locale$ = stbl("!LOCALE",Locale.getDefault().toString())
     Locale! = Locale.getDefault()
     Message! = Locale!.getDisplayName(Locale!)
     Title! = Locale!.getDisplayName()
  else
     Locale$ = stbl("!LOCALE",Locales!.get(Locale))
     Locale! = LocaleList!.get(Locale)
     Message! = localNameList!.get(Locale)
     Title! = defaultNameList!.get(Locale)
  endif

  Title$ = fnhtml$(Title!,html)
  Default$ = Title$

  if rows then
     for i = 1 to rows
      extra$ = fill(cols,"row"+str(i)+",")
      Message! = Message!.concat($0a$).concat(extra$)
     next i
  endif

  Message$ = fnhtml$(Message!,html)
  expr = 0

  switch DefaultGroup!.getSelected().getID()
    case Default0!.getID(); break
    case Default256!.getID(); expr=expr+256; break
    case Default512!.getID(); expr=expr+512; break
    case default; escape
  swend

  switch IconGroup!.getSelected().getID()
    case Icon0!.getID(); break
    case Icon16!.getID(); expr=expr+16; break
    case Icon32!.getID(); expr=expr+32; break
    case Icon48!.getID(); expr=expr+48; break
    case Icon64!.getID(); expr=expr+64; break
    case default; escape
  swend

  if mdi_desktop then expr=expr+131072

  mode$ = "x="+x$+",y="+y$+",w="+w$+",h="+h$
  if len(mode!.getText().trim()) then mode$ = mode$ + "," +mode!.getText().trim()
  iconwidth$ = iconwidth!.getText().trim()
  if len(iconwidth$) then mode$ = mode$ + ",iconwidth=" + iconwidth$
  iconheight$ = iconheight!.getText().trim()
  if len(iconheight$) then mode$ = mode$ + ",iconheight=" + iconheight$
  icon$ = icon!.getText().trim()
  if pos(","=icon$) then icon$ = """" + icon$ + """"
  if len(icon$) then mode$ = mode$ + ",icon=" + icon$

print mode$,expr

  rem result$ = prompt(Message$,Default$,Title$,expr,tim=timeout,mode=mode$,err=oops)
  prompt! = bbjapi().prompt().message(Message$).init(Default$).title(Title$).options(expr).timeout(timeout).modes(mode$)
print prompt!
  result$ = prompt!.show(err=oops)
  result$ = "PROMPT result = " + result$
  status!.setText(result$)
return

use java.util.Arrays
use java.util.ArrayList
use java.util.Locale

init:
  default$ = Locale.getDefault().toString()
  default! = default$
  vector! = bbjapi().makeVector()
  list! = stbl("!LOCALES")
  Locales! = Arrays.asList(list!.split($0a$))
  java.util.Collections.sort(Locales!)
  localeList! = new ArrayList()
  localNameList! = new ArrayList()
  defaultNameList! = new ArrayList()
  for i=0 to Locales!.size()-1
    temp! = Arrays.asList(Locales!.get(i).split("_",3))
    switch temp!.size()
      case 3; Locale! = new Locale(temp!.get(0),temp!.get(1),temp!.get(2)); break
      case 2; Locale! = new Locale(temp!.get(0),temp!.get(1)); break
      case 1; Locale! = new Locale(temp!.get(0)); break
      case default; Locale! = Locale.getDefault(); break
    swend
    localeList!.add(Locale!)
    language$ = Locale!.getLanguage()
    localName! = new String(Locale!.getDisplayName(Locale!).getBytes("UTF-8"),"UTF-8")
    defaultName! = new String(Locale!.getDisplayName().getBytes("UTF-8"),"UTF-8")
    unicode! = localName!.concat(" - ").concat(defaultName!)
    vector!.add(unicode!)
    localNameList!.add(localName!)
    defaultNameList!.add(defaultName!)
    if Locales!.get(i).equals(default$) then default!=unicode!
  next i
  LocaleBox!.insertItems(-1,vector!)
  default = vector!.indexOf(default!)
  LocaleBox!.selectIndex(default)
return

def fnhtml$(string!,_html)
  html! = new StringBuilder("")
  if string!.length() then
    for i=0 to string!.length()-1
      c = string!.codePointAt(i)
      if c<128 then html!.append(chr(c)) else html!.append("&#").append(str(c)).append(";"); _html=1
    next i
    if _html then
       html!.insert(0,"<html><p style='font-size:20px;'>")
    endif
  endif
  print string!," = ",html!
  if _html then return html!.toString().replaceAll($0a$,"<br>")
  print html!.toString()
  return html!.toString()
fnend

timeout:
  event! = sysgui!.getLastEvent()
  timeout = num(event!.getText())
return

rows:
  event! = sysgui!.getLastEvent()
  rows = num(event!.getText())
return

cols:
  event! = sysgui!.getLastEvent()
  cols = num(event!.getText())
return

x:
  event! = sysgui!.getLastEvent()
  x$ = event!.getText()
return

y:
  event! = sysgui!.getLastEvent()
  y$ = event!.getText()
return

w:
  event! = sysgui!.getLastEvent()
  w$ = event!.getText()
return

h:
  event! = sysgui!.getLastEvent()
  h$ = event!.getText()
return

imagefile:
  filter$ = "Images"+$0a$+"*.png;*.jpg;*.jpeg;*.gif;*.tif;*.tiff"
  filter$ = filter$ + $0a$ + "All Files (*.*)"+$0a$+"*.*"
  rem clientfile$ = fileopen("Image File","","","",filter$,mode="client,style=style")
  fileopen! = bbjapi().fileopen().title("Image File").filters(filter$).modes("client,style=style")
  print fileopen!
  clientfile$ = fileopen!.show()
  if pos("::"=clientfile$) then icon!.setText(""); return
  tc! = bbjapi().getThinClient()
  fs! = tc!.getClientFileSystem()
  cf! = fs!.getClientFile(clientfile$)
  rem ' The Java Swing GUI client doesn't understand data urls
  if info(3,6)="5" or info(3,6)="6" then
     bytes! = cf!.getContents()
     base64$=java.util.Base64.getMimeEncoder().encode(bytes!)
     url$ = "data:image/png;base64,"+base64$
     icon!.setText(url$)
  else
     imagefile$ = cf!.copyFromClient()
     icon!.setText(imagefile$)
  endif
return

See Also

BBjAPI

BBjAPI - Msgbox

MSGBOX() Function

See the BBj Object Diagram for an illustration of the relationship between BBj Objects.