Skip to main content

ItemModel

#include "toolkit/item_model.hpp"

The data-model interface behind ListView, TableView, and IconGrid. Rows are addressed by index; cells by (row, col).

Example​

auto model = std::make_shared<toolkit::StringListModel>(
std::vector<std::string>{"Alpha", "Beta", "Gamma"});
auto list = std::make_unique<toolkit::ListView>(model);

Interface​

class ItemModel {
public:
virtual size_t row_count() const = 0;
virtual size_t column_count() const { return 1; }
virtual std::string cell_text(size_t row, size_t col) const = 0;
virtual std::string header_text(size_t col) const { return {}; }
virtual Icon icon_at(size_t row, size_t col, int size) const { return nullptr; }
virtual std::string tooltip(size_t row) const { return cell_text(row, 0); }

std::function<void()> on_data_changed;
};

Call on_data_changed() after mutating a model in place so bound views refresh.

Built-in implementations​

ClassDescription
StringListModelSingle-column model over std::vector<std::string>; set_items(), append(), remove()
StringTableModelMulti-column model with headers over vector<vector<string>>; set_data(), append_row(), remove_row()
StandardIconModelModel of StandardIconItem{text, tooltip_text, icon_name, icon_category}, for icon-grid style browsers; set_items(), append()
FilterAdapterWraps another ItemModel and exposes a filtered subset; set_filter(std::string), source_index(filtered_index), async rebuild with on_progress reporting and set_simulated_delay_ms() for testing