1 use glib::translate::{from_glib, FromGlib, ToGlib, ToGlibPtr, ToGlibPtrMut};
2 use glib::value::{FromValue, FromValueOptional, SetValue};
3 use glib::{StaticType, Type, Value};
4 use gobject_sys;
5 use gtk_sys;
6 use std::fmt;
7 
8 #[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
9 pub 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)]
27 impl ToGlib for ResponseType {
28     type GlibType = gtk_sys::GtkResponseType;
29 
to_glib(&self) -> gtk_sys::GtkResponseType30     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)]
50 impl FromGlib<gtk_sys::GtkResponseType> for ResponseType {
from_glib(value: gtk_sys::GtkResponseType) -> Self51     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 
73 impl fmt::Display for ResponseType {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result74     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 
97 impl StaticType for ResponseType {
static_type() -> Type98     fn static_type() -> Type {
99         unsafe { from_glib(gtk_sys::gtk_response_type_get_type()) }
100     }
101 }
102 
103 impl<'a> FromValueOptional<'a> for ResponseType {
from_value_optional(value: &Value) -> Option<Self>104     unsafe fn from_value_optional(value: &Value) -> Option<Self> {
105         Some(FromValue::from_value(value))
106     }
107 }
108 
109 impl<'a> FromValue<'a> for ResponseType {
from_value(value: &Value) -> Self110     unsafe fn from_value(value: &Value) -> Self {
111         from_glib(gobject_sys::g_value_get_enum(value.to_glib_none().0))
112     }
113 }
114 
115 impl SetValue for ResponseType {
set_value(value: &mut Value, this: &Self)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 }
120