[futurebasic] Listboxes

Message: < previous - next > : Reply : Subscribe : Cleanse
Home   : May 2001 : Group Archive : Group : All Groups

From: Ken Shmidheiser <k.shmidheiser@...>
Date: Sun, 20 May 2001 09:30:57 -0600
Would some of you be so kind as to run this code. I am particularly 
looking to see if you get scroll button rubberbanding or other 
misbehavior in either list on different platforms. I'm also 
interested to be sure it meets HIG.

A very small resource is needed and is attached at the end as a binhex file.

Any suggestions or bug reports are welcome. Feel free to e-mail me off list.

Thanks,

Ken

'-------------BEGIN FB^3 CODE-------------------

COMPILE LONG IF NDEF _gestaltAppearanceAttr
INCLUDE "Tlbx Appearance.Incl"
COMPILE END IF

RESOURCES "currencyConverter.rsrc"
KILL RESOURCES "CDEF",8

BEGIN RECORD currencyConverter
DIM 15 countryStr   AS STR255
DIM 9 typeStr       AS STR255
END RECORD

BEGIN GLOBALS
DIM gList1H AS HANDLE
DIM gList2H AS HANDLE
DIM gTick   AS LONG
DIM c(52)   AS currencyConverter
DIM gFocus  AS BOOLEAN
DIM gQuit   AS BOOLEAN
END GLOBALS

BEGIN ENUM
_mainEntryField = 1
_responseOne
_responseTwo
_labelOne
_labelTwo
_labelThree
_splashField
END ENUM

_numField = 4

gFocus = _zTrue

c.countryStr(1) = "United States"
c.countryStr(2) = "Argentina"
c.countryStr(3) = "Australia"
c.countryStr(4) = "Austria"
c.countryStr(5) = "Bahamas"
c.countryStr(6) = "Belgium"
c.countryStr(7) = "Brazil"
c.countryStr(8) = "Canada"
c.countryStr(9) = "Chile"
c.countryStr(10) = "China"
c.countryStr(11) = "Colombia"
c.countryStr(12) = "Denmark"
c.countryStr(13) = "Europe"
c.countryStr(14) = "Fiji Islands"
c.countryStr(15) = "Finland"
c.countryStr(16) = "France"
c.countryStr(17) = "Germany"
c.countryStr(18) = "Ghana"
c.countryStr(19) = "Great Britain"
c.countryStr(20) = "Greece"
c.countryStr(21) = "Honduras"
c.countryStr(22) = "Hong Kong"
c.countryStr(23) = "Iceland"
c.countryStr(24) = "India"
c.countryStr(25) = "Ireland"
c.countryStr(26) = "Israel"
c.countryStr(27) = "Italy"
c.countryStr(28) = "Japan"
c.countryStr(29) = "Malaysia"
c.countryStr(30) = "Mexico"
c.countryStr(31) = "Morocco"
c.countryStr(32) = "Neth. Antilles"
c.countryStr(33) = "Netherlands"
c.countryStr(34) = "New Zealand"
c.countryStr(35) = "Norway"
c.countryStr(36) = "Pakistan"
c.countryStr(37) = "Panama"
c.countryStr(38) = "Peru"
c.countryStr(39) = "Philippines"
c.countryStr(40) = "Portugal"
c.countryStr(41) = "Singapore"
c.countryStr(42) = "South Africa"
c.countryStr(43) = "South Korea"
c.countryStr(44) = "Spain"
c.countryStr(45) = "Sri Lanka"
c.countryStr(46) = "Sweden"
c.countryStr(47) = "Switzerland"
c.countryStr(48) = "Taiwan"
c.countryStr(49) = "Thailand"
c.countryStr(50) = "Trinidad/Tobago"
c.countryStr(51) = "Tunisia"
c.countryStr(52) = "Venezuela"

c.typeStr(1) = "Dollars"
c.typeStr(2) = "Pesos"
c.typeStr(3) = "Dollars"
c.typeStr(4) = "Schillings"
c.typeStr(5) = "Dollars"
c.typeStr(6) = "Francs"
c.typeStr(7) = "Reals"
c.typeStr(8) = "Dollars"
c.typeStr(9) = "Pesos"
c.typeStr(10) = "Renminbis"
c.typeStr(11) = "Pesos"
c.typeStr(12) = "Krones"
c.typeStr(13) = "Euros"
c.typeStr(14) = "Dollars"
c.typeStr(15) = "Markkas"
c.typeStr(16) = "Francs"
c.typeStr(17) = "Marks"
c.typeStr(18) = "Cedis"
c.typeStr(19) = "Pounds"
c.typeStr(20) = "Drachmae"
c.typeStr(21) = "Lempiras"
c.typeStr(22) = "Dollars"
c.typeStr(23) = "Kronas"
c.typeStr(24) = "Rupees"
c.typeStr(25) = "Pounds"
c.typeStr(26) = "Shekels"
c.typeStr(27) = "Liras"
c.typeStr(28) = "Yen"
c.typeStr(29) = "Ringgits"
c.typeStr(30) = "New Pesos"
c.typeStr(31) = "Dirhams"
c.typeStr(32) = "Florins"
c.typeStr(33) = "Guilders"
c.typeStr(34) = "Dollars"
c.typeStr(35) = "Krones"
c.typeStr(36) = "Rupees"
c.typeStr(37) = "Balboas"
c.typeStr(38) = "New Sols"
c.typeStr(39) = "Pesos"
c.typeStr(40) = "Escudos"
c.typeStr(41) = "Dollars"
c.typeStr(42) = "Rands"
c.typeStr(43) = "Won"
c.typeStr(44) = "Pesetas"
c.typeStr(45) = "Rupees"
c.typeStr(46) = "Kronas"
c.typeStr(47) = "Francs"
c.typeStr(48) = "Dollars"
c.typeStr(49) = "Bahts"
c.typeStr(50) = "Dollars"
c.typeStr(51) = "Dinar"
c.typeStr(52) = "Bolivars"

LOCAL FN doQuit
gQuit = _zTrue
END FN

LOCAL FN aboutWindow
DIM AS STR255 introStr,intro2Str
DIM wnd2Ptr AS POINTER
DIM err     AS SHORT
introStr =  CHR$(13)+"This little demo"+CHR$(13)+"explores Listboxes."+CHR$(13)
intro2Str = "Ken Shmidheiser"+CHR$(13)+"Somerset, KY"+CHR$(13)+"May 2001"
WINDOW 2,"",( 0,0 )-( 250,150 ),-_dialogMovable
wnd2Ptr = WINDOW(_wndPointer) : if wnd2Ptr = _nil then exit fn
COLOR = _zBlue
TEXT _helvetica, 12, _boldBit%
LONG COLOR 46510,65535,65535,_false
EDIT 
FIELD(_splashField),introStr+CHR$(13)+intro2Str,(20,20)-(230,130),_statFramed,_centerJust
err = FN 
SETTHEMEWINDOWBACKGROUND(wnd2Ptr,_kThemeActiveDialogBackgroundBrush,_zTrue)
END FN

LOCAL FN splashScreen
FN aboutWindow
DELAY 2000
WINDOW CLOSE 2
END FN

LOCAL FN buildMenus
APPLE MENU "About Currency Converter Prototype..."
MENU 1,0, _enable, "File"
MENU 1,1, _enable, "Clear EFs"
MENU 1,2, _enable, "-"
MENU 1,3, _enable, "Quit/Q"
EDIT MENU 2
END FN

LOCAL FN getRowNumber( listHndl& )
DIM theCell   AS POINT
DIM cellFound AS BOOLEAN
DIM rowNumber AS INTEGER
CALL SETPT( theCell,0,0 )
cellFound = FN LGETSELECT( _true,#@theCell,listHndl& )
LONG IF cellFound
CALL LSETSELECT( _true,theCell,listHndl& )
rowNumber = theCell.v% + 1
XELSE
rowNumber = 0
END IF
END FN = rowNumber

LOCAL FN buildMainWindow
DIM err         AS SHORT
DIM @actualSize AS LONG
DIM x           AS INTEGER
DIM tmpStr      AS STR255
DIM cell        AS POINT
DIM wndPtr      AS POINTER
DIM list1Rect   AS RECT
DIM list2Rect   AS RECT
WINDOW -1,"Currency Converter",(0,0)-(490,360),_docNoGrow+_noAutoClip
TEXT _sysFont,12, 0
EDIT = 4
EDIT FIELD _mainEntryField,"1",( 251,20 )-( 330,36 
),_framedNoCR,_centerJust+_numField
EDIT FIELD _responseOne,"",( 72,254 )-( 408,269 ),_statFramed,_centerJust
EDIT FIELD _responseTwo,"",( 72,286 )-( 408,301 ),_statFramed,_centerJust
wndPtr = WINDOW(_wndPointer) : if wndPtr = _nil THEN EXIT FN
err    = FN 
SETTHEMEWINDOWBACKGROUND(wndPtr,_kThemeActiveDialogBackgroundBrush,_zTrue)
err = FN CREATEROOTCONTROl(wndPtr,gList1H)
CALL SETRECT( list1Rect,70,80,215+15,80+(USR FONTHEIGHT*10) )
gList1H = FN 
NEWCONTROL(wndPtr,list1Rect,"",_true,500,0,0,_kControlListBoxProc,65536*12)
LONG IF gList1H <> 0
err = FN GETCONTROLDATA(gList1H,0,_"lhan",sizeof(gList1H),@gList1H,@actualSize)
LSETDRAWINGMODE(_zTrue,gList1H)
SETPT(cell,0,0)
FOR x = 1 to 52
err = FN LADDROW(1,x,gList1H)
cell.v% = gList1H..dataBounds.bottom% - 1
tmpStr = c.countryStr(x)'tmpStr = STR#(128,x)
LSETCELL(@tmpStr+1,len(tmpStr),cell,gList1H)
NEXT
END IF
CALL SETRECT( list2Rect,250,80,395+15,80+(USR FONTHEIGHT*10) )
gList2H = FN 
NEWCONTROL(wndPtr,list2Rect,"",_true,500,0,0,_kControlListBoxProc,65536*13)
LONG IF gList2H <> 0
err = FN GETCONTROLDATA(gList2H,0,_"lhan",sizeof(gList2H),@gList2H,@actualSize)
LSETDRAWINGMODE(_zTrue,gList2H)
SETPT(cell,0,0)
FOR x = 1 to 52
err = FN LADDROW(1,x,gList2H)
cell.v% = gList2H..dataBounds.bottom% - 1
tmpStr = c.countryStr(x)'tmpStr = STR#(128,x)
LSETCELL(@tmpStr+1,LEN(tmpStr),cell,gList2H)
NEXT
END IF
EDIT FIELD _labelOne,"Enter units of currency you want to convert:",( 
60,12 )-( 230,57 ),_statNoFramed,_rightJust
EDIT FIELD _labelTwo,"Convert this type...",( 70,60 )-( 230,80 
),_statNoFramed,_leftJust
EDIT FIELD _labelThree,"...into this type.",( 250,60 )-( 395,80 
),_statNoFramed,_leftJust
BUTTON 1,1,"Quit",(425,325)-(475,345),_shadow
BUTTON 2,1,"Convert",(330,325)-(410,345),_push
EDIT FIELD 2
WINDOW 1
END FN

LOCAL FN ShowSelection( listH& )
DIM theCell   AS POINT
DIM cellFound AS INTEGER
CALL SETPT( theCell,0,0 )
cellFound = FN LGETSELECT( _true,#@theCell,listH& )
LONG IF cellFound
CALL LSETSELECT( _true,theCell,listH& )
END IF
END FN = theCell.v%

LOCAL FN clearFields
EDIT$(_responseOne) = ""
EDIT$(_responseTwo) = ""
END FN

LOCAL FN testStrings( inputStr$, textColor% )
DIM i AS INTEGER
DIM AS STR255 ef1Str, ef2Str
ef1Str = "Commands passed from "
ef2Str = "... will go in these edit fields."
COLOR = textColor%
EDIT$(_responseOne) = ef1Str + inputStr$ + " ..."
EDIT$(_responseTwo) = ef2Str
COLOR = _zBlack
EDIT$(_mainEntryField) = "1"
END FN

LOCAL FN doStrings( list%, rowNumber% )
DIM typeStr    AS STR255
DIM countryStr AS STR255
LONG IF rowNumber% = 0
EDIT$(_responseOne) = "Please select a country from List " + STR$( list% )
EDIT$(_responseTwo) = ""
XELSE
typeStr    = c.typeStr( rowNumber% )
countryStr = c.countryStr( rowNumber% )
DEF LCASE(typeStr)
EDIT$(_responseOne) = "You have clicked on List " + STR$( list% ) + " 
Item " + STR$( rowNumber% )
EDIT$(_responseTwo) = "In " + countryStr + " the currency is " + typeStr + "."
END IF
END FN

LOCAL FN focusList( BOOLEAN )
DIM err       AS SHORT
DIM list1Rect AS RECT
DIM list2Rect AS RECT
CALL SETRECT( list1Rect,70,80,215+15,80+(USR FONTHEIGHT*10) )
CALL SETRECT( list2Rect,250,80,395+15,80+(USR FONTHEIGHT*10) )
LONG IF BOOLEAN = _zTrue
err = FN DrawThemeListBoxFrame(list1Rect, _kThemeStateActive)
err = FN DrawThemeFocusRect(list1Rect,_true)
err = FN DrawThemeFocusRect(list2Rect,_false)
XELSE
err = FN DrawThemeListBoxFrame(list2Rect, _kThemeStateActive)
err = FN DrawThemeFocusRect(list2Rect,_true)
err = FN DrawThemeFocusRect(list1Rect,_false)
END IF
END FN

LOCAL FN doCalc( unitNumber% )
DIM unitStr AS STR255
unitStr = STR$( unitNumber% )
EDIT$(_mainEntryField)="1"
SETSELECT 0,255
FN clearFields
COLOR = _zGreen
EDIT$(_responseOne) = "The number of units you have input is:"
COLOR = _zBlack
EDIT$(_responseTwo) = unitStr
END FN

LOCAL FN doMenu
DIM AS INTEGER menuID, itemID
menuID = MENU( _menuID )
itemID = MENU( _itemID )
SELECT CASE( menuID )
CASE _applemenu
SELECT( itemID )
CASE 1
FN aboutWindow
MENU
DO
UNTIL FN BUTTON
WINDOW CLOSE 2
FLUSHEVENTS
END SELECT
CASE 1
SELECT( itemID )
CASE 1
FN clearFields
CASE 3
FN doQuit
END SELECT
END SELECT
MENU
END FN

LOCAL FN doEdit
DIM efNum       AS INTEGER
DIM keyStr      AS STR255
DIM inNowStr    AS STR255
DIM inNowNumber AS LONG
efNum = WINDOW( _EFnum )
SELECT CASE( efNum )
CASE = _mainEntryField
keyStr = TEKEY$
SELECT WINDOW( _EFclass ) / 4
LONG IF ASC( keyStr ) => _"0" AND  ASC( keyStr ) <= _"9"
TEKEY$ = keyStr
XELSE
EDIT$(_responseOne) = "Sorry, this field accepts only numbers not letters..."
EDIT$(_responseTwo) = "Please try again."
END IF
END SELECT
inNowStr = EDIT$( efNum )
LONG IF len( inNowStr ) > 8
inNowNumber = VAL(inNowStr)
FN doCalc( inNowNumber )
END IF
END SELECT
EDIT FIELD _mainEntryField
END FN

LOCAL FN doDialog
DIM AS INTEGER evnt, id
DIM @rowNumber AS INTEGER
DIM wndPtr     AS POINTER
DIM inputStr   AS STR255
evnt = DIALOG( 0 )
id = DIALOG( evnt )
SELECT( evnt )
CASE _btnClick
SELECT CASE( id )
CASE 1
END
CASE 2
inputStr$ = "the 'Convert' button"
FN testStrings( inputStr$, _zRed )
CASE 12
gFocus = _zTrue
FN focusList( gFocus )
rowNumber  = FN getRowNumber( gList1H )
FN doStrings( 1, rowNumber )
LONG IF FN TICKCOUNT < gTick+30
inputStr = "double clicks"
FN testStrings( inputStr, _zBlue )
END IF
gTick = FN TICKCOUNT
CASE 13
gFocus = _false
FN focusList( gFocus )
rowNumber  = FN getRowNumber( gList2H )
FN doStrings( 2, rowNumber )
LONG IF FN TICKCOUNT < gTick+30
inputStr$ = "double clicks"
FN testStrings( inputStr$, _zBlue )
END IF
gTick = FN TICKCOUNT
END SELECT
CASE _wndClose
SELECT CASE( id )
CASE 1
LONG IF gList1H <> _nil
CALL LDISPOSE(gList1H)
gList1H = _nil
END IF
LONG IF gList2H <> _nil
CALL LDISPOSE(gList2H)
gList2H = _nil
END IF
END
END SELECT
CASE _efReturn
SELECT CASE( id )
CASE _mainEntryField
inputStr$ = EDIT$( _mainEntryField )
FN doCalc( VAL(inputStr$) )
END SELECT
CASE _wndClick
SELECT CASE( id )
CASE 1
CASE 2
WINDOW CLOSE 2
END SELECT
CASE _wndRefresh
SELECT( id )
CASE 1
FN focusList(gFocus)
BUTTON 1
CASE 2
END SELECT
CASE ELSE
END SELECT
END FN

ON MENU   FN doMenu
ON EDIT   FN doEdit
ON DIALOG FN doDialog
ON BREAK  FN doQuit

FN buildMenus
FN splashScreen
FN buildMainWindow

DO
HANDLEEVENTS
UNTIL gQuit
END

'-------------- END FB^3 CODE RESOURCE FOLLOWS -------------


(This file must be converted with BinHex 4.0)
:&Q0eFR*PEQ0j3fpZGQ9bG'9b,R*cFQ-!FR0bBe*6483"!*!(!8JfG3#3"!%!N!-
"&J#3!aB!N!-b'NM(3H`"+N2X!23cX(S!HJ!`"e*(YNGZk%)X!5KJ'%J@Bh9bFQ9
ZBhP$EfjfCA*dCA)ZFR0bBb"XDA0d)-3JD3!!FR0bBe*6483"!*!$!3%!N!U!!*!
(X-2blJ#3"J&)6dcZ')Mrd%jH6R8!!%j@!!")ja!BF!!S3(B")JaQ'#m$5(J"ANk
j!!!"bPL2*KmS3#!-CJ*f!%S$CaS[$%kj!!!&K#K!+,Rrr1Yd)$Rrr1Yd@%pJ!R!
!*Na`!"!Z!"X[!#mZ!"3[,J!3,bi!$#mZ!!J[#dkj!!!&c#!,6qm!'%cZ'!#3!a)
!N!8"!*!%!3#3"3%!N!-"!*!$!4B!N!-@!*!$-J,DfRJrL!#3!a`!-J!!E'4PF`#
3!`S"p2rr!*!)B9):