alsaseq 0.8.0

API binding for alsaseq library
Documentation
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT

use crate::{ffi, Addr, EventType, RemoveFilterFlag};
use glib::{
    prelude::*,
    signal::{connect_raw, SignalHandlerId},
    translate::*,
};
use std::boxed::Box as Box_;

glib::wrapper! {
    /// An object to express filter to remove scheduled event in queue.
    ///
    /// A [`RemoveFilter`][crate::RemoveFilter] is a GObject-derived object to express filter to remove scheduled event in
    /// queue. The call of [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()] requires the instance of object.
    ///
    /// The object wraps `struct snd_seq_remove_events` in UAPI of Linux sound subsystem.
    ///
    /// ## Properties
    ///
    ///
    /// #### `channel`
    ///  The channel of event as filter condition. This is evaluated with
    /// [`RemoveFilterFlag`][crate::RemoveFilterFlag].DEST_CHANNEL at call of [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `destination`
    ///  The destionation of event as filter condition. This is evaluated with
    /// [`RemoveFilterFlag`][crate::RemoveFilterFlag].DEST at call of [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `event-type`
    ///  The type of event as filter condition. This is evaluated with
    /// [`RemoveFilterFlag`][crate::RemoveFilterFlag].EVENT_TYPE at call of [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `flags`
    ///  The set of flags to filter events. They decide how to evaluate included data at call of
    /// [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `queue-id`
    ///  The numeric identifier of queue as filter condition. This is always evaluated at call of
    /// [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `tag`
    ///  The tag of event as filter condition. This is evaluated with
    /// [`RemoveFilterFlag`][crate::RemoveFilterFlag].TAG_MATCH at call of [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    ///
    /// Readable | Writeable
    ///
    /// # Implements
    ///
    /// [`RemoveFilterExt`][trait@crate::prelude::RemoveFilterExt], [`RemoveFilterExtManual`][trait@crate::prelude::RemoveFilterExtManual]
    #[doc(alias = "ALSASeqRemoveFilter")]
    pub struct RemoveFilter(Object<ffi::ALSASeqRemoveFilter, ffi::ALSASeqRemoveFilterClass>);

    match fn {
        type_ => || ffi::alsaseq_remove_filter_get_type(),
    }
}

impl RemoveFilter {
    pub const NONE: Option<&'static RemoveFilter> = None;

    /// Allocate and return an instance of [`RemoveFilter`][crate::RemoveFilter].
    ///
    /// # Returns
    ///
    /// An instance of [`RemoveFilter`][crate::RemoveFilter].
    #[doc(alias = "alsaseq_remove_filter_new")]
    pub fn new() -> RemoveFilter {
        unsafe { from_glib_full(ffi::alsaseq_remove_filter_new()) }
    }
}

impl Default for RemoveFilter {
    fn default() -> Self {
        Self::new()
    }
}

unsafe impl Send for RemoveFilter {}

/// Trait containing all [`struct@RemoveFilter`] methods.
///
/// # Implementors
///
/// [`RemoveFilter`][struct@crate::RemoveFilter]
pub trait RemoveFilterExt: IsA<RemoveFilter> + 'static {
    /// Refer to tick count in internal storage. The call works expectedly as long as
    /// [`flags`][struct@crate::RemoveFilter#flags] contains [`RemoveFilterFlag`][crate::RemoveFilterFlag].TICK. This is evaluated with
    /// [`RemoveFilterFlag`][crate::RemoveFilterFlag].TIME_BEFORE and [`RemoveFilterFlag`][crate::RemoveFilterFlag].TIME_AFTER at call of
    /// [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    ///
    /// # Returns
    ///
    ///
    /// ## `tick_time`
    /// The count of tick.
    #[doc(alias = "alsaseq_remove_filter_get_tick_time")]
    #[doc(alias = "get_tick_time")]
    fn tick_time(&self) -> u32 {
        unsafe {
            let mut tick_time = std::mem::MaybeUninit::uninit();
            ffi::alsaseq_remove_filter_get_tick_time(
                self.as_ref().to_glib_none().0,
                tick_time.as_mut_ptr(),
            );
            tick_time.assume_init()
        }
    }

    /// Copy tick count into internal storage. The call works expectedly as long as
    /// [`flags`][struct@crate::RemoveFilter#flags] contains [`RemoveFilterFlag`][crate::RemoveFilterFlag].TICK. This is evaluated with
    /// [`RemoveFilterFlag`][crate::RemoveFilterFlag].TIME_BEFORE and [`RemoveFilterFlag`][crate::RemoveFilterFlag].TIME_AFTER at call of
    /// [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    /// ## `tick_time`
    /// The count of tick.
    #[doc(alias = "alsaseq_remove_filter_set_tick_time")]
    fn set_tick_time(&self, tick_time: u32) {
        unsafe {
            ffi::alsaseq_remove_filter_set_tick_time(self.as_ref().to_glib_none().0, tick_time);
        }
    }

    /// The channel of event as filter condition. This is evaluated with
    /// [`RemoveFilterFlag`][crate::RemoveFilterFlag].DEST_CHANNEL at call of [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    fn channel(&self) -> u8 {
        ObjectExt::property(self.as_ref(), "channel")
    }

    /// The channel of event as filter condition. This is evaluated with
    /// [`RemoveFilterFlag`][crate::RemoveFilterFlag].DEST_CHANNEL at call of [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    fn set_channel(&self, channel: u8) {
        ObjectExt::set_property(self.as_ref(), "channel", channel)
    }

    /// The destionation of event as filter condition. This is evaluated with
    /// [`RemoveFilterFlag`][crate::RemoveFilterFlag].DEST at call of [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    fn destination(&self) -> Option<Addr> {
        ObjectExt::property(self.as_ref(), "destination")
    }

    /// The destionation of event as filter condition. This is evaluated with
    /// [`RemoveFilterFlag`][crate::RemoveFilterFlag].DEST at call of [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    fn set_destination(&self, destination: Option<&Addr>) {
        ObjectExt::set_property(self.as_ref(), "destination", destination)
    }

    /// The type of event as filter condition. This is evaluated with
    /// [`RemoveFilterFlag`][crate::RemoveFilterFlag].EVENT_TYPE at call of [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    #[doc(alias = "event-type")]
    fn event_type(&self) -> EventType {
        ObjectExt::property(self.as_ref(), "event-type")
    }

    /// The type of event as filter condition. This is evaluated with
    /// [`RemoveFilterFlag`][crate::RemoveFilterFlag].EVENT_TYPE at call of [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    #[doc(alias = "event-type")]
    fn set_event_type(&self, event_type: EventType) {
        ObjectExt::set_property(self.as_ref(), "event-type", event_type)
    }

    /// The set of flags to filter events. They decide how to evaluate included data at call of
    /// [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    fn flags(&self) -> RemoveFilterFlag {
        ObjectExt::property(self.as_ref(), "flags")
    }

    /// The set of flags to filter events. They decide how to evaluate included data at call of
    /// [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    fn set_flags(&self, flags: RemoveFilterFlag) {
        ObjectExt::set_property(self.as_ref(), "flags", flags)
    }

    /// The numeric identifier of queue as filter condition. This is always evaluated at call of
    /// [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    #[doc(alias = "queue-id")]
    fn queue_id(&self) -> u8 {
        ObjectExt::property(self.as_ref(), "queue-id")
    }

    /// The numeric identifier of queue as filter condition. This is always evaluated at call of
    /// [`UserClientExt::remove_events()`][crate::prelude::UserClientExt::remove_events()].
    #[doc(alias = "queue-id")]
    fn set_queue_id(&self, queue_id: u8) {
        ObjectExt::set_property(self.as_ref(), "queue-id", queue_id)
    }

    #[doc(alias = "channel")]
    fn connect_channel_notify<F: Fn(&Self) + Send + 'static>(&self, f: F) -> SignalHandlerId {
        unsafe extern "C" fn notify_channel_trampoline<
            P: IsA<RemoveFilter>,
            F: Fn(&P) + Send + 'static,
        >(
            this: *mut ffi::ALSASeqRemoveFilter,
            _param_spec: glib::ffi::gpointer,
            f: glib::ffi::gpointer,
        ) {
            let f: &F = &*(f as *const F);
            f(RemoveFilter::from_glib_borrow(this).unsafe_cast_ref())
        }
        unsafe {
            let f: Box_<F> = Box_::new(f);
            connect_raw(
                self.as_ptr() as *mut _,
                c"notify::channel".as_ptr() as *const _,
                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
                    notify_channel_trampoline::<Self, F> as *const (),
                )),
                Box_::into_raw(f),
            )
        }
    }

    #[doc(alias = "destination")]
    fn connect_destination_notify<F: Fn(&Self) + Send + 'static>(&self, f: F) -> SignalHandlerId {
        unsafe extern "C" fn notify_destination_trampoline<
            P: IsA<RemoveFilter>,
            F: Fn(&P) + Send + 'static,
        >(
            this: *mut ffi::ALSASeqRemoveFilter,
            _param_spec: glib::ffi::gpointer,
            f: glib::ffi::gpointer,
        ) {
            let f: &F = &*(f as *const F);
            f(RemoveFilter::from_glib_borrow(this).unsafe_cast_ref())
        }
        unsafe {
            let f: Box_<F> = Box_::new(f);
            connect_raw(
                self.as_ptr() as *mut _,
                c"notify::destination".as_ptr() as *const _,
                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
                    notify_destination_trampoline::<Self, F> as *const (),
                )),
                Box_::into_raw(f),
            )
        }
    }

    #[doc(alias = "event-type")]
    fn connect_event_type_notify<F: Fn(&Self) + Send + 'static>(&self, f: F) -> SignalHandlerId {
        unsafe extern "C" fn notify_event_type_trampoline<
            P: IsA<RemoveFilter>,
            F: Fn(&P) + Send + 'static,
        >(
            this: *mut ffi::ALSASeqRemoveFilter,
            _param_spec: glib::ffi::gpointer,
            f: glib::ffi::gpointer,
        ) {
            let f: &F = &*(f as *const F);
            f(RemoveFilter::from_glib_borrow(this).unsafe_cast_ref())
        }
        unsafe {
            let f: Box_<F> = Box_::new(f);
            connect_raw(
                self.as_ptr() as *mut _,
                c"notify::event-type".as_ptr() as *const _,
                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
                    notify_event_type_trampoline::<Self, F> as *const (),
                )),
                Box_::into_raw(f),
            )
        }
    }

    #[doc(alias = "flags")]
    fn connect_flags_notify<F: Fn(&Self) + Send + 'static>(&self, f: F) -> SignalHandlerId {
        unsafe extern "C" fn notify_flags_trampoline<
            P: IsA<RemoveFilter>,
            F: Fn(&P) + Send + 'static,
        >(
            this: *mut ffi::ALSASeqRemoveFilter,
            _param_spec: glib::ffi::gpointer,
            f: glib::ffi::gpointer,
        ) {
            let f: &F = &*(f as *const F);
            f(RemoveFilter::from_glib_borrow(this).unsafe_cast_ref())
        }
        unsafe {
            let f: Box_<F> = Box_::new(f);
            connect_raw(
                self.as_ptr() as *mut _,
                c"notify::flags".as_ptr() as *const _,
                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
                    notify_flags_trampoline::<Self, F> as *const (),
                )),
                Box_::into_raw(f),
            )
        }
    }

    #[doc(alias = "queue-id")]
    fn connect_queue_id_notify<F: Fn(&Self) + Send + 'static>(&self, f: F) -> SignalHandlerId {
        unsafe extern "C" fn notify_queue_id_trampoline<
            P: IsA<RemoveFilter>,
            F: Fn(&P) + Send + 'static,
        >(
            this: *mut ffi::ALSASeqRemoveFilter,
            _param_spec: glib::ffi::gpointer,
            f: glib::ffi::gpointer,
        ) {
            let f: &F = &*(f as *const F);
            f(RemoveFilter::from_glib_borrow(this).unsafe_cast_ref())
        }
        unsafe {
            let f: Box_<F> = Box_::new(f);
            connect_raw(
                self.as_ptr() as *mut _,
                c"notify::queue-id".as_ptr() as *const _,
                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
                    notify_queue_id_trampoline::<Self, F> as *const (),
                )),
                Box_::into_raw(f),
            )
        }
    }
}

impl<O: IsA<RemoveFilter>> RemoveFilterExt for O {}