TwlIPL/build/systemMenu_RED/MachineSettings/ARM9/src/setOwnerInfo.c
yoshida_teruhisa 91b99f71a7 ROMデータロードを別スレッド化
ロード中に画面白フェードアウトするよう実装

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@190 b08762b0-b915-fc4b-9d8c-17b2551a87ff
2007-11-16 02:17:19 +00:00

888 lines
25 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*---------------------------------------------------------------------------*
Project: TwlIPL
File: ownerInfo.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include <twl.h>
#include "misc.h"
#include "MachineSetting.h"
// define data----------------------------------
// ソフトウェアキーボードLCD領域
#define CLIST_LT_X 23
#define CLIST_LT_Y 50
#define CLIST_MARGIN 14
#define CLIST_KEY_PER_SEGMENT 5
#define CLIST_SEGMENT_INTERVAL 7
#define CANCEL_BUTTON_TOP_X ( 2 * 8 )
#define CANCEL_BUTTON_TOP_Y ( 21 * 8 )
#define CANCEL_BUTTON_BOTTOM_X ( CANCEL_BUTTON_TOP_X + (8 * 8) )
#define CANCEL_BUTTON_BOTTOM_Y ( CANCEL_BUTTON_TOP_Y + (2 * 8) )
#define USER_INFO_MENU_ELEMENT_NUM 4 // ユーザ情報メニューの項目数
#define CHAR_LIST_CHAR_NUM 120
#define CHAR_LIST_MODE_NUM 3
// 特殊キーコード
#define EOM_ (u16)0xe050
#define CODE_BUTTON_TOP_ (u16)0xe051
#define DEL_BUTTON_ (u16)0xe051
#define SPACE_BUTTON_ (u16)0xe052
#define VAR_BUTTON1_ (u16)0xe053
#define VAR_BUTTON2_ (u16)0xe054
#define OK_BUTTON_ (u16)0xe055
#define CANCEL_BUTTON_ (u16)0xe056
#define CODE_BUTTON_BOTTOM_ (u16)0xe057
#define CHAR_USCORE L'_'
#define KEY_PER_LINE 11
#define KEY_START 109
typedef enum NameOrComment
{
NOC_NAME,
NOC_COMMENT
}NameOrComment;
// extern data----------------------------------
// function's prototype-------------------------
static void SetNicknameInit( void );
static int SetNicknameMain( void );
static void SetBirthdayInit( void );
static int SetBirthdayMain( void );
static void SetUserColorInit( void );
static int SetUserColorMain( void );
static void SetCommentInit( void );
static int SetCommentMain( void );
// static variable------------------------------
// 一時的にしか使わない物をstaticにしているので
// 少しでもダイエットしたい時はWork扱いにしてAlloc→Freeしましょう
static u16 s_csr = 0;
static const u16 *s_pStrSetting[ USER_INFO_MENU_ELEMENT_NUM ]; // メインメニュー用文字テーブルへのポインタリスト
static int char_mode = 0;
static u16 s_key_csr = 0;
static u8 s_color_csr = 0;
static BOOL s_birth_csr = FALSE;
static TWLDate s_temp_birthday;
static TWLNickname s_temp_name;
static TWLComment s_temp_comment;
// const data-----------------------------------
static const u16 char_tbl[CHAR_LIST_MODE_NUM][CHAR_LIST_CHAR_NUM];
static const u16 *const s_pStrSettingElemTbl[ USER_INFO_MENU_ELEMENT_NUM ][ TWL_LANG_CODE_MAX ] = {
{
(const u16 *)L"ユーザーネーム",
(const u16 *)L"NICKNAME",
(const u16 *)L"NICKNAME(F)",
(const u16 *)L"NICKNAME(G)",
(const u16 *)L"NICKNAME(I)",
(const u16 *)L"NICKNAME(S)",
},
{
(const u16 *)L"誕生日",
(const u16 *)L"BIRTHDAY",
(const u16 *)L"BIRTHDAY(F)",
(const u16 *)L"BIRTHDAY(G)",
(const u16 *)L"BIRTHDAY(I)",
(const u16 *)L"BIRTHDAY(S)",
},
{
(const u16 *)L"ユーザーカラー",
(const u16 *)L"USER COLOR",
(const u16 *)L"USER COLOR(F)",
(const u16 *)L"USER COLOR(G)",
(const u16 *)L"USER COLOR(I)",
(const u16 *)L"USER COLOR(S)",
},
{
(const u16 *)L"コメント",
(const u16 *)L"COMMENT",
(const u16 *)L"COMMENT(F)",
(const u16 *)L"COMMENT(G)",
(const u16 *)L"COMMENT(I)",
(const u16 *)L"COMMENT(S)",
},
};
static MenuPos s_settingPos[] = {
{ TRUE, 4 * 8, 8 * 8 },
{ TRUE, 4 * 8, 10 * 8 },
{ TRUE, 4 * 8, 12 * 8 },
{ TRUE, 4 * 8, 14 * 8 },
};
static const MenuParam s_settingParam = {
USER_INFO_MENU_ELEMENT_NUM,
TXT_COLOR_BLACK,
TXT_COLOR_GREEN,
TXT_COLOR_RED,
&s_settingPos[ 0 ],
(const u16 **)&s_pStrSetting,
};
static const u16 *str_button_char[CHAR_LIST_MODE_NUM] = {
L"かな",
L"カナ",
L"英数",
};
static u16 next_char_mode[CHAR_LIST_MODE_NUM-1];
static const u16 str_button_del[] = L"DEL";
static const u16 str_button_space[] = L"SPACE";
static const u16 str_button_ok[] = L"OK";
static const u16 str_button_cancel[] = L"CANCEL";
static const u16 *str_button[] = {
(const u16 *)str_button_del,
(const u16 *)str_button_space,
NULL,
NULL,
(const u16 *)str_button_ok,
(const u16 *)str_button_cancel,
};
//======================================================
// オーナー情報編集
//======================================================
static void SetSoftKeyboardButton(int mode)
{
int l;
int count = 0;
for(l=0; l<CHAR_LIST_MODE_NUM ;l++)
{
if(l != mode){
str_button[2+count]=str_button_char[l];
next_char_mode[count] = (u16)l;
count++;
}
}
char_mode = mode;
}
static void DrawOwnerInfoMenuScene( void )
{
u16 tempbuf[TWL_COMMENT_LENGTH+2];
u8 color;
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"USER INFORMATION" );
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"CANCEL" );
// メニュー項目
DrawMenu( s_csr, &s_settingParam );
// ニックネーム
PutStringUTF16( 128 , 8*8, TXT_UCOLOR_G0, TSD_GetNickname()->buffer );
// 誕生日
PrintfSJIS( 128, 10*8, TXT_UCOLOR_G0, "%d%d", TSD_GetBirthday()->month, TSD_GetBirthday()->day);
// カラー
color = TSD_GetUserColor();
PutStringUTF16( 128 , 12*8, TXT_UCOLOR_G0, L"" );
// コメント
SVC_CpuCopy( TSD_GetComment()->buffer, tempbuf, 13 * 2, 16 );
*(tempbuf+13)='\n';
SVC_CpuCopy( TSD_GetComment()->buffer+13, tempbuf+14, 13 * 2, 16 );
*(tempbuf+TWL_COMMENT_LENGTH+1)=0;
PutStringUTF16( 128-78 , 16*8 , TXT_UCOLOR_G0, tempbuf );
}
// オーナー情報編集の初期化
void SetOwnerInfoInit( void )
{
int i;
GX_DispOff();
GXS_DispOff();
// NITRO設定データのlanguageに応じたメインメニュー構成言語の切り替え
for( i = 0; i < USER_INFO_MENU_ELEMENT_NUM; i++ ) {
s_pStrSetting[ i ] = s_pStrSettingElemTbl[ i ][ TSD_GetLanguage() ];
}
DrawOwnerInfoMenuScene();
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
GX_SetVisiblePlane ( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1);
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
GX_DispOn();
GXS_DispOn();
}
// オーナー情報編集メニュー
int SetOwnerInfoMain( void )
{
BOOL tp_select,tp_cancel = FALSE;
ReadTP();
//--------------------------------------
// キー入力処理
//--------------------------------------
if( pad.trg & PAD_KEY_DOWN ){ // カーソルの移動
if( ++s_csr == USER_INFO_MENU_ELEMENT_NUM ) {
s_csr=0;
}
}
if( pad.trg & PAD_KEY_UP ){
if( --s_csr & 0x80 ) {
s_csr=USER_INFO_MENU_ELEMENT_NUM - 1;
}
}
tp_select = SelectMenuByTP( &s_csr, &s_settingParam );
DrawOwnerInfoMenuScene();
// [CANCEL]ボタン押下チェック
if( tpd.disp.touch ) {
tp_cancel = WithinRangeTP( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y,
CANCEL_BUTTON_BOTTOM_X, CANCEL_BUTTON_BOTTOM_Y, &tpd.disp );
}
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐
if( s_settingPos[ s_csr ].enable ) {
switch( s_csr ) {
case 0:
SetNicknameInit();
g_pNowProcess = SetNicknameMain;
break;
case 1:
SetBirthdayInit();
g_pNowProcess = SetBirthdayMain;
break;
case 2:
SetUserColorInit();
g_pNowProcess = SetUserColorMain;
break;
case 3:
SetCommentInit();
g_pNowProcess = SetCommentMain;
break;
}
}
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) {
MachineSettingInit();
return 0;
}
return 0;
}
// ソフトウェアキー関係
// キーの表示
static void DrawCharKeys( void )
{
int l;
u16 code;
for( l=0; l<CHAR_LIST_CHAR_NUM; l++ )
{
int color=TXT_COLOR_BLACK;
code = char_tbl[char_mode][l];
if (s_key_csr == l) color = TXT_COLOR_GREEN;
if(code != EOM_)
{
if( (code >= CODE_BUTTON_TOP_) && (code < CODE_BUTTON_BOTTOM_) )
{
int x = code - CODE_BUTTON_TOP_;
PutStringUTF16( CLIST_LT_X + CLIST_MARGIN*(l%KEY_PER_LINE) + CLIST_SEGMENT_INTERVAL*((l%KEY_PER_LINE)/CLIST_KEY_PER_SEGMENT) ,
CLIST_LT_Y + CLIST_MARGIN*(l/KEY_PER_LINE) , color, str_button[x] );
}
else
{
u16 s[2];
s[0] = code;
s[1] = 0;
PutStringUTF16( CLIST_LT_X + CLIST_MARGIN*(l%KEY_PER_LINE) + CLIST_SEGMENT_INTERVAL*((l%KEY_PER_LINE)/CLIST_KEY_PER_SEGMENT) ,
CLIST_LT_Y + CLIST_MARGIN*(l/KEY_PER_LINE) , color, s );
}
}
}
}
// 一文字削除
static void DeleteACharacter( NameOrComment noc )
{
u16 *buf;
u8 *length;
if(noc == NOC_NAME)
{
buf = s_temp_name.buffer;
length = &s_temp_name.length;
}else if(noc == NOC_COMMENT)
{
buf = s_temp_comment.buffer;
length = &s_temp_comment.length;
}else
{
//unknown
return;
}
if(*length > 0) buf[--(*length)] = CHAR_USCORE;
}
// 選択中文字キー・特殊キーで決定した時の挙動
static void PushKeys( u16 code, NameOrComment noc )
{
u16 *buf;
u8 *length;
u16 *dest;
u8 *destlength;
u16 max_length;
void (*setflag)(BOOL);
if(noc == NOC_NAME)
{
buf = s_temp_name.buffer;
length = &s_temp_name.length;
dest = TSD_GetNickname()->buffer;
destlength = &TSD_GetNickname()->length;
max_length = TWL_NICKNAME_LENGTH;
setflag = TSD_SetFlagNickname;
}else if(noc == NOC_COMMENT)
{
buf = s_temp_comment.buffer;
length = &s_temp_comment.length;
dest = TSD_GetComment()->buffer;
destlength = &TSD_GetComment()->length;
max_length = TWL_COMMENT_LENGTH;
// setflag = TSD_SetFlagComment;
setflag = NULL;
}else
{
//unknown
return;
}
if( (code >= CODE_BUTTON_TOP_) && (code < CODE_BUTTON_BOTTOM_) )
{
// 特殊キー
switch(code)
{
case VAR_BUTTON1_:
case VAR_BUTTON2_:
SetSoftKeyboardButton(next_char_mode[code - VAR_BUTTON1_]);
break;
case DEL_BUTTON_:
DeleteACharacter(noc);
break;
case SPACE_BUTTON_:
if(*length < max_length) buf[(*length)++] = L' ';
break;
case OK_BUTTON_:
if(setflag) setflag(TRUE);// 設定完了フラグを立てておく
SVC_CpuClear(0, dest, (max_length + 1) * 2, 16);// ゼロクリア
*destlength = *length;// 長さコピー
SVC_CpuCopy( buf, dest, (*length) * 2, 16 );// 内容コピー
(void)SYSM_WriteTWLSettingsFile();// ファイルへ書き込み
// セーブ後にキャンセル処理と合流
case CANCEL_BUTTON_:
SetOwnerInfoInit();
g_pNowProcess = SetOwnerInfoMain;
break;
default:// unknown code
break;
}
}
else
{
// 普通キー
if(*length < max_length) buf[(*length)++] = code;
}
}
// PadDetectOnKeyのSelectSomethingByTPで使うSelectSomethingFuncの実装
static BOOL SelectSoftwareKeyFunc( u16 *csr, TPData *tgt )
{
// まずは候補となる座標(カーソル単位)を取得
int csrx = ((tgt->x - CLIST_LT_X) - CLIST_SEGMENT_INTERVAL*(tgt->x / (CLIST_KEY_PER_SEGMENT*CLIST_MARGIN))) / CLIST_MARGIN ;
int csry = (tgt->y - CLIST_LT_Y) / CLIST_MARGIN ;
int csrxy;
NNSG2dTextRect rect;
u16 code;
BOOL ret;
if ( csrx >= KEY_PER_LINE ) csrx = KEY_PER_LINE - 1;
csrxy = csrx + csry * KEY_PER_LINE;
if ( csrxy >= CHAR_LIST_CHAR_NUM) return FALSE;// 明らかにはみ出した
// 候補座標のキーコード取得
code = char_tbl[char_mode][csrxy];
if(code == EOM_) return FALSE;
// 候補座標の領域取得
if( (code >= CODE_BUTTON_TOP_) && (code < CODE_BUTTON_BOTTOM_) )
{
int x = code - CODE_BUTTON_TOP_;
rect = NNS_G2dTextCanvasGetTextRect( &gTextCanvas, str_button[x] );
}
else
{
u16 s[2];
s[0] = code;
s[1] = 0;
// rect = NNS_G2dTextCanvasGetTextRect( &gTextCanvas, s );
// 文字幅じゃかなり判定が厳しい……ギリギリまでとってみる
rect.width = CLIST_MARGIN;
rect.height = CLIST_MARGIN;
}
csrx = CLIST_LT_X + CLIST_MARGIN*(csrxy%KEY_PER_LINE) + CLIST_SEGMENT_INTERVAL*((csrxy%KEY_PER_LINE)/CLIST_KEY_PER_SEGMENT);
csry = CLIST_LT_Y + CLIST_MARGIN*(csrxy/KEY_PER_LINE);
// 候補座標の領域にタッチ座標が含まれているかチェック
ret = WithinRangeTP( csrx, csry, csrx+rect.width, csry+rect.height, tgt );
if(ret)
{
*csr = (u16)csrxy;
}
return ret;
}
// ソフトウェアキー上でのキーパッド及びタッチパッド処理
// 先にReadTPしておくこと。
static void PadDetectOnKey( NameOrComment noc )
{
SelectSomethingFunc func[1];
BOOL tp_select = FALSE;
//--------------------------------------
// キー入力処理
//--------------------------------------
if( pad.trg & PAD_KEY_RIGHT ){ // カーソルの移動
do
{
if(s_key_csr%KEY_PER_LINE != KEY_PER_LINE-1) s_key_csr++;
else s_key_csr -= KEY_PER_LINE-1;
if( s_key_csr == CHAR_LIST_CHAR_NUM ) s_key_csr -= s_key_csr%KEY_PER_LINE;
}
while(char_tbl[char_mode][s_key_csr]==EOM_);
}
if( pad.trg & PAD_KEY_LEFT ){
do
{
if(s_key_csr%KEY_PER_LINE != 0) s_key_csr--;
else s_key_csr += KEY_PER_LINE-1;
if( s_key_csr & 0x8000 ) s_key_csr = KEY_PER_LINE-1;
}
while(char_tbl[char_mode][s_key_csr]==EOM_);
}
if( pad.trg & PAD_KEY_DOWN ){ // カーソルの移動
do
{
s_key_csr += KEY_PER_LINE;
if( s_key_csr >= CHAR_LIST_CHAR_NUM ) s_key_csr -= KEY_PER_LINE*(s_key_csr/KEY_PER_LINE);
}
while(char_tbl[char_mode][s_key_csr]==EOM_);
}
if( pad.trg & PAD_KEY_UP ){
do
{
if( s_key_csr < KEY_PER_LINE ) s_key_csr += (CHAR_LIST_CHAR_NUM/KEY_PER_LINE)*KEY_PER_LINE;
else s_key_csr -= KEY_PER_LINE;
if( s_key_csr >= CHAR_LIST_CHAR_NUM ) s_key_csr -= KEY_PER_LINE;
}
while(char_tbl[char_mode][s_key_csr]==EOM_);
}
func[0] = (SelectSomethingFunc)SelectSoftwareKeyFunc;
tp_select = SelectSomethingByTP(&s_key_csr, func, 1 );
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // キーが押された
PushKeys( char_tbl[char_mode][s_key_csr], noc );
}else if( pad.trg & PAD_BUTTON_B ) {
DeleteACharacter(noc);
}
}
// ニックネーム編集画面の描画処理
static void DrawSetNicknameScene( void )
{
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"NICKNAME" );
PutStringUTF16( 128-60 , 21 , TXT_UCOLOR_G0, s_temp_name.buffer );
DrawCharKeys();
}
// ニックネーム編集の初期化
static void SetNicknameInit( void )
{
GX_DispOff();
GXS_DispOff();
SetSoftKeyboardButton(0);
s_key_csr = KEY_START;
// ニックネーム用テンポラリバッファの初期化
s_temp_name.length = TSD_GetNickname()->length;
SVC_CpuClear(CHAR_USCORE, s_temp_name.buffer, TWL_NICKNAME_LENGTH * 2, 16);
SVC_CpuCopy( TSD_GetNickname()->buffer, s_temp_name.buffer, s_temp_name.length * 2, 16 );
s_temp_name.buffer[TWL_NICKNAME_LENGTH] = 0;
DrawSetNicknameScene();
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
GX_SetVisiblePlane ( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1);
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
GX_DispOn();
GXS_DispOn();
}
// ニックネーム編集メイン
static int SetNicknameMain( void )
{
ReadTP();
PadDetectOnKey(NOC_NAME);
// 描画処理
DrawSetNicknameScene();
return 0;
}
static void DrawSetBirthdayScene( void )
{
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"BIRTHDAY" );
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"CANCEL" );
PutStringUTF16( 128-36+16, 12*8, TXT_COLOR_BLACK, (const u16 *)L"月   日" );
PrintfSJIS( 128-36, 12*8, (s_birth_csr ? TXT_COLOR_GREEN : TXT_COLOR_BLACK), "%d", s_temp_birthday.month / 10);
PrintfSJIS( 128-28, 12*8, (s_birth_csr ? TXT_COLOR_GREEN : TXT_COLOR_BLACK), "%d", s_temp_birthday.month % 10);
PrintfSJIS( 128+12, 12*8, (!s_birth_csr ? TXT_COLOR_GREEN : TXT_COLOR_BLACK), "%d", s_temp_birthday.day / 10);
PrintfSJIS( 128+20, 12*8, (!s_birth_csr ? TXT_COLOR_GREEN : TXT_COLOR_BLACK), "%d", s_temp_birthday.day % 10);
}
// 誕生日編集の初期化
static void SetBirthdayInit( void )
{
int i;
GX_DispOff();
GXS_DispOff();
s_temp_birthday.month = TSD_GetBirthday()->month;
s_temp_birthday.day = TSD_GetBirthday()->day;
// NITRO設定データのlanguageに応じたメインメニュー構成言語の切り替え
for( i = 0; i < USER_INFO_MENU_ELEMENT_NUM; i++ ) {
s_pStrSetting[ i ] = s_pStrSettingElemTbl[ i ][ TSD_GetLanguage() ];
}
DrawSetBirthdayScene();
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
GX_SetVisiblePlane ( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1);
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
GX_DispOn();
GXS_DispOn();
}
// 誕生日編集メイン
static int SetBirthdayMain( void )
{
u8 maxday;
BOOL tp_cancel = FALSE;
ReadTP();
//--------------------------------------
// キー入力処理
//--------------------------------------
if( pad.trg & PAD_KEY_DOWN ){ // カーソルの移動
(*(s_birth_csr ? &s_temp_birthday.month : &s_temp_birthday.day))--;
}
if( pad.trg & PAD_KEY_UP ){
(*(s_birth_csr ? &s_temp_birthday.month : &s_temp_birthday.day))++;
}
if( pad.trg & (PAD_KEY_RIGHT | PAD_KEY_LEFT)){
s_birth_csr = !s_birth_csr;
}
// 日付チェック
if( s_temp_birthday.month == 0 ) s_temp_birthday.month = 12;
if( s_temp_birthday.month == 13 ) s_temp_birthday.month = 1;
maxday = (u8)SYSM_GetDayNum( 2000, s_temp_birthday.month );
if( s_temp_birthday.day == 0 ) s_temp_birthday.day = maxday;
if( s_temp_birthday.day > maxday ) s_temp_birthday.day = 1;
// [CANCEL]ボタン押下チェック
if( tpd.disp.touch ) {
tp_cancel = WithinRangeTP( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y,
CANCEL_BUTTON_BOTTOM_X, CANCEL_BUTTON_BOTTOM_Y, &tpd.disp );
}
DrawSetBirthdayScene();
if( pad.trg & PAD_BUTTON_A ) {
TSD_SetBirthday(&s_temp_birthday);
TSD_SetFlagBirthday( TRUE );
(void)SYSM_WriteTWLSettingsFile();// ファイルへ書き込み
SetOwnerInfoInit();
g_pNowProcess = SetOwnerInfoMain;
return 0;
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) {
SetOwnerInfoInit();
g_pNowProcess = SetOwnerInfoMain;
return 0;
}
return 0;
}
static void DrawColorSample( void )
{
int l;
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"USER COLOR" );
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"CANCEL" );
for(l=0;l<16;l++) //16色
{
PutStringUTF16( 88 + 24 * (l%4), 54 + 24 * (l/4), TXT_UCOLOR_GRAY + l, (const u16 *)L"" );
}
for(l=0;l<4;l++)
{
PutStringUTF16( 83 + 24 * (s_color_csr%4) + 10*(l%2), 49 + 24 * (s_color_csr/4) + 10*(l/2), TXT_UCOLOR_G0, (const u16 *)L"" );
}
}
// ユーザーカラー編集の初期化
static void SetUserColorInit( void )
{
GX_DispOff();
GXS_DispOff();
DrawColorSample();
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
s_color_csr = TSD_GetUserColor();
GX_SetVisiblePlane ( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1);
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
GX_DispOn();
GXS_DispOn();
}
// ユーザーカラー編集メイン
static int SetUserColorMain( void )
{
BOOL tp_cancel = FALSE;
ReadTP();
//--------------------------------------
// キー入力処理
//--------------------------------------
if( pad.trg & PAD_KEY_DOWN ){ // カーソルの移動
s_color_csr += 4;
if(s_color_csr >= 16) s_color_csr -= 16;
}
if( pad.trg & PAD_KEY_UP ){
if(s_color_csr < 4) s_color_csr += 16;
s_color_csr -= 4;
}
if( pad.trg & PAD_KEY_RIGHT ){
s_color_csr += 1;
if(s_color_csr%4 == 0) s_color_csr -= 4;
}
if( pad.trg & PAD_KEY_LEFT ){
if(s_color_csr%4 == 0) s_color_csr += 4;
s_color_csr -= 1;
}
// [CANCEL]ボタン押下チェック
if( tpd.disp.touch ) {
tp_cancel = WithinRangeTP( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y,
CANCEL_BUTTON_BOTTOM_X, CANCEL_BUTTON_BOTTOM_Y, &tpd.disp );
}
DrawColorSample();
if( ( pad.trg & PAD_BUTTON_A ) ) { // 色決定
TSD_SetUserColor( (u8 )s_color_csr );
TSD_SetFlagUserColor( TRUE );
(void)SYSM_WriteTWLSettingsFile();// ファイルへ書き込み
SetOwnerInfoInit();
g_pNowProcess = SetOwnerInfoMain;
return 0;
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) {
ChangeUserColor( TSD_GetUserColor() ); // パレット色を元にもどす
SetOwnerInfoInit();
g_pNowProcess = SetOwnerInfoMain;
return 0;
}
if(pad.trg || tpd.disp.touch)
{// 描画処理……ボタン押したorタッチ時ぐらいで十分
ChangeUserColor( s_color_csr );
DrawColorSample();
}
return 0;
}
// コメント編集画面の描画処理
static void DrawSetCommentScene( void )
{
u16 tempbuf[TWL_COMMENT_LENGTH+2];
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"COMMENT" );
SVC_CpuCopy( s_temp_comment.buffer, tempbuf, 13 * 2, 16 );
*(tempbuf+13)='\n';
SVC_CpuCopy( s_temp_comment.buffer+13, tempbuf+14, 13 * 2, 16 );
*(tempbuf+TWL_COMMENT_LENGTH+1)=0;
PutStringUTF16( 128-78 , 15 , TXT_UCOLOR_G0, tempbuf );
DrawCharKeys();
}
// コメント編集の初期化
static void SetCommentInit( void )
{
GX_DispOff();
GXS_DispOff();
SetSoftKeyboardButton(0);
s_key_csr = KEY_START;
// コメント用テンポラリバッファの初期化
s_temp_comment.length = TSD_GetComment()->length;
SVC_CpuClear(CHAR_USCORE, s_temp_comment.buffer, TWL_COMMENT_LENGTH * 2, 16);
SVC_CpuCopy( TSD_GetComment()->buffer, s_temp_comment.buffer, s_temp_comment.length * 2, 16 );
s_temp_comment.buffer[TWL_COMMENT_LENGTH] = 0;
DrawSetCommentScene();
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
GX_SetVisiblePlane ( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1);
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
GX_DispOn();
GXS_DispOn();
}
// コメント編集メイン
static int SetCommentMain( void )
{
ReadTP();
PadDetectOnKey(NOC_COMMENT);
// 描画処理
DrawSetCommentScene();
return 0;
}
//======================================================
// ニックネーム入力用キャラテーブル
//======================================================
static const u16 char_tbl[CHAR_LIST_MODE_NUM][CHAR_LIST_CHAR_NUM] = {
{ // ひらがな
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', DEL_BUTTON_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', SPACE_BUTTON_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', EOM_,
L'', L'', L'', L'', L'',
L'', EOM_, L'', EOM_, L'', VAR_BUTTON1_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', VAR_BUTTON2_,
L'', L'', L'', L'', L'',
L'', EOM_, L'', EOM_, L'', EOM_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', EOM_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', OK_BUTTON_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', EOM_,
L'', L'', L'', L'', L'',
EOM_, EOM_, EOM_, EOM_, EOM_, CANCEL_BUTTON_,
EOM_, EOM_, EOM_, EOM_, EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_,
},
{ // カタカナ
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', DEL_BUTTON_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', SPACE_BUTTON_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', EOM_,
L'', L'', L'', L'', L'',
L'', EOM_, L'', EOM_, L'', VAR_BUTTON1_,
L'', L'', L'', L'', L'',
L'', EOM_, L'', EOM_, L'', VAR_BUTTON2_,
L'', L'', L'', L'', L'',
L'', EOM_, L'', EOM_, L'', EOM_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', EOM_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', OK_BUTTON_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', EOM_,
L'', L'', L'', L'', EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_, CANCEL_BUTTON_,
EOM_, EOM_, EOM_, EOM_, EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_,
},
{ // 英数
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', DEL_BUTTON_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', SPACE_BUTTON_,
L'', L'', L'', L'', L'',
L'', EOM_, EOM_, EOM_, EOM_, EOM_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', VAR_BUTTON1_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', VAR_BUTTON2_,
L'', L'', L'', L'', L'',
L'', EOM_, EOM_, EOM_, EOM_, EOM_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', EOM_,
L'', EOM_, L'', EOM_, L'',
L'', EOM_, L'', EOM_, L'', OK_BUTTON_,
L'', EOM_, L'', EOM_, EOM_,
L'', EOM_, L'', EOM_, L'', EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_, CANCEL_BUTTON_,
EOM_, EOM_, EOM_, EOM_, EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_,
},
};