[futurebasic] RE: [FB] Platinum look

Message: < previous - next > : Reply : Subscribe : Cleanse
Home   : September 1999 : Group Archive : Group : All Groups

From: Ken Shmidheiser <kshmidheiser@...>
Date: Mon, 13 Sep 1999 04:26:53 -0400
Sylvain and fellow FBers,

The following shell is strictly a work in progress undertaken as a 
programming exercise using some Appearance Manager (v1.4) controls 
from Mac OS 8.

One problem is the Expander Arrow control which opens the printable 
ribbon window. It is on a white background, and I do not know how to 
change it to the window color. Instead, I have disguised it here with 
some lines, but would like to know how handle it properly.

p.s. Any hints for adding the math functions to make this thing 
actually work will be appreciated! I have been experimenting with 
arrays, DATA structures, linked lists, etc. I readily acknowledge 
that this code is very loose and can stand a good optimizing (or 
maybe a good trashing!) I am in severe brain drain now and can no 
longer see the forest for the trees. How do I put two lines of code 
in an Edit Field and add them?!? For that matter, how do I put one 
line of numbers in a EF and call it back later? How do I use an Enter 
key? What is 1+1?

I'mmm mmmeeelllltttingggg...

Please adjust code for e-mail line breaks:

'----------------- Begin ---------------------

'This calculator/keypad shell is coded
'in FutureBASIC II by Ken Shmidheiser,
'September 1999. It uses Appearance
'Manager compliant controls for Mac OS 8
'or above.

'----------------- Constants -----------------
_numField = 4
_alphaField = 8

_gZero = 48                                       'ASCII key 
equivalents for keypad
_gOne = 49
_gTwo = 50
_gThree = 51
_gFour = 52
_gFive = 53
_gSix = 54
_gSeven = 55
_gEight = 56
_gNine = 57

_gMultiply = 42
_gPlus = 43
_gMinus = 45
_gDivide = 47

_gDecimal = 46

_gReturn = 13
_gEnter = 3
_gClear = 27

_gEquals = 61

_gExpandArrows = 65

'----------------- Globals -------------------
DIM gProgramEnds
DIM gKeyPress%
DIM gBtnClick%
END GLOBALS

'----------------- Functions -----------------
CLEAR LOCAL
DIM rect;8
LOCAL FN mainRefresh                              'This function adds 
refreshable background color
 
   CALL SETRECT(rect, 0, 0, 460, 300)              'Background color 
rectangle same size as main window
   PEN  0, 0,1, 8, 0
   LONG COLOR -13000,-14660,-14660                 'Mid-gray
   CALL PAINTRECT(rect)
   PEN  0, 0,1, 8, 0
   LONG COLOR  0, 0, 0
   CALL FRAMERECT(rect)
 
   CALL PENNORMAL:COLOR=_zBlack
 
   PLOT 212,41 TO 212,55                           'Left
   PEN 1,1
   PLOT 212,41 TO 225,41                           'Top
   PLOT 225,41 TO 225,55                           'Right
   PLOT 212,55 TO 225,55                           'Bottom
 
END FN

CLEAR LOCAL
DIM rect.8
LOCAL FN mainBuild
 
   WINDOW # -1,"Ken's Calculator",( 0, 0)-( 246, 300),_docNoGrow, 1
 
   APPLE MENU "(Ken's Demo Calculator"
 
   MENU 1,0, _enable, "File"
   MENU 1,1, _enable, "Quit /Q"
 
   EDIT MENU 2
 
   EDIT = 6
   TEXT _geneva,13,0,0:COLOR=_zBlack
   EDIT FIELD -1,"",( 45, 40)-( 200, 60),_framed, _rightJust + 
_numField'Number Fields are 4, alpha fields are 8
   EDIT FIELD 2,"",( 45, 13)-( 200, 28),_framedNoCR, _rightJust + 
_numField'Number Fields are 4, alpha fields are 8
 
   EDIT FIELD -4,"",(260,40)-(410,275),_framed, _rightJust'+ 
_numField'Number Fields are 4, alpha fields are 8
   SCROLL BUTTON -4,1,1,1,20,(415,34)-(431,281),_scrollOther
 
   TEXT _sysFont,12,0,0:COLOR=_zBlack
   BUTTON _gClear, 1,"Clear",( 38, 70)-( 80, 112),35
   BUTTON _gEquals, 1,"=",( 80, 70)-( 122, 112),35
   BUTTON _gDivide, 1,"/",( 122, 70)-( 166, 112),35
   BUTTON _gMultiply, 1,"*",( 166, 70)-( 208, 112),35
 
   BUTTON _gSeven, 1,"7",( 38, 112)-( 80, 154),35
   BUTTON _gEight, 1,"8",( 80, 112)-( 122, 154),35
   BUTTON _gNine, 1,"9",( 122, 112)-( 166, 154),35
   BUTTON _gMinus, 1,"-",( 166, 112)-( 208, 154),35
 
   BUTTON _gFour, 1,"4",( 38, 154)-( 80, 196),35
   BUTTON _gFive, 1,"5",( 80, 154)-( 122, 196),35
   BUTTON _gSix, 1,"6",( 122, 154)-( 166, 196),35
   BUTTON _gPlus, 1,"+",( 166, 154)-( 208, 196),35
 
   BUTTON _gOne, 1,"1",( 38, 196)-( 80, 238),35
   BUTTON _gTwo, 1,"2",( 80, 196)-( 122, 238),35
   BUTTON _gThree, 1,"3",( 122, 196)-( 166, 238),35
 
   BUTTON _gZero, 1,"0",( 38, 238)-( 122, 280),35
   BUTTON _gDecimal, 1,".",( 122, 238)-( 166, 280),35
 
   BUTTON _gEnter, 1,"Enter",( 166, 196)-( 208, 280),35
 
   BUTTON _gExpandArrows, _activeBtn, "", (213,43)-(225,55), 
65'Appearance compliant expander arrows (64 + 1 = 65)
 
   EDIT FIELD  1
 
   WINDOW  1
 
END FN


CLEAR LOCAL
DIM rect.8
LOCAL FN twoBuild
 
   WINDOW # -1,"Ken's Calculator",( 0, 0)-( 460, 300),_docNoGrow, 1
 
   APPLE MENU "(Ken's Demo Calculator"
 
   MENU 1,0, _enable, "File"
   MENU 1,1, _enable, "Quit /Q"
 
   EDIT MENU 2
 
   EDIT = 6
   TEXT _geneva,13,0,0:COLOR=_zBlack
   EDIT FIELD -1,"",( 45, 40)-( 200, 60),_framed, _rightJust + 
_numField'Number Fields are 4, alpha fields are 8
 
   EDIT FIELD 2,"",( 45, 13)-( 200, 28),_framedNoCR, _rightJust + 
_numField'Number Fields are 4, alpha fields are 8
 
 
   EDIT FIELD -4,"",(260,40)-(410,275),_framed, _rightJust'+ 
_numField'Number Fields are 4, alpha fields are 8
   SCROLL BUTTON -4,1,1,1,20,(415,34)-(431,281),_scrollOther
 
   TEXT _sysFont,12,0,0:COLOR=_zBlack
   BUTTON _gClear, 1,"Clear",( 38, 70)-( 80, 112),35
   BUTTON _gEquals, 1,"=",( 80, 70)-( 122, 112),35
   BUTTON _gDivide, 1,"/",( 122, 70)-( 166, 112),35
   BUTTON _gMultiply, 1,"*",( 166, 70)-( 208, 112),35
 
   BUTTON _gSeven, 1,"7",( 38, 112)-( 80, 154),35
   BUTTON _gEight, 1,"8",( 80, 112)-( 122, 154),35
   BUTTON _gNine, 1,"9",( 122, 112)-( 166, 154),35
   BUTTON _gMinus, 1,"-",( 166, 112)-( 208, 154),35
 
   BUTTON _gFour, 1,"4",( 38, 154)-( 80, 196),35
   BUTTON _gFive, 1,"5",( 80, 154)-( 122, 196),35
   BUTTON _gSix, 1,"6",( 122, 154)-( 166, 196),35
   BUTTON _gPlus, 1,"+",( 166, 154)-( 208, 196),35
 
   BUTTON _gOne, 1,"1",( 38, 196)-( 80, 238),35
   BUTTON _gTwo, 1,"2",( 80, 196)-( 122, 238),35
   BUTTON _gThree, 1,"3",( 122, 196)-( 166, 238),35
 
   BUTTON _gZero, 1,"0",( 38, 238)-( 122, 280),35
   BUTTON _gDecimal, 1,".",( 122, 238)-( 166, 280),35
 
   BUTTON _gEnter, 1,"Enter",( 166, 196)-( 208, 280),35
 
   BUTTON _gExpandArrows, _markedBtn, "", (213,43)-(225,55), 
65'Appearance compliant expander arrows (64 + 1 = 65)
 
   EDIT FIELD  1
 
   WINDOW  1
 
END FN


LOCAL FN doMath
 
   EDIT$(2) = "Math function goes here."
   EDIT$(4) = "Math function goes here."
 
END FN


LOCAL FN errorWarning
   BEEP
END FN


LOCAL FN checkKeys
   EFnum = WINDOW(_EFnum)                          'Figures out what 
window it's looking at
   key$ = TEKEY$                                   'Once it has the 
window, grabs keystrokes for massaging
 
   SELECT WINDOW(_EFclass)/4                       'Check for the 
right kind of window
 
       LONG IF ASC(key$) => ASC("0") AND ASC(key$) <=ASC("9") OR 
ASC(key$) = 46'Numbers and decimal point
         TEKEY$ = key$
       XELSE
         'FN errorWarning
       END IF
 
       gKeyPress% = ASC(key$)
 
       LONG IF ASC(STR$(gKeyPress%))               'Push button 
feedback for number keys
         BUTTON gKeyPress%, 2 : DELAY 50 : BUTTON gKeyPress%, 1
       XELSE
         FN errorWarning
       END IF
 
       LONG IF ASC(key$) = _gPlus
 
         'plus$ = EDIT$(1) + CHR$(_gPlus) + CHR$(13) + CHR$(13) + "OK"
         'TEKEY$ = plus$
 
         EDIT$(2) = "Plus key pressed"
         EDIT$(4) = "Plus key pressed"
         DELAY 800
         FN doMath
       XELSE
       END IF
 
       LONG IF ASC(key$) = _gMinus
         EDIT$(2) = "Minus key pressed"
         EDIT$(4) = "Minus key pressed"
         DELAY 800
         FN doMath
 
       XELSE
       END IF
 
       LONG IF ASC(key$) = _gMultiply
         EDIT$(2) = "Multiply key pressed"
         EDIT$(4) = "Multiply key pressed"
         DELAY 800
         FN doMath
 
       XELSE
       END IF
 
       LONG IF ASC(key$) = _gDivide
         EDIT$(2) = "Divide key pressed"
         EDIT$(4) = "Divide key pressed"
         DELAY 800
         FN doMath
 
       XELSE
       END IF
 
       LONG IF ASC(key$) = _gEquals
         EDIT$(2) = "Equals key pressed"
         EDIT$(4) = "Equals key pressed"
         DELAY 800
         FN doMath
 
       XELSE
       END IF
 
       LONG IF ASC(key$) = _gEnter
         EDIT$(2) = "Enter key pressed"
         EDIT$(4) = "Enter key pressed"
         DELAY 800
         FN doMath
 
       XELSE
       END IF
 
   END SELECT
 
END FN


LOCAL FN doDialog
   evnt = DIALOG(0)
   id = DIALOG(evnt)
 
   key$ = TEKEY$
 
   SELECT CASE evnt
 
     CASE _btnClick
 
       SELECT CASE id
         CASE _gZero
           TEKEY$ = "0"
         CASE _gOne
           TEKEY$ = "1"
         CASE _gTwo
           TEKEY$ = "2"
         CASE _gThree
           TEKEY$ = "3"
         CASE _gFour
           TEKEY$ = "4"
         CASE _gFive
           TEKEY$ = "5"
         CASE _gSix
           TEKEY$ = "6"
         CASE _gSeven
           TEKEY$ = "7"
         CASE _gEight
           TEKEY$ = "8"
         CASE _gNine
           TEKEY$ = "9"
         CASE _gDecimal
           TEKEY$ = "."
 
         CASE _gClear
           EDIT$(1) = ""
           EDIT$(2) = ""
           EDIT$(4) = ""                           'Clears the input field
           BUTTON _gClear, 2 : DELAY 50 : BUTTON _gClear, 1'Highlights 
the Clear button
 
         CASE _gPlus
           EDIT$(2) = "Plus button clicked"
           EDIT$(4) = "Plus button clicked"
           DELAY 800
           FN doMath
 
         CASE _gMinus
           EDIT$(2) = "Minus button clicked"
           EDIT$(4) = "Minus button clicked"
           DELAY 800
           FN doMath
 
         CASE _gMultiply
           EDIT$(2) = "Multiply button clicked"
           EDIT$(4) = "Multiply button clicked"
           DELAY 800
           FN doMath
 
         CASE _gDivide
           EDIT$(2) = "Divide button clicked"
           EDIT$(4) = "Divide button clicked"
           DELAY 800
           FN doMath
 
         CASE _gEquals
           EDIT$(2) = "Equals button clicked"
           EDIT$(4) = "Equals button clicked"
           DELAY 800
           FN doMath
 
         CASE _gEnter
           EDIT$(2) = "Enter _gEnter button clicked"
           EDIT$(4) = "Enter _gEnter button clicked"
           DELAY 800
           FN doMath
           BUTTON _gEnter, 2 : DELAY 50 : BUTTON _gEnter, 1'Highlights 
the Enter button
 
         CASE _gExpandArrows
           SELECT CASE BUTTON(_gExpandArrows)
             CASE _activeBtn
               BUTTON _gExpandArrows, _markedBtn
               WINDOW CLOSE 1
               FN twoBuild
             CASE _markedBtn
               BUTTON _gExpandArrows, _activeBtn
               WINDOW CLOSE 1
               FN mainBuild
           END SELECT
       END SELECT
 
     CASE _efReturn
       SELECT CASE BUTTON(_efReturn)
         CASE 1
           EDIT$(2) = "Enter _efReturn button pushed"
           EDIT$(4) = "Enter _efReturn button pushed"
           DELAY 800
           FN doMath
           BUTTON _gEnter, 2 : DELAY 50 : BUTTON _gEnter, 1'Highlights 
the Enter button
         CASE ELSE
       END SELECT
 
     CASE _efClear
       EDIT$(1) = ""
       EDIT$(2) = ""                               'Clears the input field
       EDIT$(4) = ""
       BUTTON _gClear, 2 : DELAY 50 : BUTTON _gClear, 1'Highlights the 
Clear button
 
     CASE _wndClose                                'When calculator 
window closes, program ends
       gProgramEnds = _true
 
     CASE _wndRefresh                              'In this app calls 
the mid-gray background color
       FN mainRefresh
 
   END SELECT
 
END FN


LOCAL FN doMenu
   menuID = MENU(_menuID)
   itemID = MENU(_itemID)
 
   SELECT CASE
     CASE _menuID = 1 AND _itemID = 1
       gProgramEnds = _true
     CASE ELSE
   END SELECT
 
END FN


'----------------- Main -----------------
WINDOW OFF
COORDINATE WINDOW


ON EDIT FN checkKeys
ON DIALOG FN doDialog
ON MENU FN doMenu


FN mainBuild


DO
   HANDLEEVENTS
UNTIL gProgramEnds


'----------------- End ---------------------