3
3
#include < ruis/widget/group/table_list.hpp>
4
4
#include < ruis/widget/group/window.hpp>
5
5
#include < ruis/widget/label/rectangle.hpp>
6
+ #include < ruis/widget/slider/scroll_bar.hpp>
6
7
7
8
#include " table_tree_view_window.hpp"
8
9
@@ -75,6 +76,83 @@ utki::shared_ref<ruis::widget> make_table_list_window(
75
76
)
76
77
{
77
78
// clang-format off
79
+ auto table_list = m::table_list (c,
80
+ {
81
+ .layout_params {
82
+ .dims = {ruis::dim::fill, ruis::dim::fill},
83
+ .weight = 1
84
+ },
85
+ .table_list_params {
86
+ .column_headers = {
87
+ make_table_list_header (c, U" col 1" s),
88
+ make_table_list_header (c, U" col 2" s),
89
+ make_table_list_header (c, U" col 3" s)
90
+ },
91
+ .provider = [&](){
92
+ class provider : public ruis ::table_list::provider{
93
+ public:
94
+ provider (utki::shared_ref<ruis::context> context) :
95
+ ruis::table_list::provider (std::move(context))
96
+ {}
97
+
98
+ size_t count () const noexcept override {
99
+ return list_data.size ();
100
+ }
101
+
102
+ ruis::widget_list get_row_widgets (size_t index) override {
103
+ ruis::widget_list ret;
104
+
105
+ for (auto i = 0 ; i != 3 ; ++i){
106
+ ret.emplace_back (
107
+ m::text (
108
+ this ->context ,//
109
+ {.widget_params {.clip = true }},
110
+ utki::to_utf32 (list_data[index].children [i].value .string )
111
+ )
112
+ );
113
+ }
114
+ return ret;
115
+ }
116
+ };
117
+ return utki::make_shared<provider>(c);
118
+ }()
119
+ }
120
+ }
121
+ );
122
+
123
+ auto scroll_bar = m::scroll_bar (c,
124
+ {
125
+ .layout_params {
126
+ .dims = {ruis::dim::min, ruis::dim::fill}
127
+ }
128
+ }
129
+ );
130
+
131
+ scroll_bar.get ().fraction_change_handler =
132
+ [table_list_weak = utki::make_weak (table_list)]
133
+ (ruis::fraction_widget& sb)
134
+ {
135
+ if (auto l = table_list_weak.lock ()){
136
+ l->set_scroll_factor (
137
+ sb.get_fraction (),
138
+ false // no notify
139
+ );
140
+ }
141
+ };
142
+
143
+ table_list.get ().scroll_change_handler =
144
+ [scroll_bar_weak = utki::make_weak (scroll_bar)]
145
+ (ruis::table_list& tl)
146
+ {
147
+ if (auto sb = scroll_bar_weak.lock ()){
148
+ sb->set_fraction (
149
+ tl.get_scroll_factor (),
150
+ false // no notify
151
+ );
152
+ sb->set_band_fraction (tl.get_scroll_band ());
153
+ }
154
+ };
155
+
78
156
return m::window (c,
79
157
{
80
158
.widget_params = {
@@ -90,53 +168,13 @@ utki::shared_ref<ruis::widget> make_table_list_window(
90
168
}
91
169
},
92
170
.container_params = {
93
- .layout = ruis::layout::pile
171
+ .layout = ruis::layout::row
94
172
},
95
173
.title = c.get ().localization .get ().get (" table_list" sv)
96
174
},
97
175
{
98
- m::table_list (c,
99
- {
100
- .layout_params {
101
- .dims = {ruis::dim::fill, ruis::dim::fill}
102
- },
103
- .table_list_params {
104
- .column_headers = {
105
- make_table_list_header (c, U" col 1" s),
106
- make_table_list_header (c, U" col 2" s),
107
- make_table_list_header (c, U" col 3" s)
108
- },
109
- .provider = [&](){
110
- class provider : public ruis ::table_list::provider{
111
- public:
112
- provider (utki::shared_ref<ruis::context> context) :
113
- ruis::table_list::provider (std::move(context))
114
- {}
115
-
116
- size_t count () const noexcept override {
117
- return list_data.size ();
118
- }
119
-
120
- ruis::widget_list get_row_widgets (size_t index) override {
121
- ruis::widget_list ret;
122
-
123
- for (auto i = 0 ; i != 3 ; ++i){
124
- ret.emplace_back (
125
- m::text (
126
- this ->context ,//
127
- {.widget_params {.clip = true }},
128
- utki::to_utf32 (list_data[index].children [i].value .string )
129
- )
130
- );
131
- }
132
- return ret;
133
- }
134
- };
135
- return utki::make_shared<provider>(c);
136
- }()
137
- }
138
- }
139
- )
176
+ std::move (table_list),
177
+ std::move (scroll_bar)
140
178
}
141
179
);
142
180
// clang-format on
0 commit comments