diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/foosdk/sdk/libPPUI/InPlaceEditTable.h	Mon Jan 05 02:15:46 2026 -0500
@@ -0,0 +1,88 @@
+#pragma once
+
+#include <memory>
+#include "InPlaceEdit.h"
+
+namespace InPlaceEdit {
+	class NOVTABLE CTableEditHelperV2 {
+	public:
+		virtual RECT TableEdit_GetItemRect(t_size item, t_size subItem) const = 0;
+		virtual void TableEdit_GetField(t_size item, t_size subItem, pfc::string_base & out, t_size & lineCount) = 0;
+		virtual void TableEdit_SetField(t_size item, t_size subItem, const char * value) = 0;
+		virtual HWND TableEdit_GetParentWnd() const = 0;
+		virtual bool TableEdit_Advance(t_size & item, t_size & subItem, t_uint32 whathappened);
+		virtual bool TableEdit_CanAdvanceHere(size_t item, size_t subItem, uint32_t whatHappened) const { (void)item; (void)subItem; (void)whatHappened; return true; }
+		virtual void TableEdit_Finished() {}
+		virtual t_size TableEdit_GetItemCount() const = 0;
+		virtual t_size TableEdit_GetColumnCount() const = 0;
+		virtual void TableEdit_SetItemFocus(t_size item, t_size subItem) = 0;
+		virtual bool TableEdit_IsColumnEditable(t_size subItem) const { (void)subItem; return true; }
+		virtual void TableEdit_GetColumnOrder(t_size * out, t_size count) const { order_helper::g_fill(out, count); }
+		virtual t_uint32 TableEdit_GetEditFlags(t_size item, t_size subItem) const { (void)item; (void)subItem; return 0; }
+		virtual bool TableEdit_GetDarkMode() const { return false; }
+		virtual bool TableEdit_GetAutoComplete(t_size item, t_size subItem, pfc::com_ptr_t<IUnknown>& out) { (void)item; (void)subItem; (void)out; return false; }
+
+		struct autoComplete_t {
+			pfc::com_ptr_t<IUnknown> data;
+			enum { // ACO_* equivalents
+				optsNone = 0,
+				optsDefault = 1,
+				optsAutoSuggest = 1,
+				optsAutoAppend = 3,
+			};
+			DWORD options = optsNone;
+		};
+		virtual autoComplete_t TableEdit_GetAutoCompleteEx( size_t item, size_t sub );
+
+		struct combo_t {
+			unsigned iDefault = 0;
+			pfc::string_list_impl strings;
+		};
+
+		virtual combo_t TableEdit_GetCombo(size_t item, size_t sub);
+
+		HWND TableEdit_Start(t_size item, t_size subItem);
+		void TableEdit_Abort(bool forwardContent);
+		bool TableEdit_IsActive() const { return !!m_taskKill; }
+	protected:
+		~CTableEditHelperV2() { tableEdit_cancel_task(); }
+		CTableEditHelperV2() {}
+	private:
+		void tableEdit_on_task_completion(unsigned p_status);
+		reply_t tableEdit_create_task();
+		bool tableEdit_cancel_task();
+
+		t_size ColumnToPosition(t_size col) const;
+		t_size PositionToColumn(t_size pos) const;
+		t_size EditableColumnCount() const;
+		void GrabColumnOrder(pfc::array_t<t_size> & buffer) const { buffer.set_size(TableEdit_GetColumnCount()); TableEdit_GetColumnOrder(buffer.get_ptr(), buffer.get_size()); }
+		HWND _ReStart();
+
+		t_size m_editItem = SIZE_MAX, m_editSubItem = SIZE_MAX;
+		t_uint32 m_editFlags = 0;
+		pfc::rcptr_t<pfc::string8> m_editData;
+		std::shared_ptr< combo_t > m_editDataCombo;
+
+		std::shared_ptr<bool> m_taskKill;
+
+		CTableEditHelperV2( const CTableEditHelperV2 & ) = delete;
+		void operator=( const CTableEditHelperV2 & ) = delete;
+	};
+
+
+
+
+	class NOVTABLE CTableEditHelperV2_ListView : public CTableEditHelperV2 {
+	public:
+		RECT TableEdit_GetItemRect(t_size item, t_size subItem) const override;
+		void TableEdit_GetField(t_size item, t_size subItem, pfc::string_base & out, t_size & lineCount) override;
+		void TableEdit_SetField(t_size item, t_size subItem, const char * value) override;
+
+		t_size TableEdit_GetColumnCount() const override;
+
+		t_size TableEdit_GetItemCount() const override;
+		void TableEdit_SetItemFocus(t_size item, t_size subItem) override;
+
+		void TableEdit_GetColumnOrder(t_size * out, t_size count) const override;
+	};
+}