sg = unt
open(sg)"X0"
api! = BBjAPI()
sg! = api!.getSysGui()
window! = sg!.addWindow(100, 100, 800, 300, "File Chooser Demo", $00010083$, $$)
stBar! = window!.addStatusBar(100, $$)
pwd$ = DIR("")
fc! = window!.addFileChooser(101, 0, 0, 500, 250, pwd$, flags$)
fc!.setAcceptAllFileFilterUsed(0)
description! = window!.addStaticText(102, 500, 0, 300, 200, $$)
description!.setFont(sg!.makeFont("Arial", 18, sg!.BOLD))
W_ACTION$ = "Finish Distribution"
S_ACTION$ = "Create Widget"
G_ACTION$ = "Create Sprocket"
A_ACTION$ = "Create Gadget/Doodad"
actionButton! = window!.addButton(103, 510, 230, 140, 25, A_ACTION$)
delButton! = window!.addButton(104, 660, 230, 140, 25, "Delete All Parts")
if (fc!.getControlButtonsAreShown())
fc!.setControlButtonsAreShown(0)
endif
WIDGETS$ = "Widgets"
SPROCKETS$ = "Sprockets"
G_AND_D$ = "Gadgets and Doodads"
PARTS$ = "All Parts"
fc!.addFileFilter(WIDGETS$, "*.wgt")
fc!.addFileFilter(SPROCKETS$, "*.skt")
vec! = api!.makeVector()
vec!.add("*.ggt")
vec!.add("*.ddd")
fc!.addFileFilter(G_AND_D$, vec!)
vec! = api!.makeVector()
vec!.add("*.ggt")
vec!.add("*.ddd")
vec!.add("*.skt")
vec!.add("*.wgt")
fc!.addFileFilter(PARTS$, vec!)
fc!.setActiveFileFilter(PARTS$)
window!.setCallback(api!.ON_CLOSE, "DO_CLOSE")
fc!.setCallback(api!.ON_FILECHOOSER_CHANGE, "SELECTION")
actionButton!.setCallback(api!.ON_BUTTON_PUSH, "DO_ACTION")
delButton!.setCallback(api!.ON_BUTTON_PUSH, "DELETE_ALL_FILES")
api!.createTimer("timer", .5, "UPDATE_DESCRIPTION")
process_events
DO_CLOSE:
release
DO_ACTION:
dir$ = fc!.getCurrentDirectory()
text$ = actionButton!.getText()
if (text$ = A_ACTION$)
I = 1
GADGET = RND(2)
while 1
if (GADGET)
fileName$ = dir$ + "/gadget" + STR(I) + ".ggt"
else
fileName$ = dir$ + "/doodad" + STR(I) + ".ddd"
endif
STRING fileName$,ERR=*NEXT; BREAK
I = I + 1
wend
PRINT "Created " + fileName$
endif
if (text$ = G_ACTION$)
I = 1
while 1
fileName$ = dir$ + "/sprocket" + STR(I) + ".skt"
STRING fileName$,ERR = NEXT_SPROCKET
PRINT "Created " + fileName$
vec! = fc!.getSelectedFiles()
fChan = UNT
OPEN(fChan,ERR=*NEXT)fileName$
FOR I = 0 TO vec!.size() - 1
WRITE(fChan,ERR=*BREAK)vec!.get(I)
NEXT I
CLOSE(fChan,ERR=*NEXT)
BREAK
NEXT_SPROCKET:
I = I + 1
wend
fc!.setActiveFileFilter(SPROCKETS$)
endif
if (text$ = S_ACTION$)
I = 1
while 1
fileName$ = dir$ + "/widget" + STR(I) + ".wgt"
STRING fileName$,ERR = NEXT_WIDGET
PRINT "Created " + fileName$
vec! = fc!.getSelectedFiles()
fChan = UNT
OPEN(fChan,ERR=*NEXT)fileName$
FOR I = 0 TO vec!.size() - 1
WRITE(fChan,ERR=*BREAK)vec!.get(I)
NEXT I
CLOSE(fChan,ERR=*NEXT)
BREAK
NEXT_WIDGET:
I = I + 1
wend
fc!.setActiveFileFilter(WIDGETS$)
endif
if (text$ = W_ACTION$)
I = 1
while 1
fileName$ = dir$ + "/distribution" + STR(I) + ".pds"
STRING fileName$,ERR = NEXT_DIST
PRINT "Created " + fileName$
vec! = fc!.getSelectedFiles()
fChan = UNT
OPEN(fChan,ERR=*NEXT)fileName$
FOR I = 0 TO vec!.size() - 1
WRITE(fChan,ERR=*BREAK)vec!.get(I)
NEXT I
CLOSE(fChan,ERR=*NEXT)
BREAK
NEXT_DIST:
I = I + 1
wend
filters! = fc!.getFileFilterNames()
FOR I = 0 TO filters!.size() - 1
filterName$ = filters!.get(I)
if (filterName$ = PARTS$)
filterStrings! = fc!.getFileFilterContents(filterName$)
filterStrings!.add("*.pds")
fc!.removeFileFilter(PARTS$)
fc!.addFileFilter(PARTS$, filterStrings!)
endif
NEXT I
endif
fc!.rescanCurrentDirectory()
return
SELECTION:
ev! = BBjAPI().getLastEvent()
PRINT "Current Filter: " + ev!.getFileChooser().getActiveFilter()
vec! = ev!.getSelectedFiles()
if vec!.size() > 0
status$ = "Selected File: " + vec!.get(0)
stBar!.setText(status$)
actionButton!.setEnabled(1)
else
if (actionButton!.getText() = W_ACTION$)
actionButton!.setEnabled(1)
else
actionButton!.setEnabled(0)
endif
stBar!.setText($$)
endif
return
DELETE_ALL_FILES:
dir$ = fc!.getCurrentDirectory()
dirCh = UNT
OPEN(dirCh)dir$
while(dirCh)
READRECORD(dirCh,END=*BREAK)fileName$
str! = fileName$
doErase = str!.endsWith(".wgt")
doErase = doErase OR str!.endsWith(".skt")
doErase = doErase OR str!.endsWith(".ggt")
doErase = doErase OR str!.endsWith(".ddd")
doErase = doErase OR str!.endsWith(".pds")
if doErase
ERASE dir$ + "/" + fileName$,ERR=*PROCEED
endif
wend
fc!.rescanCurrentDirectory()
return
UPDATE_DESCRIPTION:
filter$ = fc!.getActiveFileFilter()
if filter$ = PARTS$
fc!.setMultiSelectionEnabled(0)
actionButton!.setText(A_ACTION$)
msg$ = "Create gadgets (pointy objects) "
msg$ = msg$ + "and doodads (rounded objects) "
msg$ = msg$ + "for sprockets, or change the file view"
actionButton!.setEnabled(1)
endif
if filter$ = WIDGETS$
fc!.setMultiSelectionEnabled(0)
msg$ = "Add a widget to a part distribution "
msg$ = msg$ + "to finish a distribution, "
msg$ = msg$ + "or change the file view"
actionButton!.setText(W_ACTION$)
if fc!.getSelectedFiles().size() = 0
actionButton!.setEnabled(0)
else
actionButton!.setEnabled(1)
endif
endif
if filter$ = SPROCKETS$
fc!.setMultiSelectionEnabled(1)
msg$ = "Add sprockets to a widget, or change the file view"
actionButton!.setText(S_ACTION$)
if fc!.getSelectedFiles().size() = 0
actionButton!.setEnabled(0)
else
actionButton!.setEnabled(1)
endif
endif
if filter$ = G_AND_D$
fc!.setMultiSelectionEnabled(1)
msg$ = "Add gadgets and doodads to a sprocket, or change the file
view"
actionButton!.setText(G_ACTION$)
if fc!.getSelectedFiles().size() = 0
actionButton!.setEnabled(0)
else
actionButton!.setEnabled(1)
endif
endif
description!.setText(msg$)
dir$ = fc!.getCurrentDirectory()
if (dir$(LEN(dir$), 1) <> "/")
dir$ = dir$ + "/"
endif
if (POS(pwd$ = dir$) = 0)
stBar!.setText("Cannot go above " + pwd$)
fc!.setCurrentDirectory(pwd$)
endif
return
|