#[cfg(feature = "serde")]
use serde::Serialize;
use crate::{
packaging::relationship::XlsxRelationships,
processed::drawing::{
shape::shape_properties::ShapeProperties,
worksheet_drawing::non_visual_properties::NonVisualDrawingProperty,
},
raw::{
drawing::{
graphic::graphic_frame::XlsxGraphicFrame,
worksheet_drawing::{
client_data::XlsxClientData, spreadsheet_extent::XlsxSpreadsheetExtent,
spreadsheet_position::XlsxSpreadsheetPosition,
},
},
spreadsheet::workbook::defined_name::XlsxDefinedNames,
},
};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize))]
pub struct GraphicFrame {
pub type_uri: String,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub r#macro: Option<String>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub published: Option<bool>,
pub visual_properties: ShapeProperties,
pub non_visual_properties: NonVisualDrawingProperty,
}
impl GraphicFrame {
pub(crate) fn from_spreadsheet_graphic_frame(
raw: XlsxGraphicFrame,
extent: Option<XlsxSpreadsheetExtent>,
position: Option<XlsxSpreadsheetPosition>,
client_data: Option<XlsxClientData>,
drawing_relationship: XlsxRelationships,
defined_names: XlsxDefinedNames,
) -> Self {
let mut uri: String = String::new();
if let Some(graphic) = raw.clone().graphic {
if let Some(data) = graphic.graphic_data {
uri = data.uri.unwrap_or(String::new())
}
}
return Self {
type_uri: uri,
r#macro: Some(raw.clone().r#macro.unwrap_or(String::new())),
published: Some(raw.clone().published.unwrap_or(false)),
visual_properties: ShapeProperties::from_graphic_frame_transform(
raw.clone().transform2d,
extent,
position,
),
non_visual_properties:
NonVisualDrawingProperty::from_non_visual_graphic_frame_properties(
raw.clone().non_visual_graphic_frame_properties,
client_data.clone(),
drawing_relationship,
defined_names,
),
};
}
}