1use glib::translate::{from_glib, FromGlib, IntoGlib, ToGlibPtr, ToGlibPtrMut};
4use glib::value::{FromValue, ToValue, ValueType};
5use glib::{StaticType, Type};
6use std::fmt;
7
8#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
12#[doc(alias = "GtkResponseType")]
13pub enum ResponseType {
14 #[doc(alias = "GTK_RESPONSE_NONE")]
17 None,
18 #[doc(alias = "GTK_RESPONSE_REJECT")]
20 Reject,
21 #[doc(alias = "GTK_RESPONSE_ACCEPT")]
23 Accept,
24 #[doc(alias = "GTK_RESPONSE_DELETE_EVENT")]
26 DeleteEvent,
27 #[doc(alias = "GTK_RESPONSE_OK")]
29 Ok,
30 #[doc(alias = "GTK_RESPONSE_CANCEL")]
32 Cancel,
33 #[doc(alias = "GTK_RESPONSE_CLOSE")]
35 Close,
36 #[doc(alias = "GTK_RESPONSE_YES")]
38 Yes,
39 #[doc(alias = "GTK_RESPONSE_NO")]
41 No,
42 #[doc(alias = "GTK_RESPONSE_APPLY")]
44 Apply,
45 #[doc(alias = "GTK_RESPONSE_HELP")]
47 Help,
48 Other(u16),
49 #[doc(hidden)]
50 __Unknown(i32),
51}
52
53#[doc(hidden)]
54impl IntoGlib for ResponseType {
55 type GlibType = ffi::GtkResponseType;
56
57 fn into_glib(self) -> ffi::GtkResponseType {
58 match self {
59 Self::None => ffi::GTK_RESPONSE_NONE,
60 Self::Reject => ffi::GTK_RESPONSE_REJECT,
61 Self::Accept => ffi::GTK_RESPONSE_ACCEPT,
62 Self::DeleteEvent => ffi::GTK_RESPONSE_DELETE_EVENT,
63 Self::Ok => ffi::GTK_RESPONSE_OK,
64 Self::Cancel => ffi::GTK_RESPONSE_CANCEL,
65 Self::Close => ffi::GTK_RESPONSE_CLOSE,
66 Self::Yes => ffi::GTK_RESPONSE_YES,
67 Self::No => ffi::GTK_RESPONSE_NO,
68 Self::Apply => ffi::GTK_RESPONSE_APPLY,
69 Self::Help => ffi::GTK_RESPONSE_HELP,
70 Self::Other(value) => value as ffi::GtkResponseType,
71 Self::__Unknown(value) => value,
72 }
73 }
74}
75
76#[doc(hidden)]
77impl FromGlib<ffi::GtkResponseType> for ResponseType {
78 unsafe fn from_glib(value: ffi::GtkResponseType) -> Self {
79 skip_assert_initialized!();
80 match value {
81 ffi::GTK_RESPONSE_NONE => Self::None,
82 ffi::GTK_RESPONSE_REJECT => Self::Reject,
83 ffi::GTK_RESPONSE_ACCEPT => Self::Accept,
84 ffi::GTK_RESPONSE_DELETE_EVENT => Self::DeleteEvent,
85 ffi::GTK_RESPONSE_OK => Self::Ok,
86 ffi::GTK_RESPONSE_CANCEL => Self::Cancel,
87 ffi::GTK_RESPONSE_CLOSE => Self::Close,
88 ffi::GTK_RESPONSE_YES => Self::Yes,
89 ffi::GTK_RESPONSE_NO => Self::No,
90 ffi::GTK_RESPONSE_APPLY => Self::Apply,
91 ffi::GTK_RESPONSE_HELP => Self::Help,
92 value if value >= 0 && value <= ::std::u16::MAX as i32 => Self::Other(value as u16),
93 value => Self::__Unknown(value),
94 }
95 }
96}
97
98impl fmt::Display for ResponseType {
99 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
100 write!(
101 f,
102 "Self::{}",
103 match *self {
104 Self::None => "None",
105 Self::Reject => "Reject",
106 Self::Accept => "Accept",
107 Self::DeleteEvent => "DeleteEvent",
108 Self::Ok => "Ok",
109 Self::Cancel => "Cancel",
110 Self::Close => "Close",
111 Self::Yes => "Yes",
112 Self::No => "No",
113 Self::Apply => "Apply",
114 Self::Help => "Help",
115 Self::Other(_) => "Other",
116 Self::__Unknown(_) => "Unknown",
117 }
118 )
119 }
120}
121
122impl StaticType for ResponseType {
123 fn static_type() -> Type {
124 unsafe { from_glib(ffi::gtk_response_type_get_type()) }
125 }
126}
127
128impl ValueType for ResponseType {
129 type Type = Self;
130}
131
132unsafe impl<'a> FromValue<'a> for ResponseType {
133 type Checker = glib::value::GenericValueTypeChecker<Self>;
134
135 unsafe fn from_value(value: &'a glib::Value) -> Self {
136 skip_assert_initialized!();
137
138 from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
139 }
140}
141
142impl ToValue for ResponseType {
143 fn to_value(&self) -> glib::Value {
144 let mut value = glib::Value::for_value_type::<Self>();
145 unsafe {
146 glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
147 }
148 value
149 }
150
151 fn value_type(&self) -> glib::Type {
152 Self::static_type()
153 }
154}
155
156impl From<ResponseType> for glib::Value {
157 fn from(t: ResponseType) -> Self {
158 skip_assert_initialized!();
159 t.to_value()
160 }
161}