Interface Scrollable

Description

In BBj 17.00 and higher, a BBjControl implements the Scrollable interface if it incorporates horizontal and vertical scrollbars (which may appear only as needed).

Implementing Classes

BBjCEdit, BBjGrid, BBjListBox, BBjTree

Methods of Scrollable

Return Value Method
int getHorizontalScrollBarHeight()
int getHorizontalScrollBarPosition()
int getHorizontalScrollBarWidth()
int getVerticalScrollBarHeight()
int getVerticalScrollBarPosition()
int getVerticalScrollBarWidth()
boolean isHorizontalScrollBarVisible()
boolean isVerticalScrollBarVisible()
void setHorizontalScrollBarPosition(int position)
void setVerticalScrollBarPosition(int position)

Event

Callback Code

Object-oriented Event

Read Record Event

Code

ON_CONTROL_SCROLL

BBjControlScrollEvent

Scrollbar Move Event

p

Example

rem ' Scrollable
sysgui = unt

title$ = "Scrollable"
window! = sysgui!.addWindow(50,50,250,300,title$,$00090003$)
window!.setCallback(window!.ON_CLOSE,"eoj")
window!.setCallback(window!.ON_RESIZE,"resize")

rem ' Define tree data
dim music$[2,4]
music$[0,0]="The Beatles"
music$[0,1]="Hey Jude"
music$[0,2]="Let It Be"
music$[0,3]="Twist and Shout"
music$[0,4]="Yesterday"
music$[1,0]="Paul Simon"
music$[1,1]="Bridge Over Troubled Water"
music$[1,2]="Hearts and Bones"
music$[1,3]="Kathy's Song"
music$[1,4]="The Sound of Silence"
music$[2,0]="Willie Nelson"
music$[2,1]="Always On My Mind"
music$[2,2]="Getting Over You"
music$[2,3]="Old Fords and Natural Stone"
music$[2,4]="This Morning"

dim image$[2,4]
rem ' fill in filenames here to set node-specific icons
image$[0,0]=""; rem "The Beatles"
image$[0,1]=""; rem "Hey Jude"
image$[0,2]=""; rem "Let It Be"
image$[0,3]=""; rem "Twist and Shout"
image$[0,4]=""; rem "Yesterday"
image$[1,0]=""; rem "Paul Simon"
image$[1,1]=""; rem "Bridge Over Troubled Water"
image$[1,2]=""; rem "Hearts and Bones"
image$[1,3]=""; rem "Kathy's Song"
image$[1,4]=""; rem "The Sound of Silence"
image$[2,0]=""; rem "Willie Nelson"
image$[2,1]=""; rem "Always On My Mind"
image$[2,2]=""; rem "Getting Over You"
image$[2,3]=""; rem "Old Fords and Natural Stone"
image$[2,4]=""; rem "This Morning"

rem ' Create and populate tree
tree! = window!.addTree(101,25,25,200,200)
tree!.putClientProperty("JTree.lineStyle","None")
tree!.setBackColor(window!.getBackColor())
tree!.setSelectionMode(tree!.SINGLE_TREE_SELECTION)
tree!.setCollapsedIcon("collapsed.gif",err=*next)
tree!.setExpandedIcon("expanded.gif",err=*next)
tree!.setLeafIcon("leaf.png",err=*next)
tree!.setSelectedIcon("selected.png",err=*next)
root = 0
node = 0
root$ = "Musical Tree"
root$ = "<html><h2>" + root$ + " " + str(root) + "</h2></html>"
tree!.setRoot(root,root$)
tree!.setToolTipText(root,root$)
color! = sysgui!.makeColor(rnd(255),rnd(255),rnd(255))
tree!.setNodeForeColor(root,color!)
for artist = 0 to 2
  node = node + 1
  artist$ = "<html><h3>"+music$[artist,0]+" "+str(node)+"</h3></html>"
  tree!.addExpandableNode(node,root,artist$)
  tree!.expandNode(node)
  tree!.setToolTipText(node,artist$)
  color! = sysgui!.makeColor(rnd(255),rnd(255),rnd(255))
  tree!.setNodeForeColor(node,color!)
  if len(image$[artist,0]) then
     tree!.setNodeIcon(node,image$[artist,0])
  endif
  parent = node
  for song = 1 to 4
    node = node + 1
    song$ = music$[artist,song]+" "+str(node)
    tree!.addNode(node,parent,song$)
    tree!.setToolTipText(node,song$)
    color! = sysgui!.makeColor(rnd(255),rnd(255),rnd(255))
    tree!.setNodeForeColor(node,color!)
    if len(image$[artist,song]) then
       tree!.setNodeIcon(node,image$[artist,song])
    endif
  next song
next artist

tree!.setCallback(tree!.ON_TREE_SELECT,"event")
tree!.setCallback(tree!.ON_TREE_DESELECT,"event")
tree!.setCallback(tree!.ON_TREE_EXPAND,"event")
tree!.setCallback(tree!.ON_TREE_COLLAPSE,"event")
tree!.setCallback(tree!.ON_TREE_EDIT_STOP,"event")
tree!.setCallback(tree!.ON_TREE_MOUSE_UP,"event")
tree!.setCallback(tree!.ON_TREE_MOUSE_DOWN,"event")
tree!.setCallback(tree!.ON_TREE_DOUBLE_CLICK,"event")
tree!.setCallback(tree!.ON_TREE_RIGHT_MOUSE_UP,"event")
tree!.setCallback(tree!.ON_TREE_RIGHT_MOUSE_DOWN,"event")
tree!.setCallback(tree!.ON_CONTROL_SCROLL,"scroll")
tree!.setCallback(tree!.ON_POPUP_REQUEST,"popup")

scrollable! = window!.addMenuButton(1,25,250,100,25,"Scrollable",$$)
scrollable!.setCallback(scrollable!.ON_BUTTON_PUSH,"scrollable")
reset! = window!.addMenuButton(2,125,250,100,25,"Reset",$$)
reset!.setCallback(reset!.ON_BUTTON_PUSH,"reset")

event = 0

dim event$:tmpl(sysgui),generic$:noticetpl(0,0)

process_events

eoj:
release

scrollable:
  print "Scrollable:"
  info$ = "isHorizontalScrollBarVisible="
  info$ = info$ + Boolean.toString(tree!.isHorizontalScrollBarVisible())
  info$ = info$ + $0a$ + "getHorizontalScrollBarWidth="
  info$ = info$ + str(tree!.getHorizontalScrollBarWidth())
  info$ = info$ + $0a$ + "getHorizontalScrollBarHeight="
  info$ = info$ + str(tree!.getHorizontalScrollBarHeight())
  info$ = info$ + $0a$ + "getHorizontalScrollBarPosition="
  info$ = info$ + str(tree!.getHorizontalScrollBarPosition())
  info$ = info$ + $0a$ + "isVerticalScrollBarVisible="
  info$ = info$ + Boolean.toString(tree!.isVerticalScrollBarVisible())
  info$ = info$ + $0a$ + "getVerticalScrollBarWidth="
  info$ = info$ + str(tree!.getVerticalScrollBarWidth())
  info$ = info$ + $0a$ + "getVerticalScrollBarHeight="
  info$ = info$ + str(tree!.getVerticalScrollBarHeight())
  info$ = info$ + $0a$ + "getVerticalScrollBarPosition="
  info$ = info$ + str(tree!.getVerticalScrollBarPosition())
  print info$
  i = msgbox(info$,0,"Scrollable")
return

reset:
  tree!.setHorizontalScrollBarPosition(0)
  tree!.setVerticalScrollBarPosition(0)
return

event:
  event = event + 1
  event! = sysgui!.getLastEvent()
  event$ = sysgui!.getLastEventString()
  print event!.getEventName(),event,":",
  if event.code$ = "N" then
     generic$ = notice(sysgui,event.x)
     dim notice$:noticetpl(generic.objtype,event.flags)
     notice$ = generic$
     fields = pos($0a$=fattr(notice$,""),1,0)
     dim field$:"name["+str(fields)+"]:c(1*)"
     let field$=fattr(notice$,"")
     for field=1 to fields
       name$ = field.name$[field]
       info$ = fattr(notice$,name$,$$)
       print " ",name$,"=",
       if asc(info$)=1 then
          print field(notice$,name$),
       else
          print str(nfield(notice$,name$)),
       endif
     next field
  endif
  event! = sysgui!.getLastEvent()
  print ""
  print "Selected node:",tree!.getSelectedNode()
  print ""
return

scroll:
  event = event + 1
  event! = sysgui!.getLastEvent()
  print event!.getEventName(),event,": orientation=",str(event!.getOrientation()),
  print " position=",str(event!.getPosition())," adjusting=",str(event!.isAdjusting())
return

popup:
  event! = sysgui!.getLastEvent()
  event$ = sysgui!.getLastEventString()
  print event!.getEventName()," X=",str(event.x)," Y=",str(event.y)
  print ""
return

resize:
  event! = sysgui!.getLastEvent()
  print "Resized; width=",str(event!.getWidth()),", height=",str(event!.getHeight())
return

See Also

BBjAPI

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