📄 cdlggrep.cpp
字号:
// char szWorkPath[_MAX_PATH + 1];
// m_hWnd = hwndDlg; /* このダイアログのハンドル */
m_pShareData = CShareData::getInstance()->GetShareData();
/* 検索文字列 */
::SetDlgItemText( m_hWnd, IDC_COMBO_TEXT, m_szText );
hwndCombo = ::GetDlgItem( m_hWnd, IDC_COMBO_TEXT );
for( i = 0; i < m_pShareData->m_nSEARCHKEYArrNum; ++i ){
::SendMessage( hwndCombo, CB_ADDSTRING, 0, (LPARAM)m_pShareData->m_szSEARCHKEYArr[i] );
}
/* 検索ファイル */
::SetDlgItemText( m_hWnd, IDC_COMBO_FILE, m_szFile );
hwndCombo = ::GetDlgItem( m_hWnd, IDC_COMBO_FILE );
for( i = 0; i < m_pShareData->m_nGREPFILEArrNum; ++i ){
::SendMessage( hwndCombo, CB_ADDSTRING, 0, (LPARAM)m_pShareData->m_szGREPFILEArr[i] );
}
/* 検索フォルダ */
::SetDlgItemText( m_hWnd, IDC_COMBO_FOLDER, m_szFolder );
hwndCombo = ::GetDlgItem( m_hWnd, IDC_COMBO_FOLDER );
for( i = 0; i < m_pShareData->m_nGREPFOLDERArrNum; ++i ){
::SendMessage( hwndCombo, CB_ADDSTRING, 0, (LPARAM)m_pShareData->m_szGREPFOLDERArr[i] );
}
if((0 == lstrlen( m_pShareData->m_szGREPFOLDERArr[0] ) || m_pShareData->m_Common.m_bGrepDefaultFolder ) &&
0 < lstrlen( m_szCurrentFilePath )
){
char szWorkFolder[MAX_PATH];
char szWorkFile[MAX_PATH];
SplitPath_FolderAndFile( m_szCurrentFilePath, szWorkFolder, szWorkFile );
::SetDlgItemText( m_hWnd, IDC_COMBO_FOLDER, szWorkFolder );
}
/* この編集中のテキストから検索する */
::CheckDlgButton( m_hWnd, IDC_CHK_FROMTHISTEXT, m_bFromThisText );
if( 0 < lstrlen( m_szCurrentFilePath ) ){
if( m_bFromThisText ){
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_COMBO_FILE ), FALSE );
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_COMBO_FOLDER ), FALSE );
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_BUTTON_FOLDER ), FALSE );
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_CHK_SUBFOLDER ), FALSE );
char szWorkFolder[MAX_PATH];
char szWorkFile[MAX_PATH];
SplitPath_FolderAndFile( m_szCurrentFilePath, szWorkFolder, szWorkFile );
::SetDlgItemText( m_hWnd, IDC_COMBO_FOLDER, szWorkFolder );
::SetDlgItemText( m_hWnd, IDC_COMBO_FILE, szWorkFile );
}else{
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_COMBO_FILE ), TRUE );
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_COMBO_FOLDER ), TRUE );
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_BUTTON_FOLDER ), TRUE );
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_CHK_SUBFOLDER ), TRUE );
}
}
/* サブフォルダからも検索する */
::CheckDlgButton( m_hWnd, IDC_CHK_SUBFOLDER, m_bSubFolder );
/* 英大文字と英小文字を区別する */
::CheckDlgButton( m_hWnd, IDC_CHK_LOHICASE, m_bLoHiCase );
// 2001/06/23 N.Nakatani 現時点ではGrepでは単語単位の検索はサポートできていません
// 2002/03/07 テストサポート
/* 一致する単語のみ検索する */
::CheckDlgButton( m_hWnd, IDC_CHK_WORD, m_bWordOnly );
// ::EnableWindow( ::GetDlgItem( m_hWnd, IDC_CHK_WORD ) , false ); //チェックボックスを使用不可にすも
/* 文字コード自動判別 */
// ::CheckDlgButton( m_hWnd, IDC_CHK_KANJICODEAUTODETECT, m_bKanjiCode_AutoDetect );
// 2002/09/22 Moca Add
/* 文字コードセット */
{
int nIdx, nCurIdx, nCharSet;
HWND hWndCombo = ::GetDlgItem( m_hWnd, IDC_COMBO_CHARSET );
nCurIdx = ::SendMessage( hWndCombo , CB_GETCURSEL, 0, 0 );
for( nIdx = 0; nIdx < gm_nCodeComboNameArrNum; nIdx++ ){
nCharSet = ::SendMessage( hWndCombo, CB_GETITEMDATA, nIdx, 0 );
if( nCharSet == m_nGrepCharSet ){
nCurIdx = nIdx;
}
}
::SendMessage( hWndCombo, CB_SETCURSEL, (WPARAM)nCurIdx, 0 );
}
/* 行を出力するか該当部分だけ出力するか */
if( m_bGrepOutputLine ){
::CheckDlgButton( m_hWnd, IDC_RADIO_OUTPUTLINE, TRUE );
}else{
::CheckDlgButton( m_hWnd, IDC_RADIO_OUTPUTMARKED, TRUE );
}
/* Grep: 出力形式 */
if( 1 == m_nGrepOutputStyle ){
::CheckDlgButton( m_hWnd, IDC_RADIO_OUTPUTSTYLE1, TRUE );
}else
if( 2 == m_nGrepOutputStyle ){
::CheckDlgButton( m_hWnd, IDC_RADIO_OUTPUTSTYLE2, TRUE );
}else{
::CheckDlgButton( m_hWnd, IDC_RADIO_OUTPUTSTYLE1, TRUE );
}
// From Here Jun. 29, 2001 genta
// 正規表現ライブラリの差し替えに伴う処理の見直し
// 処理フロー及び判定条件の見直し。必ず正規表現のチェックと
// 無関係にCheckRegexpVersionを通過するようにした。
if( CheckRegexpVersion( m_hWnd, IDC_STATIC_JRE32VER, false )
&& m_bRegularExp){
/* 英大文字と英小文字を区別する */
::CheckDlgButton( m_hWnd, IDC_CHK_REGULAREXP, 1 );
// 正規表現のときも選択できるように。
// ::CheckDlgButton( m_hWnd, IDC_CHK_LOHICASE, 1 );
// ::EnableWindow( ::GetDlgItem( m_hWnd, IDC_CHK_LOHICASE ), FALSE );
// 2001/06/23 N.Nakatani
/* 単語単位で探す */
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_CHK_WORD ), FALSE );
}
else {
::CheckDlgButton( m_hWnd, IDC_CHK_REGULAREXP, 0 );
}
// To Here Jun. 29, 2001 genta
if( 0 < lstrlen( m_szCurrentFilePath ) ){
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_CHK_FROMTHISTEXT ), TRUE );
}else{
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_CHK_FROMTHISTEXT ), FALSE );
}
// フォルダの初期値をカレントフォルダにする
::CheckDlgButton( m_hWnd, IDC_CHK_DEFAULTFOLDER, m_pShareData->m_Common.m_bGrepDefaultFolder );
if( m_pShareData->m_Common.m_bGrepDefaultFolder ) OnBnClicked( IDC_BUTTON_CURRENTFOLDER );
return;
}
/* ダイアログデータの取得 */
/* TRUE==正常 FALSE==入力エラー */
int CDlgGrep::GetData( void )
{
// int i;
// int j;
// CMemory* pcmWork;
m_pShareData = CShareData::getInstance()->GetShareData();
/* サブフォルダからも検索する*/
m_bSubFolder = ::IsDlgButtonChecked( m_hWnd, IDC_CHK_SUBFOLDER );
m_pShareData->m_Common.m_bGrepSubFolder = m_bSubFolder; /* Grep:サブフォルダも検索 */
/* この編集中のテキストから検索する */
m_bFromThisText = ::IsDlgButtonChecked( m_hWnd, IDC_CHK_FROMTHISTEXT );
/* 英大文字と英小文字を区別する */
m_bLoHiCase = ::IsDlgButtonChecked( m_hWnd, IDC_CHK_LOHICASE );
//2001/06/23 N.Nakatani
/* 単語単位で検索 */
m_bWordOnly = ::IsDlgButtonChecked( m_hWnd, IDC_CHK_WORD );
/* 正規表現 */
m_bRegularExp = ::IsDlgButtonChecked( m_hWnd, IDC_CHK_REGULAREXP );
/* 文字コード自動判別 */
// m_bKanjiCode_AutoDetect = ::IsDlgButtonChecked( m_hWnd, IDC_CHK_KANJICODEAUTODETECT );
/* 文字コードセット */
{
int nIdx;
HWND hWndCombo = ::GetDlgItem( m_hWnd, IDC_COMBO_CHARSET );
nIdx = ::SendMessage( hWndCombo, CB_GETCURSEL, 0, 0 );
m_nGrepCharSet = ::SendMessage( hWndCombo, CB_GETITEMDATA, nIdx, 0 );
}
/* 行を出力するか該当部分だけ出力するか */
m_bGrepOutputLine = ::IsDlgButtonChecked( m_hWnd, IDC_RADIO_OUTPUTLINE );
/* Grep: 出力形式 */
if( TRUE == ::IsDlgButtonChecked( m_hWnd, IDC_RADIO_OUTPUTSTYLE1 ) ){
m_nGrepOutputStyle = 1; /* Grep: 出力形式 */
}
if( TRUE == ::IsDlgButtonChecked( m_hWnd, IDC_RADIO_OUTPUTSTYLE2 ) ){
m_nGrepOutputStyle = 2; /* Grep: 出力形式 */
}
/* 検索文字列 */
::GetDlgItemText( m_hWnd, IDC_COMBO_TEXT, m_szText, _MAX_PATH - 1 );
/* 検索ファイル */
::GetDlgItemText( m_hWnd, IDC_COMBO_FILE, m_szFile, _MAX_PATH - 1 );
/* 検索フォルダ */
::GetDlgItemText( m_hWnd, IDC_COMBO_FOLDER, m_szFolder, _MAX_PATH - 1 );
m_pShareData->m_Common.m_bRegularExp = m_bRegularExp; /* 1==正規表現 */
m_pShareData->m_Common.m_nGrepCharSet = m_nGrepCharSet; /* 文字コード自動判別 */
m_pShareData->m_Common.m_bLoHiCase = m_bLoHiCase; /* 1==英大文字小文字の区別 */
m_pShareData->m_Common.m_bGrepOutputLine = m_bGrepOutputLine; /* 行を出力するか該当部分だけ出力するか */
m_pShareData->m_Common.m_nGrepOutputStyle = m_nGrepOutputStyle; /* Grep: 出力形式 */
//2001/06/23 N.Nakatani add
m_pShareData->m_Common.m_bWordOnly = m_bWordOnly; /* 1==単語のみ検索 */
//やめました
// if( 0 == lstrlen( m_szText ) ){
// ::MYMESSAGEBOX( m_hWnd, MB_OK | MB_ICONEXCLAMATION, GSTR_APPNAME,
// "検索のキーワードを指定してください。"
// );
// return FALSE;
// }
/* この編集中のテキストから検索する */
if( 0 == lstrlen( m_szFile ) ){
// Jun. 16, 2003 Moca
// 検索パターンが指定されていない場合のメッセージ表示をやめ、
// 「*.*」が指定されたものと見なす.
strcpy( m_szFile, "*.*" );
}
if( 0 == lstrlen( m_szFolder ) ){
::MYMESSAGEBOX( m_hWnd, MB_OK | MB_ICONEXCLAMATION, GSTR_APPNAME,
"検索対象フォルダを指定してください。"
);
return FALSE;
}
char szCurDirOld[MAX_PATH];
::GetCurrentDirectory( MAX_PATH, szCurDirOld );
/* 相対パス→絶対パス */
if( 0 == ::SetCurrentDirectory( m_szFolder ) ){
::MYMESSAGEBOX( m_hWnd, MB_OK | MB_ICONEXCLAMATION, GSTR_APPNAME,
"検索対象フォルダが正しくありません。"
);
::SetCurrentDirectory( szCurDirOld );
return FALSE;
}
::GetCurrentDirectory( MAX_PATH, m_szFolder );
::SetCurrentDirectory( szCurDirOld );
//@@@ 2002.2.2 YAZAKI CShareData.AddToSearchKeyArr()追加に伴う変更
/* 検索文字列 */
if( 0 < lstrlen( m_szText ) ){
// From Here Jun. 26, 2001 genta
// 正規表現ライブラリの差し替えに伴う処理の見直し
int nFlag = 0;
nFlag |= m_bLoHiCase ? 0x01 : 0x00;
if( m_bRegularExp && !CheckRegexpSyntax( m_szText, m_hWnd, true, nFlag) ){
return FALSE;
}
// To Here Jun. 26, 2001 genta 正規表現ライブラリ差し替え
CShareData::getInstance()->AddToSearchKeyArr( m_szText );
}
/* 検索ファイル */
CShareData::getInstance()->AddToGrepFileArr( m_szFile );
/* 検索フォルダ */
CShareData::getInstance()->AddToGrepFolderArr( m_szFolder );
return TRUE;
}
//@@@ 2002.01.18 add start
LPVOID CDlgGrep::GetHelpIdTable(void)
{
return (LPVOID)p_helpids;
}
//@@@ 2002.01.18 add end
/*[EOF]*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -