2SLTGWP6FTM7C7BMSYEI2EBD4YTVO2XCIVRPHBJH5XHVLLVR76TAC MJDGPSHGF62FTVWZBE7MFNJTUQD42OBVJEOSVPBT553UFJLTEMXQC ZVI4AWERNOTDJ3765HJXRBZT57XPNKVONQ6TGOGNPOL2VN42KMJQC QMAUTRB6R5R7ABWT2JIDEA7LMILZOS3PGPZIF3YUFKRVLW6HGKTQC GWZGYNIBQP2AA7WYULNBS2BCV4B36IHK4OS7XHVOTUUG27E76XFQC 23SFYK4Q5NKBPJG53PQNPWQH6UOUU2YKJEL7RLXYBRLJOJYV7AWQC OPXFZKEBDHZZLXEJ2JRDYBOJH6YIN7UZNZYHVHMWMQVDTE2ZD53QC XSZZB47UXR6KGYFZZQFQR63X2LDKOH6TPNNBRRGHUCI5JJ4JIWVAC 3BK22XE5LPOH2EK5AMRXFXHNQNCJ54HEPYRINHJT4DA7INT32I7AC I2AG42PAVOII4V4TWDJV5ZVNDIHKBRDT254BFQLFUIY723TW6CCQC SASAN2XCWDQ2VEHZ7TAQEN2R3Y7AG7JUGEFVRL4DZAGHXDFEZFRQC KWTBNTO3QUUE2YADF6SYW6G6ZOKYEWRJQKIWDGZXR33S3YNDVIZQC UR4J677RWA3OFG6HQTD46BUUE5YFPSBEFCJAEM5OMT4V5A7SBNNQC 3XRG4BB6V5V4DICZCMOZMLQNTANWKPO7BBRATTXOZLRNSEUQIA5AC WAOGSCOJ5A372BZKHEYD2BCDBCENNVLFYW3INKUOOAZMDADDIFIQC EJPSD5XO43DWUBBZGNQMY4TMCAXL5EWCGX3OEHUERQ5GRASGWQLQC YK3MOJJLRYEKZ4FUCNJ3YKMTKOINWIYOJKR3ER7IRSGTC7O6FJZQC CULHFNIVQ3ATML2W3Z45RARZ2LHGXONYTGGN2ETWAAMV7R3Y67AQC LFEMJYYDO45ASMQSOJ3TNID7B5UZXDHB3NWFZJXWOAWNBS6GMDEAC 5O4FWCFP4ZPAS7WKSYPHN76ML3O2S4JUOYWOV2ETD4TF2H6KZ6AQC HPSOAD4RXHXU7TSVX2AD5ZDGHMS7HLYNRARWHJCXGGH5RWW7LH6QC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC }#[derive(Debug, Clone, Hash, PartialEq, Eq)]pub struct Id {pub diff: repo::ChangedFileDiff,}#[derive(Debug, Clone, Hash, PartialEq, Eq)]pub struct IdRef<'a> {pub diff: &'a repo::ChangedFileDiff,}#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]pub struct IdHash(pub AHash);pub fn id_hash(id: &Id) -> IdHash {IdHash(hash_one(id))
pub fn id_ref_hash(id: &IdRef<'_>) -> IdHash {IdHash(hash_one(id))}pub fn id_parts_hash(diff: &repo::ChangedFileDiff) -> IdHash {id_ref_hash(&IdRef { diff })}
let selected = match to_record::determine_file(to_record, file_path, changed_files) {to_record::PickSet::Include => TO_RECORD_LABEL_INCLUDE,to_record::PickSet::Exclude => TO_RECORD_LABEL_EXCLUDE,to_record::PickSet::Partial => TO_RECORD_LABEL_PARTIAL,};
let state = to_record::determine_file(to_record, file_path, changed_files);let to_record_toggle =el(checkbox::three_way(state).on_press_with(||Msg::ToRecord(to_record::Msg::ToggleFile{file :file_path.clone()})));
Some((file, state)) => {diff::view(state, nav, file, *diff_selected, false)}
Some((file, state)) => diff::view(state,nav,file,path,*diff_selected,false,to_record,),
Some((file, state)) => {diff::view(state, nav, file, *diff_selected, true)}
Some((file, state)) => diff::view(state,nav,file,path,*diff_selected,true,to_record,),
let selected = match to_record.overall {to_record::PickSet::Include => TO_RECORD_LABEL_INCLUDE,to_record::PickSet::Exclude => TO_RECORD_LABEL_EXCLUDE,to_record::PickSet::Partial => TO_RECORD_LABEL_PARTIAL,};let to_record_toggle = el(button(text(selected).size(21).shaping(text::Shaping::Advanced).center().wrapping(text::Wrapping::None),).width(31).height(31).padding(0).on_press_with(|| Msg::ToRecord(to_record::Msg::ToggleOverall)));
let to_record_toggle = el(checkbox::three_way(to_record.overall).on_press_with(|| Msg::ToRecord(to_record::Msg::ToggleOverall)));
el(column(res))
let to_record_pick =to_record::determine_change_pick(path, *diff_id, to_record);let to_record_toggle = el(checkbox::two_way(to_record_pick).on_press_with(|| {Msg::ToRecord(to_record::Msg::ToggleChange {file: path.to_string(),diff_id: *diff_id,})}));el(row([to_record_toggle, el(column(res))]).spacing(CHECKBOX_SPACING))
use iced::widget::{button, text, Button};use inflorescence_model::to_record;use crate::Theme;pub const WIDTH: u32 = 31;const TO_RECORD_LABEL_INCLUDE: &str = "■";const TO_RECORD_LABEL_EXCLUDE: &str = "□";const TO_RECORD_LABEL_PARTIAL: &str = "▤";/// A checkbox with three possible statespub fn three_way<'a, M>(state: to_record::PickSet) -> Button<'a, M, Theme>whereM: 'a,{let label = match state {to_record::PickSet::Include => TO_RECORD_LABEL_INCLUDE,to_record::PickSet::Exclude => TO_RECORD_LABEL_EXCLUDE,to_record::PickSet::Partial => TO_RECORD_LABEL_PARTIAL,};checkbox_btn(label)}/// A checkbox with two possible statespub fn two_way<'a, M>(state: to_record::Pick) -> Button<'a, M, Theme>whereM: 'a,{let label = match state {to_record::Pick::Include => TO_RECORD_LABEL_INCLUDE,to_record::Pick::Exclude => TO_RECORD_LABEL_EXCLUDE,};checkbox_btn(label)}fn checkbox_btn<'a, M>(label: &'a str) -> Button<'a, M, Theme>whereM: 'a,{button(text(label).size(21).shaping(text::Shaping::Advanced).center().wrapping(text::Wrapping::None),).width(WIDTH).height(31).padding(0)}
pub fn determine_change_pick(file: &str,diff_id: diff::IdHash,state: &State,) -> Pick {match state.overall {PickSet::Include => return Pick::Include,PickSet::Exclude => return Pick::Exclude,PickSet::Partial => {}}if let Some(pick) = state.files.get(file) {match pick {PickSet::Include => return Pick::Include,PickSet::Exclude => return Pick::Exclude,PickSet::Partial => {}}}let explicit = state.changes.get(file).and_then(|file| file.changes.get(&diff_id)).copied();dbg!(&explicit);explicit.unwrap_or_else(|| default_pick(state))}
contents_to_lines, Combined, DecodedFile, DiffWithContents,DiffWithoutContents, File, FileContent, Lines, Section,UndecodableContents, UndecodableFile,
contents_to_lines, id_hash, id_parts_hash, id_ref_hash, Combined,DecodedFile, DiffWithContents, DiffWithoutContents, File, FileContent, Id,IdHash, IdRef, Lines, Section, UndecodableContents, UndecodableFile,
contents_to_lines, init_diffs_nav, Combined, DecodedFile, DiffWithContents,DiffWithoutContents, File, FileAndState, FileContent, FilesState, Lines,Section, State, UndecodableContents, UndecodableFile,
contents_to_lines, id_parts_hash, init_diffs_nav, Combined, DecodedFile,DiffWithContents, DiffWithoutContents, File, FileAndState, FileContent,FilesState, IdHash, Lines, Section, State, UndecodableContents,UndecodableFile,