@@ -25,21 +25,63 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
25
25
26
26
using namespace ruis ;
27
27
28
+ namespace {
29
+ class provider : public list_provider
30
+ {
31
+ public:
32
+ table_list& owner;
33
+
34
+ const utki::shared_ref<table_list::provider> table_list_provider;
35
+
36
+ provider (table_list& owner, utki::shared_ref<table_list::provider> table_list_provider) :
37
+ list_provider (table_list_provider.get().context),
38
+ owner (owner),
39
+ table_list_provider (std::move(table_list_provider))
40
+ {}
41
+
42
+ size_t count () const noexcept override
43
+ {
44
+ return this ->table_list_provider .get ().count ();
45
+ }
46
+
47
+ utki::shared_ref<ruis::widget> get_widget (size_t index) override
48
+ {
49
+ auto cells = this ->table_list_provider .get ().get_row_widgets (index);
50
+
51
+ // TODO: size cells
52
+
53
+ // clang-format off
54
+ return make::container (this ->context ,
55
+ {
56
+ .layout_params {
57
+ .dims = {ruis::dim::max, ruis::dim::min}
58
+ },
59
+ .container_params {
60
+ .layout = ruis::layout::trivial
61
+ }
62
+ },
63
+ std::move (cells)
64
+ );
65
+ // clang-format on
66
+ }
67
+ };
68
+ } // namespace
69
+
28
70
namespace {
29
71
utki::shared_ref<ruis::tiling_area> make_headers_widget (
30
72
const utki::shared_ref<ruis::context>& c, //
31
73
ruis::widget_list column_headers
32
74
)
33
75
{
34
76
// clang-format off
35
- return ruis::make::tiling_area (c,
36
- {
37
- .layout_params {
38
- .dims = {ruis::dim::fill, ruis::dim::min}
39
- }
40
- },
41
- std::move (column_headers)
42
- );
77
+ return ruis::make::tiling_area (c,
78
+ {
79
+ .layout_params {
80
+ .dims = {ruis::dim::fill, ruis::dim::min}
81
+ }
82
+ },
83
+ std::move (column_headers)
84
+ );
43
85
// clang-format on
44
86
}
45
87
} // namespace
@@ -54,30 +96,35 @@ table_list::table_list(
54
96
std::move(params.widget_params)
55
97
),
56
98
// clang-format off
57
- ruis::container(
58
- this ->context,
59
- {
60
- .container_params {
61
- .layout = ruis::layout::column
62
- }
63
- },
64
- {
65
- make_headers_widget (this ->context ,
66
- std::move (params.table_list_params .column_headers )
67
- ),
68
- ruis::make::list (this ->context ,
69
- {
70
- .layout_params {
71
- .dims = {ruis::dim::fill, ruis::dim::fill},
72
- .weight = 1
73
- },
74
- // .list_params{
75
- // .provider = // TODO: make provider
76
- // }
77
- }
78
- )
79
- }
80
- )
99
+ ruis::container(
100
+ this ->context,
101
+ {
102
+ .container_params {
103
+ .layout = ruis::layout::column
104
+ }
105
+ },
106
+ {
107
+ make_headers_widget (this ->context ,
108
+ std::move (params.table_list_params .column_headers )
109
+ ),
110
+ ruis::make::list (this ->context ,
111
+ {
112
+ .layout_params {
113
+ .dims = {ruis::dim::fill, ruis::dim::fill},
114
+ .weight = 1
115
+ },
116
+ .list_providable_params {
117
+ .provider = [&]() -> utki::shared_ref<list_provider> {
118
+ return utki::make_shared<::provider>(
119
+ *this ,
120
+ std::move (params.table_list_params .provider )
121
+ );
122
+ }()
123
+ }
124
+ }
125
+ )
126
+ }
127
+ )
81
128
// clang-format on
82
129
{}
83
130
0 commit comments