⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ceditview_command.cpp

📁 日本的开源编辑器源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
							m_nSelectLineTo,		/* 範囲選択終了行 */
							m_nSelectColmTo			/* 範囲選択終了桁 */
						);
						/* 現在の選択範囲を非選択状態に戻す */
						DisableSelectArea( TRUE );
						/* カーソルを選択終了位置に移動 */
						MoveCursor( rcSel.right, rcSel.bottom, TRUE );
						m_nCaretPosX_Prev = m_nCaretPosX;
					}else{
						nPosX = m_nSelectColmTo;
						nPosY = m_nSelectLineTo;

						/* 現在の選択範囲を非選択状態に戻す */
						DisableSelectArea( TRUE );
						if( nPosY >= m_pcEditDoc->m_cLayoutMgr.GetLineCount() ){
							/* ファイルの最後に移動 */
							Command_GOFILEEND(FALSE);
						}else{
							/* カーソルを選択終了位置に移動 */
							MoveCursor( nPosX, nPosY, TRUE );
							m_nCaretPosX_Prev = m_nCaretPosX;
						}
					}
					goto end_of_func;
				}
			}
		}
//		2003.06.28 Moca [EOF]のみの行にカーソルがあるときに右を押しても選択を解除できない問題に対応
		/* 現在行のデータを取得 */
		pcLayout = m_pcEditDoc->m_cLayoutMgr.Search( m_nCaretPosY );
		//	2004.04.02 EOF以降にカーソルがあったときに右を押しても何も起きなかったのを、EOFに移動するように
		if( pcLayout )
		{
			int nIndex = 0;
			CMemoryIterator<CLayout> it( pcLayout, m_pcEditDoc->m_cLayoutMgr.GetTabSpace() );
			while( !it.end() ){
				it.scanNext();
				if ( it.getColumn() + it.getColumnDelta() > m_nCaretPosX + it.getColumnDelta() ){
					break;
				}
				if ( it.getIndex() + it.getIndexDelta() > pcLayout->GetLengthWithoutEOL() ){
					nIndex += it.getIndexDelta();
					break;
				}
				it.addDelta();
			}
			nPosX = it.getColumn();
			nIndex += it.getIndex();
			if( nIndex >= pcLayout->GetLengthWithEOL() ){
				/* フリーカーソルモードか */
				if( (
					m_pShareData->m_Common.m_bIsFreeCursorMode
				 || IsTextSelected() && m_bBeginBoxSelect	/* 矩形範囲選択中 */
					)
				 &&
					/* 改行で終わっているか */
					( EOL_NONE != pcLayout->m_cEol )
				){
					/*-- フリーカーソルモードの場合 --*/
					if( nPosX <= m_nCaretPosX ){
						/* 最終行か */
						if( m_nCaretPosY + 1 == m_pcEditDoc->m_cLayoutMgr.GetLineCount() ){
							/* 改行で終わっているか */
							if( EOL_NONE != pcLayout->m_cEol.GetType() ){
								nPosX = m_nCaretPosX + 1;
							}else{
								nPosX = m_nCaretPosX;
							}
						}else{
							nPosX = m_nCaretPosX + 1;
						}
					}else{
						nPosX = nPosX;
					}
				}else{
					/*-- フリーカーソルモードではない場合 --*/
					/* 最終行か */
					if( m_nCaretPosY + 1 == m_pcEditDoc->m_cLayoutMgr.GetLineCount() ){
						/* 改行で終わっているか */
						if( EOL_NONE != pcLayout->m_cEol.GetType() ){
							nPosX = pcLayout->m_pNext ? pcLayout->m_pNext->GetIndent() : 0;
							++nPosY;
						}else{
						}
					}else{
						nPosX = pcLayout->m_pNext ? pcLayout->m_pNext->GetIndent() : 0;
						++nPosY;
					}
				}
			}
			//	キャレット位置が折り返し位置より右側だった場合の処理
			if( nPosX >= m_pcEditDoc->GetDocumentAttribute().m_nMaxLineSize ){
				if( m_pcEditDoc->GetDocumentAttribute().m_bKinsokuRet
				 || m_pcEditDoc->GetDocumentAttribute().m_bKinsokuKuto )	//@@@ 2002.04.16 MIK
				{
					if( m_pcEditDoc->m_cLayoutMgr.IsEndOfLine( nPosY, nPosX ) )	//@@@ 2002.04.18
					{
						nPosX = 0;
						++nPosY;
					}
				}
				else
				{
					nPosX = 0;
					++nPosY;
				}
			}
		}else{
			// pcLayoutがNULLの場合はnPosX=0に調整
			nPosX = 0;
		}
		MoveCursor( nPosX, nPosY, TRUE );
		m_nCaretPosX_Prev = m_nCaretPosX;
		if( bSelect ){
			/* 現在のカーソル位置によって選択範囲を変更 */
			ChangeSelectAreaByCurrentCursor( m_nCaretPosX, m_nCaretPosY );
		}

end_of_func:;
	}
	return;
}




//	From Here Oct. 6, 2000 JEPRO 名称をPC-AT互換機系に変更(ROLL/UP/DOWN→PAGE/DOWN/UP)するために以下をコメントアウト
///* スクロールアップ */
//void CEditView::Command_ROLLUP( int bSelect )
//{
//	Cursor_UPDOWN( ( m_nViewRowNum / 2 ), bSelect );
//	return;
//}
//
//
//
//
///* スクロールダウン */
//void CEditView::Command_ROLLDOWN( int bSelect )
//{
//	Cursor_UPDOWN( - ( m_nViewRowNum / 2 ), bSelect );
//	return;
//}
//	To Here Oct. 6, 2000




/* 半ページアップ */	//Oct. 6, 2000 JEPRO added (実は従来のスクロールダウンそのもの)
void CEditView::Command_HalfPageUp( int bSelect )
{
	Cursor_UPDOWN( - ( m_nViewRowNum / 2 ), bSelect );
	return;
}




/* 半ページダウン */	//Oct. 6, 2000 JEPRO added (実は従来のスクロールアップそのもの)
void CEditView::Command_HalfPageDown( int bSelect )
{
	Cursor_UPDOWN( ( m_nViewRowNum / 2 ), bSelect );
	return;
}




/*! 1ページアップ

	@date 2000.10.10 JEPRO 作成
	@date 2001.12.13 hor 画面に対するカーソル位置はそのままで
		1ページアップに動作変更
*/	//Oct. 10, 2000 JEPRO added
void CEditView::Command_1PageUp( int bSelect )
{
//	Cursor_UPDOWN( - m_nViewRowNum, bSelect );

// 2001.12.03 hor
//		メモ帳ライクに、画面に対するカーソル位置はそのままで1ページアップ
	if(m_nViewTopLine>=m_nViewRowNum-1){
		m_bDrawSWITCH = FALSE;
		int nViewTopLine=m_nCaretPosY-m_nViewTopLine;
		Cursor_UPDOWN( -m_nViewRowNum+1, bSelect );
		//	Sep. 11, 2004 genta 同期スクロール処理のため
		//	RedrawAllではなくScrollAtを使うように
		SyncScrollV( ScrollAtV( m_nCaretPosY-nViewTopLine ));
		m_bDrawSWITCH = TRUE;
		RedrawAll();
		
	}else{
		Cursor_UPDOWN( -m_nViewRowNum+1, bSelect );
	}
	return;
}




/*!	1ページダウン

	@date 2000.10.10 JEPRO 作成
	@date 2001.12.13 hor 画面に対するカーソル位置はそのままで
		1ページダウンに動作変更
*/
void CEditView::Command_1PageDown( int bSelect )
{
//	Cursor_UPDOWN( m_nViewRowNum, bSelect );

// 2001.12.03 hor
//		メモ帳ライクに、画面に対するカーソル位置はそのままで1ページダウン
	if(m_nViewTopLine+m_nViewRowNum <= m_pcEditDoc->m_cLayoutMgr.GetLineCount() ){ //- m_nViewRowNum){
		m_bDrawSWITCH = FALSE;
		int nViewTopLine=m_nCaretPosY-m_nViewTopLine;
		Cursor_UPDOWN( m_nViewRowNum-1, bSelect );
		//	Sep. 11, 2004 genta 同期スクロール処理のため
		//	RedrawAllではなくScrollAtを使うように
		SyncScrollV( ScrollAtV( m_nCaretPosY-nViewTopLine ));
		m_bDrawSWITCH = TRUE;
		RedrawAll();
	}else{
		Cursor_UPDOWN( m_nViewRowNum , bSelect );
		Command_DOWN( bSelect, TRUE );
	}

	return;
}




/* カーソル上移動(2行づつ) */
void CEditView::Command_UP2( int bSelect )
{
	Cursor_UPDOWN( -2, bSelect );
	return;
}




/* カーソル下移動(2行づつ) */
void CEditView::Command_DOWN2( int bSelect )
{
	Cursor_UPDOWN( 2, bSelect );
	return;
}




/*! @brief 行頭に移動

	@param bSelect [in] 選択の有無。true: 選択しながら移動。false: 選択しないで移動。
	@param lparam [in] マクロから使用する拡張フラグ
		@li 0: キー操作と同一(default)
		@li 1: カーソル位置に関係なく行頭に移動。
		@li 4: 選択して移動(合成可)
		@li 8: 改行単位で先頭に移動(合成可)
	
	@date Oct. 29, 2001 genta マクロ用機能拡張(パラメータ追加) + goto排除
	@date May. 15, 2002 oak   改行単位移動
	@date Oct.  7, 2002 YAZAKI 冗長な引数 bLineTopOnly を削除
*/
void CEditView::Command_GOLINETOP( int bSelect, int lparam )
{
	bool			bLineTopOnly = false;
	int				nCaretPosX;
	int				nCaretPosY;
	int				nPos;
	int				nPosY;
	const CLayout*	pcLayout;

	if( lparam & 1 ){
		bLineTopOnly = true;
	}
	
	if( lparam & 4 ){
		bSelect = TRUE;
	}
	
	if( bSelect ){
		if( !IsTextSelected() ){	/* テキストが選択されているか */
			/* 現在のカーソル位置から選択を開始する */
			BeginSelectArea();
		}
	}else{
		if( IsTextSelected() ){	/* テキストが選択されているか */
			/* 現在の選択範囲を非選択状態に戻す */
			DisableSelectArea( TRUE );
		}
	}
	if ( lparam & 8 ){
		/* 改行単位指定の場合は、物理行頭位置から目的論理位置を求める */
		m_pcEditDoc->m_cLayoutMgr.CaretPos_Phys2Log(
			0,
			m_nCaretPosY_PHY,
			&nCaretPosX,
			&nCaretPosY
		);
	}else{
		pcLayout = m_pcEditDoc->m_cLayoutMgr.Search( m_nCaretPosY );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -