#include #include #include #include "GUI_config.h" #include "GUI_common.h" #include "CORE_general.h" #include "CORE_fileio.h" #include "gfx/all_gfx.h" /* Possible actions */ #define BACK 0 #define OK 1 #define POWER 2 #define KEYS 3 #define NETWORK 4 /******** 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); /*************************/ /* The connect menu process function */ void gui_config(void){ static config_state_t localstate = CONFIG_INIT; static u8 saveEnv = 0; switch(localstate){ case CONFIG_INIT: if(tmpEnv == NULL){ tmpEnv = (env_t*)malloc(sizeof(env_t)); memcpy(tmpEnv, &Env, sizeof(env_t)); } PA_EasyBgLoad(DSCR, 3, BG_blank); priv_load_sprites(DSCR); localstate = CONFIG_FADEIN; break; case CONFIG_FADEIN: if(fadein(DSCR)) return; localstate = CONFIG_SELECT; commons_move_in(); break; case CONFIG_SELECT: if(priv_selected(POWER)){ Env.next_state = APP_CONFIG_POWER; localstate = CONFIG_MOVEOUT; } else if(priv_selected(KEYS)){ Env.next_state = APP_CONFIG_KEYS; localstate = CONFIG_MOVEOUT; } else if(priv_selected(NETWORK)){ Env.next_state = APP_CONFIG_NET; localstate = CONFIG_MOVEOUT; } else if(priv_selected(BACK)){ // discard changes saveEnv = 0; free(tmpEnv); tmpEnv = NULL; Env.next_state = APP_MAIN; localstate = CONFIG_MOVEOUT; } else if(priv_selected(OK)){ // affect changes saveEnv = 1; Env.next_state = APP_MAIN; localstate = CONFIG_MOVEOUT; } break; case CONFIG_MOVEOUT: commons_move_out(); localstate = CONFIG_FADEOUT; case CONFIG_FADEOUT: if(fadeout(DSCR)) return; localstate = CONFIG_CLEAR; break; case CONFIG_CLEAR: if(saveEnv){ saveEnv = 0; tmpEnv->next_state = Env.next_state; memcpy(&Env, tmpEnv, sizeof(env_t)); free(tmpEnv); tmpEnv = NULL; Env.has_changed = 1; } Env.tmp_has_changed = 0; priv_del_sprites(DSCR); PA_DeleteBg(DSCR, 3); // GFX_CONFIG_dscr localstate = CONFIG_INIT; Env.current_state = Env.next_state; break; } return; } /*------------------------------- Private -------------------------------*/ /* Private sprite loading */ static void priv_load_sprites(u8 screen){ if(Env.tmp_has_changed){ buttons_init(BUTTON_BACK, BUTTON_OK); } else{ button_init_l(BUTTON_BACK); } title_init(TITLE_CONFIG); /* POWER */ PA_LoadSpritePal(screen, 4, (void*)spr_config_power_Pal); PA_CreateSprite(screen, (10*POWER)+1, (void*)SPR_config_power_0_Sprite, OBJ_SIZE_64X64, 1, 4, 16, 48); PA_CreateSprite(screen, (10*POWER)+2, (void*)SPR_config_power_1_Sprite, OBJ_SIZE_64X32, 1, 4, 16, 112); /* KEYS */ PA_LoadSpritePal(screen, 5, (void*)spr_config_keys_Pal); PA_CreateSprite(screen, (10*KEYS)+1, (void*)SPR_config_keys_0_Sprite, OBJ_SIZE_64X64, 1, 5, 96, 48); PA_CreateSprite(screen, (10*KEYS)+2, (void*)SPR_config_keys_1_Sprite, OBJ_SIZE_64X32, 1, 5, 96, 112); /* NETWORK */ PA_LoadSpritePal(screen, 6, (void*)spr_config_network_Pal); PA_CreateSprite(screen, (10*NETWORK)+1, (void*)SPR_config_network_0_Sprite, OBJ_SIZE_64X64, 1, 6, 176, 48); PA_CreateSprite(screen, (10*NETWORK)+2, (void*)SPR_config_network_1_Sprite, OBJ_SIZE_64X32, 1, 6, 176, 112); return; } /* Private sprite deletting */ static void priv_del_sprites(u8 screen){ PA_DeleteSprite(screen, (10*POWER)+1); PA_DeleteSprite(screen, (10*POWER)+2); PA_DeleteSprite(screen, (10*KEYS)+1); PA_DeleteSprite(screen, (10*KEYS)+2); PA_DeleteSprite(screen, (10*NETWORK)+1); PA_DeleteSprite(screen, (10*NETWORK)+2); commons_delete(); return; } /* Private sprite touch Return 1 touched 0 not touched */ static u8 priv_touched(u8 icon){ u8 i = 0; switch(icon){ case POWER: for(i=(10*POWER)+1; i<(10*POWER)+3; i++){ if(PA_SpriteTouched(i) && Stylus.Newpress) return 1; } break; case KEYS: for(i=(10*KEYS)+1; i<(10*KEYS)+3; i++){ if(PA_SpriteTouched(i) && Stylus.Newpress) return 1; } break; case NETWORK: for(i=(10*NETWORK)+1; i<(10*NETWORK)+3; i++){ if(PA_SpriteTouched(i) && Stylus.Newpress) return 1; } break; case BACK: return button_touch_l(); break; case OK: return button_touch_r(); break; } return 0; } /* Is the item selected? Return 1 selected 0 not selected */ static u8 priv_selected(u8 icon){ return priv_touched(icon); }