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