[PATCH] regedit: Implement deleting multiple values
Andre Wisplinghoff
andre.wisplinghoff at gmail.com
Thu Jul 10 07:30:27 CDT 2008
---
programs/regedit/De.rc | 1 +
programs/regedit/En.rc | 1 +
programs/regedit/Fr.rc | 1 +
programs/regedit/edit.c | 7 ++++---
programs/regedit/framewnd.c | 23 +++++++++++++++++++++--
programs/regedit/listview.c | 6 +++---
programs/regedit/main.h | 3 ++-
programs/regedit/resource.h | 1 +
8 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/programs/regedit/De.rc b/programs/regedit/De.rc
index 493b219..6df36ad 100644
--- a/programs/regedit/De.rc
+++ b/programs/regedit/De.rc
@@ -299,6 +299,7 @@ BEGIN
IDS_TOO_BIG_VALUE "Der Wert ist zu groß (%ld)"
IDS_DELETE_BOX_TITLE "Bitte bestätigen"
IDS_DELETE_BOX_TEXT "Wollen Sie '%s' wirklich löschen?"
+ IDS_DELETE_BOX_TEXT_MULTIPLE "Wollen Sie diese Werte wirklich löschen?"
IDS_NEWKEY "Neuer Schlüssel #%d"
IDS_NEWVALUE "Neuer Wert #%d"
IDS_NOTFOUND "Suchfolge '%s' wurde nicht gefunden."
diff --git a/programs/regedit/En.rc b/programs/regedit/En.rc
index e538c02..8cc37aa 100644
--- a/programs/regedit/En.rc
+++ b/programs/regedit/En.rc
@@ -371,6 +371,7 @@ BEGIN
IDS_TOO_BIG_VALUE "Value is too big (%ld)"
IDS_DELETE_BOX_TITLE "Confirm Value Delete"
IDS_DELETE_BOX_TEXT "Are you sure you want to delete value '%s'?"
+ IDS_DELETE_BOX_TEXT_MULTIPLE "Are you sure you want to delete these values?"
IDS_NEWKEY "New Key #%d"
IDS_NEWVALUE "New Value #%d"
IDS_NOTFOUND "Search string '%s' not found"
diff --git a/programs/regedit/Fr.rc b/programs/regedit/Fr.rc
index fc455f0..079457f 100644
--- a/programs/regedit/Fr.rc
+++ b/programs/regedit/Fr.rc
@@ -294,6 +294,7 @@ BEGIN
IDS_TOO_BIG_VALUE "La valeur est trop grande (%ld)"
IDS_DELETE_BOX_TITLE "Confirmez l'effacement de valeur"
IDS_DELETE_BOX_TEXT "Êtes vous sûr vous voulez supprimer la valeur '%s'?"
+ IDS_DELETE_BOX_TEXT_MULTIPLE "Êtes vous sûr vous voulez supprimer cette valeurs?"
IDS_NEWKEY "Nouvelle Clé #%d"
IDS_NEWVALUE "Nouvelle Valeur #%d"
IDS_NOTFOUND "Occurence de '%s' non trouvée"
diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c
index 5135dea..954e647 100644
--- a/programs/regedit/edit.c
+++ b/programs/regedit/edit.c
@@ -413,7 +413,7 @@ done:
return result;
}
-BOOL DeleteValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName)
+BOOL DeleteValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName, BOOL showMessageBox)
{
BOOL result = FALSE;
LONG lRet;
@@ -423,8 +423,9 @@ BOOL DeleteValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName)
lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_READ | KEY_SET_VALUE, &hKey);
if (lRet != ERROR_SUCCESS) return FALSE;
- if (messagebox(hwnd, MB_YESNO | MB_ICONEXCLAMATION, IDS_DELETE_BOX_TITLE, IDS_DELETE_BOX_TEXT, visibleValueName) != IDYES)
- goto done;
+ if (showMessageBox)
+ if (messagebox(hwnd, MB_YESNO | MB_ICONEXCLAMATION, IDS_DELETE_BOX_TITLE, IDS_DELETE_BOX_TEXT, visibleValueName) != IDYES)
+ goto done;
lRet = RegDeleteValue(hKey, valueName ? valueName : "");
if (lRet != ERROR_SUCCESS && valueName) {
diff --git a/programs/regedit/framewnd.c b/programs/regedit/framewnd.c
index fd20a62..b754096 100644
--- a/programs/regedit/framewnd.c
+++ b/programs/regedit/framewnd.c
@@ -619,9 +619,10 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
LPCTSTR valueName;
TCHAR newKey[MAX_NEW_KEY_LEN];
DWORD valueType;
+ int curIndex;
+ BOOL firstItem = TRUE;
keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
- valueName = GetValueName(g_pChildWnd->hListWnd);
if (LOWORD(wParam) >= ID_FAVORITE_FIRST && LOWORD(wParam) <= ID_FAVORITE_LAST) {
HKEY hKey;
@@ -664,11 +665,29 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
DeleteNode(g_pChildWnd->hTreeWnd, 0);
}
} else if (GetFocus() == g_pChildWnd->hListWnd) {
- if (DeleteValue(hWnd, hKeyRoot, keyPath, valueName))
+ curIndex = ListView_GetNextItem(g_pChildWnd->hListWnd, -1, LVNI_SELECTED);
+ while(curIndex != -1) {
+ valueName = GetItemText(g_pChildWnd->hListWnd, curIndex);
+ curIndex = ListView_GetNextItem(g_pChildWnd->hListWnd, curIndex, LVNI_SELECTED);
+ if(curIndex != -1 && firstItem) {
+ TCHAR title[256];
+ TCHAR text[1024];
+ if(!LoadString(hInst, IDS_DELETE_BOX_TITLE, title, COUNT_OF(title)))
+ lstrcpy(title, "Error");
+ if(!LoadString(hInst, IDS_DELETE_BOX_TEXT_MULTIPLE, text, COUNT_OF(text)))
+ lstrcpy(text, "Unknown error string!");
+ if (MessageBox(hWnd, text, title, MB_YESNO | MB_ICONEXCLAMATION) != IDYES)
+ break;
+ }
+ if (!DeleteValue(hWnd, hKeyRoot, keyPath, valueName, curIndex==-1 && firstItem))
+ break;
+ firstItem = FALSE;
+ }
RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath, NULL);
}
break;
case ID_EDIT_MODIFY:
+ valueName = GetValueName(g_pChildWnd->hListWnd);
if (ModifyValue(hWnd, hKeyRoot, keyPath, valueName))
RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath, valueName);
break;
diff --git a/programs/regedit/listview.c b/programs/regedit/listview.c
index 4e2010f..ebb456a 100644
--- a/programs/regedit/listview.c
+++ b/programs/regedit/listview.c
@@ -54,7 +54,7 @@ static TCHAR g_szValueNotSet[64];
static int default_column_widths[MAX_LIST_COLUMNS] = { 200, 175, 400 };
static int column_alignment[MAX_LIST_COLUMNS] = { LVCFMT_LEFT, LVCFMT_LEFT, LVCFMT_LEFT };
-static LPTSTR get_item_text(HWND hwndLV, int item)
+LPTSTR GetItemText(HWND hwndLV, UINT item)
{
LPTSTR newStr, curStr;
unsigned int maxLen = 128;
@@ -88,7 +88,7 @@ LPCTSTR GetValueName(HWND hwndLV)
item = ListView_GetNextItem(hwndLV, -1, LVNI_FOCUSED);
if (item == -1) return NULL;
- g_valueName = get_item_text(hwndLV, item);
+ g_valueName = GetItemText(hwndLV, item);
return g_valueName;
}
@@ -391,7 +391,7 @@ static LRESULT CALLBACK ListWndProc(HWND hWnd, UINT message, WPARAM wParam, LPAR
break;
case LVN_ENDLABELEDIT: {
LPNMLVDISPINFO dispInfo = (LPNMLVDISPINFO)lParam;
- LPTSTR valueName = get_item_text(hWnd, dispInfo->item.iItem);
+ LPTSTR valueName = GetItemText(hWnd, dispInfo->item.iItem);
LONG ret;
if (!valueName) return -1; /* cannot rename a default value */
ret = RenameValue(hWnd, g_currentRootKey, g_currentPath, valueName, dispInfo->item.pszText);
diff --git a/programs/regedit/main.h b/programs/regedit/main.h
index 0c39101..7547ea0 100644
--- a/programs/regedit/main.h
+++ b/programs/regedit/main.h
@@ -109,6 +109,7 @@ extern void UpdateStatusBar(void);
extern HWND CreateListView(HWND hwndParent, UINT id);
extern BOOL RefreshListView(HWND hwndLV, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR highlightValue);
extern HWND StartValueRename(HWND hwndLV);
+extern LPTSTR GetItemText(HWND hwndLV, UINT item);
extern LPCTSTR GetValueName(HWND hwndLV);
extern BOOL ListWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result);
extern BOOL IsDefaultValue(HWND hwndLV, int i);
@@ -129,7 +130,7 @@ extern BOOL CreateKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPTSTR newKeyNa
extern BOOL CreateValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, DWORD valueType, LPTSTR valueName);
extern BOOL ModifyValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName);
extern BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath);
-extern BOOL DeleteValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName);
+extern BOOL DeleteValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName, BOOL showMessageBox);
extern BOOL RenameValue(HWND hwnd, HKEY hRootKey, LPCTSTR keyPath, LPCTSTR oldName, LPCTSTR newName);
extern BOOL RenameKey(HWND hwnd, HKEY hRootKey, LPCTSTR keyPath, LPCTSTR newName);
extern void error(HWND hwnd, INT resId, ...);
diff --git a/programs/regedit/resource.h b/programs/regedit/resource.h
index 711dada..c3b8456 100644
--- a/programs/regedit/resource.h
+++ b/programs/regedit/resource.h
@@ -121,6 +121,7 @@
#define IDS_DELETE_BOX_TITLE 32840
#define IDS_DELETE_BOX_TEXT 32841
#define IDS_NOTFOUND 32842
+#define IDS_DELETE_BOX_TEXT_MULTIPLE 32843
#define IDD_EDIT_DWORD 32850
#define IDC_DWORD_BASE 32852
#define IDC_DWORD_HEX 32853
--
1.5.6.2
--------------000704050602000906000308--
More information about the wine-patches
mailing list