From 49d27452571a65f941d225b4458bd5eb26193bf3 Mon Sep 17 00:00:00 2001 From: traxys Date: Fri, 8 Dec 2023 21:13:50 +0100 Subject: [PATCH] Allow to easily add more compare sections --- Cargo.lock | 21 +++++++++++++++++++++ Cargo.toml | 1 + src/compare.rs | 24 ++++++++++++------------ 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index acb2b81..18fec67 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -482,6 +482,26 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +[[package]] +name = "enum-map" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +dependencies = [ + "enum-map-derive", +] + +[[package]] +name = "enum-map-derive" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -719,6 +739,7 @@ dependencies = [ "anyhow", "directories", "either", + "enum-map", "iced", "iced_aw", "itertools", diff --git a/Cargo.toml b/Cargo.toml index de68f1b..4e12704 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ edition = "2021" anyhow = "1.0.75" directories = "5.0.1" either = "1.9.0" +enum-map = "2.7.3" iced = { version = "0.10.0", features = ["lazy"] } iced_aw = { version = "0.7.0", default-features = false, features = [ "modal", diff --git a/src/compare.rs b/src/compare.rs index 0635514..fa13b1f 100644 --- a/src/compare.rs +++ b/src/compare.rs @@ -1,5 +1,6 @@ use std::{cmp::Ordering, collections::BTreeMap, iter}; +use enum_map::{Enum, EnumMap}; use iced::{ widget::{ button, column, component, container, horizontal_rule, horizontal_space, row, scrollable, @@ -21,8 +22,7 @@ pub(crate) struct Compare { #[derive(Default)] pub(crate) struct CompareState { - recurring_collapse: bool, - variable_collapse: bool, + collapsed: EnumMap, } #[derive(Clone, Copy)] @@ -32,10 +32,11 @@ pub(crate) enum CompareMsg { SetCollapse(Section, bool), } -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Enum)] pub(crate) enum Section { Recurring, Variable, + Total, } impl Section { @@ -43,6 +44,7 @@ impl Section { match self { Section::Recurring => "Recurring", Section::Variable => "Variable", + Section::Total => "Total", } } } @@ -58,10 +60,7 @@ where match event { CompareMsg::LoadLeft(d) => return Some((self.on_load)(CompareSide::Left, d)), CompareMsg::LoadRight(d) => return Some((self.on_load)(CompareSide::Right, d)), - CompareMsg::SetCollapse(s, v) => match s { - Section::Recurring => state.recurring_collapse = v, - Section::Variable => state.variable_collapse = v, - }, + CompareMsg::SetCollapse(s, v) => state.collapsed[s] = v, } None @@ -137,7 +136,8 @@ where ), ]; - let mk_section = |section: Section, status: bool| { + let mk_section = |section: Section| { + let status = state.collapsed[section]; [ Some( row![ @@ -288,15 +288,15 @@ where properties, itertools::chain![ iter::once(headings), - iter::once(mk_section(Section::Recurring, state.recurring_collapse)), + iter::once(mk_section(Section::Recurring)), item_compare( - state.recurring_collapse, + state.collapsed[Section::Recurring], left.map(|r| r.recurring()), right.map(|r| r.recurring()) ), - iter::once(mk_section(Section::Variable, state.variable_collapse)), + iter::once(mk_section(Section::Variable)), item_compare( - state.variable_collapse, + state.collapsed[Section::Variable], left.map(|r| r.variable()), right.map(|r| r.variable()) ),