picking projects key nav and scrollable
Dependencies
- [2]
SASAN2XCuse nav-scrollable - [3]
LFEMJYYDstart of to_record selection - [4]
UTDTZCTXpull+push status, add info reports - [5]
XQTT6NDFrespect .ignore in file watch - [6]
EIHMXSDRmv crate iced_expl_widget to inflorescence_iced_widget - [7]
YRGDFHABproject dir picker - [8]
LPSUBGUBadd projects picker - [9]
MORKDJUEuse allowed actions binding for key subs - [10]
5BAPU7K6dir picker key navigation - [11]
CULHFNIVadd error report view - [12]
WAOGSCOJvery nice refactor, wip adding channels logs - [13]
NWJD6VM6mv libflowers libflorescence - [14]
2SLTGWP6add change files diffs to-record selection - [15]
3XRG4BB6rewritten nav-scrollable! - [16]
7WCB5YQJrefactor msgs and modules - [17]
OPXFZKEBview tests setup - [18]
AZ5D2LQUallow to set record description - [19]
23SFYK4Qbig view refactor into a new crate - [20]
AMPZ2BXKshow changed files diffs (only Edit atm) - [*]
EJPSD5XOshared allowed actions conditions between update and view - [*]
6YZAVBWUInitial commit
Change contents
- replacement in inflorescence_view/src/view.rs at line 9
IndexSet, Job, Log, ManagingRepoSubState, ReadyState, RecordChanges,IndexSet, Job, Log, ManagingRepoSubState, PickingProjectSelection,ReadyState, RecordChanges, - edit in inflorescence_view/src/view.rs at line 90
selection,projects_nav, - replacement in inflorescence_view/src/view.rs at line 98
.on_press(Msg::PickNewProject)),.on_press(Msg::PickNewProject).class(if matches!(selection,PickingProjectSelection::FindOrCreate) {theme::Button::Selected} else {theme::Button::Normal},)), - replacement in inflorescence_view/src/view.rs at line 113
el(column(projects.iter().map(|store::Project {last_closed_time: _,path,}| {el(button(text(format!("{}", path.to_string_lossy()))).on_press_with(|| Msg::OpenProject(path.clone())))},))),el(nav_scrollable(projects_nav,projects.iter().enumerate().map(|(ix, store::Project {last_closed_time: _,path,})| {el(button(text(format!("{}", path.to_string_lossy()))).on_press_with(|| Msg::OpenProject(path.clone())).class(if matches!(selection,PickingProjectSelection::Existing { ix: selection } if *selection == ix) {theme::Button::Selected} else {theme::Button::Normal},))},),).class(if matches!(selection, PickingProjectSelection::Existing { .. }) {theme::Scrollable::Selected} else {theme::Scrollable::Normal}).width(Length::Fill).height(Length::Fill)), - edit in inflorescence_model/src/model.rs at line 51
pub selection: PickingProjectSelection,pub projects_nav: nav_scrollable::State, - edit in inflorescence_model/src/model.rs at line 55
#[derive(Debug, Clone, Copy, Default)]pub enum PickingProjectSelection {#[default]FindOrCreate,Existing {ix: usize,},} - edit in inflorescence_model/src/action.rs at line 249
is_blocking: _, - edit in inflorescence_model/src/action.rs at line 250
is_blocking: _,selection: _,projects_nav: _, - edit in inflorescence_model/src/action.rs at line 254
let mut actions = vec![];let ma = &mut actions; - replacement in inflorescence_model/src/action.rs at line 259
vec![down(), up()]} else {vec![]push(|| confirm("Confirm selection"), ma);push(down, ma);push(up, ma); - edit in inflorescence_model/src/action.rs at line 263
actions - replacement in inflorescence/src/main.rs at line 11[5.372]→[7.3609296:3609349](∅→∅),[5.372]→[4.6637:6714](∅→∅),[6.937]→[4.6637:6714](∅→∅),[7.3609349]→[4.6637:6714](∅→∅),[2.2366]→[4.6637:6714](∅→∅)
use inflorescence_iced_widget::{dir_picker, report};use inflorescence_model::model::{Job, Log, Logs, ReadyState, RecordChanges};use inflorescence_iced_widget::{dir_picker, nav_scrollable, report};use inflorescence_model::model::{Job, Log, Logs, PickingProjectSelection, ReadyState, RecordChanges,}; - edit in inflorescence/src/main.rs at line 189
selection: default(),projects_nav: nav_scrollable::State::default(), - replacement in inflorescence/src/main.rs at line 367
_model: &mut model::PickingProject,model: &mut model::PickingProject, - replacement in inflorescence/src/main.rs at line 373
view::Msg::Action(_msg) => todo!(),view::Msg::Action(msg) => match msg {action::FilteredMsg::Confirm => match model.selection {PickingProjectSelection::FindOrCreate => {let (model, task) = init_picking_repo_dir();new_state = Some(model::SubState::PickingRepoDir(model));task}PickingProjectSelection::Existing { ix } => {if let Some(store::Project {last_closed_time: _,path,}) = model.projects.as_ref().and_then(|projects| projects.iter().nth(ix)){let (sub, managing_repo, managing_repo_task) =init_managing_repo(path.clone());new_state = Some(model::SubState::ManagingRepo(sub));new_managing_repo = Some(managing_repo);managing_repo_task} else {Task::none()}}},action::FilteredMsg::Selection(msg) => {picking_project_selection(model, msg)}action::FilteredMsg::Cancel| action::FilteredMsg::PostponeRecord| action::FilteredMsg::SaveRecord| action::FilteredMsg::DiscardRecord| action::FilteredMsg::AddUntrackedFile| action::FilteredMsg::RmChange| action::FilteredMsg::StartRecord| action::FilteredMsg::SelectChannel| action::FilteredMsg::ForkChannel| action::FilteredMsg::RefreshRepo| action::FilteredMsg::ShowEntireLog| action::FilteredMsg::FocusNext| action::FilteredMsg::FocusPrev| action::FilteredMsg::ClipboardCopy| action::FilteredMsg::ToggleReports| action::FilteredMsg::ClipboardCopyReports| action::FilteredMsg::ToRecord(_)| action::FilteredMsg::ToRecordToggleSelectedFileOrChange| action::FilteredMsg::EnterSubMenu(_) => Task::none(),}, - edit in inflorescence/src/main.rs at line 442
}fn picking_project_selection(model: &mut model::PickingProject,msg: inflorescence_model::selection::Msg,) -> Task<Msg> {match msg {selection::Msg::PressDir(dir) => {if let Some(projects) = model.projects.as_mut()&& !projects.is_empty(){match model.selection {PickingProjectSelection::FindOrCreate => match dir {selection::Dir::Down => {model.selection =PickingProjectSelection::Existing { ix: 0 };}selection::Dir::Up => {model.selection =PickingProjectSelection::Existing {ix: projects.len() - 1,};}selection::Dir::Right | selection::Dir::Left => {}},PickingProjectSelection::Existing { ix } => match dir {selection::Dir::Down => {if ix < projects.len() - 1 {let ix = ix + 1;model.selection =PickingProjectSelection::Existing { ix };nav_scrollable::scroll_down_to_section(&mut model.projects_nav,ix,);} else {model.selection =PickingProjectSelection::FindOrCreate;nav_scrollable::scroll_up_to_section(&mut model.projects_nav,0,);}}selection::Dir::Up => {if ix > 0 {let ix = ix - 1;model.selection =PickingProjectSelection::Existing { ix };nav_scrollable::scroll_up_to_section(&mut model.projects_nav,ix,);} else {model.selection =PickingProjectSelection::FindOrCreate;nav_scrollable::scroll_up_to_section(&mut model.projects_nav,0,);}}selection::Dir::Right | selection::Dir::Left => {}},}}Task::none()}selection::Msg::AltPressDir(_) => Task::none(),}