grx/gtk_components/
view_switcher_bar.rs

1// SPDX-License-Identifier: GPL-3.0-or-later
2
3//! A bar that allows to switch between views.
4
5use std::rc::Rc;
6
7use glib::prelude::Cast;
8use grx_macros::gtk_component;
9use gtk::glib;
10
11use crate::{new_gc, props, view_stack::ViewStack, ComponentExt};
12
13use super::gtk_props::apply;
14
15#[props]
16#[derive(Default, Debug)]
17pub struct Props {
18    pub stack: Option<Rc<ViewStack>>,
19}
20
21pub fn view_switcher_bar(mut props: Props) -> Rc<ViewSwitcherBar> {
22    let widget = libadwaita::ViewSwitcherBar::builder().build();
23    widget.set_reveal(true);
24    if let Some(stack) = &props.stack {
25        let stack: Rc<gtk::Widget> = stack.clone().inner().downcast().unwrap();
26        widget.set_stack(stack.downcast_ref());
27    }
28
29    let widget: gtk::Widget = widget.upcast();
30    let comp = new_gc!(ViewSwitcherBar { widget, props });
31    apply(comp.clone());
32    comp
33}
34
35#[gtk_component(gtk::Widget)]
36#[derive(Debug)]
37pub struct ViewSwitcherBar {}