RecentEntries: Extract Columns model.

This commit is contained in:
Jared Boone 2016-09-05 12:34:41 -07:00
parent 61f0d97c39
commit 298324d6e4
7 changed files with 46 additions and 45 deletions

View file

@ -95,17 +95,29 @@ namespace ui {
using RecentEntriesColumn = std::pair<std::string, size_t>;
class RecentEntriesColumns {
public:
using ContainerType = std::vector<RecentEntriesColumn>;
RecentEntriesColumns(
const std::initializer_list<RecentEntriesColumn> columns
) : _columns { columns }
{
}
ContainerType::const_iterator begin() const { return std::begin(_columns); }
ContainerType::const_iterator end() const { return std::end(_columns); }
private:
const ContainerType _columns;
};
class RecentEntriesHeader : public Widget {
public:
template<size_t ColumnCount>
void set_columns(
const std::array<RecentEntriesColumn, ColumnCount>& columns
) {
_columns.clear();
for(const auto& column : columns) {
_columns.emplace_back(column);
}
RecentEntriesHeader(
const RecentEntriesColumns& columns
) : _columns { columns }
{
}
void paint(Painter& painter) override {
@ -132,7 +144,7 @@ public:
}
private:
std::vector<RecentEntriesColumn> _columns;
const RecentEntriesColumns& _columns;
};
template<class Entries>
@ -247,8 +259,10 @@ public:
std::function<void(const Entry& entry)> on_select;
RecentEntriesView(
const RecentEntriesColumns& columns,
Entries& recent
) : _table { recent }
) : _header { columns },
_table { recent }
{
add_children({ {
&_header,
@ -258,13 +272,6 @@ public:
_table.on_select = [this](const Entry& entry) { if( this->on_select ) { this->on_select(entry); } };
}
template<size_t ColumnCount>
void set_columns(
const std::array<RecentEntriesColumn, ColumnCount>& columns
) {
_header.set_columns(columns);
}
void set_parent_rect(const Rect new_parent_rect) override {
constexpr Dim scale_height = 16;