mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2024-12-27 09:58:45 +01:00
Many many changes improving newgame dialog by using a three-way rather
than two-way enabled state, but mostly about getting focus ring working for five-way-equipped devices. Add fnav resources to the two dialogs with gadgets, and code so the gadgets are included in the focus rotation. The move to three-way means that disabled controls can visible while excluded from the rotation. There's cleanup and polish to be done still, and five-way navigation doesn't work for the main form yet. No changes to bluetooth at all.
This commit is contained in:
parent
fb23dc11a7
commit
648b986376
11 changed files with 455 additions and 465 deletions
|
@ -1,5 +1,6 @@
|
|||
# -*- mode: Makefile; compile-command: "make ARCH=68K_ONLY MEMDEBUG=TRUE"; -*-
|
||||
# Copyright 2002 by Eric House (xwords@eehouse.org). All rights reserved.
|
||||
# Copyright 2002-2006 by Eric House (xwords@eehouse.org). All rights
|
||||
# reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -163,16 +164,18 @@ BITMAP_RSRCS = \
|
|||
# INCLUDES += -I/usr/local/share/palmdev/sdk-5r3/Extensions/ExpansionMgr
|
||||
INCLUDES += -I/usr/local/share/palmdev/sdk-5r3/include/Extensions/Bluetooth
|
||||
|
||||
# HS_DUO_SUPPORT = 1
|
||||
XWFEATURE_FIVEWAY = -DXWFEATURE_FIVEWAY
|
||||
|
||||
ifneq (x$(HS_DUO_SUPPORT)x, xx)
|
||||
INCLUDES += -I/usr/local/share/palmdev/duoIncs
|
||||
INCLUDES += -I/usr/local/share/palmdev/duoIncs/68K
|
||||
INCLUDES += -I/usr/local/share/palmdev/duoIncs/68K/System
|
||||
INCLUDES += -I/usr/local/share/palmdev/duoIncs/Common/System
|
||||
ifneq (x$(XWFEATURE_FIVEWAY)x, xx)
|
||||
INCLUDES += -I/usr/local/share/palmdev/Handspring5
|
||||
INCLUDES += -I/usr/local/share/palmdev/Handspring5/68K
|
||||
# INCLUDES += -I/usr/local/share/palmdev/duoIncs
|
||||
# INCLUDES += -I/usr/local/share/palmdev/duoIncs/68K
|
||||
# INCLUDES += -I/usr/local/share/palmdev/duoIncs/68K/System
|
||||
# INCLUDES += -I/usr/local/share/palmdev/duoIncs/Common/System
|
||||
|
||||
MYDEFS_68K += -DHS_DUO_SUPPORT
|
||||
MYDEFS_ARM += -DHS_DUO_SUPPORT
|
||||
MYDEFS_68K += $(XWFEATURE_FIVEWAY)
|
||||
MYDEFS_ARM += $(XWFEATURE_FIVEWAY)
|
||||
|
||||
FNAVS = ./fnav03e9.bin
|
||||
endif
|
||||
|
@ -226,10 +229,8 @@ CFLAGS += -Wall -DAPPID=\'$(APPID)\' $(MYDEFS_68K) $(INCLUDES)
|
|||
|
||||
$(TARGET): $(PLATFORM)/objs.prc $(PLATFORM)/res.prc
|
||||
$(PAR) -c -a 'resource|backup' -v 4 $@ $(NAME) $(TYPE) $(APPID) $^
|
||||
ifdef XW_UPLOAD_CMD
|
||||
zip $(TARGET).zip $(TARGET)
|
||||
$(XW_UPLOAD_CMD) $(TARGET)
|
||||
$(XW_UPLOAD_CMD) $(TARGET).zip
|
||||
ifdef XW_UPLOAD_SCRIPT
|
||||
$(XW_UPLOAD_SCRIPT) $@
|
||||
endif
|
||||
|
||||
solo:
|
||||
|
|
|
@ -95,11 +95,11 @@ NOFRAME
|
|||
MENUID XW_MAIN_MENU_ID
|
||||
BEGIN
|
||||
BUTTON "" XW_MAIN_FLIP_BUTTON_ID
|
||||
AT (PALM_FLIP_LEFT PALM_BOARD_TOP FLIP_BUTTON_WIDTH
|
||||
AT (PALM_FLIP_LEFT PALM_BOARD_TOP FLIP_BUTTON_WIDTH
|
||||
FLIP_BUTTON_HEIGHT) NOFRAME
|
||||
BUTTON "" XW_MAIN_VALUE_BUTTON_ID
|
||||
AT (PALM_FLIP_LEFT PREVBOTTOM+2
|
||||
FLIP_BUTTON_WIDTH FLIP_BUTTON_HEIGHT+2) NOFRAME
|
||||
AT (PALM_FLIP_LEFT PREVBOTTOM+2
|
||||
FLIP_BUTTON_WIDTH FLIP_BUTTON_HEIGHT+2) NOFRAME
|
||||
BUTTON "" XW_MAIN_HINT_BUTTON_ID
|
||||
AT (PALM_FLIP_LEFT PREVBOTTOM+2 FLIP_BUTTON_WIDTH
|
||||
FLIP_BUTTON_HEIGHT+3) NOFRAME
|
||||
|
@ -129,7 +129,7 @@ BEGIN
|
|||
GADGET GREMLIN_BOARD_GADGET_IDAUTOID AT ( 0 5 152 135 )
|
||||
GADGET GREMLIN_TRAY_GADGET_IDAUTOID AT ( 0 140 145 20 )
|
||||
#endif
|
||||
END
|
||||
END /* XW_MAIN_FORM */
|
||||
|
||||
STRING ID 1000 "/palm/programs/Crosswords/"
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@ typedef struct ConnsDlgState {
|
|||
ListPtr connTypesList;
|
||||
XP_U16 serverRole;
|
||||
XP_Bool isNewGame;
|
||||
CommsConnType conType;
|
||||
CommsAddrRec* addr;
|
||||
XP_BtAddr btAddr; /* since there's no field, save it here */
|
||||
XP_BtAddrStr tmp;
|
||||
|
@ -51,11 +52,12 @@ static void
|
|||
ctlsFromState( PalmAppGlobals* XP_UNUSED_BT(globals), ConnsDlgState* state )
|
||||
{
|
||||
CommsAddrRec* addr = state->addr;
|
||||
XP_Bool isNewGame = state->isNewGame;
|
||||
state->conType = addr->conType;
|
||||
|
||||
if ( 0 ) {
|
||||
#ifdef XWFEATURE_RELAY
|
||||
} else if ( addr->conType == COMMS_CONN_RELAY ) {
|
||||
XP_Bool isNewGame = state->isNewGame;
|
||||
XP_UCHAR buf[16];
|
||||
setFieldStr( XW_CONNS_RELAY_FIELD_ID, addr->u.ip_relay.hostName );
|
||||
setFieldEditable( XW_CONNS_RELAY_FIELD_ID, isNewGame );
|
||||
|
@ -77,16 +79,18 @@ ctlsFromState( PalmAppGlobals* XP_UNUSED_BT(globals), ConnsDlgState* state )
|
|||
} else {
|
||||
CtlSetLabel( ctrl, addr->u.bt.hostName );
|
||||
}
|
||||
CtlSetEnabled( ctrl, isNewGame );
|
||||
#endif
|
||||
}
|
||||
} /* ctlsFromState */
|
||||
|
||||
static XP_Bool
|
||||
static void
|
||||
stateFromCtls( ConnsDlgState* state )
|
||||
{
|
||||
XP_Bool ok = XP_TRUE;
|
||||
CommsAddrRec* addr = state->addr;
|
||||
|
||||
addr->conType = state->conType;
|
||||
|
||||
if ( 0 ) {
|
||||
#ifdef XWFEATURE_RELAY
|
||||
} else if ( addr->conType == COMMS_CONN_RELAY ) {
|
||||
|
@ -111,8 +115,6 @@ stateFromCtls( ConnsDlgState* state )
|
|||
LOG_HEX( &addr->u.bt.btAddr, sizeof(addr->u.bt.btAddr), __FUNCTION__ );
|
||||
#endif
|
||||
}
|
||||
|
||||
return ok;
|
||||
} /* stateFromCtls */
|
||||
|
||||
static void
|
||||
|
@ -144,9 +146,9 @@ updateFormCtls( FormPtr form, ConnsDlgState* state )
|
|||
const XP_U16* on;
|
||||
XP_U16 i;
|
||||
|
||||
if ( state->addr->conType == COMMS_CONN_RELAY ) {
|
||||
if ( state->conType == COMMS_CONN_RELAY ) {
|
||||
on = relayCtls;
|
||||
} else if ( state->addr->conType == COMMS_CONN_BT
|
||||
} else if ( state->conType == COMMS_CONN_BT
|
||||
#ifdef XWFEATURE_BLUETOOTH
|
||||
&& state->serverRole == SERVER_ISCLIENT
|
||||
#endif
|
||||
|
@ -249,15 +251,15 @@ ConnsFormHandleEvent( EventPtr event )
|
|||
XP_MEMCPY( &state->btAddr, &state->addr->u.bt.btAddr,
|
||||
sizeof(state->btAddr) );
|
||||
|
||||
ctlsFromState( globals, state );
|
||||
|
||||
/* setup connection popup */
|
||||
state->connTypesList = getActiveObjectPtr( XW_CONNS_TYPE_LIST_ID );
|
||||
XP_ASSERT( state->addr->conType == COMMS_CONN_IR
|
||||
|| state->addr->conType == COMMS_CONN_RELAY
|
||||
|| state->addr->conType == COMMS_CONN_BT );
|
||||
XP_ASSERT( state->conType == COMMS_CONN_IR
|
||||
|| state->conType == COMMS_CONN_RELAY
|
||||
|| state->conType == COMMS_CONN_BT );
|
||||
setSelectorFromList( XW_CONNS_TYPE_TRIGGER_ID, state->connTypesList,
|
||||
conTypeToSel(state->addr->conType) );
|
||||
|
||||
ctlsFromState( globals, state );
|
||||
conTypeToSel(state->conType) );
|
||||
|
||||
updateFormCtls( form, state );
|
||||
|
||||
|
@ -272,7 +274,9 @@ ConnsFormHandleEvent( EventPtr event )
|
|||
|
||||
#ifdef XWFEATURE_BLUETOOTH
|
||||
case XW_CONNS_BT_HOSTTRIGGER_ID:
|
||||
browseForDeviceName( globals, state );
|
||||
if ( state->isNewGame ) {
|
||||
browseForDeviceName( globals, state );
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
@ -282,7 +286,7 @@ ConnsFormHandleEvent( EventPtr event )
|
|||
if ( chosen >= 0 ) {
|
||||
setSelectorFromList( XW_CONNS_TYPE_TRIGGER_ID,
|
||||
state->connTypesList, chosen );
|
||||
state->addr->conType = selToConType( chosen );
|
||||
state->conType = selToConType( chosen );
|
||||
updateFormCtls( form, state );
|
||||
}
|
||||
}
|
||||
|
@ -291,15 +295,12 @@ ConnsFormHandleEvent( EventPtr event )
|
|||
case XW_CONNS_OK_BUTTON_ID:
|
||||
if ( !state->isNewGame ) {
|
||||
/* do nothing; same as cancel */
|
||||
} else if ( !stateFromCtls( state ) ) {
|
||||
beep();
|
||||
break;
|
||||
} else {
|
||||
EventType eventToPost;
|
||||
eventToPost.eType = connsSettingChgEvent;
|
||||
EventType eventToPost = { .eType = connsSettingChgEvent };
|
||||
stateFromCtls( state );
|
||||
EvtAddEventToQueue( &eventToPost );
|
||||
}
|
||||
|
||||
/* FALLTHRU */
|
||||
case XW_CONNS_CANCEL_BUTTON_ID:
|
||||
cleanupExit( globals );
|
||||
break;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* -*-mode: c; fill-column: 78; -*- */
|
||||
/* -*-mode: c; fill-column: 78; compile-command: "cd ../ && make ARCH=68K_ONLY MEMDEBUG=TRUE"; -*- */
|
||||
/*****************************************************************************
|
||||
* Copyright 1999 - 2002 by Eric House (xwords@eehouse.org) and others. All rights reserved.
|
||||
* Copyright 1999 - 2006 by Eric House (xwords@eehouse.org) and others. All
|
||||
* rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -173,6 +174,18 @@ END
|
|||
PLAYER_ROBCHECK( num, offset ) \
|
||||
PLAYER_PASSFIELD( num, offset )
|
||||
|
||||
#define PLAYER_ROW_ID( num ) \
|
||||
ID XW_REMOTE_##num##_CHECKBOX_ID \
|
||||
ID XW_PLAYERNAME_##num##_FIELD_ID \
|
||||
ID XW_ROBOT_##num##_CHECKBOX_ID \
|
||||
ID XW_PLAYERPASSWD_##num##_TRIGGER_ID \
|
||||
|
||||
#define PLAYER_ROW_NAV( num ) \
|
||||
ROW XW_REMOTE_##num##_CHECKBOX_ID \
|
||||
ROW XW_PLAYERNAME_##num##_FIELD_ID \
|
||||
XW_ROBOT_##num##_CHECKBOX_ID \
|
||||
XW_PLAYERPASSWD_##num##_TRIGGER_ID \
|
||||
|
||||
//#define SERVER_GROUP_ID 2000
|
||||
#define SERVER_HEIGHT 12
|
||||
|
||||
|
@ -183,12 +196,12 @@ BEGIN
|
|||
|
||||
#ifndef XWFEATURE_STANDALONE_ONLY
|
||||
LABEL "Connect:" AUTOID AT (LEFTCOL SERVER_TOP)
|
||||
GADGET ID XW_SOLO_GADGET_ID AT (PREVRIGHT+2 SERVER_TOP 53 SERVER_HEIGHT)
|
||||
USABLE
|
||||
GADGET ID XW_SOLO_GADGET_ID
|
||||
AT (PREVRIGHT+2 SERVER_TOP 55 SERVER_HEIGHT) USABLE
|
||||
GADGET ID XW_SERVER_GADGET_ID
|
||||
AT (PREVRIGHT+1 SERVER_TOP 22 SERVER_HEIGHT) USABLE
|
||||
AT (PREVRIGHT+1 SERVER_TOP 24 SERVER_HEIGHT) USABLE
|
||||
GADGET ID XW_CLIENT_GADGET_ID
|
||||
AT (PREVRIGHT+1 SERVER_TOP 28 SERVER_HEIGHT) USABLE
|
||||
AT (PREVRIGHT+1 SERVER_TOP 30 SERVER_HEIGHT) USABLE
|
||||
LIST "Stand-alone" "Host" "Guest" XW_SERVERTYPES_LIST_ID
|
||||
AT (0 0 1 1) VISIBLEITEMS 3 NONUSABLE
|
||||
#endif
|
||||
|
@ -225,7 +238,51 @@ BEGIN
|
|||
|
||||
BUTTON "Ok" XW_OK_BUTTON_ID RIGHT@154 PREVTOP AUTO AUTO
|
||||
BUTTON "Cancel" XW_CANCEL_BUTTON_ID RIGHT@PREVLEFT-5 PREVTOP 30 AUTO
|
||||
END /* FORM XW_PLAYERINFO_FORM */
|
||||
END /* XW_NEWGAMES_FORM */
|
||||
|
||||
#ifdef XWFEATURE_FIVEWAY
|
||||
NAVIGATION ID XW_NEWGAMES_FORM
|
||||
INITIALSTATE kFrmNavHeaderFlagsObjectFocusStartState
|
||||
#if 0
|
||||
BEGIN
|
||||
ID XW_SOLO_GADGET_ID
|
||||
ID XW_SERVER_GADGET_ID
|
||||
ID XW_CLIENT_GADGET_ID
|
||||
|
||||
ID XW_NPLAYERS_SELECTOR_ID
|
||||
ID XW_GINFO_JUGGLE_ID
|
||||
ID XW_PREFS_BUTTON_ID
|
||||
|
||||
PLAYER_ROW_ID( 1 )
|
||||
PLAYER_ROW_ID( 2 )
|
||||
PLAYER_ROW_ID( 3 )
|
||||
PLAYER_ROW_ID( 4 )
|
||||
|
||||
ID XW_DICT_SELECTOR_ID
|
||||
ID XW_CANCEL_BUTTON_ID
|
||||
ID XW_OK_BUTTON_ID
|
||||
#else
|
||||
NAVIGATIONMAP
|
||||
#ifndef XWFEATURE_STANDALONE_ONLY
|
||||
ROW XW_SOLO_GADGET_ID
|
||||
XW_SERVER_GADGET_ID
|
||||
XW_CLIENT_GADGET_ID
|
||||
#endif
|
||||
ROW XW_NPLAYERS_SELECTOR_ID
|
||||
XW_GINFO_JUGGLE_ID
|
||||
XW_PREFS_BUTTON_ID
|
||||
|
||||
PLAYER_ROW_NAV( 1 )
|
||||
PLAYER_ROW_NAV( 2 )
|
||||
PLAYER_ROW_NAV( 3 )
|
||||
PLAYER_ROW_NAV( 4 )
|
||||
|
||||
ROW XW_DICT_SELECTOR_ID
|
||||
XW_CANCEL_BUTTON_ID
|
||||
XW_OK_BUTTON_ID
|
||||
#endif
|
||||
END /* NAVIGATION ID XW_NEWGAMES_FORM */
|
||||
#endif
|
||||
|
||||
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH || defined XWFEATURE_IR
|
||||
#define LEFTCOL 4
|
||||
|
@ -297,41 +354,43 @@ END /* XW_CONNS_FORM */
|
|||
|
||||
#define PREFS_MODE_TOP 15
|
||||
#define PREFS_TOP 30
|
||||
#define DLG_TOP (52-TRAY_EDIT_ADJUST-SEARCHLIMIT_ADJUST)
|
||||
#define DLG_HEIGHT (107+TRAY_EDIT_ADJUST+SEARCHLIMIT_ADJUST)
|
||||
/* #define DLG_TOP (52-TRAY_EDIT_ADJUST-SEARCHLIMIT_ADJUST) */
|
||||
#define DLG_HEIGHT (112+TRAY_EDIT_ADJUST+SEARCHLIMIT_ADJUST)
|
||||
#define DLG_TOP (160 - DLG_HEIGHT - 2)
|
||||
#define TIMER_TOP (74+SEARCHLIMIT_ADJUST)
|
||||
#define BUTTON_TOP (TIMER_TOP+16+TRAY_EDIT_ADJUST)
|
||||
#define PREFS_LNHT 4
|
||||
|
||||
FORM ID XW_PREFS_FORM AT (2 DLG_TOP 156 DLG_HEIGHT)
|
||||
USABLE MODAL SAVEBEHIND DEFAULTBTNID XW_PREFS_CANCEL_BUTTON_ID
|
||||
BEGIN
|
||||
TITLE "Preferences"
|
||||
|
||||
GADGET ID XW_PREFS_APPWIDE_CHECKBX_ID
|
||||
AT (LEFTCOL+8 PREFS_MODE_TOP 75 SERVER_HEIGHT) USABLE
|
||||
GADGET ID XW_PREFS_ONEGAME_CHECKBX_ID
|
||||
AT (PREVRIGHT+1 PREVTOP 50 SERVER_HEIGHT) USABLE
|
||||
LIST "Application-wide" "This game" XW_PREFS_TYPES_LIST_ID
|
||||
GADGET ID XW_PREFS_ALLGAMES_GADGET_ID
|
||||
AT (LEFTCOL+8 PREFS_MODE_TOP 60 SERVER_HEIGHT) USABLE
|
||||
GADGET ID XW_PREFS_ONEGAME_GADGET_ID
|
||||
AT (PREVRIGHT+1 PREVTOP 60 SERVER_HEIGHT) USABLE
|
||||
LIST "All games" "This game" XW_PREFS_TYPES_LIST_ID
|
||||
AT (0 0 1 1) VISIBLEITEMS 2 NONUSABLE
|
||||
|
||||
/* global prefs */
|
||||
CHECKBOX "Color played tiles" ID XW_PREFS_PLAYERCOLORS_CHECKBOX_ID \
|
||||
AT (LEFTCOL PREFS_TOP AUTO AUTO) NONUSABLE
|
||||
CHECKBOX "Show progress bar" ID XW_PREFS_PROGRESSBAR_CHECKBOX_ID \
|
||||
AT (LEFTCOL PREVBOTTOM+3 AUTO AUTO) NONUSABLE
|
||||
AT (LEFTCOL PREVBOTTOM+PREFS_LNHT AUTO AUTO) NONUSABLE
|
||||
CHECKBOX "Larger board" ID XW_PREFS_SHOWGRID_CHECKBOX_ID \
|
||||
AT (LEFTCOL PREVBOTTOM+3 AUTO AUTO) NONUSABLE
|
||||
AT (LEFTCOL PREVBOTTOM+PREFS_LNHT AUTO AUTO) NONUSABLE
|
||||
CHECKBOX "Enable arrow cursor" ID XW_PREFS_SHOWARROW_CHECKBOX_ID \
|
||||
AT (LEFTCOL PREVBOTTOM+3 AUTO AUTO) NONUSABLE
|
||||
AT (LEFTCOL PREVBOTTOM+PREFS_LNHT AUTO AUTO) NONUSABLE
|
||||
CHECKBOX "Explain robot scores" ID XW_PREFS_ROBOTSCORE_CHECKBOX_ID \
|
||||
AT (LEFTCOL PREVBOTTOM+3 AUTO AUTO) NONUSABLE
|
||||
AT (LEFTCOL PREVBOTTOM+PREFS_LNHT AUTO AUTO) NONUSABLE
|
||||
|
||||
/* single-game prefs */
|
||||
CHECKBOX "Smart robot" ID XW_PREFS_ROBOTSMART_CHECKBOX_ID \
|
||||
AT (LEFTCOL PREFS_TOP AUTO AUTO) NONUSABLE
|
||||
#ifdef XWFEATURE_SEARCHLIMIT
|
||||
CHECKBOX "Disallow hints" ID XW_PREFS_NOHINTS_CHECKBOX_ID \
|
||||
AT (LEFTCOL PREVBOTTOM+3 AUTO AUTO) NONUSABLE
|
||||
AT (LEFTCOL PREVBOTTOM+PREFS_LNHT AUTO AUTO) NONUSABLE
|
||||
CHECKBOX "Local hints" ID XW_PREFS_HINTRECT_CHECKBOX_ID \
|
||||
AT (PREVRIGHT+3 PREVTOP AUTO AUTO) NONUSABLE
|
||||
#else
|
||||
|
@ -339,7 +398,8 @@ BEGIN
|
|||
AT (PREVRIGHT+3 PREVTOP AUTO AUTO) NONUSABLE
|
||||
#endif
|
||||
|
||||
LABEL "Phonies:" XW_PREFS_PHONIES_LABEL_ID AT (LEFTCOL PREVBOTTOM+3)
|
||||
LABEL "Phonies:" XW_PREFS_PHONIES_LABEL_ID
|
||||
AT (LEFTCOL PREVBOTTOM+PREFS_LNHT)
|
||||
POPUPTRIGGER "" ID XW_PREFS_PHONIES_TRIGGER_ID
|
||||
AT (PREVRIGHT+5 PREVTOP 72 12) LEFTANCHOR
|
||||
|
||||
|
@ -368,6 +428,40 @@ BEGIN
|
|||
/* buttons at the bottom */
|
||||
BUTTON "Cancel" XW_PREFS_CANCEL_BUTTON_ID 42 BUTTON_TOP AUTO AUTO
|
||||
BUTTON "Ok" XW_PREFS_OK_BUTTON_ID PREVRIGHT+10 PREVTOP AUTO AUTO
|
||||
END /* XW_PREFS_FORM */
|
||||
|
||||
NAVIGATION ID XW_PREFS_FORM
|
||||
INITIALSTATE kFrmNavHeaderFlagsObjectFocusStartState
|
||||
INITIALOBJECTID XW_PREFS_ONEGAME_GADGET_ID
|
||||
NAVIGATIONMAP
|
||||
ROW XW_PREFS_ALLGAMES_GADGET_ID
|
||||
XW_PREFS_ONEGAME_GADGET_ID
|
||||
|
||||
/* global prefs */
|
||||
ROW XW_PREFS_PLAYERCOLORS_CHECKBOX_ID
|
||||
ROW XW_PREFS_PROGRESSBAR_CHECKBOX_ID
|
||||
ROW XW_PREFS_SHOWGRID_CHECKBOX_ID
|
||||
ROW XW_PREFS_SHOWARROW_CHECKBOX_ID
|
||||
ROW XW_PREFS_ROBOTSCORE_CHECKBOX_ID
|
||||
|
||||
/* Per-game prefs */
|
||||
ROW XW_PREFS_ROBOTSMART_CHECKBOX_ID
|
||||
ROW XW_PREFS_NOHINTS_CHECKBOX_ID
|
||||
#ifdef XWFEATURE_SEARCHLIMIT
|
||||
XW_PREFS_HINTRECT_CHECKBOX_ID
|
||||
#endif
|
||||
ROW XW_PREFS_PHONIES_TRIGGER_ID
|
||||
ROW XW_PREFS_BDSIZE_SELECTOR_ID
|
||||
|
||||
ROW XW_PREFS_TIMERON_CHECKBOX_ID
|
||||
XW_PREFS_TIMER_FIELD_ID
|
||||
#ifdef FEATURE_TRAY_EDIT
|
||||
ROW XW_PREFS_PICKTILES_CHECKBOX_ID
|
||||
#endif
|
||||
|
||||
/* cmd buttons */
|
||||
ROW XW_PREFS_CANCEL_BUTTON_ID
|
||||
XW_PREFS_OK_BUTTON_ID
|
||||
END
|
||||
|
||||
#define LEFT_EDGE 10
|
||||
|
|
328
palm/newgame.c
328
palm/newgame.c
|
@ -24,7 +24,7 @@
|
|||
#include <Chars.h> /* for nextFieldChr */
|
||||
#include <Graffiti.h> /* for GrfSetState */
|
||||
#include <Event.h>
|
||||
#ifdef HS_DUO_SUPPORT
|
||||
#ifdef XWFEATURE_FIVEWAY
|
||||
# include <Hs.h>
|
||||
#endif
|
||||
|
||||
|
@ -45,26 +45,14 @@
|
|||
static void handlePasswordTrigger( PalmAppGlobals* globals,
|
||||
UInt16 controlID );
|
||||
static void updatePlayerInfo( PalmAppGlobals* globals );
|
||||
static XP_Bool tryFieldNavigationKey( XP_U16 key );
|
||||
static void loadNewGameState( PalmAppGlobals* globals );
|
||||
static void unloadNewGameState( PalmAppGlobals* globals );
|
||||
static void setNameThatFits( PalmNewGameState* state );
|
||||
#ifdef HS_DUO_SUPPORT
|
||||
static XP_Bool tryDuoRockerKey( PalmAppGlobals* globals,XP_U16 key );
|
||||
static XP_Bool considerGadgetFocus( PalmNewGameState* state, EventType* event );
|
||||
#else
|
||||
# define tryDuoRockerKey(g,key) XP_FALSE
|
||||
#endif
|
||||
|
||||
static XP_Bool onDisabledList( const PalmNewGameState* state,
|
||||
XP_U16 controlID );
|
||||
static void modDisabledList( PalmNewGameState* state, XP_U16 controlID,
|
||||
NewGameEnable enable );
|
||||
|
||||
static void palmEnableColProc( void* closure, XP_U16 player,
|
||||
NewGameColumn col, NewGameEnable enable );
|
||||
NewGameColumn col, XP_TriEnable enable );
|
||||
static void palmEnableAttrProc( void* closure, NewGameAttr attr,
|
||||
NewGameEnable enable );
|
||||
XP_TriEnable enable );
|
||||
static void palmGetColProc( void* closure, XP_U16 player, NewGameColumn col,
|
||||
NgCpCallbk cpcb, const void* cbClosure );
|
||||
static void palmSetColProc( void* closure, XP_U16 player, NewGameColumn col,
|
||||
|
@ -77,7 +65,8 @@ static void handleRobotChanged( PalmNewGameState* state, XP_U16 controlID,
|
|||
#ifndef XWFEATURE_STANDALONE_ONLY
|
||||
static void handleRemoteChanged( PalmNewGameState* state, XP_U16 controlID,
|
||||
XP_Bool on );
|
||||
static Boolean checkHiliteGadget(PalmAppGlobals* globals, EventType* event,
|
||||
static Boolean checkHiliteGadget(PalmAppGlobals* globals,
|
||||
const EventType* event,
|
||||
PalmNewGameState* state );
|
||||
static void drawConnectGadgets( PalmAppGlobals* globals );
|
||||
static void changeGadgetHilite( PalmAppGlobals* globals, UInt16 hiliteID );
|
||||
|
@ -87,10 +76,6 @@ static void changeGadgetHilite( PalmAppGlobals* globals, UInt16 hiliteID );
|
|||
# define drawConnectGadgets( globals )
|
||||
#endif
|
||||
|
||||
#define IS_SERVER_GADGET(id) \
|
||||
((id) >= XW_SOLO_GADGET_ID && (id) <= XW_CLIENT_GADGET_ID)
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
****************************************************************************/
|
||||
|
@ -104,7 +89,7 @@ newGameHandleEvent( EventPtr event )
|
|||
CurGameInfo* gi;
|
||||
PalmNewGameState* state;
|
||||
Int16 chosen;
|
||||
XP_U16 controlID;
|
||||
XP_U16 itemId;
|
||||
Boolean on;
|
||||
|
||||
CALLBACK_PROLOGUE();
|
||||
|
@ -126,14 +111,9 @@ newGameHandleEvent( EventPtr event )
|
|||
|
||||
state->form = form;
|
||||
|
||||
#ifndef XWFEATURE_STANDALONE_ONLY
|
||||
sizeGadgetsForStrings( form,
|
||||
getActiveObjectPtr( XW_SERVERTYPES_LIST_ID ),
|
||||
XW_SOLO_GADGET_ID );
|
||||
#endif
|
||||
loadNewGameState( globals );
|
||||
if ( !globals->isNewGame ) {
|
||||
modDisabledList( state, XW_DICT_SELECTOR_ID, NGEnableDisabled );
|
||||
disOrEnableTri( form, XW_DICT_SELECTOR_ID, TRI_ENAB_DISABLED );
|
||||
}
|
||||
|
||||
XP_ASSERT( !!state->dictName );
|
||||
|
@ -156,10 +136,13 @@ newGameHandleEvent( EventPtr event )
|
|||
break;
|
||||
#endif
|
||||
|
||||
#ifdef HS_DUO_SUPPORT
|
||||
#ifdef XWFEATURE_FIVEWAY
|
||||
/* docs say to return HANDLED for both take and lost if the right
|
||||
object */
|
||||
case frmObjectFocusTakeEvent:
|
||||
case frmObjectFocusLostEvent:
|
||||
result = considerGadgetFocus( state, event );
|
||||
result = considerGadgetFocus( event, XW_SOLO_GADGET_ID,
|
||||
XW_CLIENT_GADGET_ID );
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
@ -167,41 +150,39 @@ newGameHandleEvent( EventPtr event )
|
|||
result = checkHiliteGadget( globals, event, state );
|
||||
break;
|
||||
|
||||
#ifdef XWFEATURE_FIVEWAY
|
||||
case keyDownEvent:
|
||||
result = tryFieldNavigationKey( event->data.keyDown.chr )
|
||||
|| tryDuoRockerKey( globals, event->data.keyDown.chr );
|
||||
itemId = getFocusOwner();
|
||||
result = tryRockerKey( event->data.keyDown.chr, itemId,
|
||||
XW_SOLO_GADGET_ID, XW_CLIENT_GADGET_ID );
|
||||
if ( result ) {
|
||||
changeGadgetHilite( globals, itemId );
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case prefsChangedEvent:
|
||||
state->forwardChange = true;
|
||||
break;
|
||||
|
||||
case fldEnterEvent:
|
||||
case ctlEnterEvent:
|
||||
if ( onDisabledList( state, event->data.ctlEnter.controlID ) ) {
|
||||
result = true;
|
||||
beep();
|
||||
}
|
||||
break;
|
||||
|
||||
case ctlSelectEvent:
|
||||
result = true;
|
||||
controlID = event->data.ctlSelect.controlID;
|
||||
itemId = event->data.ctlSelect.controlID;
|
||||
on = event->data.ctlSelect.on;
|
||||
switch ( controlID ) {
|
||||
switch ( itemId ) {
|
||||
|
||||
case XW_ROBOT_1_CHECKBOX_ID:
|
||||
case XW_ROBOT_2_CHECKBOX_ID:
|
||||
case XW_ROBOT_3_CHECKBOX_ID:
|
||||
case XW_ROBOT_4_CHECKBOX_ID:
|
||||
handleRobotChanged( state, controlID, on );
|
||||
handleRobotChanged( state, itemId, on );
|
||||
break;
|
||||
#ifndef XWFEATURE_STANDALONE_ONLY
|
||||
case XW_REMOTE_1_CHECKBOX_ID:
|
||||
case XW_REMOTE_2_CHECKBOX_ID:
|
||||
case XW_REMOTE_3_CHECKBOX_ID:
|
||||
case XW_REMOTE_4_CHECKBOX_ID:
|
||||
handleRemoteChanged( state, controlID, on );
|
||||
handleRemoteChanged( state, itemId, on );
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
@ -278,7 +259,7 @@ newGameHandleEvent( EventPtr event )
|
|||
case XW_PLAYERPASSWD_2_TRIGGER_ID:
|
||||
case XW_PLAYERPASSWD_3_TRIGGER_ID:
|
||||
case XW_PLAYERPASSWD_4_TRIGGER_ID:
|
||||
handlePasswordTrigger( globals, controlID );
|
||||
handlePasswordTrigger( globals, itemId );
|
||||
break;
|
||||
|
||||
default: /* one of the password selectors? */
|
||||
|
@ -329,106 +310,6 @@ setNameThatFits( PalmNewGameState* state )
|
|||
(const char*)state->shortDictName );
|
||||
} /* setNameThatFits */
|
||||
|
||||
static Boolean
|
||||
tryFieldNavigationKey( XP_U16 key )
|
||||
{
|
||||
FormPtr form;
|
||||
Int16 curFocus, nextFocus, change;
|
||||
UInt16 nObjects;
|
||||
|
||||
if ( key == prevFieldChr ) {
|
||||
change = -1;
|
||||
} else if ( key == nextFieldChr ) {
|
||||
change = 1;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
form = FrmGetActiveForm();
|
||||
curFocus = nextFocus = FrmGetFocus( form );
|
||||
nObjects = FrmGetNumberOfObjects(form);
|
||||
|
||||
/* find the next (in either direction) usable field */
|
||||
for ( ; ; ) {
|
||||
nextFocus += change;
|
||||
|
||||
if ( nextFocus == nObjects ) {
|
||||
nextFocus = 0;
|
||||
} else if ( nextFocus < 0 ) {
|
||||
nextFocus = nObjects-1;
|
||||
}
|
||||
|
||||
if ( nextFocus == curFocus ) {
|
||||
break;
|
||||
} else if ( FrmGetObjectType(form, nextFocus) != frmFieldObj ) {
|
||||
continue;
|
||||
} else {
|
||||
FieldPtr field = FrmGetObjectPtr( form, nextFocus );
|
||||
FieldAttrType attrs;
|
||||
FldGetAttributes( field, &attrs );
|
||||
if ( attrs.usable ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FrmSetFocus( form, nextFocus );
|
||||
return true;
|
||||
} /* tryFieldNavigationKey */
|
||||
|
||||
#ifdef HS_DUO_SUPPORT
|
||||
#ifdef DEBUG
|
||||
static XP_UCHAR*
|
||||
keyToStr( XP_U16 key )
|
||||
{
|
||||
#define keyCase(k) case (k): return #k
|
||||
switch( key ) {
|
||||
keyCase(vchrRockerUp);
|
||||
keyCase(vchrRockerDown);
|
||||
keyCase(vchrRockerLeft);
|
||||
keyCase(vchrRockerRight);
|
||||
keyCase(vchrRockerCenter);
|
||||
default:
|
||||
return "huh?";
|
||||
}
|
||||
#undef keyCase
|
||||
}
|
||||
#endif
|
||||
|
||||
static XP_Bool
|
||||
tryDuoRockerKey( PalmAppGlobals* globals, XP_U16 key )
|
||||
{
|
||||
XP_Bool result = XP_FALSE;
|
||||
XP_U16 focusID;
|
||||
FormPtr form;
|
||||
|
||||
switch( key ) {
|
||||
case vchrRockerUp:
|
||||
case vchrRockerDown:
|
||||
case vchrRockerLeft:
|
||||
case vchrRockerRight:
|
||||
XP_LOGF( "got rocker key: %s", keyToStr(key) );
|
||||
result = XP_FALSE;
|
||||
break;
|
||||
case vchrRockerCenter:
|
||||
/* if one of the gadgets is focussed, "tap" it. */
|
||||
XP_LOGF( "got rocker key: %s", keyToStr(key) );
|
||||
form = FrmGetActiveForm();
|
||||
focusID = FrmGetObjectId( form, FrmGetFocus( form ) );
|
||||
if ( IS_SERVER_GADGET( focusID ) ) {
|
||||
changeGadgetHilite( globals, focusID );
|
||||
result = XP_TRUE;
|
||||
} else {
|
||||
XP_LOGF( "%d not server gadget", focusID );
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
} /* tryDuoRockerKey */
|
||||
#endif /* #ifdef HS_DUO_SUPPORT */
|
||||
|
||||
/*
|
||||
* Copy the local state into global state.
|
||||
*/
|
||||
|
@ -447,109 +328,25 @@ updatePlayerInfo( PalmAppGlobals* globals )
|
|||
globals->newGameState.dictName );
|
||||
} /* updatePlayerInfo */
|
||||
|
||||
void
|
||||
drawOneGadget( UInt16 id, char* text, Boolean hilite )
|
||||
{
|
||||
RectangleType divRect;
|
||||
XP_U16 len = XP_STRLEN(text);
|
||||
XP_U16 width = FntCharsWidth( text, len );
|
||||
XP_U16 left;
|
||||
|
||||
getObjectBounds( id, &divRect );
|
||||
WinDrawRectangleFrame( rectangleFrame, &divRect );
|
||||
WinEraseRectangle( &divRect, 0 );
|
||||
left = divRect.topLeft.x;
|
||||
left += (divRect.extent.x - width) / 2;
|
||||
WinDrawChars( text, len, left, divRect.topLeft.y );
|
||||
if ( hilite ) {
|
||||
WinInvertRectangle( &divRect, 0 );
|
||||
}
|
||||
} /* drawOneGadget */
|
||||
|
||||
/* Frame 'em, draw their text, and highlight the one that's selected
|
||||
*/
|
||||
#ifndef XWFEATURE_STANDALONE_ONLY
|
||||
|
||||
#ifdef HS_DUO_SUPPORT
|
||||
static void
|
||||
drawFocusRingOnGadget()
|
||||
{
|
||||
FormPtr form = FrmGetActiveForm();
|
||||
XP_U16 focusID = FrmGetObjectId( form, FrmGetFocus(form) );
|
||||
if ( IS_SERVER_GADGET(focusID) ) {
|
||||
Err err;
|
||||
RectangleType rect;
|
||||
|
||||
getObjectBounds( focusID, &rect );
|
||||
|
||||
err = HsNavDrawFocusRing( form, focusID, 0, &rect,
|
||||
hsNavFocusRingStyleObjectTypeDefault,
|
||||
false );
|
||||
XP_ASSERT( err == errNone );
|
||||
}
|
||||
} /* drawFocusRingOnGadget */
|
||||
#endif
|
||||
|
||||
static void
|
||||
drawConnectGadgets( PalmAppGlobals* globals )
|
||||
{
|
||||
UInt16 i;
|
||||
XP_U16 hiliteItem = globals->newGameState.curServerHilite
|
||||
+ XW_SOLO_GADGET_ID ;
|
||||
ListPtr list = getActiveObjectPtr( XW_SERVERTYPES_LIST_ID );
|
||||
XP_ASSERT( !!list );
|
||||
|
||||
for ( i = 0; i < 3; ++i ) {
|
||||
char* text = LstGetSelectionText( list, i );
|
||||
Boolean hilite = i == globals->newGameState.curServerHilite;
|
||||
drawOneGadget( i + XW_SOLO_GADGET_ID, text, hilite );
|
||||
}
|
||||
|
||||
#ifdef HS_DUO_SUPPORT
|
||||
drawFocusRingOnGadget();
|
||||
drawGadgetsFromList( list, XW_SOLO_GADGET_ID, XW_CLIENT_GADGET_ID,
|
||||
hiliteItem );
|
||||
#ifdef XWFEATURE_FIVEWAY
|
||||
drawFocusRingOnGadget( XW_SOLO_GADGET_ID, XW_CLIENT_GADGET_ID );
|
||||
#endif
|
||||
|
||||
} /* drawConnectGadgets */
|
||||
|
||||
#ifdef HS_DUO_SUPPORT
|
||||
static XP_Bool
|
||||
considerGadgetFocus( PalmNewGameState* state, EventType* event )
|
||||
{
|
||||
XP_Bool result = XP_FALSE;
|
||||
XP_Bool isTake;
|
||||
XP_U16 eType = event->eType;
|
||||
FormPtr form = FrmGetActiveForm();
|
||||
XP_U16 objectID;
|
||||
|
||||
XP_ASSERT( eType == frmObjectFocusTakeEvent
|
||||
|| eType == frmObjectFocusLostEvent );
|
||||
XP_ASSERT( event->data.frmObjectFocusTake.formID == FrmGetActiveFormID() );
|
||||
|
||||
|
||||
isTake = eType == frmObjectFocusTakeEvent;
|
||||
if ( isTake ) {
|
||||
objectID = event->data.frmObjectFocusTake.objectID;
|
||||
} else {
|
||||
objectID = event->data.frmObjectFocusLost.objectID;
|
||||
}
|
||||
|
||||
/* docs say to return HANDLED for both take and lost */
|
||||
result = IS_SERVER_GADGET( objectID );
|
||||
|
||||
if ( result ) {
|
||||
Err err;
|
||||
if ( isTake ) {
|
||||
|
||||
FrmSetFocus(form, FrmGetObjectIndex(form, objectID));
|
||||
drawFocusRingOnGadget();
|
||||
result = XP_TRUE;
|
||||
/* } else { */
|
||||
/* err = HsNavRemoveFocusRing( form ); */
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
} /* considerGadgetFocus */
|
||||
#endif
|
||||
|
||||
static void
|
||||
changeGadgetHilite( PalmAppGlobals* globals, UInt16 hiliteID )
|
||||
{
|
||||
|
@ -585,7 +382,7 @@ changeGadgetHilite( PalmAppGlobals* globals, UInt16 hiliteID )
|
|||
} /* changeGadgetHilite */
|
||||
|
||||
static Boolean
|
||||
checkHiliteGadget( PalmAppGlobals* globals, EventType* event,
|
||||
checkHiliteGadget( PalmAppGlobals* globals, const EventType* event,
|
||||
PalmNewGameState* XP_UNUSED_DBG(state) )
|
||||
{
|
||||
Boolean result = false;
|
||||
|
@ -647,46 +444,6 @@ unloadNewGameState( PalmAppGlobals* globals )
|
|||
state->ngc = NULL;
|
||||
} /* unloadNewGameState */
|
||||
|
||||
static XP_S16
|
||||
findDisabled( const PalmNewGameState* state, XP_U16 controlID )
|
||||
{
|
||||
XP_U16 i;
|
||||
XP_S16 loc = -1;
|
||||
for ( i = 0; i < state->nDisabled; ++i ) {
|
||||
if ( state->disabled[i] == controlID ) {
|
||||
loc = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return loc;
|
||||
}
|
||||
|
||||
static XP_Bool
|
||||
onDisabledList( const PalmNewGameState* state, XP_U16 controlID )
|
||||
{
|
||||
return 0 <= findDisabled( state, controlID );
|
||||
}
|
||||
|
||||
static void
|
||||
modDisabledList( PalmNewGameState* state, XP_U16 controlID,
|
||||
NewGameEnable enable )
|
||||
{
|
||||
XP_S16 loc = findDisabled( state, controlID );
|
||||
XP_Bool include = enable != NGEnableEnabled;
|
||||
if ( loc < 0 && include ) {
|
||||
/* not there but should be; add it */
|
||||
state->disabled[state->nDisabled++] = controlID;
|
||||
XP_ASSERT( state->nDisabled < MAX_DISABLED );
|
||||
} else if ( loc >= 0 && !include ) {
|
||||
/* is there; shouldn't be; remove it */
|
||||
state->disabled[loc] = state->disabled[--state->nDisabled];
|
||||
} else {
|
||||
/* all's well */
|
||||
XP_ASSERT( (loc >= 0 && include)
|
||||
|| ( loc < 0 && !include ) );
|
||||
}
|
||||
}
|
||||
|
||||
static XP_U16
|
||||
getBaseForCol( NewGameColumn col )
|
||||
{
|
||||
|
@ -730,13 +487,15 @@ getControlForCol( XP_U16 player, NewGameColumn col )
|
|||
|
||||
static void
|
||||
palmEnableColProc( void* closure, XP_U16 player, NewGameColumn col,
|
||||
NewGameEnable enable )
|
||||
XP_TriEnable enable )
|
||||
{
|
||||
PalmAppGlobals* globals = (PalmAppGlobals*)closure;
|
||||
PalmNewGameState* state = &globals->newGameState;
|
||||
XP_U16 objID = objIDForCol( player, col );
|
||||
disOrEnable( state->form, objID, enable != NGEnableHidden );
|
||||
modDisabledList( state, objID, enable );
|
||||
XP_U16 objID;
|
||||
|
||||
/* If it's a field, there need to be three states */
|
||||
objID = objIDForCol( player, col );
|
||||
disOrEnableTri( state->form, objID, enable );
|
||||
}
|
||||
|
||||
/* Palm doesn't really do "disabled." Things are visible or not. But we
|
||||
|
@ -746,11 +505,10 @@ palmEnableColProc( void* closure, XP_U16 player, NewGameColumn col,
|
|||
* control is technically enabled.
|
||||
*/
|
||||
static void
|
||||
palmEnableAttrProc(void* closure, NewGameAttr attr, NewGameEnable ngEnable )
|
||||
palmEnableAttrProc(void* closure, NewGameAttr attr, XP_TriEnable ngEnable )
|
||||
{
|
||||
PalmAppGlobals* globals = (PalmAppGlobals*)closure;
|
||||
PalmNewGameState* state = &globals->newGameState;
|
||||
XP_Bool enable = XP_FALSE; /* make compiler happy */
|
||||
XP_U16 objID = 0;
|
||||
|
||||
switch ( attr ) {
|
||||
|
@ -759,25 +517,21 @@ palmEnableAttrProc(void* closure, NewGameAttr attr, NewGameEnable ngEnable )
|
|||
/* always enabled */
|
||||
break;
|
||||
case NG_ATTR_REMHEADER:
|
||||
enable = ngEnable != NGEnableHidden;
|
||||
objID = XW_LOCAL_LABEL_ID;
|
||||
break;
|
||||
#endif
|
||||
case NG_ATTR_NPLAYERS:
|
||||
enable = ngEnable != NGEnableHidden;
|
||||
objID = XW_NPLAYERS_SELECTOR_ID;
|
||||
break;
|
||||
case NG_ATTR_NPLAYHEADER:
|
||||
break;
|
||||
case NG_ATTR_CANJUGGLE:
|
||||
enable = ngEnable == NGEnableEnabled;
|
||||
objID = XW_GINFO_JUGGLE_ID;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( objID != 0 ) {
|
||||
disOrEnable( state->form, objID, enable );
|
||||
modDisabledList( state, objID, ngEnable );
|
||||
disOrEnableTri( state->form, objID, ngEnable );
|
||||
}
|
||||
} /* palmEnableAttrProc */
|
||||
|
||||
|
@ -854,8 +608,6 @@ palmSetAttrProc( void* closure, NewGameAttr attr, const NGValue value )
|
|||
#ifndef XWFEATURE_STANDALONE_ONLY
|
||||
case NG_ATTR_ROLE:
|
||||
state->curServerHilite = value.ng_role;
|
||||
/* Don't do this until frmUpdateEvent's been received... */
|
||||
/* drawConnectGadgets( globals ); */
|
||||
break;
|
||||
case NG_ATTR_REMHEADER:
|
||||
break;
|
||||
|
|
|
@ -27,6 +27,4 @@
|
|||
|
||||
Boolean newGameHandleEvent( EventPtr event );
|
||||
|
||||
void drawOneGadget( UInt16 id, char* text, Boolean hilite );
|
||||
|
||||
#endif
|
||||
|
|
|
@ -200,9 +200,6 @@ typedef struct PalmNewGameState {
|
|||
XP_UCHAR* dictName;
|
||||
XP_UCHAR shortDictName[32]; /* as long as a dict name can be */
|
||||
|
||||
XP_U16 disabled[MAX_DISABLED];
|
||||
XP_U16 nDisabled;
|
||||
|
||||
XP_Bool forwardChange;
|
||||
Connectedness curServerHilite;
|
||||
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
|
||||
|
|
205
palm/palmutil.c
205
palm/palmutil.c
|
@ -25,6 +25,9 @@
|
|||
#include <Form.h>
|
||||
#include <FeatureMgr.h>
|
||||
#include <unix_stdarg.h>
|
||||
#ifdef XWFEATURE_FIVEWAY
|
||||
# include <Hs.h>
|
||||
#endif
|
||||
|
||||
#include "strutils.h"
|
||||
#include "palmutil.h"
|
||||
|
@ -118,6 +121,38 @@ disOrEnable( FormPtr form, UInt16 id, Boolean enable )
|
|||
}
|
||||
} /* disOrEnable */
|
||||
|
||||
void
|
||||
disOrEnableTri( FormPtr form, UInt16 id, XP_TriEnable enable )
|
||||
{
|
||||
UInt16 index;
|
||||
XP_ASSERT( enable != TRI_ENAB_NONE );
|
||||
|
||||
index = FrmGetObjectIndex( form, id );
|
||||
|
||||
if ( enable == TRI_ENAB_HIDDEN ) {
|
||||
FrmHideObject( form, index );
|
||||
} else {
|
||||
FormObjectKind typ = FrmGetObjectType( form, index );
|
||||
XP_Bool active = enable == TRI_ENAB_ENABLED;
|
||||
|
||||
FrmShowObject( form, index );
|
||||
|
||||
switch( typ ) {
|
||||
case frmFieldObj:
|
||||
setFieldEditable( id, active );
|
||||
break;
|
||||
case frmControlObj:
|
||||
CtlSetEnabled( getActiveObjectPtr( id ), enable );
|
||||
break;
|
||||
case frmLabelObj: /* what to do? */
|
||||
break;
|
||||
default:
|
||||
XP_WARNF( "%s: %d not handled", __FUNCTION__, (XP_U16)typ );
|
||||
XP_ASSERT(0);
|
||||
}
|
||||
}
|
||||
} /* disOrEnableTri */
|
||||
|
||||
void
|
||||
disOrEnableSet( FormPtr form, const UInt16* ids, Boolean enable )
|
||||
{
|
||||
|
@ -310,52 +345,8 @@ setSelectorFromList( UInt16 triggerID, ListPtr list, XP_S16 listSelIndex )
|
|||
LstGetSelectionText( list, listSelIndex ) );
|
||||
} /* setTriggerFromList */
|
||||
|
||||
#define MAX_GADGET_COUNT 3 /* the most we need at this point */
|
||||
void
|
||||
sizeGadgetsForStrings( FormPtr form, ListPtr list, XP_U16 firstGadgetID )
|
||||
{
|
||||
XP_U16 i;
|
||||
XP_U16 nGadgets = LstGetNumberOfItems( list );
|
||||
XP_U16 strWidths[MAX_GADGET_COUNT];
|
||||
XP_U16 totalStrWidth, totalGadgetWidth;
|
||||
XP_U16 left, extra;
|
||||
RectangleType rects[MAX_GADGET_COUNT];
|
||||
RectangleType* rp;
|
||||
|
||||
XP_ASSERT( nGadgets <= MAX_GADGET_COUNT );
|
||||
|
||||
totalStrWidth = totalGadgetWidth = 0;
|
||||
for ( i = 0, rp = rects; i < nGadgets; ++i, ++rp ) {
|
||||
XP_U16 len;
|
||||
XP_UCHAR* txt = (XP_UCHAR*)LstGetSelectionText( list, i );
|
||||
|
||||
len = XP_STRLEN( (const char*)txt );
|
||||
totalStrWidth += strWidths[i] = FntCharsWidth( (const char*)txt, len );
|
||||
|
||||
getObjectBounds( firstGadgetID+i, rp );
|
||||
totalGadgetWidth += rp->extent.x;
|
||||
}
|
||||
|
||||
XP_ASSERT( totalGadgetWidth >= totalStrWidth );
|
||||
extra = (totalGadgetWidth - totalStrWidth) / nGadgets;
|
||||
|
||||
left = rects[0].topLeft.x;
|
||||
for ( i = 0, rp = rects; i < nGadgets; ++i, ++rp ) {
|
||||
UInt16 index;
|
||||
UInt16 width;
|
||||
|
||||
rp->topLeft.x = left;
|
||||
rp->extent.x = width = strWidths[i] + extra;
|
||||
|
||||
index = FrmGetObjectIndex( form, firstGadgetID+i );
|
||||
FrmSetObjectBounds( form, index, rp );
|
||||
|
||||
left += width;
|
||||
}
|
||||
} /* sizeGadgetsForStrings */
|
||||
|
||||
XP_Bool
|
||||
penInGadget( EventPtr event, UInt16* whichGadget )
|
||||
penInGadget( const EventType* event, UInt16* whichGadget )
|
||||
{
|
||||
UInt16 x = event->screenX;
|
||||
UInt16 y = event->screenY;
|
||||
|
@ -381,6 +372,130 @@ penInGadget( EventPtr event, UInt16* whichGadget )
|
|||
return result;
|
||||
} /* penInGadget */
|
||||
|
||||
void
|
||||
drawOneGadget( UInt16 id, const char* text, Boolean hilite )
|
||||
{
|
||||
RectangleType divRect;
|
||||
XP_U16 len = XP_STRLEN(text);
|
||||
XP_U16 width = FntCharsWidth( text, len );
|
||||
XP_U16 left;
|
||||
|
||||
getObjectBounds( id, &divRect );
|
||||
WinDrawRectangleFrame( rectangleFrame, &divRect );
|
||||
WinEraseRectangle( &divRect, 0 );
|
||||
left = divRect.topLeft.x;
|
||||
left += (divRect.extent.x - width) / 2;
|
||||
WinDrawChars( text, len, left, divRect.topLeft.y );
|
||||
if ( hilite ) {
|
||||
WinInvertRectangle( &divRect, 0 );
|
||||
}
|
||||
} /* drawOneGadget */
|
||||
|
||||
#ifdef XWFEATURE_FIVEWAY
|
||||
XP_U16
|
||||
getFocusOwner( void )
|
||||
{
|
||||
FormPtr form = FrmGetActiveForm();
|
||||
XP_U16 ownerID = FrmGetObjectId( form, FrmGetFocus( form ) );
|
||||
return ownerID;
|
||||
} /* getFocusOwner */
|
||||
|
||||
void
|
||||
drawFocusRingOnGadget( XP_U16 idLow, XP_U16 idHigh )
|
||||
{
|
||||
FormPtr form;
|
||||
XP_S16 index;
|
||||
XP_U16 focusID;
|
||||
|
||||
LOG_FUNC();
|
||||
|
||||
form = FrmGetActiveForm();
|
||||
index = FrmGetFocus( form );
|
||||
XP_LOGF( "%s: FrmGetFocus=>%d", __FUNCTION__, index );
|
||||
if ( index >= 0 ) {
|
||||
focusID = FrmGetObjectId( form, index );
|
||||
XP_LOGF( "%s: FrmGetObjectId=>%d", __FUNCTION__, focusID );
|
||||
|
||||
if ( (focusID >= idLow) && (focusID <= idHigh) ) {
|
||||
Err err;
|
||||
RectangleType rect;
|
||||
|
||||
getObjectBounds( focusID, &rect );
|
||||
XP_LOGF( "focusID=%d; index=%d", focusID, index );
|
||||
XP_LOGF( "rect=%d,%d,%d,%d", rect.topLeft.x, rect.topLeft.y,
|
||||
rect.extent.x, rect.extent.y );
|
||||
|
||||
/* growing the rect didn't work to fix glitches in ring drawing. */
|
||||
|
||||
err = HsNavDrawFocusRing( form, focusID, 0, &rect,
|
||||
hsNavFocusRingStyleObjectTypeDefault,
|
||||
false );
|
||||
if ( err != errNone ) {
|
||||
XP_LOGF( "%s: err=%d (0x%x)", __FUNCTION__, err, err );
|
||||
}
|
||||
XP_ASSERT( err == errNone ); /* firing */
|
||||
}
|
||||
}
|
||||
LOG_RETURN_VOID();
|
||||
} /* drawFocusRingOnGadget */
|
||||
|
||||
XP_Bool
|
||||
considerGadgetFocus( const EventType* event, XP_U16 idLow, XP_U16 idHigh )
|
||||
{
|
||||
XP_Bool handled;
|
||||
XP_U16 objectID;
|
||||
|
||||
XP_ASSERT( event->eType == frmObjectFocusLostEvent
|
||||
|| event->eType == frmObjectFocusTakeEvent );
|
||||
XP_ASSERT( event->data.frmObjectFocusTake.formID == FrmGetActiveFormID() );
|
||||
XP_ASSERT( &event->data.frmObjectFocusTake.objectID
|
||||
== &event->data.frmObjectFocusLost.objectID );
|
||||
|
||||
objectID = event->data.frmObjectFocusTake.objectID;
|
||||
XP_LOGF( "%s: objectID=%d", __FUNCTION__, objectID );
|
||||
handled = (objectID >= idLow) && (objectID <= idHigh);
|
||||
if ( handled ) {
|
||||
if ( event->eType == frmObjectFocusTakeEvent ) {
|
||||
FormPtr form = FrmGetActiveForm();
|
||||
FrmSetFocus( form, FrmGetObjectIndex(form, objectID) );
|
||||
drawFocusRingOnGadget( idLow, idHigh );
|
||||
}
|
||||
}
|
||||
|
||||
LOG_RETURNF( "%d", (XP_U16)handled );
|
||||
return handled;
|
||||
} /* considerGadgetFocus */
|
||||
|
||||
XP_Bool
|
||||
tryRockerKey( XP_U16 key, XP_U16 selGadget, XP_U16 idLow, XP_U16 idHigh )
|
||||
{
|
||||
XP_Bool result = XP_FALSE;
|
||||
|
||||
if ( vchrRockerCenter == key ) {
|
||||
if ( selGadget >= idLow && selGadget <= idHigh ) {
|
||||
result = XP_TRUE;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
} /* tryRockerKey */
|
||||
#endif
|
||||
|
||||
void
|
||||
drawGadgetsFromList( ListPtr list, XP_U16 idLow, XP_U16 idHigh,
|
||||
XP_U16 hiliteItem )
|
||||
{
|
||||
XP_U16 i;
|
||||
LOG_FUNC();
|
||||
XP_ASSERT( idLow <= idHigh );
|
||||
|
||||
for ( i = 0; idLow <= idHigh; ++i, ++idLow ) {
|
||||
const char* text = LstGetSelectionText( list, i );
|
||||
Boolean hilite = idLow == hiliteItem;
|
||||
drawOneGadget( idLow, text, hilite );
|
||||
}
|
||||
LOG_RETURN_VOID();
|
||||
} /* drawGadgetsFromList */
|
||||
|
||||
void
|
||||
setFormRefcon( void* refcon )
|
||||
{
|
||||
|
|
|
@ -47,6 +47,8 @@ void setObjectBounds( UInt16 objectID, RectangleType* rectP );
|
|||
void disOrEnable( FormPtr form, UInt16 id, Boolean enable );
|
||||
void disOrEnableSet( FormPtr form, const UInt16* id, Boolean enable );
|
||||
|
||||
void disOrEnableTri( FormPtr form, UInt16 id, XP_TriEnable enable );
|
||||
|
||||
void centerControl( FormPtr form, UInt16 id );
|
||||
|
||||
void setBooleanCtrl( UInt16 objectID, Boolean isSet );
|
||||
|
@ -68,8 +70,20 @@ void setSelectorFromList( UInt16 selectorID, ListPtr list,
|
|||
short listSelIndex );
|
||||
|
||||
void sizeGadgetsForStrings( FormPtr form, ListPtr list, XP_U16 firstGadgetID );
|
||||
void drawGadgetsFromList( ListPtr list, XP_U16 idLow, XP_U16 idHigh,
|
||||
XP_U16 hiliteItem );
|
||||
|
||||
XP_Bool penInGadget( EventPtr event, UInt16* whichGadget );
|
||||
XP_Bool penInGadget( const EventType* event, UInt16* whichGadget );
|
||||
void drawOneGadget( UInt16 id, const char* text, Boolean hilite );
|
||||
# ifdef XWFEATURE_FIVEWAY
|
||||
XP_U16 getFocusOwner( void );
|
||||
void drawFocusRingOnGadget( XP_U16 idLow, XP_U16 idHigh );
|
||||
XP_Bool considerGadgetFocus( const EventType* event, XP_U16 idLow,
|
||||
XP_U16 idHigh );
|
||||
|
||||
XP_Bool tryRockerKey( XP_U16 key, XP_U16 selGadget,
|
||||
XP_U16 idLow, XP_U16 idHigh );
|
||||
# endif
|
||||
|
||||
void setFormRefcon( void* refcon );
|
||||
void* getFormRefcon();
|
||||
|
|
145
palm/prefsdlg.c
145
palm/prefsdlg.c
|
@ -1,6 +1,7 @@
|
|||
/* -*-mode: C; fill-column: 77; c-basic-offset: 4; -*- */
|
||||
/*
|
||||
* Copyright 1999 - 2001 by Eric House (xwords@eehouse.org). All rights reserved.
|
||||
/* -*-mode: C; fill-column: 77; c-basic-offset: 4; compile-command: "make ARCH=68K_ONLY MEMDEBUG=TRUE"; -*- */
|
||||
/*
|
||||
* Copyright 1999 - 2006 by Eric House (xwords@eehouse.org). All rights
|
||||
* reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -17,20 +18,22 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef XWFEATURE_FIVEWAY
|
||||
# include <Hs.h>
|
||||
#endif
|
||||
|
||||
#include "prefsdlg.h"
|
||||
#include "callback.h"
|
||||
#include "palmutil.h"
|
||||
#include "xwords4defines.h"
|
||||
#include "newgame.h" /* for drawOneGadget */
|
||||
|
||||
void localPrefsToGlobal( PalmAppGlobals* globals );
|
||||
static void localPrefsToControls( PrefsDlgState* state );
|
||||
static void drawPrefsTypeGadgets( PalmAppGlobals* globals );
|
||||
static void showHidePrefsWidgets( PalmAppGlobals* globals, FormPtr form );
|
||||
static Boolean checkPrefsHiliteGadget( PalmAppGlobals* globals, FormPtr form,
|
||||
EventType* event );
|
||||
static void checkPrefsHiliteGadget( PalmAppGlobals* globals, UInt16 selGadget );
|
||||
static void controlsToLocalPrefs( PrefsDlgState* state );
|
||||
static Boolean dropCtlUnlessNewGame( PalmAppGlobals* globals, XP_U16 id );
|
||||
static XP_Bool ignoredUnlessNewgame( XP_U16 id );
|
||||
|
||||
Boolean
|
||||
PrefsFormHandleEvent( EventPtr event )
|
||||
|
@ -41,6 +44,7 @@ PrefsFormHandleEvent( EventPtr event )
|
|||
FormPtr form;
|
||||
EventType eventToPost;
|
||||
Int16 chosen;
|
||||
XP_U16 selGadget;
|
||||
|
||||
CALLBACK_PROLOGUE();
|
||||
globals = getFormRefcon();
|
||||
|
@ -55,10 +59,6 @@ PrefsFormHandleEvent( EventPtr event )
|
|||
state = globals->prefsDlgState;
|
||||
}
|
||||
|
||||
sizeGadgetsForStrings( FrmGetActiveForm(),
|
||||
getActiveObjectPtr( XW_PREFS_TYPES_LIST_ID ),
|
||||
XW_PREFS_APPWIDE_CHECKBX_ID );
|
||||
|
||||
state->playerBdSizeList =
|
||||
getActiveObjectPtr( XW_PREFS_BDSIZE_LIST_ID );
|
||||
state->phoniesList =
|
||||
|
@ -77,18 +77,32 @@ PrefsFormHandleEvent( EventPtr event )
|
|||
break;
|
||||
|
||||
case penDownEvent:
|
||||
form = FrmGetActiveForm();
|
||||
result = checkPrefsHiliteGadget( globals, form, event );
|
||||
result = penInGadget( event, &selGadget );
|
||||
if ( result ) {
|
||||
checkPrefsHiliteGadget( globals, selGadget );
|
||||
}
|
||||
break;
|
||||
|
||||
case fldEnterEvent:
|
||||
result = dropCtlUnlessNewGame( globals,
|
||||
event->data.fldEnter.fieldID );
|
||||
#ifdef XWFEATURE_FIVEWAY
|
||||
case keyDownEvent:
|
||||
selGadget = getFocusOwner();
|
||||
if ( tryRockerKey( event->data.keyDown.chr, selGadget,
|
||||
XW_PREFS_ALLGAMES_GADGET_ID,
|
||||
XW_PREFS_ONEGAME_GADGET_ID ) ) {
|
||||
checkPrefsHiliteGadget( globals, selGadget );
|
||||
result = XP_TRUE;
|
||||
} else if ( !globals->isNewGame
|
||||
&& vchrRockerCenter == event->data.keyDown.chr ) {
|
||||
result = ignoredUnlessNewgame( selGadget );
|
||||
}
|
||||
break;
|
||||
case ctlEnterEvent:
|
||||
result = dropCtlUnlessNewGame( globals,
|
||||
event->data.ctlSelect.controlID );
|
||||
|
||||
case frmObjectFocusTakeEvent:
|
||||
case frmObjectFocusLostEvent:
|
||||
result = considerGadgetFocus( event, XW_PREFS_ALLGAMES_GADGET_ID,
|
||||
XW_PREFS_ONEGAME_GADGET_ID );
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ctlSelectEvent:
|
||||
result = true;
|
||||
|
@ -147,13 +161,11 @@ PrefsFormHandleEvent( EventPtr event )
|
|||
return result;
|
||||
} /* prefsFormHandleEvent */
|
||||
|
||||
static Boolean
|
||||
dropCtlUnlessNewGame( PalmAppGlobals* globals, XP_U16 id )
|
||||
static XP_Bool
|
||||
ignoredUnlessNewgame( XP_U16 id )
|
||||
{
|
||||
Boolean result = false;
|
||||
|
||||
XP_Bool ignored = XP_FALSE;
|
||||
switch ( id ) {
|
||||
|
||||
case XW_PREFS_NOHINTS_CHECKBOX_ID:
|
||||
case XW_PREFS_BDSIZE_SELECTOR_ID:
|
||||
case XW_PREFS_TIMERON_CHECKBOX_ID:
|
||||
|
@ -161,19 +173,11 @@ dropCtlUnlessNewGame( PalmAppGlobals* globals, XP_U16 id )
|
|||
#ifdef FEATURE_TRAY_EDIT
|
||||
case XW_PREFS_PICKTILES_CHECKBOX_ID:
|
||||
#endif
|
||||
if ( globals->isNewGame ) {
|
||||
break;
|
||||
}
|
||||
result = true;
|
||||
ignored = XP_TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( result ) {
|
||||
beep();
|
||||
}
|
||||
|
||||
return result;
|
||||
} /* dropCtlUnlessNewGame */
|
||||
return ignored;
|
||||
} /* ignoredUnlessNewgame */
|
||||
|
||||
void
|
||||
GlobalPrefsToLocal( PalmAppGlobals* globals )
|
||||
|
@ -328,23 +332,37 @@ controlsToLocalPrefs( PrefsDlgState* state )
|
|||
static void
|
||||
drawPrefsTypeGadgets( PalmAppGlobals* globals )
|
||||
{
|
||||
UInt16 i;
|
||||
ListPtr list = getActiveObjectPtr( XW_PREFS_TYPES_LIST_ID );
|
||||
UInt16 active = globals->prefsDlgState->stateTypeIsGlobal? 0:1;
|
||||
ListPtr list;
|
||||
UInt16 active;
|
||||
|
||||
list = getActiveObjectPtr( XW_PREFS_TYPES_LIST_ID );
|
||||
XP_ASSERT( !!list );
|
||||
XP_ASSERT( !!globals->prefsDlgState );
|
||||
|
||||
for ( i = 0; i < 2; ++i ) {
|
||||
char* text = LstGetSelectionText( list, i );
|
||||
drawOneGadget( i + XW_PREFS_APPWIDE_CHECKBX_ID, text, i==active );
|
||||
}
|
||||
active = globals->prefsDlgState->stateTypeIsGlobal ?
|
||||
XW_PREFS_ALLGAMES_GADGET_ID : XW_PREFS_ONEGAME_GADGET_ID;
|
||||
|
||||
drawGadgetsFromList( list, XW_PREFS_ALLGAMES_GADGET_ID,
|
||||
XW_PREFS_ONEGAME_GADGET_ID, active );
|
||||
#ifdef XWFEATURE_FIVEWAY
|
||||
drawFocusRingOnGadget( XW_PREFS_ALLGAMES_GADGET_ID,
|
||||
XW_PREFS_ONEGAME_GADGET_ID );
|
||||
#endif
|
||||
LOG_RETURN_VOID();
|
||||
} /* drawPrefsTypeGadgets */
|
||||
|
||||
static void
|
||||
doOneSet( FormPtr form, XP_U16 first, XP_U16 last, XP_Bool enable )
|
||||
doOneSet( FormPtr form, XP_U16 first, XP_U16 last, XP_Bool enable,
|
||||
XP_Bool isNewGame )
|
||||
{
|
||||
while ( first <= last ) {
|
||||
disOrEnable( form, first, enable );
|
||||
XP_TriEnable stat = enable? TRI_ENAB_ENABLED : TRI_ENAB_HIDDEN;
|
||||
|
||||
if ( enable && !isNewGame && ignoredUnlessNewgame( first ) ) {
|
||||
stat = TRI_ENAB_DISABLED;
|
||||
}
|
||||
disOrEnableTri( form, first, stat );
|
||||
|
||||
++first;
|
||||
}
|
||||
} /* doOneSet */
|
||||
|
@ -355,12 +373,14 @@ doOneSet( FormPtr form, XP_U16 first, XP_U16 last, XP_Bool enable )
|
|||
static void
|
||||
showHidePrefsWidgets( PalmAppGlobals* globals, FormPtr form )
|
||||
{
|
||||
XP_Bool global = globals->prefsDlgState->stateTypeIsGlobal;
|
||||
|
||||
XP_Bool isGlobal;
|
||||
XP_Bool isNewGame = globals->isNewGame;
|
||||
XP_U16 firstToEnable, lastToEnable, firstToDisable, lastToDisable;
|
||||
|
||||
isGlobal = globals->prefsDlgState->stateTypeIsGlobal;
|
||||
|
||||
/* Need to do the disabling first */
|
||||
if ( global ) {
|
||||
if ( isGlobal ) {
|
||||
firstToEnable = XW_PREFS_FIRST_GLOBAL_ID;
|
||||
lastToEnable = XW_PREFS_LAST_GLOBAL_ID;
|
||||
firstToDisable = XW_PREFS_FIRST_PERGAME_ID;
|
||||
|
@ -372,35 +392,30 @@ showHidePrefsWidgets( PalmAppGlobals* globals, FormPtr form )
|
|||
lastToEnable = XW_PREFS_LAST_PERGAME_ID;
|
||||
}
|
||||
|
||||
doOneSet( form, firstToDisable, lastToDisable, XP_FALSE );
|
||||
doOneSet( form, firstToEnable, lastToEnable, XP_TRUE );
|
||||
doOneSet( form, firstToDisable, lastToDisable, XP_FALSE, isNewGame );
|
||||
doOneSet( form, firstToEnable, lastToEnable, XP_TRUE, isNewGame );
|
||||
|
||||
if ( !global ) {
|
||||
if ( !isGlobal ) {
|
||||
Boolean on = getBooleanCtrl( XW_PREFS_TIMERON_CHECKBOX_ID );
|
||||
disOrEnable( form, XW_PREFS_TIMER_FIELD_ID, on );
|
||||
}
|
||||
} /* showHidePrefsWidgets */
|
||||
|
||||
static Boolean
|
||||
checkPrefsHiliteGadget( PalmAppGlobals* globals, FormPtr form,
|
||||
EventType* event )
|
||||
static void
|
||||
checkPrefsHiliteGadget( PalmAppGlobals* globals, UInt16 selGadget )
|
||||
{
|
||||
FormPtr form = FrmGetActiveForm();
|
||||
Boolean result = false;
|
||||
UInt16 selGadget;
|
||||
|
||||
result = penInGadget( event, &selGadget );
|
||||
if ( result ) {
|
||||
XP_Bool globalChosen = selGadget == XW_PREFS_APPWIDE_CHECKBX_ID;
|
||||
XP_Bool globalChosen = selGadget == XW_PREFS_ALLGAMES_GADGET_ID;
|
||||
XP_LOGF( "%s: selGadget=%d", __FUNCTION__, selGadget );
|
||||
|
||||
result = globalChosen != globals->prefsDlgState->stateTypeIsGlobal;
|
||||
result = globalChosen != globals->prefsDlgState->stateTypeIsGlobal;
|
||||
|
||||
if ( result ) {
|
||||
globals->prefsDlgState->stateTypeIsGlobal = globalChosen;
|
||||
if ( result ) {
|
||||
globals->prefsDlgState->stateTypeIsGlobal = globalChosen;
|
||||
|
||||
showHidePrefsWidgets( globals, form );
|
||||
drawPrefsTypeGadgets( globals );
|
||||
}
|
||||
showHidePrefsWidgets( globals, form );
|
||||
drawPrefsTypeGadgets( globals );
|
||||
}
|
||||
|
||||
return result;
|
||||
} /* checkPrefsHiliteGadget */
|
||||
|
|
|
@ -256,8 +256,8 @@
|
|||
/*
|
||||
* prefs dialog
|
||||
*/
|
||||
#define XW_PREFS_APPWIDE_CHECKBX_ID 2700
|
||||
#define XW_PREFS_ONEGAME_CHECKBX_ID 2701
|
||||
#define XW_PREFS_ALLGAMES_GADGET_ID 2700
|
||||
#define XW_PREFS_ONEGAME_GADGET_ID 2701
|
||||
#define XW_PREFS_TYPES_LIST_ID 2702
|
||||
|
||||
/* global */
|
||||
|
@ -408,8 +408,11 @@
|
|||
# define DMCLOSEDATABASE(d)
|
||||
#endif
|
||||
|
||||
#define kFrmNavHeaderFlagsObjectFocusStartState 0x00000001
|
||||
#define kFrmNavHeaderFlagsAppFocusStartState 0x00000002
|
||||
|
||||
/* versioning stuff */
|
||||
#define XW_PALM_VERSION_STRING "4.2a1"
|
||||
#define XW_PALM_VERSION_STRING "4.2a2"
|
||||
#define CUR_PREFS_VERS 0x0405
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue