--- np2/win9x/menu.cpp 2004/03/07 07:51:26 1.14 +++ np2/win9x/menu.cpp 2007/10/26 22:48:28 1.28 @@ -10,110 +10,195 @@ #define MFCHECK(a) ((a)?MF_CHECKED:MF_UNCHECKED) -typedef struct { - UINT16 id; - UINT16 str; -} MENUITEMS; +static BOOL searchchildmenu(HMENU hMenu, UINT uID, + HMENU *phmenuRet, UINT *puPos) +{ + UINT nCount; + UINT i; + MENUITEMINFO mii; + nCount = GetMenuItemCount(hMenu); + for (i=0; iid) { - insertresmenu(menu, pos, MF_BYPOSITION | MF_STRING, - item->id, item->str); - } - else { - InsertMenu(menu, pos, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); - } - item++; - pos++; + uCount = 0; + if (searchchildmenu(hMenu, uByID, &hmenuSub, &uSubPos)) + { + uCount = addmenures(hmenuSub, uSubPos + 1, uID, FALSE); } + return uCount; } -// ---- +static void insertresmenu(HMENU hMenu, UINT uPosition, UINT uFlags, + UINT_PTR uIDNewItem, UINT uID) +{ + TCHAR szString[128]; + + if (LoadString(hInst, uID, szString, NELEMENTS(szString))) + { + InsertMenu(hMenu, uPosition, uFlags, uIDNewItem, szString); + } +} -static const MENUITEMS smenuitem[] = { - {IDM_TOOLWIN, IDS_TOOLWIN}, - {IDM_KEYDISP, IDS_KEYDISP}, - {0, 0}, - {IDM_SCREENCENTER, IDS_SCREENCENTER}, - {IDM_SNAPENABLE, IDS_SNAPENABLE}, - {IDM_BACKGROUND, IDS_BACKGROUND}, - {IDM_BGSOUND, IDS_BGSOUND}, - {0, 0}, - {IDM_SCRNMUL4, IDS_SCRNMUL4}, - {IDM_SCRNMUL6, IDS_SCRNMUL6}, - {IDM_SCRNMUL8, IDS_SCRNMUL8}, - {IDM_SCRNMUL10, IDS_SCRNMUL10}, - {IDM_SCRNMUL12, IDS_SCRNMUL12}, - {IDM_SCRNMUL16, IDS_SCRNMUL16}, - {0, 0}}; - -static const MENUITEMS smenuitem2[] = { - {IDM_MEMORYDUMP, IDS_MEMORYDUMP}, - {IDM_DEBUGUTY, IDS_DEBUGUTY}}; +void menu_addmenubar(HMENU popup, HMENU menubar) +{ + (void)addmenu(popup, 0, menubar, FALSE); +} -void sysmenu_initialize(void) { +// ---- +void sysmenu_initialize(void) +{ HMENU hMenu; + UINT uPos; hMenu = GetSystemMenu(hWndMain, FALSE); - insertresmenus(hMenu, 0, smenuitem, sizeof(smenuitem)/sizeof(MENUITEMS)); - if (np2oscfg.I286SAVE) { - insertresmenus(hMenu, 7, smenuitem2, - sizeof(smenuitem2)/sizeof(MENUITEMS)); + uPos = 0; + +#if defined(SUPPORT_KEYDISP) + uPos += addmenures(hMenu, uPos, IDR_SYSKEYDISP, FALSE); +#endif +#if defined(SUPPORT_SOFTKBD) + uPos += addmenures(hMenu, uPos, IDR_SYSSOFTKBD, FALSE); +#endif + + uPos += addmenures(hMenu, uPos, IDR_SYS, FALSE); + if (np2oscfg.I286SAVE) + { +#if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32) + uPos += addmenures(hMenu, uPos, IDR_SYSDEBUG32, FALSE); +#endif + uPos += addmenures(hMenu, uPos, IDR_SYSDEBUG, FALSE); } } -void sysmenu_settoolwin(BYTE value) { +void sysmenu_settoolwin(UINT8 value) { value &= 1; np2oscfg.toolwin = value; @@ -121,7 +206,7 @@ void sysmenu_settoolwin(BYTE value) { IDM_TOOLWIN, MFCHECK(value)); } -void sysmenu_setkeydisp(BYTE value) { +void sysmenu_setkeydisp(UINT8 value) { value &= 1; np2oscfg.keydisp = value; @@ -129,7 +214,7 @@ void sysmenu_setkeydisp(BYTE value) { IDM_KEYDISP, MFCHECK(value)); } -void sysmenu_setwinsnap(BYTE value) { +void sysmenu_setwinsnap(UINT8 value) { value &= 1; np2oscfg.WINSNAP = value; @@ -137,7 +222,7 @@ void sysmenu_setwinsnap(BYTE value) { IDM_SNAPENABLE, MFCHECK(value)); } -void sysmenu_setbackground(BYTE value) { +void sysmenu_setbackground(UINT8 value) { HMENU hmenu; @@ -154,7 +239,7 @@ void sysmenu_setbackground(BYTE value) { } } -void sysmenu_setbgsound(BYTE value) { +void sysmenu_setbgsound(UINT8 value) { np2oscfg.background &= 1; np2oscfg.background |= (value & 2); @@ -162,7 +247,7 @@ void sysmenu_setbgsound(BYTE value) { IDM_BGSOUND, MFCHECK((value & 2) ^ 2)); } -void sysmenu_setscrnmul(BYTE value) { +void sysmenu_setscrnmul(UINT8 value) { HMENU hmenu; @@ -179,109 +264,60 @@ void sysmenu_setscrnmul(BYTE value) { // ---- -typedef struct { - UINT16 title; - MENUITEMS item[3]; -} DISKMENU; - -static const DISKMENU fddmenu[4] = { - {IDS_FDD1, {{IDM_FDD1OPEN, IDS_OPEN}, - {0, 0}, - {IDM_FDD1EJECT, IDS_EJECT}}}, - {IDS_FDD2, {{IDM_FDD2OPEN, IDS_OPEN}, - {0, 0}, - {IDM_FDD2EJECT, IDS_EJECT}}}, - {IDS_FDD3, {{IDM_FDD3OPEN, IDS_OPEN}, - {0, 0}, - {IDM_FDD3EJECT, IDS_EJECT}}}, - {IDS_FDD4, {{IDM_FDD4OPEN, IDS_OPEN}, - {0, 0}, - {IDM_FDD4EJECT, IDS_EJECT}}}}; - -static void insdiskmenu(HMENU hMenu, UINT pos, const DISKMENU *m) { - - HMENU hSubMenu; - - hSubMenu = CreatePopupMenu(); - insertresmenus(hSubMenu, 0, m->item, 3); - insertresmenu(hMenu, pos, MF_BYPOSITION | MF_POPUP, - (UINT)hSubMenu, m->title); -} +void xmenu_initialize(void) +{ + HMENU hMenu; + UINT uPos; + HMENU hmenuSub; + UINT i; + UINT uSubPos; -#if defined(SUPPORT_SCSI) -static const DISKMENU scsimenu[4] = { - {IDS_SCSI0, {{IDM_SCSI0OPEN, IDS_OPEN}, - {0, 0}, - {IDM_SCSI0EJECT, IDS_REMOVE}}}, - {IDS_SCSI1, {{IDM_SCSI1OPEN, IDS_OPEN}, - {0, 0}, - {IDM_SCSI1EJECT, IDS_REMOVE}}}, - {IDS_SCSI2, {{IDM_SCSI2OPEN, IDS_OPEN}, - {0, 0}, - {IDM_SCSI2EJECT, IDS_REMOVE}}}, - {IDS_SCSI3, {{IDM_SCSI3OPEN, IDS_OPEN}, - {0, 0}, - {IDM_SCSI3EJECT, IDS_REMOVE}}}}; -#endif + hMenu = np2class_gethmenu(hWndMain); + uPos = 1; #if defined(SUPPORT_STATSAVE) -static const char xmenu_stat[] = "S&tat"; -static const char xmenu_statsave[] = "Save %u"; -static const char xmenu_statload[] = "Load %u"; - -static void addstatsavemenu(HMENU hMenu, UINT pos) { - - HMENU hSubMenu; - UINT i; - char buf[16]; - - hSubMenu = CreatePopupMenu(); - for (i=0; i