use com.basiscomponents.ui.layout.BBMigPane use net.miginfocom.layout.PlatformDefaults
use java.util.HashMap use java.util.Iterator
rem test code when run rem debug = BBjAPI().TRUE new bbmigtest(debug) release
class public bbmigtest field private BBjAPI API! = BBjAPI() field private BBjNumber TRUE = BBjAPI().TRUE field private BBjNumber FALSE = BBjAPI().FALSE field private BBjSysGui SysGui! = BBjAPI().openSysGui("X0")
field private BBjNumber debug = BBjAPI().FALSE
field private BBjTopLevelWindow Window! field private BBMigPane Layout! field private BBjChildWindow cWindow! field private BBMigPane cLayout!
field private BBjStaticText lFirstName! field private BBjInputE iFirstName! field private BBjStaticText lSurname! field private BBjInputE iSurname! field private BBjStaticText lAddress! field private BBjInputE iAddress!
field private BBjMenuButton bOk! field private BBjMenuButton bCancel! field private BBjMenuButton bHelp!
field public BBjNumber ActiveResize = BBjAPI().FALSE
method public bbmigtest() #bbmigtest(BBjAPI().FALSE()) methodend
method public bbmigtest(BBjNumber debug) #debug = debug if #debug then print 'show', rem test platforms (NOTE: setting sticks til reset or JVM re-started) rem PlatformDefaults.setPlatform(PlatformDefaults.WINDOWS_XP) rem PlatformDefaults.setPlatform(PlatformDefaults.MAC_OSX) rem PlatformDefaults.setPlatform(PlatformDefaults.GNOME) print "Platform=", switch PlatformDefaults.getPlatform() case PlatformDefaults.WINDOWS_XP print "Windows", break case PlatformDefaults.MAC_OSX print "Mac OS X", break case PlatformDefaults.GNOME print "Gnome", break case default print "Unknown", break swend print " (real os=",System.getProperty("os.name"),"), Default DPI=", : PlatformDefaults.getDefaultDPI() else print 'hide', endif
#constructForm() #show() methodend
method public void show() #Window!.setCallback(#Window!.ON_CLOSE, #this!, "closeWindow") #Window!.setCallback(#Window!.ON_RESIZE, #this!, "windowResize") #Window!.setCallback(#Window!.ON_SCREEN_RESIZE, #this!, "screenResize") #Window!.setCallback(#Window!.ON_MOUSE_SCROLL, #this!, "mouseScroll") #cWindow!.setCallback(#cWindow!.ON_MOUSE_SCROLL, #this!, "mouseScroll")
#resizeTimerEvent(null())
#Window!.setVisible(#TRUE) #Window!.focus()
process_events methodend
method public void closeWindow(BBjCloseEvent ev!) release methodend
method public void windowResize(BBjResizeEvent p_event!) if !(#ActiveResize) #ActiveResize = #TRUE #API!.createTimer("ResizeEventTimer", .2, #this!, "resizeTimerEvent") endif methodend
method public void screenResize(BBjScreenResizeEvent p_event!) if !(#ActiveResize) #ActiveResize = #TRUE #API!.createTimer("ResizeEventTimer", .2, #this!, "resizeTimerEvent") endif methodend
method public void resizeTimerEvent(BBjTimerEvent p_event!) #SysGui!.setRepaintEnabled(#FALSE) #Layout!.layoutChildren() #cLayout!.layoutChildren() #SysGui!.setRepaintEnabled(#TRUE) #API!.removeTimer("ResizeEventTimer",err=*next) #ActiveResize = #FALSE methodend
method public void mouseScroll(BBjScrollWheelEvent p_event!) if p_event!.isControlDown() or p_event!.isCmdDown() then scale = num(cast(HashMap, #Window!.getUserData()).get("scale")) if p_event!.getScrollDirection() then scale = scale + (p_event!.getWheelRotation() / 10) else scale = scale - (p_event!.getWheelRotation() / 10) endif if scale >= 0.5 and scale <= 4.0 then #Layout!.scaleLayout(scale, #SysGui!) #cLayout!.scaleLayout(scale, #SysGui!) cast(HashMap, #Window!.getUserData()).put("scale", scale) endif endif methodend
method public void constructForm() WinFlags$=$00000000$ WinFlags$=IOR(WinFlags$,$00000001$); rem Resizable WinFlags$=IOR(WinFlags$,$00000002$); rem Include close box rem WinFlags$=IOR(WinFlags$,$00000004$); rem Horizontal scroll bar rem WinFlags$=IOR(WinFlags$,$00000008$); rem Vertical scroll bar WinFlags$=IOR(WinFlags$,$00000010$); rem Initially invisible rem WinFlags$=IOR(WinFlags$,$00000020$); rem Initially disabled WinFlags$=IOR(WinFlags$,$00000080$); rem Max-/Minimizable rem WinFlags$=IOR(WinFlags$,$00000100$); rem Initially minimized rem WinFlags$=IOR(WinFlags$,$00000800$); rem Include menu bar rem WinFlags$=IOR(WinFlags$,$00001000$); rem Initially maximized rem WinFlags$=IOR(WinFlags$,$00002000$); rem No menu separator line WinFlags$=IOR(WinFlags$,$00010000$); rem Keyboard navigation rem WinFlags$=IOR(WinFlags$,$00020000$); rem Always on top rem WinFlags$=IOR(WinFlags$,$00040000$); rem Dialog border WinFlags$=IOR(WinFlags$,$00080000$); rem Behave as a dialog rem WinFlags$=IOR(WinFlags$,$00100000$); rem Auto-arrange controls WinFlags$=IOR(WinFlags$,$00400000$); rem Custom color palette WinFlags$=IOR(WinFlags$,$00800000$); rem <Enter> behaves as <Tab> rem WinFlags$=IOR(WinFlags$,$01000000$); rem No window title bar WinFlags$=IOR(WinFlags$,$04000000$); rem Auto-manage SYSCOLOR events rem WinFlags$=IOR(WinFlags$,$20000000$); rem (VPRO5) Report mouse right button rem WinFlags$=IOR(WinFlags$,$40000000$); rem MDI group-modal #Window! = #SysGui!.addWindow( : #SysGui!.getAvailableContext(),400,400,400,400, : "BBMigPane Layout Test",WinFlags$) #Window!.setName("window") #Window!.setUserData(new HashMap()) cast(HashMap, #Window!.getUserData()).put("scale",1.0)
declare BBjFont font! font_size = 12 font! = #SysGui!.makeFont("Dialog",font_size,#SysGui!.PLAIN) font_height = iff(font!.getStyle()=#SysGui!.BOLD,int(font_size*1.1),font_size)
#Window!.setFont(font!)
if #debug then #Window!.setTrack(BBjAPI().FALSE) #Layout! = new BBMigPane(#Window!, : "insets dialog"+iff(#debug,", debug",""), : "[align label]rel[grow,fill]unrel[align label]rel[grow,fill]", : "")
declare BBjVector tx! declare BBjVector tm! tx! = #API!.makeVector() tidFirstName = 0; tx!.add(tidFirstName, "First Name:") tidSurname = 1; tx!.add(tidSurname, "Surname:") tidAddress = 2; tx!.add(tidAddress, "Address:") tidOk = 3; tx!.add(tidOk, "OK") tidCancel = 4; tx!.add(tidCancel, "Cancel") tidHelp = 5; tx!.add(tidHelp, "Help") tm! = #SysGui!.getMeasures(tx!)
declare BBjColor lbl_bkcolor! lbl_bkcolor! = #API!.makeColor(#SysGui!.YELLOW) setlblbkcolor = #debug
rem label width/height padding, input control width/height padding lwpad=0,lhpad=8,iwpad=8,ihpad=8
#lFirstName! = #Window!.addStaticText(#Window!.getAvailableControlID(),0,0, : num(tm!.get(tidFirstName))+lwpad,font_height+lhpad, : str(tx!.get(tidFirstName))) #lFirstName!.setName("lFirstName") #lFirstName!.setOpaque(#FALSE) #lFirstName!.setFont(font!) if setlblbkcolor then #lFirstName!.setBackColor(lbl_bkcolor!) #Layout!.add(#lFirstName!)
#iFirstName! = #Window!.addInputE(#Window!.getAvailableControlID(),0,0, : 100,font_height+ihpad,"") #iFirstName!.setName("iFirstName") #iFirstName!.setFont(font!) #Layout!.add(#iFirstName!)
#lSurname! = #Window!.addStaticText(#Window!.getAvailableControlID(),0,0, : num(tm!.get(tidSurName))+lwpad,font_height+lhpad,str(tx!.get(tidSurName))) #lSurname!.setName("lSurname") #lSurname!.setOpaque(#FALSE) #lSurname!.setFont(font!) if setlblbkcolor then #lSurname!.setBackColor(lbl_bkcolor!) #Layout!.add(#lSurname!)
#iSurname! = #Window!.addInputE(#Window!.getAvailableControlID(),0,0, : 100,font_height+ihpad,"") #iSurname!.setName("iSurname") #iSurname!.setFont(font!) #Layout!.add(#iSurname!, "wrap")
#lAddress! = #Window!.addStaticText(#Window!.getAvailableControlID(),0,0, : num(tm!.get(tidAddress))+lwpad,font_height+lhpad,str(tx!.get(tidAddress))) #lAddress!.setName("lAddress") #lAddress!.setOpaque(#FALSE) #lAddress!.setFont(font!) if setlblbkcolor then #lAddress!.setBackColor(lbl_bkcolor!) #Layout!.add(#lAddress!)
#iAddress! = #Window!.addInputE(#Window!.getAvailableControlID(),0,0, : 200,font_height+ihpad,"") #iAddress!.setName("iAddress") #iAddress!.setFont(font!) #Layout!.add(#iAddress!, "spanx, wrap unrel:push")
rem child window (pane) for the buttons to test button tags cWinFlags$=$00000000$ rem cWinFlags$=IOR(cWinFlags$,$00000004$); rem Allow horizontal scroll bar rem cWinFlags$=IOR(cWinFlags$,$00000008$); rem Allow vertical scroll bar rem cWinFlags$=IOR(cWinFlags$,$00000010$); rem Initially invisible rem cWinFlags$=IOR(cWinFlags$,$00000020$); rem Initially disabled cWinFlags$=IOR(cWinFlags$,$00000800$); rem No border cWinFlags$=IOR(cWinFlags$,$00010000$); rem Keyboard navigation rem cWinFlags$=IOR(cWinFlags$,$00100000$); rem Auto-arrange controls rem cWinFlags$=IOR(cWinFlags$,$00200000$); rem Dock in parent frame cWinFlags$=IOR(cWinFlags$,$00800000$); rem <Enter> behaves as <Tab> rem cWinFlags$=IOR(cWinFlags$,$01000000$); rem Recessed client edge rem cWinFlags$=IOR(cWinFlags$,$02000000$); rem Raised edge #cWindow! = #Window!.addChildWindow(#Window!.getAvailableControlID(),0,0, : #Window!.getWidth(),25,"",cWinFlags$,#SysGui!.getAvailableContext()) #cWindow!.setName("cWindow") #cWindow!.setFont(font!)
declare BBjColor btn_bkcolor! btn_bkcolor! = #API!.makeColor(#SysGui!.CYAN) setbtnbkcolor = #debug
if #debug then #cWindow!.setTrack(BBjAPI().FALSE) #cLayout! = new BBMigPane(#cWindow!, "nogrid, fill"+iff(#debug,", debug",""))
bwpad=16,bhpad=16; rem button width/height padding
#bHelp! = #cWindow!.addMenuButton(#cWindow!.getAvailableControlID(),0,0, : num(tm!.get(tidHelp))+bwpad,font_height+bhpad,str(tx!.get(tidHelp))) #bHelp!.setName("bHelp") #bHelp!.setBorderPainted(#TRUE) #bHelp!.setFont(font!) if setbtnbkcolor then #bHelp!.setBackColor(btn_bkcolor!) #cLayout!.add(#bHelp!,"sg,tag help");rem there is also a "tag help2"
#bOk! = #cWindow!.addMenuButton(#cWindow!.getAvailableControlID(),0,0, : num(tm!.get(tidOk))+bwpad,font_height+bhpad,str(tx!.get(tidOk))) #bOk!.setName("bOk") #bOk!.setBorderPainted(#TRUE) #bOk!.setFont(font!) if setbtnbkcolor then #bOk!.setBackColor(btn_bkcolor!) #cLayout!.add(#bOk!,"sg,tag ok")
#bCancel! = #cWindow!.addMenuButton(#cWindow!.getAvailableControlID(),0,0, : num(tm!.get(tidCancel))+bwpad,font_height+bhpad,str(tx!.get(tidCancel))) #bCancel!.setName("bCancel") #bCancel!.setBorderPainted(#TRUE) #bCancel!.setFont(font!) if setbtnbkcolor then #bCancel!.setBackColor(btn_bkcolor!) #cLayout!.add(#bCancel!,"sg,tag cancel")
#cLayout!.layoutChildren() #Layout!.add(#cWindow!, "south") methodend
classend |