ユーザーネーム登録処理実装

カーソルの挙動を変更

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@165 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2007-11-14 01:30:29 +00:00
parent 033e6fee60
commit 339b920f0f

View File

@ -22,7 +22,7 @@
// define data---------------------------------- // define data----------------------------------
// ソフトウェアキーボードLCD領域 // ソフトウェアキーボードLCD領域
#define CLIST_LT_X 14 #define CLIST_LT_X 18
#define CLIST_LT_Y 40 #define CLIST_LT_Y 40
#define CANCEL_BUTTON_TOP_X ( 2 * 8 ) #define CANCEL_BUTTON_TOP_X ( 2 * 8 )
@ -46,8 +46,10 @@
#define CANCEL_BUTTON_ (u16)0xe056 #define CANCEL_BUTTON_ (u16)0xe056
#define CODE_BUTTON_BOTTOM_ (u16)0xe057 #define CODE_BUTTON_BOTTOM_ (u16)0xe057
#define CHAR_USCORE L'_'
#define KEY_PER_LINE 11
// カーソルX,Y位置キャラ単位 // 特殊キー配置設定
typedef struct CsrPos { typedef struct CsrPos {
u16 x; // x u16 x; // x
u16 y; // y u16 y; // y
@ -67,10 +69,12 @@ static void SetCommentInit( void );
static int SetCommentMain( void ); static int SetCommentMain( void );
// static variable------------------------------ // static variable------------------------------
// 太りすぎの場合は、多分優先的にワークになっていくであろう部分
static u16 s_csr = 0; static u16 s_csr = 0;
static const u16 *s_pStrSetting[ USER_INFO_MENU_ELEMENT_NUM ]; // メインメニュー用文字テーブルへのポインタリスト static const u16 *s_pStrSetting[ USER_INFO_MENU_ELEMENT_NUM ]; // メインメニュー用文字テーブルへのポインタリスト
static int char_mode = 0; static int char_mode = 0;
static u16 s_key_csr = 0; static u16 s_key_csr = 0;
static TWLNickname s_temp_name;
// const data----------------------------------- // const data-----------------------------------
static const u16 char_tbl[CHAR_LIST_MODE_NUM][CHAR_LIST_CHAR_NUM]; static const u16 char_tbl[CHAR_LIST_MODE_NUM][CHAR_LIST_CHAR_NUM];
@ -130,7 +134,7 @@ static const MenuParam s_settingParam = {
static const u16 *str_button_char[CHAR_LIST_MODE_NUM] = { static const u16 *str_button_char[CHAR_LIST_MODE_NUM] = {
L"かな", L"かな",
L"カナ", L"カナ",
L"ABC", L"英数",
}; };
static u16 next_char_mode[CHAR_LIST_MODE_NUM-1]; static u16 next_char_mode[CHAR_LIST_MODE_NUM-1];
@ -175,19 +179,18 @@ void SetOwnerInfoInit( void )
GX_DispOff(); GX_DispOff();
GXS_DispOff(); GXS_DispOff();
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"USER INFORMATION" ); PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"USER INFORMATION" );
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L"CANCEL" ); PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L"CANCEL" );
SetSoftKeyboardButton(0);
// NITRO設定データのlanguageに応じたメインメニュー構成言語の切り替え // NITRO設定データのlanguageに応じたメインメニュー構成言語の切り替え
for( i = 0; i < USER_INFO_MENU_ELEMENT_NUM; i++ ) { for( i = 0; i < USER_INFO_MENU_ELEMENT_NUM; i++ ) {
s_pStrSetting[ i ] = s_pStrSettingElemTbl[ i ][ TSD_GetLanguage() ]; s_pStrSetting[ i ] = s_pStrSettingElemTbl[ i ][ TSD_GetLanguage() ];
} }
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
DrawMenu( s_csr, &s_settingParam ); DrawMenu( s_csr, &s_settingParam );
PutStringUTF16( 128 , 8*8, TXT_COLOR_CYAN, TSD_GetNickname()->buffer );
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 ); SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
@ -218,7 +221,10 @@ int SetOwnerInfoMain( void )
} }
} }
tp_select = SelectMenuByTP( &s_csr, &s_settingParam ); tp_select = SelectMenuByTP( &s_csr, &s_settingParam );
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
DrawMenu( s_csr, &s_settingParam ); DrawMenu( s_csr, &s_settingParam );
PutStringUTF16( 128 , 8*8, TXT_COLOR_CYAN, TSD_GetNickname()->buffer );
// [CANCEL]ボタン押下チェック // [CANCEL]ボタン押下チェック
if( tpd.disp.touch ) { if( tpd.disp.touch ) {
@ -259,54 +265,100 @@ static void DrawCharKeys( void )
{ {
int l; int l;
u16 code; u16 code;
for( l=0; l<CHAR_LIST_CHAR_NUM; l++ ) for( l=0; l<CHAR_LIST_CHAR_NUM; l++ )
{ {
int color=TXT_COLOR_BLACK; int color=TXT_COLOR_BLACK;
code = char_tbl[char_mode][l]; code = char_tbl[char_mode][l];
if (s_key_csr == l) color = TXT_COLOR_RED; if (s_key_csr == l) color = TXT_COLOR_GREEN;
if(code != EOM_) if(code != EOM_)
{ {
if( (code >= CODE_BUTTON_TOP_) && (code < CODE_BUTTON_BOTTOM_) ) if( (code >= CODE_BUTTON_TOP_) && (code < CODE_BUTTON_BOTTOM_) )
{ {
int x = code - CODE_BUTTON_TOP_; int x = code - CODE_BUTTON_TOP_;
PutStringUTF16( CLIST_LT_X + 64 + 8*8*(x%2) , CLIST_LT_Y + 15*(7+x/2) , color, str_button[x] ); PutStringUTF16( CLIST_LT_X + 15*(l%KEY_PER_LINE) + 7*((l%KEY_PER_LINE)/5) , CLIST_LT_Y + 15*(l/KEY_PER_LINE) , color, str_button[x] );
} }
else else
{ {
u16 s[2]; u16 s[2];
s[0] = code; s[0] = code;
s[1] = 0; s[1] = 0;
PutStringUTF16( CLIST_LT_X + 15*(l%15) + 5*((l/5)%3) , CLIST_LT_Y + 15*(l/15) , color, s ); PutStringUTF16( CLIST_LT_X + 15*(l%KEY_PER_LINE) + 7*((l%KEY_PER_LINE)/5) , CLIST_LT_Y + 15*(l/KEY_PER_LINE) , color, s );
} }
} }
} }
} }
// キーの表示 // 一文字削除
static void DeleteACharacter( void )
{
if(s_temp_name.length > 0) s_temp_name.buffer[--s_temp_name.length] = CHAR_USCORE;
}
// 選択中文字キー・特殊キーで決定した時の挙動
static void PushKeys( u16 code ) static void PushKeys( u16 code )
{ {
if( (code >= CODE_BUTTON_TOP_) && (code < CODE_BUTTON_BOTTOM_) ) if( (code >= CODE_BUTTON_TOP_) && (code < CODE_BUTTON_BOTTOM_) )
{ {
// 特殊キー // 特殊キー
if(code == VAR_BUTTON1_ || code == VAR_BUTTON2_) switch(code)
SetSoftKeyboardButton(next_char_mode[code - VAR_BUTTON1_]); {
case VAR_BUTTON1_:
case VAR_BUTTON2_:
SetSoftKeyboardButton(next_char_mode[code - VAR_BUTTON1_]);
break;
case DEL_BUTTON_:
DeleteACharacter();
break;
case SPACE_BUTTON_:
if(s_temp_name.length < TWL_NICKNAME_LENGTH) s_temp_name.buffer[s_temp_name.length++] = L' ';
break;
case OK_BUTTON_:
TSD_SetFlagNickname( TRUE );// ニックネーム設定完了フラグを立てておく
SVC_CpuClear(0, TSD_GetNickname()->buffer, (TWL_NICKNAME_LENGTH + 1) * 2, 16);// ゼロクリア
TSD_GetNickname()->length = s_temp_name.length;// 長さコピー
SVC_CpuCopy( s_temp_name.buffer, TSD_GetNickname()->buffer, s_temp_name.length * 2, 16 );// 内容コピー
(void)SYSM_WriteTWLSettingsFile();// ファイルへ書き込み
// セーブ後にキャンセル処理と合流
case CANCEL_BUTTON_:
SetOwnerInfoInit();
g_pNowProcess = SetOwnerInfoMain;
break;
default:// unknown code
break;
}
} }
else else
{ {
// 普通キー // 普通キー
if(s_temp_name.length < TWL_NICKNAME_LENGTH) s_temp_name.buffer[s_temp_name.length++] = code;
} }
} }
static void DrawSetNicknameScene( void )
{
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"NICKNAME" );
DrawCharKeys();
PutStringUTF16( 128-60 , 15 , TXT_COLOR_CYAN, s_temp_name.buffer );
}
// ニックネーム編集の初期化 // ニックネーム編集の初期化
static void SetNicknameInit( void ) static void SetNicknameInit( void )
{ {
GX_DispOff(); GX_DispOff();
GXS_DispOff(); GXS_DispOff();
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"NICKNAME" ); SetSoftKeyboardButton(0);
s_key_csr = 0;
DrawCharKeys(); // ニックネーム用テンポラリバッファの初期化
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 ); SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
@ -329,35 +381,35 @@ static int SetNicknameMain( void )
if( pad.trg & PAD_KEY_RIGHT ){ // カーソルの移動 if( pad.trg & PAD_KEY_RIGHT ){ // カーソルの移動
do do
{ {
if(s_key_csr%15 != 14) s_key_csr++; if(s_key_csr%KEY_PER_LINE != KEY_PER_LINE-1) s_key_csr++;
else s_key_csr -= 14; else s_key_csr -= KEY_PER_LINE-1;
if( s_key_csr == CHAR_LIST_CHAR_NUM ) s_key_csr -= s_key_csr%15; 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_); while(char_tbl[char_mode][s_key_csr]==EOM_);
} }
if( pad.trg & PAD_KEY_LEFT ){ if( pad.trg & PAD_KEY_LEFT ){
do do
{ {
if(s_key_csr%15 != 0) s_key_csr--; if(s_key_csr%KEY_PER_LINE != 0) s_key_csr--;
else s_key_csr += 14; else s_key_csr += KEY_PER_LINE-1;
if( s_key_csr & 0x8000 ) s_key_csr = 14; if( s_key_csr & 0x8000 ) s_key_csr = KEY_PER_LINE-1;
} }
while(char_tbl[char_mode][s_key_csr]==EOM_); while(char_tbl[char_mode][s_key_csr]==EOM_);
} }
if( pad.trg & PAD_KEY_DOWN ){ // カーソルの移動 if( pad.trg & PAD_KEY_DOWN ){ // カーソルの移動
do do
{ {
s_key_csr += 15; s_key_csr += KEY_PER_LINE;
if( s_key_csr >= CHAR_LIST_CHAR_NUM ) s_key_csr -= 15*(s_key_csr/15); 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_); while(char_tbl[char_mode][s_key_csr]==EOM_);
} }
if( pad.trg & PAD_KEY_UP ){ if( pad.trg & PAD_KEY_UP ){
do do
{ {
if( s_key_csr < 15 ) s_key_csr += (CHAR_LIST_CHAR_NUM/15)*15; if( s_key_csr < KEY_PER_LINE ) s_key_csr += (CHAR_LIST_CHAR_NUM/KEY_PER_LINE)*KEY_PER_LINE;
else s_key_csr -= 15; else s_key_csr -= KEY_PER_LINE;
if( s_key_csr >= CHAR_LIST_CHAR_NUM ) s_key_csr -= 15; if( s_key_csr >= CHAR_LIST_CHAR_NUM ) s_key_csr -= KEY_PER_LINE;
} }
while(char_tbl[char_mode][s_key_csr]==EOM_); while(char_tbl[char_mode][s_key_csr]==EOM_);
} }
@ -371,16 +423,12 @@ static int SetNicknameMain( void )
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // Aキーが押された if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // Aキーが押された
PushKeys( char_tbl[char_mode][s_key_csr] ); PushKeys( char_tbl[char_mode][s_key_csr] );
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) { }else if( pad.trg & PAD_BUTTON_B ) {
SetOwnerInfoInit(); DeleteACharacter();
g_pNowProcess = SetOwnerInfoMain;
return 0;
} }
if(pad.trg) if(pad.trg || tpd.disp.touch)
{ {// 描画処理……ボタン押したorタッチ時ぐらいで十分
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); DrawSetNicknameScene();
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"NICKNAME" );
DrawCharKeys();
} }
return 0; return 0;
@ -657,92 +705,86 @@ static int SetCommentMain( void )
static const u16 char_tbl[CHAR_LIST_MODE_NUM][CHAR_LIST_CHAR_NUM] = { static const u16 char_tbl[CHAR_LIST_MODE_NUM][CHAR_LIST_CHAR_NUM] = {
{ // ひらがな { // ひらがな
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', DEL_BUTTON_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', SPACE_BUTTON_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', EOM_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', EOM_, L'', EOM_, L'', L'', EOM_, L'', EOM_, L'', VAR_BUTTON1_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', VAR_BUTTON2_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', EOM_, L'', EOM_, L'', L'', EOM_, L'', EOM_, L'', EOM_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', EOM_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', OK_BUTTON_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', EOM_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
EOM_, EOM_, EOM_, EOM_, EOM_, CANCEL_BUTTON_,
EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_,
DEL_BUTTON_, SPACE_BUTTON_, VAR_BUTTON1_, VAR_BUTTON2_, EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_,
OK_BUTTON_, CANCEL_BUTTON_, EOM_, EOM_, EOM_,
}, },
{ // カタカナ { // カタカナ
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', DEL_BUTTON_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', SPACE_BUTTON_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', EOM_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', EOM_, L'', EOM_, L'', L'', EOM_, L'', EOM_, L'', VAR_BUTTON1_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', EOM_, L'', EOM_, L'', L'', EOM_, L'', EOM_, L'', VAR_BUTTON2_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', EOM_, L'', EOM_, L'', L'', EOM_, L'', EOM_, L'', EOM_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', EOM_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', OK_BUTTON_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', EOM_,
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_,
EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_,
DEL_BUTTON_, SPACE_BUTTON_, VAR_BUTTON1_, VAR_BUTTON2_, EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_,
OK_BUTTON_, CANCEL_BUTTON_, EOM_, EOM_, EOM_,
}, },
{ // 英数 { // 英数
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', DEL_BUTTON_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', SPACE_BUTTON_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', EOM_, EOM_, EOM_, EOM_, L'', EOM_, EOM_, EOM_, EOM_, EOM_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', VAR_BUTTON1_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', VAR_BUTTON2_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', EOM_, EOM_, EOM_, EOM_, L'', EOM_, EOM_, EOM_, EOM_, EOM_,
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', L'', L'', L'', L'', L'', EOM_,
L'', EOM_, L'', EOM_, L'', L'', EOM_, L'', EOM_, L'',
L'', EOM_, L'', EOM_, L'', L'', EOM_, L'', EOM_, L'', OK_BUTTON_,
L'', EOM_, L'', EOM_, EOM_, L'', EOM_, L'', EOM_, EOM_,
L'', EOM_, L'', EOM_, L'', L'', EOM_, L'', EOM_, L'', EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_, CANCEL_BUTTON_,
EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_, EOM_,
DEL_BUTTON_, SPACE_BUTTON_, VAR_BUTTON1_, VAR_BUTTON2_, EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_,
OK_BUTTON_, CANCEL_BUTTON_, EOM_, EOM_, EOM_,
}, },
}; };