Delete stack layout, instead only show one listing

This commit is contained in:
Julian Mutter 2024-02-07 20:48:34 +01:00
parent 8343fb80dc
commit fc61870b7e

View File

@ -1,5 +1,3 @@
use chrono::Utc;
use gtk::prelude::*;
use relm4::{
@ -23,14 +21,12 @@ pub struct AppModel {
database: Database,
mcdu: Controller<McduModel>,
sheets_and_files_listing: Controller<SheetListingModel>,
new_files_listing: Controller<SheetListingModel>,
}
#[derive(Debug)]
pub enum AppInput {
SearchStarted(String),
NewFilesSheetPressed(SheetModelType),
SheetsAndFilesSheetPressed(SheetModelType),
SheetPressed(SheetModelType),
}
#[relm4::component(pub, async)]
@ -52,23 +48,10 @@ impl AsyncComponent for AppModel {
gtk::Box {
set_orientation: gtk::Orientation::Vertical,
set_hexpand: true,
#[name = "stack_switcher"]
gtk::StackSwitcher {
set_stack: Some(&stack),
set_margin_all: 10,
},
#[name = "stack"]
gtk::Stack {
add_titled[None, "Sheets & Files"]= &gtk::ScrolledWindow {
gtk::ScrolledWindow {
model.sheets_and_files_listing.widget(),
set_vexpand: true,
set_hexpand: true,
},
add_titled[None, "New Files"]= &gtk::ScrolledWindow {
model.new_files_listing.widget(),
set_vexpand: true,
set_hexpand: true,
},
},
},
model.mcdu.widget(),
@ -89,44 +72,31 @@ impl AsyncComponent for AppModel {
McduOutput::SearchStarted(query) => AppInput::SearchStarted(query),
});
let mut new_files: Vec<SheetModelType> = init_data
.orphans
.iter()
.map(|orphan| SheetModelType::Orphan {
orphan: orphan.clone(),
})
.collect();
new_files.sort_by(|a, b| a.cmp(b).reverse());
let new_files_clone_iter = init_data
let mut orphan_files: Vec<SheetModelType> = init_data
.orphans
.into_iter()
.map(|orphan| SheetModelType::Orphan { orphan });
.map(|orphan| SheetModelType::Orphan { orphan })
.collect();
orphan_files.sort_by(|a, b| a.cmp(b).reverse());
let mut sheets_and_files: Vec<SheetModelType> = init_data
.sheets
.into_iter()
.map(|sheet| SheetModelType::Sheet { sheet })
.chain(new_files_clone_iter)
.chain(orphan_files)
.collect();
sheets_and_files.sort_by(|a, b| a.cmp(b).reverse());
let sheets_and_files_listing = SheetListingModel::builder()
.launch(sheets_and_files)
.forward(sender.input_sender(), |response| {
AppInput::SheetsAndFilesSheetPressed(response.sheet_model_type)
});
let new_files_listing = SheetListingModel::builder()
.launch(new_files)
.forward(sender.input_sender(), |response| {
AppInput::NewFilesSheetPressed(response.sheet_model_type)
AppInput::SheetPressed(response.sheet_model_type)
});
let model = AppModel {
database: init_data.database,
mcdu,
sheets_and_files_listing,
new_files_listing,
};
let widgets = view_output!();
@ -145,12 +115,8 @@ impl AsyncComponent for AppModel {
AppInput::SearchStarted(query) => {
self.sheets_and_files_listing
.emit(SheetListingInput::Query(query.clone()));
self.new_files_listing.emit(SheetListingInput::Query(query));
}
AppInput::NewFilesSheetPressed(_) => {
// TODO
}
AppInput::SheetsAndFilesSheetPressed(sheet_model_type) => {
AppInput::SheetPressed(sheet_model_type) => {
opener::open(sheet_model_type.get_path()).unwrap();
match sheet_model_type {
SheetModelType::Orphan { mut orphan } => {