From b38fa1b68bf6ee45449d33da42812a569908026f Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Sun, 21 Sep 2025 23:32:35 +0200 Subject: [PATCH] Added utility functions for creating string/value data table columns. --- public/raid/imraid.hpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/public/raid/imraid.hpp b/public/raid/imraid.hpp index 98981f1..0d89e4b 100644 --- a/public/raid/imraid.hpp +++ b/public/raid/imraid.hpp @@ -114,7 +114,7 @@ inline void DataTable(const char* strId, const DataTableOptions& option sortSpecs->SpecsDirty = false; const ImGuiTableColumnSortSpecs& specs = *sortSpecs->Specs; - state.dirty |= (specs.ColumnIndex != state.sortColumn); + state.dirty |= (specs.ColumnIndex != static_cast(state.sortColumn)); state.sortColumn = specs.ColumnIndex; state.sortDescending = specs.SortDirection == ImGuiSortDirection_Descending; } @@ -154,6 +154,36 @@ inline void DataTable(const char* strId, const DataTableOptions& option ImGui::EndTable(); } + +template +inline DataTableColumn MakeStringColumn(const char* header, const char* TObject::* member) +{ + return { + .header = header, + .renderer = [member](const auto& args) { ImGui::TextUnformatted(args.object.*member); }, + .comparator = [member](const TObject& left, const TObject& right) { return std::string_view(left.*member) < std::string_view(right.*member); } + }; +} + +template +inline DataTableColumn MakeStringColumn(const char* header, std::string TObject::* member) +{ + return { + .header = header, + .renderer = [member](const auto& args) { ImGui::TextUnformatted((args.object.*member).c_str()); }, + .comparator = [member](const TObject& left, const TObject& right) { return left.*member < right.*member; } + }; +} + +template +inline DataTableColumn MakeColumn(const char* header, const char* fmt, TMember TObject::* member) +{ + return { + .header = header, + .renderer = [fmt, member](const auto& args) { ImGui::Text(fmt, args.object.*member); }, + .comparator = [member](const TObject& left, const TObject& right) { return left.*member < right.*member; } + }; +} } // namespace ImRaid #endif // !defined(RAID_PUBLIC_RAID_IMRAID_HPP_INCLUDED)