annotate foosdk/sdk/foobar2000/helpers/AutoComplete.cpp @ 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 #include "stdafx.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "AutoComplete.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include <ShlGuid.h> // CLSID_AutoComplete
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #include "../helpers/COM_utils.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 #include "../helpers/dropdown_helper.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 #include <libPPUI/CEnumString.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 using PP::CEnumString;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 namespace {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 class CACList_History : public CEnumString {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 CACList_History(cfg_dropdown_history_mt * var) : m_var(var) { Reset(); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 typedef ImplementCOMRefCounter<CACList_History> TImpl;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 HRESULT STDMETHODCALLTYPE Reset() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 /*if (core_api::assert_main_thread())*/ {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 ResetStrings();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 pfc::string8 state; m_var->get_state(state);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 for (const char * walk = state;;) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 const char * next = strchr(walk, cfg_dropdown_history_mt::separator);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 t_size len = (next != NULL) ? next - walk : ~0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 AddStringU(walk, len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 if (next == NULL) break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 walk = next + 1;
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 return __super::Reset();
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 HRESULT STDMETHODCALLTYPE Clone(IEnumString **ppenum) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 *ppenum = new TImpl(*this); return S_OK;
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 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 cfg_dropdown_history_mt * const m_var;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 HRESULT InitializeDropdownAC(HWND comboBox, cfg_dropdown_history_mt & var, const char * initVal) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 var.on_init(comboBox, initVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 COMBOBOXINFO ci = {}; ci.cbSize = sizeof(ci);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 if (!GetComboBoxInfo(comboBox, &ci)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 PFC_ASSERT(!"Should not get here - GetComboBoxInfo fail!");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 return E_FAIL;
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 pfc::com_ptr_t<IUnknown> acl = new CACList_History::TImpl(&var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 return InitializeSimpleAC(ci.hwndItem, acl.get_ptr(), ACO_AUTOAPPEND|ACO_AUTOSUGGEST);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 }