1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
use glib::translate::{from_glib, FromGlib, ToGlib, ToGlibPtr, ToGlibPtrMut};
use glib::value::{FromValue, FromValueOptional, SetValue};
use glib::{StaticType, Type, Value};
use gobject_sys;
use gtk_sys;
use std::fmt;

#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub enum ResponseType {
    None,
    Reject,
    Accept,
    DeleteEvent,
    Ok,
    Cancel,
    Close,
    Yes,
    No,
    Apply,
    Help,
    Other(u16),
    #[doc(hidden)]
    __Unknown(i32),
}

#[doc(hidden)]
impl ToGlib for ResponseType {
    type GlibType = gtk_sys::GtkResponseType;

    fn to_glib(&self) -> gtk_sys::GtkResponseType {
        match *self {
            ResponseType::None => gtk_sys::GTK_RESPONSE_NONE,
            ResponseType::Reject => gtk_sys::GTK_RESPONSE_REJECT,
            ResponseType::Accept => gtk_sys::GTK_RESPONSE_ACCEPT,
            ResponseType::DeleteEvent => gtk_sys::GTK_RESPONSE_DELETE_EVENT,
            ResponseType::Ok => gtk_sys::GTK_RESPONSE_OK,
            ResponseType::Cancel => gtk_sys::GTK_RESPONSE_CANCEL,
            ResponseType::Close => gtk_sys::GTK_RESPONSE_CLOSE,
            ResponseType::Yes => gtk_sys::GTK_RESPONSE_YES,
            ResponseType::No => gtk_sys::GTK_RESPONSE_NO,
            ResponseType::Apply => gtk_sys::GTK_RESPONSE_APPLY,
            ResponseType::Help => gtk_sys::GTK_RESPONSE_HELP,
            ResponseType::Other(value) => value as gtk_sys::GtkResponseType,
            ResponseType::__Unknown(value) => value,
        }
    }
}

#[doc(hidden)]
impl FromGlib<gtk_sys::GtkResponseType> for ResponseType {
    fn from_glib(value: gtk_sys::GtkResponseType) -> Self {
        skip_assert_initialized!();
        match value {
            -1 => ResponseType::None,
            -2 => ResponseType::Reject,
            -3 => ResponseType::Accept,
            -4 => ResponseType::DeleteEvent,
            -5 => ResponseType::Ok,
            -6 => ResponseType::Cancel,
            -7 => ResponseType::Close,
            -8 => ResponseType::Yes,
            -9 => ResponseType::No,
            -10 => ResponseType::Apply,
            -11 => ResponseType::Help,
            value if value >= 0 && value <= ::std::u16::MAX as i32 => {
                ResponseType::Other(value as u16)
            }
            value => ResponseType::__Unknown(value),
        }
    }
}

impl fmt::Display for ResponseType {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(
            f,
            "ResponseType::{}",
            match *self {
                ResponseType::None => "None",
                ResponseType::Reject => "Reject",
                ResponseType::Accept => "Accept",
                ResponseType::DeleteEvent => "DeleteEvent",
                ResponseType::Ok => "Ok",
                ResponseType::Cancel => "Cancel",
                ResponseType::Close => "Close",
                ResponseType::Yes => "Yes",
                ResponseType::No => "No",
                ResponseType::Apply => "Apply",
                ResponseType::Help => "Help",
                ResponseType::Other(_) => "Other",
                ResponseType::__Unknown(_) => "Unknown",
            }
        )
    }
}

impl StaticType for ResponseType {
    fn static_type() -> Type {
        unsafe { from_glib(gtk_sys::gtk_response_type_get_type()) }
    }
}

impl<'a> FromValueOptional<'a> for ResponseType {
    unsafe fn from_value_optional(value: &Value) -> Option<Self> {
        Some(FromValue::from_value(value))
    }
}

impl<'a> FromValue<'a> for ResponseType {
    unsafe fn from_value(value: &Value) -> Self {
        from_glib(gobject_sys::g_value_get_enum(value.to_glib_none().0))
    }
}

impl SetValue for ResponseType {
    unsafe fn set_value(value: &mut Value, this: &Self) {
        gobject_sys::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
    }
}