diff --git a/packages/webamp-modern-2/src/skin/PopupMenu.ts b/packages/webamp-modern-2/src/skin/PopupMenu.ts index 71f8c639..92966ad5 100644 --- a/packages/webamp-modern-2/src/skin/PopupMenu.ts +++ b/packages/webamp-modern-2/src/skin/PopupMenu.ts @@ -1,15 +1,44 @@ import BaseObject from "./BaseObject"; +import { assume } from "../utils"; + +type MenuItem = + | { + type: "item"; + text: string; + id: number; + checked: boolean; + disabled: boolean; + } + | { type: "separator" }; export default class PopupMenu extends BaseObject { + _items: MenuItem[] = []; addcommand( cmdText: string, cmd_id: number, checked: boolean, disabled: boolean - ) {} - addseparator() {} + ) { + this._items.push({ + type: "item", + text: cmdText, + id: cmd_id, + checked, + disabled, + }); + } + addseparator() { + this._items.push({ type: "separator" }); + } checkcommand(cmd_id: number, check: boolean) { - // TODO + const item = this._items.find((item) => { + return item.type === "item" && item.id === cmd_id; + }); + assume(item != null, `Could not find item with id "${cmd_id}"`); + if (item.type !== "item") { + throw new Error("Expected item to be an item."); + } + item.checked = check; } /* extern PopupMenu.addSubMenu(PopupMenu submenu, String submenutext);