annotate foosdk/sdk/foobar2000/SDK/advconfig.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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 //! Entrypoint class for adding items to Advanced Preferences page. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 //! Implementations must derive from one of subclasses: advconfig_branch, advconfig_entry_checkbox, advconfig_entry_string. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 //! Implementations are typically registered using static service_factory_single_t<myclass>, or using provided helper classes in case of standard implementations declared in this header.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 class NOVTABLE advconfig_entry : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 virtual void get_name(pfc::string_base & p_out) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 virtual GUID get_guid() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 virtual GUID get_parent() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 virtual void reset() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 virtual double get_sort_priority() = 0;
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 bool is_branch();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 t_uint32 get_preferences_flags_();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 static bool g_find(service_ptr_t<advconfig_entry>& out, const GUID & id);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 template<typename outptr> static bool g_find_t(outptr & out, const GUID & id) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 service_ptr_t<advconfig_entry> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 if (!g_find(temp, id)) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 return temp->service_query_t(out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 static const GUID guid_root;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 static const GUID guid_branch_tagging,guid_branch_decoding,guid_branch_tools,guid_branch_playback,guid_branch_display,guid_branch_debug, guid_branch_tagging_general, guid_branch_converter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 // \since 2.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 static const GUID guid_branch_vis, guid_branch_general;
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 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(advconfig_entry);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 //! Declares a new branch in Advanced Preferences. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 //! Implementation: see advconfig_branch_impl / advconfig_branch_factory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 class NOVTABLE advconfig_branch : public advconfig_entry {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 FB2K_MAKE_SERVICE_INTERFACE(advconfig_branch,advconfig_entry);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 //! Declares a checkbox/radiocheckbox entry in Advanced Preferences. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 //! The difference between checkboxes and radiocheckboxes is different icon (obviously) and that checking a radiocheckbox unchecks all other radiocheckboxes in the same branch. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 //! Implementation: see advconfig_entry_checkbox_impl / advconfig_checkbox_factory_t.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 class NOVTABLE advconfig_entry_checkbox : public advconfig_entry {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 virtual bool get_state() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 virtual void set_state(bool p_state) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 virtual bool is_radio() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 bool get_default_state_();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 FB2K_MAKE_SERVICE_INTERFACE(advconfig_entry_checkbox,advconfig_entry);
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 //! Extension to advconfig_entry_checkbox, adds default state and preferences flags.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 class NOVTABLE advconfig_entry_checkbox_v2 : public advconfig_entry_checkbox {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 FB2K_MAKE_SERVICE_INTERFACE(advconfig_entry_checkbox_v2, advconfig_entry_checkbox)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 virtual bool get_default_state() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 virtual t_uint32 get_preferences_flags() {return 0;} //signals whether changing this setting should trigger playback restart or app restart; see: preferences_state::* constants
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 //! Declares a string/integer editbox entry in Advanced Preferences.\n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 //! Implementation: see advconfig_entry_string_impl / advconfig_string_factory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 class NOVTABLE advconfig_entry_string : public advconfig_entry {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 virtual void get_state(pfc::string_base & p_out) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 virtual void set_state(const char * p_string,t_size p_length = SIZE_MAX) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 virtual t_uint32 get_flags() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 void get_default_state_(pfc::string_base & out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 static constexpr uint32_t
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 flag_is_integer = 1 << 0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 flag_is_signed = 1 << 1,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 // Since 2.2: hint to treat these fields as file/folder paths, providing hints if suitable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 flag_is_file_path = 1 << 2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 flag_is_folder_path = 1 << 3,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 // Since 2.2: multiple values, semicolon delimited
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 flag_semicolon_delimited = 1 << 4;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 FB2K_MAKE_SERVICE_INTERFACE(advconfig_entry_string,advconfig_entry);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 //! Extension to advconfig_entry_string, adds default state, validation and preferences flags.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 class NOVTABLE advconfig_entry_string_v2 : public advconfig_entry_string {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 FB2K_MAKE_SERVICE_INTERFACE(advconfig_entry_string_v2, advconfig_entry_string)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 virtual void get_default_state(pfc::string_base & out) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 virtual void validate(pfc::string_base& val) { (void)val; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 virtual t_uint32 get_preferences_flags() {return 0;} //signals whether changing this setting should trigger playback restart or app restart; see: preferences_state::* constants
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 };