\ prefdialog

needs case
needs events
needs forms
needs skins
needs pref

Pref: temppref

: setprefs  ( -- ) 
    temppref pref! ;

: do-pref-buttons  ( -- flag )
    event >abs itemid
    case
    1100 of         \ ELF II skin
        0 temppref pref.skin !  false 
    endof
    1101 of         \ Classic skin
        1 temppref pref.skin !  false
    endof
    1200 of         \ 256 byte memory
        0 temppref pref.mem !  false
    endof
    1201 of         \ 4K memory
        1 temppref pref.mem !  false
    endof
    1202 of         \ 16k memory
        2 temppref pref.mem !  false
    endof
    1300 of         \ graffiti inputs hex
        0 temppref pref.graffiti !  false
    endof
    1301 of         \ graffiti inputs ascii
        1 temppref pref.graffiti !  false
    endof
    \ OK pressed
    2000 of    setprefs  true   endof
    \  Cancel pressed
    2001 of    true     endof
    \ otherwise
    false swap
    endcase ;

\ Process events for Prefs dialog
\ and return TRUE when it's time
\ for the dialog to close.
: do-pref-event  ( ekey -- flag )
    ctlSelectEvent = if
        do-pref-buttons
    else   false    then ;    

: setbtn  ( flag buttonID -- )
    GetObjectIndex 
    ( flag btnIndex )
    FrmGetActiveForm
    ( flag buttonIndex &FormPtr. )    
    FrmSetControlValue ;

\ ELF II button is 1100, classic is 1101
: init-skinchoice  ( -- )
     pref pref.skin @ 1 and   1100 + 
    true swap setbtn ;
        
: init-memchoice  ( -- )
    pref pref.mem @ 3 and  2 min
    1200 +
    true swap setbtn ;

: init-graffitichoice  ( -- )
    pref pref.graffiti @  1 and
    1300 +
    true swap setbtn ;

: init-prefsdialog  ( -- )
    pref temppref  
    [ sizeof Pref: ] literal   move    ( )
    init-skinchoice
    init-memchoice 
    init-graffitichoice ;

: prefsdialog  ( -- )
    pref pref.skin @       ( skin-setting )
    2400 PopupForm
    init-prefsdialog
    begin
        ekey do-pref-event
    until                              
    current-form-id @
    FrmReturnToForm
    \ Now init skin if it changed.
    ( old-skin-setting )
    pref pref.skin @ <> if
        init-skin
    then  ;

