Module: wine Branch: master Commit: a7f84cc0351b16dffaa9038612a451e999223d0c URL: http://source.winehq.org/git/wine.git/?a=commit;h=a7f84cc0351b16dffaa9038612...
Author: Andre Wisplinghoff andre.wisplinghoff@gmail.com Date: Thu Jul 10 14:30:27 2008 +0200
regedit: Implement deleting multiple values.
---
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 4bf78af..5262e55 100644 --- a/programs/regedit/framewnd.c +++ b/programs/regedit/framewnd.c @@ -629,9 +629,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; @@ -674,11 +675,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