diff foosdk/sdk/foobar2000/SDK/menu_common.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/foosdk/sdk/foobar2000/SDK/menu_common.h	Mon Jan 05 02:15:46 2026 -0500
@@ -0,0 +1,66 @@
+#pragma once
+#include "image.h"
+
+class menu_flags {
+public:
+    enum {
+        disabled = 1 << 0,
+        checked = 1 << 1,
+        radiochecked = 1 << 2,
+        defaulthidden = 1 << 3,
+        disclosure = 1 << 4, // mobile platform specific, indicates whether to show a disclosure mark next to a command
+    };
+};
+
+//! Type referring to a combination of menu_flags::* values
+typedef uint32_t menu_flags_t;
+
+typedef fb2k::image menu_glyph;
+
+//! \since 2.0
+//! Menu manager's tree item object; see mainmenu_manager and contextmenu_manager.
+class menu_tree_item : public service_base {
+    FB2K_MAKE_SERVICE_INTERFACE(menu_tree_item, service_base);
+public:
+    enum type_t {
+        itemSeparator = 0,
+        itemCommand,
+        itemSubmenu
+    };
+
+
+    virtual type_t type() = 0;
+    virtual size_t childCount() = 0;
+    virtual menu_tree_item::ptr childAt(size_t at) = 0;
+    virtual uint32_t commandID() = 0;
+    virtual const char* name() = 0;
+    virtual menu_flags_t flags() = 0; // menu_flags::*
+    virtual void execute(service_ptr ctx) = 0;
+    virtual bool get_description(pfc::string_base& strOut) = 0;
+    //! Refreshes the item's state. Returns true if either of the following properties has changed: flags, name, glyph, description. Currently does not allow the item's children to change.
+    virtual bool refreshState() { return false; }
+
+    //! Command GUID for registering yourself for menu refresh notifications. May be null GUID if this item has no valid command GUID.
+    virtual GUID commandGuid() { return pfc::guid_null; }
+    //! Sub-command GUID for dynamically created items. Typically null GUID as simple items do not have sub command GUIDs.
+    virtual GUID subCommandGuid() { return pfc::guid_null; }
+
+    virtual bool get_icon(fb2k::imageLocation_t& outLoc) { (void)outLoc; return false; }
+
+    bool isSeparator() { return type() == itemSeparator; }
+    bool isCommand() { return type() == itemCommand; }
+    bool isSubmenu() { return type() == itemSubmenu; }
+    bool isDisclosure() { return (flags() & menu_flags::disclosure) != 0; }
+};
+
+
+typedef menu_tree_item mainmenu_tree_item;
+
+#define FB2K_MENU_CAPS_TITLE 1
+#define FB2K_MENU_CAPS_SENTENCE 2
+
+#ifdef _WIN32
+#define FB2K_MENU_CAPS FB2K_MENU_CAPS_SENTENCE
+#else
+#define FB2K_MENU_CAPS FB2K_MENU_CAPS_TITLE
+#endif