diff --git a/sakura_core/Funccode_x.hsrc b/sakura_core/Funccode_x.hsrc index 5f76c32fac..0a666a8c7d 100644 --- a/sakura_core/Funccode_x.hsrc +++ b/sakura_core/Funccode_x.hsrc @@ -158,6 +158,8 @@ F_1PageDown = 30343, //1ページダウン なし F_GOFILETOP = 30350, //ファイルの先頭に移動 なし F_GOFILEEND = 30351, //ファイルの最後に移動 なし F_CURLINECENTER = 30360, //カーソル行をウィンドウ中央へ なし +F_CURLINETOP = 30361, //カーソル行をウィンドウ上部へ なし +F_CURLINEBOTTOM = 30362, //カーソル行をウィンドウ下部へ なし F_JUMPHIST_PREV = 30370, //移動履歴: 前へ なし F_JUMPHIST_NEXT = 30371, //移動履歴: 次へ なし F_JUMPHIST_SET = 30372, //現在位置を移動履歴に登録 なし diff --git a/sakura_core/cmd/CViewCommander.cpp b/sakura_core/cmd/CViewCommander.cpp index 7f9d14f057..1835916ed0 100644 --- a/sakura_core/cmd/CViewCommander.cpp +++ b/sakura_core/cmd/CViewCommander.cpp @@ -294,6 +294,8 @@ BOOL CViewCommander::HandleCommand( case F_GOFILETOP: Command_GOFILETOP( m_pCommanderView->GetSelectionInfo().m_bSelectingLock ); break; //ファイルの先頭に移動 case F_GOFILEEND: Command_GOFILEEND( m_pCommanderView->GetSelectionInfo().m_bSelectingLock ); break; //ファイルの最後に移動 case F_CURLINECENTER: Command_CURLINECENTER(); break; /* カーソル行をウィンドウ中央へ */ + case F_CURLINETOP: Command_CURLINETOP(); break; /* カーソル行をウィンドウ上部へ */ + case F_CURLINEBOTTOM: Command_CURLINEBOTTOM(); break; /* カーソル行をウィンドウ下部へ */ case F_JUMPHIST_PREV: Command_JUMPHIST_PREV(); break; //移動履歴: 前へ case F_JUMPHIST_NEXT: Command_JUMPHIST_NEXT(); break; //移動履歴: 次へ case F_JUMPHIST_SET: Command_JUMPHIST_SET(); break; //現在位置を移動履歴に登録 diff --git a/sakura_core/cmd/CViewCommander.h b/sakura_core/cmd/CViewCommander.h index 5086df73e1..b090a54c74 100644 --- a/sakura_core/cmd/CViewCommander.h +++ b/sakura_core/cmd/CViewCommander.h @@ -176,6 +176,8 @@ class CViewCommander{ void Command_GOFILETOP( bool bSelect ); /* ファイルの先頭に移動 */ void Command_GOFILEEND( bool bSelect ); /* ファイルの最後に移動 */ void Command_CURLINECENTER( void ); /* カーソル行をウィンドウ中央へ */ + void Command_CURLINETOP( void ); /* カーソル行をウィンドウ上部へ */ + void Command_CURLINEBOTTOM( void ); /* カーソル行をウィンドウ下部へ */ void Command_JUMPHIST_PREV(void); // 移動履歴: 前へ void Command_JUMPHIST_NEXT(void); // 移動履歴: 次へ void Command_JUMPHIST_SET(void); // 現在位置を移動履歴に登録 @@ -401,6 +403,7 @@ class CViewCommander{ /* その他 */ private: + void MoveViewTopLine(CLayoutInt nViewTopLine); void AlertNotFound(HWND hwnd, bool bReplaceAll, LPCWSTR format, ...); void DelCharForOverwrite(const wchar_t* pszInput, int nLen); // 上書き用の一文字削除 // 2009.04.11 ryoji bool Sub_PreProcTagJumpByTagsFile( WCHAR* szCurrentPath, int count ); // タグジャンプの前処理 diff --git a/sakura_core/cmd/CViewCommander_Cursor.cpp b/sakura_core/cmd/CViewCommander_Cursor.cpp index 08426722d8..34dbc0eab6 100644 --- a/sakura_core/cmd/CViewCommander_Cursor.cpp +++ b/sakura_core/cmd/CViewCommander_Cursor.cpp @@ -826,23 +826,47 @@ void CViewCommander::Command_GOFILEEND( bool bSelect ) } } -/* カーソル行をウィンドウ中央へ */ -void CViewCommander::Command_CURLINECENTER( void ) +/* nViewTopLineをウィンドウの上部へ */ +void CViewCommander::MoveViewTopLine(CLayoutInt nViewTopLine) { - CLayoutInt nViewTopLine; - nViewTopLine = GetCaret().GetCaretLayoutPos().GetY2() - ( m_pCommanderView->GetTextArea().m_nViewRowNum / 2 ); - // sui 02/08/09 - if( 0 > nViewTopLine ) nViewTopLine = CLayoutInt(0); - + if (0 > nViewTopLine) nViewTopLine = CLayoutInt(0); + CLayoutInt nScrollLines = nViewTopLine - m_pCommanderView->GetTextArea().GetViewTopLine(); //Sep. 11, 2004 genta 同期用に行数を記憶 - m_pCommanderView->GetTextArea().SetViewTopLine( nViewTopLine ); + m_pCommanderView->GetTextArea().SetViewTopLine(nViewTopLine); /* フォーカス移動時の再描画 */ m_pCommanderView->RedrawAll(); // sui 02/08/09 // Sep. 11, 2004 genta 同期スクロールの関数化 - m_pCommanderView->SyncScrollV( nScrollLines ); + m_pCommanderView->SyncScrollV(nScrollLines); +} + +/* カーソル行をウィンドウ中央へ */ +void CViewCommander::Command_CURLINECENTER( void ) +{ + CLayoutInt nViewTopLine; + nViewTopLine = GetCaret().GetCaretLayoutPos().GetY2() - ( m_pCommanderView->GetTextArea().m_nViewRowNum / 2 ); + + MoveViewTopLine(nViewTopLine); +} + +/* カーソル行をウィンドウ上部へ */ +void CViewCommander::Command_CURLINETOP(void) +{ + CLayoutInt nViewTopLine; + nViewTopLine = GetCaret().GetCaretLayoutPos().GetY2(); + + MoveViewTopLine(nViewTopLine); +} + +/* カーソル行をウィンドウ下部へ */ +void CViewCommander::Command_CURLINEBOTTOM(void) +{ + CLayoutInt nViewTopLine; + nViewTopLine = GetCaret().GetCaretLayoutPos().GetY2() - (m_pCommanderView->GetTextArea().m_nViewRowNum); + + MoveViewTopLine(nViewTopLine); } // 移動履歴を前へたどる diff --git a/sakura_core/func/Funccode.cpp b/sakura_core/func/Funccode.cpp index 4222283538..45dfa4bf4f 100644 --- a/sakura_core/func/Funccode.cpp +++ b/sakura_core/func/Funccode.cpp @@ -182,6 +182,8 @@ const EFunctionCode pnFuncList_Move[] = { //Oct. 16, 2000 JEPRO 変数名変更( F_GOFILETOP , //ファイルの先頭に移動 F_GOFILEEND , //ファイルの最後に移動 F_CURLINECENTER , //カーソル行をウィンドウ中央へ + F_CURLINETOP , //カーソル行をウィンドウ上部へ + F_CURLINEBOTTOM , //カーソル行をウィンドウ下部へ F_JUMP_DIALOG , //指定行ヘジャンプ //Sept. 17, 2000 JEPRO コマンド本家は「検索系」 F_JUMP_SRCHSTARTPOS , //検索開始位置へ戻る // 02/06/26 ai コマンド本家は「検索系」 F_JUMPHIST_PREV , //移動履歴: 前へ diff --git a/sakura_core/macro/CSMacroMgr.cpp b/sakura_core/macro/CSMacroMgr.cpp index 2be7b13953..8dc1cc7d76 100644 --- a/sakura_core/macro/CSMacroMgr.cpp +++ b/sakura_core/macro/CSMacroMgr.cpp @@ -131,6 +131,8 @@ MacroFuncInfo CSMacroMgr::m_MacroFuncInfoCommandArr[] = {F_GOFILETOP, LTEXT("GoFileTop"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //ファイルの先頭に移動 {F_GOFILEEND, LTEXT("GoFileEnd"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //ファイルの最後に移動 {F_CURLINECENTER, LTEXT("CurLineCenter"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //カーソル行をウィンドウ中央へ + {F_CURLINETOP, LTEXT("CurLineTop"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //カーソル行をウィンドウ上部へ + {F_CURLINEBOTTOM, LTEXT("CurLineBottom"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //カーソル行をウィンドウ下部へ {F_JUMPHIST_PREV, LTEXT("MoveHistPrev"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //移動履歴: 前へ {F_JUMPHIST_NEXT, LTEXT("MoveHistNext"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //移動履歴: 次へ {F_JUMPHIST_SET, LTEXT("MoveHistSet"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //現在位置を移動履歴に登録 @@ -972,6 +974,8 @@ BOOL CSMacroMgr::CanFuncIsKeyMacro( int nFuncID ) case F_WORDLEFT ://単語の左端に移動 case F_WORDRIGHT ://単語の右端に移動 case F_CURLINECENTER ://カーソル行をウィンドウ中央へ + case F_CURLINETOP ://カーソル行をウィンドウ上部へ + case F_CURLINEBOTTOM ://カーソル行をウィンドウ下部へ case F_JUMPHIST_PREV ://移動履歴: 前へ case F_JUMPHIST_NEXT ://移動履歴: 次へ case F_JUMPHIST_SET ://現在位置を移動履歴に登録 diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 5293ec3eca..4e25b13a89 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -2374,6 +2374,8 @@ END STRINGTABLE DISCARDABLE BEGIN F_CURLINECENTER "カーソル行をウィンドウ中央へ" + F_CURLINETOP "カーソル行をウィンドウ上部へ" + F_CURLINEBOTTOM "カーソル行をウィンドウ下部へ" END STRINGTABLE DISCARDABLE diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 35301ddbe8..fd94de9152 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -2379,6 +2379,8 @@ END STRINGTABLE DISCARDABLE BEGIN F_CURLINECENTER "Center Current Line" + F_CURLINETOP "Top Current Line" + F_CURLINEBOTTOM "Bottom Current Line" END STRINGTABLE DISCARDABLE