use std::collections::{HashMap, HashSet};
use logisheets_base::SheetId;
use logisheets_workbook::prelude::{
CtAutoFilter, CtBookViews, CtCellWatches, CtConditionalFormatting, CtControls,
CtCustomProperties, CtCustomSheetViews, CtCustomWorkbookViews, CtDataConsolidate,
CtDefinedNames, CtFileRecoveryPr, CtFileSharing, CtFileVersion, CtFunctionGroups,
CtHeaderFooter, CtHyperlinks, CtIgnoredErrors, CtOleSize, CtPageBreak, CtPageMargins,
CtPageSetup, CtPhoneticPr, CtPivotCaches, CtPrintOptions, CtProtectedRanges, CtScenarios,
CtSheetCalcPr, CtSheetFormatPr, CtSheetProtection, CtSheetViews, CtSmartTagPr, CtSmartTagTypes,
CtSmartTags, CtSortState, CtTableParts, CtWebPublishItems, CtWebPublishing, CtWorkbookPr,
CtWorkbookProtection,
};
use logisheets_workbook::workbook::{DocProps, PivotCache, PivotTablePart, TablePart, UnknownPart};
use crate::theme_manager::ThemeManager;
#[derive(Default)]
pub struct PreservedWorksheetParts {
pub sheet_calc_pr: Option<CtSheetCalcPr>,
pub sheet_protection: Option<CtSheetProtection>,
pub protected_ranges: Option<CtProtectedRanges>,
pub scenarios: Option<CtScenarios>,
pub auto_filter: Option<CtAutoFilter>,
pub sort_state: Option<CtSortState>,
pub data_consolidate: Option<CtDataConsolidate>,
pub custom_sheet_views: Option<CtCustomSheetViews>,
pub phonetic_pr: Option<CtPhoneticPr>,
pub conditional_formatting: Vec<CtConditionalFormatting>,
pub hyperlinks: Option<CtHyperlinks>,
pub print_options: Option<CtPrintOptions>,
pub page_margins: Option<CtPageMargins>,
pub page_setup: Option<CtPageSetup>,
pub header_footer: Option<CtHeaderFooter>,
pub row_breaks: Option<CtPageBreak>,
pub col_breaks: Option<CtPageBreak>,
pub custom_properties: Option<CtCustomProperties>,
pub cell_watches: Option<CtCellWatches>,
pub ignored_errors: Option<CtIgnoredErrors>,
pub smart_tags: Option<CtSmartTags>,
pub controls: Option<CtControls>,
pub web_publish_items: Option<CtWebPublishItems>,
pub table_parts: Option<CtTableParts>,
pub tables: Vec<TablePart>,
pub pivot_tables: Vec<PivotTablePart>,
pub unknown_parts: Vec<UnknownPart>,
}
#[derive(Default)]
pub struct PreservedWorkbookParts {
pub file_version: Option<CtFileVersion>,
pub file_sharing: Option<CtFileSharing>,
pub workbook_pr: Option<CtWorkbookPr>,
pub workbook_protection: Option<CtWorkbookProtection>,
pub book_views: Option<CtBookViews>,
pub function_groups: Option<CtFunctionGroups>,
pub defined_names: Option<CtDefinedNames>,
pub ole_size: Option<CtOleSize>,
pub custom_workbook_views: Option<CtCustomWorkbookViews>,
pub pivot_caches: Option<CtPivotCaches>,
pub smart_tag_pr: Option<CtSmartTagPr>,
pub smart_tag_types: Option<CtSmartTagTypes>,
pub web_publishing: Option<CtWebPublishing>,
pub file_recovery_pr: Option<CtFileRecoveryPr>,
}
pub struct Settings {
pub sheet_format_pr: HashMap<SheetId, CtSheetFormatPr>,
pub sheet_views: HashMap<SheetId, CtSheetViews>,
pub preserved_parts: HashMap<SheetId, PreservedWorksheetParts>,
pub preserved_workbook: PreservedWorkbookParts,
pub pivot_caches: Vec<PivotCache>,
pub unknown_package_parts: Vec<UnknownPart>,
pub unknown_workbook_parts: Vec<UnknownPart>,
pub sheet_ooxml_ids: HashMap<SheetId, u32>,
pub doc_props: DocProps,
pub calc_config: CalcConfig,
pub async_funcs: HashSet<String>, pub theme: ThemeManager,
}
impl Default for Settings {
fn default() -> Self {
let calc_config = CalcConfig::default();
let sheet_format_pr = HashMap::new();
let sheet_views = HashMap::new();
let afuncs = vec!["BAIDUHOTSEARCH".to_string()];
Settings {
preserved_workbook: PreservedWorkbookParts::default(),
pivot_caches: Vec::new(),
sheet_ooxml_ids: HashMap::new(),
unknown_package_parts: Vec::new(),
unknown_workbook_parts: Vec::new(),
doc_props: DocProps::default(),
sheet_format_pr,
calc_config,
sheet_views,
preserved_parts: HashMap::new(),
async_funcs: afuncs.into_iter().collect(),
theme: ThemeManager::default(),
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct CalcConfig {
pub iter_limit: u16,
pub error: f32,
}
impl Default for CalcConfig {
fn default() -> Self {
CalcConfig {
iter_limit: 1000,
error: 0.01,
}
}
}