adapted ram search/watch fixes/improvements from desmume

This commit is contained in:
gocha 2010-10-07 13:32:42 +00:00
parent 795de75419
commit 422dd2783d
3 changed files with 2112 additions and 2060 deletions

File diff suppressed because it is too large Load Diff

View File

@ -57,6 +57,8 @@ void init_list_box(HWND Box, const char* Strs[], int numColumns, int *columnWidt
bool QuickSaveWatches(); bool QuickSaveWatches();
bool ResetWatches(); bool ResetWatches();
void RefreshWatchListSelectedCountControlStatus(HWND hDlg);
unsigned int GetCurrentValue(AddressWatcher& watch) unsigned int GetCurrentValue(AddressWatcher& watch)
{ {
//TODO: A similar if for 4-byte just to be through, but there shouldn't be any reason to have 4-byte on the NES! //TODO: A similar if for 4-byte just to be through, but there shouldn't be any reason to have 4-byte on the NES!
@ -449,8 +451,10 @@ void OpenRWRecentFile(int memwRFileNumber)
} }
fclose(WatchFile); fclose(WatchFile);
if (RamWatchHWnd) if (RamWatchHWnd) {
ListView_SetItemCount(GetDlgItem(RamWatchHWnd,IDC_WATCHLIST),WatchCount); ListView_SetItemCount(GetDlgItem(RamWatchHWnd,IDC_WATCHLIST),WatchCount);
RefreshWatchListSelectedCountControlStatus(RamWatchHWnd);
}
RWfileChanged=false; RWfileChanged=false;
return; return;
} }
@ -646,8 +650,10 @@ bool ResetWatches()
rswatches[WatchCount].comment = NULL; rswatches[WatchCount].comment = NULL;
} }
WatchCount++; WatchCount++;
if (RamWatchHWnd) if (RamWatchHWnd) {
ListView_SetItemCount(GetDlgItem(RamWatchHWnd,IDC_WATCHLIST),WatchCount); ListView_SetItemCount(GetDlgItem(RamWatchHWnd,IDC_WATCHLIST),WatchCount);
RefreshWatchListSelectedCountControlStatus(RamWatchHWnd);
}
RWfileChanged = false; RWfileChanged = false;
currentWatch[0] = NULL; currentWatch[0] = NULL;
return true; return true;
@ -827,6 +833,38 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara
void RamWatchEnableCommand(HWND hDlg, HMENU hMenu, UINT uIDEnableItem, bool enable)
{
EnableWindow(GetDlgItem(hDlg, uIDEnableItem), (enable?TRUE:FALSE));
if (hMenu != NULL) {
if (uIDEnableItem == ID_WATCHES_UPDOWN) {
EnableMenuItem(hMenu, IDC_C_WATCH_UP, MF_BYCOMMAND | (enable?MF_ENABLED:MF_GRAYED));
EnableMenuItem(hMenu, IDC_C_WATCH_DOWN, MF_BYCOMMAND | (enable?MF_ENABLED:MF_GRAYED));
}
else
EnableMenuItem(hMenu, uIDEnableItem, MF_BYCOMMAND | (enable?MF_ENABLED:MF_GRAYED));
}
}
void RefreshWatchListSelectedCountControlStatus(HWND hDlg)
{
static int prevSelCount=-1;
int selCount = ListView_GetSelectedCount(GetDlgItem(hDlg,IDC_WATCHLIST));
if(selCount != prevSelCount)
{
if(selCount < 2 || prevSelCount < 2)
{
RamWatchEnableCommand(hDlg, ramwatchmenu, IDC_C_WATCH_EDIT, selCount == 1);
RamWatchEnableCommand(hDlg, ramwatchmenu, IDC_C_WATCH_REMOVE, selCount >= 1);
RamWatchEnableCommand(hDlg, ramwatchmenu, IDC_C_WATCH, selCount == 1);
RamWatchEnableCommand(hDlg, ramwatchmenu, IDC_C_WATCH_DUPLICATE, selCount == 1);
RamWatchEnableCommand(hDlg, ramwatchmenu, IDC_C_ADDCHEAT, selCount == 1);
RamWatchEnableCommand(hDlg, ramwatchmenu, ID_WATCHES_UPDOWN, selCount == 1);
}
prevSelCount = selCount;
}
}
LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
RECT r; RECT r;
@ -914,6 +952,7 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam
DragAcceptFiles(hDlg, TRUE); DragAcceptFiles(hDlg, TRUE);
RefreshWatchListSelectedCountControlStatus(hDlg);
return false; return false;
} break; } break;
@ -950,10 +989,11 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam
case LVN_ITEMCHANGED: // selection changed event case LVN_ITEMCHANGED: // selection changed event
{ {
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)lP; NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)lP;
if(pNMListView->uNewState & LVIS_FOCUSED) if(pNMListView->uNewState & LVIS_FOCUSED ||
(pNMListView->uNewState ^ pNMListView->uOldState) & LVIS_SELECTED)
{ {
// disable buttons that we don't have the right number of selected items for // disable buttons that we don't have the right number of selected items for
RefreshWatchListSelectedItemControlStatus(hDlg); RefreshWatchListSelectedCountControlStatus(hDlg);
} }
} break; } break;
@ -1028,15 +1068,19 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam
ResetWatches(); ResetWatches();
return true; return true;
case IDC_C_WATCH_REMOVE: case IDC_C_WATCH_REMOVE:
watchIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST)); {
if(watchIndex != -1) HWND watchListControl = GetDlgItem(hDlg, IDC_WATCHLIST);
watchIndex = ListView_GetNextItem(watchListControl, -1, LVNI_ALL | LVNI_SELECTED);
while (watchIndex >= 0)
{ {
RemoveWatch(watchIndex); RemoveWatch(watchIndex);
ListView_SetItemCount(GetDlgItem(hDlg,IDC_WATCHLIST),WatchCount); ListView_DeleteItem(watchListControl, watchIndex);
RWfileChanged=true; watchIndex = ListView_GetNextItem(watchListControl, -1, LVNI_ALL | LVNI_SELECTED);
SetFocus(GetDlgItem(hDlg,IDC_WATCHLIST));
} }
RWfileChanged=true;
SetFocus(GetDlgItem(hDlg,IDC_WATCHLIST));
return true; return true;
}
case IDC_C_WATCH_EDIT: case IDC_C_WATCH_EDIT:
watchIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST)); watchIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST));
if(watchIndex != -1) if(watchIndex != -1)

View File

@ -1638,7 +1638,7 @@ CAPTION " RAM Watch"
MENU RAMWATCH_MENU MENU RAMWATCH_MENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN BEGIN
CONTROL "",IDC_WATCHLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_OWNERDATA | WS_BORDER | WS_TABSTOP,9,9,210,279,WS_EX_CLIENTEDGE CONTROL "",IDC_WATCHLIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_OWNERDATA | WS_BORDER | WS_TABSTOP,9,9,210,279,WS_EX_CLIENTEDGE
PUSHBUTTON "Edit",IDC_C_WATCH_EDIT,226,66,34,14 PUSHBUTTON "Edit",IDC_C_WATCH_EDIT,226,66,34,14
PUSHBUTTON "Remove",IDC_C_WATCH_REMOVE,226,83,34,14 PUSHBUTTON "Remove",IDC_C_WATCH_REMOVE,226,83,34,14
PUSHBUTTON "New",IDC_C_WATCH,226,100,34,14 PUSHBUTTON "New",IDC_C_WATCH,226,100,34,14