annotate foosdk/sdk/foobar2000/foo_sample/listcontrol-ownerdata.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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 // Owner-data CListControl use demo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 // CListControlOwnerData with callbacks
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 #include "stdafx.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 #include "resource.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 #include <helpers/atl-misc.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 #include <libPPUI/CListControlOwnerData.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 #include <string>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 #include <algorithm>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 #include <vector>
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 #include <helpers/DarkMode.h>
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 namespace {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 struct listData_t {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 std::string m_key, m_value;
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 static std::vector<listData_t> makeListData() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 std::vector<listData_t> data;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 data.resize( 10 );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 for( size_t walk = 0; walk < data.size(); ++ walk ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 auto & rec = data[walk];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 rec.m_key = (PFC_string_formatter() << "Item #" << (walk+1) ).c_str();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 rec.m_value = "edit me";
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 data;
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 class CListControlOwnerDataDemoDialog : public CDialogImpl<CListControlOwnerDataDemoDialog>, private IListControlOwnerDataSource {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 public:
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 // CListControlOwnerData constructor requires ptr to IListControlOwnerDataSource object
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 CListControlOwnerDataDemoDialog() : m_list(this) {}
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 enum { IDD = IDD_LISTCONTROL_DEMO };
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 BEGIN_MSG_MAP_EX(CListControlOwnerDataDemoDialog)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 MSG_WM_INITDIALOG(OnInitDialog)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 COMMAND_HANDLER_EX(IDCANCEL, BN_CLICKED, OnCancel)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 MSG_WM_CONTEXTMENU(OnContextMenu)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 END_MSG_MAP()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 void OnCancel(UINT, int, CWindow) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 DestroyWindow();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 }
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 OnInitDialog(CWindow, LPARAM) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 // Create replacing existing windows list control
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 // automatically initialize position, font, etc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 m_list.CreateInDialog( *this, IDC_LIST1 );
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 // Do this AFTER creating CListControl, so dark mode hook talks to new CListControl rather than shortlived IDC_LIST1 placeholder
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 m_dark.AddDialogWithControls(*this);
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 // never hardcode values in pixels, always use screen DPI
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 auto DPI = m_list.GetDPI();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 m_list.AddColumn( "Name", MulDiv(100, DPI.cx, 96 ) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 m_list.AddColumn( "Value", MulDiv(150, DPI.cx, 96 ) );
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 ShowWindow(SW_SHOW);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 return TRUE; // system should set focus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 // Context menu handler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 void OnContextMenu(CWindow wnd, CPoint point) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 // did we get a (-1,-1) point due to context menu key rather than right click?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 // GetContextMenuPoint fixes that, returning a proper point at which the menu should be shown
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 point = m_list.GetContextMenuPoint(point);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 CMenu menu;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 // WIN32_OP_D() : debug build only return value check
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 // Used to check for obscure errors in debug builds, does nothing (ignores errors) in release build
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 WIN32_OP_D(menu.CreatePopupMenu());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 enum { ID_TEST1 = 1, ID_TEST2, ID_SELECTALL, ID_SELECTNONE, ID_INVERTSEL };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 menu.AppendMenu(MF_STRING, ID_TEST1, L"Test 1");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 menu.AppendMenu(MF_STRING, ID_TEST2, L"Test 2");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 menu.AppendMenu(MF_SEPARATOR);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 // Note: Ctrl+A handled automatically by CListControl, no need for us to catch it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 menu.AppendMenu(MF_STRING, ID_SELECTALL, L"Select all\tCtrl+A");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 menu.AppendMenu(MF_STRING, ID_SELECTNONE, L"Select none");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 menu.AppendMenu(MF_STRING, ID_INVERTSEL, L"Invert selection");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 int cmd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 // Callback object to show menu command descriptions in the status bar.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 // it's actually a hidden window, needs a parent HWND, where we feed our control's HWND
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 CMenuDescriptionMap descriptions(m_hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 // Set descriptions of all our items
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 descriptions.Set(ID_TEST1, "This is a test item #1");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 descriptions.Set(ID_TEST2, "This is a test item #2");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 descriptions.Set(ID_SELECTALL, "Selects all items");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 descriptions.Set(ID_SELECTNONE, "Deselects all items");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 descriptions.Set(ID_INVERTSEL, "Invert selection");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 cmd = menu.TrackPopupMenuEx(TPM_RIGHTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD, point.x, point.y, descriptions, nullptr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 switch(cmd) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 case ID_TEST1:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 pfc::string_formatter msg;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 msg << "Test command #1 triggered.\r\n";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 msg << m_list.GetSelectedCount() << " items selected.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 // popup_message : non-blocking MessageBox equivalent
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 popup_message::g_show(msg, "Information");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 case ID_TEST2:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 pfc::string_formatter msg;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 msg << "Test command #1 triggered.\r\n";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 msg << "Selected items:\r\n";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 for( size_t walk = 0; walk < m_list.GetItemCount(); ++ walk) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 if ( m_list.IsItemSelected( walk ) ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 msg << m_data[walk].m_key.c_str() << "\r\n";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 msg << "End selected items.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 // popup_message : non-blocking MessageBox equivalent
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 popup_message::g_show(msg, "Information");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 case ID_SELECTALL:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 m_list.SelectAll(); // trivial
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 case ID_SELECTNONE:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 m_list.SelectNone(); // trivial
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 case ID_INVERTSEL:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 auto mask = m_list.GetSelectionMask();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 m_list.SetSelection(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 // Items which we alter - all of them
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 pfc::bit_array_true(),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 // Selection values - NOT'd original selection mask
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 pfc::bit_array_not(mask)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 // Exclusion of footer item from selection handled via CanSelectItem()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 // IListControlOwnerDataSource methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 size_t listGetItemCount( ctx_t ctx ) override {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 PFC_ASSERT( ctx == &m_list ); // ctx is a pointer to the object calling us
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 return m_data.size();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 pfc::string8 listGetSubItemText( ctx_t, size_t item, size_t subItem ) override {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 auto & rec = m_data[item];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 switch(subItem) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 case 0:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 return rec.m_key.c_str();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 case 1:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 return rec.m_value.c_str();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 return "";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 bool listCanReorderItems( ctx_t ) override {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 bool listReorderItems( ctx_t, const size_t* order, size_t count) override {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 PFC_ASSERT( count == m_data.size() );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 pfc::reorder_t( m_data, order, count );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 bool listRemoveItems( ctx_t, pfc::bit_array const & mask) override {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 pfc::remove_mask_t( m_data, mask );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 void listItemAction(ctx_t, size_t item) override {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 m_list.TableEdit_Start( item, 1 );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 void listSubItemClicked( ctx_t, size_t item, size_t subItem) override {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 if ( subItem == 1 ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 m_list.TableEdit_Start( item, subItem );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 void listSetEditField(ctx_t ctx, size_t item, size_t subItem, const char * val) override {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 if ( subItem == 1 ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 m_data[item].m_value = val;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 bool listIsColumnEditable( ctx_t, size_t subItem ) override {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 return subItem == 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 std::vector< listData_t > m_data = makeListData();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 CListControlOwnerData m_list;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 fb2k::CDarkModeHooks m_dark;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 // Called from mainmenu.cpp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 void RunListControlOwnerDataDemo() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 // automatically creates the dialog with object lifetime management and modeless dialog registration
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 fb2k::newDialog<CListControlOwnerDataDemoDialog>();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 }