/*! @brief 結合して表示 タブウィンドウの結合、非結合を切り替えるコマンドです。 [共通設定]->[ウィンドウ]->[タブ表示 まとめない]の切り替えと同じです。 @author Kazika @date 2004.07.14 Kazika 新規作成 @date 2007.06.20 ryoji GetDllShareData().m_TabWndWndplの廃止,グループIDリセット */ void CViewCommander::Command_BIND_WINDOW( void ) { //タブモードであるならば if (GetDllShareData().m_Common.m_sTabBar.m_bDispTabWnd) { //タブウィンドウの設定を変更 GetDllShareData().m_Common.m_sTabBar.m_bDispTabWndMultiWin = !GetDllShareData().m_Common.m_sTabBar.m_bDispTabWndMultiWin; // まとめるときは WS_EX_TOPMOST 状態を同期する // 2007.05.18 ryoji if( !GetDllShareData().m_Common.m_sTabBar.m_bDispTabWndMultiWin ) { GetEditWindow()->WindowTopMost( ( (DWORD)::GetWindowLongPtr( GetEditWindow()->GetHwnd(), GWL_EXSTYLE ) & WS_EX_TOPMOST )? 1: 2 ); } //Start 2004.08.27 Kazika 変更 //タブウィンドウの設定を変更をブロードキャストする CAppNodeManager::getInstance()->ResetGroupId(); CAppNodeGroupHandle(0).PostMessageToAllEditors( MYWM_TAB_WINDOW_NOTIFY, //タブウィンドウイベント (WPARAM)((GetDllShareData().m_Common.m_sTabBar.m_bDispTabWndMultiWin) ? TWNT_MODE_DISABLE : TWNT_MODE_ENABLE),//タブモード有効/無効化イベント (LPARAM)GetEditWindow()->GetHwnd(), //CEditWndのウィンドウハンドル m_pCommanderView->GetHwnd()); //自分自身 //End 2004.08.27 Kazika } }
void CMruListener::OnAfterLoad(const SLoadInfo& sLoadInfo) { CEditDoc* pcDoc = GetListeningDoc(); CMRUFile cMRU; EditInfo eiOld; bool bIsExistInMRU = cMRU.GetEditInfo(pcDoc->m_cDocFile.GetFilePath(),&eiOld); //キャレット位置の復元 if( bIsExistInMRU && GetDllShareData().m_Common.m_sFile.GetRestoreCurPosition() ){ //キャレット位置取得 CLayoutPoint ptCaretPos; pcDoc->m_cLayoutMgr.LogicToLayout(eiOld.m_ptCursor, &ptCaretPos); //ビュー取得 CEditView& cView = pcDoc->m_pcEditWnd->GetActiveView(); if( ptCaretPos.GetY2() >= pcDoc->m_cLayoutMgr.GetLineCount() ){ //ファイルの最後に移動 cView.GetCommander().HandleCommand( F_GOFILEEND, false, 0, 0, 0, 0 ); } else{ cView.GetTextArea().SetViewTopLine( eiOld.m_nViewTopLine ); // 2001/10/20 novice cView.GetTextArea().SetViewLeftCol( eiOld.m_nViewLeftCol ); // 2001/10/20 novice // From Here Mar. 28, 2003 MIK // 改行の真ん中にカーソルが来ないように。 const CDocLine *pTmpDocLine = pcDoc->m_cDocLineMgr.GetLine( eiOld.m_ptCursor.GetY2() ); // 2008.08.22 ryoji 改行単位の行番号を渡すように修正 if( pTmpDocLine ){ if( pTmpDocLine->GetLengthWithoutEOL() < eiOld.m_ptCursor.x ) ptCaretPos.x--; } // To Here Mar. 28, 2003 MIK cView.GetCaret().MoveCursor( ptCaretPos, true ); cView.GetCaret().m_nCaretPosX_Prev = cView.GetCaret().GetCaretLayoutPos().GetX2(); } } // ブックマーク復元 // 2002.01.16 hor if( bIsExistInMRU ){ if( GetDllShareData().m_Common.m_sFile.GetRestoreBookmarks() ){ CBookmarkManager(&pcDoc->m_cDocLineMgr).SetBookMarks(eiOld.m_szMarkLines); } } else{ eiOld.m_szMarkLines[0] = L'\0'; } // MRUリストへの登録 EditInfo eiNew; pcDoc->GetEditInfo(&eiNew); // 2014.07.04 ブックマークの保持(エディタが落ちたときブックマークが消えるため) if( bIsExistInMRU ){ if( GetDllShareData().m_Common.m_sFile.GetRestoreBookmarks() ){ // SetBookMarksでデータがNUL区切りに書き換わっているので再取得 cMRU.GetEditInfo(pcDoc->m_cDocFile.GetFilePath(),&eiOld); auto_strcpy(eiNew.m_szMarkLines, eiOld.m_szMarkLines); } } cMRU.Add( &eiNew ); }
/*! GREP置換ダイアログの表示 */ void CViewCommander::Command_GREP_REPLACE_DLG( void ) { CNativeW cmemCurText; CDlgGrepReplace& cDlgGrepRep = GetEditWindow()->m_cDlgGrepReplace; // 複数Grepウィンドウを使い分けている場合などに影響しないように、未設定のときだけHistoryを見る bool bGetHistory = cDlgGrepRep.m_bSetText == false; m_pCommanderView->GetCurrentTextForSearchDlg( cmemCurText, bGetHistory ); if( 0 < cmemCurText.GetStringLength() ){ cDlgGrepRep.m_strText = cmemCurText.GetStringPtr(); cDlgGrepRep.m_bSetText = true; } if( 0 < GetDllShareData().m_sSearchKeywords.m_aReplaceKeys.size() ){ if( cDlgGrepRep.m_nReplaceKeySequence < GetDllShareData().m_Common.m_sSearch.m_nReplaceKeySequence ){ cDlgGrepRep.m_strText2 = GetDllShareData().m_sSearchKeywords.m_aReplaceKeys[0]; } } int nRet = cDlgGrepRep.DoModal( G_AppInstance(), m_pCommanderView->GetHwnd(), GetDocument()->m_cDocFile.GetFilePath(), (LPARAM)m_pCommanderView ); if( !nRet ){ return; } HandleCommand(F_GREP_REPLACE, TRUE, 0, 0, 0, 0); // GREPコマンドの発行 }
/*! @brief ツールバーの表示を更新する @note 他から呼べるようにOnToolbarTimer()より切り出した @date 2008.10.05 nasukoji */ void CMainToolBar::UpdateToolbar( void ) { // 印刷プレビュー中なら、何もしない。 if( m_pOwner->IsInPreviewMode() )return; // ツールバーの状態更新 if( m_hwndToolBar ) { for( int i = 0; i < GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonNum; ++i ) { TBBUTTON tbb = m_pOwner->GetMenuDrawer().getButton( GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonIdxArr[i] ); int state = Toolbar_GetState( m_hwndToolBar, tbb.idCommand ); if( state != -1 ) { WORD stateToSet = 0; // 機能が利用可能か調べる if( IsFuncEnable( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) ) { stateToSet |= TBSTATE_ENABLED; } // 機能がチェック状態か調べる if( IsFuncChecked( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) ) { stateToSet |= TBSTATE_CHECKED; } if( state != stateToSet ) { Toolbar_SetState( m_hwndToolBar, tbb.idCommand, stateToSet ); } } } } }
//検索ボックスを更新 void CMainToolBar::AcceptSharedSearchKey() { if( m_hwndSearchBox ) { int i; // 2013.05.28 Combo_ResetContentだとちらつくのでDeleteStringでリストだけ削除 while (Combo_GetCount(m_hwndSearchBox) > 0) { Combo_DeleteString(m_hwndSearchBox, 0); } int nSize = GetDllShareData().m_sSearchKeywords.m_aSearchKeys.size(); for( i = 0; i < nSize; i++ ) { Combo_AddString( m_hwndSearchBox, GetDllShareData().m_sSearchKeywords.m_aSearchKeys[i] ); } const wchar_t* pszText; if( GetDllShareData().m_Common.m_sSearch.m_bInheritKeyOtherView && m_pOwner->GetActiveView().m_nCurSearchKeySequence < GetDllShareData().m_Common.m_sSearch.m_nSearchKeySequence || 0 == m_pOwner->GetActiveView().m_strCurSearchKey.size() ){ if( 0 < nSize ){ pszText = GetDllShareData().m_sSearchKeywords.m_aSearchKeys[0]; }else{ pszText = L""; } }else{ pszText = m_pOwner->GetActiveView().m_strCurSearchKey.c_str(); } std::wstring strText; GetSearchKey(strText); if( 0 < nSize && 0 != wcscmp(strText.c_str(), pszText) ){ ::SetWindowText(m_hwndSearchBox, to_tchar(pszText)); } } }
/*! @brief ツールバーの表示を更新する @note 他から呼べるようにOnToolbarTimer()より切り出した @date 2008.10.05 nasukoji */ void CMainToolBar::UpdateToolbar( void ) { // 印刷プレビュー中なら、何もしない。 if( m_pOwner->IsInPreviewMode() )return; // ツールバーの状態更新 if( m_hwndToolBar ) { for( int i = 0; i < GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonNum; ++i ) { TBBUTTON tbb = m_pOwner->GetMenuDrawer().getButton( GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonIdxArr[i] ); // 機能が利用可能か調べる Toolbar_EnableButton( m_hwndToolBar, tbb.idCommand, IsFuncEnable( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) ); // 機能がチェック状態か調べる Toolbar_CheckButton( m_hwndToolBar, tbb.idCommand, IsFuncChecked( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) ); } } }
void CViewCommander::Command_GROUPCLOSE( void ) { if( GetDllShareData().m_Common.m_sTabBar.m_bDispTabWnd && !GetDllShareData().m_Common.m_sTabBar.m_bDispTabWndMultiWin ){ int nGroup = CAppNodeManager::getInstance()->GetEditNode( GetMainWindow() )->GetGroup(); CControlTray::CloseAllEditor( TRUE, GetMainWindow(), TRUE, nGroup ); } return; }
static bool MakeDiffTmpFile_core(CTextOutputStream& out, HWND hwnd, CEditView& view, bool bBom) { CLogicInt y = CLogicInt(0); const wchar_t* pLineData; if( !hwnd ){ const CDocLineMgr& docMgr = view.m_pcEditDoc->m_cDocLineMgr; for(;;){ CLogicInt nLineLen; pLineData = docMgr.GetLine(y)->GetDocLineStrWithEOL(&nLineLen); // 正常終了 if( 0 == nLineLen || NULL == pLineData ) break; if( bBom ){ CNativeW cLine2(L"\ufeff"); cLine2.AppendString(pLineData, nLineLen); out.WriteString(cLine2.GetStringPtr(), cLine2.GetStringLength()); bBom = false; }else{ out.WriteString(pLineData,nLineLen); } y++; } }else if( IsSakuraMainWindow(hwnd) ) { const int max_size = (int)GetDllShareData().m_sWorkBuffer.GetWorkBufferCount<const EDIT_CHAR>(); pLineData = GetDllShareData().m_sWorkBuffer.GetWorkBuffer<const EDIT_CHAR>(); for(;;){ int nLineOffset = 0; int nLineLen = 0; //初回用仮値 do{ // m_sWorkBuffer#m_Workの排他制御。外部コマンド出力/TraceOut/Diffが対象 LockGuard<CMutex> guard( CShareData::GetMutexShareWork() ); { nLineLen = ::SendMessageAny( hwnd, MYWM_GETLINEDATA, y, nLineOffset ); if( nLineLen == 0 ){ return true; } // EOF => 正常終了 if( nLineLen < 0 ){ return false; } // 何かエラー if( bBom ){ CNativeW cLine2(L"\ufeff"); cLine2.AppendString(pLineData, t_min(nLineLen, max_size)); out.WriteString(cLine2.GetStringPtr(), cLine2.GetStringLength()); bBom = false; }else{ out.WriteString(pLineData, t_min(nLineLen, max_size)); } } nLineOffset += max_size; }while(max_size < nLineLen); y++; } }else{ return false; } if( bBom ){ out.WriteString(L"\ufeff", 1); } return true; }
/*! キャレット位置の単語を辞書検索ON-OFF @date 2006.03.24 fon 新規作成 */ void CViewCommander::Command_ToggleKeySearch( int option ) { /* 共通設定ダイアログの設定をキー割り当てでも切り替えられるように */ if( option == 0 ){ if( GetDllShareData().m_Common.m_sSearch.m_bUseCaretKeyWord ){ GetDllShareData().m_Common.m_sSearch.m_bUseCaretKeyWord = FALSE; }else{ GetDllShareData().m_Common.m_sSearch.m_bUseCaretKeyWord = TRUE; } }else if( option == 1 ){ GetDllShareData().m_Common.m_sSearch.m_bUseCaretKeyWord = TRUE; }else if( option == 2 ){ GetDllShareData().m_Common.m_sSearch.m_bUseCaretKeyWord = FALSE; } }
/*! キーのデフォルト機能を取得する @param nKeyCode [in] キーコード @param nState [in] Shift,Ctrl,Altキー状態 @return 機能番号 @date 2007.02.22 ryoji 新規作成 */ EFunctionCode CKeyBind::GetDefFuncCode( int nKeyCode, int nState ) { DLLSHAREDATA* pShareData = &GetDllShareData(); if( pShareData == NULL ) return F_DEFAULT; EFunctionCode nDefFuncCode = F_DEFAULT; if( nKeyCode == VK_F4 ){ if( nState == _CTRL ){ nDefFuncCode = F_FILECLOSE; // 閉じて(無題) if( pShareData->m_Common.m_sTabBar.m_bDispTabWnd && !pShareData->m_Common.m_sTabBar.m_bDispTabWndMultiWin ){ nDefFuncCode = F_WINCLOSE; // 閉じる } } else if( nState == _ALT ){ nDefFuncCode = F_WINCLOSE; // 閉じる if( pShareData->m_Common.m_sTabBar.m_bDispTabWnd && !pShareData->m_Common.m_sTabBar.m_bDispTabWndMultiWin ){ if( !pShareData->m_Common.m_sTabBar.m_bTab_CloseOneWin ){ nDefFuncCode = F_GROUPCLOSE; // グループを閉じる // 2007.06.20 ryoji } } } } return nDefFuncCode; }
/*! m_aSearchKeysにpszSearchKeyを追加する。 YAZAKI */ void CSearchKeywordManager::AddToSearchKeyArr( const wchar_t* pszSearchKey ) { CRecentSearch cRecentSearchKey; cRecentSearchKey.AppendItem( pszSearchKey ); cRecentSearchKey.Terminate(); GetDllShareData().m_Common.m_sSearch.m_nSearchKeySequence++; }
// Readme ファイルの表示 2011/11/2 Uchi bool CPropPlugin::BrowseReadMe(const std::tstring& sReadMeName) { // -- -- -- -- コマンドライン文字列を生成 -- -- -- -- // CCommandLineString cCmdLineBuf; //アプリケーションパス TCHAR szExePath[MAX_PATH + 1]; ::GetModuleFileName( NULL, szExePath, _countof( szExePath ) ); cCmdLineBuf.AppendF( _T("\"%ts\""), szExePath ); // ファイル名 cCmdLineBuf.AppendF( _T(" \"%ts\""), sReadMeName.c_str() ); // コマンドラインオプション cCmdLineBuf.AppendF(_T(" -R -CODE=99")); // グループID int nGroup = GetDllShareData().m_sNodes.m_nGroupSequences; if( nGroup > 0 ) { cCmdLineBuf.AppendF( _T(" -GROUP=%d"), nGroup+1 ); } //CreateProcessに渡すSTARTUPINFOを作成 STARTUPINFO sui; ::GetStartupInfo(&sui); PROCESS_INFORMATION pi; ZeroMemory( &pi, sizeof(pi) ); TCHAR szCmdLine[1024]; auto_strcpy_s(szCmdLine, _countof(szCmdLine), cCmdLineBuf.c_str()); return (::CreateProcess( NULL, szCmdLine, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &sui, &pi ) != 0); }
/* 閉じて(無題)。 ユーザキャンセル操作等によりクローズされなかった場合は false を返す。 @date 2006.12.30 ryoji CEditView::Command_FILESAVEAS()から処理本体を切り出し */ bool CDocFileOperation::FileClose() { /* ファイルを閉じるときのMRU登録 & 保存確認 & 保存実行 */ if( !m_pcDocRef->OnFileClose(false) ){ return false; } //プラグイン:DocumentCloseイベント実行 CPlug::Array plugs; CWSHIfObj::List params; CJackManager::getInstance()->GetUsablePlug( PP_DOCUMENT_CLOSE, 0, &plugs ); for( CPlug::ArrayIter it = plugs.begin(); it != plugs.end(); it++ ){ (*it)->Invoke(&m_pcDocRef->m_pcEditWnd->GetActiveView(), params); } /* 既存データのクリア */ m_pcDocRef->InitDoc(); /* 全ビューの初期化 */ m_pcDocRef->InitAllView(); m_pcDocRef->SetCurDirNotitle(); // 無題番号取得 CAppNodeManager::getInstance()->GetNoNameNumber( m_pcDocRef->m_pcEditWnd->GetHwnd() ); /* 親ウィンドウのタイトルを更新 */ m_pcDocRef->m_pcEditWnd->UpdateCaption(); // 2006.09.01 ryoji オープン後自動実行マクロを実行する m_pcDocRef->RunAutoMacro( GetDllShareData().m_Common.m_sMacro.m_nMacroOnOpened ); return true; }
//! 前のブックマークを探し,見つかったら移動する. void CViewCommander::Command_FUNCLIST_PREV(void) { CLogicPoint ptXY(0,GetCaret().GetCaretLogicPos().y); int nYOld = ptXY.y; for(int n = 0; n < 2; n++){ if(CFuncListManager().SearchFuncListMark(&GetDocument()->m_cDocLineMgr, ptXY.GetY2(), SEARCH_BACKWARD, &ptXY.y)){ CLayoutPoint ptLayout; GetDocument()->m_cLayoutMgr.LogicToLayout(ptXY,&ptLayout); m_pCommanderView->MoveCursorSelecting( ptLayout, m_pCommanderView->GetSelectionInfo().m_bSelectingLock ); if( nYOld <= ptXY.y ){ m_pCommanderView->SendStatusMessage(LS(STR_ERR_SRPREV1)); } return; } if( !GetDllShareData().m_Common.m_sSearch.m_bSearchAll ){ break; } ptXY.y= GetDocument()->m_cDocLineMgr.GetLineCount(); } m_pCommanderView->SendStatusMessage(LS(STR_ERR_SRPREV2)); AlertNotFound( m_pCommanderView->GetHwnd(), false, LS(STR_FUCLIST_PREV_NOT_FOUND) ); return; }
// @date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。 CPropCommon::CPropCommon() { { assert( sizeof(CPropGeneral) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropWin) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropMainMenu) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropToolbar) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropTab) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropStatusbar) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropEdit) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropFile) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropFileName) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropBackup) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropFormat) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropGrep) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropKeybind) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropCustmenu) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropKeyword) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropHelper) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropMacro) - sizeof(CPropCommon) == 0 ); assert( sizeof(CPropPlugin) - sizeof(CPropCommon) == 0 ); } /* 共有データ構造体のアドレスを返す */ m_pShareData = &GetDllShareData(); m_hwndParent = NULL; /* オーナーウィンドウのハンドル */ m_hwndThis = NULL; /* このダイアログのハンドル */ m_nPageNum = ID_PROPCOM_PAGENUM_GENERAL; m_nKeywordSet1 = -1; return; }
void CViewCommander::Command_TAB_CLOSERIGHT( void ) { if( GetDllShareData().m_Common.m_sTabBar.m_bDispTabWnd ){ int nGroup = 0; // ウィンドウ一覧を取得する EditNode* pEditNode; int nCount = CAppNodeManager::getInstance()->GetOpenedWindowArr( &pEditNode, TRUE ); BOOL bSelfFound = FALSE; if( 0 >= nCount )return; for( int i = 0; i < nCount; i++ ){ if( pEditNode[i].m_hWnd == GetMainWindow() ){ pEditNode[i].m_hWnd = NULL; //自分自身は閉じない nGroup = pEditNode[i].m_nGroup; bSelfFound = TRUE; }else if( !bSelfFound ){ pEditNode[i].m_hWnd = NULL; //左は閉じない } } //終了要求を出す CAppNodeGroupHandle(nGroup).RequestCloseEditor( pEditNode, nCount, FALSE, TRUE, GetMainWindow() ); delete []pEditNode; } return; }
BOOL CDlgCompare::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) { _SetHwnd(hwndDlg); CreateSizeBox(); CDialog::OnSize(); RECT rc; ::GetWindowRect( hwndDlg, &rc ); m_ptDefaultSize.x = rc.right - rc.left; m_ptDefaultSize.y = rc.bottom - rc.top; for( int i = 0; i < _countof(anchorList); i++ ){ GetItemClientRect( anchorList[i].id, m_rcItems[i] ); } RECT rcDialog = GetDllShareData().m_Common.m_sOthers.m_rcCompareDialog; if( rcDialog.left != 0 || rcDialog.bottom != 0 ){ m_xPos = rcDialog.left; m_yPos = rcDialog.top; m_nWidth = rcDialog.right - rcDialog.left; m_nHeight = rcDialog.bottom - rcDialog.top; } return CDialog::OnInitDialog( hwndDlg, wParam, lParam ); }
// @date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。 bool CPPA::Execute(CEditView* pcEditView, int flags ) { //PPAの多重起動禁止 2008.10.22 syat if ( CPPA::m_bIsRunning ) { MYMESSAGEBOX( pcEditView->GetHwnd(), MB_OK, LS(STR_ERR_DLGPPA7), LS(STR_ERR_DLGPPA1) ); m_fnAbort(); CPPA::m_bIsRunning = false; return false; } CPPA::m_bIsRunning = true; PpaExecInfo info; info.m_pcEditView = pcEditView; info.m_pShareData = &GetDllShareData(); info.m_bError = false; // 2003.06.01 Moca info.m_cMemDebug.SetString(""); // 2003.06.01 Moca info.m_commandflags = flags | FA_FROMMACRO; // 2007.07.22 genta // 実行前にインスタンスを待避する PpaExecInfo* old_instance = m_CurInstance; m_CurInstance = &info; m_fnExecute(); // マクロ実行完了後はここに戻ってくる m_CurInstance = old_instance; //PPAの多重起動禁止 2008.10.22 syat CPPA::m_bIsRunning = false; return !info.m_bError; }
/*! ウィンドウ一覧表示 */ void CViewCommander::Command_DLGWINLIST( void ) { DWORD dwPid; HWND hwnd = GetDllShareData().m_sHandles.m_hwndTray; ::GetWindowThreadProcessId(hwnd, &dwPid); ::AllowSetForegroundWindow(dwPid); ::PostMessage(hwnd, MYWM_DLGWINLIST, 0, 0); }
/*! 外部ファイルを指定でのファイルを表示 */ BOOL CEditView::MakeDiffTmpFile2( TCHAR* tmpName, const TCHAR* orgName, ECodeType code, ECodeType saveCode ) { //一時 TCHAR* pszTmpName = _ttempnam( NULL, SAKURA_DIFF_TEMP_PREFIX ); if( NULL == pszTmpName ){ WarningMessage( NULL, LS(STR_DIFF_FAILED) ); return FALSE; } _tcscpy( tmpName, pszTmpName ); free( pszTmpName ); bool bBom = false; const STypeConfigMini* typeMini; CDocTypeManager().GetTypeConfigMini( CDocTypeManager().GetDocumentTypeOfPath( orgName ), &typeMini ); CFileLoad cfl( typeMini->m_encoding ); CTextOutputStream out(tmpName, saveCode, true, false); if(!out){ WarningMessage( NULL, LS(STR_DIFF_FAILED_TEMP) ); return FALSE; } try{ bool bBigFile; #ifdef _WIN64 bBigFile = true; #else bBigFile = false; #endif cfl.FileOpen( orgName, bBigFile, code, GetDllShareData().m_Common.m_sFile.GetAutoMIMEdecode(), &bBom ); CNativeW cLine; CEol cEol; while( RESULT_FAILURE != cfl.ReadLine( &cLine, &cEol ) ) { const wchar_t* pLineData; CLogicInt nLineLen; pLineData= cLine.GetStringPtr(&nLineLen); if( 0 == nLineLen || NULL == pLineData ) break; if( bBom ){ CNativeW cLine2(L"\ufeff"); cLine2.AppendString(pLineData, nLineLen); out.WriteString(cLine2.GetStringPtr(), cLine2.GetStringLength()); bBom = false; }else{ out.WriteString(pLineData,nLineLen); } } if( bBom ){ out.WriteString(L"\ufeff", 1); } } catch(...){ out.Close(); _tunlink( tmpName ); //関数の実行に失敗したとき、一時ファイルの削除は関数内で行う。 WarningMessage( NULL, LS(STR_DIFF_FAILED_TEMP) ); return FALSE; } return TRUE; }
/*! m_aReplaceKeysにpszReplaceKeyを追加する YAZAKI */ void CSearchKeywordManager::AddToReplaceKeyArr( const wchar_t* pszReplaceKey ) { CRecentReplace cRecentReplaceKey; cRecentReplaceKey.AppendItem( pszReplaceKey ); cRecentReplaceKey.Terminate(); GetDllShareData().m_Common.m_sSearch.m_nReplaceKeySequence++; return; }
//! 同一ファイルの再オープン void CDocFileOperation::ReloadCurrentFile( ECodeType nCharCode //!< [in] 文字コード種別 ) { //プラグイン:DocumentCloseイベント実行 CPlug::Array plugs; CWSHIfObj::List params; CJackManager::getInstance()->GetUsablePlug( PP_DOCUMENT_CLOSE, 0, &plugs ); for( CPlug::ArrayIter it = plugs.begin(); it != plugs.end(); it++ ){ (*it)->Invoke(&m_pcDocRef->m_pcEditWnd->GetActiveView(), params); } if( !fexist(m_pcDocRef->m_cDocFile.GetFilePath()) ){ /* ファイルが存在しない */ // Jul. 26, 2003 ryoji BOMを標準設定に // IsBomDefOn使用 2013/5/17 Uchi m_pcDocRef->m_cDocFile.SetCodeSet( nCharCode, CCodeTypeName( nCharCode ).IsBomDefOn() ); // カーソル位置表示を更新する // 2008.07.22 ryoji m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().ShowCaretPosInfo(); return; } //カーソル位置保存 CLayoutInt nViewTopLine = m_pcDocRef->m_pcEditWnd->GetActiveView().GetTextArea().GetViewTopLine(); /* 表示域の一番上の行(0開始) */ CLayoutInt nViewLeftCol = m_pcDocRef->m_pcEditWnd->GetActiveView().GetTextArea().GetViewLeftCol(); /* 表示域の一番左の桁(0開始) */ CLayoutPoint ptCaretPosXY = m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().GetCaretLayoutPos(); //ロード SLoadInfo sLoadInfo; sLoadInfo.cFilePath=m_pcDocRef->m_cDocFile.GetFilePath(); sLoadInfo.eCharCode=nCharCode; sLoadInfo.bViewMode=CAppMode::getInstance()->IsViewMode(); // 2014.06.13 IsEditable->IsViewModeに戻す。かわりに bForceNoMsgを追加 sLoadInfo.bWritableNoMsg = !m_pcDocRef->IsEditable(); // すでに編集できない状態ならファイルロックのメッセージを表示しない sLoadInfo.bRequestReload=true; bool bRet = this->DoLoadFlow(&sLoadInfo); // カーソル位置復元 (※ここではオプションのカーソル位置復元(=改行単位)が指定されていない場合でも復元する) // 2007.08.23 ryoji 表示領域復元 if( ptCaretPosXY.GetY2() < m_pcDocRef->m_cLayoutMgr.GetLineCount() ){ m_pcDocRef->m_pcEditWnd->GetActiveView().GetTextArea().SetViewTopLine(nViewTopLine); m_pcDocRef->m_pcEditWnd->GetActiveView().GetTextArea().SetViewLeftCol(nViewLeftCol); } m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().MoveCursorProperly( ptCaretPosXY, true ); // 2007.08.23 ryoji MoveCursor()->MoveCursorProperly() m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().m_nCaretPosX_Prev = m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().GetCaretLayoutPos().GetX2(); // 2006.09.01 ryoji オープン後自動実行マクロを実行する if( bRet ){ m_pcDocRef->RunAutoMacro( GetDllShareData().m_Common.m_sMacro.m_nMacroOnOpened ); //プラグイン:DocumentOpenイベント実行 CPlug::Array plugs; CWSHIfObj::List params; CJackManager::getInstance()->GetUsablePlug( PP_DOCUMENT_OPEN, 0, &plugs ); for( CPlug::ArrayIter it = plugs.begin(); it != plugs.end(); it++ ){ (*it)->Invoke(&m_pcDocRef->m_pcEditWnd->GetActiveView(), params); } } }
/*! コマンドコードの変換(grep mode時) */ void CEditView::TranslateCommand_grep( EFunctionCode& nCommand, bool& bRedraw, LPARAM& lparam1, LPARAM& lparam2, LPARAM& lparam3, LPARAM& lparam4 ) { if( ! CEditApp::getInstance()->m_pcGrepAgent->m_bGrepMode ) return; if( nCommand == F_WCHAR ){ // Jan. 23, 2005 genta 文字判定忘れ if( WCODE::IsLineDelimiter((wchar_t)lparam1, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol) && GetDllShareData().m_Common.m_sSearch.m_bGTJW_RETURN ){ nCommand = F_TAGJUMP; lparam1 = GetKeyState_Control()?1:0; } } }
/*! 正規表現の検索パターンを必要に応じて更新する(ライブラリが使用できないときはFALSEを返す) @date 2002.01.16 hor 共通ロジックを関数にしただけ・・・ @date 2011.12.18 Moca シーケンス導入。viewの検索文字列長の撤廃。他のビューの検索条件を引き継ぐフラグを追加 */ BOOL CEditView::ChangeCurRegexp( bool bRedrawIfChanged ) { bool bChangeState = false; if( GetDllShareData().m_Common.m_sSearch.m_bInheritKeyOtherView && m_nCurSearchKeySequence < GetDllShareData().m_Common.m_sSearch.m_nSearchKeySequence || 0 == m_strCurSearchKey.size() ){ // 履歴の検索キーに更新 m_strCurSearchKey = GetDllShareData().m_sSearchKeywords.m_aSearchKeys[0]; // 検索文字列 m_sCurSearchOption = GetDllShareData().m_Common.m_sSearch.m_sSearchOption;// 検索/置換 オプション m_nCurSearchKeySequence = GetDllShareData().m_Common.m_sSearch.m_nSearchKeySequence; bChangeState = true; }else if( m_bCurSearchUpdate ){ bChangeState = true; } m_bCurSearchUpdate = false; if( bChangeState ){ if( !m_sSearchPattern.SetPattern(this->GetHwnd(), m_strCurSearchKey.c_str(), m_strCurSearchKey.size(), m_sCurSearchOption, &m_CurRegexp) ){ m_bCurSrchKeyMark = false; return FALSE; } m_bCurSrchKeyMark = true; if( bRedrawIfChanged ){ Redraw(); } m_pcEditWnd->m_cToolbar.AcceptSharedSearchKey(); return TRUE; } if( ! m_bCurSrchKeyMark ){ m_bCurSrchKeyMark = true; // 検索文字列のマークだけ設定 if( bRedrawIfChanged ){ Redraw(); // 自View再描画 } } return TRUE; }
bool CDocFileOperation::_ToDoLock() const { // ファイルを開いていない if( !m_pcDocRef->m_cDocFile.GetFilePathClass().IsValidPath() )return false; // ビューモード if( CAppMode::getInstance()->IsViewMode() )return false; // 排他設定 if( GetDllShareData().m_Common.m_sFile.m_nFileShareMode == SHAREMODE_NOT_EXCLUSIVE )return false; return true; }
/*! @date 2014.07.11 新規追加 */ void CViewCommander::Sub_BoxSelectLock( int flags ) { bool bSelLock; if( flags == 0x00 ){ bSelLock = GetDllShareData().m_Common.m_sEdit.m_bBoxSelectLock; }else if( flags == 0x01 ){ bSelLock = true; }else if( flags == 0x02 ){ bSelLock = false; } if( ! this->m_pCommanderView->GetSelectionInfo().IsBoxSelecting() ) { this->Command_BEGIN_BOXSELECT( bSelLock ); } }
void CViewCommander::Command_MINIMIZE_ALL( void ) { HWND* phWndArr; int i; int j; j = GetDllShareData().m_sNodes.m_nEditArrNum; if( 0 == j ){ return; } phWndArr = new HWND[j]; for( i = 0; i < j; ++i ){ phWndArr[i] = GetDllShareData().m_sNodes.m_pEditArr[i].GetHwnd(); } for( i = 0; i < j; ++i ){ if( IsSakuraMainWindow( phWndArr[i] ) ) { if( ::IsWindowVisible( phWndArr[i] ) ) ::ShowWindow( phWndArr[i], SW_MINIMIZE ); } } delete [] phWndArr; return; }
void CDocLine::SetEol() { const wchar_t* pData = m_cLine.GetStringPtr(); int nLength = m_cLine.GetStringLength(); //改行コード設定 const wchar_t* p = &pData[nLength] - 1; while(p>=pData && WCODE::IsLineDelimiter(*p, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol))p--; p++; if(p>=pData){ m_cEol.SetTypeByString(p, &pData[nLength]-p); } else{ m_cEol = EOL_NONE; } }
void Select( ECharWidthFontMode fMode, ECharWidthCacheMode cMode ) { ECharWidthCacheMode cmode = (cMode==CWM_CACHE_NEUTRAL)?m_eLastEditCacheMode:cMode; pcache = &m_localcache[fMode]; if( cmode == CWM_CACHE_SHARE ){ pcache->SelectCache( &(GetDllShareData().m_sCharWidth) ); }else{ if( m_parCache[fMode] == 0 ){ m_parCache[fMode] = new SCharWidthCache; } pcache->SelectCache( m_parCache[fMode] ); } if( fMode==CWM_FONT_EDIT ){ m_eLastEditCacheMode = cmode; } WCODE::s_MultiFont = pcache->GetMultiFont(); }
/* カスタムメニュー表示 */ int CViewCommander::Command_CUSTMENU( int nMenuIdx ) { HMENU hMenu; GetEditWindow()->GetMenuDrawer().ResetContents(); // Oct. 3, 2001 genta if( nMenuIdx < 0 || MAX_CUSTOM_MENU <= nMenuIdx ){ return 0; } if( 0 == GetDllShareData().m_Common.m_sCustomMenu.m_nCustMenuItemNumArr[nMenuIdx] ){ return 0; } hMenu = ::CreatePopupMenu(); return m_pCommanderView->CreatePopUpMenuSub( hMenu, nMenuIdx, NULL, KEYHELP_RMENU_NONE ); }