1#[cfg(feature = "v1_7")]
7#[cfg_attr(docsrs, doc(cfg(feature = "v1_7")))]
8use crate::Banner;
9use crate::{ffi, PreferencesGroup};
10use glib::{
11 prelude::*,
12 signal::{connect_raw, SignalHandlerId},
13 translate::*,
14};
15use std::boxed::Box as Box_;
16
17glib::wrapper! {
18 #[doc(alias = "AdwPreferencesPage")]
19 pub struct PreferencesPage(Object<ffi::AdwPreferencesPage, ffi::AdwPreferencesPageClass>) @extends gtk::Widget, @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget;
20
21 match fn {
22 type_ => || ffi::adw_preferences_page_get_type(),
23 }
24}
25
26impl PreferencesPage {
27 pub const NONE: Option<&'static PreferencesPage> = None;
28
29 #[doc(alias = "adw_preferences_page_new")]
30 pub fn new() -> PreferencesPage {
31 assert_initialized_main_thread!();
32 unsafe { gtk::Widget::from_glib_none(ffi::adw_preferences_page_new()).unsafe_cast() }
33 }
34
35 pub fn builder() -> PreferencesPageBuilder {
40 PreferencesPageBuilder::new()
41 }
42}
43
44impl Default for PreferencesPage {
45 fn default() -> Self {
46 Self::new()
47 }
48}
49
50#[must_use = "The builder must be built to be used"]
55pub struct PreferencesPageBuilder {
56 builder: glib::object::ObjectBuilder<'static, PreferencesPage>,
57}
58
59impl PreferencesPageBuilder {
60 fn new() -> Self {
61 Self {
62 builder: glib::object::Object::builder(),
63 }
64 }
65
66 #[cfg(feature = "v1_7")]
67 #[cfg_attr(docsrs, doc(cfg(feature = "v1_7")))]
68 pub fn banner(self, banner: &Banner) -> Self {
69 Self {
70 builder: self.builder.property("banner", banner.clone()),
71 }
72 }
73
74 #[cfg(feature = "v1_4")]
75 #[cfg_attr(docsrs, doc(cfg(feature = "v1_4")))]
76 pub fn description(self, description: impl Into<glib::GString>) -> Self {
77 Self {
78 builder: self.builder.property("description", description.into()),
79 }
80 }
81
82 #[cfg(feature = "v1_6")]
83 #[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
84 pub fn description_centered(self, description_centered: bool) -> Self {
85 Self {
86 builder: self
87 .builder
88 .property("description-centered", description_centered),
89 }
90 }
91
92 pub fn icon_name(self, icon_name: impl Into<glib::GString>) -> Self {
93 Self {
94 builder: self.builder.property("icon-name", icon_name.into()),
95 }
96 }
97
98 pub fn name(self, name: impl Into<glib::GString>) -> Self {
99 Self {
100 builder: self.builder.property("name", name.into()),
101 }
102 }
103
104 pub fn title(self, title: impl Into<glib::GString>) -> Self {
105 Self {
106 builder: self.builder.property("title", title.into()),
107 }
108 }
109
110 pub fn use_underline(self, use_underline: bool) -> Self {
111 Self {
112 builder: self.builder.property("use-underline", use_underline),
113 }
114 }
115
116 pub fn can_focus(self, can_focus: bool) -> Self {
117 Self {
118 builder: self.builder.property("can-focus", can_focus),
119 }
120 }
121
122 pub fn can_target(self, can_target: bool) -> Self {
123 Self {
124 builder: self.builder.property("can-target", can_target),
125 }
126 }
127
128 pub fn css_classes(self, css_classes: impl Into<glib::StrV>) -> Self {
129 Self {
130 builder: self.builder.property("css-classes", css_classes.into()),
131 }
132 }
133
134 pub fn css_name(self, css_name: impl Into<glib::GString>) -> Self {
135 Self {
136 builder: self.builder.property("css-name", css_name.into()),
137 }
138 }
139
140 pub fn cursor(self, cursor: &gdk::Cursor) -> Self {
141 Self {
142 builder: self.builder.property("cursor", cursor.clone()),
143 }
144 }
145
146 pub fn focus_on_click(self, focus_on_click: bool) -> Self {
147 Self {
148 builder: self.builder.property("focus-on-click", focus_on_click),
149 }
150 }
151
152 pub fn focusable(self, focusable: bool) -> Self {
153 Self {
154 builder: self.builder.property("focusable", focusable),
155 }
156 }
157
158 pub fn halign(self, halign: gtk::Align) -> Self {
159 Self {
160 builder: self.builder.property("halign", halign),
161 }
162 }
163
164 pub fn has_tooltip(self, has_tooltip: bool) -> Self {
165 Self {
166 builder: self.builder.property("has-tooltip", has_tooltip),
167 }
168 }
169
170 pub fn height_request(self, height_request: i32) -> Self {
171 Self {
172 builder: self.builder.property("height-request", height_request),
173 }
174 }
175
176 pub fn hexpand(self, hexpand: bool) -> Self {
177 Self {
178 builder: self.builder.property("hexpand", hexpand),
179 }
180 }
181
182 pub fn hexpand_set(self, hexpand_set: bool) -> Self {
183 Self {
184 builder: self.builder.property("hexpand-set", hexpand_set),
185 }
186 }
187
188 pub fn layout_manager(self, layout_manager: &impl IsA<gtk::LayoutManager>) -> Self {
189 Self {
190 builder: self
191 .builder
192 .property("layout-manager", layout_manager.clone().upcast()),
193 }
194 }
195
196 #[cfg(feature = "gtk_v4_18")]
197 #[cfg_attr(docsrs, doc(cfg(feature = "gtk_v4_18")))]
198 pub fn limit_events(self, limit_events: bool) -> Self {
199 Self {
200 builder: self.builder.property("limit-events", limit_events),
201 }
202 }
203
204 pub fn margin_bottom(self, margin_bottom: i32) -> Self {
205 Self {
206 builder: self.builder.property("margin-bottom", margin_bottom),
207 }
208 }
209
210 pub fn margin_end(self, margin_end: i32) -> Self {
211 Self {
212 builder: self.builder.property("margin-end", margin_end),
213 }
214 }
215
216 pub fn margin_start(self, margin_start: i32) -> Self {
217 Self {
218 builder: self.builder.property("margin-start", margin_start),
219 }
220 }
221
222 pub fn margin_top(self, margin_top: i32) -> Self {
223 Self {
224 builder: self.builder.property("margin-top", margin_top),
225 }
226 }
227
228 pub fn opacity(self, opacity: f64) -> Self {
229 Self {
230 builder: self.builder.property("opacity", opacity),
231 }
232 }
233
234 pub fn overflow(self, overflow: gtk::Overflow) -> Self {
235 Self {
236 builder: self.builder.property("overflow", overflow),
237 }
238 }
239
240 pub fn receives_default(self, receives_default: bool) -> Self {
241 Self {
242 builder: self.builder.property("receives-default", receives_default),
243 }
244 }
245
246 pub fn sensitive(self, sensitive: bool) -> Self {
247 Self {
248 builder: self.builder.property("sensitive", sensitive),
249 }
250 }
251
252 pub fn tooltip_markup(self, tooltip_markup: impl Into<glib::GString>) -> Self {
253 Self {
254 builder: self
255 .builder
256 .property("tooltip-markup", tooltip_markup.into()),
257 }
258 }
259
260 pub fn tooltip_text(self, tooltip_text: impl Into<glib::GString>) -> Self {
261 Self {
262 builder: self.builder.property("tooltip-text", tooltip_text.into()),
263 }
264 }
265
266 pub fn valign(self, valign: gtk::Align) -> Self {
267 Self {
268 builder: self.builder.property("valign", valign),
269 }
270 }
271
272 pub fn vexpand(self, vexpand: bool) -> Self {
273 Self {
274 builder: self.builder.property("vexpand", vexpand),
275 }
276 }
277
278 pub fn vexpand_set(self, vexpand_set: bool) -> Self {
279 Self {
280 builder: self.builder.property("vexpand-set", vexpand_set),
281 }
282 }
283
284 pub fn visible(self, visible: bool) -> Self {
285 Self {
286 builder: self.builder.property("visible", visible),
287 }
288 }
289
290 pub fn width_request(self, width_request: i32) -> Self {
291 Self {
292 builder: self.builder.property("width-request", width_request),
293 }
294 }
295
296 pub fn accessible_role(self, accessible_role: gtk::AccessibleRole) -> Self {
297 Self {
298 builder: self.builder.property("accessible-role", accessible_role),
299 }
300 }
301
302 #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
305 pub fn build(self) -> PreferencesPage {
306 assert_initialized_main_thread!();
307 self.builder.build()
308 }
309}
310
311pub trait PreferencesPageExt: IsA<PreferencesPage> + 'static {
312 #[doc(alias = "adw_preferences_page_add")]
313 fn add(&self, group: &impl IsA<PreferencesGroup>) {
314 unsafe {
315 ffi::adw_preferences_page_add(
316 self.as_ref().to_glib_none().0,
317 group.as_ref().to_glib_none().0,
318 );
319 }
320 }
321
322 #[cfg(feature = "v1_7")]
323 #[cfg_attr(docsrs, doc(cfg(feature = "v1_7")))]
324 #[doc(alias = "adw_preferences_page_get_banner")]
325 #[doc(alias = "get_banner")]
326 fn banner(&self) -> Option<Banner> {
327 unsafe {
328 from_glib_none(ffi::adw_preferences_page_get_banner(
329 self.as_ref().to_glib_none().0,
330 ))
331 }
332 }
333
334 #[cfg(feature = "v1_4")]
335 #[cfg_attr(docsrs, doc(cfg(feature = "v1_4")))]
336 #[doc(alias = "adw_preferences_page_get_description")]
337 #[doc(alias = "get_description")]
338 fn description(&self) -> glib::GString {
339 unsafe {
340 from_glib_none(ffi::adw_preferences_page_get_description(
341 self.as_ref().to_glib_none().0,
342 ))
343 }
344 }
345
346 #[cfg(feature = "v1_6")]
347 #[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
348 #[doc(alias = "adw_preferences_page_get_description_centered")]
349 #[doc(alias = "get_description_centered")]
350 #[doc(alias = "description-centered")]
351 fn is_description_centered(&self) -> bool {
352 unsafe {
353 from_glib(ffi::adw_preferences_page_get_description_centered(
354 self.as_ref().to_glib_none().0,
355 ))
356 }
357 }
358
359 #[cfg(feature = "v1_8")]
360 #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
361 #[doc(alias = "adw_preferences_page_get_group")]
362 #[doc(alias = "get_group")]
363 fn group(&self, index: u32) -> Option<PreferencesGroup> {
364 unsafe {
365 from_glib_none(ffi::adw_preferences_page_get_group(
366 self.as_ref().to_glib_none().0,
367 index,
368 ))
369 }
370 }
371
372 #[doc(alias = "adw_preferences_page_get_icon_name")]
373 #[doc(alias = "get_icon_name")]
374 #[doc(alias = "icon-name")]
375 fn icon_name(&self) -> Option<glib::GString> {
376 unsafe {
377 from_glib_none(ffi::adw_preferences_page_get_icon_name(
378 self.as_ref().to_glib_none().0,
379 ))
380 }
381 }
382
383 #[doc(alias = "adw_preferences_page_get_name")]
384 #[doc(alias = "get_name")]
385 fn name(&self) -> Option<glib::GString> {
386 unsafe {
387 from_glib_none(ffi::adw_preferences_page_get_name(
388 self.as_ref().to_glib_none().0,
389 ))
390 }
391 }
392
393 #[doc(alias = "adw_preferences_page_get_title")]
394 #[doc(alias = "get_title")]
395 fn title(&self) -> glib::GString {
396 unsafe {
397 from_glib_none(ffi::adw_preferences_page_get_title(
398 self.as_ref().to_glib_none().0,
399 ))
400 }
401 }
402
403 #[doc(alias = "adw_preferences_page_get_use_underline")]
404 #[doc(alias = "get_use_underline")]
405 #[doc(alias = "use-underline")]
406 fn uses_underline(&self) -> bool {
407 unsafe {
408 from_glib(ffi::adw_preferences_page_get_use_underline(
409 self.as_ref().to_glib_none().0,
410 ))
411 }
412 }
413
414 #[cfg(feature = "v1_8")]
415 #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
416 #[doc(alias = "adw_preferences_page_insert")]
417 fn insert(&self, group: &impl IsA<PreferencesGroup>, index: i32) {
418 unsafe {
419 ffi::adw_preferences_page_insert(
420 self.as_ref().to_glib_none().0,
421 group.as_ref().to_glib_none().0,
422 index,
423 );
424 }
425 }
426
427 #[doc(alias = "adw_preferences_page_remove")]
428 fn remove(&self, group: &impl IsA<PreferencesGroup>) {
429 unsafe {
430 ffi::adw_preferences_page_remove(
431 self.as_ref().to_glib_none().0,
432 group.as_ref().to_glib_none().0,
433 );
434 }
435 }
436
437 #[cfg(feature = "v1_3")]
438 #[cfg_attr(docsrs, doc(cfg(feature = "v1_3")))]
439 #[doc(alias = "adw_preferences_page_scroll_to_top")]
440 fn scroll_to_top(&self) {
441 unsafe {
442 ffi::adw_preferences_page_scroll_to_top(self.as_ref().to_glib_none().0);
443 }
444 }
445
446 #[cfg(feature = "v1_7")]
447 #[cfg_attr(docsrs, doc(cfg(feature = "v1_7")))]
448 #[doc(alias = "adw_preferences_page_set_banner")]
449 #[doc(alias = "banner")]
450 fn set_banner(&self, banner: Option<&Banner>) {
451 unsafe {
452 ffi::adw_preferences_page_set_banner(
453 self.as_ref().to_glib_none().0,
454 banner.to_glib_none().0,
455 );
456 }
457 }
458
459 #[cfg(feature = "v1_4")]
460 #[cfg_attr(docsrs, doc(cfg(feature = "v1_4")))]
461 #[doc(alias = "adw_preferences_page_set_description")]
462 #[doc(alias = "description")]
463 fn set_description(&self, description: &str) {
464 unsafe {
465 ffi::adw_preferences_page_set_description(
466 self.as_ref().to_glib_none().0,
467 description.to_glib_none().0,
468 );
469 }
470 }
471
472 #[cfg(feature = "v1_6")]
473 #[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
474 #[doc(alias = "adw_preferences_page_set_description_centered")]
475 #[doc(alias = "description-centered")]
476 fn set_description_centered(&self, centered: bool) {
477 unsafe {
478 ffi::adw_preferences_page_set_description_centered(
479 self.as_ref().to_glib_none().0,
480 centered.into_glib(),
481 );
482 }
483 }
484
485 #[doc(alias = "adw_preferences_page_set_icon_name")]
486 #[doc(alias = "icon-name")]
487 fn set_icon_name(&self, icon_name: Option<&str>) {
488 unsafe {
489 ffi::adw_preferences_page_set_icon_name(
490 self.as_ref().to_glib_none().0,
491 icon_name.to_glib_none().0,
492 );
493 }
494 }
495
496 #[doc(alias = "adw_preferences_page_set_name")]
497 #[doc(alias = "name")]
498 fn set_name(&self, name: Option<&str>) {
499 unsafe {
500 ffi::adw_preferences_page_set_name(
501 self.as_ref().to_glib_none().0,
502 name.to_glib_none().0,
503 );
504 }
505 }
506
507 #[doc(alias = "adw_preferences_page_set_title")]
508 #[doc(alias = "title")]
509 fn set_title(&self, title: &str) {
510 unsafe {
511 ffi::adw_preferences_page_set_title(
512 self.as_ref().to_glib_none().0,
513 title.to_glib_none().0,
514 );
515 }
516 }
517
518 #[doc(alias = "adw_preferences_page_set_use_underline")]
519 #[doc(alias = "use-underline")]
520 fn set_use_underline(&self, use_underline: bool) {
521 unsafe {
522 ffi::adw_preferences_page_set_use_underline(
523 self.as_ref().to_glib_none().0,
524 use_underline.into_glib(),
525 );
526 }
527 }
528
529 #[cfg(feature = "v1_7")]
530 #[cfg_attr(docsrs, doc(cfg(feature = "v1_7")))]
531 #[doc(alias = "banner")]
532 fn connect_banner_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
533 unsafe extern "C" fn notify_banner_trampoline<
534 P: IsA<PreferencesPage>,
535 F: Fn(&P) + 'static,
536 >(
537 this: *mut ffi::AdwPreferencesPage,
538 _param_spec: glib::ffi::gpointer,
539 f: glib::ffi::gpointer,
540 ) {
541 let f: &F = &*(f as *const F);
542 f(PreferencesPage::from_glib_borrow(this).unsafe_cast_ref())
543 }
544 unsafe {
545 let f: Box_<F> = Box_::new(f);
546 connect_raw(
547 self.as_ptr() as *mut _,
548 c"notify::banner".as_ptr() as *const _,
549 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
550 notify_banner_trampoline::<Self, F> as *const (),
551 )),
552 Box_::into_raw(f),
553 )
554 }
555 }
556
557 #[cfg(feature = "v1_4")]
558 #[cfg_attr(docsrs, doc(cfg(feature = "v1_4")))]
559 #[doc(alias = "description")]
560 fn connect_description_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
561 unsafe extern "C" fn notify_description_trampoline<
562 P: IsA<PreferencesPage>,
563 F: Fn(&P) + 'static,
564 >(
565 this: *mut ffi::AdwPreferencesPage,
566 _param_spec: glib::ffi::gpointer,
567 f: glib::ffi::gpointer,
568 ) {
569 let f: &F = &*(f as *const F);
570 f(PreferencesPage::from_glib_borrow(this).unsafe_cast_ref())
571 }
572 unsafe {
573 let f: Box_<F> = Box_::new(f);
574 connect_raw(
575 self.as_ptr() as *mut _,
576 c"notify::description".as_ptr() as *const _,
577 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
578 notify_description_trampoline::<Self, F> as *const (),
579 )),
580 Box_::into_raw(f),
581 )
582 }
583 }
584
585 #[cfg(feature = "v1_6")]
586 #[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
587 #[doc(alias = "description-centered")]
588 fn connect_description_centered_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
589 unsafe extern "C" fn notify_description_centered_trampoline<
590 P: IsA<PreferencesPage>,
591 F: Fn(&P) + 'static,
592 >(
593 this: *mut ffi::AdwPreferencesPage,
594 _param_spec: glib::ffi::gpointer,
595 f: glib::ffi::gpointer,
596 ) {
597 let f: &F = &*(f as *const F);
598 f(PreferencesPage::from_glib_borrow(this).unsafe_cast_ref())
599 }
600 unsafe {
601 let f: Box_<F> = Box_::new(f);
602 connect_raw(
603 self.as_ptr() as *mut _,
604 c"notify::description-centered".as_ptr() as *const _,
605 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
606 notify_description_centered_trampoline::<Self, F> as *const (),
607 )),
608 Box_::into_raw(f),
609 )
610 }
611 }
612
613 #[doc(alias = "icon-name")]
614 fn connect_icon_name_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
615 unsafe extern "C" fn notify_icon_name_trampoline<
616 P: IsA<PreferencesPage>,
617 F: Fn(&P) + 'static,
618 >(
619 this: *mut ffi::AdwPreferencesPage,
620 _param_spec: glib::ffi::gpointer,
621 f: glib::ffi::gpointer,
622 ) {
623 let f: &F = &*(f as *const F);
624 f(PreferencesPage::from_glib_borrow(this).unsafe_cast_ref())
625 }
626 unsafe {
627 let f: Box_<F> = Box_::new(f);
628 connect_raw(
629 self.as_ptr() as *mut _,
630 c"notify::icon-name".as_ptr() as *const _,
631 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
632 notify_icon_name_trampoline::<Self, F> as *const (),
633 )),
634 Box_::into_raw(f),
635 )
636 }
637 }
638
639 #[doc(alias = "title")]
640 fn connect_title_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
641 unsafe extern "C" fn notify_title_trampoline<
642 P: IsA<PreferencesPage>,
643 F: Fn(&P) + 'static,
644 >(
645 this: *mut ffi::AdwPreferencesPage,
646 _param_spec: glib::ffi::gpointer,
647 f: glib::ffi::gpointer,
648 ) {
649 let f: &F = &*(f as *const F);
650 f(PreferencesPage::from_glib_borrow(this).unsafe_cast_ref())
651 }
652 unsafe {
653 let f: Box_<F> = Box_::new(f);
654 connect_raw(
655 self.as_ptr() as *mut _,
656 c"notify::title".as_ptr() as *const _,
657 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
658 notify_title_trampoline::<Self, F> as *const (),
659 )),
660 Box_::into_raw(f),
661 )
662 }
663 }
664
665 #[doc(alias = "use-underline")]
666 fn connect_use_underline_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
667 unsafe extern "C" fn notify_use_underline_trampoline<
668 P: IsA<PreferencesPage>,
669 F: Fn(&P) + 'static,
670 >(
671 this: *mut ffi::AdwPreferencesPage,
672 _param_spec: glib::ffi::gpointer,
673 f: glib::ffi::gpointer,
674 ) {
675 let f: &F = &*(f as *const F);
676 f(PreferencesPage::from_glib_borrow(this).unsafe_cast_ref())
677 }
678 unsafe {
679 let f: Box_<F> = Box_::new(f);
680 connect_raw(
681 self.as_ptr() as *mut _,
682 c"notify::use-underline".as_ptr() as *const _,
683 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
684 notify_use_underline_trampoline::<Self, F> as *const (),
685 )),
686 Box_::into_raw(f),
687 )
688 }
689 }
690}
691
692impl<O: IsA<PreferencesPage>> PreferencesPageExt for O {}