DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP\r
END\r
\r
-IDD_EDIT_FIND DIALOGEX 30, 73, 283, 74\r
+IDD_EDIT_FIND DIALOGEX 30, 73, 283, 94\r
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |\r
WS_SYSMENU\r
CAPTION "Find"\r
BS_AUTOCHECKBOX | WS_TABSTOP,7,47,135,10\r
CONTROL "D&on't wrap end of file",IDC_FINDDLG_DONTWRAP,"Button",\r
BS_AUTOCHECKBOX | WS_TABSTOP,7,57,135,10\r
- GROUPBOX "Direction",IDC_STATIC,148,23,70,36,WS_GROUP\r
- CONTROL "&Up",IDC_EDIT_DIRECTION_UP,"Button",BS_AUTORADIOBUTTON |\r
- WS_GROUP,154,34,57,10\r
- CONTROL "&Down",IDC_EDIT_DIRECTION_DOWN,"Button",\r
- BS_AUTORADIOBUTTON,154,44,57,10\r
- DEFPUSHBUTTON "&Find Next",IDOK,226,7,50,14,WS_GROUP\r
- PUSHBUTTON "Cancel",IDCANCEL,226,24,50,14\r
+ CONTROL "&Don't close this dialog box",IDC_FINDDLG_DONTCLOSE,"Button",\r
+ BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE |\r
+ WS_TABSTOP,7,67,135,10\r
+ DEFPUSHBUTTON "Find &Prev",IDC_EDIT_FINDPREV,226,7,50,14,WS_GROUP\r
+ DEFPUSHBUTTON "&Find Next",IDOK,226,24,50,14,WS_GROUP\r
+ PUSHBUTTON "Cancel",IDCANCEL,226,41,50,14\r
END\r
\r
IDD_EDIT_REPLACE DIALOGEX 36, 44, 304, 90\r
#define IDC_EDIT_REPLACE_ALL 8608
#define IDC_EDIT_REPLACE_WITH 8609
#define IDC_EDIT_SKIP 8610
-#define IDC_EDIT_DIRECTION_UP 8611
-#define IDC_EDIT_DIRECTION_DOWN 8612
#define IDC_EDIT_SCOPE_SELECTION 8613
#define IDC_EDIT_SCOPE_WHOLE_FILE 8614
-#define IDC_EDIT_SCOPE_DONT_WRAP 8615
+#define IDC_EDIT_SCOPE_DONT_WRAP 8615\r
#define ID_EDIT_TOGGLE_BOOKMARK 8616
#define ID_EDIT_GOTO_NEXT_BOOKMARK 8617
#define ID_EDIT_GOTO_PREV_BOOKMARK 8618
#define ID_EDIT_CLEAR_ALL_BOOKMARKS 8619
#define IDC_FINDDLG_DONTWRAP 8620
+#define IDC_EDIT_FINDPREV 8621
+#define IDC_FINDDLG_DONTCLOSE 8622
#define IDS_MESSAGEBOX_OK 9001
#define IDS_MESSAGEBOX_CANCEL 9002
#define IDS_MESSAGEBOX_ABORT 9003
CCrystalTextView::CCrystalTextView ()
: m_nScreenChars(-1)
, m_nMaxLineLength(-1)
+, m_pFindTextDlg(NULL)
{
memset(((CView*)this)+1, 0, sizeof(*this) - sizeof(class CView)); // AFX_ZERO_INIT_OBJECT (CView)
m_rxnode = NULL;
return false;
}
+static DWORD ConvertSearchInfosToSearchFlags(const LastSearchInfos *lastSearch)
+{
+ DWORD dwSearchFlags = 0;
+ if (lastSearch->m_bMatchCase)
+ dwSearchFlags |= FIND_MATCH_CASE;
+ if (lastSearch->m_bWholeWord)
+ dwSearchFlags |= FIND_WHOLE_WORD;
+ if (lastSearch->m_bRegExp)
+ dwSearchFlags |= FIND_REGEXP;
+ if (lastSearch->m_nDirection == 0)
+ dwSearchFlags |= FIND_DIRECTION_UP;
+ if (lastSearch->m_bNoWrap)
+ dwSearchFlags |= FIND_NO_WRAP;
+ if (lastSearch->m_bNoClose)
+ dwSearchFlags |= FIND_NO_CLOSE;
+ return dwSearchFlags;
+}
+
+static void ConvertSearchFlagsToLastSearchInfos(LastSearchInfos *lastSearch, DWORD dwFlags)
+{
+ lastSearch->m_bMatchCase = (dwFlags & FIND_MATCH_CASE) != 0;
+ lastSearch->m_bWholeWord = (dwFlags & FIND_WHOLE_WORD) != 0;
+ lastSearch->m_bRegExp = (dwFlags & FIND_REGEXP) != 0;
+ lastSearch->m_nDirection = (dwFlags & FIND_DIRECTION_UP) == 0;
+ lastSearch->m_bNoWrap = (dwFlags & FIND_NO_WRAP) != 0;
+ lastSearch->m_bNoClose = (dwFlags & FIND_NO_CLOSE) != 0;
+}
+
+bool CCrystalTextView::
+FindText (const LastSearchInfos * lastSearch)
+{
+ CPoint ptTextPos;
+ DWORD dwSearchFlags = ConvertSearchInfosToSearchFlags(lastSearch);
+ if (!FindText (lastSearch->m_sText, m_ptCursorPos, dwSearchFlags, !lastSearch->m_bNoWrap,
+ &ptTextPos))
+ {
+ return false;
+ }
+
+ bool bCursorToLeft = (lastSearch->m_nDirection == 0);
+ HighlightText (ptTextPos, m_nLastFindWhatLen, bCursorToLeft);
+
+ // Save search parameters for 'F3' command
+ m_bLastSearch = true;
+ if (m_pszLastFindWhat != NULL)
+ free (m_pszLastFindWhat);
+ m_pszLastFindWhat = _tcsdup (lastSearch->m_sText);
+ m_dwLastSearchFlags = dwSearchFlags;
+
+ // Save search parameters to registry
+ VERIFY (RegSaveNumber (HKEY_CURRENT_USER, REG_EDITPAD, _T ("FindFlags"), m_dwLastSearchFlags));
+
+ return true;
+}
+
void CCrystalTextView::
OnEditFind ()
{
CWinApp *pApp = AfxGetApp ();
ASSERT (pApp != NULL);
- CFindTextDlg dlg (this);
- LastSearchInfos * lastSearch = dlg.GetLastSearchInfos();
+ if (!m_pFindTextDlg)
+ m_pFindTextDlg = new CFindTextDlg (this);
+
+ LastSearchInfos * lastSearch = m_pFindTextDlg->GetLastSearchInfos();
if (m_bLastSearch)
{
// Get the latest search parameters
- lastSearch->m_bMatchCase = (m_dwLastSearchFlags & FIND_MATCH_CASE) != 0;
- lastSearch->m_bWholeWord = (m_dwLastSearchFlags & FIND_WHOLE_WORD) != 0;
- lastSearch->m_bRegExp = (m_dwLastSearchFlags & FIND_REGEXP) != 0;
- lastSearch->m_nDirection = (m_dwLastSearchFlags & FIND_DIRECTION_UP) != 0 ? 0 : 1;
- lastSearch->m_bNoWrap = (m_dwLastSearchFlags & FIND_NO_WRAP) != 0;
+ ConvertSearchFlagsToLastSearchInfos(lastSearch, m_dwLastSearchFlags);
if (m_pszLastFindWhat != NULL)
lastSearch->m_sText = m_pszLastFindWhat;
}
DWORD dwFlags;
if (!RegLoadNumber (HKEY_CURRENT_USER, REG_EDITPAD, _T ("FindFlags"), &dwFlags))
dwFlags = 0;
- lastSearch->m_bMatchCase = (dwFlags & FIND_MATCH_CASE) != 0;
- lastSearch->m_bWholeWord = (dwFlags & FIND_WHOLE_WORD) != 0;
- lastSearch->m_bRegExp = (dwFlags & FIND_REGEXP) != 0;
- lastSearch->m_nDirection = (dwFlags & FIND_DIRECTION_UP) == 0;
- lastSearch->m_bNoWrap = (dwFlags & FIND_NO_WRAP) != 0;
+ ConvertSearchFlagsToLastSearchInfos(lastSearch, dwFlags);
}
- dlg.UseLastSearch ();
+ m_pFindTextDlg->UseLastSearch ();
// Take the current selection, if any
if (IsSelection ())
{
LPCTSTR pszChars = GetLineChars (ptSelStart.y);
int nChars = ptSelEnd.x - ptSelStart.x;
- _tcsncpy (dlg.m_sText.GetBuffer (nChars + 1), pszChars + ptSelStart.x, nChars);
- dlg.m_sText.ReleaseBuffer (nChars);
+ _tcsncpy (m_pFindTextDlg->m_sText.GetBuffer (nChars + 1), pszChars + ptSelStart.x, nChars);
+ m_pFindTextDlg->m_sText.ReleaseBuffer (nChars);
}
}
else
CPoint ptStart = WordToLeft (ptCursorPos);
CPoint ptEnd = WordToRight (ptCursorPos);
if (IsValidTextPos (ptStart) && IsValidTextPos (ptEnd) && ptStart != ptEnd)
- GetText (ptStart, ptEnd, dlg.m_sText);
+ GetText (ptStart, ptEnd, m_pFindTextDlg->m_sText);
}
// Execute Find dialog
- dlg.m_ptCurrentPos = m_ptCursorPos; // Search from cursor position
// m_bShowInactiveSelection = true; // FP: removed because I like it
- dlg.DoModal ();
+ m_pFindTextDlg->UpdateData(FALSE);
+ m_pFindTextDlg->ShowWindow(SW_SHOW);
// m_bShowInactiveSelection = false; // FP: removed because I like it
- // actually this value doesn't change during doModal, but it may in the future
- lastSearch = dlg.GetLastSearchInfos();
-
- // Save search parameters for 'F3' command
- m_bLastSearch = true;
- if (m_pszLastFindWhat != NULL)
- free (m_pszLastFindWhat);
- m_pszLastFindWhat = _tcsdup (lastSearch->m_sText);
- m_dwLastSearchFlags = 0;
- if (lastSearch->m_bMatchCase)
- m_dwLastSearchFlags |= FIND_MATCH_CASE;
- if (lastSearch->m_bWholeWord)
- m_dwLastSearchFlags |= FIND_WHOLE_WORD;
- if (lastSearch->m_bRegExp)
- m_dwLastSearchFlags |= FIND_REGEXP;
- if (lastSearch->m_nDirection == 0)
- m_dwLastSearchFlags |= FIND_DIRECTION_UP;
- if (lastSearch->m_bNoWrap)
- m_dwLastSearchFlags |= FIND_NO_WRAP;
-
- // Save search parameters to registry
- VERIFY (RegSaveNumber (HKEY_CURRENT_USER, REG_EDITPAD, _T ("FindFlags"), m_dwLastSearchFlags));
}
void CCrystalTextView::
class CUpdateContext;
struct ViewableWhitespaceChars;
class SyntaxColors;
+class CFindTextDlg;
+struct LastSearchInfos;
////////////////////////////////////////////////////////////////////////////
FIND_REGEXP = 0x0004,
FIND_DIRECTION_UP = 0x0010,
REPLACE_SELECTION = 0x0100,
- FIND_NO_WRAP = 0x200
+ FIND_NO_WRAP = 0x200,
+ FIND_NO_CLOSE = 0x400
};
// CCrystalTextView::UpdateView() flags
DWORD m_dwLastSearchFlags;
LPTSTR m_pszLastFindWhat;
bool m_bMultipleSearch; // More search
+ CFindTextDlg *m_pFindTextDlg;
private :
bool m_bCursorHidden;
bool FindText (LPCTSTR pszText, const CPoint & ptStartPos, DWORD dwFlags, bool bWrapSearch, CPoint * pptFoundPos);
bool FindTextInBlock (LPCTSTR pszText, const CPoint & ptStartPos, const CPoint & ptBlockBegin, const CPoint & ptBlockEnd,
DWORD dwFlags, bool bWrapSearch, CPoint * pptFoundPos);
+ bool FindText (const LastSearchInfos * lastSearch);
bool HighlightText (const CPoint & ptStartPos, int nLength,
bool bCursorToLeft = false);
, m_bWholeWord(false)
, m_bRegExp(false)
, m_bNoWrap(false)
-, m_ptCurrentPos(CPoint (0, 0))
{
ASSERT (pBuddy != NULL);
+ Create(CFindTextDlg::IDD,pBuddy);
}
void CFindTextDlg::
//{{AFX_DATA_MAP(CFindTextDlg)
DDX_Control (pDX, IDC_EDIT_FINDTEXT, m_ctlFindText);
DDX_Control (pDX, IDC_EDIT_WHOLE_WORD, m_ctlWholeWord);
- DDX_Radio (pDX, IDC_EDIT_DIRECTION_UP, m_nDirection);
DDX_Check (pDX, IDC_EDIT_MATCH_CASE, m_bMatchCase);
DDX_CBString (pDX, IDC_EDIT_FINDTEXT, m_sText);
DDX_Check (pDX, IDC_EDIT_WHOLE_WORD, m_bWholeWord);
DDX_Check (pDX, IDC_EDIT_REGEXP, m_bRegExp);
DDX_Check (pDX, IDC_FINDDLG_DONTWRAP, m_bNoWrap);
+ DDX_Check (pDX, IDC_FINDDLG_DONTCLOSE, m_bNoClose);
+ if (!pDX->m_bSaveAndValidate)
+ {
+ m_ctlFindText.m_sGroup = _T ("FindText");
+ m_ctlFindText.SetFocus ();
+ UpdateControls();
+ }
//}}AFX_DATA_MAP
}
}
}
-BEGIN_MESSAGE_MAP (CFindTextDlg, CDialog)
-//{{AFX_MSG_MAP(CFindTextDlg)
-ON_CBN_EDITCHANGE (IDC_EDIT_FINDTEXT, OnChangeEditText)
-ON_CBN_SELCHANGE (IDC_EDIT_FINDTEXT, OnChangeSelected)
-ON_BN_CLICKED (IDC_EDIT_REGEXP, OnRegExp)
-//}}AFX_MSG_MAP
-END_MESSAGE_MAP ()
-
-/////////////////////////////////////////////////////////////////////////////
-// CFindTextDlg message handlers
-
-void CFindTextDlg::OnOK ()
+void CFindTextDlg::
+FindText (int nDirection)
{
if (UpdateData ())
{
m_ctlFindText.FillCurrent();
+ m_nDirection = nDirection;
UpdateLastSearch ();
ASSERT (m_pBuddy != NULL);
- bool bCursorToLeft = false;
- DWORD dwSearchFlags = 0;
- if (m_bMatchCase)
- dwSearchFlags |= FIND_MATCH_CASE;
- if (m_bWholeWord)
- dwSearchFlags |= FIND_WHOLE_WORD;
- if (m_bRegExp)
- dwSearchFlags |= FIND_REGEXP;
- if (m_nDirection == 0)
- {
- dwSearchFlags |= FIND_DIRECTION_UP;
- // When finding upwards put cursor to begin of selection
- bCursorToLeft = true;
- }
-
- CMemComboBox::SaveSettings();
- CPoint ptTextPos;
- if (!m_pBuddy->FindText (m_sText, m_ptCurrentPos, dwSearchFlags, !m_bNoWrap,
- &ptTextPos))
+ if (!m_pBuddy->FindText(GetLastSearchInfos()))
{
CString prompt;
prompt.Format (LoadResString(IDS_EDIT_TEXT_NOT_FOUND).c_str(), m_sText);
AfxMessageBox (prompt, MB_ICONINFORMATION);
- m_ptCurrentPos = CPoint (0, 0);
- return;
}
+ else
+ {
+ CMemComboBox::SaveSettings();
+ if (!m_bNoClose)
+ {
+ CDialog::OnOK ();
+ m_pBuddy->SetFocus ();
+ }
+ }
+ }
+}
- m_pBuddy->HighlightText (ptTextPos, m_pBuddy->m_nLastFindWhatLen,
- bCursorToLeft);
- CDialog::OnOK ();
- }
+BEGIN_MESSAGE_MAP (CFindTextDlg, CDialog)
+//{{AFX_MSG_MAP(CFindTextDlg)
+ON_CBN_EDITCHANGE (IDC_EDIT_FINDTEXT, OnChangeEditText)
+ON_CBN_SELCHANGE (IDC_EDIT_FINDTEXT, OnChangeSelected)
+ON_BN_CLICKED (IDC_EDIT_REGEXP, OnRegExp)
+ON_BN_CLICKED (IDC_EDIT_FINDPREV, OnFindPrev)
+//}}AFX_MSG_MAP
+END_MESSAGE_MAP ()
+
+/////////////////////////////////////////////////////////////////////////////
+// CFindTextDlg message handlers
+
+void CFindTextDlg::OnOK ()
+{
+ FindText (1);
+}
+
+void CFindTextDlg::OnFindPrev ()
+{
+ FindText (0);
}
void CFindTextDlg::
CDialog::OnInitDialog ();
CMemComboBox::LoadSettings();
- UpdateData (false);
- m_ctlFindText.m_sGroup = _T ("FindText");
- m_ctlFindText.OnSetfocus ();
- UpdateControls();
-
return true;
}
{
VERIFY (UpdateData ());
CDialog::OnCancel ();
+ m_pBuddy->SetFocus ();
}
void CFindTextDlg::
UpdateControls()
{
GetDlgItem(IDOK)->EnableWindow( !m_sText.IsEmpty() );
+ GetDlgItem(IDC_EDIT_FINDPREV)->EnableWindow( !m_sText.IsEmpty() );
UpdateRegExp();
}
lastSearch.m_nDirection = nDirection;
lastSearch.m_sText = sText;
lastSearch.m_bNoWrap = !!m_bNoWrap;
+ lastSearch.m_bNoClose = !!m_bNoClose;
}
m_nDirection = lastSearch.m_nDirection;
m_sText = lastSearch.m_sText;
m_bNoWrap = lastSearch.m_bNoWrap;
+ m_bNoClose = lastSearch.m_bNoClose;
+}
+
+void CFindTextDlg::PostNcDestroy()
+{
+ delete this;
}
CString m_sText;
BOOL m_bWholeWord;
BOOL m_bRegExp;
+ bool m_bNoClose;
};
/////////////////////////////////////////////////////////////////////////////
BOOL m_bWholeWord;
BOOL m_bRegExp;
BOOL m_bNoWrap;
+ BOOL m_bNoClose;
//}}AFX_DATA
// Overrides
void UpdateRegExp ();
void UpdateLastSearch ();
-
+ void FindText (int nDirection);
// Generated message map functions
//{{AFX_MSG(CFindTextDlg)
virtual BOOL OnInitDialog ();
virtual void OnCancel ();
afx_msg void OnRegExp ();
+ afx_msg void OnFindPrev ();
+ virtual void PostNcDestroy ();
//}}AFX_MSG
DECLARE_MESSAGE_MAP ()
};
LTEXT "Available languages:",IDC_STATIC,7,7,140,8
END
-IDD_EDIT_FIND DIALOGEX 30, 73, 293, 74
+IDD_EDIT_FIND DIALOGEX 30, 73, 293, 84
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Find"
BS_AUTOCHECKBOX | WS_TABSTOP,7,47,140,10
CONTROL "D&on't wrap end of file",IDC_FINDDLG_DONTWRAP,"Button",
BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE |
- WS_TABSTOP,7,57,140,16
- GROUPBOX "Direction",IDC_STATIC,148,23,70,36,WS_GROUP
- CONTROL "&Up",IDC_EDIT_DIRECTION_UP,"Button",BS_AUTORADIOBUTTON |
- WS_GROUP,154,34,57,10
- CONTROL "&Down",IDC_EDIT_DIRECTION_DOWN,"Button",
- BS_AUTORADIOBUTTON,154,44,57,10
- DEFPUSHBUTTON "&Find Next",IDOK,226,7,60,14,WS_GROUP
- PUSHBUTTON "Cancel",IDCANCEL,226,24,60,14
+ WS_TABSTOP,7,57,140,10
+ CONTROL "&Don't close this dialog box",IDC_FINDDLG_DONTCLOSE,"Button",
+ BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE |
+ WS_TABSTOP,7,67,140,10
+ DEFPUSHBUTTON "Find &Prev",IDC_EDIT_FINDPREV,226,7,60,14,WS_GROUP
+ DEFPUSHBUTTON "&Find Next",IDOK,226,24,60,14,WS_GROUP
+ PUSHBUTTON "Cancel",IDCANCEL,226,41,60,14
END
IDD_DIR_FILTER DIALOGEX 30, 73, 293, 74
#define IDC_SWAP12_BUTTON 1353
#define IDC_SWAP02_BUTTON 1354
#define IDC_COLORSCHEME_GITHUBBITBUCKET 1355
+#define IDC_FINDDLG_DONTCLOSE 1356
#define IDC_EDIT_WHOLE_WORD 8603
#define IDC_EDIT_MATCH_CASE 8604
#define IDC_EDIT_FINDTEXT 8605
#define IDC_EDIT_REPLACE_ALL 8608
#define IDC_EDIT_REPLACE_WITH 8609
#define IDC_EDIT_SKIP 8610
-#define IDC_EDIT_DIRECTION_UP 8611
-#define IDC_EDIT_DIRECTION_DOWN 8612
#define IDC_EDIT_SCOPE_SELECTION 8613
#define IDC_EDIT_SCOPE_WHOLE_FILE 8614
#define IDC_EDIT_SCOPE_DONT_WRAP 8615
+#define IDC_EDIT_FINDPREV 8616
#define IDC_SCRIPT_FIRST 8700
#define IDC_SCRIPT_LAST 8749
#define IDC_PREDIFFERS_FIRST 8750
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 239
#define _APS_NEXT_COMMAND_VALUE 33218
-#define _APS_NEXT_CONTROL_VALUE 1356
+#define _APS_NEXT_CONTROL_VALUE 1357
#define _APS_NEXT_SYMED_VALUE 114
#endif
#endif