summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2026-01-09 18:13:36 +0000
committerJoe Carstairs <me@joeac.net>2026-01-17 09:39:15 +0000
commit1056421dd45b7e9af6f63a95026cb069cfa34e29 (patch)
tree38c8253a1c84cba3af1ff5bee9d2bd4e5cec8768
parent43e4dd1bd0258bfc5164ac8e0d83c12840f23719 (diff)
improves balance format/style
-rw-r--r--schist_core/schist_models/src/bucket.rs13
-rw-r--r--schist_desktop_gui/src/gui/components/bucket_name_and_balance.rs28
2 files changed, 30 insertions, 11 deletions
diff --git a/schist_core/schist_models/src/bucket.rs b/schist_core/schist_models/src/bucket.rs
index a28aa8f..67ed31e 100644
--- a/schist_core/schist_models/src/bucket.rs
+++ b/schist_core/schist_models/src/bucket.rs
@@ -1,3 +1,5 @@
+use std::ops::Div;
+
use derive_builder::Builder;
use diesel::prelude::*;
use serde::{Deserialize, Serialize};
@@ -34,3 +36,14 @@ impl Bucket {
.all(|t| t.bucket_id.is_none_or(|id| id != self.id))
}
}
+
+impl Bucket {
+ pub fn pretty_balance_per_100(&self) -> String {
+ let abs_balance_per_100 = self.balance.unwrap_or(0).div(100).abs();
+ if self.balance.is_none_or(|balance| balance >= 0) {
+ abs_balance_per_100.to_string()
+ } else {
+ format!("({abs_balance_per_100})")
+ }
+ }
+}
diff --git a/schist_desktop_gui/src/gui/components/bucket_name_and_balance.rs b/schist_desktop_gui/src/gui/components/bucket_name_and_balance.rs
index b08729c..8a5a16e 100644
--- a/schist_desktop_gui/src/gui/components/bucket_name_and_balance.rs
+++ b/schist_desktop_gui/src/gui/components/bucket_name_and_balance.rs
@@ -1,7 +1,10 @@
-use iced::{widget::row, Element};
+use iced::{
+ widget::{row, text},
+ Element, Length,
+};
use schist_models::Bucket;
-use crate::gui::components::{navigation, Text};
+use crate::gui::components::navigation;
#[derive(Clone, Debug, PartialEq)]
pub struct BucketNameAndBalance {
@@ -16,16 +19,19 @@ impl BucketNameAndBalance {
impl<'a> From<&'a BucketNameAndBalance> for Element<'a, navigation::Message<BucketNameAndBalance>> {
fn from(bucket_name_and_balance: &'a BucketNameAndBalance) -> Self {
+ let balance_style = if bucket_name_and_balance
+ .bucket
+ .balance
+ .is_none_or(|balance| balance >= 0)
+ {
+ text::default
+ } else {
+ text::danger
+ };
+
row![
- Text::new(&bucket_name_and_balance.bucket.name).as_element(),
- Text::new(
- &bucket_name_and_balance
- .bucket
- .balance
- .unwrap_or(0)
- .to_string()
- )
- .as_element(),
+ text(bucket_name_and_balance.bucket.name.clone()).width(Length::Fill),
+ text(bucket_name_and_balance.bucket.pretty_balance_per_100()).style(balance_style),
]
.into()
}