/*! ユーザー定義関数のエラーメッセージの作成 stdProc, stdIntFunc, stdStrFunc がエラーコードを返した場合、PPAから呼び出される。 異常終了/不正引数時のエラーメッセージを独自に指定する。 @author Moca @param Err_CD IN 0以外各コールバック関数が設定した値 1以上 FuncID + 1 0 PPAのエラー -1以下 その他ユーザ定義エラー @param Err_Mes IN エラーメッセージ @date 2003.06.01 Moca */ void __stdcall CPPA::stdError( int Err_CD, const char* Err_Mes ) { if( false != m_CurInstance->m_bError ){ return; } m_CurInstance->m_bError = true; // 関数内で関数を呼ぶ場合等、2回表示されるのを防ぐ TCHAR szMes[2048]; // 2048あれば足りるかと const TCHAR* pszErr; pszErr = szMes; if( 0 < Err_CD ){ int i, FuncID; FuncID = Err_CD - 1; char szFuncDec[1024]; szFuncDec[0] = '\0'; for( i = 0; CSMacroMgr::m_MacroFuncInfoCommandArr[i].m_nFuncID != -1; i++ ){ if( CSMacroMgr::m_MacroFuncInfoCommandArr[i].m_nFuncID == FuncID ){ GetDeclarations( CSMacroMgr::m_MacroFuncInfoCommandArr[i], szFuncDec ); break; } } if( CSMacroMgr::m_MacroFuncInfoArr[i].m_nFuncID != -1 ){ for( i = 0; CSMacroMgr::m_MacroFuncInfoArr[i].m_nFuncID != -1; i++ ){ if( CSMacroMgr::m_MacroFuncInfoArr[i].m_nFuncID == FuncID ){ GetDeclarations( CSMacroMgr::m_MacroFuncInfoArr[i], szFuncDec ); break; } } } if( szFuncDec[0] != '\0' ){ auto_sprintf( szMes, LS(STR_ERR_DLGPPA2), szFuncDec ); }else{ auto_sprintf( szMes, LS(STR_ERR_DLGPPA3), FuncID ); } }else{ // 2007.07.26 genta : ネスト実行した場合にPPAが不正なポインタを渡す可能性を考慮. // 実際には不正なエラーは全てPPA.DLL内部でトラップされるようだが念のため. if( IsBadStringPtrA( Err_Mes, 256 )){ pszErr = LS(STR_ERR_DLGPPA6); }else{ switch( Err_CD ){ case 0: if( '\0' == Err_Mes[0] ){ pszErr = LS(STR_ERR_DLGPPA4); }else{ pszErr = to_tchar(Err_Mes); } break; default: auto_sprintf( szMes, LS(STR_ERR_DLGPPA5), Err_CD, to_tchar(Err_Mes) ); } } } if( 0 == m_CurInstance->m_cMemDebug.GetStringLength() ){ MYMESSAGEBOX( m_CurInstance->m_pcEditView->GetHwnd(), MB_OK, LS(STR_ERR_DLGPPA7), _T("%ts"), pszErr ); } else{ MYMESSAGEBOX( m_CurInstance->m_pcEditView->GetHwnd(), MB_OK, LS(STR_ERR_DLGPPA7), _T("%ts\n%hs"), pszErr, m_CurInstance->m_cMemDebug.GetStringPtr() ); } }
// 文字コード表示用 UNICODE → Hex 変換 2008/6/21 Uchi EConvertResult CUtf8::_UnicodeToHex(const wchar_t* cSrc, const int iSLen, TCHAR* pDst, const CommonSetting_Statusbar* psStatusbar, const bool bCESUMode) { CNativeW cBuff; EConvertResult res; int i; TCHAR* pd; unsigned char* ps; bool bbinary=false; if (psStatusbar->m_bDispUtf8Codepoint) { // Unicodeで表示 return CCodeBase::UnicodeToHex(cSrc, iSLen, pDst, psStatusbar); } cBuff.AllocStringBuffer(4); // 1文字データバッファ if (IsUTF16High(cSrc[0]) && iSLen >= 2 && IsUTF16Low(cSrc[1])) { cBuff._GetMemory()->SetRawDataHoldBuffer(cSrc, 4); } else { cBuff._GetMemory()->SetRawDataHoldBuffer(cSrc, 2); if( IsBinaryOnSurrogate(cSrc[0]) ){ bbinary = true; } } // UTF-8/CESU-8 変換 if (bCESUMode != true) { res = UnicodeToUTF8(cBuff, cBuff._GetMemory()); } else { res = UnicodeToCESU8(cBuff, cBuff._GetMemory()); } if (res != RESULT_COMPLETE) { return res; } // Hex変換 ps = reinterpret_cast<unsigned char*>( cBuff._GetMemory()->GetRawPtr() ); pd = pDst; if( bbinary == false ){ for (i = cBuff._GetMemory()->GetRawLength(); i >0; i--, ps ++, pd += 2) { auto_sprintf( pd, _T("%02X"), *ps); } }else{ auto_sprintf( pd, _T("?%02X"), *ps ); } return RESULT_COMPLETE; }
/*! Keybind: キーリストをチェックボックスの状態に合わせて更新する */ void CPropKeybind::ChangeKeyList( HWND hwndDlg){ HWND hwndKeyList; int nIndex; int nIndexTop; int i; wchar_t szKeyState[64]; hwndKeyList = ::GetDlgItem( hwndDlg, IDC_LIST_KEY ); nIndex = List_GetCurSel( hwndKeyList ); nIndexTop = List_GetTopIndex( hwndKeyList ); szKeyState[0] = L'\0'; i = 0; if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_SHIFT ) ){ i |= _SHIFT; wcscat( szKeyState, L"Shift+" ); } if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_CTRL ) ){ i |= _CTRL; wcscat( szKeyState, L"Ctrl+" ); } if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_ALT ) ){ i |= _ALT; wcscat( szKeyState, L"Alt+" ); } /* キー一覧に文字列をセット(リストボックス)*/ List_ResetContent( hwndKeyList ); for( i = 0; i < m_Common.m_sKeyBind.m_nKeyNameArrNum; ++i ){ TCHAR pszLabel[256]; auto_sprintf( pszLabel, _T("%ls%ts"), szKeyState, m_Common.m_sKeyBind.m_pKeyNameArr[i].m_szKeyName ); ::List_AddString( hwndKeyList, pszLabel ); } List_SetCurSel( hwndKeyList, nIndex ); List_SetTopIndex( hwndKeyList, nIndexTop ); ::SendMessageCmd( hwndDlg, WM_COMMAND, MAKELONG( IDC_LIST_KEY, LBN_SELCHANGE ), (LPARAM)hwndKeyList ); }
// 文字コード表示用 UNICODE → Hex 変換 2008/6/9 Uchi EConvertResult CEuc::UnicodeToHex(const wchar_t* cSrc, const int iSLen, TCHAR* pDst, const CommonSetting_Statusbar* psStatusbar) { CNativeW cCharBuffer; EConvertResult res; int i; TCHAR* pd; unsigned char* ps; bool bbinary=false; // 2008/6/21 Uchi if (psStatusbar->m_bDispUniInEuc) { // Unicodeで表示 return CCodeBase::UnicodeToHex(cSrc, iSLen, pDst, psStatusbar); } // 1文字データバッファ cCharBuffer.SetString(cSrc, 1); if( IsBinaryOnSurrogate(cSrc[0]) ){ bbinary = true; } // EUC-JP 変換 res = UnicodeToEUC(cCharBuffer, cCharBuffer._GetMemory()); if (res != RESULT_COMPLETE) { return res; } // Hex変換 ps = reinterpret_cast<unsigned char*>( cCharBuffer._GetMemory()->GetRawPtr() ); pd = pDst; if( bbinary == false ){ for (i = cCharBuffer._GetMemory()->GetRawLength(); i >0; i--, ps ++, pd += 2) { auto_sprintf( pd, _T("%02X"), *ps); } }else{ auto_sprintf( pd, _T("?%02X"), *ps ); } return RESULT_COMPLETE; }
//キーワード数を表示する。 void CPropKeyword::DispKeywordCount( HWND hwndDlg ) { HWND hwndList; int n; TCHAR szCount[ 256 ]; hwndList = ::GetDlgItem( hwndDlg, IDC_LIST_KEYWORD ); n = ListView_GetItemCount( hwndList ); if( n < 0 ) n = 0; int nAlloc; nAlloc = m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.GetAllocSize( m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.m_nCurrentKeyWordSetIdx ); nAlloc -= m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.GetKeyWordNum( m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.m_nCurrentKeyWordSetIdx ); nAlloc += m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.GetFreeSize(); auto_sprintf( szCount, LS(STR_PROPCOMKEYWORD_INFO), MAX_KEYWORDLEN, n, nAlloc ); ::SetWindowText( ::GetDlgItem( hwndDlg, IDC_STATIC_KEYWORD_COUNT ), szCount ); }
/*! フォントラベルにフォントとフォント名設定する @date 2013.04.24 Uchi */ HFONT CPropCommon::SetFontLabel( HWND hwndDlg, int idc_static, const LOGFONT& lf, int nps ) { HFONT hFont; TCHAR szFontName[80]; LOGFONT lfTemp; lfTemp = lf; // 大きすぎるフォントは小さく表示 if( lfTemp.lfHeight < -16 ){ lfTemp.lfHeight = -16; } hFont = SetCtrlFont( hwndDlg, idc_static, lfTemp ); // フォント名の設定 auto_sprintf( szFontName, nps % 10 ? _T("%s(%.1fpt)") : _T("%s(%.0fpt)"), lf.lfFaceName, double(nps)/10 ); ::DlgItem_SetText( hwndDlg, idc_static, szFontName ); return hFont; }
// フォント名/使用ボタンの設定 void CDlgPrintSetting::SetFontName( int idTxt, int idUse, LOGFONT& lf, int nPointSize ) { TCHAR szName[100]; bool bUseFont = lf.lfFaceName[0] != _T('\0'); CheckDlgButtonBool( GetHwnd(), idUse, bUseFont); ::EnableWindow( GetItemHwnd( idUse ), bUseFont ); if (bUseFont) { LOGFONT lft; lft = lf; lft.lfHeight = m_nFontHeight; // フォントサイズをダイアログに合せる HFONT hFontOld = (HFONT)::SendMessage(GetItemHwnd( idTxt ), WM_GETFONT, 0, 0 ); // 論理フォントを作成 HFONT hFont = ::CreateFontIndirect( &lft ); if (hFont) { // フォントの設定 ::SendMessage( GetItemHwnd( idTxt ), WM_SETFONT, (WPARAM)hFont, MAKELPARAM(FALSE, 0) ); } if (m_hFontDlg != hFontOld) { // 古いフォントの破棄 ::DeleteObject( hFontOld ); } // フォント名/サイズの作成 int nMM = MulDiv( nPointSize, 254, 720 ); // フォントサイズ計算(pt->1/10mm) auto_sprintf(szName, nPointSize%10 ? _T("%.32s(%.1fpt/%d.%dmm)") : _T("%.32s(%.0fpt/%d.%dmm)"), lf.lfFaceName, double(nPointSize)/10, nMM/10, nMM/10); } else { szName[0] = _T('\0'); } ::DlgItem_SetText( GetHwnd(), idTxt, szName ); }
/*! バックアップファイルの詳細設定エディットボックスを適切に更新する @date 2005.11.07 aroka 新規追加 @note 詳細設定切り替え時のデフォルトをオプションに合わせるため、 m_szBackUpPathAdvanced を更新する */ void CPropBackup::UpdateBackupFile(HWND hwndDlg) // バックアップファイルの詳細設定 { wchar_t temp[MAX_PATH]; /* バックアップを作成するファイル */ // 20051107 aroka if( !m_Common.m_sBackup.m_bBackUp ){ temp[0] = LTEXT('\0'); } else{ if( m_Common.m_sBackup.m_bBackUpFolder ){ temp[0] = LTEXT('\0'); } else if( m_Common.m_sBackup.m_bBackUpDustBox ){ auto_sprintf( temp, LTEXT("%ls\\"), LSW(STR_PROPCOMBK_DUSTBOX) ); } else{ auto_sprintf( temp, LTEXT(".\\") ); } switch( m_Common.m_sBackup.GetBackupType() ){ case 1: // .bak wcscat( temp, LTEXT("$0.bak") ); break; case 5: // .*.bak wcscat( temp, LTEXT("$0.*.bak") ); break; case 3: // .b?? wcscat( temp, LTEXT("$0.b??") ); break; case 6: // .*.b?? wcscat( temp, LTEXT("$0.*.b??") ); break; case 2: // 日付,時刻 case 4: // 日付,時刻 wcscat( temp, LTEXT("$0_") ); if( m_Common.m_sBackup.GetBackupOpt(BKUP_YEAR) ){ /* バックアップファイル名:日付の年 */ wcscat( temp, LTEXT("%Y") ); } if( m_Common.m_sBackup.GetBackupOpt(BKUP_MONTH) ){ /* バックアップファイル名:日付の月 */ wcscat( temp, LTEXT("%m") ); } if( m_Common.m_sBackup.GetBackupOpt(BKUP_DAY) ){ /* バックアップファイル名:日付の日 */ wcscat( temp, LTEXT("%d") ); } if( m_Common.m_sBackup.GetBackupOpt(BKUP_HOUR) ){ /* バックアップファイル名:日付の時 */ wcscat( temp, LTEXT("%H") ); } if( m_Common.m_sBackup.GetBackupOpt(BKUP_MIN) ){ /* バックアップファイル名:日付の分 */ wcscat( temp, LTEXT("%M") ); } if( m_Common.m_sBackup.GetBackupOpt(BKUP_SEC) ){ /* バックアップファイル名:日付の秒 */ wcscat( temp, LTEXT("%S") ); } wcscat( temp, LTEXT(".*") ); break; default: break; } } if( !m_Common.m_sBackup.m_bBackUpPathAdvanced ){ // 詳細設定モードでないときだけ自動更新する auto_sprintf( m_Common.m_sBackup.m_szBackUpPathAdvanced, _T("%ls"), temp ); ::DlgItem_SetText( hwndDlg, IDC_EDIT_BACKUPFILE, m_Common.m_sBackup.m_szBackUpPathAdvanced ); } return; }
/*! 差分表示 @param pszFile1 [in] 自ファイル名 @param pszFile2 [in] 相手ファイル名 @param nFlgOpt [in] 0b000000000 ||||||+--- -i ignore-case 大文字小文字同一視 |||||+---- -w ignore-all-space 空白無視 ||||+----- -b ignore-space-change 空白変更無視 |||+------ -B ignore-blank-lines 空行無視 ||+------- -t expand-tabs TAB-SPACE変換 |+-------- (編集中のファイルが旧ファイル) +--------- (DIFF差分がないときにメッセージ表示) @note HandleCommandからの呼び出し対応(ダイアログなし版) @author MIK @date 2002/05/25 @date 2005/10/28 旧Command_Diffから関数名の変更。 GetCommander().Command_Diff_Dialogだけでなく新Command_Diff からも呼ばれる関数。maru @date 2013/06/21 ExecCmdを利用するように */ void CEditView::ViewDiffInfo( const TCHAR* pszFile1, const TCHAR* pszFile2, int nFlgOpt, bool bUTF8 ) /* bool bFlgCase, //大文字小文字同一視 bool bFlgBlank, //空白無視 bool bFlgWhite, //空白変更無視 bool bFlgBLine, //空行無視 bool bFlgTabSpc, //TAB-SPACE変換 bool bFlgFile12, //編集中のファイルが旧ファイル */ { CWaitCursor cWaitCursor( this->GetHwnd() ); int nFlgFile12 = 1; /* exeのあるフォルダ */ TCHAR szExeFolder[_MAX_PATH + 1]; TCHAR cmdline[1024]; GetExedir( cmdline, _T("diff.exe") ); SplitPath_FolderAndFile( cmdline, szExeFolder, NULL ); // From Here Dec. 28, 2002 MIK // diff.exeの存在チェック if( !IsFileExists( cmdline, true ) ) { WarningMessage( GetHwnd(), LS(STR_ERR_DLGEDITVWDIFF2) ); return; } cmdline[0] = _T('\0'); //今あるDIFF差分を消去する。 if( CDiffManager::getInstance()->IsDiffUse() ) GetCommander().Command_Diff_Reset(); //m_pcEditDoc->m_cDocLineMgr.ResetAllDiffMark(); //オプションを作成する TCHAR szOption[16]; // "-cwbBt" _tcscpy( szOption, _T("-") ); if( nFlgOpt & 0x0001 ) _tcscat( szOption, _T("i") ); //-i ignore-case 大文字小文字同一視 if( nFlgOpt & 0x0002 ) _tcscat( szOption, _T("w") ); //-w ignore-all-space 空白無視 if( nFlgOpt & 0x0004 ) _tcscat( szOption, _T("b") ); //-b ignore-space-change 空白変更無視 if( nFlgOpt & 0x0008 ) _tcscat( szOption, _T("B") ); //-B ignore-blank-lines 空行無視 if( nFlgOpt & 0x0010 ) _tcscat( szOption, _T("t") ); //-t expand-tabs TAB-SPACE変換 if( _tcscmp( szOption, _T("-") ) == 0 ) szOption[0] = _T('\0'); //オプションなし if( nFlgOpt & 0x0020 ) nFlgFile12 = 0; else nFlgFile12 = 1; // To Here Dec. 28, 2002 MIK { //コマンドライン文字列作成(MAX:1024) auto_sprintf( cmdline, _T("\"%ts\\%ts\" %ts \"%ts\" \"%ts\""), szExeFolder, //sakura.exeパス _T("diff.exe"), //diff.exe szOption, //diffオプション ( nFlgFile12 ? pszFile2 : pszFile1 ), ( nFlgFile12 ? pszFile1 : pszFile2 ) ); } { int nFlgOpt = 0; nFlgOpt |= 0x01; // GetStdOut if( bUTF8 ){ nFlgOpt |= 0x80; // UTF-8 out (SJISと違ってASCIIセーフなので) nFlgOpt |= 0x100; // UTF-8 in } nFlgOpt |= 0x40; // 拡張情報出力無効 COutputAdapterDiff oa(this, nFlgFile12); bool ret = ExecCmd( cmdline, nFlgOpt, NULL, &oa ); if( ret ){ if( oa.bDiffInfo == true && oa.nDiffLen > 0 ) { oa.szDiffData[oa.nDiffLen] = '\0'; AnalyzeDiffInfo( oa.szDiffData, nFlgFile12 ); } } } //DIFF差分が見つからなかったときにメッセージ表示 if( nFlgOpt & 0x0040 ) { if( !CDiffManager::getInstance()->IsDiffUse() ) { InfoMessage( this->GetHwnd(), LS(STR_ERR_DLGEDITVWDIFF5) ); } } //分割したビューも更新 m_pcEditWnd->Views_Redraw(); return; }
/*! @return 機能が割り当てられているキーストロークの数 @date Oct. 31, 2001 genta 動的な機能名に対応するため引数追加 @date 2007.02.22 ryoji デフォルト機能割り当てに関する処理を追加 */ int CKeyBind::CreateKeyBindList( HINSTANCE hInstance, //!< [in] インスタンスハンドル int nKeyNameArrNum, //!< [in] KEYDATA* pKeyNameArr, //!< [out] CNativeW& cMemList, //!< CFuncLookup* pcFuncLookup, //!< [in] 機能番号→名前の対応を取る BOOL bGetDefFuncCode //!< [in] ON:デフォルト機能割り当てを使う/OFF:使わない デフォルト:TRUE ) { int i; int j; int nValidKeys; WCHAR pszStr[256]; WCHAR szFuncName[256]; WCHAR szFuncNameJapanese[256]; nValidKeys = 0; cMemList.SetString(LTEXT("")); const WCHAR* pszSHIFT = LTEXT("Shift+"); const WCHAR* pszCTRL = LTEXT("Ctrl+"); const WCHAR* pszALT = LTEXT("Alt+"); const WCHAR* pszTAB = LTEXT("\t"); const WCHAR* pszCR = LTEXT("\r\n"); //\r=0x0d=CRを追加 cMemList.AppendString( LSW(STR_ERR_DLGKEYBIND1) ); cMemList.AppendString( pszCR ); cMemList.AppendString( LTEXT("-----\t-----\t-----\t-----\t-----") ); cMemList.AppendString( pszCR ); for( j = 0; j < 8; ++j ){ for( i = 0; i < nKeyNameArrNum; ++i ){ int iFunc = GetFuncCodeAt( pKeyNameArr[i], j, bGetDefFuncCode ); if( 0 != iFunc ){ nValidKeys++; if( j & _SHIFT ){ cMemList.AppendString( pszSHIFT ); } if( j & _CTRL ){ cMemList.AppendString( pszCTRL ); } if( j & _ALT ){ cMemList.AppendString( pszALT ); } cMemList.AppendString( to_wchar(pKeyNameArr[i].m_szKeyName) ); // Oct. 31, 2001 genta if( !pcFuncLookup->Funccode2Name( iFunc, szFuncNameJapanese, 255 )){ auto_strcpy( szFuncNameJapanese, LSW(STR_ERR_DLGKEYBIND2) ); } szFuncName[0] = LTEXT('\0'); /*"---unknown()--"*/ // /* 機能名日本語 */ // ::LoadString( // hInstance, // pKeyNameArr[i].m_nFuncCodeArr[j], // szFuncNameJapanese, 255 // ); cMemList.AppendString( pszTAB ); cMemList.AppendString( szFuncNameJapanese ); /* 機能ID→関数名,機能名日本語 */ //@@@ 2002.2.2 YAZAKI マクロをCSMacroMgrに統一 CSMacroMgr::GetFuncInfoByID( hInstance, iFunc, szFuncName, szFuncNameJapanese ); /* 関数名 */ cMemList.AppendString( pszTAB ); cMemList.AppendString( szFuncName ); /* 機能番号 */ cMemList.AppendString( pszTAB ); auto_sprintf( pszStr, LTEXT("%d"), iFunc ); cMemList.AppendString( pszStr ); /* キーマクロに記録可能な機能かどうかを調べる */ cMemList.AppendString( pszTAB ); //@@@ 2002.2.2 YAZAKI マクロをCSMacroMgrに統一 if( CSMacroMgr::CanFuncIsKeyMacro( iFunc ) ){ cMemList.AppendString( LTEXT("○") ); }else{ cMemList.AppendString( LTEXT("×") ); } cMemList.AppendString( pszCR ); } } } return nValidKeys; }
/*! GREP置換実行 */ void CViewCommander::Command_GREP_REPLACE( void ) { CNativeW cmWork1; CNativeT cmWork2; CNativeT cmWork3; CNativeW cmWork4; CDlgGrepReplace& cDlgGrepRep = GetEditWindow()->m_cDlgGrepReplace; cmWork1.SetString( cDlgGrepRep.m_strText.c_str() ); cmWork2.SetString( cDlgGrepRep.m_szFile ); cmWork3.SetString( cDlgGrepRep.m_szFolder ); cmWork4.SetString( cDlgGrepRep.m_strText2.c_str() ); /* 今のEditViewにGrep結果を表示する。 Grepモードのとき、または未編集で無題かつアウトプットでない場合。 自ウィンドウがGrep実行中も、(異常終了するので)別ウィンドウにする */ if( ( CEditApp::getInstance()->m_pcGrepAgent->m_bGrepMode && !CEditApp::getInstance()->m_pcGrepAgent->m_bGrepRunning ) || ( !GetDocument()->m_cDocEditor.IsModified() && !GetDocument()->m_cDocFile.GetFilePathClass().IsValidPath() && /* 現在編集中のファイルのパス */ !CAppMode::getInstance()->IsDebugMode() ) ){ CEditApp::getInstance()->m_pcGrepAgent->DoGrep( m_pCommanderView, true, &cmWork1, &cmWork4, &cmWork2, &cmWork3, false, cDlgGrepRep.m_bSubFolder, false, // Stdout true, // Header cDlgGrepRep.m_sSearchOption, cDlgGrepRep.m_nGrepCharSet, cDlgGrepRep.m_nGrepOutputLineType, cDlgGrepRep.m_nGrepOutputStyle, cDlgGrepRep.m_bGrepOutputFileOnly, cDlgGrepRep.m_bGrepOutputBaseFolder, cDlgGrepRep.m_bGrepSeparateFolder, cDlgGrepRep.m_bPaste, cDlgGrepRep.m_bBackup ); } else{ // 編集ウィンドウの上限チェック if( GetDllShareData().m_sNodes.m_nEditArrNum >= MAX_EDITWINDOWS ){ //最大値修正 //@@@ 2003.05.31 MIK OkMessage( m_pCommanderView->GetHwnd(), _T("編集ウィンドウ数の上限は%dです。\nこれ以上は同時に開けません。"), MAX_EDITWINDOWS ); return; } /*======= Grepの実行 =============*/ /* Grep結果ウィンドウの表示 */ cmWork1.Replace( L"\"", L"\"\"" ); cmWork2.Replace( _T("\""), _T("\"\"") ); cmWork3.Replace( _T("\""), _T("\"\"") ); cmWork4.Replace( L"\"", L"\"\"" ); // -GREPMODE -GKEY="1" -GREPR="2" -GFILE="*.*;*.c;*.h" -GFOLDER="c:\" -GCODE=0 -GOPT=S CNativeT cCmdLine; TCHAR szTemp[20]; cCmdLine.AppendString(_T("-GREPMODE -GKEY=\"")); cCmdLine.AppendStringW(cmWork1.GetStringPtr()); cCmdLine.AppendString(_T("\" -GREPR=\"")); cCmdLine.AppendStringW(cmWork4.GetStringPtr()); cCmdLine.AppendString(_T("\" -GFILE=\"")); cCmdLine.AppendString(cmWork2.GetStringPtr()); cCmdLine.AppendString(_T("\" -GFOLDER=\"")); cCmdLine.AppendString(cmWork3.GetStringPtr()); cCmdLine.AppendString(_T("\" -GCODE=")); auto_sprintf( szTemp, _T("%d"), cDlgGrepRep.m_nGrepCharSet ); cCmdLine.AppendString(szTemp); //GOPTオプション TCHAR pOpt[64]; pOpt[0] = _T('\0'); if( cDlgGrepRep.m_bSubFolder )_tcscat( pOpt, _T("S") ); // サブフォルダからも検索する if( cDlgGrepRep.m_sSearchOption.bWordOnly )_tcscat( pOpt, _T("W") ); // 単語単位で探す if( cDlgGrepRep.m_sSearchOption.bLoHiCase )_tcscat( pOpt, _T("L") ); // 英大文字と英小文字を区別する if( cDlgGrepRep.m_sSearchOption.bRegularExp )_tcscat( pOpt, _T("R") ); // 正規表現 if( cDlgGrepRep.m_nGrepOutputLineType == 1 )_tcscat( pOpt, _T("P") ); // 行を出力する // if( cDlgGrepRep.m_nGrepOutputLineType == 2 )_tcscat( pOpt, _T("N") ); // 否ヒット行を出力する 2014.09.23 if( 1 == cDlgGrepRep.m_nGrepOutputStyle )_tcscat( pOpt, _T("1") ); // Grep: 出力形式 if( 2 == cDlgGrepRep.m_nGrepOutputStyle )_tcscat( pOpt, _T("2") ); // Grep: 出力形式 if( 3 == cDlgGrepRep.m_nGrepOutputStyle )_tcscat( pOpt, _T("3") ); if( cDlgGrepRep.m_bGrepOutputFileOnly )_tcscat( pOpt, _T("F") ); if( cDlgGrepRep.m_bGrepOutputBaseFolder )_tcscat( pOpt, _T("B") ); if( cDlgGrepRep.m_bGrepSeparateFolder )_tcscat( pOpt, _T("D") ); if( cDlgGrepRep.m_bPaste )_tcscat( pOpt, _T("C") ); // クリップボードから貼り付け if( cDlgGrepRep.m_bBackup )_tcscat( pOpt, _T("O") ); // バックアップ作成 if( 0 < _tcslen( pOpt ) ){ cCmdLine.AppendString( _T(" -GOPT=") ); cCmdLine.AppendString( pOpt ); } SLoadInfo sLoadInfo; sLoadInfo.cFilePath = _T(""); sLoadInfo.eCharCode = CODE_NONE; sLoadInfo.bViewMode = false; CControlTray::OpenNewEditor( G_AppInstance(), m_pCommanderView->GetHwnd(), sLoadInfo, cCmdLine.GetStringPtr(), false, NULL, GetDllShareData().m_Common.m_sTabBar.m_bNewWindow? true : false ); } return; }
/*! PPAに関数を登録するための文字列を作成する @param cMacroFuncInfo [in] マクロデータ @param szBuffer [out] 生成した文字列を入れるバッファへのポインタ @note バッファサイズは 9 + 3 + メソッド名の長さ + 13 * 4 + 9 + 5 は最低必要 @date 2003.06.01 Moca スタティックメンバに変更 cMacroFuncInfo.m_pszDataを書き換えないように変更 @date 2003.06.16 genta 無駄なnew/deleteを避けるためバッファを外から与えるように */ char* CPPA::GetDeclarations( const MacroFuncInfo& cMacroFuncInfo, char* szBuffer ) { char szType[20]; // procedure/function用バッファ char szReturn[20]; // 戻り値型用バッファ if (cMacroFuncInfo.m_varResult == VT_EMPTY){ strcpy( szType, "procedure" ); szReturn[0] = '\0'; } else { strcpy( szType, "function" ); if (cMacroFuncInfo.m_varResult == VT_BSTR){ strcpy( szReturn, ": string" ); } else if ( cMacroFuncInfo.m_varResult == VT_I4 ){ strcpy( szReturn, ": Integer" ); } else { szReturn[0] = '\0'; } } char szArguments[8][20]; // 引数用バッファ int i; for (i=0; i<8; i++){ VARTYPE type = VT_EMPTY; if( i < 4 ){ type = cMacroFuncInfo.m_varArguments[i]; }else{ if( cMacroFuncInfo.m_pData && i < cMacroFuncInfo.m_pData->m_nArgMinSize ){ type = cMacroFuncInfo.m_pData->m_pVarArgEx[i - 4]; } } if ( type == VT_EMPTY ){ break; } if ( type == VT_BSTR ){ strcpy( szArguments[i], "s0: string" ); szArguments[i][1] = '0' + (char)i; } else if ( type == VT_I4 ){ strcpy( szArguments[i], "i0: Integer" ); szArguments[i][1] = '0' + (char)i; } else { strcpy( szArguments[i], "u0: Unknown" ); } } if ( i > 0 ){ // 引数があったとき int j; char szArgument[8*20]; // 2002.12.06 Moca 原因不明だが,strcatがVC6Proでうまく動かなかったため,strcpyにしてみたら動いた strcpy( szArgument, szArguments[0] ); for ( j=1; j<i; j++){ strcat( szArgument, "; " ); strcat( szArgument, szArguments[j] ); } auto_sprintf( szBuffer, "%hs S_%ls(%hs)%hs; index %d;", szType, cMacroFuncInfo.m_pszFuncName, szArgument, szReturn, cMacroFuncInfo.m_nFuncID ); } else { auto_sprintf( szBuffer, "%hs S_%ls%hs; index %d;", szType, cMacroFuncInfo.m_pszFuncName, szReturn, cMacroFuncInfo.m_nFuncID ); } // Jun. 01, 2003 Moca / Jun. 16, 2003 genta return szBuffer; }
/* ダイアログデータの設定 */ void CDlgCtrlCode::SetData( void ) { HWND hwndWork; int i, count; long lngStyle; LV_ITEM lvi; /* リスト */ hwndWork = ::GetDlgItem( GetHwnd(), IDC_LIST_CTRLCODE ); ListView_DeleteAllItems( hwndWork ); /* リストを空にする */ /* 行選択 */ lngStyle = ListView_GetExtendedListViewStyle( hwndWork ); lngStyle |= LVS_EX_FULLROWSELECT; ListView_SetExtendedListViewStyle( hwndWork, lngStyle ); /* データ表示 */ TCHAR tmp[10]; count = 0; for( i = 0; i < _countof(p_ctrl_list); i++ ) { if( p_ctrl_list[i].jname == NULL ) continue; // 2011.06.01 nasukoji 元のjnameがNULLのものはそのまま残す if( p_ctrl_list[i].jname ){ // LMP: Added, nasukoji changed p_ctrl_list[i].jname = (LPTSTR)cLabel_jname[i].LoadString(STR_ERR_DLGCTL5 + i); } auto_sprintf( tmp, _T("0x%02X"), p_ctrl_list[i].code ); lvi.mask = LVIF_TEXT | LVIF_PARAM; lvi.pszText = tmp; lvi.iItem = count; lvi.iSubItem = 0; lvi.lParam = 0; ListView_InsertItem( hwndWork, &lvi ); if( p_ctrl_list[i].code <= 0x1f ) auto_sprintf( tmp, _T("^%tc"), _T('@') + p_ctrl_list[i].code ); else if( p_ctrl_list[i].code == 0x7f ) _tcscpy( tmp, _T("^?") ); else _tcscpy( tmp, _T("・") ); lvi.mask = LVIF_TEXT; lvi.iItem = count; lvi.iSubItem = 1; lvi.pszText = tmp; ListView_SetItem( hwndWork, &lvi ); lvi.mask = LVIF_TEXT; lvi.iItem = count; lvi.iSubItem = 2; lvi.pszText = const_cast<TCHAR*>(p_ctrl_list[i].name); ListView_SetItem( hwndWork, &lvi ); lvi.mask = LVIF_TEXT; lvi.iItem = count; lvi.iSubItem = 3; lvi.pszText = const_cast<TCHAR*>(p_ctrl_list[i].jname); ListView_SetItem( hwndWork, &lvi ); count++; } ListView_SetItemState( hwndWork, 0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); return; }
/* ダイアログデータの設定 */ void CDlgJump::SetData( void ) { CEditDoc* pCEditDoc = (CEditDoc*)m_lParam; CFuncInfoArr cFuncInfoArr; int i; HWND hwndCtrl; wchar_t szText[1024]; int nIndexCurSel = 0; // Sep. 11, 2004 genta 初期化 int nIndex; int nWorkLine; //$$ 条件により、レイアウト・ロジックの単位が混在するため、ミスの原因になりやすい int nPLSQLBlockNum; // GetHwnd() = hwndDlg; //From Here Oct. 7, 2000 JEPRO 前回入力した行番号を保持するように下行を変更 // ::DlgItem_SetText( GetHwnd(), IDC_EDIT_LINENUM, "" ); /* 行番号 */ if( 0 == m_nLineNum ){ ::DlgItem_SetText( GetHwnd(), IDC_EDIT_LINENUM, _T("") ); /* 行番号 */ }else{ ::SetDlgItemInt( GetHwnd(), IDC_EDIT_LINENUM, m_nLineNum, FALSE ); /* 前回の行番号 */ } //To Here Oct. 7, 2000 ::SetDlgItemInt( GetHwnd(), IDC_EDIT_PLSQL_E1, m_nPLSQL_E1, FALSE ); /* PL/SQL関数リスト作成 */ hwndCtrl = ::GetDlgItem( GetHwnd(), IDC_COMBO_PLSQLBLOCKS ); /* タイプ別に設定されたアウトライン解析方法 */ if( OUTLINE_PLSQL == pCEditDoc->m_cDocType.GetDocumentAttribute().m_eDefaultOutline ){ pCEditDoc->m_cDocOutline.MakeFuncList_PLSQL( &cFuncInfoArr ); } nWorkLine = -1; nIndex = 0; nPLSQLBlockNum = 0; for( i = 0; i < cFuncInfoArr.GetNum(); ++i ){ if( 31 == cFuncInfoArr.GetAt( i )->m_nInfo || 41 == cFuncInfoArr.GetAt( i )->m_nInfo ){ } if( 31 == cFuncInfoArr.GetAt( i )->m_nInfo ){ if( m_pShareData->m_bLineNumIsCRLF_ForJump ){ /* 行番号の表示 false=折り返し単位/true=改行単位 */ auto_sprintf( szText, LSW(STR_DLGJUMP_PSLQL), cFuncInfoArr.GetAt( i )->m_nFuncLineCRLF, cFuncInfoArr.GetAt( i )->m_cmemFuncName.GetStringPtr() ); }else{ auto_sprintf( szText, LSW(STR_DLGJUMP_PSLQL), cFuncInfoArr.GetAt( i )->m_nFuncLineLAYOUT, cFuncInfoArr.GetAt( i )->m_cmemFuncName.GetStringPtr() ); } nIndex = Combo_AddString( hwndCtrl, szText ); if( m_pShareData->m_bLineNumIsCRLF_ForJump ){ /* 行番号の表示 false=折り返し単位/true=改行単位 */ Combo_SetItemData( hwndCtrl, nIndex, (Int)cFuncInfoArr.GetAt( i )->m_nFuncLineCRLF ); } else{ Combo_SetItemData( hwndCtrl, nIndex, (Int)cFuncInfoArr.GetAt( i )->m_nFuncLineLAYOUT ); } nPLSQLBlockNum++; } if( 41 == cFuncInfoArr.GetAt( i )->m_nInfo ){ if( m_pShareData->m_bLineNumIsCRLF_ForJump ){ /* 行番号の表示 false=折り返し単位/true=改行単位 */ auto_sprintf( szText, LSW(STR_DLGJUMP_PSLQL), cFuncInfoArr.GetAt( i )->m_nFuncLineCRLF, cFuncInfoArr.GetAt( i )->m_cmemFuncName.GetStringPtr() ); }else{ auto_sprintf( szText, LSW(STR_DLGJUMP_PSLQL), cFuncInfoArr.GetAt( i )->m_nFuncLineLAYOUT, cFuncInfoArr.GetAt( i )->m_cmemFuncName.GetStringPtr() ); } nIndexCurSel = nIndex = Combo_AddString( hwndCtrl, szText ); if( m_pShareData->m_bLineNumIsCRLF_ForJump ){ /* 行番号の表示 false=折り返し単位/true=改行単位 */ nWorkLine = (Int)cFuncInfoArr.GetAt( i )->m_nFuncLineCRLF; Combo_SetItemData( hwndCtrl, nIndex, (Int)cFuncInfoArr.GetAt( i )->m_nFuncLineCRLF ); }else{ nWorkLine = (Int)cFuncInfoArr.GetAt( i )->m_nFuncLineLAYOUT; Combo_SetItemData( hwndCtrl, nIndex, (Int)cFuncInfoArr.GetAt( i )->m_nFuncLineLAYOUT ); } ++nPLSQLBlockNum; } } Combo_SetCurSel( hwndCtrl, nIndexCurSel ); /* PL/SQLのパッケージ本体が検出された場合 */ if( -1 != nWorkLine ){ m_nPLSQL_E1 = nWorkLine; ::SetDlgItemInt( GetHwnd(), IDC_EDIT_PLSQL_E1, m_nPLSQL_E1, FALSE ); } /* PL/SQLのパッケージブロックが検出された場合 */ if( 0 < nPLSQLBlockNum ){ m_bPLSQL = TRUE; } ::CheckDlgButton( GetHwnd(), IDC_CHECK_PLSQL, m_bPLSQL ); /* PL/SQLソースの有効行か */ if( BST_CHECKED == ::IsDlgButtonChecked( GetHwnd(), IDC_CHECK_PLSQL ) ){ ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_LABEL_PLSQL1 ), TRUE ); //Sept. 12, 2000 JEPRO ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_LABEL_PLSQL2 ), TRUE ); //Sept. 12, 2000 JEPRO ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_LABEL_PLSQL3 ), TRUE ); //Sept. 12, 2000 JEPRO ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_EDIT_PLSQL_E1 ), TRUE ); ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_SPIN_PLSQL_E1 ), TRUE ); //Oct. 6, 2000 JEPRO ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_COMBO_PLSQLBLOCKS ), TRUE ); m_pShareData->m_bLineNumIsCRLF_ForJump = true; ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_RADIO_LINENUM_LAYOUT ), FALSE ); ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_RADIO_LINENUM_CRLF ), FALSE ); }else{ ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_LABEL_PLSQL1 ), FALSE ); //Sept. 12, 2000 JEPRO ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_LABEL_PLSQL2 ), FALSE ); //Sept. 12, 2000 JEPRO ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_LABEL_PLSQL3 ), FALSE ); //Sept. 12, 2000 JEPRO ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_EDIT_PLSQL_E1 ), FALSE ); ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_SPIN_PLSQL_E1 ), FALSE ); //Oct. 6, 2000 JEPRO ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_COMBO_PLSQLBLOCKS ), FALSE ); ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_RADIO_LINENUM_LAYOUT ), TRUE ); ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_RADIO_LINENUM_CRLF ), TRUE ); } /* 行番号の表示 false=折り返し単位/true=改行単位 */ if( m_pShareData->m_bLineNumIsCRLF_ForJump ){ ::CheckDlgButton( GetHwnd(), IDC_RADIO_LINENUM_LAYOUT, FALSE ); ::CheckDlgButton( GetHwnd(), IDC_RADIO_LINENUM_CRLF, TRUE ); }else{ ::CheckDlgButton( GetHwnd(), IDC_RADIO_LINENUM_LAYOUT, TRUE ); ::CheckDlgButton( GetHwnd(), IDC_RADIO_LINENUM_CRLF, FALSE ); } return; }
/*! 「ファイル名を付けて保存」ダイアログ @date 2001.02.09 genta 改行コードを示す引数追加 @date 2003.03.30 genta ファイル名未定時の初期ディレクトリをカレントフォルダに @date 2003.07.20 ryoji BOMの有無を示す引数追加 @date 2006.11.10 ryoji ユーザー指定の拡張子を状況依存で変化させる */ bool CDocFileOperation::SaveFileDialog( SSaveInfo* pSaveInfo //!< [out] ) { //拡張子指定 // 一時適用や拡張子なしの場合の拡張子をタイプ別設定から持ってくる // 2008/6/14 大きく改造 Uchi TCHAR szDefaultWildCard[_MAX_PATH + 10]; // ユーザー指定拡張子 { LPCTSTR szExt; const STypeConfig& type = m_pcDocRef->m_cDocType.GetDocumentAttribute(); //ファイルパスが無い場合は *.txt とする if(!this->m_pcDocRef->m_cDocFile.GetFilePathClass().IsValidPath()){ szExt = _T(""); } else { szExt = this->m_pcDocRef->m_cDocFile.GetFilePathClass().GetExt(); } if (type.m_nIdx == 0) { // 基本 if (szExt[0] == _T('\0')) { // ファイルパスが無いまたは拡張子なし _tcscpy(szDefaultWildCard, _T("*.txt")); } else { // 拡張子あり _tcscpy(szDefaultWildCard, _T("*")); _tcscat(szDefaultWildCard, szExt); } } else { szDefaultWildCard[0] = _T('\0'); CDocTypeManager::ConvertTypesExtToDlgExt(type.m_szTypeExts, szExt, szDefaultWildCard); } if(!this->m_pcDocRef->m_cDocFile.GetFilePathClass().IsValidPath()){ //「新規から保存時は全ファイル表示」オプション // 2008/6/15 バグフィックス Uchi if( GetDllShareData().m_Common.m_sFile.m_bNoFilterSaveNew ) _tcscat(szDefaultWildCard, _T(";*.*")); // 全ファイル表示 } else { //「新規以外から保存時は全ファイル表示」オプション if( GetDllShareData().m_Common.m_sFile.m_bNoFilterSaveFile ) _tcscat(szDefaultWildCard, _T(";*.*")); // 全ファイル表示 } } // 無題に、無題番号を付ける if( pSaveInfo->cFilePath[0] == _T('\0') ){ const EditNode* node = CAppNodeManager::getInstance()->GetEditNode( m_pcDocRef->m_pcEditWnd->GetHwnd() ); if( 0 < node->m_nId ){ TCHAR szText[16]; auto_sprintf(szText, _T("%d"), node->m_nId); auto_strcpy(pSaveInfo->cFilePath, LS(STR_NO_TITLE2)); // 無題 auto_strcat(pSaveInfo->cFilePath, szText); } } // ダイアログを表示 CDlgOpenFile cDlgOpenFile; cDlgOpenFile.Create( G_AppInstance(), CEditWnd::getInstance()->GetHwnd(), szDefaultWildCard, CSakuraEnvironment::GetDlgInitialDir().c_str(), // 初期フォルダ CMRUFile().GetPathList(), // 最近のファイル CMRUFolder().GetPathList() // 最近のフォルダ ); return cDlgOpenFile.DoModalSaveDlg( pSaveInfo, pSaveInfo->eCharCode == CODE_CODEMAX ); }