BBjHtmlEdit

Creation Path


BBjAPI

|

+--BBjSysGui

|

+--BBjWindow

|

+--BBjHtmlEdit

 

Description

In BBj 16.0 and higher, the BBjHtmlEdit control implements a rich text editor backed by HTML.

Setting the STBL("!OPTIONS") JAVAFX_HTMLEDIT option to TRUE makes the BBjHtmlEdit control use JavaFX (if available). In this configuration, the BBjHtmlEdit uses an embedded WebKit browser, with support for HTML5, CSS, and JavaScript.

In BBj 19.0 and higher, setting the STBL("!OPTIONS") CHROMIUM_HTMLEDIT option to TRUE makes the BBjHtmlEdit control use a Chromium engine (if available). In this configuration, the BBjHtmlEdit uses an embedded Chromium-based web browser, with support for HTML5, CSS, and JavaScript.

Access to the JAVAFX_HTMLEDIT and CHROMIUM_HTMLEDIT features requires an active Software Asset Management (SAM) subscription. See Benefits of ‘Software Asset Management' Feature Line.

Implemented Interfaces

Focusable, TabTraversable

Creation

A BBjHtmlEdit object is created through the following BBjWindow methods:

 

Return Value

Method

BBjHtmlEdit

addHtmlEdit(int ID, int x, int y, int width, int height, string html)

BBjHtmlEdit

addHtmlEdit(int ID, int x, int y, int width, int height, string html, string flags)

Methods of BBjHtmlEdit

Return Value

Method

BBjVector

getAllToolbarStyles()

boolean

getBasicToolbar()

BBjVector

getBasicToolbarStyles()

string

getClientType()

string

getClientVersion()

string

getPlainText()

string

getText()

void

setBasicToolbarStyles(BBjVector styles)

void

setPlainText(string text)

void

setText(string text)

void

setBasicToolbar(boolean basicToolbar)

Methods of BBjHtmlEdit implemented for Focusable

Return Value

Method

boolean

isFocusable()

void

setFocusable(boolean p_focus)

Methods of BBjHtmlEdit implemented for TabTraversable

Return Value

Method

boolean

isTabTraversable()

void

setTabTraversable(boolean trav)

Methods of BBjHtmlEdit inherited from BBjControl

Events

Callback Code

Object-oriented Event

Read Record Event

Code

ON_EDIT_MODIFY

BBjEditModifyEvent

Edit Control Modify Event

e

ON_GAINED_FOCUS

BBjGainedFocusEvent

Control Focus Gained/Lost Event

f

ON_LOST_FOCUS

BBjLostFocusEvent

Control Focus Gained/Lost Event

f

ON_MOUSE_ENTER

BBjMouseEnterEvent

Mouse Enter/Exit Event

E

ON_MOUSE_EXIT

BBjMouseExitEvent

Mouse Enter/Exit Event

E

ON_PAGE_LOADED

BBjPageLoadedEvent

Page Loaded Event

x

ON_POPUP_REQUEST

BBjPopupRequestEvent

Popup Request Event

r

ON_RIGHT_MOUSE_DOWN

BBjRightMouseDownEvent

Right Mouse Button Down Event

R

CSS

The visual appearance of BUI controls is defined using CSS (cascading style sheets) rules. Easily change the default colors, border, and other settings by customizing these rules, all without changing any application code. See CSS API for a high level overview of BUI CSS.

The BBjHtmlEdit control is a <div> containing an editor component consisting of a toolbar and an editing area. The BBjHtmlEdit defines the following CSS style names:

.BBjHtmlEdit (the top level control)

.BBjHtmlEdit.bbj-disabled (the control is disabled)

Most of the styling happens internally within the editor component; these CSS selectors can only apply minimal additional styling, and some rules may require the use of !important to override internal editor rules.

Remarks

None.

Constants inherited from BBjControl

Example

rem ' BBjHtmlEdit
sysgui = unt
open (sysgui)"X0"
sysgui! = bbjapi().getSysGui()
window! = sysgui!.addWindow(50,50,900,500,"BBjHtmlEdit",$00090083$)
window!.setCallback(window!.ON_CLOSE,"eoj")
window!.setCallback(window!.ON_RESIZE,"resize")
rem ' $0001$ = disabled, $0010$ = invisible
rem ' $0002$ = minimized toolbar, $0004$ = basic toolbar
flags$ = $0000$
basic = 0, minimized = 0
if minimized then flags$ = ior(flags$,$0002$)
if basic then flags$ = ior(flags$,$0004$)
text$ = "<html><head><style>p{margin:0;padding:0;}</style><title>BASIS</title></head><body>"
img$ = "http://www.basis.com/sites/basis.com/files/images/BusJGBetter.jpg"
text$ = text$ + "<img src="""+img$+""">"
url$ = "http://documentation.basis.com/BASISHelp/WebHelp/gridctrl2/bbjhtmledit.htm"
text$ = text$ + "<p>This is a <a href="""+url$+""">BBjHtmlEdit</a>."
text$ = text$ + "</body></html>"
rem goto oops
text = unt
open (text,err=oops)"htmledit.html"
readrecord (text,siz=999999)text$
close (unt)
oops:
client = 0
if info(3,6)<>"5" then
   client = msgbox("BBjHtmlEdit Client",7+32+512,"BBjHtmlEdit","Swing","JavaFX","Chromium")
   switch client
      case 1; rem ' Swing
         print stbl("!OPTIONS","CHROMIUM_HTMLEDIT=FALSE",ERR=*NEXT)
         print stbl("!OPTIONS","JAVAFX_HTMLEDIT=FALSE",ERR=*NEXT)
         break
      case 2; rem ' JavaFX
         print stbl("!OPTIONS","CHROMIUM_HTMLEDIT=FALSE",ERR=*NEXT)
         print stbl("!OPTIONS","JAVAFX_HTMLEDIT=TRUE",ERR=*NEXT)
         break
      case 3; rem ' Chromium
         print stbl("!OPTIONS","CHROMIUM_HTMLEDIT=TRUE",ERR=*NEXT)
         print stbl("!OPTIONS","JAVAFX_HTMLEDIT=TRUE",ERR=*NEXT)
         break
   swend
endif
htmledit! = window!.addHtmlEdit(100,25,75,850,400,text$,flags$)
print "getClientType: ",htmledit!.getClientType(err=*next)
print "getClientVersion: ",htmledit!.getClientVersion(err=*next)
title$ = window!.getTitle() + " " + htmledit!.getClientType(err=*next) + " " + htmledit!.getClientVersion(err=*next)
window!.setTitle(title$)
htmledit!.setCallback(htmledit!.ON_PAGE_LOADED,"page")
htmledit!.setCallback(htmledit!.ON_EDIT_MODIFY,"modify")
clientfilesystem! = null()
clientfilesystem! = bbjapi().getThinClient(err=*next).getClientFileSystem(err=*next)
flags$ = iff(clientfilesystem!=null(),$0001$,$0000$)
clientfile! = window!.addButton(101,25,25,120,25,"Open Client File",flags$)
clientfile!.setCallback(clientfile!.ON_BUTTON_PUSH,"clientfile")
serverfile! = window!.addButton(102,150,25,120,25,"Open Server File",$$)
serverfile!.setCallback(serverfile!.ON_BUTTON_PUSH,"serverfile")
newHtml! = window!.addButton(103,275,25,120,25,"New HTML Doc",$$)
newHtml!.setCallback(newHtml!.ON_BUTTON_PUSH,"newHtml")
newText! = window!.addButton(104,400,25,120,25,"New Text Doc",$$)
newText!.setCallback(newText!.ON_BUTTON_PUSH,"newText")
getText! = window!.addButton(105,525,25,120,25,"getText (HTML)",$$)
getText!.setCallback(getText!.ON_BUTTON_PUSH,"getText")
getPlainText! = window!.addButton(106,650,25,120,25,"getPlainText",$$)
getPlainText!.setCallback(getPlainText!.ON_BUTTON_PUSH,"getPlainText")
getImage! = window!.addButton(107,775,25,120,25,"getImage",$$)
getImage!.setCallback(getImage!.ON_BUTTON_PUSH,"getImage")
window!.setVisible(1)
showText = sysgui!.getAvailableContext()
isDirty = 0
process_events
eoj:
release
page:
  gosub event
  if isDirty then
     text$ = htmledit!.getPlainText()
     title$ = "BBjHtmlEdit::getPlainText"
     isDirty = 0
     gosub showText
  else
     htmledit!.focus()
  endif
return
resize:
  gosub event
  width = event!.getWidth() - 50
  height = event!.getHeight() - 100
  htmledit!.setSize(width,height)
  print width,height
  wait 0
  htmledit!.focus()
return
event:
  event! = sysgui!.getLastEvent()
  print event!.getEventName()," ",event!.getControl()
return
clientfile:
  filter$ = "All Files (*.*)"+$0a$+"*.*"
  filter$ = filter$ + $0a$ + "HTML"+$0a$+"*.htm;*.html"
  filter$ = filter$ + $0a$ + "Text" + $0a$+"*.txt;*.src"
  clientfile$ = fileopen("Open Client File","","","",filter$,mode="client")
  if pos("::"=clientfile$) then return
  clientfile! = clientfilesystem!.getClientFile(clientfile$)
  serverfile$ = clientfile!.copyFromClient()
  serverfile = unt
  open (serverfile,err=*return)serverfile$
  bytes = dec(fin(serverfile)(1,4))
  text$ = ""
  if bytes then readrecord (serverfile,siz=bytes)text$
  close (serverfile)
  if fnIsText(clientfile$,text$) then
     htmledit!.setPlainText(text$); rem ' text
  else
     htmledit!.setText(text$); rem ' html
  endif
return
serverfile:
  filter$ = "All Files (*.*)"+$0a$+"*.*"
  filter$ = filter$ + $0a$ + "HTML"+$0a$+"*.htm;*.html"
  filter$ = filter$ + $0a$ + "Text" + $0a$+"*.txt;*.src"
  serverfile$ = fileopen("Open Server File","","","",filter$,mode="server")
  if pos("::"=serverfile$) then return
  serverfile = unt
  open (serverfile,err=*return)serverfile$
  bytes = dec(fin(serverfile)(1,4))
  text$ = ""
  if bytes then readrecord (serverfile,siz=bytes)text$
  close (serverfile)
  if fnIsText(serverfile$,text$) then
     htmledit!.setPlainText(text$); rem ' text
  else
     htmledit!.setText(text$); rem ' html
  endif
return
newHtml:
  new$ = "<html><head><style>p{margin:0;padding:0;}</style></head><body></body></html>"
  htmledit!.setText(new$)
return
newText:
  htmledit!.setPlainText(new String($000a00a0000a$,"UTF-16"))
return
getText:
  text$ = htmledit!.getText()
  title$ = "BBjHtmlEdit::getText"
  gosub showText
return
getPlainText:
  if isDirty then return
  isDirty = htmledit!.isDirty()
  if isDirty then return
  text$ = htmledit!.getPlainText()
  title$ = "BBjHtmlEdit::getPlainText"
  gosub showText
return
getImage:
  image = unt
  format$ = "png"
  image! = htmledit!.getImage()
  image$ = image!.getBytes(format$)
  path$ = System.getProperty("user.home")+"/Desktop/"
  open (image,mode="O_CREATE,O_TRUNC")path$+"html.png"
  writerecord (image)image$
  close (image)
return
showText:
  gosub closeShowText
  x = window!.getX() + 25
  y = window!.getY() + 25
  w = window!.getWidth()
  h = window!.getHeight()
  showText! = sysgui!.addWindow(showText,x,y,w,h,title$,$000b0003$)
  showText!.setCallback(showText!.ON_CLOSE,"closeShowText")
  cedit! = showText!.addCEdit(101,0,0,0,0,text$,$0182$)
return
closeShowText:
  if showText!<>null() then showText!.destroy(err=*next); showText! = null()
return
def fnIsText(_f$,_t$)
  rem ' treat this file (filename = _f$, contents = _t$) as plain text?
  rem ' this can be whatever combination of tests works for you.
  print "fnIsText ",_f$," (bytes=",str(len(_t$)),"): ",
  if pos("<html>"=cvs(_t$,8))=1 then print "<html> = html"; return 0
  _f$ = cvs(_f$,8); rem ' lowercase
  if pos(".html"=_f$,-1)=len(_f$)-4 then print ".html = html"; return 0
  if pos(".htm"=_f$,-1)=len(_f$)-3 then print ".htm = html"; return 0
  if pos(".txt"=_f$,-1)=len(_f$)-3 then print ".txt = text"; return 1
  if pos(".src"=_f$,-1)=len(_f$)-3 then print ".src = text"; return 1
  if pos(".properties"=_f$,-1)=len(_f$)-10 then print ".properties = text"; return 1
  print "default to text"; return 1; rem ' pick a default
fnend
modify:
  event! = sysgui!.getLastEvent()
  print event!.getEventName()," ",event!.getText()
return

See Also

BBjAPI

BBjSysGui

BBjWindow

CALLBACK Verb - Register BBj Subroutine

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



______________________________________________________________________________________

Copyright BASIS International Ltd. BBj®, Visual PRO/5®, PRO/5®, and BBx® are registered trademarks.