/* * (c) Copyright Ascensio System SIA 2010-2017 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, * EU, LV-1021. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ #pragma once #include #include #include #include #include "office_elements_create.h" #include "tablevisibility.h" #include "common_attlists.h" #include "tablemode.h" #include "table_named_expressions.h" #include "table_database_ranges.h" namespace cpdoccore { namespace odf_writer { // table-table-attlist class table_table_attlist { public: table_table_attlist() { table_print_ = true; table_use_first_row_styles_ = false; table_use_banding_rows_styles_ = false; table_use_first_column_styles_ = false; table_use_banding_columns_styles_ = false; } unsigned int table_number_columns_repeated_; // default 1 _CP_OPT(std::wstring) table_name_; _CP_OPT(std::wstring) table_style_name_; _CP_OPT(std::wstring) table_template_name_; _CP_OPT(std::wstring) table_protection_key_; _CP_OPT(std::wstring) table_print_ranges_; _CP_OPT(odf_types::Bool) table_protected_; // default false bool table_print_; // default true bool table_use_first_row_styles_; // default false; bool table_use_banding_rows_styles_; // defualt false; bool table_use_first_column_styles_; // defualt false; bool table_use_banding_columns_styles_; // defualt false; void serialize(CP_ATTR_NODE); friend class table_table; }; //----------------------------------------------------------------------------------------------------- class table_table_row_attlist { public: table_table_row_attlist() : table_number_rows_repeated_(1){} unsigned int table_number_rows_repeated_; // default 1 _CP_OPT(std::wstring) table_style_name_; _CP_OPT(std::wstring) table_default_cell_style_name_; _CP_OPT(odf_types::table_visibility) table_visibility_; // default Visible void serialize(CP_ATTR_NODE); }; //----------------------------------------------------------------------------------------------------- class table_table_cell_attlist { public: table_table_cell_attlist() : table_number_columns_repeated_(1) {} unsigned int table_number_columns_repeated_; // default 1 _CP_OPT(std::wstring) table_style_name_; _CP_OPT(std::wstring) table_content_validation_name_; _CP_OPT(std::wstring) table_formula_; _CP_OPT(odf_types::common_value_and_type_attlist) common_value_and_type_attlist_; _CP_OPT(odf_types::Bool) table_protect_; // default false void serialize(CP_ATTR_NODE); }; //----------------------------------------------------------------------------------------------------- class table_table_cell_attlist_extra { public: _CP_OPT(unsigned int) table_number_columns_spanned_; // default 1 _CP_OPT(unsigned int) table_number_rows_spanned_; // default 1 _CP_OPT(unsigned int) table_number_matrix_columns_spanned_; _CP_OPT(unsigned int) table_number_matrix_rows_spanned_; void serialize(CP_ATTR_NODE); }; // table-table-source-attlist class table_table_source_attlist { public: table_table_source_attlist() : table_mode_(odf_types::table_mode::CopyAll) {} odf_types::table_mode table_mode_; // default CopyAll _CP_OPT(std::wstring) table_table_name_; void serialize(CP_ATTR_NODE); }; // table-linked-source-attlist class table_linked_source_attlist { public: odf_types::common_xlink_attlist common_xlink_attlist_; _CP_OPT(std::wstring) table_filter_name_; _CP_OPT(std::wstring) table_filter_options_; _CP_OPT(std::wstring) table_refresh_delay_; void serialize(CP_ATTR_NODE); }; //----------------------------------------------------------------------------------------------------- class table_table_source : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableTableSource; CPDOCCORE_DEFINE_VISITABLE(); table_table_source_attlist table_table_source_attlist_; table_linked_source_attlist table_linked_source_attlist_; virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); }; CP_REGISTER_OFFICE_ELEMENT2(table_table_source); //----------------------------------------------------------------------------------------------------- class table_columns { public: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name, odf_conversion_context * Context); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); public: office_element_ptr table_table_columns_; office_element_ptr_array table_table_column_; }; //----------------------------------------------------------------------------------------------------- class table_columns_no_group: public office_element { public: CPDOCCORE_OFFICE_DOCUMENT_IMPL_NAME_FUNCS_; const wchar_t * ns; const wchar_t * name; xml::NodeType xml_type; ElementType type; CPDOCCORE_DEFINE_VISITABLE(); public: table_columns_no_group(odf_conversion_context * _Context); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name/*, odf_conversion_context * Context*/); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); static _CP_PTR(table_columns_no_group) create(odf_conversion_context * Context); table_columns table_columns_1_; bool was_header_; office_element_ptr table_table_header_columns_; table_columns table_columns_2_; private: odf_conversion_context * Context; }; //----------------------------------------------------------------------------------------------------- class table_columns_and_groups { public: table_columns_and_groups(); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name, odf_conversion_context * Context); virtual void add_child_element( const office_element_ptr & child_element, odf_conversion_context * Context); virtual void serialize(std::wostream & _Wostream); public: // office_element_ptr table_table_column_group_; // table_columns_no_group table_columns_no_group_; office_element_ptr_array content_; }; //----------------------------------------------------------------------------------------------------- class table_table_column_attlist { public: table_table_column_attlist() : table_number_columns_repeated_(1){} unsigned int table_number_columns_repeated_; // default 1 _CP_OPT(std::wstring) table_style_name_; _CP_OPT(odf_types::table_visibility) table_visibility_; // default Visible _CP_OPT(std::wstring) table_default_cell_style_name_; void serialize(CP_ATTR_NODE); }; //----------------------------------------------------------------------------------------------------- class table_table_column : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableTableColumn; CPDOCCORE_DEFINE_VISITABLE(); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); public: table_table_column_attlist table_table_column_attlist_; }; CP_REGISTER_OFFICE_ELEMENT2(table_table_column); //----------------------------------------------------------------------------------------------------- class table_table_columns : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableTableColumns; CPDOCCORE_DEFINE_VISITABLE(); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); office_element_ptr_array table_table_column_; }; CP_REGISTER_OFFICE_ELEMENT2(table_table_columns); //----------------------------------------------------------------------------------------------------- class table_table_header_columns : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableTableHeaderColumns; CPDOCCORE_DEFINE_VISITABLE(); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); office_element_ptr_array table_table_column_; }; CP_REGISTER_OFFICE_ELEMENT2(table_table_header_columns); // table-table-column-group-attlist class table_table_column_group_attlist { public: table_table_column_group_attlist() : table_display_(true) {} bool table_display_; // default true }; // \class table_table_column_group // table:table-column-group // table-table-column-group class table_table_column_group : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableTableColumnGroup; CPDOCCORE_DEFINE_VISITABLE(); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); table_table_column_group() { } table_table_column_group_attlist table_table_column_group_attlist_; table_columns_and_groups table_columns_and_groups_; }; CP_REGISTER_OFFICE_ELEMENT2(table_table_column_group); //----------------------------------------------------------------------------------------------------- class table_table_row : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableTableRow; CPDOCCORE_DEFINE_VISITABLE(); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); table_table_row_attlist table_table_row_attlist_; office_element_ptr_array content_; // table-table-cell, table-covered-table-cell }; CP_REGISTER_OFFICE_ELEMENT2(table_table_row); //----------------------------------------------------------------------------------------------------- class table_table_cell_content { public: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name, odf_conversion_context * Context); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); private: // TODO table-cell-range-source // TODO office-annotation // TODO table-detective office_element_ptr_array text_content_; // text-content }; //----------------------------------------------------------------------------------------------------- class table_table_cell : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableTableCell; CPDOCCORE_DEFINE_VISITABLE(); table_table_cell() { } virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); table_table_cell_attlist table_table_cell_attlist_; table_table_cell_attlist_extra table_table_cell_attlist_extra_; table_table_cell_content table_table_cell_content_; }; CP_REGISTER_OFFICE_ELEMENT2(table_table_cell); //----------------------------------------------------------------------------------------------------- class table_covered_table_cell : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableCoveredTableCell; CPDOCCORE_DEFINE_VISITABLE(); table_covered_table_cell() {empty_ = true; } virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); bool empty_; table_table_cell_attlist table_table_cell_attlist_; table_table_cell_content table_table_cell_content_; }; CP_REGISTER_OFFICE_ELEMENT2(table_covered_table_cell); //----------------------------------------------------------------------------------------------------- class table_table_rows : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableTableRows; CPDOCCORE_DEFINE_VISITABLE(); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); table_table_rows() { } office_element_ptr_array table_table_row_; }; CP_REGISTER_OFFICE_ELEMENT2(table_table_rows); //----------------------------------------------------------------------------------------------------- class table_table_header_rows : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableTableHeaderRows; CPDOCCORE_DEFINE_VISITABLE(); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); office_element_ptr_array table_table_row_; }; CP_REGISTER_OFFICE_ELEMENT2(table_table_header_rows); //----------------------------------------------------------------------------------------------------- class table_rows { public: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name, odf_conversion_context * Context); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); office_element_ptr table_table_rows_; office_element_ptr_array table_table_row_; }; //----------------------------------------------------------------------------------------------------- class table_rows_no_group : public office_element { public: CPDOCCORE_OFFICE_DOCUMENT_IMPL_NAME_FUNCS_; static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableTableRowNoGroup; static _CP_PTR(table_rows_no_group) create(odf_conversion_context * Context); CPDOCCORE_DEFINE_VISITABLE(); public: table_rows_no_group(odf_conversion_context * Context); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); table_rows table_rows_1_; bool was_header_; office_element_ptr table_table_header_rows_; table_rows table_rows_2_; private: odf_conversion_context * Context; }; //----------------------------------------------------------------------------------------------------- class table_rows_and_groups { public: table_rows_and_groups(); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name, odf_conversion_context * Context); virtual void add_child_element( const office_element_ptr & child_element, odf_conversion_context * Context); virtual void serialize(std::wostream & _Wostream); int get_count(){return (int)content_.size();}//временно .. для группировок office_element_ptr_array content_; //int type_; //office_element_ptr table_table_row_group_; //table_rows_no_group table_rows_no_group_; }; //----------------------------------------------------------------------------------------------------- class table_table_row_group_attlist { public: table_table_row_group_attlist() : table_display_(true) {} bool table_display_; // default true }; //----------------------------------------------------------------------------------------------------- class table_table_row_group : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableTableRowGroup; CPDOCCORE_DEFINE_VISITABLE(); table_table_row_group() { } virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); table_table_row_group_attlist table_table_row_group_attlist_; table_rows_and_groups table_rows_and_groups_; }; CP_REGISTER_OFFICE_ELEMENT2(table_table_row_group); //----------------------------------------------------------------------------------------------------- class table_table : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableTable; CPDOCCORE_DEFINE_VISITABLE(); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); table_table_attlist table_table_attlist_; office_element_ptr table_table_source_;//table-table-source //office-dde-source //table-scenario //office-forms office_element_ptr table_named_expressions_; office_element_ptr table_conditional_formats_; office_element_ptr table_shapes_; table_columns_and_groups table_columns_and_groups_;//table-columns-and-groups table_rows_and_groups table_rows_and_groups_; }; CP_REGISTER_OFFICE_ELEMENT2(table_table); //----------------------------------------------------------------------------------------------------- class table_shapes : public office_element_impl { public: static const wchar_t * ns; static const wchar_t * name; static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeTableShapes; CPDOCCORE_DEFINE_VISITABLE(); virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element( const office_element_ptr & child_element); virtual void serialize(std::wostream & _Wostream); office_element_ptr_array content_; }; CP_REGISTER_OFFICE_ELEMENT2(table_shapes); } }