comparison foosdk/sdk/libPPUI/InPlaceEditTable.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
comparison
equal deleted inserted replaced
0:e9bb126753e7 1:20d02a178406
1 #pragma once
2
3 #include <memory>
4 #include "InPlaceEdit.h"
5
6 namespace InPlaceEdit {
7 class NOVTABLE CTableEditHelperV2 {
8 public:
9 virtual RECT TableEdit_GetItemRect(t_size item, t_size subItem) const = 0;
10 virtual void TableEdit_GetField(t_size item, t_size subItem, pfc::string_base & out, t_size & lineCount) = 0;
11 virtual void TableEdit_SetField(t_size item, t_size subItem, const char * value) = 0;
12 virtual HWND TableEdit_GetParentWnd() const = 0;
13 virtual bool TableEdit_Advance(t_size & item, t_size & subItem, t_uint32 whathappened);
14 virtual bool TableEdit_CanAdvanceHere(size_t item, size_t subItem, uint32_t whatHappened) const { (void)item; (void)subItem; (void)whatHappened; return true; }
15 virtual void TableEdit_Finished() {}
16 virtual t_size TableEdit_GetItemCount() const = 0;
17 virtual t_size TableEdit_GetColumnCount() const = 0;
18 virtual void TableEdit_SetItemFocus(t_size item, t_size subItem) = 0;
19 virtual bool TableEdit_IsColumnEditable(t_size subItem) const { (void)subItem; return true; }
20 virtual void TableEdit_GetColumnOrder(t_size * out, t_size count) const { order_helper::g_fill(out, count); }
21 virtual t_uint32 TableEdit_GetEditFlags(t_size item, t_size subItem) const { (void)item; (void)subItem; return 0; }
22 virtual bool TableEdit_GetDarkMode() const { return false; }
23 virtual bool TableEdit_GetAutoComplete(t_size item, t_size subItem, pfc::com_ptr_t<IUnknown>& out) { (void)item; (void)subItem; (void)out; return false; }
24
25 struct autoComplete_t {
26 pfc::com_ptr_t<IUnknown> data;
27 enum { // ACO_* equivalents
28 optsNone = 0,
29 optsDefault = 1,
30 optsAutoSuggest = 1,
31 optsAutoAppend = 3,
32 };
33 DWORD options = optsNone;
34 };
35 virtual autoComplete_t TableEdit_GetAutoCompleteEx( size_t item, size_t sub );
36
37 struct combo_t {
38 unsigned iDefault = 0;
39 pfc::string_list_impl strings;
40 };
41
42 virtual combo_t TableEdit_GetCombo(size_t item, size_t sub);
43
44 HWND TableEdit_Start(t_size item, t_size subItem);
45 void TableEdit_Abort(bool forwardContent);
46 bool TableEdit_IsActive() const { return !!m_taskKill; }
47 protected:
48 ~CTableEditHelperV2() { tableEdit_cancel_task(); }
49 CTableEditHelperV2() {}
50 private:
51 void tableEdit_on_task_completion(unsigned p_status);
52 reply_t tableEdit_create_task();
53 bool tableEdit_cancel_task();
54
55 t_size ColumnToPosition(t_size col) const;
56 t_size PositionToColumn(t_size pos) const;
57 t_size EditableColumnCount() const;
58 void GrabColumnOrder(pfc::array_t<t_size> & buffer) const { buffer.set_size(TableEdit_GetColumnCount()); TableEdit_GetColumnOrder(buffer.get_ptr(), buffer.get_size()); }
59 HWND _ReStart();
60
61 t_size m_editItem = SIZE_MAX, m_editSubItem = SIZE_MAX;
62 t_uint32 m_editFlags = 0;
63 pfc::rcptr_t<pfc::string8> m_editData;
64 std::shared_ptr< combo_t > m_editDataCombo;
65
66 std::shared_ptr<bool> m_taskKill;
67
68 CTableEditHelperV2( const CTableEditHelperV2 & ) = delete;
69 void operator=( const CTableEditHelperV2 & ) = delete;
70 };
71
72
73
74
75 class NOVTABLE CTableEditHelperV2_ListView : public CTableEditHelperV2 {
76 public:
77 RECT TableEdit_GetItemRect(t_size item, t_size subItem) const override;
78 void TableEdit_GetField(t_size item, t_size subItem, pfc::string_base & out, t_size & lineCount) override;
79 void TableEdit_SetField(t_size item, t_size subItem, const char * value) override;
80
81 t_size TableEdit_GetColumnCount() const override;
82
83 t_size TableEdit_GetItemCount() const override;
84 void TableEdit_SetItemFocus(t_size item, t_size subItem) override;
85
86 void TableEdit_GetColumnOrder(t_size * out, t_size count) const override;
87 };
88 }