relm4/factory/widgets/
libadwaita.rs

1#![allow(deprecated)]
2use adw::prelude::*;
3
4use crate::factory::FactoryView;
5
6impl FactoryView for adw::TabView {
7    type Children = gtk::Widget;
8    type ReturnedWidget = adw::TabPage;
9
10    type Position = ();
11
12    fn factory_remove(&self, widget: &Self::ReturnedWidget) {
13        self.close_page(widget);
14        self.close_page_finish(widget, true);
15    }
16
17    fn factory_append(
18        &self,
19        widget: impl AsRef<Self::Children>,
20        _position: &Self::Position,
21    ) -> Self::ReturnedWidget {
22        self.append(widget.as_ref())
23    }
24
25    fn factory_prepend(
26        &self,
27        widget: impl AsRef<Self::Children>,
28        _position: &(),
29    ) -> Self::ReturnedWidget {
30        self.prepend(widget.as_ref())
31    }
32
33    fn factory_insert_after(
34        &self,
35        widget: impl AsRef<Self::Children>,
36        _position: &(),
37        other: &Self::ReturnedWidget,
38    ) -> Self::ReturnedWidget {
39        let new_position = self.page_position(other) + 1;
40        self.insert(widget.as_ref(), new_position)
41    }
42
43    fn returned_widget_to_child(root_child: &Self::ReturnedWidget) -> Self::Children {
44        root_child.child()
45    }
46
47    fn factory_move_after(&self, widget: &Self::ReturnedWidget, other: &Self::ReturnedWidget) {
48        let new_position = self.page_position(other) + 1;
49        if new_position == self.n_pages() {
50            self.reorder_last(widget);
51        } else {
52            self.reorder_page(widget, new_position);
53        }
54    }
55
56    fn factory_move_start(&self, widget: &Self::ReturnedWidget) {
57        self.reorder_first(widget);
58    }
59}
60
61impl FactoryView for adw::PreferencesPage {
62    type Children = adw::PreferencesGroup;
63    type ReturnedWidget = adw::PreferencesGroup;
64
65    type Position = ();
66
67    fn factory_remove(&self, widget: &Self::ReturnedWidget) {
68        self.remove(widget);
69    }
70
71    fn factory_append(
72        &self,
73        widget: impl AsRef<Self::Children>,
74        _position: &Self::Position,
75    ) -> Self::ReturnedWidget {
76        self.add(widget.as_ref());
77        widget.as_ref().clone()
78    }
79
80    fn factory_prepend(
81        &self,
82        widget: impl AsRef<Self::Children>,
83        position: &(),
84    ) -> Self::ReturnedWidget {
85        self.factory_append(widget, position)
86    }
87
88    fn factory_insert_after(
89        &self,
90        widget: impl AsRef<Self::Children>,
91        position: &(),
92        _other: &Self::ReturnedWidget,
93    ) -> Self::ReturnedWidget {
94        self.factory_append(widget, position)
95    }
96
97    fn returned_widget_to_child(root_child: &Self::ReturnedWidget) -> Self::Children {
98        root_child.clone()
99    }
100
101    fn factory_move_after(&self, _widget: &Self::ReturnedWidget, _other: &Self::ReturnedWidget) {}
102
103    fn factory_move_start(&self, _widget: &Self::ReturnedWidget) {}
104}
105
106impl FactoryView for adw::ExpanderRow {
107    type Children = gtk::Widget;
108    type ReturnedWidget = gtk::Widget;
109    type Position = ();
110
111    fn factory_remove(&self, widget: &Self::ReturnedWidget) {
112        self.remove(widget);
113    }
114
115    fn factory_append(
116        &self,
117        widget: impl AsRef<Self::Children>,
118        _: &Self::Position,
119    ) -> Self::ReturnedWidget {
120        self.add_row(widget.as_ref());
121        widget.as_ref().clone()
122    }
123
124    fn factory_prepend(
125        &self,
126        widget: impl AsRef<Self::Children>,
127        position: &Self::Position,
128    ) -> Self::ReturnedWidget {
129        self.factory_append(widget, position)
130    }
131
132    fn factory_insert_after(
133        &self,
134        widget: impl AsRef<Self::Children>,
135        position: &Self::Position,
136        _other: &Self::ReturnedWidget,
137    ) -> Self::ReturnedWidget {
138        self.factory_append(widget, position)
139    }
140
141    fn factory_move_after(&self, _widget: &Self::ReturnedWidget, _other: &Self::ReturnedWidget) {}
142
143    fn factory_move_start(&self, _widget: &Self::ReturnedWidget) {}
144
145    fn returned_widget_to_child(returned_widget: &Self::ReturnedWidget) -> Self::Children {
146        returned_widget.clone()
147    }
148
149    fn factory_update_position(&self, widget: &Self::ReturnedWidget, position: &Self::Position) {
150        self.factory_remove(widget);
151        self.factory_append(widget, position);
152    }
153}
154
155impl FactoryView for adw::Carousel {
156    type Children = gtk::Widget;
157    type ReturnedWidget = gtk::Widget;
158    type Position = ();
159
160    fn factory_remove(&self, widget: &Self::ReturnedWidget) {
161        self.remove(widget);
162    }
163
164    fn factory_append(
165        &self,
166        widget: impl AsRef<Self::Children>,
167        _: &Self::Position,
168    ) -> Self::ReturnedWidget {
169        self.append(widget.as_ref());
170        widget.as_ref().clone()
171    }
172
173    fn factory_prepend(
174        &self,
175        widget: impl AsRef<Self::Children>,
176        _position: &(),
177    ) -> Self::ReturnedWidget {
178        self.prepend(widget.as_ref());
179        widget.as_ref().clone()
180    }
181
182    fn factory_insert_after(
183        &self,
184        widget: impl AsRef<Self::Children>,
185        position: &(),
186        _other: &Self::ReturnedWidget,
187    ) -> Self::ReturnedWidget {
188        self.factory_append(widget.as_ref(), position);
189        widget.as_ref().clone()
190    }
191
192    fn returned_widget_to_child(returned_widget: &Self::ReturnedWidget) -> Self::Children {
193        returned_widget.clone()
194    }
195
196    fn factory_move_after(&self, widget: &Self::ReturnedWidget, other: &Self::ReturnedWidget) {
197        for i in 0..self.n_pages() {
198            if self.nth_page(i).eq(other) {
199                self.reorder(widget, (i + 1) as i32);
200                return;
201            }
202        }
203    }
204
205    fn factory_move_start(&self, widget: &Self::ReturnedWidget) {
206        self.reorder(widget, 0);
207    }
208}
209
210impl FactoryView for adw::PreferencesGroup {
211    type Children = gtk::Widget;
212    type ReturnedWidget = gtk::Widget;
213    type Position = ();
214
215    fn factory_remove(&self, widget: &Self::ReturnedWidget) {
216        self.remove(widget);
217    }
218
219    fn factory_append(
220        &self,
221        widget: impl AsRef<Self::Children>,
222        _: &Self::Position,
223    ) -> Self::ReturnedWidget {
224        self.add(widget.as_ref());
225        widget.as_ref().clone()
226    }
227
228    fn factory_prepend(
229        &self,
230        widget: impl AsRef<Self::Children>,
231        _position: &(),
232    ) -> Self::ReturnedWidget {
233        self.add(widget.as_ref());
234        widget.as_ref().clone()
235    }
236
237    fn factory_insert_after(
238        &self,
239        widget: impl AsRef<Self::Children>,
240        _position: &(),
241        _other: &Self::ReturnedWidget,
242    ) -> Self::ReturnedWidget {
243        self.add(widget.as_ref());
244        widget.as_ref().clone()
245    }
246
247    fn returned_widget_to_child(returned_widget: &Self::ReturnedWidget) -> Self::Children {
248        returned_widget.clone()
249    }
250
251    fn factory_move_after(&self, _widget: &Self::ReturnedWidget, _other: &Self::ReturnedWidget) {}
252
253    fn factory_move_start(&self, _widget: &Self::ReturnedWidget) {}
254}
255
256impl FactoryView for adw::Leaflet {
257    type Children = gtk::Widget;
258    type ReturnedWidget = adw::LeafletPage;
259    type Position = ();
260
261    fn factory_remove(&self, widget: &Self::ReturnedWidget) {
262        self.remove(&widget.child());
263    }
264
265    fn factory_append(
266        &self,
267        widget: impl AsRef<Self::Children>,
268        _position: &Self::Position,
269    ) -> Self::ReturnedWidget {
270        self.append(widget.as_ref())
271    }
272
273    fn factory_prepend(
274        &self,
275        widget: impl AsRef<Self::Children>,
276        _position: &(),
277    ) -> Self::ReturnedWidget {
278        self.prepend(widget.as_ref())
279    }
280
281    fn factory_insert_after(
282        &self,
283        widget: impl AsRef<Self::Children>,
284        _position: &(),
285        other: &Self::ReturnedWidget,
286    ) -> Self::ReturnedWidget {
287        self.insert_child_after(widget.as_ref(), Some(&other.child()))
288    }
289
290    fn factory_move_after(&self, widget: &Self::ReturnedWidget, other: &Self::ReturnedWidget) {
291        self.reorder_child_after(&widget.child(), Some(&other.child()))
292    }
293
294    fn factory_move_start(&self, widget: &Self::ReturnedWidget) {
295        self.reorder_child_after(&widget.child(), None::<&gtk::Widget>);
296    }
297
298    fn returned_widget_to_child(returned_widget: &Self::ReturnedWidget) -> Self::Children {
299        returned_widget.child()
300    }
301}