* Demoprogramme
* RSDEMO_DRAG_DROP_EDIT_TREE
* RSDEMO_DRAG_DROP_TREE_MULTI
* SAPSIMPLE_TREE_CONTROL_DEMO
TYPES: ty_it_events TYPE STANDARD TABLE OF cntl_simple_event WITH DEFAULT KEY.
TYPES: ty_it_nodes TYPE STANDARD TABLE OF mtreesnode WITH DEFAULT KEY.
DATA: it_nodes TYPE ty_it_nodes.
CLASS lcl_event DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: on_keypress FOR EVENT node_keypress OF cl_gui_simple_tree
IMPORTING
node_key
key
sender.
CLASS-METHODS: on_double_click FOR EVENT node_double_click OF cl_gui_simple_tree
IMPORTING
node_key
sender.
CLASS-METHODS: on_selection_changed FOR EVENT selection_changed OF cl_gui_simple_tree
IMPORTING
node_key
sender.
CLASS-METHODS: on_expand_no_children FOR EVENT expand_no_children OF cl_gui_simple_tree
IMPORTING
node_key
sender.
ENDCLASS.
CLASS lcl_event IMPLEMENTATION.
* Tastendruck, die Tasten müssen mit add_key_stroke( ) registriert worden sein
METHOD on_keypress.
WRITE: / |Node: { node_key } Taste: { key }|.
ENDMETHOD.
* Doppelklick auf ein aktives Baumelement
METHOD on_double_click.
* Text in der Nodes-Tabelle anpassen
ASSIGN it_nodes[ node_key = node_key ] TO FIELD-SYMBOL(<fs_node>).
<fs_node>-text = 'Schonmal geklickt.'.
* Text in der Node anpassen
sender->node_set_text( node_key = node_key text = <fs_node>-text ).
WRITE: / |Node: { node_key }, Text: { <fs_node>-text }|.
ENDMETHOD.
* Klick auf ein aktives Baumelement
METHOD on_selection_changed.
WRITE: / |Node: { node_key }|.
ENDMETHOD.
* bei Expandierung eines Baumelements ohne Unterelemente
METHOD on_expand_no_children.
WRITE: / |Node: { node_key }|.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
* Container-Objekt erzeugen
DATA(o_dock) = NEW cl_gui_docking_container( no_autodef_progid_dynnr = abap_true
side = cl_gui_docking_container=>dock_at_left
ratio = 15
caption = 'Datenausgabe' ).
* Tree-Objekt erzeugen
DATA(o_tree) = NEW cl_gui_simple_tree( parent = o_dock
node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single ).
* Eventtypten müssen gesondert registriert werden
DATA(it_events) = VALUE ty_it_events( ( eventid = cl_gui_simple_tree=>eventid_node_keypress )
* ( eventid = cl_gui_simple_tree=>eventid_node_double_click )
( eventid = cl_gui_simple_tree=>eventid_selection_changed )
( eventid = cl_gui_simple_tree=>eventid_expand_no_children
appl_event = abap_true ) ).
o_tree->set_registered_events( events = it_events ).
* benötigte Tasten registrieren
*cl_gui_simple_tree=>key_f1: F1
*cl_gui_simple_tree=>key_f4: F4
*cl_gui_simple_tree=>key_insert: Einfügen
*cl_gui_simple_tree=>key_delete: Entfernen
*cl_gui_simple_tree=>key_enter: Enter
*cl_gui_simple_tree=>key_cut: Strg+X
*cl_gui_simple_tree=>key_copy: Strg+C
*cl_gui_simple_tree=>key_paste: Strg+V
o_tree->add_key_stroke( cl_gui_simple_tree=>key_enter ).
o_tree->add_key_stroke( cl_gui_simple_tree=>key_f1 ).
o_tree->add_key_stroke( cl_gui_simple_tree=>key_delete ).
* Events registrieren, on_double_click und on_selection_changed
* dürfen nicht gleichzeitig registriert sein, sonst Exception
SET HANDLER lcl_event=>on_keypress FOR o_tree.
* SET HANDLER lcl_event=>on_double_click FOR o_tree.
SET HANDLER lcl_event=>on_selection_changed FOR o_tree.
SET HANDLER lcl_event=>on_expand_no_children FOR o_tree.
* Tree-Nodes einfügen -> die Bezeichner müssen eindeutig sein
it_nodes = VALUE #( ( node_key = 'FLDR1'
relatship = cl_gui_simple_tree=>relat_last_child
disabled = abap_true
isfolder = abap_true
n_image = icon_folder
exp_image = icon_open_folder
style = cl_gui_simple_tree=>style_default
text = 'Ordner' )
( node_key = 'NODE1'
relatship = cl_gui_simple_tree=>relat_last_child
disabled = abap_true
isfolder = abap_true
relatkey = 'FLDR1'
n_image = icon_folder
exp_image = icon_open_folder
style = cl_gui_simple_tree=>style_intensified
text = 'Datensatz 1' )
( node_key = 'NODE1_1'
relatship = cl_gui_simple_tree=>relat_last_child
isfolder = abap_false
relatkey = 'NODE1'
n_image = icon_led_yellow
style = cl_gui_simple_tree=>style_intensified
text = 'Datensatz 1_1' )
( node_key = 'NODE2'
relatship = cl_gui_simple_tree=>relat_last_child
isfolder = abap_false
relatkey = 'FLDR1'
n_image = icon_led_green
style = cl_gui_simple_tree=>style_default
text = 'Datensatz 2' )
( node_key = 'NODE3'
relatship = cl_gui_simple_tree=>relat_last_child
isfolder = abap_false
relatkey = 'FLDR1'
disabled = abap_true
n_image = icon_led_inactive
style = cl_gui_simple_tree=>style_inactive
text = 'Datensatz 3 (inaktiv)' )
( node_key = 'NODE4'
relatship = cl_gui_simple_tree=>relat_last_child
isfolder = abap_false
relatkey = 'FLDR1'
disabled = abap_false
n_image = icon_led_red
style = cl_gui_simple_tree=>style_intensifd_critical
text = 'Datensatz 4' ) ).
o_tree->add_nodes( table_structure_name = 'MTREESNODE' " Typ muss gleich mit Zeilentyp von ty_it_nodes sein
node_table = it_nodes ).
* Root-Nodes des Trees expandieren
o_tree->expand_root_nodes( ).
* leere Toolbar ausblenden
cl_abap_list_layout=>suppress_toolbar( ).
WRITE space. " wichtig für Erzwingung der Listenausgabe und Anzeige des Trees
Weiterführende Infos: Link und Link