summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2022-06-07 18:53:11 -0400
committerKohei Yoshida <kohei.yoshida@gmail.com>2022-06-07 18:53:11 -0400
commita714e1732a52fc1c5d9e6c85961cd5039b7c8bc6 (patch)
tree72516010594759a8bab9f8d653b0d2e9d9d88449
parent77a26f36b3b5d5302d1ce4161f3bf29a3afc8750 (diff)
downloadorcus-a714e1732a52fc1c5d9e6c85961cd5039b7c8bc6.tar.gz
Use import_xf in gnumeric
-rw-r--r--src/liborcus/gnumeric_sheet_context.cpp29
-rw-r--r--src/liborcus/gnumeric_sheet_context.hpp2
2 files changed, 20 insertions, 11 deletions
diff --git a/src/liborcus/gnumeric_sheet_context.cpp b/src/liborcus/gnumeric_sheet_context.cpp
index 204cc9ca..359d0ffb 100644
--- a/src/liborcus/gnumeric_sheet_context.cpp
+++ b/src/liborcus/gnumeric_sheet_context.cpp
@@ -613,6 +613,9 @@ void gnumeric_sheet_context::start_style(const xml_attrs_t& attrs)
auto* number_format = styles->get_number_format();
ENSURE_INTERFACE(number_format, import_number_format);
+ mp_xf = styles->get_xf(ss::xf_category_t::cell);
+ ENSURE_INTERFACE(mp_xf, import_xf);
+
bool fill_set = false;
bool protection_set = false;
@@ -664,7 +667,7 @@ void gnumeric_sheet_context::start_style(const xml_attrs_t& attrs)
{
number_format->set_code(attr.value);
std::size_t index = number_format->commit();
- styles->set_xf_number_format(index);
+ mp_xf->set_number_format(index);
}
break;
}
@@ -685,8 +688,8 @@ void gnumeric_sheet_context::start_style(const xml_attrs_t& attrs)
hor_alignment = ss::hor_alignment_t::filled;
if (hor_alignment != ss::hor_alignment_t::unknown)
- styles->set_xf_apply_alignment(true);
- styles->set_xf_horizontal_alignment(hor_alignment);
+ mp_xf->set_apply_alignment(true);
+ mp_xf->set_horizontal_alignment(hor_alignment);
break;
}
case XML_VAlign:
@@ -704,8 +707,8 @@ void gnumeric_sheet_context::start_style(const xml_attrs_t& attrs)
ver_alignment = ss::ver_alignment_t::distributed;
if (ver_alignment != ss::ver_alignment_t::unknown)
- styles->set_xf_apply_alignment(true);
- styles->set_xf_vertical_alignment(ver_alignment);
+ mp_xf->set_apply_alignment(true);
+ mp_xf->set_vertical_alignment(ver_alignment);
break;
}
}
@@ -714,12 +717,12 @@ void gnumeric_sheet_context::start_style(const xml_attrs_t& attrs)
if (fill_set)
{
size_t fill_id = fill_style->commit();
- styles->set_xf_fill(fill_id);
+ mp_xf->set_fill(fill_id);
}
if (protection_set)
{
size_t protection_id = cell_protection->commit();
- styles->set_xf_protection(protection_id);
+ mp_xf->set_protection(protection_id);
}
}
@@ -761,11 +764,15 @@ void gnumeric_sheet_context::end_font()
void gnumeric_sheet_context::end_style(bool conditional_format)
{
- spreadsheet::iface::import_styles& styles = *mp_factory->get_styles();
- size_t id = styles.commit_cell_xf();
+ ss::iface::import_styles* styles = mp_factory->get_styles();
+ if (!styles)
+ return;
+
+ assert(mp_xf);
+ size_t xf_id = mp_xf->commit();
if (!conditional_format)
{
- mp_region_data->xf_id = id;
+ mp_region_data->xf_id = xf_id;
}
else
{
@@ -773,7 +780,7 @@ void gnumeric_sheet_context::end_style(bool conditional_format)
mp_sheet->get_conditional_format();
if (cond_format)
{
- cond_format->set_xf_id(id);
+ cond_format->set_xf_id(xf_id);
}
}
}
diff --git a/src/liborcus/gnumeric_sheet_context.hpp b/src/liborcus/gnumeric_sheet_context.hpp
index 605123b8..1b1c0896 100644
--- a/src/liborcus/gnumeric_sheet_context.hpp
+++ b/src/liborcus/gnumeric_sheet_context.hpp
@@ -20,6 +20,7 @@ namespace spreadsheet { namespace iface {
class import_factory;
class import_sheet;
class import_auto_filter;
+class import_xf;
}}
@@ -88,6 +89,7 @@ private:
spreadsheet::iface::import_sheet* mp_sheet;
spreadsheet::iface::import_auto_filter* mp_auto_filter;
+ spreadsheet::iface::import_xf* mp_xf = nullptr;
std::unique_ptr<xml_context_base> mp_child;
std::unique_ptr<gnumeric_style_region> mp_region_data;