📄 ccrystaleditview.cpp
字号:
nCurrentOffset = nCurrentOffset / nTabSize * nTabSize + nTabSize;
else
nCurrentOffset++;
I++;
}
ASSERT (nCurrentOffset == nNewOffset);
ptCursorPos.x = I;
ASSERT_VALIDTEXTPOS (ptCursorPos);
SetSelection (ptCursorPos, ptCursorPos);
SetAnchor (ptCursorPos);
SetCursorPos (ptCursorPos);
EnsureVisible (ptCursorPos);
}
}
}
void CCrystalEditView::
OnUpdateIndicatorCol (CCmdUI * pCmdUI)
{
pCmdUI->Enable (FALSE);
}
void CCrystalEditView::
OnUpdateIndicatorOvr (CCmdUI * pCmdUI)
{
pCmdUI->Enable (m_bOvrMode);
}
void CCrystalEditView::
OnUpdateIndicatorRead (CCmdUI * pCmdUI)
{
if (m_pTextBuffer == NULL)
pCmdUI->Enable (FALSE);
else
pCmdUI->Enable (m_pTextBuffer->GetReadOnly ());
}
void CCrystalEditView::
OnEditSwitchOvrmode ()
{
m_bOvrMode = !m_bOvrMode;
}
void CCrystalEditView::
OnUpdateEditSwitchOvrmode (CCmdUI * pCmdUI)
{
pCmdUI->SetCheck (m_bOvrMode ? 1 : 0);
}
DROPEFFECT CEditDropTargetImpl::
OnDragEnter (CWnd * pWnd, COleDataObject * pDataObject, DWORD dwKeyState, CPoint point)
{
if (!pDataObject->IsDataAvailable (CF_TEXT))
{
m_pOwner->HideDropIndicator ();
return DROPEFFECT_NONE;
}
m_pOwner->ShowDropIndicator (point);
if (dwKeyState & MK_CONTROL)
return DROPEFFECT_COPY;
return DROPEFFECT_MOVE;
}
void CEditDropTargetImpl::
OnDragLeave (CWnd * pWnd)
{
m_pOwner->HideDropIndicator ();
}
DROPEFFECT CEditDropTargetImpl::
OnDragOver (CWnd * pWnd, COleDataObject * pDataObject, DWORD dwKeyState, CPoint point)
{
/*
if (! pDataObject->IsDataAvailable(CF_TEXT))
{
m_pOwner->HideDropIndicator();
return DROPEFFECT_NONE;
}
*/
//
// [JRT]
//
bool bDataSupported = false;
if ((!m_pOwner) || // If No Owner
(!(m_pOwner->QueryEditable ())) || // Or Not Editable
(m_pOwner->GetDisableDragAndDrop ())) // Or Drag And Drop Disabled
{
m_pOwner->HideDropIndicator (); // Hide Drop Caret
return DROPEFFECT_NONE; // Return DE_NONE
}
// if ((pDataObject->IsDataAvailable( CF_TEXT ) ) || // If Text Available
// ( pDataObject -> IsDataAvailable( xxx ) ) || // Or xxx Available
// ( pDataObject -> IsDataAvailable( yyy ) ) ) // Or yyy Available
if (pDataObject->IsDataAvailable (CF_TEXT)) // If Text Available
{
bDataSupported = true; // Set Flag
}
if (!bDataSupported) // If No Supported Formats Available
{
m_pOwner->HideDropIndicator (); // Hide Drop Caret
return DROPEFFECT_NONE; // Return DE_NONE
}
m_pOwner->ShowDropIndicator (point);
if (dwKeyState & MK_CONTROL)
return DROPEFFECT_COPY;
return DROPEFFECT_MOVE;
}
BOOL CEditDropTargetImpl::
OnDrop (CWnd * pWnd, COleDataObject * pDataObject, DROPEFFECT dropEffect, CPoint point)
{
//
// [JRT] ( m_pOwner -> GetDisableDragAndDrop() ) ) // Or Drag And Drop Disabled
//
bool bDataSupported = false;
m_pOwner->HideDropIndicator (); // Hide Drop Caret
if ((!m_pOwner) || // If No Owner
(!(m_pOwner->QueryEditable ())) || // Or Not Editable
(m_pOwner->GetDisableDragAndDrop ())) // Or Drag And Drop Disabled
{
return DROPEFFECT_NONE; // Return DE_NONE
}
// if( ( pDataObject -> IsDataAvailable( CF_TEXT ) ) || // If Text Available
// ( pDataObject -> IsDataAvailable( xxx ) ) || // Or xxx Available
// ( pDataObject -> IsDataAvailable( yyy ) ) ) // Or yyy Available
if (pDataObject->IsDataAvailable (CF_TEXT)) // If Text Available
{
bDataSupported = true; // Set Flag
}
if (!bDataSupported) // If No Supported Formats Available
{
return DROPEFFECT_NONE; // Return DE_NONE
}
return (m_pOwner->DoDropText (pDataObject, point)); // Return Result Of Drop
}
DROPEFFECT CEditDropTargetImpl::
OnDragScroll (CWnd * pWnd, DWORD dwKeyState, CPoint point)
{
ASSERT (m_pOwner == pWnd);
m_pOwner->DoDragScroll (point);
if (dwKeyState & MK_CONTROL)
return DROPEFFECT_COPY;
return DROPEFFECT_MOVE;
}
void CCrystalEditView::
DoDragScroll (const CPoint & point)
{
CRect rcClientRect;
GetClientRect (rcClientRect);
if (point.y < rcClientRect.top + DRAG_BORDER_Y)
{
HideDropIndicator ();
ScrollUp ();
UpdateWindow ();
ShowDropIndicator (point);
return;
}
if (point.y >= rcClientRect.bottom - DRAG_BORDER_Y)
{
HideDropIndicator ();
ScrollDown ();
UpdateWindow ();
ShowDropIndicator (point);
return;
}
if (point.x < rcClientRect.left + GetMarginWidth () + DRAG_BORDER_X)
{
HideDropIndicator ();
ScrollLeft ();
UpdateWindow ();
ShowDropIndicator (point);
return;
}
if (point.x >= rcClientRect.right - DRAG_BORDER_X)
{
HideDropIndicator ();
ScrollRight ();
UpdateWindow ();
ShowDropIndicator (point);
return;
}
}
BOOL CCrystalEditView::
DoDropText (COleDataObject * pDataObject, const CPoint & ptClient)
{
HGLOBAL hData = pDataObject->GetGlobalData (CF_TEXT);
if (hData == NULL)
return FALSE;
CPoint ptDropPos = ClientToText (ptClient);
if (IsDraggingText () && IsInsideSelection (ptDropPos))
{
SetAnchor (ptDropPos);
SetSelection (ptDropPos, ptDropPos);
SetCursorPos (ptDropPos);
EnsureVisible (ptDropPos);
return FALSE;
}
LPTSTR pszText = (LPTSTR)::GlobalLock (hData);
if (pszText == NULL)
return FALSE;
int x, y;
m_pTextBuffer->InsertText (this, ptDropPos.y, ptDropPos.x, pszText, y, x, CE_ACTION_DRAGDROP); // [JRT]
CPoint ptCurPos (x, y);
ASSERT_VALIDTEXTPOS (ptCurPos);
SetAnchor (ptDropPos);
SetSelection (ptDropPos, ptCurPos);
SetCursorPos (ptCurPos);
EnsureVisible (ptCurPos);
::GlobalUnlock (hData);
return TRUE;
}
int CCrystalEditView::
OnCreate (LPCREATESTRUCT lpCreateStruct)
{
if (CCrystalTextView::OnCreate (lpCreateStruct) == -1)
return -1;
ASSERT (m_pDropTarget == NULL);
m_pDropTarget = new CEditDropTargetImpl (this);
if (!m_pDropTarget->Register (this))
{
TRACE0 ("Warning: Unable to register drop target for ccrystaleditview.\n");
delete m_pDropTarget;
m_pDropTarget = NULL;
}
return 0;
}
void CCrystalEditView::
OnDestroy ()
{
if (m_pDropTarget != NULL)
{
m_pDropTarget->Revoke ();
delete m_pDropTarget;
m_pDropTarget = NULL;
}
CCrystalTextView::OnDestroy ();
}
void CCrystalEditView::
ShowDropIndicator (const CPoint & point)
{
if (!m_bDropPosVisible)
{
HideCursor ();
m_ptSavedCaretPos = GetCursorPos ();
m_bDropPosVisible = TRUE;
::CreateCaret (m_hWnd, (HBITMAP) 1, 2, GetLineHeight ());
}
m_ptDropPos = ClientToText (point);
if (m_ptDropPos.x >= m_nOffsetChar)
{
SetCaretPos (TextToClient (m_ptDropPos));
ShowCaret ();
}
else
{
HideCaret ();
}
}
void CCrystalEditView::
HideDropIndicator ()
{
if (m_bDropPosVisible)
{
SetCursorPos (m_ptSavedCaretPos);
ShowCursor ();
m_bDropPosVisible = FALSE;
}
}
DROPEFFECT CCrystalEditView::
GetDropEffect ()
{
return DROPEFFECT_COPY | DROPEFFECT_MOVE;
}
void CCrystalEditView::
OnDropSource (DROPEFFECT de)
{
if (!IsDraggingText ())
return;
ASSERT_VALIDTEXTPOS (m_ptDraggedTextBegin);
ASSERT_VALIDTEXTPOS (m_ptDraggedTextEnd);
if (de == DROPEFFECT_MOVE)
{
m_pTextBuffer->DeleteText (this, m_ptDraggedTextBegin.y, m_ptDraggedTextBegin.x, m_ptDraggedTextEnd.y,
m_ptDraggedTextEnd.x, CE_ACTION_DRAGDROP); // [JRT]
}
}
void CCrystalEditView::
UpdateView (CCrystalTextView * pSource, CUpdateContext * pContext, DWORD dwFlags, int nLineIndex /*= -1*/ )
{
CCrystalTextView::UpdateView (pSource, pContext, dwFlags, nLineIndex);
if (m_bSelectionPushed && pContext != NULL)
{
pContext->RecalcPoint (m_ptSavedSelStart);
pContext->RecalcPoint (m_ptSavedSelEnd);
ASSERT_VALIDTEXTPOS (m_ptSavedSelStart);
ASSERT_VALIDTEXTPOS (m_ptSavedSelEnd);
}
}
void CCrystalEditView::
OnEditReplace ()
{
if (!QueryEditable ())
return;
CWinApp *pApp = AfxGetApp ();
ASSERT (pApp != NULL);
CEditReplaceDlg dlg (this);
if (m_bLastReplace)
{
// Get the latest Replace parameters
dlg.m_bMatchCase = (m_dwLastReplaceFlags & FIND_MATCH_CASE) != 0;
dlg.m_bWholeWord = (m_dwLastReplaceFlags & FIND_WHOLE_WORD) != 0;
dlg.m_bRegExp = (m_dwLastReplaceFlags & FIND_REGEXP) != 0;
if (m_pszLastFindWhat != NULL)
dlg.m_sText = m_pszLastFindWhat;
}
else
{
DWORD dwFlags;
if (!RegLoadNumber (HKEY_CURRENT_USER, REG_EDITPAD, _T ("ReplaceFlags"), &dwFlags))
dwFlags = 0;
dlg.m_bMatchCase = (dwFlags & FIND_MATCH_CASE) != 0;
dlg.m_bWholeWord = (dwFlags & FIND_WHOLE_WORD) != 0;
dlg.m_bRegExp = (dwFlags & FIND_REGEXP) != 0;
// dlg.m_sText = pApp->GetProfileString (REG_REPLACE_SUBKEY, REG_FIND_WHAT, _T (""));
// dlg.m_sNewText = pApp->GetProfileString (REG_REPLACE_SUBKEY, REG_REPLACE_WITH, _T (""));
}
if (IsSelection ())
{
GetSelection (m_ptSavedSelStart, m_ptSavedSelEnd);
m_bSelectionPushed = TRUE;
dlg.m_nScope = 0; // Replace in current selection
dlg.m_ptCurrentPos = m_ptSavedSelStart;
dlg.m_bEnableScopeSelection = TRUE;
dlg.m_ptBlockBegin = m_ptSavedSelStart;
dlg.m_ptBlockEnd = m_ptSavedSelEnd;
}
else
{
dlg.m_nScope = 1; // Replace in whole text
dlg.m_ptCurrentPos = GetCursorPos ();
dlg.m_bEnableScopeSelection = FALSE;
CPoint ptCursorPos = GetCursorPos (), ptStart = WordToLeft (ptCursorPos), ptEnd = WordToRight (ptCursorPos);
if (IsValidTextPos (ptStart) && IsValidTextPos (ptEnd) && ptStart != ptEnd)
GetText (ptStart, ptEnd, dlg.m_sText);
}
// Execute Replace dialog
// m_bShowInactiveSelection = TRUE; // FP: removed because I like it
dlg.DoModal ();
// m_bShowInactiveSelection = FALSE; // FP: removed because I like it
// Save Replace parameters for 'F3' command
m_bLastReplace = TRUE;
if (m_pszLastFindWhat != NULL)
free (m_pszLastFindWhat);
m_pszLastFindWhat = _tcsdup (dlg.m_sText);
m_dwLastReplaceFlags = 0;
if (dlg.m_bMatchCase)
m_dwLastReplaceFlags |= FIND_MATCH_CASE;
if (dlg.m_bWholeWord)
m_dwLastReplaceFlags |= FIND_WHOLE_WORD;
if (dlg.m_bRegExp)
m_dwLastReplaceFlags |= FIND_REGEXP;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -