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

カーソルの挙動を変更

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----------------------------------
// ソフトウェアキーボードLCD領域
#define CLIST_LT_X 14
#define CLIST_LT_X 18
#define CLIST_LT_Y 40
#define CANCEL_BUTTON_TOP_X ( 2 * 8 )
@ -46,8 +46,10 @@
#define CANCEL_BUTTON_ (u16)0xe056
#define CODE_BUTTON_BOTTOM_ (u16)0xe057
#define CHAR_USCORE L'_'
#define KEY_PER_LINE 11
// カーソルX,Y位置キャラ単位
// 特殊キー配置設定
typedef struct CsrPos {
u16 x; // x
u16 y; // y
@ -67,10 +69,12 @@ static void SetCommentInit( void );
static int SetCommentMain( void );
// static variable------------------------------
// 太りすぎの場合は、多分優先的にワークになっていくであろう部分
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 TWLNickname s_temp_name;
// const data-----------------------------------
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] = {
L"かな",
L"カナ",
L"ABC",
L"英数",
};
static u16 next_char_mode[CHAR_LIST_MODE_NUM-1];
@ -175,19 +179,18 @@ void SetOwnerInfoInit( void )
GX_DispOff();
GXS_DispOff();
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
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" );
SetSoftKeyboardButton(0);
// NITRO設定データのlanguageに応じたメインメニュー構成言語の切り替え
for( i = 0; i < USER_INFO_MENU_ELEMENT_NUM; i++ ) {
s_pStrSetting[ i ] = s_pStrSettingElemTbl[ i ][ TSD_GetLanguage() ];
}
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
DrawMenu( s_csr, &s_settingParam );
PutStringUTF16( 128 , 8*8, TXT_COLOR_CYAN, TSD_GetNickname()->buffer );
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
@ -218,7 +221,10 @@ int SetOwnerInfoMain( void )
}
}
tp_select = SelectMenuByTP( &s_csr, &s_settingParam );
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
DrawMenu( s_csr, &s_settingParam );
PutStringUTF16( 128 , 8*8, TXT_COLOR_CYAN, TSD_GetNickname()->buffer );
// [CANCEL]ボタン押下チェック
if( tpd.disp.touch ) {
@ -259,54 +265,100 @@ 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_RED;
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 + 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
{
u16 s[2];
s[0] = code;
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 )
{
if( (code >= CODE_BUTTON_TOP_) && (code < CODE_BUTTON_BOTTOM_) )
{
// 特殊キー
if(code == VAR_BUTTON1_ || code == VAR_BUTTON2_)
SetSoftKeyboardButton(next_char_mode[code - VAR_BUTTON1_]);
switch(code)
{
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
{
// 普通キー
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 )
{
GX_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 );
@ -329,35 +381,35 @@ static int SetNicknameMain( void )
if( pad.trg & PAD_KEY_RIGHT ){ // カーソルの移動
do
{
if(s_key_csr%15 != 14) s_key_csr++;
else s_key_csr -= 14;
if( s_key_csr == CHAR_LIST_CHAR_NUM ) s_key_csr -= s_key_csr%15;
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%15 != 0) s_key_csr--;
else s_key_csr += 14;
if( s_key_csr & 0x8000 ) s_key_csr = 14;
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 += 15;
if( s_key_csr >= CHAR_LIST_CHAR_NUM ) s_key_csr -= 15*(s_key_csr/15);
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 < 15 ) s_key_csr += (CHAR_LIST_CHAR_NUM/15)*15;
else s_key_csr -= 15;
if( s_key_csr >= CHAR_LIST_CHAR_NUM ) s_key_csr -= 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 -= 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_);
}
@ -371,16 +423,12 @@ static int SetNicknameMain( void )
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // Aキーが押された
PushKeys( char_tbl[char_mode][s_key_csr] );
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) {
SetOwnerInfoInit();
g_pNowProcess = SetOwnerInfoMain;
return 0;
}else if( pad.trg & PAD_BUTTON_B ) {
DeleteACharacter();
}
if(pad.trg)
{
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"NICKNAME" );
DrawCharKeys();
if(pad.trg || tpd.disp.touch)
{// 描画処理……ボタン押したorタッチ時ぐらいで十分
DrawSetNicknameScene();
}
return 0;
@ -657,92 +705,86 @@ static int SetCommentMain( void )
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'', DEL_BUTTON_,
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'', EOM_,
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'', VAR_BUTTON2_,
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'', EOM_,
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'', EOM_,
L'', L'', L'', L'', L'',
EOM_, EOM_, EOM_, EOM_, EOM_, CANCEL_BUTTON_,
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'', DEL_BUTTON_,
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'', EOM_,
L'', L'', L'', L'', L'',
L'', EOM_, L'', EOM_, L'',
L'', EOM_, L'', EOM_, L'', VAR_BUTTON1_,
L'', L'', L'', L'', L'',
L'', EOM_, L'', EOM_, L'',
L'', EOM_, L'', EOM_, L'', VAR_BUTTON2_,
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'', EOM_,
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'', EOM_,
L'', L'', L'', L'', EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_, CANCEL_BUTTON_,
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'', DEL_BUTTON_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', SPACE_BUTTON_,
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'', VAR_BUTTON1_,
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'',
L'', L'', L'', L'', L'', VAR_BUTTON2_,
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'', EOM_,
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_, L'',
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_,
DEL_BUTTON_, SPACE_BUTTON_, VAR_BUTTON1_, VAR_BUTTON2_, EOM_,
EOM_, EOM_, EOM_, EOM_, EOM_,
OK_BUTTON_, CANCEL_BUTTON_, EOM_, EOM_, EOM_,
},
};