blob: 7a5d71e815989414e2398c91fc30cd63e722f1e2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#pragma once
#include <AK/AKString.h>
#include <AK/Badge.h>
#include <AK/Function.h>
#include <AK/HashTable.h>
#include <LibGUI/GModelIndex.h>
#include <SharedGraphics/TextAlignment.h>
class GTableView;
class GTableModel {
public:
struct ColumnMetadata {
int preferred_width { 0 };
TextAlignment text_alignment { TextAlignment::CenterLeft };
};
virtual ~GTableModel();
virtual int row_count() const = 0;
virtual int column_count() const = 0;
virtual String row_name(int) const { return { }; }
virtual String column_name(int) const { return { }; }
virtual ColumnMetadata column_metadata(int) const { return { }; }
virtual String data(int row, int column) const = 0;
virtual void set_selected_index(GModelIndex) { }
virtual GModelIndex selected_index() const { return GModelIndex(); }
virtual void update() = 0;
bool is_valid(GModelIndex index) const
{
return index.row() >= 0 && index.row() < row_count() && index.column() >= 0 && index.column() < column_count();
}
void register_view(Badge<GTableView>, GTableView&);
void unregister_view(Badge<GTableView>, GTableView&);
protected:
GTableModel();
void for_each_view(Function<void(GTableView&)>);
void did_update();
private:
HashTable<GTableView*> m_views;
};
|