tabled/grid/config/
compact_multiline_config.rs1use crate::grid::{
2 ansi::ANSIStr,
3 config::{
4 AlignmentHorizontal, AlignmentVertical, Borders, CompactConfig, Formatting, Indent, Sides,
5 },
6};
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
10pub struct CompactMultilineConfig {
11 config: CompactConfig,
12 alignment_vertical: AlignmentVertical,
13 formatting: Formatting,
14}
15
16impl CompactMultilineConfig {
17 pub const fn new() -> Self {
19 Self {
20 config: CompactConfig::new(),
21 alignment_vertical: AlignmentVertical::Top,
22 formatting: Formatting::new(false, false, false),
23 }
24 }
25
26 pub const fn from_compact(config: CompactConfig) -> Self {
28 Self {
29 config,
30 alignment_vertical: AlignmentVertical::Top,
31 formatting: Formatting::new(false, false, false),
32 }
33 }
34
35 pub fn set_alignment_vertical(&mut self, alignment: AlignmentVertical) {
37 self.alignment_vertical = alignment
38 }
39
40 pub const fn get_alignment_vertical(&self) -> AlignmentVertical {
42 self.alignment_vertical
43 }
44
45 pub fn set_margin(&mut self, margin: Sides<Indent>) {
47 self.config = self.config.set_margin(margin);
48 }
49
50 pub const fn get_margin(&self) -> &Sides<Indent> {
52 self.config.get_margin()
53 }
54
55 pub fn set_borders(&mut self, borders: Borders<char>) {
57 self.config = self.config.set_borders(borders);
58 }
59
60 pub const fn get_borders(&self) -> &Borders<char> {
62 self.config.get_borders()
63 }
64
65 pub const fn get_borders_color(&self) -> &Borders<ANSIStr<'static>> {
67 self.config.get_borders_color()
68 }
69
70 pub fn set_padding(&mut self, padding: Sides<Indent>) {
72 self.config = self.config.set_padding(padding)
73 }
74
75 pub const fn get_padding(&self) -> &Sides<Indent> {
77 self.config.get_padding()
78 }
79
80 pub fn set_alignment_horizontal(&mut self, alignment: AlignmentHorizontal) {
82 self.config = self.config.set_alignment_horizontal(alignment)
83 }
84
85 pub const fn get_alignment_horizontal(&self) -> AlignmentHorizontal {
87 self.config.get_alignment_horizontal()
88 }
89
90 pub fn set_borders_color(&mut self, borders: Borders<ANSIStr<'static>>) {
92 self.config = self.config.set_borders_color(borders)
93 }
94
95 pub fn set_margin_color(&mut self, color: Sides<ANSIStr<'static>>) {
97 self.config = self.config.set_margin_color(color)
98 }
99
100 pub const fn get_margin_color(&self) -> &Sides<ANSIStr<'static>> {
102 self.config.get_margin_color()
103 }
104
105 pub fn set_padding_color(&mut self, color: Sides<ANSIStr<'static>>) {
107 self.config = self.config.set_padding_color(color)
108 }
109
110 pub const fn get_padding_color(&self) -> &Sides<ANSIStr<'static>> {
112 self.config.get_padding_color()
113 }
114
115 pub fn set_formatting(&mut self, formatting: Formatting) {
117 self.formatting = formatting
118 }
119
120 pub const fn get_formatting(&self) -> Formatting {
122 self.formatting
123 }
124}
125
126impl Default for CompactMultilineConfig {
127 fn default() -> Self {
128 Self {
129 config: Default::default(),
130 alignment_vertical: AlignmentVertical::Top,
131 formatting: Formatting::default(),
132 }
133 }
134}
135
136impl From<CompactMultilineConfig> for CompactConfig {
137 fn from(cfg: CompactMultilineConfig) -> Self {
138 cfg.config
139 }
140}
141
142impl From<CompactConfig> for CompactMultilineConfig {
143 fn from(config: CompactConfig) -> Self {
144 Self {
145 config,
146 alignment_vertical: AlignmentVertical::Top,
147 formatting: Formatting::default(),
148 }
149 }
150}
151
152#[cfg(feature = "std")]
153impl From<CompactMultilineConfig> for crate::grid::config::SpannedConfig {
154 fn from(compact: CompactMultilineConfig) -> Self {
155 use crate::grid::config::Entity::*;
156 use crate::grid::config::SpannedConfig;
157
158 let mut cfg = SpannedConfig::from(compact.config);
159 cfg.set_alignment_vertical(Global, compact.alignment_vertical);
160 cfg.set_line_alignment(Global, compact.formatting.allow_lines_alignment);
161 cfg.set_trim_horizontal(Global, compact.formatting.horizontal_trim);
162 cfg.set_trim_vertical(Global, compact.formatting.vertical_trim);
163
164 cfg
165 }
166}