Make FindReplace dialog resizable horizontally
Closes #3376, closes #2516, closes #774
This commit is contained in:
parent
cb3df2a3a3
commit
b3be0b448b
|
@ -274,6 +274,15 @@ void FindReplaceDlg::create(int dialogID, bool isRTL)
|
||||||
_tab.reSizeTo(rect);
|
_tab.reSizeTo(rect);
|
||||||
_tab.display();
|
_tab.display();
|
||||||
|
|
||||||
|
_initialClientWidth = rect.right - rect.left;
|
||||||
|
|
||||||
|
//fill min dialog size info
|
||||||
|
this->getWindowRect(_initialWindowRect);
|
||||||
|
_initialWindowRect.right = _initialWindowRect.right - _initialWindowRect.left;
|
||||||
|
_initialWindowRect.left = 0;
|
||||||
|
_initialWindowRect.bottom = _initialWindowRect.bottom - _initialWindowRect.top;
|
||||||
|
_initialWindowRect.top = 0;
|
||||||
|
|
||||||
ETDTProc enableDlgTheme = (ETDTProc)::SendMessage(_hParent, NPPM_GETENABLETHEMETEXTUREFUNC, 0, 0);
|
ETDTProc enableDlgTheme = (ETDTProc)::SendMessage(_hParent, NPPM_GETENABLETHEMETEXTUREFUNC, 0, 0);
|
||||||
if (enableDlgTheme)
|
if (enableDlgTheme)
|
||||||
enableDlgTheme(_hSelf, ETDT_ENABLETAB);
|
enableDlgTheme(_hSelf, ETDT_ENABLETAB);
|
||||||
|
@ -675,10 +684,70 @@ INT_PTR CALLBACK FindInFinderDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FindReplaceDlg::resizeDialogElements(LONG newWidth)
|
||||||
|
{
|
||||||
|
//elements that need to be resized horizontally (all edit/combo boxes etc.)
|
||||||
|
const auto resizeWindowIDs = { IDFINDWHAT, IDREPLACEWITH, IDD_FINDINFILES_FILTERS_COMBO, IDD_FINDINFILES_DIR_COMBO };
|
||||||
|
|
||||||
|
//elements that need to be moved
|
||||||
|
const auto moveWindowIDs = {
|
||||||
|
IDD_FINDINFILES_FOLDERFOLLOWSDOC_CHECK,IDD_FINDINFILES_RECURSIVE_CHECK, IDD_FINDINFILES_INHIDDENDIR_CHECK,
|
||||||
|
IDC_TRANSPARENT_GRPBOX, IDC_TRANSPARENT_CHECK, IDC_TRANSPARENT_LOSSFOCUS_RADIO, IDC_TRANSPARENT_ALWAYS_RADIO,
|
||||||
|
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,
|
||||||
|
};
|
||||||
|
|
||||||
|
_deltaWidth = newWidth - _initialClientWidth;
|
||||||
|
auto addWidth = _deltaWidth - _lastDeltaWidth;
|
||||||
|
_lastDeltaWidth = _deltaWidth;
|
||||||
|
|
||||||
|
RECT rc;
|
||||||
|
for (int id : resizeWindowIDs)
|
||||||
|
{
|
||||||
|
HWND resizeHwnd = ::GetDlgItem(_hSelf, id);
|
||||||
|
::GetClientRect(resizeHwnd, &rc);
|
||||||
|
::SetWindowPos(resizeHwnd, NULL, 0, 0, rc.right + addWidth, rc.bottom, SWP_NOMOVE | SWP_NOZORDER);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int moveWndID : moveWindowIDs)
|
||||||
|
{
|
||||||
|
HWND moveHwnd = GetDlgItem(_hSelf, moveWndID);
|
||||||
|
::GetWindowRect(moveHwnd, &rc);
|
||||||
|
::MapWindowPoints(NULL, _hSelf, (LPPOINT)&rc, 2);
|
||||||
|
|
||||||
|
::SetWindowPos(moveHwnd, NULL, rc.left + addWidth, rc.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
|
||||||
|
::InvalidateRect(moveHwnd, NULL, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto additionalWindowHwndsToResize = { _tab.getHSelf() , _statusBar.getHSelf() };
|
||||||
|
for (HWND resizeHwnd : additionalWindowHwndsToResize)
|
||||||
|
{
|
||||||
|
::GetClientRect(resizeHwnd, &rc);
|
||||||
|
::SetWindowPos(resizeHwnd, NULL, 0, 0, rc.right + addWidth, rc.bottom, SWP_NOMOVE | SWP_NOZORDER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
INT_PTR CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
|
INT_PTR CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
switch (message)
|
switch (message)
|
||||||
{
|
{
|
||||||
|
case WM_GETMINMAXINFO:
|
||||||
|
{
|
||||||
|
MINMAXINFO* mmi = reinterpret_cast<MINMAXINFO*>(lParam);
|
||||||
|
mmi->ptMinTrackSize.y = _initialWindowRect.bottom;
|
||||||
|
mmi->ptMinTrackSize.x = _initialWindowRect.right;
|
||||||
|
mmi->ptMaxTrackSize.y = _initialWindowRect.bottom;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_SIZE:
|
||||||
|
{
|
||||||
|
resizeDialogElements(LOWORD(lParam));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
case WM_INITDIALOG :
|
case WM_INITDIALOG :
|
||||||
{
|
{
|
||||||
RECT arc;
|
RECT arc;
|
||||||
|
@ -2204,7 +2273,7 @@ void FindReplaceDlg::enableReplaceFunc(bool isEnable)
|
||||||
|
|
||||||
gotoCorrectTab();
|
gotoCorrectTab();
|
||||||
|
|
||||||
::MoveWindow(::GetDlgItem(_hSelf, IDCANCEL), pClosePos->left, pClosePos->top, pClosePos->right, pClosePos->bottom, TRUE);
|
::MoveWindow(::GetDlgItem(_hSelf, IDCANCEL), pClosePos->left + _deltaWidth, pClosePos->top, pClosePos->right, pClosePos->bottom, TRUE);
|
||||||
|
|
||||||
TCHAR label[MAX_PATH];
|
TCHAR label[MAX_PATH];
|
||||||
_tab.getCurrentTitle(label, MAX_PATH);
|
_tab.getCurrentTitle(label, MAX_PATH);
|
||||||
|
@ -2595,7 +2664,7 @@ void FindReplaceDlg::enableFindInFilesFunc()
|
||||||
enableFindInFilesControls();
|
enableFindInFilesControls();
|
||||||
_currentStatus = FINDINFILES_DLG;
|
_currentStatus = FINDINFILES_DLG;
|
||||||
gotoCorrectTab();
|
gotoCorrectTab();
|
||||||
::MoveWindow(::GetDlgItem(_hSelf, IDCANCEL), _findInFilesClosePos.left, _findInFilesClosePos.top, _findInFilesClosePos.right, _findInFilesClosePos.bottom, TRUE);
|
::MoveWindow(::GetDlgItem(_hSelf, IDCANCEL), _findInFilesClosePos.left + _deltaWidth, _findInFilesClosePos.top, _findInFilesClosePos.right, _findInFilesClosePos.bottom, TRUE);
|
||||||
TCHAR label[MAX_PATH];
|
TCHAR label[MAX_PATH];
|
||||||
_tab.getCurrentTitle(label, MAX_PATH);
|
_tab.getCurrentTitle(label, MAX_PATH);
|
||||||
::SetWindowText(_hSelf, label);
|
::SetWindowText(_hSelf, label);
|
||||||
|
@ -2624,7 +2693,7 @@ void FindReplaceDlg::enableMarkFunc()
|
||||||
|
|
||||||
_currentStatus = MARK_DLG;
|
_currentStatus = MARK_DLG;
|
||||||
gotoCorrectTab();
|
gotoCorrectTab();
|
||||||
::MoveWindow(::GetDlgItem(_hSelf, IDCANCEL), _findInFilesClosePos.left, _findInFilesClosePos.top, _findInFilesClosePos.right, _findInFilesClosePos.bottom, TRUE);
|
::MoveWindow(::GetDlgItem(_hSelf, IDCANCEL), _findInFilesClosePos.left + _deltaWidth, _findInFilesClosePos.top, _findInFilesClosePos.right, _findInFilesClosePos.bottom, TRUE);
|
||||||
TCHAR label[MAX_PATH];
|
TCHAR label[MAX_PATH];
|
||||||
_tab.getCurrentTitle(label, MAX_PATH);
|
_tab.getCurrentTitle(label, MAX_PATH);
|
||||||
::SetWindowText(_hSelf, label);
|
::SetWindowText(_hSelf, label);
|
||||||
|
|
|
@ -335,6 +335,7 @@ public :
|
||||||
bool removeFinder(Finder *finder2remove);
|
bool removeFinder(Finder *finder2remove);
|
||||||
|
|
||||||
protected :
|
protected :
|
||||||
|
void resizeDialogElements(LONG newWidth);
|
||||||
virtual INT_PTR CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
|
virtual INT_PTR CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
static LONG_PTR originalFinderProc;
|
static LONG_PTR originalFinderProc;
|
||||||
|
|
||||||
|
@ -344,6 +345,10 @@ protected :
|
||||||
void combo2ExtendedMode(int comboID);
|
void combo2ExtendedMode(int comboID);
|
||||||
|
|
||||||
private :
|
private :
|
||||||
|
RECT _initialWindowRect;
|
||||||
|
LONG _lastDeltaWidth;
|
||||||
|
LONG _deltaWidth;
|
||||||
|
LONG _initialClientWidth;
|
||||||
|
|
||||||
DIALOG_TYPE _currentStatus;
|
DIALOG_TYPE _currentStatus;
|
||||||
RECT _findClosePos, _replaceClosePos, _findInFilesClosePos;
|
RECT _findClosePos, _replaceClosePos, _findInFilesClosePos;
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
#include "FindReplaceDlg_rc.h"
|
#include "FindReplaceDlg_rc.h"
|
||||||
|
|
||||||
IDD_FIND_REPLACE_DLG DIALOGEX 36, 44, 367, 200
|
IDD_FIND_REPLACE_DLG DIALOGEX 36, 44, 367, 200
|
||||||
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
|
||||||
EXSTYLE WS_EX_TOOLWINDOW
|
EXSTYLE WS_EX_TOOLWINDOW
|
||||||
CAPTION "Replace"
|
CAPTION "Replace"
|
||||||
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
|
|
Loading…
Reference in New Issue