Add Find/Replace text swap button in Find replace dialog

Fix  #6010, close #11037
pull/11043/head
Don Ho 3 years ago
parent 3ce90f56d6
commit 7ebb1e3672

@ -1497,3 +1497,22 @@ generic_string getDateTimeStrFrom(const generic_string& dateTimeFormat, const SY
return {};
}
// Don't forget to use DeleteObject(createdFont) before leaving the program
HFONT createFont(const TCHAR* fontName, int fontSize, bool isBold, HWND hDestParent)
{
HDC hdc = GetDC(hDestParent);
LOGFONT logFont = { 0 };
logFont.lfHeight = -MulDiv(fontSize, GetDeviceCaps(hdc, LOGPIXELSY), 72);
if (isBold)
logFont.lfWeight = FW_BOLD;
_tcscpy_s(logFont.lfFaceName, fontName);
HFONT newFont = CreateFontIndirect(&logFont);
ReleaseDC(hDestParent, hdc);
return newFont;
}

@ -233,3 +233,5 @@ bool endsWith(const generic_string& s, const generic_string& suffix);
int nbDigitsFromNbLines(size_t nbLines);
generic_string getDateTimeStrFrom(const generic_string& dateTimeFormat, const SYSTEMTIME& st);
HFONT createFont(const TCHAR* fontName, int fontSize, bool isBold, HWND hDestParent);

@ -1476,7 +1476,7 @@ bool FileManager::loadFileData(Document doc, const TCHAR * filename, char* data,
pNativeSpeaker->messageBox("FileTooBigToOpen",
NULL,
TEXT("File is too big to be opened by Notepad++"),
TEXT("File size problem"),
TEXT("Exception: File size problem"),
MB_OK | MB_APPLMODAL);
success = false;
}

@ -255,6 +255,9 @@ FindReplaceDlg::~FindReplaceDlg()
if (_hMonospaceFont)
::DeleteObject(_hMonospaceFont);
if (_hLargerBolderFont)
::DeleteObject(_hLargerBolderFont);
delete[] _uniFileName;
}
@ -830,7 +833,7 @@ void FindReplaceDlg::resizeDialogElements(LONG newWidth)
IDC_PERCENTAGE_SLIDER , IDC_REPLACEINSELECTION , IDC_IN_SELECTION_CHECK,
IDD_FINDINFILES_BROWSE_BUTTON, IDCMARKALL, IDC_CLEAR_ALL, IDCCOUNTALL, IDC_FINDALL_OPENEDFILES, IDC_FINDALL_CURRENTFILE,
IDREPLACE, IDREPLACEALL,IDC_REPLACE_OPENEDFILES, IDD_FINDINFILES_FIND_BUTTON, IDD_FINDINFILES_REPLACEINFILES, IDOK, IDCANCEL,
IDREPLACE, IDREPLACEALL, IDD_FINDREPLACE_SWAP_BUTTON, IDC_REPLACE_OPENEDFILES, IDD_FINDINFILES_FIND_BUTTON, IDD_FINDINFILES_REPLACEINFILES, IDOK, IDCANCEL,
IDC_FINDPREV, IDC_FINDNEXT, IDC_2_BUTTONS_MODE, IDC_COPY_MARKED_TEXT, IDD_FINDINFILES_REPLACEINPROJECTS
};
@ -986,18 +989,7 @@ INT_PTR CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
if ((NppParameters::getInstance()).getNppGUI()._monospacedFontFindDlg)
{
const TCHAR* fontName = _T("Courier New");
const long nFontSize = 8;
HDC hdc = GetDC(_hSelf);
LOGFONT logFont = { 0 };
logFont.lfHeight = -MulDiv(nFontSize, GetDeviceCaps(hdc, LOGPIXELSY), 72);
_tcscpy_s(logFont.lfFaceName, fontName);
_hMonospaceFont = CreateFontIndirect(&logFont);
ReleaseDC(_hSelf, hdc);
_hMonospaceFont = createFont(TEXT("Courier New"), 8, false, _hSelf);
SendMessage(hFindCombo, WM_SETFONT, (WPARAM)_hMonospaceFont, MAKELPARAM(true, 0));
SendMessage(hReplaceCombo, WM_SETFONT, (WPARAM)_hMonospaceFont, MAKELPARAM(true, 0));
@ -1071,6 +1063,12 @@ INT_PTR CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
::SetWindowTextW(::GetDlgItem(_hSelf, IDC_FINDPREV), TEXT(""));
::SetWindowTextW(::GetDlgItem(_hSelf, IDC_FINDNEXT), TEXT("▼ Find Next"));
::SetWindowTextW(::GetDlgItem(_hSelf, IDD_FINDREPLACE_SWAP_BUTTON), TEXT(""));
// "⇅" enlargement
_hLargerBolderFont = createFont(TEXT("Courier New"), 14, true, _hSelf);
SendMessage(::GetDlgItem(_hSelf, IDD_FINDREPLACE_SWAP_BUTTON), WM_SETFONT, (WPARAM)_hLargerBolderFont, MAKELPARAM(true, 0));
return TRUE;
}
@ -1274,6 +1272,20 @@ INT_PTR CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
}
return TRUE;
case IDD_FINDREPLACE_SWAP_BUTTON:
{
HWND hFindWhat = ::GetDlgItem(_hSelf, IDFINDWHAT);
generic_string findWhatText = getTextFromCombo(hFindWhat);
HWND hPlaceWith = ::GetDlgItem(_hSelf, IDREPLACEWITH);
generic_string replaceWithText = getTextFromCombo(hPlaceWith);
if ((!findWhatText.empty() || !replaceWithText.empty()) && (findWhatText != replaceWithText))
{
::SendMessage(hFindWhat, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(replaceWithText.c_str()));
::SendMessage(hPlaceWith, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(findWhatText.c_str()));
}
}
return TRUE;
case IDM_SEARCH_FIND:
enableReplaceFunc(false); // enable relace false so only find
return TRUE;
@ -2906,6 +2918,7 @@ void FindReplaceDlg::enableReplaceFunc(bool isEnable)
showFindDlgItem(ID_STATICTEXT_REPLACE, isEnable);
showFindDlgItem(IDREPLACE, isEnable);
showFindDlgItem(IDREPLACEWITH, isEnable);
showFindDlgItem(IDD_FINDREPLACE_SWAP_BUTTON, isEnable);
showFindDlgItem(IDREPLACEALL, isEnable);
showFindDlgItem(IDC_REPLACE_OPENEDFILES, isEnable);
showFindDlgItem(IDC_REPLACEINSELECTION);
@ -2987,6 +3000,7 @@ void FindReplaceDlg::enableFindInFilesControls(bool isEnable, bool projectPanels
{
showFindDlgItem(ID_STATICTEXT_REPLACE);
showFindDlgItem(IDREPLACEWITH);
showFindDlgItem(IDD_FINDREPLACE_SWAP_BUTTON);
}
showFindDlgItem(IDD_FINDINFILES_REPLACEINFILES, isEnable && (!projectPanels));
showFindDlgItem(IDD_FINDINFILES_REPLACEINPROJECTS, isEnable && projectPanels);
@ -3678,6 +3692,7 @@ void FindReplaceDlg::enableMarkFunc()
showFindDlgItem(ID_STATICTEXT_REPLACE, false);
showFindDlgItem(IDREPLACE, false);
showFindDlgItem(IDREPLACEWITH, false);
showFindDlgItem(IDD_FINDREPLACE_SWAP_BUTTON, false);
showFindDlgItem(IDREPLACEALL, false);
showFindDlgItem(IDC_REPLACE_OPENEDFILES, false);
showFindDlgItem(IDC_REPLACEINSELECTION, false);

@ -400,6 +400,7 @@ private :
int _statusbarTooltipIconSize = 0;
HFONT _hMonospaceFont = nullptr;
HFONT _hLargerBolderFont = nullptr;
std::map<int, bool> _controlEnableMap;

@ -24,15 +24,16 @@ EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE
CAPTION "Replace"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
RTEXT "&Find what :",IDFINDWHAT_STATIC,6,22,75,8
COMBOBOX IDFINDWHAT,83,20,178,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP
RTEXT "Rep&lace with :",ID_STATICTEXT_REPLACE,6,40,75,8
COMBOBOX IDREPLACEWITH,83,38,178,50,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP
RTEXT "Filter&s :",IDD_FINDINFILES_FILTERS_STATIC,27,58,53,8, SS_NOTIFY
COMBOBOX IDD_FINDINFILES_FILTERS_COMBO,83,56,178,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP
RTEXT "Dir&ectory :",IDD_FINDINFILES_DIR_STATIC,7,76,40,8
RTEXT "&Find what :",IDFINDWHAT_STATIC,0,21,75,8
COMBOBOX IDFINDWHAT,76,20,170,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP
RTEXT "Rep&lace with :",ID_STATICTEXT_REPLACE,0,39,75,8
COMBOBOX IDREPLACEWITH,76,38,170,50,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP
PUSHBUTTON "",IDD_FINDREPLACE_SWAP_BUTTON,249,26,13,17
RTEXT "Filter&s :",IDD_FINDINFILES_FILTERS_STATIC,0,57,75,8, SS_NOTIFY
COMBOBOX IDD_FINDINFILES_FILTERS_COMBO,76,56,170,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP
RTEXT "Dir&ectory :",IDD_FINDINFILES_DIR_STATIC,7,75,40,8
COMBOBOX IDD_FINDINFILES_DIR_COMBO,49,74,190,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP
PUSHBUTTON "...",IDD_FINDINFILES_BROWSE_BUTTON,245,74,15,13
PUSHBUTTON "...",IDD_FINDINFILES_BROWSE_BUTTON,245,72,15,13
CONTROL "Follow current doc.",IDD_FINDINFILES_FOLDERFOLLOWSDOC_CHECK,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,270,73,94,15
CONTROL "In all su&b-folders",IDD_FINDINFILES_RECURSIVE_CHECK,

@ -33,6 +33,7 @@
#define IDUNSLASH 1607
#define IDREPLACE 1608
#define IDREPLACEALL 1609
#define IDD_FINDREPLACE_SWAP_BUTTON 1610
#define ID_STATICTEXT_REPLACE 1611
//#define IDDIRECTIONUP 1612
//#define IDDIRECTIONDOWN 1613
@ -69,8 +70,8 @@
//#define IDC_FINDINFILES 1637
#define IDC_FINDINFILES_LAUNCH 1638
#define IDC_GETCURRENTDOCTYPE 1639
#define IDC_FINDALL_CURRENTFILE 1641
//#define IDSWITCH 1640
#define IDC_FINDALL_CURRENTFILE 1641
#define IDD_FINDINFILES_DLG 1650
#define IDD_FINDINFILES_BROWSE_BUTTON 1651

Loading…
Cancel
Save