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::<>k::Widget>);
296 }
297
298 fn returned_widget_to_child(returned_widget: &Self::ReturnedWidget) -> Self::Children {
299 returned_widget.child()
300 }
301}