Commit 53cf16b3 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

(1.2.0.64): ASCOfficeOdfFileW


git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@56551 954022d7-b5bf-4e40-9824-e11837661b57
parent 7c4adc6c
......@@ -81,6 +81,7 @@ public:
std::vector<odf_axis_state> axis_;
std::vector<office_element_ptr> group_series_;
std::vector<unsigned int> axis_group_series_;
std::vector<std::wstring> data_cell_ranges_;
std::vector<odf_chart_level_state> current_level_; //
std::vector<odf_chart_state> chart_list_; // .. ""
......@@ -124,6 +125,7 @@ void odf_chart_context::Impl::clear_current()
categories_.clear();
axis_.clear();
group_series_.clear();
data_cell_ranges_.clear();
current_series_count_ = 0;
}
......@@ -687,7 +689,7 @@ void odf_chart_context::start_plot_area()
chart_plot_area *plot_area = dynamic_cast<chart_plot_area*>(chart_elm.get());
if (plot_area == NULL)return;
//plot_area->chart_plot_area_attlist_.chart_data_source_has_labels_ = L"both";
plot_area->chart_plot_area_attlist_.chart_data_source_has_labels_ = L"both";
//////////
impl_->styles_context_->create_style(L"",style_family::Chart, true, false, -1);
......@@ -706,7 +708,27 @@ void odf_chart_context::start_plot_area()
if (!impl_->current_level_.back().chart_properties_) return;
impl_->current_level_.back().chart_properties_->content().chart_treat_empty_cells_ = true;
}
void odf_chart_context::end_plot_area()
{
if (impl_->axis_.size() < 1 && impl_->categories_.size() > 0)
{
start_axis();
set_axis_dimension(1);
//set_axis_type();
end_element();
}
chart_plot_area *plot_area = dynamic_cast<chart_plot_area*>(impl_->current_level_.back().elm.get());
if (plot_area)
{
std::wstring cell_range;
for (long i=0; i< impl_->data_cell_ranges_.size();i++)
{
cell_range = cell_range + impl_->data_cell_ranges_[i] + L" ";
}
plot_area->chart_plot_area_attlist_.table_cell_range_address_ = cell_range;
}
end_element();
}
void odf_chart_context::start_text()
{
......@@ -1108,6 +1130,7 @@ void odf_chart_context::start_element(office_element_ptr & elm, office_element_p
impl_->current_level_.push_back(level_state);// current_chart_properties ????
}
void odf_chart_context::end_element()
{
//
......@@ -1142,6 +1165,7 @@ void odf_chart_context::end_chart()
end_element();
///////////////////
for (long i=0; i< impl_->axis_.size() && impl_->categories_.size() > 0; i++)
{
if (impl_->axis_[i].elm == NULL)continue;
......@@ -1174,6 +1198,7 @@ void odf_chart_context::set_series_value_formula(std::wstring oox_formula)
series->chart_series_attlist_.chart_values_cell_range_address_ = odfFormula;
impl_->data_cell_ranges_.push_back(odfFormula);
impl_->current_data_points_series_count_ = formulas_converter.get_count_value_points(oox_formula);
}
void odf_chart_context::set_series_label_formula(std::wstring oox_formula)
......@@ -1183,6 +1208,7 @@ void odf_chart_context::set_series_label_formula(std::wstring oox_formula)
chart_series *series = dynamic_cast<chart_series*>(impl_->current_chart_state_.elements_.back().elm.get());
if (series == NULL)return;
impl_->data_cell_ranges_.push_back(odfFormula);
series->chart_series_attlist_.chart_label_cell_address_ = odfFormula;
}
......@@ -1190,6 +1216,7 @@ void odf_chart_context::set_category_axis_formula(std::wstring oox_formula,int t
{
std::wstring odfFormula = formulas_converter.convert_chart_distance(oox_formula);
impl_->data_cell_ranges_.push_back(odfFormula);
impl_->categories_.push_back(std::pair<std::wstring,int>(odfFormula,type));
}
......
......@@ -46,6 +46,9 @@ public:
void set_marker_size(int size);
void set_marker_type(int type);
void start_plot_area();
void end_plot_area();
void start_group_series();
void add_axis_group_series(unsigned int id);
......@@ -82,7 +85,6 @@ public:
void set_axis_min(double val);
void start_title();
void start_grid(int type);
void start_plot_area();
void start_legend();
void start_floor();
void start_wall();
......
......@@ -16,7 +16,7 @@ namespace odf {
//////////////////////////////////////////////////////////////////////////////////////////////////
odf_conversion_context::odf_conversion_context(package::odf_document * outputDocument) : chart_context_ (this)
odf_conversion_context::odf_conversion_context(package::odf_document * outputDocument) : chart_context_ (this), page_layout_context_(this)
{
output_document_ = outputDocument;
......@@ -30,6 +30,11 @@ odf_style_context* odf_conversion_context::styles_context()
else
return NULL;
}
odf_page_layout_context* odf_conversion_context::page_layout_context()
{
return &page_layout_context_;
}
odf_chart_context* odf_conversion_context::chart_context()
{
return &chart_context_;
......
......@@ -50,6 +50,8 @@ public:
odf_chart_context * chart_context();
odf_style_context * styles_context();
odf_page_layout_context * page_layout_context();
odf_number_styles_context * numbers_styles_context();
_mediaitems * mediaitems();
......@@ -69,11 +71,13 @@ private:
std::vector<_object> objects_;//"0" = root
odf_chart_context chart_context_;
odf_page_layout_context page_layout_context_;
void process_styles(_object & object, bool isRoot);
int current_object_;
//page_layout_container & pageLayoutContainer() { return page_layout_container_; }
//fonts_container & fontContainer() { return fonts_container_; }
//list_style_container & listStyleContainer() { return list_style_container_; }
......
......@@ -14,16 +14,13 @@
namespace cpdoccore {
namespace odf {
odf_page_layout_context::odf_page_layout_context()
{
}
void odf_page_layout_context::set_odf_context(odf_conversion_context * Context)
odf_page_layout_context::odf_page_layout_context(odf_conversion_context * Context)
{
odf_context_ = Context;
style_context_ = Context->styles_context();
style_context_ = Context->styles_context();
}
odf_layout_state & odf_page_layout_context::last_layout()
{
if (layout_state_list_.size() >0)
......@@ -47,18 +44,28 @@ void odf_page_layout_context::create_master_page(std::wstring oox_name)
style_family family = style_family::MasterPage;
create_element(L"style", L"master-page", elm, odf_context_);
if (odf_name.length() <1)odf_name = style_context_->find_free_name(style_family::MasterPage);
if (!elm) return;
style_context_->add_master_style(elm);
master_state_list_.push_back( odf_master_state(elm) );
///////////////////////////////////////
if (odf_name.length() <1)odf_name =L"MasterPage" + boost::lexical_cast<std::wstring>(master_state_list_.size());
master_state_list_.back().set_name(odf_name);
/////////////////////////
//default layout
create_layout_page();
master_state_list_.back().set_layout_name(layout_state_list_.back().get_name());
}
void odf_page_layout_context::set_styles_context(odf_style_context * Context)
{
style_context_ = Context;
}
void odf_page_layout_context::create_layout_page()
{
office_element_ptr elm;
......@@ -76,9 +83,54 @@ void odf_page_layout_context::create_layout_page()
///////////////////////////////////////
layout_state_list_.back().set_name(odf_name);
}
void odf_page_layout_context::set_page_margin(_CP_OPT(double) top, _CP_OPT(double) left, _CP_OPT(double) bottom, _CP_OPT(double) right, _CP_OPT(double) header, _CP_OPT(double) footer)
{
if (layout_state_list_.size() < 1) return;
style_page_layout_properties * props = layout_state_list_.back().get_properties();
if (props == NULL)
{
office_element_ptr elm;
create_element(L"style", L"page-layout-properties", elm, odf_context_);
layout_state_list_.back().add_child(elm, office_element_ptr(),L"");
props = layout_state_list_.back().get_properties();
}
if (!props)return;
if (top)
props->style_page_layout_properties_attlist_.common_vertical_margin_attlist_.fo_margin_top_ =
length(length(*top,length::inch).get_value_unit(length::cm),length::cm);
if (bottom)
props->style_page_layout_properties_attlist_.common_vertical_margin_attlist_.fo_margin_bottom_=
length(length(*bottom,length::inch).get_value_unit(length::cm),length::cm);
if (left)
props->style_page_layout_properties_attlist_.common_horizontal_margin_attlist_.fo_margin_left_ =
length(length(*left,length::inch).get_value_unit(length::cm),length::cm);
if (right)
props->style_page_layout_properties_attlist_.common_horizontal_margin_attlist_.fo_margin_right_ =
length(length(*right,length::inch).get_value_unit(length::cm),length::cm);
}
void odf_page_layout_context::set_page_orientation(int type)
{
if (layout_state_list_.size() < 1) return;
style_page_layout_properties * props = layout_state_list_.back().get_properties();
if (props == NULL)
{
office_element_ptr elm;
create_element(L"style", L"page-layout-properties", elm, odf_context_);
layout_state_list_.back().add_child(elm, office_element_ptr(),L"");
props = layout_state_list_.back().get_properties();
}
if (!props)return;
if (type == 2)
props->style_page_layout_properties_attlist_.style_print_orientation_ = L"landscape";
else
props->style_page_layout_properties_attlist_.style_print_orientation_ = L"portrait";
}
}
}
\ No newline at end of file
......@@ -20,17 +20,17 @@ typedef shared_ptr<odf_page_layout_context>::Type odf_page_layout_context_ptr;
class odf_page_layout_context
{
public:
odf_page_layout_context();
void set_odf_context (odf_conversion_context * Context);
void set_style_context (odf_style_context * Context);
odf_page_layout_context(odf_conversion_context * Context);
void set_styles_context (odf_style_context * Context);
void create_master_page(std::wstring oox_name);
void create_layout_page();
odf_layout_state & last_layout();
odf_master_state & last_master();
void set_page_margin(_CP_OPT(double) top, _CP_OPT(double) left, _CP_OPT(double) bottom, _CP_OPT(double) right, _CP_OPT(double) header, _CP_OPT(double) footer);
void set_page_orientation(int type);
private:
......
......@@ -66,6 +66,8 @@ odf_layout_state::odf_layout_state(office_element_ptr & layout_elm )
void odf_layout_state::add_child(office_element_ptr & child_elm, office_element_ptr style_elm, std::wstring style_name )
{
if (current_level_.size() < 1) return;
int level =current_level_.size();
odf_element_state state = {child_elm, style_name, style_elm,level};
......@@ -88,5 +90,19 @@ std::wstring odf_layout_state::get_name()
return style_->style_page_layout_attlist_.style_name_.get_value_or(L"");
}
style_page_layout_properties *odf_layout_state::get_properties()
{
style_page_layout_properties *result=NULL;
for (long i= 1; i<elements_.size(); i++)//"0" - root
{
result = dynamic_cast<style_page_layout_properties *>(elements_[i].elm.get());
if (result) return result;
}
return NULL;
}
}
}
\ No newline at end of file
......@@ -13,6 +13,7 @@ namespace odf {
class odf_conversion_context;
class odf_style_context;
class odf_page_layout_context;
class style_page_layout_properties;
struct odf_element_state
{
......@@ -31,11 +32,10 @@ public:
void add_child(office_element_ptr & child_elm, office_element_ptr style_elm, std::wstring style_name );
void set_name(std::wstring & name);
std::wstring get_name();
void set_name(std::wstring & name);
std::wstring get_name();
void set_layout_name(std::wstring & name);
void set_layout_name(std::wstring & name);
private:
std::wstring style_oox_name_;
......@@ -53,18 +53,16 @@ public:
void add_child(office_element_ptr & child_elm, office_element_ptr style_elm, std::wstring style_name );
void set_name(std::wstring & name);
std::wstring get_name();
void set_name(std::wstring & name);
std::wstring get_name();
style_page_layout_properties * get_properties();// ...
private:
std::wstring style_oox_name_;
std::vector<office_element_ptr> current_level_;
std::vector<odf_element_state> elements_;
friend class odf_page_layout_context;
};
......
......@@ -58,11 +58,10 @@ public:
private:
odf_number_styles_context number_styles_context_;
odf_conversion_context * odf_context_;
odf_conversion_context * odf_context_;
std::vector<odf_style_state> style_state_list_;
std::vector<office_element_ptr> master_style_list_;
std::vector<odf_style_state> style_state_list_;
std::vector<office_element_ptr> master_style_list_;
std::vector<odf_style_state> current_default_styles_;// ..
......
......@@ -37,7 +37,7 @@ void calculate_size_font_symbols(_font_metrix & metrix)
}
}
ods_conversion_context::ods_conversion_context(package::odf_document * outputDocument)
: odf_conversion_context(outputDocument), table_context_(*this), current_text_context_(NULL)
: odf_conversion_context(outputDocument), table_context_(*this), current_text_context_(NULL), page_layout_context_(this)
{
font_metrix_ = _font_metrix();
}
......@@ -80,11 +80,15 @@ void ods_conversion_context::add_defined_expression(std::wstring & name,std::wst
}
void ods_conversion_context::start_sheet()
{
create_element(L"table", L"table",root_spreadsheet_->getContent(),this);
create_element(L"table", L"table",root_spreadsheet_->getContent(),this);
table_context_.start_table(root_spreadsheet_->getContent().back());
drawing_context()->set_styles_context(styles_context());
drawing_context()->set_styles_context(styles_context());
page_layout_context()->set_styles_context(styles_context());
page_layout_context()->create_master_page(L"");
current_table().set_table_master_page(page_layout_context()->last_master().get_name());
}
void ods_conversion_context::set_sheet_dimension(std::wstring & ref)
......
......@@ -122,6 +122,13 @@ void ods_table_state::set_table_name(std::wstring name)
table->table_table_attlist_.table_name_ = name;
}
void ods_table_state::set_table_master_page(std::wstring name)
{
if (!office_table_style_)return;
office_table_style_->style_master_page_name_ = name;
}
void ods_table_state::set_table_hidden(bool Val)
{
if (!office_table_style_)return;
......
......@@ -173,6 +173,7 @@ public:
void set_table_name(std::wstring name);
void set_table_style(office_element_ptr & _style);
void set_table_hidden(bool Val);
void set_table_master_page(std::wstring name);
void set_table_rtl(bool Val);
void set_table_tab_color(_CP_OPT(color) & _color);
void set_table_dimension(int col, int row);
......
......@@ -935,12 +935,6 @@ public:
static const ElementType type = typeStylePageLayout;
CPDOCCORE_DEFINE_VISITABLE();
const style_page_layout_properties_attlist & get_style_page_layout_properties_attlist() const
{
return style_page_layout_properties_attlist_;
};
style_page_layout_properties() { }
virtual void create_child_element( const ::std::wstring & Ns, const ::std::wstring & Name);
......
......@@ -230,7 +230,7 @@ public:
void convert(OOX::WritingElement *oox_unknown);
void convert(OOX::Drawing::CNonVisualDrawingProps *oox_cnvPr);
void convert(OOX::Drawing::CShapeProperties *oox_spPr, OOX::Drawing::CShapeStyle* oox_sp_style /*= NULL)*/);
void convert(OOX::Drawing::CShapeProperties *oox_spPr, OOX::Drawing::CShapeStyle* oox_sp_style = NULL);
void convert(OOX::Drawing::CGroupShapeProperties *oox_groupSpPr);
void convert(OOX::Drawing::CTextBodyProperties *oox_bodyPr);
......
......@@ -170,7 +170,7 @@ void OoxConverter::convert(OOX::Spreadsheet::CT_PlotArea* ct_plotArea)
odf_context()->chart_context()->start_wall();
convert(ct_plotArea->m_oSpPr.GetPointer());
odf_context()->chart_context()->end_element();
odf_context()->chart_context()->end_element();
odf_context()->chart_context()->end_plot_area();
}
//////////////////////////////////////////////////////////////////////////////////////////////
......
......@@ -176,11 +176,8 @@ void XlsxConverter::convert(OOX::Spreadsheet::CWorksheet *oox_sheet)
{
ods_context->set_sheet_dimension(string2std_string(oox_sheet->m_oDimension->m_oRef.get()));
}
// &
convert(oox_sheet->m_oSheetFormatPr.GetPointer());
convert(oox_sheet->m_oSheetPr.GetPointer());
convert(oox_sheet->m_oSheetViews.GetPointer());
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
......@@ -249,6 +246,10 @@ void XlsxConverter::convert(OOX::Spreadsheet::CWorksheet *oox_sheet)
}
ods_context->end_conditional_formats();
}
/////////////////////////////////////////////////////////////////////////
convert(oox_sheet->m_oSheetViews.GetPointer());
convert(oox_sheet->m_oPageSetup.GetPointer());
convert(oox_sheet->m_oPageMargins.GetPointer());
}
void XlsxConverter::convert(OOX::Spreadsheet::CCommentItem * oox_comment)
{
......@@ -731,6 +732,22 @@ void XlsxConverter::convert(OOX::Spreadsheet::CSheetViews *oox_sheet_views)
}
}
void XlsxConverter::convert(OOX::Spreadsheet::CPageSetup *oox_page)
{
if (!oox_page) return;
int type = 1;
ods_context->page_layout_context()->set_page_orientation(type);
}
void XlsxConverter::convert(OOX::Spreadsheet::CPageMargins *oox_page)
{
if (!oox_page) return;
_CP_OPT(double) top, left,right,header,footer,bottom;
ods_context->page_layout_context()->set_page_margin(top,left,bottom, right,header,footer);
}
void XlsxConverter::convert(OOX::Spreadsheet::CSheetFormatPr *oox_sheet_format_pr)
{
if (!oox_sheet_format_pr)return;
......@@ -1606,7 +1623,12 @@ void XlsxConverter::convert(OOX::Spreadsheet::CConnShape* oox_shape)
//////////////////////////////////////////////////////////////////////////////
ods_context->drawing_context()->start_shape(type);
{
OoxConverter::convert(oox_shape->m_oSpPr.GetPointer());
OoxConverter::convert(oox_shape->m_oSpPr.GetPointer(), oox_shape->m_oShapeStyle.GetPointer());
// .. :)
odf_context()->drawing_context()->start_area_properies();
odf_context()->drawing_context()->set_no_fill();
odf_context()->drawing_context()->end_area_properies();
if (oox_shape->m_oNvConnSpPr.IsInit())
{
......@@ -1619,12 +1641,7 @@ void XlsxConverter::convert(OOX::Spreadsheet::CConnShape* oox_shape)
{
}
}
if (oox_shape->m_oShapeStyle.IsInit())
{
}
//avLst
}
ods_context->drawing_context()->end_shape();
ods_context->drawing_context()->end_drawing();
......@@ -1694,14 +1711,9 @@ void XlsxConverter::convert(OOX::Spreadsheet::CPic* oox_picture)
//m_oExtLst
}
}
if (oox_picture->m_oSpPr.IsInit())
{
OoxConverter::convert(oox_picture->m_oSpPr.GetPointer());
}
if (oox_picture->m_oShapeStyle.IsInit())
{
}
OoxConverter::convert(oox_picture->m_oSpPr.GetPointer(), oox_picture->m_oShapeStyle.GetPointer());
}
ods_context->drawing_context()->end_image();
ods_context->drawing_context()->end_drawing();
......
......@@ -56,6 +56,8 @@ namespace OOX
class CAutofilter;
class CFilterColumn;
class CSheetViews;
class CPageSetup;
class CPageMargins;
}
}
......@@ -139,6 +141,8 @@ namespace Oox2Odf
void convert(OOX::Spreadsheet::CSheetFormatPr *oox_sheet_format_pr);
void convert(OOX::Spreadsheet::CSheetPr *oox_sheet_pr);
void convert(OOX::Spreadsheet::CSheetViews *oox_sheet_views);
void convert(OOX::Spreadsheet::CPageSetup *oox_page);
void convert(OOX::Spreadsheet::CPageMargins *oox_page);
void convert(OOX::Spreadsheet::CFont *font, odf::style_text_properties *text_properties);
void convert(OOX::Spreadsheet::CBorder *border, odf::style_table_cell_properties *cell_properties);
......
......@@ -2,6 +2,6 @@
//1
//2
//0
//62
#define INTVER 1,2,0,62
#define STRVER "1,2,0,62\0"
//64
#define INTVER 1,2,0,64
#define STRVER "1,2,0,64\0"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment