summaryrefslogtreecommitdiff
path: root/schist_desktop_gui/src/gui/components/text.rs
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2025-08-25 16:35:45 +0000
committerjoeac <me@joeac.net>2025-08-25 16:35:45 +0000
commitfe85652e4d3e8906824baddaafd05d19105579b8 (patch)
tree31b56e31cbf289a34ec1d6707becf3c60933b56f /schist_desktop_gui/src/gui/components/text.rs
parentd082a30de6a0cbd1fbe2ab5a4316db0891004129 (diff)
task-072
Co-authored-by: Joe Carstairs <jcarstairs@scottlogic.com> Reviewed-on: https://git.joeac.net/joeac/schist/pulls/3 Co-authored-by: Joe Carstairs <me@joeac.net> Co-committed-by: Joe Carstairs <me@joeac.net>
Diffstat (limited to 'schist_desktop_gui/src/gui/components/text.rs')
-rw-r--r--schist_desktop_gui/src/gui/components/text.rs94
1 files changed, 86 insertions, 8 deletions
diff --git a/schist_desktop_gui/src/gui/components/text.rs b/schist_desktop_gui/src/gui/components/text.rs
index d334de3..90cd7bc 100644
--- a/schist_desktop_gui/src/gui/components/text.rs
+++ b/schist_desktop_gui/src/gui/components/text.rs
@@ -1,22 +1,100 @@
-use iced::Element;
-
-use crate::gui::components::navigation;
+use crate::style::*;
#[derive(Clone, Debug, PartialEq)]
pub struct Text {
pub content: String,
+ colour: Option<Colour>,
+ size: Option<Size>,
+ strength: Option<Strength>,
+}
+
+#[derive(Clone, Debug, PartialEq)]
+enum Colour {
+ Danger,
+ Primary,
+}
+
+#[derive(Clone, Debug, PartialEq)]
+enum Strength {
+ Base,
+ Weak,
+}
+
+#[derive(Clone, Debug, PartialEq)]
+enum Size {
+ Small,
+ Base,
}
impl Text {
- pub fn new(group_name: String) -> Self {
+ pub fn default(content: &str) -> Self {
+ Self {
+ content: String::from(content),
+ colour: Some(Colour::Primary),
+ size: Some(Size::Base),
+ strength: Some(Strength::Base),
+ }
+ }
+
+ pub fn new(content: &str) -> Self {
+ Self {
+ content: String::from(content),
+ colour: None,
+ size: None,
+ strength: None,
+ }
+ }
+
+ pub fn as_element<'a, Message>(self) -> iced::Element<'a, Message> {
+ <Self as Into<iced::Element<'a, Message>>>::into(self)
+ }
+
+ pub fn small(&self) -> Self {
+ Self {
+ size: Some(Size::Small),
+ ..self.clone()
+ }
+ }
+
+ pub fn danger(&self) -> Self {
+ Self {
+ colour: Some(Colour::Danger),
+ ..self.clone()
+ }
+ }
+
+ pub fn weak(&self) -> Self {
Self {
- content: group_name.clone(),
+ strength: Some(Strength::Weak),
+ ..self.clone()
}
}
}
-impl<'a> Into<Element<'a, navigation::Message<Text>>> for Text {
- fn into(self) -> Element<'a, navigation::Message<Text>> {
- iced::widget::text(self.content.clone()).into()
+impl<'a, Message> Into<iced::Element<'a, Message>> for Text {
+ fn into(self) -> iced::Element<'a, Message> {
+ iced::widget::text(self.content.clone())
+ .size(match self.size {
+ Some(Size::Small) => TEXT_SIZE_SM,
+ Some(Size::Base) | None => TEXT_SIZE_BASE,
+ })
+ .style(move |theme: &iced::Theme| iced::widget::text::Style {
+ color: match (&self.colour, &self.strength) {
+ (Some(Colour::Danger), Some(Strength::Base) | None) => {
+ Some(theme.extended_palette().danger.base.text)
+ }
+ (Some(Colour::Danger), Some(Strength::Weak)) => {
+ Some(theme.extended_palette().danger.weak.text)
+ }
+ (Some(Colour::Primary), Some(Strength::Base) | None) => {
+ Some(theme.extended_palette().primary.base.text)
+ }
+ (Some(Colour::Primary), Some(Strength::Weak)) => {
+ Some(theme.extended_palette().primary.weak.text)
+ }
+ (None, _) => None,
+ },
+ })
+ .into()
}
}