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
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT

use glib::object::Cast;
use glib::object::IsA;
use glib::signal::connect_raw;
use glib::signal::SignalHandlerId;
use glib::translate::*;
use glib_sys;
use gtk_sys;
use std::boxed::Box as Box_;
use std::fmt;
use std::mem::transmute;
use Orientation;

glib_wrapper! {
    /// The `Orientable` interface is implemented by all widgets that can be
    /// oriented horizontally or vertically. Historically, such widgets have been
    /// realized as subclasses of a common base class (e.g `Box`/`HBox`/`VBox`
    /// or `Scale`/`HScale`/`VScale`). `Orientable` is more flexible in that
    /// it allows the orientation to be changed at runtime, allowing the widgets
    /// to “flip”.
    ///
    /// `Orientable` was introduced in GTK+ 2.16.
    ///
    /// # Implements
    ///
    /// [`OrientableExt`](trait.OrientableExt.html)
    pub struct Orientable(Interface<gtk_sys::GtkOrientable>);

    match fn {
        get_type => || gtk_sys::gtk_orientable_get_type(),
    }
}

pub const NONE_ORIENTABLE: Option<&Orientable> = None;

/// Trait containing all `Orientable` methods.
///
/// # Implementors
///
/// [`AppChooserWidget`](struct.AppChooserWidget.html), [`Box`](struct.Box.html), [`ButtonBox`](struct.ButtonBox.html), [`CellAreaBox`](struct.CellAreaBox.html), [`CellRendererProgress`](struct.CellRendererProgress.html), [`CellView`](struct.CellView.html), [`ColorChooserWidget`](struct.ColorChooserWidget.html), [`FileChooserButton`](struct.FileChooserButton.html), [`FileChooserWidget`](struct.FileChooserWidget.html), [`FlowBox`](struct.FlowBox.html), [`FontChooserWidget`](struct.FontChooserWidget.html), [`Grid`](struct.Grid.html), [`InfoBar`](struct.InfoBar.html), [`LevelBar`](struct.LevelBar.html), [`Orientable`](struct.Orientable.html), [`Paned`](struct.Paned.html), [`ProgressBar`](struct.ProgressBar.html), [`Range`](struct.Range.html), [`RecentChooserWidget`](struct.RecentChooserWidget.html), [`ScaleButton`](struct.ScaleButton.html), [`Scale`](struct.Scale.html), [`Scrollbar`](struct.Scrollbar.html), [`Separator`](struct.Separator.html), [`ShortcutLabel`](struct.ShortcutLabel.html), [`ShortcutsGroup`](struct.ShortcutsGroup.html), [`ShortcutsSection`](struct.ShortcutsSection.html), [`ShortcutsShortcut`](struct.ShortcutsShortcut.html), [`SpinButton`](struct.SpinButton.html), [`StackSwitcher`](struct.StackSwitcher.html), [`Statusbar`](struct.Statusbar.html), [`ToolPalette`](struct.ToolPalette.html), [`Toolbar`](struct.Toolbar.html), [`VolumeButton`](struct.VolumeButton.html)
pub trait OrientableExt: 'static {
    /// Retrieves the orientation of the `self`.
    ///
    /// # Returns
    ///
    /// the orientation of the `self`.
    fn get_orientation(&self) -> Orientation;

    /// Sets the orientation of the `self`.
    /// ## `orientation`
    /// the orientable’s new orientation.
    fn set_orientation(&self, orientation: Orientation);

    fn connect_property_orientation_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
}

impl<O: IsA<Orientable>> OrientableExt for O {
    fn get_orientation(&self) -> Orientation {
        unsafe {
            from_glib(gtk_sys::gtk_orientable_get_orientation(
                self.as_ref().to_glib_none().0,
            ))
        }
    }

    fn set_orientation(&self, orientation: Orientation) {
        unsafe {
            gtk_sys::gtk_orientable_set_orientation(
                self.as_ref().to_glib_none().0,
                orientation.to_glib(),
            );
        }
    }

    fn connect_property_orientation_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
        unsafe extern "C" fn notify_orientation_trampoline<P, F: Fn(&P) + 'static>(
            this: *mut gtk_sys::GtkOrientable,
            _param_spec: glib_sys::gpointer,
            f: glib_sys::gpointer,
        ) where
            P: IsA<Orientable>,
        {
            let f: &F = &*(f as *const F);
            f(&Orientable::from_glib_borrow(this).unsafe_cast_ref())
        }
        unsafe {
            let f: Box_<F> = Box_::new(f);
            connect_raw(
                self.as_ptr() as *mut _,
                b"notify::orientation\0".as_ptr() as *const _,
                Some(transmute::<_, unsafe extern "C" fn()>(
                    notify_orientation_trampoline::<Self, F> as *const (),
                )),
                Box_::into_raw(f),
            )
        }
    }
}

impl fmt::Display for Orientable {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "Orientable")
    }
}