mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ユーザーネーム登録処理実装
カーソルの挙動を変更 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@165 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
033e6fee60
commit
339b920f0f
@ -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'A', L'B', L'C', L'D', L'E',
|
||||
L'F', L'G', L'H', L'I', L'J',
|
||||
L'F', L'G', L'H', L'I', L'J', DEL_BUTTON_,
|
||||
L'K', L'L', L'M', L'N', L'O',
|
||||
L'P', L'Q', L'R', L'S', L'T',
|
||||
L'P', L'Q', L'R', L'S', L'T', SPACE_BUTTON_,
|
||||
L'U', L'V', L'W', L'X', L'Y',
|
||||
L'Z', EOM_, EOM_, EOM_, EOM_,
|
||||
L'Z', EOM_, EOM_, EOM_, EOM_, EOM_,
|
||||
|
||||
L'a', L'b', L'c', L'd', L'e',
|
||||
L'f', L'g', L'h', L'i', L'j',
|
||||
L'f', L'g', L'h', L'i', L'j', VAR_BUTTON1_,
|
||||
L'k', L'l', L'm', L'n', L'o',
|
||||
L'p', L'q', L'r', L's', L't',
|
||||
L'p', L'q', L'r', L's', L't', VAR_BUTTON2_,
|
||||
L'u', L'v', L'w', L'x', L'y',
|
||||
L'z', EOM_, EOM_, EOM_, EOM_,
|
||||
L'z', EOM_, EOM_, EOM_, EOM_, EOM_,
|
||||
|
||||
L'0', L'1', L'2', L'3', L'4',
|
||||
L'5', L'6', L'7', L'8', L'9',
|
||||
L'5', L'6', L'7', L'8', L'9', 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_,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user