abap2xlsx/src/zcl_excel_theme.clas.abap
2022-05-19 13:25:48 +02:00

234 lines
8.1 KiB
ABAP

CLASS zcl_excel_theme DEFINITION
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
CONSTANTS c_theme_elements TYPE string VALUE 'themeElements'. "#EC NOTEXT
CONSTANTS c_theme_object_def TYPE string VALUE 'objectDefaults'. "#EC NOTEXT
CONSTANTS c_theme_extra_color TYPE string VALUE 'extraClrSchemeLst'. "#EC NOTEXT
CONSTANTS c_theme_extlst TYPE string VALUE 'extLst'. "#EC NOTEXT
CONSTANTS c_theme TYPE string VALUE 'theme'. "#EC NOTEXT
CONSTANTS c_theme_name TYPE string VALUE 'name'. "#EC NOTEXT
CONSTANTS c_theme_xmlns TYPE string VALUE 'xmlns:a'. "#EC NOTEXT
CONSTANTS c_theme_prefix TYPE string VALUE 'a'. "#EC NOTEXT
CONSTANTS c_theme_prefix_write TYPE string VALUE 'a:'. "#EC NOTEXT
CONSTANTS c_theme_xmlns_val TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main'. "#EC NOTEXT
METHODS constructor .
METHODS read_theme
IMPORTING
VALUE(io_theme_xml) TYPE REF TO if_ixml_document .
METHODS write_theme
RETURNING
VALUE(rv_xstring) TYPE xstring .
METHODS set_color
IMPORTING
VALUE(iv_type) TYPE string
VALUE(iv_srgb) TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL
VALUE(iv_syscolorname) TYPE string OPTIONAL
VALUE(iv_syscolorlast) TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL .
METHODS set_color_scheme_name
IMPORTING
iv_name TYPE string .
METHODS set_font
IMPORTING
iv_type TYPE string
iv_script TYPE string
iv_typeface TYPE string .
METHODS set_latin_font
IMPORTING
VALUE(iv_type) TYPE string
VALUE(iv_typeface) TYPE string
VALUE(iv_panose) TYPE string OPTIONAL
VALUE(iv_pitchfamily) TYPE string OPTIONAL
VALUE(iv_charset) TYPE string OPTIONAL .
METHODS set_ea_font
IMPORTING
VALUE(iv_type) TYPE string
VALUE(iv_typeface) TYPE string
VALUE(iv_panose) TYPE string OPTIONAL
VALUE(iv_pitchfamily) TYPE string OPTIONAL
VALUE(iv_charset) TYPE string OPTIONAL .
METHODS set_cs_font
IMPORTING
VALUE(iv_type) TYPE string
VALUE(iv_typeface) TYPE string
VALUE(iv_panose) TYPE string OPTIONAL
VALUE(iv_pitchfamily) TYPE string OPTIONAL
VALUE(iv_charset) TYPE string OPTIONAL .
METHODS set_font_scheme_name
IMPORTING
VALUE(iv_name) TYPE string .
METHODS set_theme_name
IMPORTING
VALUE(iv_name) TYPE string .
PROTECTED SECTION.
DATA elements TYPE REF TO zcl_excel_theme_elements .
DATA objectdefaults TYPE REF TO zcl_excel_theme_objectdefaults .
DATA extclrschemelst TYPE REF TO zcl_excel_theme_eclrschemelst .
DATA extlst TYPE REF TO zcl_excel_theme_extlst .
PRIVATE SECTION.
DATA theme_changed TYPE abap_bool .
DATA theme_read TYPE abap_bool .
DATA name TYPE string .
DATA xmls_a TYPE string .
ENDCLASS.
CLASS zcl_excel_theme IMPLEMENTATION.
METHOD constructor.
CREATE OBJECT elements.
CREATE OBJECT objectdefaults.
CREATE OBJECT extclrschemelst.
CREATE OBJECT extlst.
ENDMETHOD. "class_constructor
METHOD read_theme.
DATA: lo_node_theme TYPE REF TO if_ixml_element.
DATA: lo_theme_children TYPE REF TO if_ixml_node_list.
DATA: lo_theme_iterator TYPE REF TO if_ixml_node_iterator.
DATA: lo_theme_element TYPE REF TO if_ixml_element.
CHECK io_theme_xml IS NOT INITIAL.
lo_node_theme = io_theme_xml->get_root_element( )." find_from_name( name = c_theme ).
IF lo_node_theme IS BOUND.
name = lo_node_theme->get_attribute( name = c_theme_name ).
xmls_a = lo_node_theme->get_attribute( name = c_theme_xmlns ).
lo_theme_children = lo_node_theme->get_children( ).
lo_theme_iterator = lo_theme_children->create_iterator( ).
lo_theme_element ?= lo_theme_iterator->get_next( ).
WHILE lo_theme_element IS BOUND.
CASE lo_theme_element->get_name( ).
WHEN c_theme_elements.
elements->load( io_elements = lo_theme_element ).
WHEN c_theme_object_def.
objectdefaults->load( io_object_def = lo_theme_element ).
WHEN c_theme_extra_color.
extclrschemelst->load( io_extra_color = lo_theme_element ).
WHEN c_theme_extlst.
extlst->load( io_extlst = lo_theme_element ).
ENDCASE.
lo_theme_element ?= lo_theme_iterator->get_next( ).
ENDWHILE.
ENDIF.
ENDMETHOD. "read_theme
METHOD set_color.
elements->color_scheme->set_color(
EXPORTING
iv_type = iv_type
iv_srgb = iv_srgb
iv_syscolorname = iv_syscolorname
iv_syscolorlast = iv_syscolorlast
).
ENDMETHOD. "set_color
METHOD set_color_scheme_name.
elements->color_scheme->set_name( iv_name = iv_name ).
ENDMETHOD. "set_color_scheme_name
METHOD set_cs_font.
elements->font_scheme->modify_cs_font(
EXPORTING
iv_type = iv_type
iv_typeface = iv_typeface
iv_panose = iv_panose
iv_pitchfamily = iv_pitchfamily
iv_charset = iv_charset
).
ENDMETHOD. "set_cs_font
METHOD set_ea_font.
elements->font_scheme->modify_ea_font(
EXPORTING
iv_type = iv_type
iv_typeface = iv_typeface
iv_panose = iv_panose
iv_pitchfamily = iv_pitchfamily
iv_charset = iv_charset
).
ENDMETHOD. "set_ea_font
METHOD set_font.
elements->font_scheme->modify_font(
EXPORTING
iv_type = iv_type
iv_script = iv_script
iv_typeface = iv_typeface
).
ENDMETHOD. "set_font
METHOD set_font_scheme_name.
elements->font_scheme->set_name( iv_name = iv_name ).
ENDMETHOD. "set_font_scheme_name
METHOD set_latin_font.
elements->font_scheme->modify_latin_font(
EXPORTING
iv_type = iv_type
iv_typeface = iv_typeface
iv_panose = iv_panose
iv_pitchfamily = iv_pitchfamily
iv_charset = iv_charset
).
ENDMETHOD. "set_latin_font
METHOD set_theme_name.
name = iv_name.
ENDMETHOD.
METHOD write_theme.
DATA: lo_ixml TYPE REF TO if_ixml,
lo_element_root TYPE REF TO if_ixml_element,
lo_encoding TYPE REF TO if_ixml_encoding.
DATA: lo_streamfactory TYPE REF TO if_ixml_stream_factory.
DATA: lo_ostream TYPE REF TO if_ixml_ostream.
DATA: lo_renderer TYPE REF TO if_ixml_renderer.
DATA: lo_document TYPE REF TO if_ixml_document.
lo_ixml = cl_ixml=>create( ).
lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian
character_set = 'UTF-8' ).
lo_document = lo_ixml->create_document( ).
lo_document->set_encoding( lo_encoding ).
lo_document->set_standalone( abap_true ).
lo_document->set_namespace_prefix( prefix = 'a' ).
lo_element_root = lo_document->create_simple_element_ns( prefix = c_theme_prefix
name = c_theme
parent = lo_document
).
lo_element_root->set_attribute_ns( name = c_theme_xmlns
value = c_theme_xmlns_val ).
lo_element_root->set_attribute_ns( name = c_theme_name
value = name ).
elements->build_xml( io_document = lo_document ).
objectdefaults->build_xml( io_document = lo_document ).
extclrschemelst->build_xml( io_document = lo_document ).
extlst->build_xml( io_document = lo_document ).
lo_streamfactory = lo_ixml->create_stream_factory( ).
lo_ostream = lo_streamfactory->create_ostream_xstring( string = rv_xstring ).
lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ).
lo_renderer->render( ).
ENDMETHOD. "write_theme
ENDCLASS.