umya_spreadsheet/structs/
row_reference.rs

1use crate::helper::coordinate::*;
2use crate::traits::AdjustmentValue;
3
4#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
5pub struct RowReference {
6    num: u32,
7    is_lock: bool,
8}
9
10impl Default for RowReference {
11    #[inline]
12    fn default() -> Self {
13        Self {
14            num: 1,
15            is_lock: false,
16        }
17    }
18}
19
20impl RowReference {
21    #[inline]
22    pub fn get_num(&self) -> &u32 {
23        &self.num
24    }
25
26    #[inline]
27    pub fn set_num(&mut self, value: u32) -> &mut Self {
28        self.num = value;
29        self
30    }
31
32    #[inline]
33    pub(crate) fn offset_num(&mut self, value: i32) -> &mut Self {
34        if value > 0 {
35            self.plus_num(value as u32);
36        }
37        if value < 0 {
38            self.minus_num(-value as u32);
39        }
40        self
41    }
42
43    #[inline]
44    pub(crate) fn plus_num(&mut self, value: u32) -> &mut Self {
45        self.num += value;
46        self
47    }
48
49    #[inline]
50    pub(crate) fn minus_num(&mut self, value: u32) -> &mut Self {
51        self.num -= value;
52        self
53    }
54
55    #[inline]
56    pub fn get_is_lock(&self) -> &bool {
57        &self.is_lock
58    }
59
60    #[inline]
61    pub fn set_is_lock(&mut self, value: bool) -> &mut Self {
62        self.is_lock = value;
63        self
64    }
65
66    #[inline]
67    pub fn set_is_lock_usize(&mut self, value: u32) -> &mut Self {
68        self.is_lock = value == 1;
69        self
70    }
71
72    #[inline]
73    pub fn get_coordinate(&self) -> String {
74        format!("{}{}", if self.is_lock { "$" } else { "" }, self.num)
75    }
76}
77impl AdjustmentValue for RowReference {
78    #[inline]
79    fn adjustment_insert_value(&mut self, root_num: &u32, offset_num: &u32) {
80        self.num = adjustment_insert_coordinate(&self.num, root_num, offset_num);
81    }
82
83    #[inline]
84    fn adjustment_remove_value(&mut self, root_num: &u32, offset_num: &u32) {
85        self.num = adjustment_remove_coordinate(&self.num, root_num, offset_num);
86    }
87
88    #[inline]
89    fn is_remove_value(&self, root_num: &u32, offset_num: &u32) -> bool {
90        is_remove_coordinate(&self.num, root_num, offset_num)
91    }
92}