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 ); }
// from CViewCommander_New.cpp //指定パターンに一致する行をマーク 2002.01.16 hor //キーマクロで記録できるように 2002.02.08 hor void CViewCommander::Command_BOOKMARK_PATTERN( void ) { //検索or置換ダイアログから呼び出された if( !m_pCommanderView->ChangeCurRegexp(false) ) return; CBookmarkManager(&GetDocument()->m_cDocLineMgr).MarkSearchWord( m_pCommanderView->m_sSearchPattern ); // 2002.01.16 hor 分割したビューも更新 GetEditWindow()->Views_Redraw(); }
/*! カレントファイルをMRUに登録する。 ブックマークも一緒に登録する。 @date 2003.03.30 genta 作成 */ void CMruListener::_HoldBookmarks_And_AddToMRU() { //EditInfo取得 CEditDoc* pcDoc = GetListeningDoc(); EditInfo fi; pcDoc->GetEditInfo( &fi ); //ブックマーク情報の保存 wcscpy( fi.m_szMarkLines, CBookmarkManager(&pcDoc->m_cDocLineMgr).GetBookMarks() ); //MRUリストに登録 CMRUFile cMRU; cMRU.Add( &fi ); }
// from CViewCommander_New.cpp //! 前のブックマークを探し,見つかったら移動する. void CViewCommander::Command_BOOKMARK_PREV(void) { int nYOld; // hor BOOL bFound = FALSE; // hor BOOL bRedo = TRUE; // hor CLogicPoint ptXY(0,GetCaret().GetCaretLogicPos().y); CLogicInt tmp_y; nYOld=ptXY.y; // hor re_do:; // hor if(CBookmarkManager(&GetDocument()->m_cDocLineMgr).SearchBookMark(ptXY.GetY2(), SEARCH_BACKWARD, &tmp_y)){ ptXY.y = tmp_y; bFound = TRUE; // hor CLayoutPoint ptLayout; GetDocument()->m_cLayoutMgr.LogicToLayout(ptXY,&ptLayout); // 2006.07.09 genta 新規関数にまとめた m_pCommanderView->MoveCursorSelecting( ptLayout, m_pCommanderView->GetSelectionInfo().m_bSelectingLock ); } // 2002.01.26 hor if(GetDllShareData().m_Common.m_sSearch.m_bSearchAll){ if(!bFound && // 見つからなかった bRedo // 最初の検索 ){ // 2011.02.02 m_cLayoutMgr→m_cDocLineMgr ptXY.y= GetDocument()->m_cDocLineMgr.GetLineCount(); // 2002/06/01 MIK bRedo=FALSE; goto re_do; // 末尾から再検索 } } if(bFound){ if(nYOld <= ptXY.y)m_pCommanderView->SendStatusMessage(LS(STR_ERR_SRPREV1)); }else{ m_pCommanderView->SendStatusMessage(LS(STR_ERR_SRPREV2)); AlertNotFound( m_pCommanderView->GetHwnd(), false, LS(STR_BOOKMARK_PREV_NOT_FOUND) ); } return; }
// from CViewCommander_New.cpp //! ブックマークをクリアする void CViewCommander::Command_BOOKMARK_RESET(void) { CBookmarkManager(&GetDocument()->m_cDocLineMgr).ResetAllBookMark(); // 2002.01.16 hor 分割したビューも更新 GetEditWindow()->Views_Redraw(); }