use crate::border::{hidden_border, Border};
use crate::color::Color;
use crate::position::{Position, LEFT, TOP};
use crate::style::{properties::*, Style};
impl Style {
pub fn get_bold(&self) -> bool {
self.is_set(BOLD_KEY) && self.get_attr(ATTR_BOLD)
}
pub fn get_italic(&self) -> bool {
self.is_set(ITALIC_KEY) && self.get_attr(ATTR_ITALIC)
}
pub fn get_underline(&self) -> bool {
self.is_set(UNDERLINE_KEY) && self.get_attr(ATTR_UNDERLINE)
}
pub fn get_strikethrough(&self) -> bool {
self.is_set(STRIKETHROUGH_KEY) && self.get_attr(ATTR_STRIKETHROUGH)
}
pub fn get_reverse(&self) -> bool {
self.is_set(REVERSE_KEY) && self.get_attr(ATTR_REVERSE)
}
pub fn get_blink(&self) -> bool {
self.is_set(BLINK_KEY) && self.get_attr(ATTR_BLINK)
}
pub fn get_faint(&self) -> bool {
self.is_set(FAINT_KEY) && self.get_attr(ATTR_FAINT)
}
pub fn get_underline_spaces(&self) -> bool {
self.is_set(UNDERLINE_SPACES_KEY) && self.get_attr(ATTR_UNDERLINE_SPACES)
}
pub fn get_strikethrough_spaces(&self) -> bool {
self.is_set(STRIKETHROUGH_SPACES_KEY) && self.get_attr(ATTR_STRIKETHROUGH_SPACES)
}
pub fn get_color_whitespace(&self) -> bool {
self.is_set(COLOR_WHITESPACE_KEY) && self.get_attr(ATTR_COLOR_WHITESPACE)
}
pub fn get_inline(&self) -> bool {
self.is_set(INLINE_KEY) && self.get_attr(ATTR_INLINE)
}
pub fn get_foreground(&self) -> Option<Color> {
if self.is_set(FOREGROUND_KEY) {
self.fg_color.as_ref().map(|s| Color::from(s.as_str()))
} else {
None
}
}
pub fn get_background(&self) -> Option<Color> {
if self.is_set(BACKGROUND_KEY) {
self.bg_color.as_ref().map(|s| Color::from(s.as_str()))
} else {
None
}
}
pub fn get_margin_background(&self) -> Option<Color> {
if self.is_set(MARGIN_BACKGROUND_KEY) {
self.margin_bg_color
.as_ref()
.map(|s| Color::from(s.as_str()))
} else {
None
}
}
pub fn get_width(&self) -> i32 {
if self.is_set(WIDTH_KEY) {
self.width
} else {
0
}
}
pub fn get_height(&self) -> i32 {
if self.is_set(HEIGHT_KEY) {
self.height
} else {
0
}
}
pub fn get_max_width(&self) -> i32 {
if self.is_set(MAX_WIDTH_KEY) {
self.max_width
} else {
0
}
}
pub fn get_max_height(&self) -> i32 {
if self.is_set(MAX_HEIGHT_KEY) {
self.max_height
} else {
0
}
}
pub fn get_align_horizontal(&self) -> Position {
if self.is_set(ALIGN_HORIZONTAL_KEY) {
self.align_horizontal
} else {
LEFT
}
}
pub fn get_align_vertical(&self) -> Position {
if self.is_set(ALIGN_VERTICAL_KEY) {
self.align_vertical
} else {
TOP
}
}
pub fn get_align(&self) -> Position {
self.get_align_horizontal()
}
pub fn get_padding(&self) -> (i32, i32, i32, i32) {
(
self.get_padding_top(),
self.get_padding_right(),
self.get_padding_bottom(),
self.get_padding_left(),
)
}
pub fn get_padding_top(&self) -> i32 {
if self.is_set(PADDING_TOP_KEY) {
self.padding_top
} else {
0
}
}
pub fn get_padding_right(&self) -> i32 {
if self.is_set(PADDING_RIGHT_KEY) {
self.padding_right
} else {
0
}
}
pub fn get_padding_bottom(&self) -> i32 {
if self.is_set(PADDING_BOTTOM_KEY) {
self.padding_bottom
} else {
0
}
}
pub fn get_padding_left(&self) -> i32 {
if self.is_set(PADDING_LEFT_KEY) {
self.padding_left
} else {
0
}
}
pub fn get_margin(&self) -> (i32, i32, i32, i32) {
(
self.get_margin_top(),
self.get_margin_right(),
self.get_margin_bottom(),
self.get_margin_left(),
)
}
pub fn get_margin_top(&self) -> i32 {
if self.is_set(MARGIN_TOP_KEY) {
self.margin_top
} else {
0
}
}
pub fn get_margin_right(&self) -> i32 {
if self.is_set(MARGIN_RIGHT_KEY) {
self.margin_right
} else {
0
}
}
pub fn get_margin_bottom(&self) -> i32 {
if self.is_set(MARGIN_BOTTOM_KEY) {
self.margin_bottom
} else {
0
}
}
pub fn get_margin_left(&self) -> i32 {
if self.is_set(MARGIN_LEFT_KEY) {
self.margin_left
} else {
0
}
}
pub fn get_border(&self) -> (Border, bool, bool, bool, bool) {
let border = if self.is_set(BORDER_STYLE_KEY) {
self.border_style
} else {
hidden_border()
};
let top = !self.is_set(BORDER_TOP_KEY) || self.get_attr(ATTR_BORDER_TOP);
let right = !self.is_set(BORDER_RIGHT_KEY) || self.get_attr(ATTR_BORDER_RIGHT);
let bottom = !self.is_set(BORDER_BOTTOM_KEY) || self.get_attr(ATTR_BORDER_BOTTOM);
let left = !self.is_set(BORDER_LEFT_KEY) || self.get_attr(ATTR_BORDER_LEFT);
(border, top, right, bottom, left)
}
pub fn get_border_style(&self) -> Border {
if self.is_set(BORDER_STYLE_KEY) {
self.border_style
} else {
hidden_border()
}
}
pub fn get_border_top(&self) -> bool {
!self.is_set(BORDER_TOP_KEY) || self.get_attr(ATTR_BORDER_TOP)
}
pub fn get_border_right(&self) -> bool {
!self.is_set(BORDER_RIGHT_KEY) || self.get_attr(ATTR_BORDER_RIGHT)
}
pub fn get_border_bottom(&self) -> bool {
!self.is_set(BORDER_BOTTOM_KEY) || self.get_attr(ATTR_BORDER_BOTTOM)
}
pub fn get_border_left(&self) -> bool {
!self.is_set(BORDER_LEFT_KEY) || self.get_attr(ATTR_BORDER_LEFT)
}
pub fn get_tab_width(&self) -> i32 {
if self.is_set(TAB_WIDTH_KEY) {
self.tab_width
} else {
TAB_WIDTH_DEFAULT
}
}
pub fn get_transform(&self) -> Option<String> {
if self.is_set(TRANSFORM_KEY) && self.transform.is_some() {
Some("function".to_string())
} else {
None
}
}
pub fn get_frame_size(&self) -> (i32, i32) {
(
self.get_horizontal_frame_size(),
self.get_vertical_frame_size(),
)
}
pub fn get_horizontal_frame_size(&self) -> i32 {
self.get_horizontal_padding()
+ self.get_horizontal_border_size()
+ self.get_horizontal_margins()
}
pub fn get_vertical_frame_size(&self) -> i32 {
self.get_vertical_padding() + self.get_vertical_border_size() + self.get_vertical_margins()
}
pub fn get_horizontal_padding(&self) -> i32 {
self.get_padding_left() + self.get_padding_right()
}
pub fn get_vertical_padding(&self) -> i32 {
self.get_padding_top() + self.get_padding_bottom()
}
pub fn get_horizontal_margins(&self) -> i32 {
self.get_margin_left() + self.get_margin_right()
}
pub fn get_vertical_margins(&self) -> i32 {
self.get_margin_top() + self.get_margin_bottom()
}
pub fn get_horizontal_border_size(&self) -> i32 {
self.get_border_left_size() + self.get_border_right_size()
}
pub fn get_vertical_border_size(&self) -> i32 {
self.get_border_top_size() + self.get_border_bottom_size()
}
pub fn get_border_top_size(&self) -> i32 {
if self.get_border_top() {
1
} else {
0
}
}
pub fn get_border_right_size(&self) -> i32 {
if self.get_border_right() {
1
} else {
0
}
}
pub fn get_border_bottom_size(&self) -> i32 {
if self.get_border_bottom() {
1
} else {
0
}
}
pub fn get_border_left_size(&self) -> i32 {
if self.get_border_left() {
1
} else {
0
}
}
}