1use glib::translate::{from_glib, FromGlib, ToGlib, ToGlibPtr, ToGlibPtrMut};
2use glib::value::{FromValue, FromValueOptional, SetValue};
3use glib::{StaticType, Type, Value};
4use gobject_sys;
5use gtk_sys;
6use std::fmt;
7
8#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
9pub enum ResponseType {
10 None,
11 Reject,
12 Accept,
13 DeleteEvent,
14 Ok,
15 Cancel,
16 Close,
17 Yes,
18 No,
19 Apply,
20 Help,
21 Other(u16),
22 #[doc(hidden)]
23 __Unknown(i32),
24}
25
26#[doc(hidden)]
27impl ToGlib for ResponseType {
28 type GlibType = gtk_sys::GtkResponseType;
29
30 fn to_glib(&self) -> gtk_sys::GtkResponseType {
31 match *self {
32 ResponseType::None => gtk_sys::GTK_RESPONSE_NONE,
33 ResponseType::Reject => gtk_sys::GTK_RESPONSE_REJECT,
34 ResponseType::Accept => gtk_sys::GTK_RESPONSE_ACCEPT,
35 ResponseType::DeleteEvent => gtk_sys::GTK_RESPONSE_DELETE_EVENT,
36 ResponseType::Ok => gtk_sys::GTK_RESPONSE_OK,
37 ResponseType::Cancel => gtk_sys::GTK_RESPONSE_CANCEL,
38 ResponseType::Close => gtk_sys::GTK_RESPONSE_CLOSE,
39 ResponseType::Yes => gtk_sys::GTK_RESPONSE_YES,
40 ResponseType::No => gtk_sys::GTK_RESPONSE_NO,
41 ResponseType::Apply => gtk_sys::GTK_RESPONSE_APPLY,
42 ResponseType::Help => gtk_sys::GTK_RESPONSE_HELP,
43 ResponseType::Other(value) => value as gtk_sys::GtkResponseType,
44 ResponseType::__Unknown(value) => value,
45 }
46 }
47}
48
49#[doc(hidden)]
50impl FromGlib<gtk_sys::GtkResponseType> for ResponseType {
51 fn from_glib(value: gtk_sys::GtkResponseType) -> Self {
52 skip_assert_initialized!();
53 match value {
54 -1 => ResponseType::None,
55 -2 => ResponseType::Reject,
56 -3 => ResponseType::Accept,
57 -4 => ResponseType::DeleteEvent,
58 -5 => ResponseType::Ok,
59 -6 => ResponseType::Cancel,
60 -7 => ResponseType::Close,
61 -8 => ResponseType::Yes,
62 -9 => ResponseType::No,
63 -10 => ResponseType::Apply,
64 -11 => ResponseType::Help,
65 value if value >= 0 && value <= ::std::u16::MAX as i32 => {
66 ResponseType::Other(value as u16)
67 }
68 value => ResponseType::__Unknown(value),
69 }
70 }
71}
72
73impl fmt::Display for ResponseType {
74 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
75 write!(
76 f,
77 "ResponseType::{}",
78 match *self {
79 ResponseType::None => "None",
80 ResponseType::Reject => "Reject",
81 ResponseType::Accept => "Accept",
82 ResponseType::DeleteEvent => "DeleteEvent",
83 ResponseType::Ok => "Ok",
84 ResponseType::Cancel => "Cancel",
85 ResponseType::Close => "Close",
86 ResponseType::Yes => "Yes",
87 ResponseType::No => "No",
88 ResponseType::Apply => "Apply",
89 ResponseType::Help => "Help",
90 ResponseType::Other(_) => "Other",
91 ResponseType::__Unknown(_) => "Unknown",
92 }
93 )
94 }
95}
96
97impl StaticType for ResponseType {
98 fn static_type() -> Type {
99 unsafe { from_glib(gtk_sys::gtk_response_type_get_type()) }
100 }
101}
102
103impl<'a> FromValueOptional<'a> for ResponseType {
104 unsafe fn from_value_optional(value: &Value) -> Option<Self> {
105 Some(FromValue::from_value(value))
106 }
107}
108
109impl<'a> FromValue<'a> for ResponseType {
110 unsafe fn from_value(value: &Value) -> Self {
111 from_glib(gobject_sys::g_value_get_enum(value.to_glib_none().0))
112 }
113}
114
115impl SetValue for ResponseType {
116 unsafe fn set_value(value: &mut Value, this: &Self) {
117 gobject_sys::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
118 }
119}