#[cfg(feature = "serde")]
use serde::Serialize;
use std::collections::BTreeMap;
use crate::raw::drawing::{
scheme::color_scheme::XlsxColorScheme,
theme::XlsxTheme,
worksheet_drawing::{
client_data::XlsxClientData, group_shape::XlsxGroupShape,
spreadsheet_extent::XlsxSpreadsheetExtent, spreadsheet_position::XlsxSpreadsheetPosition,
},
};
use crate::raw::spreadsheet::workbook::defined_name::XlsxDefinedNames;
use crate::{
packaging::relationship::XlsxRelationships,
processed::drawing::{
fill::Fill,
shape::shape_properties::ShapeProperties,
worksheet_drawing::{
content_type::DrawingContentType, non_visual_properties::NonVisualDrawingProperty,
},
},
};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize))]
pub struct GroupShape {
pub contents: Vec<DrawingContentType>,
pub visual_properties: ShapeProperties,
pub non_visual_properties: NonVisualDrawingProperty,
}
impl GroupShape {
pub(crate) fn from_raw(
raw: XlsxGroupShape,
extent: Option<XlsxSpreadsheetExtent>,
position: Option<XlsxSpreadsheetPosition>,
client_data: Option<XlsxClientData>,
drawing_relationship: XlsxRelationships,
image_bytes: BTreeMap<String, Vec<u8>>,
defined_names: XlsxDefinedNames,
color_scheme: Option<XlsxColorScheme>,
theme: Option<Box<XlsxTheme>>,
) -> Self {
let fill = if let Some(visual_group_shape_properties) =
raw.clone().visual_group_shape_properties
{
Fill::from_group_shape_properties(
visual_group_shape_properties,
drawing_relationship.clone(),
image_bytes.clone(),
color_scheme.clone(),
)
} else {
None
};
let contents: Vec<DrawingContentType> = raw
.clone()
.drawing_contents
.unwrap_or(Box::new(vec![]))
.into_iter()
.map(|c| {
DrawingContentType::from_raw(
Some(c),
None,
None,
client_data.clone(),
fill.clone(),
drawing_relationship.clone(),
image_bytes.clone(),
defined_names.clone(),
color_scheme.clone(),
theme.clone(),
)
})
.filter(|c| c.is_some())
.map(|c| c.unwrap())
.collect();
return Self {
contents,
non_visual_properties: NonVisualDrawingProperty::from_non_visual_group_shape_properties(
raw.non_visual_group_shape_properties,
client_data.clone(),
drawing_relationship.clone(),
defined_names,
),
visual_properties: ShapeProperties::from_group_shape_properties(
raw.visual_group_shape_properties,
extent,
position,
drawing_relationship.clone(),
image_bytes.clone(),
color_scheme.clone(),
),
};
}
}