use crate::convert_bool;
use super::ConditionalFormat;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum ConditionalIconType {
Icons3ArrowColored,
Icons3ArrowGray,
Icons3Flags,
Icons3TrafficLightsUnrimmed,
Icons3TrafficLightsRimmed,
Icons3Signs,
Icons3SymbolsCircled,
Icons3SymbolsUncircled,
Icons4ArrowColored,
Icons4ArrowGray,
Icons4RedToBlack,
Icons4Rating,
Icons4TrafficLights,
Icons5ArrowColored,
Icons5ArrowGray,
Icons5Rating,
Icons5Quarters,
}
impl ConditionalIconType {
pub(crate) fn into_internal_type(self) -> u8 {
let val = match self {
ConditionalIconType::Icons3ArrowColored => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_3_ARROWS_COLORED
}
ConditionalIconType::Icons3ArrowGray => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_3_ARROWS_GRAY
}
ConditionalIconType::Icons3Flags => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_3_FLAGS
}
ConditionalIconType::Icons3TrafficLightsUnrimmed => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_3_TRAFFIC_LIGHTS_UNRIMMED
}
ConditionalIconType::Icons3TrafficLightsRimmed => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_3_TRAFFIC_LIGHTS_RIMMED
}
ConditionalIconType::Icons3Signs => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_3_SIGNS
}
ConditionalIconType::Icons3SymbolsCircled => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_3_SYMBOLS_CIRCLED
}
ConditionalIconType::Icons3SymbolsUncircled => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_3_SYMBOLS_UNCIRCLED
}
ConditionalIconType::Icons4ArrowColored => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_4_ARROWS_COLORED
}
ConditionalIconType::Icons4ArrowGray => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_4_ARROWS_GRAY
}
ConditionalIconType::Icons4RedToBlack => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_4_RED_TO_BLACK
}
ConditionalIconType::Icons4Rating => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_4_RATINGS
}
ConditionalIconType::Icons4TrafficLights => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_4_TRAFFIC_LIGHTS
}
ConditionalIconType::Icons5ArrowColored => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_5_ARROWS_COLORED
}
ConditionalIconType::Icons5ArrowGray => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_5_ARROWS_GRAY
}
ConditionalIconType::Icons5Rating => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_5_RATINGS
}
ConditionalIconType::Icons5Quarters => {
libxlsxwriter_sys::lxw_conditional_icon_types_LXW_CONDITIONAL_ICONS_5_QUARTERS
}
};
val as u8
}
}
#[derive(Debug, Clone, PartialEq, PartialOrd, Copy)]
pub struct ConditionalIconSet {
pub style: ConditionalIconType,
pub reverse_icons: bool,
pub icons_only: bool,
}
impl ConditionalIconSet {
#[must_use]
pub fn new() -> Self {
ConditionalIconSet {
style: ConditionalIconType::Icons5Rating,
reverse_icons: false,
icons_only: false,
}
}
#[must_use]
pub fn style(mut self, style: ConditionalIconType) -> Self {
self.style = style;
self
}
#[must_use]
pub fn reverse_icons(mut self, reverse_icons: bool) -> Self {
self.reverse_icons = reverse_icons;
self
}
#[must_use]
pub fn icons_only(mut self, icons_only: bool) -> Self {
self.icons_only = icons_only;
self
}
pub(crate) fn to_internal_value(
self,
conditional_format: &mut libxlsxwriter_sys::lxw_conditional_format,
) {
conditional_format.type_ =
libxlsxwriter_sys::lxw_conditional_format_types_LXW_CONDITIONAL_TYPE_ICON_SETS as u8;
conditional_format.icon_style = self.style.into_internal_type();
conditional_format.reverse_icons = convert_bool(self.reverse_icons);
conditional_format.icons_only = convert_bool(self.icons_only);
}
}
impl Default for ConditionalIconSet {
fn default() -> Self {
Self::new()
}
}
impl From<ConditionalIconSet> for ConditionalFormat {
fn from(value: ConditionalIconSet) -> Self {
ConditionalFormat::IconSet(value)
}
}
impl ConditionalFormat {
#[must_use]
pub fn icon_set(icon_set: &ConditionalIconSet) -> ConditionalFormat {
ConditionalFormat::IconSet(*icon_set)
}
}