#include "GUI_config_keys.h" #include "GUI_common.h" #include "CORE_general.h" #include "CORE_turbo_keys.h" #include "gfx/all_gfx.h" #include /* Possible actions */ #define BACK 0 #define OK 1 #define DS2KEY 20 #define T_A 21 #define T_B 22 #define T_X 23 #define T_Y 24 #define T_L 25 #define T_R 26 #define T_START 27 #define T_SELECT 28 #define PALETTE_ON 4 #define PALETTE_OFF 5 /******** PRIVATE ********/ static void priv_load_sprites(u8 screen); static void priv_del_sprites(u8 screen); static u8 priv_touched(u8 icon); static u8 priv_selected(u8 icon); static void priv_do_spr(u8 screen, u8 spr, u8 delete_spr); /*************************/ turbo_keys_t tmpTurbo; u8 tmpDs2key; /* The config_keys menu process function */ void gui_config_keys(void){ static config_keys_state_t localstate = CONFIG_KEYS_INIT; switch(localstate){ case CONFIG_KEYS_INIT: memcpy(&tmpTurbo, &(tmpEnv->turbo), sizeof(turbo_keys_t)); tmpDs2key = tmpEnv->ds2key_compat; PA_EasyBgLoad(DSCR, 3, BG_keys); priv_load_sprites(DSCR); localstate = CONFIG_KEYS_FADEIN; break; case CONFIG_KEYS_FADEIN: if(fadein(DSCR)) return; localstate = CONFIG_KEYS_SELECT; commons_move_in(); break; case CONFIG_KEYS_SELECT: if(priv_selected(BACK)){ Env.next_state = APP_CONFIG; localstate = CONFIG_KEYS_MOVEOUT; } else if(priv_selected(OK)){ memcpy(&(tmpEnv->turbo), &tmpTurbo, sizeof(turbo_keys_t)); tmpEnv->ds2key_compat = tmpDs2key; Env.tmp_has_changed = 1; Env.next_state = APP_CONFIG; localstate = CONFIG_KEYS_MOVEOUT; } else if(priv_selected(DS2KEY)){ tmpDs2key = 1 - tmpDs2key; priv_do_spr(DSCR, DS2KEY, 1); } else if(priv_selected(T_A)){ tmpTurbo.A -= 1; priv_do_spr(DSCR, T_A, 1); } else if(priv_selected(T_B)){ tmpTurbo.B -= 1; priv_do_spr(DSCR, T_B, 1); } else if(priv_selected(T_X)){ tmpTurbo.X -= 1; priv_do_spr(DSCR, T_X, 1); } else if(priv_selected(T_Y)){ tmpTurbo.Y -= 1; priv_do_spr(DSCR, T_Y, 1); } else if(priv_selected(T_L)){ tmpTurbo.L -= 1; priv_do_spr(DSCR, T_L, 1); } else if(priv_selected(T_R)){ tmpTurbo.R -= 1; priv_do_spr(DSCR, T_R, 1); } else if(priv_selected(T_START)){ tmpTurbo.Start -= 1; priv_do_spr(DSCR, T_START, 1); } else if(priv_selected(T_SELECT)){ tmpTurbo.Select -= 1; priv_do_spr(DSCR, T_SELECT, 1); } break; case CONFIG_KEYS_MOVEOUT: commons_move_out(); localstate = CONFIG_KEYS_FADEOUT; case CONFIG_KEYS_FADEOUT: if(fadeout(DSCR)) return; localstate = CONFIG_KEYS_CLEAR; break; case CONFIG_KEYS_CLEAR: priv_del_sprites(DSCR); PA_DeleteBg(DSCR, 3); // GFX_CONFIG_KEYS_dscr localstate = CONFIG_KEYS_INIT; Env.current_state = Env.next_state; break; } return; } /*------------------------------- Private -------------------------------*/ /* Private sprite loading */ static void priv_load_sprites(u8 screen){ buttons_init(BUTTON_BACK, BUTTON_OK); title_init(TITLE_KEYS); PA_LoadSpritePal(screen, PALETTE_ON, (void*)spr_checkbox_on_Pal); PA_LoadSpritePal(screen, PALETTE_OFF, (void*)spr_checkbox_off_Pal); priv_do_spr(screen, DS2KEY, 0); priv_do_spr(screen, T_A, 0); priv_do_spr(screen, T_B, 0); priv_do_spr(screen, T_X, 0); priv_do_spr(screen, T_Y, 0); priv_do_spr(screen, T_L, 0); priv_do_spr(screen, T_R, 0); priv_do_spr(screen, T_START, 0); priv_do_spr(screen, T_SELECT, 0); return; } static void priv_do_spr(u8 screen, u8 spr, u8 delete_spr){ if(delete_spr) PA_DeleteSprite(screen, spr); switch(spr){ case DS2KEY: if(tmpDs2key) PA_CreateSprite(screen, DS2KEY, (void*)SPR_checkbox_on_Sprite, OBJ_SIZE_16X16, 1, PALETTE_ON, 220, 40); else PA_CreateSprite(screen, DS2KEY, (void*)SPR_checkbox_off_Sprite, OBJ_SIZE_16X16, 1, PALETTE_OFF, 220, 40); break; case T_A: if(tmpTurbo.A) PA_CreateSprite(screen, T_A, (void*)SPR_checkbox_on_Sprite, OBJ_SIZE_16X16, 1, PALETTE_ON, 28, 96); else PA_CreateSprite(screen, T_A, (void*)SPR_checkbox_off_Sprite, OBJ_SIZE_16X16, 1, PALETTE_OFF, 28, 96); break; case T_B: if(tmpTurbo.B) PA_CreateSprite(screen, T_B, (void*)SPR_checkbox_on_Sprite, OBJ_SIZE_16X16, 1, PALETTE_ON, 28, 132); else PA_CreateSprite(screen, T_B, (void*)SPR_checkbox_off_Sprite, OBJ_SIZE_16X16, 1, PALETTE_OFF, 28, 132); break; case T_X: if(tmpTurbo.X) PA_CreateSprite(screen, T_X, (void*)SPR_checkbox_on_Sprite, OBJ_SIZE_16X16, 1, PALETTE_ON, 80, 96); else PA_CreateSprite(screen, T_X, (void*)SPR_checkbox_off_Sprite, OBJ_SIZE_16X16, 1, PALETTE_OFF, 80, 96); break; case T_Y: if(tmpTurbo.Y) PA_CreateSprite(screen, T_Y, (void*)SPR_checkbox_on_Sprite, OBJ_SIZE_16X16, 1, PALETTE_ON, 80, 132); else PA_CreateSprite(screen, T_Y, (void*)SPR_checkbox_off_Sprite, OBJ_SIZE_16X16, 1, PALETTE_OFF, 80, 132); break; case T_L: if(tmpTurbo.L) PA_CreateSprite(screen, T_L, (void*)SPR_checkbox_on_Sprite, OBJ_SIZE_16X16, 1, PALETTE_ON, 132, 96); else PA_CreateSprite(screen, T_L, (void*)SPR_checkbox_off_Sprite, OBJ_SIZE_16X16, 1, PALETTE_OFF, 132, 96); break; case T_R: if(tmpTurbo.R) PA_CreateSprite(screen, T_R, (void*)SPR_checkbox_on_Sprite, OBJ_SIZE_16X16, 1, PALETTE_ON, 132, 132); else PA_CreateSprite(screen, T_R, (void*)SPR_checkbox_off_Sprite, OBJ_SIZE_16X16, 1, PALETTE_OFF, 132, 132); break; case T_START: if(tmpTurbo.Start) PA_CreateSprite(screen, T_START, (void*)SPR_checkbox_on_Sprite, OBJ_SIZE_16X16, 1, PALETTE_ON, 228, 96); else PA_CreateSprite(screen, T_START, (void*)SPR_checkbox_off_Sprite, OBJ_SIZE_16X16, 1, PALETTE_OFF, 228, 96); break; case T_SELECT: if(tmpTurbo.Select) PA_CreateSprite(screen, T_SELECT, (void*)SPR_checkbox_on_Sprite, OBJ_SIZE_16X16, 1, PALETTE_ON, 228, 132); else PA_CreateSprite(screen, T_SELECT, (void*)SPR_checkbox_off_Sprite, OBJ_SIZE_16X16, 1, PALETTE_OFF, 228, 132); break; } return; } /* Private sprite deletting */ static void priv_del_sprites(u8 screen){ u8 i = 0; for(i=20; i<=28; i++){ PA_DeleteSprite(screen, i); } commons_delete(); return; } /* Private sprite touch Return 1 touched 0 not touched */ static u8 priv_touched(u8 icon){ switch(icon){ case BACK: return button_touch_l(); break; case OK: return button_touch_r(); break; } return (PA_SpriteTouched(icon) && Stylus.Newpress); } /* Is the item selected? Return 1 selected 0 not selected */ static u8 priv_selected(u8 icon){ return priv_touched(icon); }