mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
Windows: reorganise menu ids.
A user pointed out today that IDM_PREFS overlaps the second preset, because I forgot that IDM_PRESETS was not a single id but the base for an open-ended series. Looking more closely, there are several other problems with the IDM_* constants. IDM_GAMES (used in COMBINED mode) shouldn't be at an arbitrary distance _above_ IDM_PRESETS, because that risks a collision; instead, the games' and presets' ids should interleave. Also, the ids above IDM_GAMES were going up in steps of 1, which should have been 0x10, for the usual reason that the bottom four bits of the id aren't guaranteed. And IDM_KEYEMUL was completely unused (I suspect it was part of the discarded WinCE support). Now the #defines that are the bases of series are labelled as IDM_FOO_BASE; they interleave as they should; and there's a clear comment.
This commit is contained in:
43
windows.c
43
windows.c
@ -35,11 +35,14 @@
|
|||||||
#define IDM_SAVE 0x00E0
|
#define IDM_SAVE 0x00E0
|
||||||
#define IDM_LOAD 0x00F0
|
#define IDM_LOAD 0x00F0
|
||||||
#define IDM_PRINT 0x0100
|
#define IDM_PRINT 0x0100
|
||||||
#define IDM_PRESETS 0x0110
|
#define IDM_PREFS 0x0110
|
||||||
#define IDM_PREFS 0x0120
|
|
||||||
#define IDM_GAMES 0x0300
|
|
||||||
|
|
||||||
#define IDM_KEYEMUL 0x0400
|
/* Menu items for preset game_params go up from IDM_PRESET_BASE in
|
||||||
|
* steps of MENUITEM_STEP = 0x20. Menu items for selecting different
|
||||||
|
* games (in -DCOMBINED mode) go up from IDM_GAME_BASE similarly. */
|
||||||
|
#define IDM_PRESET_BASE 0x0120
|
||||||
|
#define IDM_GAME_BASE 0x0130
|
||||||
|
#define MENUITEM_STEP 0x0020
|
||||||
|
|
||||||
#define HELP_FILE_NAME "puzzles.hlp"
|
#define HELP_FILE_NAME "puzzles.hlp"
|
||||||
#define HELP_CNT_NAME "puzzles.cnt"
|
#define HELP_CNT_NAME "puzzles.cnt"
|
||||||
@ -1540,7 +1543,8 @@ static void populate_preset_menu(frontend *fe,
|
|||||||
UINT flags = MF_ENABLED;
|
UINT flags = MF_ENABLED;
|
||||||
|
|
||||||
if (entry->params) {
|
if (entry->params) {
|
||||||
id_or_sub = (UINT_PTR)(IDM_PRESETS + 0x10 * entry->id);
|
id_or_sub = (UINT_PTR)(
|
||||||
|
IDM_PRESET_BASE + MENUITEM_STEP * entry->id);
|
||||||
|
|
||||||
fe->preset_menuitems[entry->id].which_menu = winmenu;
|
fe->preset_menuitems[entry->id].which_menu = winmenu;
|
||||||
fe->preset_menuitems[entry->id].item_index =
|
fe->preset_menuitems[entry->id].item_index =
|
||||||
@ -1702,7 +1706,9 @@ static int fe_set_midend(frontend *fe, midend *me)
|
|||||||
if (strcmp(gamelist[i]->name, fe->game->name) != 0) {
|
if (strcmp(gamelist[i]->name, fe->game->name) != 0) {
|
||||||
/* only include those games that aren't the same as the
|
/* only include those games that aren't the same as the
|
||||||
* game we're currently playing. */
|
* game we're currently playing. */
|
||||||
AppendMenu(games, MF_ENABLED, IDM_GAMES + i, gamelist[i]->name);
|
AppendMenu(games, MF_ENABLED,
|
||||||
|
IDM_GAME_BASE + MENUITEM_STEP * i,
|
||||||
|
gamelist[i]->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2863,27 +2869,34 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
|
|||||||
start_help(fe, help_type == CHM ?
|
start_help(fe, help_type == CHM ?
|
||||||
fe->game->htmlhelp_topic : fe->game->winhelp_topic);
|
fe->game->htmlhelp_topic : fe->game->winhelp_topic);
|
||||||
break;
|
break;
|
||||||
default:
|
default: {
|
||||||
|
unsigned n;
|
||||||
|
|
||||||
#ifdef COMBINED
|
#ifdef COMBINED
|
||||||
if (wParam >= IDM_GAMES && wParam < (IDM_GAMES + (WPARAM)gamecount)) {
|
n = (wParam - IDM_GAME_BASE) / MENUITEM_STEP;
|
||||||
int p = wParam - IDM_GAMES;
|
if (n < gamecount && wParam == IDM_GAME_BASE + MENUITEM_STEP * n) {
|
||||||
char *error = NULL;
|
char *error = NULL;
|
||||||
fe_set_midend(fe, midend_for_new_game(fe, gamelist[p], NULL,
|
fe_set_midend(fe, midend_for_new_game(fe, gamelist[n], NULL,
|
||||||
false, false, &error));
|
false, false, &error));
|
||||||
sfree(error);
|
sfree(error);
|
||||||
} else
|
break;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
{
|
|
||||||
|
n = (wParam - IDM_PRESET_BASE) / MENUITEM_STEP;
|
||||||
|
if (wParam == IDM_PRESET_BASE + MENUITEM_STEP * n) {
|
||||||
game_params *preset = preset_menu_lookup_by_id(
|
game_params *preset = preset_menu_lookup_by_id(
|
||||||
fe->preset_menu,
|
fe->preset_menu, n);
|
||||||
((wParam &~ 0xF) - IDM_PRESETS) / 0x10);
|
|
||||||
|
|
||||||
if (preset) {
|
if (preset) {
|
||||||
midend_set_params(fe->me, preset);
|
midend_set_params(fe->me, preset);
|
||||||
new_game_type(fe);
|
new_game_type(fe);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
|
Reference in New Issue
Block a user