1 // This file was generated by gir (https://github.com/gtk-rs/gir)
2 // from gir-files (https://github.com/gtk-rs/gir-files)
3 // DO NOT EDIT
4 
5 use crate::EventController;
6 use crate::PadActionType;
7 use crate::PropagationPhase;
8 use crate::Widget;
9 use crate::Window;
10 use glib::object::Cast;
11 use glib::object::IsA;
12 use glib::object::ObjectType as ObjectType_;
13 use glib::translate::*;
14 use glib::StaticType;
15 use glib::ToValue;
16 use std::fmt;
17 
18 glib::wrapper! {
19     #[doc(alias = "GtkPadController")]
20     pub struct PadController(Object<ffi::GtkPadController, ffi::GtkPadControllerClass>) @extends EventController;
21 
22     match fn {
23         type_ => || ffi::gtk_pad_controller_get_type(),
24     }
25 }
26 
27 impl PadController {
28     #[doc(alias = "gtk_pad_controller_new")]
new<P: IsA<Window>, Q: IsA<gio::ActionGroup>>( window: &P, group: &Q, pad: Option<&gdk::Device>, ) -> PadController29     pub fn new<P: IsA<Window>, Q: IsA<gio::ActionGroup>>(
30         window: &P,
31         group: &Q,
32         pad: Option<&gdk::Device>,
33     ) -> PadController {
34         skip_assert_initialized!();
35         unsafe {
36             from_glib_full(ffi::gtk_pad_controller_new(
37                 window.as_ref().to_glib_none().0,
38                 group.as_ref().to_glib_none().0,
39                 pad.to_glib_none().0,
40             ))
41         }
42     }
43 
44     // rustdoc-stripper-ignore-next
45     /// Creates a new builder-pattern struct instance to construct [`PadController`] objects.
46     ///
47     /// This method returns an instance of [`PadControllerBuilder`] which can be used to create [`PadController`] objects.
builder() -> PadControllerBuilder48     pub fn builder() -> PadControllerBuilder {
49         PadControllerBuilder::default()
50     }
51 
52     #[doc(alias = "gtk_pad_controller_set_action")]
set_action( &self, type_: PadActionType, index: i32, mode: i32, label: &str, action_name: &str, )53     pub fn set_action(
54         &self,
55         type_: PadActionType,
56         index: i32,
57         mode: i32,
58         label: &str,
59         action_name: &str,
60     ) {
61         unsafe {
62             ffi::gtk_pad_controller_set_action(
63                 self.to_glib_none().0,
64                 type_.into_glib(),
65                 index,
66                 mode,
67                 label.to_glib_none().0,
68                 action_name.to_glib_none().0,
69             );
70         }
71     }
72 
73     #[doc(alias = "action-group")]
action_group(&self) -> Option<gio::ActionGroup>74     pub fn action_group(&self) -> Option<gio::ActionGroup> {
75         unsafe {
76             let mut value = glib::Value::from_type(<gio::ActionGroup as StaticType>::static_type());
77             glib::gobject_ffi::g_object_get_property(
78                 self.as_ptr() as *mut glib::gobject_ffi::GObject,
79                 b"action-group\0".as_ptr() as *const _,
80                 value.to_glib_none_mut().0,
81             );
82             value
83                 .get()
84                 .expect("Return Value for property `action-group` getter")
85         }
86     }
87 
pad(&self) -> Option<gdk::Device>88     pub fn pad(&self) -> Option<gdk::Device> {
89         unsafe {
90             let mut value = glib::Value::from_type(<gdk::Device as StaticType>::static_type());
91             glib::gobject_ffi::g_object_get_property(
92                 self.as_ptr() as *mut glib::gobject_ffi::GObject,
93                 b"pad\0".as_ptr() as *const _,
94                 value.to_glib_none_mut().0,
95             );
96             value.get().expect("Return Value for property `pad` getter")
97         }
98     }
99 }
100 
101 #[derive(Clone, Default)]
102 // rustdoc-stripper-ignore-next
103 /// A [builder-pattern] type to construct [`PadController`] objects.
104 ///
105 /// [builder-pattern]: https://doc.rust-lang.org/1.0.0/style/ownership/builders.html
106 pub struct PadControllerBuilder {
107     action_group: Option<gio::ActionGroup>,
108     pad: Option<gdk::Device>,
109     propagation_phase: Option<PropagationPhase>,
110     widget: Option<Widget>,
111 }
112 
113 impl PadControllerBuilder {
114     // rustdoc-stripper-ignore-next
115     /// Create a new [`PadControllerBuilder`].
new() -> Self116     pub fn new() -> Self {
117         Self::default()
118     }
119 
120     // rustdoc-stripper-ignore-next
121     /// Build the [`PadController`].
build(self) -> PadController122     pub fn build(self) -> PadController {
123         let mut properties: Vec<(&str, &dyn ToValue)> = vec![];
124         if let Some(ref action_group) = self.action_group {
125             properties.push(("action-group", action_group));
126         }
127         if let Some(ref pad) = self.pad {
128             properties.push(("pad", pad));
129         }
130         if let Some(ref propagation_phase) = self.propagation_phase {
131             properties.push(("propagation-phase", propagation_phase));
132         }
133         if let Some(ref widget) = self.widget {
134             properties.push(("widget", widget));
135         }
136         glib::Object::new::<PadController>(&properties)
137             .expect("Failed to create an instance of PadController")
138     }
139 
action_group<P: IsA<gio::ActionGroup>>(mut self, action_group: &P) -> Self140     pub fn action_group<P: IsA<gio::ActionGroup>>(mut self, action_group: &P) -> Self {
141         self.action_group = Some(action_group.clone().upcast());
142         self
143     }
144 
pad(mut self, pad: &gdk::Device) -> Self145     pub fn pad(mut self, pad: &gdk::Device) -> Self {
146         self.pad = Some(pad.clone());
147         self
148     }
149 
propagation_phase(mut self, propagation_phase: PropagationPhase) -> Self150     pub fn propagation_phase(mut self, propagation_phase: PropagationPhase) -> Self {
151         self.propagation_phase = Some(propagation_phase);
152         self
153     }
154 
widget<P: IsA<Widget>>(mut self, widget: &P) -> Self155     pub fn widget<P: IsA<Widget>>(mut self, widget: &P) -> Self {
156         self.widget = Some(widget.clone().upcast());
157         self
158     }
159 }
160 
161 impl fmt::Display for PadController {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result162     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
163         f.write_str("PadController")
164     }
165 }
166