mirror of
https://github.com/johrpan/musicus.git
synced 2025-10-26 19:57:25 +01:00
Go back to sidebar when collapsed
This commit is contained in:
parent
6d66317687
commit
c8a473b9bb
5 changed files with 20 additions and 6 deletions
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!-- Generated with glade 3.38.1 -->
|
<!-- Generated with glade 3.38.1 -->
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="3.22"/>
|
<requires lib="gtk+" version="3.22" />
|
||||||
<requires lib="libhandy" version="1.0"/>
|
<requires lib="libhandy" version="1.0" />
|
||||||
<object class="GtkBox" id="empty_screen">
|
<object class="GtkBox" id="empty_screen">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can-focus">False</property>
|
<property name="can-focus">False</property>
|
||||||
|
|
@ -12,7 +12,6 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can-focus">False</property>
|
<property name="can-focus">False</property>
|
||||||
<property name="hexpand">True</property>
|
<property name="hexpand">True</property>
|
||||||
<property name="title" translatable="yes">Select a recording</property>
|
|
||||||
<property name="show-close-button">True</property>
|
<property name="show-close-button">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
|
@ -95,7 +94,6 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can-focus">False</property>
|
<property name="can-focus">False</property>
|
||||||
<property name="visible-child">sidebar_box</property>
|
<property name="visible-child">sidebar_box</property>
|
||||||
<property name="can-swipe-back">True</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox" id="sidebar_box">
|
<object class="GtkBox" id="sidebar_box">
|
||||||
<property name="width-request">250</property>
|
<property name="width-request">250</property>
|
||||||
|
|
@ -107,6 +105,7 @@
|
||||||
<object class="HdyHeaderBar">
|
<object class="HdyHeaderBar">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can-focus">False</property>
|
<property name="can-focus">False</property>
|
||||||
|
<property name="title" translatable="yes">Select a recording</property>
|
||||||
<property name="show-close-button" bind-source="leaflet" bind-property="folded" bind-flags="sync-create">False</property>
|
<property name="show-close-button" bind-source="leaflet" bind-property="folded" bind-flags="sync-create">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="add_button">
|
<object class="GtkButton" id="add_button">
|
||||||
|
|
@ -140,7 +139,7 @@
|
||||||
<property name="can-focus">False</property>
|
<property name="can-focus">False</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<style>
|
<style>
|
||||||
<class name="sidebar"/>
|
<class name="sidebar" />
|
||||||
</style>
|
</style>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
|
|
||||||
|
|
@ -233,7 +233,6 @@
|
||||||
<object class="HdyLeaflet" id="leaflet">
|
<object class="HdyLeaflet" id="leaflet">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can-focus">False</property>
|
<property name="can-focus">False</property>
|
||||||
<property name="can-swipe-back">True</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox" id="sidebar_box">
|
<object class="GtkBox" id="sidebar_box">
|
||||||
<property name="width-request">250</property>
|
<property name="width-request">250</property>
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,10 @@ impl RecordingSelector {
|
||||||
let navigator = Navigator::new(&empty_screen);
|
let navigator = Navigator::new(&empty_screen);
|
||||||
leaflet.add(&navigator.widget);
|
leaflet.add(&navigator.widget);
|
||||||
|
|
||||||
|
navigator.set_back_cb(clone!(@strong leaflet, @strong sidebar_box => move || {
|
||||||
|
leaflet.set_visible_child(&sidebar_box);
|
||||||
|
}));
|
||||||
|
|
||||||
let result = Rc::new(Self {
|
let result = Rc::new(Self {
|
||||||
backend: backend,
|
backend: backend,
|
||||||
window: window,
|
window: window,
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ pub struct Navigator {
|
||||||
pub widget: gtk::Stack,
|
pub widget: gtk::Stack,
|
||||||
screens: RefCell<Vec<Rc<dyn NavigatorScreen>>>,
|
screens: RefCell<Vec<Rc<dyn NavigatorScreen>>>,
|
||||||
old_screens: RefCell<Vec<Rc<dyn NavigatorScreen>>>,
|
old_screens: RefCell<Vec<Rc<dyn NavigatorScreen>>>,
|
||||||
|
back_cb: RefCell<Option<Box<dyn Fn() -> ()>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Navigator {
|
impl Navigator {
|
||||||
|
|
@ -30,6 +31,7 @@ impl Navigator {
|
||||||
widget,
|
widget,
|
||||||
screens: RefCell::new(Vec::new()),
|
screens: RefCell::new(Vec::new()),
|
||||||
old_screens: RefCell::new(Vec::new()),
|
old_screens: RefCell::new(Vec::new()),
|
||||||
|
back_cb: RefCell::new(None),
|
||||||
});
|
});
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
|
|
@ -46,6 +48,10 @@ impl Navigator {
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_back_cb<F>(&self, cb: F) where F: Fn() -> () + 'static {
|
||||||
|
self.back_cb.replace(Some(Box::new(cb)));
|
||||||
|
}
|
||||||
|
|
||||||
pub fn push<S>(self: Rc<Self>, screen: Rc<S>)
|
pub fn push<S>(self: Rc<Self>, screen: Rc<S>)
|
||||||
where
|
where
|
||||||
S: NavigatorScreen + 'static,
|
S: NavigatorScreen + 'static,
|
||||||
|
|
@ -80,6 +86,9 @@ impl Navigator {
|
||||||
screen.attach_navigator(self.clone());
|
screen.attach_navigator(self.clone());
|
||||||
} else {
|
} else {
|
||||||
self.widget.set_visible_child_name("empty_screen");
|
self.widget.set_visible_child_name("empty_screen");
|
||||||
|
if let Some(cb) = &*self.back_cb.borrow() {
|
||||||
|
cb()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !self.widget.get_transition_running() {
|
if !self.widget.get_transition_running() {
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,9 @@ impl Window {
|
||||||
|
|
||||||
let poe_list = PoeList::new(backend.clone());
|
let poe_list = PoeList::new(backend.clone());
|
||||||
let navigator = Navigator::new(&empty_screen);
|
let navigator = Navigator::new(&empty_screen);
|
||||||
|
navigator.set_back_cb(clone!(@strong leaflet, @strong sidebar_box => move || {
|
||||||
|
leaflet.set_visible_child(&sidebar_box);
|
||||||
|
}));
|
||||||
|
|
||||||
let result = Rc::new(Self {
|
let result = Rc::new(Self {
|
||||||
backend,
|
backend,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue