MDITextEditorView.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:13k
- // MDITextEditorView.cpp : implementation of the CMDITextEditorView class
- //
- #include "stdafx.h"
- #include "MDITextEditor.h"
- #include "MDITextEditorDoc.h"
- #include "MDITextEditorView.h"
- #include "MainFrm.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- typedef enum SyntaxEditUpdateViewHint
- {
- xtpHintWhiteSpace = (xtpEditHintLast + 1),
- };
- /////////////////////////////////////////////////////////////////////////////
- // CMDITextEditorView
- IMPLEMENT_DYNCREATE(CMDITextEditorView, CViewBase)
- BEGIN_MESSAGE_MAP(CMDITextEditorView, CViewBase)
- //{{AFX_MSG_MAP(CMDITextEditorView)
- ON_WM_CONTEXTMENU()
- ON_COMMAND(ID_EDIT_FIND_SILENT, OnEditFindSilent)
- ON_COMMAND(ID_EDIT_TABIFY, OnEditTabify)
- ON_COMMAND(ID_EDIT_UNTABIFY, OnEditUnTabify)
- ON_COMMAND(ID_EDIT_UPPERCASE, OnEditUppercase)
- ON_COMMAND(ID_EDIT_LOWERCASE, OnEditLowercase)
- ON_COMMAND(ID_EDIT_WHITESPACE, OnEditWhiteSpace)
- ON_UPDATE_COMMAND_UI(ID_EDIT_WHITESPACE, OnUpdateEditWhiteSpace)
- ON_COMMAND(ID_EDIT_COLLAPSEALL, OnEditCollapseAll)
- ON_COMMAND(ID_EDIT_EXPANDALL, OnEditExpandAll)
- ON_COMMAND(ID_TOOLS_BOOKMARK, OnToolsBookmark)
- ON_COMMAND(ID_TOOLS_BREAKPOINT, OnToolsBreakpoint)
- ON_COMMAND(ID_TOOLS_NEXT_BOOKMARK, OnToolsNextBookmark)
- ON_UPDATE_COMMAND_UI(ID_TOOLS_NEXT_BOOKMARK, OnUpdateToolsNextBookmark)
- ON_COMMAND(ID_TOOLS_PREV_BOOKMARK, OnToolsPrevBookmark)
- ON_UPDATE_COMMAND_UI(ID_TOOLS_PREV_BOOKMARK, OnUpdateToolsPrevBookmark)
- ON_COMMAND(ID_TOOLS_OPTIONS, OnToolsOptions)
- ON_COMMAND(ID_FILE_GOTO, OnFileGoTo)
- ON_COMMAND(ID_FILE_PAGE_SETUP, CViewBase::OnFilePageSetup)
- ON_COMMAND(ID_EDIT_READONLY, OnReadOnly)
- ON_UPDATE_COMMAND_UI(ID_EDIT_READONLY, OnUpdateReadOnly)
- //}}AFX_MSG_MAP
- // Standard printing commands
- ON_COMMAND(ID_FILE_PRINT, CViewBase::OnFilePrint)
- ON_COMMAND(ID_FILE_PRINT_DIRECT, CViewBase::OnFilePrint)
- ON_COMMAND(ID_FILE_PRINT_PREVIEW, CViewBase::OnFilePrintPreview)
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CMDITextEditorView construction/destruction
- CMDITextEditorView::CMDITextEditorView()
- : m_dwLastUpdate(0)
- , m_dwParserStart(0)
- {
- m_rcMargin.left = 25;
- m_rcMargin.right = 25;
- m_rcMargin.top = 50;
- m_rcMargin.bottom = 50;
- GetEditCtrl().SetConfigFile(CXTPSyntaxEditCtrl::GetModulePath() + _T("EditConfig\SyntaxEdit.ini"));
- // Add _tsetlocale call to allow some text functions (like isleadbyte) works correctly
- // A good place for this is CMainFrame implementation (see CMainFrame constructor).
- // EXAMPLE:
- // _tsetlocale(LC_ALL, _T(""));
- }
- CMDITextEditorView::~CMDITextEditorView()
- {
- }
- BOOL CMDITextEditorView::PreCreateWindow(CREATESTRUCT& cs)
- {
- // TODO: Modify the Window class or styles here by modifying
- // the CREATESTRUCT cs
- return CViewBase::PreCreateWindow(cs);
- }
- /////////////////////////////////////////////////////////////////////////////
- // CMDITextEditorView printing
- BOOL CMDITextEditorView::OnPreparePrinting(CPrintInfo* pInfo)
- {
- // default preparation
- return CViewBase::OnPreparePrinting(pInfo);
- }
- void CMDITextEditorView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
- {
- CViewBase::OnBeginPrinting(pDC, pInfo);
- }
- void CMDITextEditorView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
- {
- CViewBase::OnEndPrinting(pDC, pInfo);
- }
- void CMDITextEditorView::OnPrintHeader(CDC* pDC, CPrintInfo* pInfo)
- {
- CXTPFontDC fontDC(pDC, GetEditCtrl().GetPaintManager()->GetFont(),
- ::GetSysColor(COLOR_WINDOWTEXT));
- CPoint ptFrom;
- ptFrom.x = m_rcMargin.left;
- ptFrom.y = m_rcMargin.top - 5;
- pDC->MoveTo(ptFrom);
- CPoint ptTo;
- ptTo.x = pInfo->m_rectDraw.right - m_rcMargin.right;
- ptTo.y = m_rcMargin.top - 5;
- pDC->LineTo(ptTo);
- CString csPathName = GetDocument()->GetPathName();
- CString csFileName = csPathName.Right(csPathName.GetLength()-(csPathName.ReverseFind('\')+1));
- if (csFileName.IsEmpty())
- {
- csFileName = GetDocument()->GetTitle();
- csFileName.Remove('*');
- }
- CSize sizeText = pDC->GetTextExtent(csFileName);
- int x = m_rcMargin.left;
- int y = m_rcMargin.top - 10 - sizeText.cy;
- pDC->TextOut(x, y, csFileName);
- CTime tmCurrent = CTime::GetCurrentTime();
- CString csTime = tmCurrent.Format(_T("%m-%d-%Y %I:%M%p"));
- sizeText = pDC->GetTextExtent(csTime);
- pDC->SetBkColor(::GetSysColor(COLOR_WINDOW));
- pDC->TextOut((ptTo.x - sizeText.cx), y, csTime);
- }
- void CMDITextEditorView::OnPrintFooter(CDC* pDC, CPrintInfo* pInfo)
- {
- CXTPFontDC fontDC(pDC, GetEditCtrl().GetPaintManager()->GetFont(),
- ::GetSysColor(COLOR_WINDOWTEXT));
- int iBottomPos = (pInfo->m_rectDraw.Height() - m_rcMargin.bottom + 5);
- CPoint ptFrom;
- ptFrom.x = m_rcMargin.left;
- ptFrom.y = iBottomPos;
- pDC->MoveTo(ptFrom);
- CPoint ptTo;
- ptTo.x = pInfo->m_rectDraw.right - m_rcMargin.right;
- ptTo.y = iBottomPos;
- pDC->LineTo(ptTo);
- CString csPageNo;
- csPageNo.Format(_T("Page %d of %d"), pInfo->m_nCurPage, pInfo->GetMaxPage());
- pDC->SetBkColor(::GetSysColor(COLOR_WINDOW));
- pDC->TextOut(m_rcMargin.left, iBottomPos + 5, csPageNo);
- }
- void CMDITextEditorView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
- {
- // Print header in application-customized mode
- // OnPrintHeader(pDC, pInfo);
- // CRect rcDraw_orig = pInfo->m_rectDraw;
- // pInfo->m_rectDraw.top += m_rcMargin.top;
- // pInfo->m_rectDraw.bottom -= m_rcMargin.bottom;
- // Print body
- CViewBase::OnPrint(pDC, pInfo);
- // pInfo->m_rectDraw = rcDraw_orig;
- // Print footer
- // OnPrintFooter(pDC, pInfo);
- }
- /////////////////////////////////////////////////////////////////////////////
- // CMDITextEditorView diagnostics
- #ifdef _DEBUG
- void CMDITextEditorView::AssertValid() const
- {
- CViewBase::AssertValid();
- }
- void CMDITextEditorView::Dump(CDumpContext& dc) const
- {
- CViewBase::Dump(dc);
- }
- CMDITextEditorDoc* CMDITextEditorView::GetDocument() // non-debug version is inline
- {
- ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMDITextEditorDoc)));
- return (CMDITextEditorDoc*)m_pDocument;
- }
- #endif //_DEBUG
- /////////////////////////////////////////////////////////////////////////////
- // CMDITextEditorView message handlers
- BOOL CMDITextEditorView::OnRowColChanged(NMHDR* pNMHDR, LRESULT* pResult)
- {
- if (!CViewBase::OnRowColChanged(pNMHDR, pResult))
- return FALSE;
- XTP_EDIT_NMHDR_ROWCOLCHANGED* pNMHDR_RCC = (XTP_EDIT_NMHDR_ROWCOLCHANGED*)pNMHDR;
- if (!pNMHDR_RCC)
- return FALSE;
- theApp.m_pMainFrame->SetRowCol(pNMHDR_RCC->nRow, pNMHDR_RCC->nCol);
- *pResult = 0;
- return TRUE;
- }
- BOOL CMDITextEditorView::OnParseEvent(NMHDR* pNMHDR, LRESULT* pResult)
- {
- if (!CViewBase::OnParseEvent(pNMHDR, pResult))
- return FALSE;
- XTP_EDIT_NMHDR_PARSEEVENT* pNMParseEvent = (XTP_EDIT_NMHDR_PARSEEVENT*)pNMHDR;
- if (!pNMParseEvent)
- return FALSE;
- CDocument* pDoc = GetDocument();
- if (!pDoc)
- return FALSE;
- const int cnUpdateTimeOut = 500;
- CString strMsg;
- BOOL bUpdate = TRUE;
- if (pNMParseEvent->code == xtpEditOnTextBlockParsed)
- {
- DWORD dwTime = ::GetTickCount();
- bUpdate = labs(dwTime - m_dwLastUpdate) >= cnUpdateTimeOut;
- CXTPSyntaxEditLexTextBlock* pTBended = (CXTPSyntaxEditLexTextBlock*)pNMParseEvent->wParam;
- if (pTBended && bUpdate)
- {
- m_dwLastUpdate = dwTime;
- DWORD dwTime1 = GetTickCount();//DEBUG
- double dTime = labs(dwTime1-m_dwParserStart)/1000.0;
- strMsg.Format(_T(" Parsing time(%.1f sec). Line(%d)."), dTime, pTBended->m_PosEndLC.nLine);
- // strMsg.Format(_T(" Parsing time(%.3f sec). Last parsed block: (%d,%d - %d,%d)::%s"),
- // dTime,
- // pTBended->m_PosStartLC.nLine, pTBended->m_PosStartLC.nCol,
- // pTBended->m_PosEndLC.nLine, pTBended->m_PosEndLC.nCol,
- // pTBended->m_ptrLexClass ? pTBended->m_ptrLexClass->GetClassName()
- // : _T("?<NULL>") );
- }
- }
-
- else if (pNMParseEvent->code == xtpEditOnParserStarted)
- {
- strMsg = _T("*** Parser Started");
- m_dwParserStart = GetTickCount();
- }
-
- else if (pNMParseEvent->code == xtpEditOnParserEnded)
- {
- if(!pNMParseEvent->wParam || (pNMParseEvent->wParam & xtpEditLPR_RunFinished))
- {
- DWORD dwTime1 = GetTickCount();
- double dTime = labs(dwTime1-m_dwParserStart)/1000.0;
- strMsg.Format(_T(" Parsing time(%.3f sec)."), dTime);
- }
- }
- if (bUpdate)
- {
- CString strTitle = pDoc->GetTitle();
- int nFIdx = strTitle.Find(_T(" :.: "));
- if(nFIdx >= 0) {
- strTitle = strTitle.Left(nFIdx);
- nFIdx = strTitle.Find(_T("*"));
- if(nFIdx >= 0) {
- strTitle = strTitle.Left(nFIdx);
- }
- strTitle.TrimRight();
- }
-
- if (pDoc->IsModified()) {
- strTitle += _T(" * ");
- }
- if(strMsg.GetLength() > 0) {
- strTitle += _T(" :.: ");
- strTitle += strMsg;
- }
-
- pDoc->SetTitle(strTitle);
- }
- *pResult = 0;
- return TRUE;
- }
- void CMDITextEditorView::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
- {
- if (point.x == -1 && point.y == -1)
- {
- // keystroke invocation
- CRect rect;
- GetClientRect(rect);
- ClientToScreen(rect);
-
- point = rect.TopLeft();
- point.Offset(5, 5);
- }
-
- CMenu menu;
- VERIFY(menu.LoadMenu(IDR_MDITEXTYPE));
-
- CMenu* pPopup = menu.GetSubMenu(1);
- ASSERT(pPopup != NULL);
- CWnd* pWndPopupOwner = this;
- while (pWndPopupOwner->GetStyle() & WS_CHILD)
- pWndPopupOwner = pWndPopupOwner->GetParent();
- ((CXTPMDIFrameWnd*)AfxGetMainWnd())->GetCommandBars()->
- TrackPopupMenuEx(pPopup, TPM_RIGHTBUTTON, point.x, point.y);
- }
- void CMDITextEditorView::OnEditFindSilent()
- {
- if (!GetFindReplaceDlg())
- return;
- CString csSelText;
- GetEditCtrl().GetSelectionText(csSelText);
- if (csSelText.IsEmpty())
- {
- CPoint pt(GetCaretPos());
- pt.y += 2;
- GetEditCtrl().SelectWord(pt);
- GetEditCtrl().GetSelectionText(csSelText);
- }
- csSelText = csSelText.SpanExcluding(_T("rn"));
- csSelText.Replace(_T("t"), _T(" "));
- if (csSelText.IsEmpty())
- {
- csSelText = _T(" ");
- }
- else
- {
- GetFindReplaceDlg()->m_csFindText = csSelText;
- }
-
- BOOL bShiftKey = (::GetKeyState(VK_SHIFT) & KF_UP) != 0;
- if (GetEditCtrl().Find(csSelText,
- GetFindReplaceDlg()->m_bMatchWholeWord,
- GetFindReplaceDlg()->m_bMatchCase, !bShiftKey))
- {
- SetDirty();
- }
- }
- void CMDITextEditorView::OnEditTabify()
- {
- GetEditCtrl().TabifySelection();
- }
- void CMDITextEditorView::OnEditUnTabify()
- {
- GetEditCtrl().UnTabifySelection();
- }
- void CMDITextEditorView::OnEditUppercase()
- {
- GetEditCtrl().UppercaseSelection();
- }
- void CMDITextEditorView::OnEditLowercase()
- {
- GetEditCtrl().LowercaseSelection();
- }
- void CMDITextEditorView::OnEditWhiteSpace()
- {
- // toggle whitespace.
- GetEditCtrl().EnableWhiteSpace(
- !GetEditCtrl().IsEnabledWhiteSpace());
- CDocument* pDoc = GetDocument();
- if (pDoc)
- {
- pDoc->UpdateAllViews(this, xtpHintWhiteSpace,
- GetEditCtrl().IsEnabledWhiteSpace() ? (CObject*)1 : NULL);
- }
- }
- void CMDITextEditorView::OnUpdateEditWhiteSpace(CCmdUI* pCmdUI)
- {
- pCmdUI->SetCheck(GetEditCtrl().IsEnabledWhiteSpace());
- }
- void CMDITextEditorView::OnEditCollapseAll()
- {
- GetEditCtrl().CollapseAll();
- }
- void CMDITextEditorView::OnEditExpandAll()
- {
- GetEditCtrl().ExpandAll();
- }
- void CMDITextEditorView::OnToolsBookmark()
- {
- int iRow = GetEditCtrl().GetCurRow();
- GetEditCtrl().AddRemoveBookmark(iRow);
- UpdateAllViews();
- }
- void CMDITextEditorView::OnToolsBreakpoint()
- {
- int iRow = GetEditCtrl().GetCurRow();
- GetEditCtrl().AddRemoveBreakPoint(iRow);
- UpdateAllViews();
- }
- void CMDITextEditorView::OnToolsNextBookmark()
- {
- GetEditCtrl().NextBookmark();
- }
- void CMDITextEditorView::OnUpdateToolsNextBookmark(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable(GetEditCtrl().HasBookmarks());
- }
- void CMDITextEditorView::OnToolsPrevBookmark()
- {
- GetEditCtrl().PrevBookmark();
- }
- void CMDITextEditorView::OnUpdateToolsPrevBookmark(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable(GetEditCtrl().HasBookmarks());
- }
- void CMDITextEditorView::OnToolsOptions()
- {
- // Create dialog object
- CXTPSyntaxEditPropertiesDlg dlg(this);
- // Instantiate dialog
- if (dlg.DoModal() == IDOK)
- {
- // Copy settings to remaining views.
- theApp.UpdateAllViews(this);
- }
- }
- void CMDITextEditorView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
- {
- CViewBase::OnUpdate(pSender, lHint, pHint);
- if(pSender == this) {
- return;
- }
- switch (lHint)
- {
- case xtpHintWhiteSpace:
- GetEditCtrl().EnableWhiteSpace(pHint != NULL);
- break;
- case xtpEditHintInitView:
- GetEditCtrl().SetOverwriteMode(theApp.m_bInsertKey);
- break;
- }
- }
- void CMDITextEditorView::OnFileGoTo()
- {
- m_dlgGoTo.ShowDialog(&GetEditCtrl(),
- FALSE/*select line*/, TRUE/*hide after search*/);
- }
- void CMDITextEditorView::OnReadOnly()
- {
- GetEditCtrl().SetReadOnly(!GetEditCtrl().IsReadOnly());
- }
- void CMDITextEditorView::OnUpdateReadOnly(CCmdUI* pCmdUI)
- {
- pCmdUI->SetCheck(GetEditCtrl().IsReadOnly() ? 1 : 0);
- }