Files
Aerofoil/PortabilityLayer/PLMenus.cpp

87 lines
2.1 KiB
C++
Raw Normal View History

2019-12-12 23:37:40 -05:00
#include "PLMenus.h"
2019-12-21 18:40:17 -05:00
#include "PLResources.h"
#include "MenuManager.h"
2019-12-24 02:35:24 -05:00
#include "QDManager.h"
#include "ResourceManager.h"
2019-12-21 18:40:17 -05:00
// Menu resource structure:
// uint16 menu ID
// uint16 width
// uint16 height
// uint16 command ID
// uint16 padding
// uint32 enable flags
// pstr title (Apple menu is 0x14)
// Zero-byte terminated list:
// pstr Item text (separator is char 0x2d)
// int8 Icon #
// uint8 key
// uint8 submenu ID
// uint8 text style
2019-11-11 00:11:59 -05:00
MenuHandle GetMenu(int resID)
{
Handle menuRes = PortabilityLayer::ResourceManager::GetInstance()->GetAppResource('MENU', resID);
2019-11-11 00:11:59 -05:00
2019-12-21 18:40:17 -05:00
if (!menuRes)
return nullptr;
const MenuHandle menu = PortabilityLayer::MenuManager::GetInstance()->DeserializeMenu(*menuRes);
2019-12-29 23:14:37 -05:00
menuRes.Dispose();
2019-12-21 18:40:17 -05:00
return menu;
2019-11-11 00:11:59 -05:00
}
2019-12-21 18:40:17 -05:00
void InsertMenu(MenuHandle menu, int beforeID)
2019-11-11 00:11:59 -05:00
{
2019-12-21 18:40:17 -05:00
PortabilityLayer::MenuManager *mm = PortabilityLayer::MenuManager::GetInstance();
if (beforeID)
{
MenuHandle otherMenu = mm->GetMenuByID(beforeID);
if (otherMenu)
{
mm->InsertMenuBefore(menu, otherMenu);
return;
}
}
mm->InsertMenuAtEnd(menu);
2019-11-11 00:11:59 -05:00
}
void EnableMenuItem(MenuHandle menu, int index)
{
PortabilityLayer::MenuManager *mm = PortabilityLayer::MenuManager::GetInstance();
if (index == 0)
mm->SetMenuEnabled(menu, true);
else
mm->SetItemEnabled(menu, index - 1, true);
2019-11-11 00:11:59 -05:00
}
void DisableMenuItem(MenuHandle menu, int index)
{
PortabilityLayer::MenuManager *mm = PortabilityLayer::MenuManager::GetInstance();
if (index == 0)
mm->SetMenuEnabled(menu, false);
else
mm->SetItemEnabled(menu, index - 1, false);
2019-11-11 00:11:59 -05:00
}
void CheckMenuItem(MenuHandle menu, int index, Boolean checked)
{
PortabilityLayer::MenuManager *mm = PortabilityLayer::MenuManager::GetInstance();
mm->SetItemChecked(menu, index - 1, checked != 0);
2019-11-11 00:11:59 -05:00
}
void AppendMenuItem(MenuHandle menu, int8_t iconResID, uint8_t key, uint8_t submenuID, uint8_t textStyle, bool enabled, bool checked, const PLPasStr &text)
{
PortabilityLayer::MenuManager *mm = PortabilityLayer::MenuManager::GetInstance();
mm->AppendMenuItem(menu, iconResID, key, submenuID, textStyle, enabled, checked, text);
}
2019-11-11 00:11:59 -05:00
void SetMenuItemText(MenuHandle menu, int index, const PLPasStr &text)
{
PL_NotYetImplemented();
2019-11-11 00:11:59 -05:00
}