CLASS zcl_editor DEFINITION.
PUBLIC SECTION.
CONSTANTS c_version TYPE string VALUE 'v01.03.20250528'.
*--[ Por si hay que tocar desde fuera
DATA: t_lines TYPE STANDARD TABLE OF string,
t_tab TYPE STANDARD TABLE OF tline.
METHODS: constructor IMPORTING in_head TYPE thead
in_line_size TYPE tdlinesize OPTIONAL
i_titulo type text255 optional
i_readonly type xfeld OPTIONAL,
readonly IMPORTING i_modo type xfeld,
save.
PRIVATE SECTION.
DATA: out_head TYPE thead,
l_head TYPE thead,
i_titulo type string,
to_save TYPE xfeld,
l_readonly type xfeld.
METHODS:
read_text,
call_editor IMPORTING i_titulo TYPE text255 OPTIONAL,
sample.
ENDCLASS.
CLASS zcl_editor IMPLEMENTATION.
method readonly.
l_readonly = i_modo.
endmethod.
METHOD constructor.
MOVE-CORRESPONDING in_head TO l_head.
IF in_line_size IS SUPPLIED.
l_head-tdlinesize = in_line_size.
ELSE.
l_head-tdlinesize = 72.
ENDIF.
if i_readonly is SUPPLIED.
readonly( i_readonly ).
endif.
read_text( ).
call_editor( i_titulo ).
ENDMETHOD.
METHOD read_text.
CLEAR to_save.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = l_head-tdid
language = l_head-tdspras
name = l_head-tdname
object = l_head-tdobject
IMPORTING
header = out_head
* OLD_LINE_COUNTER =
TABLES
lines = t_tab
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc EQ 0.
LOOP AT t_tab INTO DATA(bx).
APPEND bx-tdline TO t_lines.
ENDLOOP.
ELSE.
MOVE-CORRESPONDING l_head TO out_head.
ENDIF.
ENDMETHOD.
METHOD save.
DATA: l_vacia TYPE i.
CHECK to_save = abap_true.
CHECK l_readonly IS INITIAL.
REFRESH t_tab.
clear l_vacia.
LOOP AT t_lines INTO DATA(ax).
t_tab = VALUE #( BASE t_tab ( tdformat = '*'
tdline = ax ) ).
IF ax IS INITIAL.
ADD 1 TO l_vacia.
ENDIF.
ENDLOOP.
IF lines( t_tab ) = l_vacia.
CALL FUNCTION 'DELETE_TEXT'
EXPORTING
id = l_head-tdid
language = l_head-tdspras
name = l_head-tdname
object = l_head-tdobject
EXCEPTIONS
not_found = 1
OTHERS = 2.
ELSE.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
header = l_head
insert = 'I'
TABLES
lines = t_tab
EXCEPTIONS
id = 1
language = 2
name = 3
object = 4
OTHERS = 5.
ENDIF.
ENDMETHOD.
METHOD call_editor.
data: l_titulo type text255.
l_titulo = 'Editor de notas'.
if i_titulo is not INITIAL.
l_titulo = i_titulo.
endif.
CALL FUNCTION 'TERM_CONTROL_EDIT'
EXPORTING
titel = l_titulo
langu = sy-langu
TABLES
textlines = t_lines
EXCEPTIONS
user_cancelled = 1
OTHERS = 2.
IF sy-subrc EQ 0 and l_readonly is INITIAL.
to_save = abap_true.
ENDIF.
ENDMETHOD.
METHOD sample.
DATA(editor) = NEW zcl_editor( in_head = VALUE #( tdid = 'ST'
tdspras = sy-langu
tdobject = 'TEXT'
tdname = 'ZINI_001' )
i_titulo = 'Test'
i_readonly = abap_false
).
*--[ Si se quiere grabar, ya se sabe
editor->save( ).
ENDMETHOD.
ENDCLASS.