charming_fork_zephyr/element/
tooltip.rs

1use serde::Serialize;
2
3use crate::element::{AxisPointer, Color, Formatter, Padding};
4
5#[derive(Serialize)]
6#[serde(rename_all = "snake_case")]
7pub enum TriggerOn {
8    Mousemove,
9    Click,
10    #[serde(rename = "mousemove|click")]
11    MousemoveAndClick,
12    None,
13}
14
15/// Types of triggering.
16#[derive(Serialize)]
17#[serde(rename_all = "snake_case")]
18pub enum Trigger {
19    Item,
20    Axis,
21    None,
22}
23
24#[derive(Serialize)]
25#[serde(rename_all = "camelCase")]
26pub struct Tooltip {
27    #[serde(skip_serializing_if = "Option::is_none")]
28    trigger: Option<Trigger>,
29
30    #[serde(skip_serializing_if = "Option::is_none")]
31    trigger_on: Option<TriggerOn>,
32
33    #[serde(skip_serializing_if = "Option::is_none")]
34    axis_pointer: Option<AxisPointer>,
35
36    #[serde(skip_serializing_if = "Option::is_none")]
37    formatter: Option<Formatter>,
38
39    #[serde(skip_serializing_if = "Option::is_none")]
40    position: Option<String>,
41
42    #[serde(skip_serializing_if = "Option::is_none")]
43    padding: Option<Padding>,
44
45    #[serde(skip_serializing_if = "Option::is_none")]
46    background_color: Option<Color>,
47
48    #[serde(skip_serializing_if = "Option::is_none")]
49    border_color: Option<Color>,
50
51    #[serde(skip_serializing_if = "Option::is_none")]
52    border_width: Option<i64>,
53}
54
55impl Tooltip {
56    pub fn new() -> Self {
57        Self {
58            trigger: None,
59            trigger_on: None,
60            axis_pointer: None,
61            formatter: None,
62            position: None,
63            padding: None,
64            background_color: None,
65            border_color: None,
66            border_width: None,
67        }
68    }
69
70    pub fn trigger<T: Into<Trigger>>(mut self, trigger: T) -> Self {
71        self.trigger = Some(trigger.into());
72        self
73    }
74
75    pub fn trigger_on<T: Into<TriggerOn>>(mut self, trigger_on: T) -> Self {
76        self.trigger_on = Some(trigger_on.into());
77        self
78    }
79
80    pub fn axis_pointer<A: Into<AxisPointer>>(mut self, axis_pointer: A) -> Self {
81        self.axis_pointer = Some(axis_pointer.into());
82        self
83    }
84
85    pub fn formatter<F: Into<Formatter>>(mut self, formatter: F) -> Self {
86        self.formatter = Some(formatter.into());
87        self
88    }
89
90    pub fn position<S: Into<String>>(mut self, position: S) -> Self {
91        self.position = Some(position.into());
92        self
93    }
94
95    pub fn padding<P: Into<Padding>>(mut self, padding: P) -> Self {
96        self.padding = Some(padding.into());
97        self
98    }
99
100    pub fn background_color<C: Into<Color>>(mut self, background_color: C) -> Self {
101        self.background_color = Some(background_color.into());
102        self
103    }
104
105    pub fn border_color<C: Into<Color>>(mut self, border_color: C) -> Self {
106        self.border_color = Some(border_color.into());
107        self
108    }
109
110    pub fn border_width<F: Into<i64>>(mut self, border_width: F) -> Self {
111        self.border_width = Some(border_width.into());
112        self
113    }
114}