annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "image.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 class menu_flags {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 disabled = 1 << 0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 checked = 1 << 1,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 radiochecked = 1 << 2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 defaulthidden = 1 << 3,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 disclosure = 1 << 4, // mobile platform specific, indicates whether to show a disclosure mark next to a command
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 //! Type referring to a combination of menu_flags::* values
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 typedef uint32_t menu_flags_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 typedef fb2k::image menu_glyph;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 //! \since 2.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 //! Menu manager's tree item object; see mainmenu_manager and contextmenu_manager.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 class menu_tree_item : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 FB2K_MAKE_SERVICE_INTERFACE(menu_tree_item, service_base);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 enum type_t {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 itemSeparator = 0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 itemCommand,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 itemSubmenu
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 virtual type_t type() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 virtual size_t childCount() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 virtual menu_tree_item::ptr childAt(size_t at) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 virtual uint32_t commandID() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 virtual const char* name() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 virtual menu_flags_t flags() = 0; // menu_flags::*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 virtual void execute(service_ptr ctx) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 virtual bool get_description(pfc::string_base& strOut) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 //! 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.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 virtual bool refreshState() { return false; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 //! Command GUID for registering yourself for menu refresh notifications. May be null GUID if this item has no valid command GUID.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 virtual GUID commandGuid() { return pfc::guid_null; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 //! Sub-command GUID for dynamically created items. Typically null GUID as simple items do not have sub command GUIDs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 virtual GUID subCommandGuid() { return pfc::guid_null; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 virtual bool get_icon(fb2k::imageLocation_t& outLoc) { (void)outLoc; return false; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 bool isSeparator() { return type() == itemSeparator; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 bool isCommand() { return type() == itemCommand; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 bool isSubmenu() { return type() == itemSubmenu; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 bool isDisclosure() { return (flags() & menu_flags::disclosure) != 0; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 typedef menu_tree_item mainmenu_tree_item;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 #define FB2K_MENU_CAPS_TITLE 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 #define FB2K_MENU_CAPS_SENTENCE 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 #ifdef _WIN32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 #define FB2K_MENU_CAPS FB2K_MENU_CAPS_SENTENCE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 #define FB2K_MENU_CAPS FB2K_MENU_CAPS_TITLE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 #endif