mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-04-01 17:15:28 +00:00
begin local actions implementation
This commit is contained in:
parent
9398a835cd
commit
9ff32a3419
19 changed files with 402 additions and 226 deletions
|
|
@ -1,47 +0,0 @@
|
|||
mod close;
|
||||
mod debug;
|
||||
|
||||
use close::Close;
|
||||
use debug::Debug;
|
||||
|
||||
use gtk::{
|
||||
gio::SimpleActionGroup,
|
||||
prelude::{IsA, WidgetExt},
|
||||
Window,
|
||||
};
|
||||
|
||||
pub struct Action {
|
||||
// Actions
|
||||
close: Close,
|
||||
debug: Debug,
|
||||
// Group
|
||||
gobject: SimpleActionGroup,
|
||||
}
|
||||
|
||||
impl Action {
|
||||
// Constructors
|
||||
|
||||
/// Create **activated** [SimpleAction](https://docs.gtk.org/gio/class.SimpleAction.html) set
|
||||
/// with new [SimpleActionGroup](https://docs.gtk.org/gio/class.SimpleActionGroup.html)
|
||||
/// for given [Window](https://docs.gtk.org/gtk4/class.Window.html)
|
||||
/// * useful for object-oriented work with GTK `detailed_name`, e.g. on GTK [Menu](https://docs.gtk.org/gio/class.Menu.html) build
|
||||
/// * this implementation also encapsulates `GObject` to prevent unexpected assignments
|
||||
/// * children actions implemented as wrapper also, that extend default [Variant](https://docs.gtk.org/glib/struct.Variant.html) features, etc
|
||||
pub fn new_for(window: &(impl IsA<Window> + WidgetExt)) -> Self {
|
||||
// Init group
|
||||
let gobject = SimpleActionGroup::new();
|
||||
|
||||
// Add group to window
|
||||
window.insert_action_group(crate::action::APP_BROWSER_WIDGET, Some(&gobject));
|
||||
|
||||
// Init actions
|
||||
let close = Close::new_for(&gobject, window.clone());
|
||||
let debug = Debug::new_for(&gobject, window.clone());
|
||||
|
||||
Self {
|
||||
close,
|
||||
debug,
|
||||
gobject,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
use gtk::{
|
||||
gio::{SimpleAction, SimpleActionGroup},
|
||||
prelude::{ActionMapExt, GtkWindowExt, IsA},
|
||||
Window,
|
||||
};
|
||||
|
||||
pub struct Close {
|
||||
gobject: SimpleAction,
|
||||
}
|
||||
|
||||
impl Close {
|
||||
// Constructors
|
||||
|
||||
/// Create new [SimpleAction](https://docs.gtk.org/gio/class.SimpleAction.html)
|
||||
/// for given [SimpleActionGroup](https://docs.gtk.org/gio/class.SimpleActionGroup.html)
|
||||
/// and [Window](https://docs.gtk.org/gtk4/class.Window.html)
|
||||
/// * this constructor **activate** default feature
|
||||
pub fn new_for(group: &SimpleActionGroup, window: impl IsA<Window>) -> Self {
|
||||
// Get action config
|
||||
let (_group_name, action_name, parameter_type, _accels) =
|
||||
crate::action::APP_BROWSER_WIDGET_CLOSE;
|
||||
|
||||
// Init action GObject
|
||||
let gobject = SimpleAction::new(&action_name, parameter_type);
|
||||
|
||||
// Add action to given group
|
||||
group.add_action(&gobject);
|
||||
|
||||
// Connect default feature on activate
|
||||
gobject.connect_activate(move |_, _| {
|
||||
window.close();
|
||||
});
|
||||
|
||||
// Done
|
||||
Self { gobject }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
use gtk::{
|
||||
gio::{SimpleAction, SimpleActionGroup},
|
||||
prelude::{ActionMapExt, GtkWindowExt, IsA},
|
||||
Window,
|
||||
};
|
||||
|
||||
pub struct Debug {
|
||||
gobject: SimpleAction,
|
||||
}
|
||||
|
||||
impl Debug {
|
||||
// Constructors
|
||||
|
||||
/// Create new [SimpleAction](https://docs.gtk.org/gio/class.SimpleAction.html)
|
||||
/// for given [SimpleActionGroup](https://docs.gtk.org/gio/class.SimpleActionGroup.html)
|
||||
/// and [Window](https://docs.gtk.org/gtk4/class.Window.html)
|
||||
/// * this constructor **activate** default feature
|
||||
pub fn new_for(group: &SimpleActionGroup, window: impl IsA<Window>) -> Self {
|
||||
// Get action config
|
||||
let (_group_name, action_name, parameter_type, _accels) =
|
||||
crate::action::APP_BROWSER_WIDGET_DEBUG;
|
||||
|
||||
// Init action GObject
|
||||
let gobject = SimpleAction::new(&action_name, parameter_type);
|
||||
|
||||
// Add action to given group
|
||||
group.add_action(&gobject);
|
||||
|
||||
// Connect default feature on activate
|
||||
gobject.connect_activate(move |_, _| {
|
||||
window.emit_enable_debugging(true);
|
||||
});
|
||||
|
||||
// Done
|
||||
Self { gobject }
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue