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