annotate foosdk/sdk/foobar2000/helpers/dropdown_helper.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 #include "../SDK/cfg_var.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 class _cfg_dropdown_history_base
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 const unsigned m_max;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 void build_list(pfc::ptr_list_t<char> & out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 void parse_list(const pfc::ptr_list_t<char> & src);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 enum {separator = '\n'};
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 _cfg_dropdown_history_base(const GUID & varid, unsigned p_max = 10, const char * initial = "") : m_max(p_max), m_state(varid, initial) {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 #ifdef FOOBAR2000_DESKTOP_WINDOWS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 void on_init(HWND ctrl, const char * initVal) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 add_item(initVal); setup_dropdown(ctrl); uSetWindowText(ctrl, initVal);
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 void setup_dropdown(HWND wnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 void setup_dropdown_set_value(HWND wnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 void setup_dropdown(HWND wnd,UINT id) {setup_dropdown(GetDlgItem(wnd,id));}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 bool on_context(HWND wnd,LPARAM coords); //returns true when the content has changed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 bool add_item(const char * item, HWND combobox); //immediately adds the item to the combobox
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 bool add_item(const char * item); //returns true when the content has changed, false when not (the item was already on the list)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 bool is_empty();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 void set_state(const char* val) { m_state = val; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 void get_state(pfc::string_base& out) { out = m_state.get(); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 cfg_string m_state;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 typedef _cfg_dropdown_history_base cfg_dropdown_history;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 typedef _cfg_dropdown_history_base cfg_dropdown_history_mt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 #ifdef FOOBAR2000_DESKTOP_WINDOWS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 // ATL-compatible message map entry macro for installing dropdown list context menus.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 #define DROPDOWN_HISTORY_HANDLER(ctrlID,var) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 if(uMsg == WM_CONTEXTMENU) { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 const HWND source = (HWND) wParam; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 if (source != NULL && source == CWindow(hWnd).GetDlgItem(ctrlID)) { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 var.on_context(source,lParam); \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 lResult = 0; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 return TRUE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 } \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 }
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 #endif // FOOBAR2000_DESKTOP_WINDOWS