+ add: controls to clear history (file and find/replace)

This commit is contained in:
Rainer Kottenhoff 2020-08-16 02:41:18 +02:00
parent db0b042f7e
commit 48257c1d08
10 changed files with 185 additions and 92 deletions

View File

@ -63,6 +63,7 @@
#define IDS_MUI_BACKSLASHHELP 12022
#define IDS_MUI_REGEXPHELP 12023
#define IDS_MUI_WILDCARDHELP 12024
#define IDS_CLEAR_ALL 12025
#define IDS_MUI_ERR_LOADFILE 13000
#define IDS_MUI_ERR_SAVEFILE 13001
@ -154,6 +155,8 @@
#define IDS_MUI_ABOUT_ACKNOWLEDGES 15039
#define IDS_MUI_ABOUT_MORE 15040
#define IDS_MUI_ABOUT_LICENSES 15041
#define IDS_MUI_CLEAR_FIND_HISTORY 15042
#define IDS_MUI_CLEAR_REPL_HISTORY 15043
#define IDS_MUI_TRANSL_AUTHOR 15050
#define IDS_MUI_ASSOCIATED_EXT 15051
@ -356,6 +359,7 @@
#define IDC_MULTIEDGELINE 18120
#define IDC_SHOWEDGELINE 18121
#define IDC_BACKGRDCOLOR 18122
#define IDC_CLEAR_LIST 18123
#define CMD_ESCAPE 20000
#define CMD_SHIFTESC 20001

View File

@ -267,7 +267,7 @@ BEGIN
CONTROL "&Speichere Historie beim Beenden.",IDC_SAVEMRU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,107,120,10
CONTROL "&Letztes Suchmuster merken.",IDC_REMEMBERSEARCHPATTERN,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,130,120,10
PUSHBUTTON "Verwerfen",IDC_REMOVE,212,107,50,14,WS_DISABLED
CONTROL "Verwerfen", IDC_REMOVE, "Button", BS_DEFSPLITBUTTON | WS_TABSTOP | WS_DISABLED, 212, 107, 50, 14
DEFPUSHBUTTON "OK",IDOK,154,139,50,14,WS_DISABLED
PUSHBUTTON "Abbrechen",IDCANCEL,212,139,50,14
SCROLLBAR IDC_RESIZEGRIP,7,146,10,10

View File

@ -253,6 +253,11 @@ BEGIN
IDM_THEMES_FILE_ITEM "Standard Einstellungen"
IDS_MUI_STATUSBAR_PREFIXES "Z ,Sp ,Sel ,GrB ,SelZ ,Vork ,,,,,,,Zch ,Ersz ,Ergb ,"
IDS_MUI_STATUSBAR_POSTFIXES ",,,,,,,,,,,,,,,"
IDS_CLEAR_ALL "Alle löschen"
IDS_MUI_CLEAR_FIND_HISTORY
"Suchen-Historie löschen"
IDS_MUI_CLEAR_REPL_HISTORY
"Ersetzen-Historie löschen"
END
STRINGTABLE

View File

@ -267,7 +267,8 @@ BEGIN
CONTROL "&Save recent file list on exit.",IDC_SAVEMRU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,107,96,10
CONTROL "&Remember search pattern.",IDC_REMEMBERSEARCHPATTERN,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,130,96,10
PUSHBUTTON "Discard",IDC_REMOVE,212,107,50,14,WS_DISABLED
//PUSHBUTTON "Discard",IDC_REMOVE,212,107,50,14,WS_DISABLED
CONTROL "Discard", IDC_REMOVE, "Button", BS_DEFSPLITBUTTON | WS_TABSTOP | WS_DISABLED, 212, 107, 50, 14
DEFPUSHBUTTON "OK",IDOK,154,139,50,14,WS_DISABLED
PUSHBUTTON "Cancel",IDCANCEL,212,139,50,14
SCROLLBAR IDC_RESIZEGRIP,7,143,10,10

View File

@ -253,6 +253,11 @@ BEGIN
IDM_THEMES_FILE_ITEM "Standard Settings"
IDS_MUI_STATUSBAR_PREFIXES "Ln ,Col ,Sel ,Sb ,SLn ,Occ ,,,,,,,Ch ,Repl ,Eval ,"
IDS_MUI_STATUSBAR_POSTFIXES ",,,,,,,,,,,,,,,"
IDS_CLEAR_ALL "Clear All"
IDS_MUI_CLEAR_FIND_HISTORY
"Clear Find History"
IDS_MUI_CLEAR_REPL_HISTORY
"Clear Replace History"
END
STRINGTABLE

View File

@ -2067,7 +2067,7 @@ __try {
{
if (!Settings.SaveRecentFiles) {
// Cleanup unwanted MRUs
MRU_Empty(Globals.pFileMRU);
MRU_Empty(Globals.pFileMRU, false);
MRU_Save(Globals.pFileMRU);
}
else {
@ -2077,9 +2077,9 @@ __try {
if (!Settings.SaveFindReplace) {
// Cleanup unwanted MRUs
MRU_Empty(Globals.pMRUfind);
MRU_Empty(Globals.pMRUfind, false);
MRU_Save(Globals.pMRUfind);
MRU_Empty(Globals.pMRUreplace);
MRU_Empty(Globals.pMRUreplace, false);
MRU_Save(Globals.pMRUreplace);
}
else {
@ -2356,10 +2356,11 @@ bool MRU_Delete(LPMRULIST pmru, int iIndex)
}
bool MRU_Empty(LPMRULIST pmru)
bool MRU_Empty(LPMRULIST pmru, bool bExceptLeast)
{
if (pmru) {
for (int i = 0; i < pmru->iSize; ++i) {
int const beg = bExceptLeast ? 1 : 0;
for (int i = beg; i < pmru->iSize; ++i) {
if (pmru->pszItems[i]) {
LocalFree(pmru->pszItems[i]); // StrDup()
pmru->pszItems[i] = NULL;
@ -2406,8 +2407,7 @@ bool MRU_Load(LPMRULIST pmru, bool bFileProps)
int n = 0;
if (IsIniFileCached()) {
MRU_Empty(pmru);
//if (bFileProps) { ClearDestinationsOnRecentDocs(); }
MRU_Empty(pmru, false);
const WCHAR* const RegKey_Section = pmru->szRegKey;

View File

@ -129,7 +129,7 @@ bool MRU_Add(LPMRULIST pmru, LPCWSTR pszNew, cpi_enc_t iEnc, DocPos iPos, D
bool MRU_FindFile(LPMRULIST pmru, LPCWSTR pszFile, int* iIndex);
bool MRU_AddFile(LPMRULIST pmru, LPWSTR pszFile, bool bRelativePath, bool bUnexpandMyDocs, cpi_enc_t iEnc, DocPos iPos, DocPos iSelAnc, LPCWSTR pszBookMarks);
bool MRU_Delete(LPMRULIST pmru, int iIndex);
bool MRU_Empty(LPMRULIST pmru);
bool MRU_Empty(LPMRULIST pmru, bool bExceptLeast);
int MRU_Enum(LPMRULIST pmru, int iIndex, LPWSTR pszItem, int cchItem);
bool MRU_Load(LPMRULIST pmru, bool bFileProps);
void MRU_Save(LPMRULIST pmru);

View File

@ -1895,94 +1895,136 @@ static INT_PTR CALLBACK FileMRUDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPAR
case WM_NOTIFY:
{
if (((LPNMHDR)(lParam))->idFrom == IDC_FILEMRU) {
switch (((LPNMHDR)(lParam))->code) {
case NM_DBLCLK:
SendWMCommand(hwnd, IDOK);
switch (wParam)
{
case IDC_REMOVE:
switch (((LPNMHDR)lParam)->code) {
case BCN_DROPDOWN:
{
const NMBCDROPDOWN* pDropDown = (NMBCDROPDOWN*)lParam;
// Get screen coordinates of the button.
POINT pt;
pt.x = pDropDown->rcButton.left;
pt.y = pDropDown->rcButton.bottom;
ClientToScreen(pDropDown->hdr.hwndFrom, &pt);
// Create a menu and add items.
HMENU hSplitMenu = CreatePopupMenu();
if (!hSplitMenu)
break;
if (pDropDown->hdr.hwndFrom == GetDlgItem(hwnd, IDC_REMOVE)) {
WCHAR szMenu[80] = {L'\0'};
GetLngString(IDS_CLEAR_ALL, szMenu, COUNTOF(szMenu));
AppendMenu(hSplitMenu, MF_STRING, IDC_CLEAR_LIST, szMenu);
}
// Display the menu.
TrackPopupMenu(hSplitMenu, TPM_LEFTALIGN | TPM_TOPALIGN, pt.x, pt.y, 0, hwnd, NULL);
DestroyMenu(hSplitMenu);
return !0;
}
break;
case LVN_GETDISPINFO:
{
/*
LV_DISPINFO *lpdi = (LPVOID)lParam;
default:
break;
}
break;
if (lpdi->item.mask & LVIF_IMAGE) {
case IDC_FILEMRU:
if (((LPNMHDR)(lParam))->idFrom == IDC_FILEMRU) {
switch (((LPNMHDR)(lParam))->code) {
case NM_DBLCLK:
SendWMCommand(hwnd, IDOK);
break;
WCHAR tch[MAX_PATH] = { L'\0' };
LV_ITEM lvi;
SHFILEINFO shfi;
DWORD dwFlags = SHGFI_SMALLICON | SHGFI_SYSICONINDEX | SHGFI_ATTRIBUTES | SHGFI_ATTR_SPECIFIED;
DWORD dwAttr = 0;
case LVN_GETDISPINFO:
{
/*
LV_DISPINFO *lpdi = (LPVOID)lParam;
ZeroMemory(&lvi,sizeof(LV_ITEM));
if (lpdi->item.mask & LVIF_IMAGE) {
lvi.mask = LVIF_TEXT;
lvi.pszText = tch;
lvi.cchTextMax = COUNTOF(tch);
lvi.iItem = lpdi->item.iItem;
WCHAR tch[MAX_PATH] = { L'\0' };
LV_ITEM lvi;
SHFILEINFO shfi;
DWORD dwFlags = SHGFI_SMALLICON | SHGFI_SYSICONINDEX | SHGFI_ATTRIBUTES | SHGFI_ATTR_SPECIFIED;
DWORD dwAttr = 0;
ListView_GetItem(GetDlgItem(hwnd,IDC_FILEMRU),&lvi);
ZeroMemory(&lvi,sizeof(LV_ITEM));
if (!PathIsExistingFile(tch)) {
dwFlags |= SHGFI_USEFILEATTRIBUTES;
dwAttr = FILE_ATTRIBUTE_NORMAL;
shfi.dwAttributes = 0;
SHGetFileInfo(PathFindFileName(tch),dwAttr,&shfi,sizeof(SHFILEINFO),dwFlags);
lvi.mask = LVIF_TEXT;
lvi.pszText = tch;
lvi.cchTextMax = COUNTOF(tch);
lvi.iItem = lpdi->item.iItem;
ListView_GetItem(GetDlgItem(hwnd,IDC_FILEMRU),&lvi);
if (!PathIsExistingFile(tch)) {
dwFlags |= SHGFI_USEFILEATTRIBUTES;
dwAttr = FILE_ATTRIBUTE_NORMAL;
shfi.dwAttributes = 0;
SHGetFileInfo(PathFindFileName(tch),dwAttr,&shfi,sizeof(SHFILEINFO),dwFlags);
}
else {
shfi.dwAttributes = SFGAO_LINK | SFGAO_SHARE;
SHGetFileInfo(tch,dwAttr,&shfi,sizeof(SHFILEINFO),dwFlags);
}
lpdi->item.iImage = shfi.iIcon;
lpdi->item.mask |= LVIF_DI_SETITEM;
lpdi->item.stateMask = 0;
lpdi->item.state = 0;
if (shfi.dwAttributes & SFGAO_LINK) {
lpdi->item.mask |= LVIF_STATE;
lpdi->item.stateMask |= LVIS_OVERLAYMASK;
lpdi->item.state |= INDEXTOOVERLAYMASK(2);
}
if (shfi.dwAttributes & SFGAO_SHARE) {
lpdi->item.mask |= LVIF_STATE;
lpdi->item.stateMask |= LVIS_OVERLAYMASK;
lpdi->item.state |= INDEXTOOVERLAYMASK(1);
}
dwAttr = GetFileAttributes(tch);
if (!Flags.NoFadeHidden &&
dwAttr != INVALID_FILE_ATTRIBUTES &&
dwAttr & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) {
lpdi->item.mask |= LVIF_STATE;
lpdi->item.stateMask |= LVIS_CUT;
lpdi->item.state |= LVIS_CUT;
}
}
*/
}
break;
else {
shfi.dwAttributes = SFGAO_LINK | SFGAO_SHARE;
SHGetFileInfo(tch,dwAttr,&shfi,sizeof(SHFILEINFO),dwFlags);
}
lpdi->item.iImage = shfi.iIcon;
lpdi->item.mask |= LVIF_DI_SETITEM;
lpdi->item.stateMask = 0;
lpdi->item.state = 0;
if (shfi.dwAttributes & SFGAO_LINK) {
lpdi->item.mask |= LVIF_STATE;
lpdi->item.stateMask |= LVIS_OVERLAYMASK;
lpdi->item.state |= INDEXTOOVERLAYMASK(2);
}
if (shfi.dwAttributes & SFGAO_SHARE) {
lpdi->item.mask |= LVIF_STATE;
lpdi->item.stateMask |= LVIS_OVERLAYMASK;
lpdi->item.state |= INDEXTOOVERLAYMASK(1);
}
dwAttr = GetFileAttributes(tch);
if (!Flags.NoFadeHidden &&
dwAttr != INVALID_FILE_ATTRIBUTES &&
dwAttr & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) {
lpdi->item.mask |= LVIF_STATE;
lpdi->item.stateMask |= LVIS_CUT;
lpdi->item.state |= LVIS_CUT;
case LVN_ITEMCHANGED:
case LVN_DELETEITEM:
{
UINT const cnt = ListView_GetSelectedCount(hwndIL);
DialogEnableControl(hwnd, IDOK, (cnt > 0));
// can't discard current file (myself)
int cur = 0;
if (!MRU_FindFile(Globals.pFileMRU, Globals.CurrentFile, &cur)) {
cur = -1;
}
int const item = ListView_GetNextItem(hwndIL, -1, LVNI_ALL | LVNI_SELECTED);
DialogEnableControl(hwnd, IDC_REMOVE, (cnt > 0) && (cur != item));
}
break;
}
*/
} break;
case LVN_ITEMCHANGED:
case LVN_DELETEITEM:
{
UINT const cnt = ListView_GetSelectedCount(hwndIL);
DialogEnableControl(hwnd, IDOK, (cnt > 0));
// can't discard current file (myself)
int cur = 0;
if (!MRU_FindFile(Globals.pFileMRU, Globals.CurrentFile, &cur)) {
cur = -1;
}
int const item = ListView_GetNextItem(hwndIL, -1, LVNI_ALL | LVNI_SELECTED);
DialogEnableControl(hwnd, IDC_REMOVE, (cnt > 0) && (cur != item));
} break;
}
}
break;
default:
break;
}
}
return !0;
return !0;
case WM_COMMAND:
@ -2057,15 +2099,23 @@ static INT_PTR CALLBACK FileMRUDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPAR
case IDOK:
case IDC_REMOVE:
case IDC_CLEAR_LIST:
{
WCHAR tchFileName[MAX_PATH] = {L'\0'};
//int iItem;
//if ((iItem = SendDlgItemMessage(hwnd,IDC_FILEMRU,LB_GETCURSEL,0,0)) != LB_ERR)
UINT cnt = ListView_GetSelectedCount(hwndIL);
if (cnt > 0) {
//SendDlgItemMessage(hwnd,IDC_FILEMRU,LB_GETTEXT,(WPARAM)iItem,(LPARAM)tch);
if (LOWORD(wParam) == IDC_CLEAR_LIST)
{
MRU_Empty(Globals.pFileMRU, StrIsNotEmpty(Globals.CurrentFile));
if (Globals.bCanSaveIniFile) {
MRU_Save(Globals.pFileMRU);
}
PostWMCommand(hwnd, IDC_FILEMRU_UPDATE_VIEW);
break; // done here
}
LV_ITEM lvi;
ZeroMemory(&lvi, sizeof(LV_ITEM));

View File

@ -5742,12 +5742,20 @@ static INT_PTR CALLBACK EditFindReplaceDlgProc(HWND hwnd,UINT umsg,WPARAM wParam
CopyMemory(sg_pefrData, &s_efrSave, sizeof(EDITFINDREPLACE));
}
WCHAR wchMenuBuf[80] = {L'\0'};
HMENU hmenu = GetSystemMenu(hwnd, false);
GetLngString(IDS_MUI_SAVEPOS, s_tchBuf, COUNTOF(s_tchBuf));
InsertMenu(hmenu, 0, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_MUI_SAVEPOS, s_tchBuf);
GetLngString(IDS_MUI_RESETPOS, s_tchBuf, COUNTOF(s_tchBuf));
InsertMenu(hmenu, 1, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_MUI_RESETPOS, s_tchBuf);
GetLngString(IDS_MUI_SAVEPOS, wchMenuBuf, COUNTOF(wchMenuBuf));
InsertMenu(hmenu, 0, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_MUI_SAVEPOS, wchMenuBuf);
GetLngString(IDS_MUI_RESETPOS, wchMenuBuf, COUNTOF(wchMenuBuf));
InsertMenu(hmenu, 1, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_MUI_RESETPOS, wchMenuBuf);
InsertMenu(hmenu, 2, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
GetLngString(IDS_MUI_CLEAR_FIND_HISTORY, wchMenuBuf, COUNTOF(wchMenuBuf));
InsertMenu(hmenu, 3, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_MUI_CLEAR_FIND_HISTORY, wchMenuBuf);
GetLngString(IDS_MUI_CLEAR_REPL_HISTORY, wchMenuBuf, COUNTOF(wchMenuBuf));
InsertMenu(hmenu, 4, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_MUI_CLEAR_REPL_HISTORY, wchMenuBuf);
InsertMenu(hmenu, 5, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
hBrushRed = CreateSolidBrush(rgbRedColorRef);
hBrushGreen = CreateSolidBrush(rgbGreenColorRef);
@ -6349,6 +6357,16 @@ static INT_PTR CALLBACK EditFindReplaceDlgProc(HWND hwnd,UINT umsg,WPARAM wParam
Settings.FindReplaceDlgPosX = Settings.FindReplaceDlgPosY = CW_USEDEFAULT;
break;
case IDACC_CLEAR_FIND_HISTORY:
MRU_Empty(Globals.pMRUfind, true);
while ((int)SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_DELETESTRING, 0, 0) > 0) {};
break;
case IDACC_CLEAR_REPL_HISTORY:
MRU_Empty(Globals.pMRUreplace, true);
while ((int)SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_DELETESTRING, 0, 0) > 0) {};
break;
case IDACC_FINDNEXT:
PostWMCommand(hwnd, IDOK);
break;
@ -6399,6 +6417,14 @@ static INT_PTR CALLBACK EditFindReplaceDlgProc(HWND hwnd,UINT umsg,WPARAM wParam
PostWMCommand(hwnd, IDACC_RESETPOS);
return !0;
}
else if (wParam == IDS_MUI_CLEAR_FIND_HISTORY) {
PostWMCommand(hwnd, IDACC_CLEAR_FIND_HISTORY);
return !0;
}
else if (wParam == IDS_MUI_CLEAR_REPL_HISTORY) {
PostWMCommand(hwnd, IDACC_CLEAR_REPL_HISTORY);
return !0;
}
break;
case WM_NOTIFY:

View File

@ -52,6 +52,8 @@
#define IDACC_SELTOPREV 311
#define IDACC_VIEWSCHEMECONFIG 312
#define IDACC_PREVIEW 313
#define IDACC_CLEAR_FIND_HISTORY 314
#define IDACC_CLEAR_REPL_HISTORY 315
#define IDC_SETCURLEXERTV 402