annotate foosdk/sdk/libPPUI/InPlaceEditTable.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 "InPlaceEditTable.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #include "win32_op.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 #include "win32_utility.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 #include "AutoComplete.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 #include "listview_helper.h"
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 InPlaceEdit {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 bool CTableEditHelperV2::tableEdit_cancel_task() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 bool rv = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 if (m_taskKill) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 *m_taskKill = true; m_taskKill = nullptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 rv = true;
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 return rv;
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 reply_t CTableEditHelperV2::tableEdit_create_task() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 tableEdit_cancel_task();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 auto ks = std::make_shared<bool>(false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 m_taskKill = ks;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 return [ks,this](unsigned code) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 if ( ! * ks ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 this->tableEdit_on_task_completion( code );
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 t_size CTableEditHelperV2::ColumnToPosition(t_size col) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 PFC_ASSERT(TableEdit_IsColumnEditable(col));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 pfc::array_t<t_size> colOrder; GrabColumnOrder(colOrder);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 t_size skipped = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 for (t_size walk = 0; walk < colOrder.get_size(); ++walk) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 const t_size curCol = colOrder[walk];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 if (TableEdit_IsColumnEditable(curCol)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 if (curCol == col) return skipped;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 ++skipped;
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 PFC_ASSERT(!"Should not get here.");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 return SIZE_MAX;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 t_size CTableEditHelperV2::PositionToColumn(t_size pos) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 pfc::array_t<t_size> colOrder; GrabColumnOrder(colOrder);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 t_size skipped = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 for (t_size walk = 0; walk < colOrder.get_size(); ++walk) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 const t_size curCol = colOrder[walk];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 if (TableEdit_IsColumnEditable(curCol)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 if (skipped == pos) return curCol;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 ++skipped;
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 PFC_ASSERT(!"Should not get here.");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 return SIZE_MAX;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 t_size CTableEditHelperV2::EditableColumnCount() const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 const t_size total = TableEdit_GetColumnCount();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 t_size found = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 for (t_size walk = 0; walk < total; ++walk) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 if (TableEdit_IsColumnEditable(walk)) found++;
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 return found;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 }
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 bool CTableEditHelperV2::TableEdit_Advance(t_size & p_item, t_size & p_subItem, t_uint32 whathappened) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 size_t guardItem = SIZE_MAX, guardSubItem = SIZE_MAX; // infinite loop guard
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 size_t item = p_item, subItem = p_subItem;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 for ( ;; ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 unsigned _item((unsigned)item), _subItem((unsigned)ColumnToPosition(subItem));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 if (!InPlaceEdit::TableEditAdvance(_item, _subItem, (unsigned)TableEdit_GetItemCount(), (unsigned)EditableColumnCount(), whathappened)) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 item = _item; subItem = PositionToColumn(_subItem);
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 if ( guardItem == SIZE_MAX ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 guardItem = item; guardSubItem = subItem;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 // infinite loop guard
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 if ( item == guardItem && subItem == guardSubItem ) return false;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 if (TableEdit_CanAdvanceHere(item, subItem, whathappened)) break;
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 p_item = item;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 p_subItem = subItem;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 void CTableEditHelperV2::TableEdit_Abort(bool forwardContent) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 if (tableEdit_cancel_task()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 if (forwardContent && (m_editFlags & KFlagReadOnly) == 0) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 if (m_editData.is_valid()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 pfc::string8 temp(*m_editData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 TableEdit_SetField(m_editItem, m_editSubItem, temp);
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 m_editData.release();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 m_editDataCombo.reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 ::SetFocus(TableEdit_GetParentWnd());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 TableEdit_Finished();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 HWND CTableEditHelperV2::TableEdit_Start(t_size item, t_size subItem) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 PFC_ASSERT(TableEdit_IsColumnEditable(subItem));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 m_editItem = item; m_editSubItem = subItem;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 return _ReStart();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 HWND CTableEditHelperV2::_ReStart() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 PFC_ASSERT(m_editItem < TableEdit_GetItemCount());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 PFC_ASSERT(m_editSubItem < TableEdit_GetColumnCount());
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 TableEdit_SetItemFocus(m_editItem, m_editSubItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 m_editFlags = TableEdit_GetEditFlags(m_editItem, m_editSubItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 if (this->TableEdit_GetDarkMode()) m_editFlags |= KFlagDark;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 m_editData.release();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 m_editDataCombo.reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 if (m_editFlags & InPlaceEdit::KFlagCombo) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 auto combo = TableEdit_GetCombo(m_editItem, m_editSubItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 RECT rc = TableEdit_GetItemRect(m_editItem, m_editSubItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 auto data = std::make_shared< combo_t >(combo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 m_editDataCombo = data;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 auto task = tableEdit_create_task();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 auto comboTask = [data, task](unsigned status, unsigned sel) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 data->iDefault = sel;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 task(status);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 return InPlaceEdit::StartCombo(TableEdit_GetParentWnd(), rc, m_editFlags, combo.strings, combo.iDefault, comboTask );
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 m_editData.new_t();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 t_size lineCount = 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 TableEdit_GetField(m_editItem, m_editSubItem, *m_editData, lineCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 RECT rc = TableEdit_GetItemRect(m_editItem, m_editSubItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 if (lineCount > 1) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 rc.bottom = (LONG)( rc.top + (rc.bottom - rc.top) * lineCount );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 m_editFlags |= KFlagMultiLine;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 auto ac = this->TableEdit_GetAutoCompleteEx(m_editItem, m_editSubItem );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 return InPlaceEdit::StartEx(TableEdit_GetParentWnd(), rc, m_editFlags, m_editData, tableEdit_create_task(), ac.data.get_ptr(), ac.options);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 CTableEditHelperV2::combo_t CTableEditHelperV2::TableEdit_GetCombo(size_t, size_t) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 return combo_t();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 CTableEditHelperV2::autoComplete_t CTableEditHelperV2::TableEdit_GetAutoCompleteEx( size_t item, size_t sub ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 autoComplete_t ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 if ( this->TableEdit_GetAutoComplete( item, sub, ret.data ) ) ret.options = ret.optsDefault;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 return ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 void CTableEditHelperV2::tableEdit_on_task_completion(unsigned status) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 tableEdit_cancel_task();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 if (m_editData.is_valid()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 if (status & InPlaceEdit::KEditFlagContentChanged) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 TableEdit_SetField(m_editItem, m_editSubItem, *m_editData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 m_editData.release();
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 if (m_editDataCombo != nullptr) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 unsigned idx = m_editDataCombo->iDefault;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 if ( idx < m_editDataCombo->strings.get_count()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 const char * text = m_editDataCombo->strings.get_item(idx);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 TableEdit_SetField(m_editItem, m_editSubItem, text);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 m_editDataCombo.reset();
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 if (TableEdit_Advance(m_editItem, m_editSubItem, status)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 _ReStart();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 TableEdit_Finished();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 }
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187
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 CTableEditHelperV2_ListView::TableEdit_GetColumnOrder(t_size * out, t_size count) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 pfc::array_t<int> temp; temp.set_size(count);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 WIN32_OP_D(ListView_GetColumnOrderArray(TableEdit_GetParentWnd(), count, temp.get_ptr()));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 for (t_size walk = 0; walk < count; ++walk) out[walk] = temp[walk];
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 RECT CTableEditHelperV2_ListView::TableEdit_GetItemRect(t_size item, t_size subItem) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 RECT rc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 WIN32_OP_D(ListView_GetSubItemRect(TableEdit_GetParentWnd(), (int)item, (int)subItem, LVIR_LABEL, &rc));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 return rc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 }
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 void CTableEditHelperV2_ListView::TableEdit_GetField(t_size item, t_size subItem, pfc::string_base & out, t_size & lineCount) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 listview_helper::get_item_text(TableEdit_GetParentWnd(), (int)item, (int)subItem, out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 lineCount = pfc::is_multiline(out) ? 5 : 1;
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 void CTableEditHelperV2_ListView::TableEdit_SetField(t_size item, t_size subItem, const char * value) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 WIN32_OP_D(listview_helper::set_item_text(TableEdit_GetParentWnd(), (int)item, (int)subItem, value));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 #if PFC_DEBUG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 pfc::string8 meh;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 listview_helper::get_item_text(TableEdit_GetParentWnd(), (int)item, (int)subItem, meh);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 PFC_ASSERT(meh == value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 t_size CTableEditHelperV2_ListView::TableEdit_GetItemCount() const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 LRESULT temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 WIN32_OP_D((temp = ListView_GetItemCount(TableEdit_GetParentWnd())) >= 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 return (t_size)temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 void CTableEditHelperV2_ListView::TableEdit_SetItemFocus(t_size item, t_size) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 WIN32_OP_D(listview_helper::select_single_item(TableEdit_GetParentWnd(), (int) item));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 t_size CTableEditHelperV2_ListView::TableEdit_GetColumnCount() const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 return (t_size)ListView_GetColumnCount(TableEdit_GetParentWnd());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 }