#include "raid_test/frames/data_table.hpp" #include #include #include #include "raid/imraid.hpp" namespace raid_test { namespace { const std::array FIRST_NAMES = { "Emma", "Hannah", "Mia", "Leonie", "Lina", "Marie", "Sophia", "Charlotte", "Paula", "Greta", "Frieda", "Ella", "Freia", "Leon", "Paul", "Maximilian", "Ben", "Lukas", "Finn", "Fiete", "Felix", "Moritz", "Jakob", "Tim", "Emil", "Theo", "James", "Mary", "Michael", "Patricia", "John", "Jennifer", "Robert", "Linda", "David", "Elizabeth", "William", "Barbara", "Richard", "Susan", "Joseph", "Jessica", "Thomas", "Karen", "Christopher", "Sarah" }; const std::array LAST_NAMES = { "Müller", "Schmidt", "Schneider", "Fischer", "Meyer", "Weber", "Hofmann", "Wagner", "Becker", "Schulz", "Schäfer", "Koch", "Bauer", "Richter", "Klein", "Schröder", "Wolf", "Neumann", "Schwarz", "Schmitz", "Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller", "Davis", "Rodríguez", "Martínez", "Hernández", "López", "Gonzalez", "Wilson", "Anderson", "Thomas", "Taylor", "Moore", "Jackson", "Martin" }; constexpr int MIN_AGE = 18; constexpr int MAX_AGE = 120; constexpr double HEIGHT_MEAN = 1.75; constexpr double HEIGHT_STDDEV = 0.1; constexpr std::size_t NUM_PEOPLE = 5000; struct Person { const char* firstName; const char* lastName; int age; double height; }; using rand_int_t = std::mt19937::result_type; std::mt19937 gRandom(std::random_device{}()); std::uniform_int_distribution gFirstNameDistribution(0, static_cast(FIRST_NAMES.size()-1)); std::uniform_int_distribution gLastNameDistribution(0, static_cast(LAST_NAMES.size()-1)); std::uniform_int_distribution gAgeDistribution(static_cast(MIN_AGE), static_cast(MAX_AGE)); std::normal_distribution gHeightDistribution(HEIGHT_MEAN, HEIGHT_STDDEV); [[nodiscard]] Person randomPerson() { return { .firstName = FIRST_NAMES[gFirstNameDistribution(gRandom)], .lastName = LAST_NAMES[gLastNameDistribution(gRandom)], .age = static_cast(gAgeDistribution(gRandom)), .height = gHeightDistribution(gRandom) }; } const std::array PEOPLE = []() { std::array result; std::ranges::generate(result, randomPerson); return result; }(); const std::array DATA_TABLE_COLUMNS = { ImRaid::MakeStringColumn("First Name", &Person::firstName), ImRaid::MakeStringColumn("Last Name", &Person::lastName), ImRaid::MakeColumn("Age", "%d years", &Person::age), ImRaid::MakeColumn("Height", "%.2f m", &Person::height) }; const ImRaid::DataTableOptions DATA_TABLE_OPTIONS = { .columns = DATA_TABLE_COLUMNS }; ImRaid::DataTableState gDataTableState; } void renderDataTable(bool& open) { if (!ImGui::Begin(DATA_TABLE_TITLE, &open)) { ImGui::End(); return; } ImRaid::DataTable("people", DATA_TABLE_OPTIONS, PEOPLE, gDataTableState); ImGui::End(); } } // namespace raid_test