Added utility functions for creating string/value data table columns.

This commit is contained in:
Patrick 2025-09-21 23:32:35 +02:00
parent 41258cda5b
commit b38fa1b68b

View File

@ -114,7 +114,7 @@ inline void DataTable(const char* strId, const DataTableOptions<TObject>& option
sortSpecs->SpecsDirty = false;
const ImGuiTableColumnSortSpecs& specs = *sortSpecs->Specs;
state.dirty |= (specs.ColumnIndex != state.sortColumn);
state.dirty |= (specs.ColumnIndex != static_cast<ImS16>(state.sortColumn));
state.sortColumn = specs.ColumnIndex;
state.sortDescending = specs.SortDirection == ImGuiSortDirection_Descending;
}
@ -154,6 +154,36 @@ inline void DataTable(const char* strId, const DataTableOptions<TObject>& option
ImGui::EndTable();
}
template<typename TObject>
inline DataTableColumn<TObject> 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<typename TObject>
inline DataTableColumn<TObject> 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<typename TObject, typename TMember>
inline DataTableColumn<TObject> 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)