Variante 1 (CL_GUI_CONTAINER_BAR_XT)
CLASS lcl_events DEFINITION. PUBLIC SECTION. CLASS-METHODS: on_clicked FOR EVENT clicked OF cl_gui_container_bar_xt IMPORTING id container sender. CLASS-METHODS: on_empty FOR EVENT empty OF cl_gui_container_bar_xt IMPORTING sender. CLASS-METHODS: on_closed FOR EVENT closed OF cl_gui_container_bar_xt IMPORTING id sender. ENDCLASS. CLASS lcl_events IMPLEMENTATION. * Eintrag angeklickt METHOD on_clicked. MESSAGE |Property: { id } { container->get_container_type( ) }| TYPE 'S'. ENDMETHOD. * wenn keine Einträge mehr vorhanden (z.B. alle durch Klick auf die Schließen-Kreuze geschlossen) METHOD on_empty. BREAK-POINT. ENDMETHOD. * wenn Schließen-Kreuz eines Eintrages geklickt METHOD on_closed. BREAK-POINT. ENDMETHOD. ENDCLASS. INITIALIZATION. TRY. * Vertikalen Splitter erzeugen DATA(o_splitter) = NEW cl_gui_splitter_container( parent = cl_gui_container=>default_screen no_autodef_progid_dynnr = abap_true rows = 1 columns = 2 ). * 10% / 90% Teilung o_splitter->set_column_width( id = 1 width = 10 ). DATA(o_container_left) = o_splitter->get_container( row = 1 column = 1 ). DATA(o_container_right) = o_splitter->get_container( row = 1 column = 2 ). * Zwei Einträge im cl_gui_container_bar_xt DATA(it_captions) = VALUE sbptcaptns( ( caption = 'ABAP' icon = icon_abap no_close = abap_false name = 'CAP1' invisible = abap_false pre_inst = abap_false reuse_cnt_of = '' ) ( caption = 'ABC' icon = icon_abc no_close = abap_false name = 'CAP2' invisible = abap_false pre_inst = abap_false reuse_cnt_of = '' ) ). * cl_gui_container_bar_xt im linken Splitter erzeugen DATA(o_toolbar_xt) = NEW cl_gui_container_bar_xt( active_id = 1 " Nr. des aktiven Eintrages parent = o_container_left " Einbettung in linken Container captions = it_captions " Einträge style = cl_gui_container_bar_xt=>c_style_fix " Style: Fix = Feste Anordnung, Outlook = Anordnung klappt close_buttons = abap_true ). " Schließen Kreuze anzeigen * einen weiterer Eintrag im cl_gui_container_bar_xt hinzufügen DATA(lv_caption) = VALUE sbptcaptn( caption = 'Activate' icon = icon_activate no_close = abap_false name = 'CAP3' invisible = abap_false pre_inst = abap_false reuse_cnt_of = '' ). * Eintrag einfügen und Id holen DATA(lv_id) = 0. o_toolbar_xt->add_cell( EXPORTING caption = lv_caption CHANGING id = lv_id ). * Testweise Container zum Eintrag ermitteln DATA(o_cont) = o_toolbar_xt->get_container( id = lv_id ). * letzen Eintrag im cl_gui_container_bar_xt aktiv (ausgewählt) setzen o_toolbar_xt->set_active( id = lv_id ). * Eventhandler registrieren SET HANDLER lcl_events=>on_clicked FOR o_toolbar_xt. SET HANDLER lcl_events=>on_empty FOR o_toolbar_xt. SET HANDLER lcl_events=>on_closed FOR o_toolbar_xt. * im rechten Splitter Beispieldaten anzeigen DATA: it_sflight TYPE STANDARD TABLE OF sflight. SELECT * FROM sflight INTO TABLE @it_sflight. DATA: o_salv TYPE REF TO cl_salv_table. cl_salv_table=>factory( EXPORTING r_container = o_container_right IMPORTING r_salv_table = o_salv CHANGING t_table = it_sflight ). o_salv->get_functions( )->set_all( ). o_salv->display( ). * leere Standard-Toolbar ausblenden cl_abap_list_layout=>suppress_toolbar( ). * Ausgabe von cl_gui_container=>default_screen erzwingen WRITE: space. CATCH cx_root INTO DATA(e_txt). ENDTRY.
Variante 2 (CL_GUI_CONTAINER_BAR_2)
CLASS lcl_events DEFINITION. PUBLIC SECTION. CLASS-METHODS: on_clicked FOR EVENT clicked OF cl_gui_container_bar_2 IMPORTING id container sender. CLASS-METHODS: on_empty FOR EVENT empty OF cl_gui_container_bar_2 IMPORTING sender. CLASS-METHODS: on_closed FOR EVENT closed OF cl_gui_container_bar_2 IMPORTING id sender. ENDCLASS. CLASS lcl_events IMPLEMENTATION. * Eintrag angeklickt METHOD on_clicked. MESSAGE |Property: { id } { container->get_container_type( ) }| TYPE 'S'. ENDMETHOD. * wenn keine Einträge mehr vorhanden (z.B. alle durch Klick auf die Schließen-Kreuze geschlossen) METHOD on_empty. BREAK-POINT. ENDMETHOD. * wenn Schließen-Kreuz eines Eintrages geklickt METHOD on_closed. BREAK-POINT. ENDMETHOD. ENDCLASS. INITIALIZATION. TRY. * Vertikalen Splitter erzeugen DATA(o_splitter) = NEW cl_gui_splitter_container( parent = cl_gui_container=>default_screen no_autodef_progid_dynnr = abap_true rows = 1 columns = 2 ). * 10% / 90% Teilung o_splitter->set_column_width( id = 1 width = 10 ). DATA(o_container_left) = o_splitter->get_container( row = 1 column = 1 ). DATA(o_container_right) = o_splitter->get_container( row = 1 column = 2 ). * Zwei Einträge im cl_gui_container_bar_2 DATA(it_captions) = VALUE sbptcaptns( ( caption = 'ABAP' icon = icon_abap no_close = abap_false name = 'CAP1' invisible = abap_false pre_inst = abap_false reuse_cnt_of = '' ) ( caption = 'ABC' icon = icon_abc no_close = abap_false name = 'CAP2' invisible = abap_false pre_inst = abap_false reuse_cnt_of = '' ) ). * cl_gui_container_bar_2 im linken Splitter erzeugen DATA(o_toolbar) = NEW cl_gui_container_bar_2( active_id = 1 " Nr. des aktiven Eintrages parent = o_container_left " Einbettung in linken Container captions = it_captions " Einträge style = cl_gui_container_bar_2=>c_style_tile " Style: Fix = Feste Anordnung, tile = Menü, Outlook = Anordnung klappt close_buttons = abap_false ). " Schließen Kreuze anzeigen * einen weiterer Eintrag im cl_gui_container_bar_2 hinzufügen DATA(lv_caption) = VALUE sbptcaptn( caption = 'Activate' icon = icon_activate no_close = abap_false name = 'CAP3' invisible = abap_false pre_inst = abap_false reuse_cnt_of = '' ). * Eintrag einfügen und Id holen DATA(lv_id) = 0. o_toolbar->add_cell( EXPORTING caption = lv_caption CHANGING id = lv_id ). * Testweise Container zum Eintrag ermitteln DATA(o_cont) = o_toolbar->get_container( id = lv_id ). * letzen Eintrag im cl_gui_container_bar_2 aktiv (ausgewählt) setzen o_toolbar->set_active( id = lv_id ). * Eventhandler registrieren SET HANDLER lcl_events=>on_clicked FOR o_toolbar. SET HANDLER lcl_events=>on_empty FOR o_toolbar. SET HANDLER lcl_events=>on_closed FOR o_toolbar. * im rechten Splitter Beispieldaten anzeigen DATA: it_sflight TYPE STANDARD TABLE OF sflight. SELECT * FROM sflight INTO TABLE @it_sflight. DATA: o_salv TYPE REF TO cl_salv_table. cl_salv_table=>factory( EXPORTING r_container = o_container_right IMPORTING r_salv_table = o_salv CHANGING t_table = it_sflight ). o_salv->get_functions( )->set_all( ). o_salv->display( ). * leere Standard-Toolbar ausblenden cl_abap_list_layout=>suppress_toolbar( ). * Ausgabe von cl_gui_container=>default_screen erzwingen WRITE: space. CATCH cx_root INTO DATA(e_txt). ENDTRY.
Variante 3 (CL_GUI_CONTAINER_BAR)
CLASS lcl_events DEFINITION. PUBLIC SECTION. CLASS-METHODS: on_clicked FOR EVENT clicked OF cl_gui_container_bar IMPORTING id container sender. ENDCLASS. CLASS lcl_events IMPLEMENTATION. * Eintrag angeklickt METHOD on_clicked. MESSAGE |Property: { id } { container->get_container_type( ) }| TYPE 'S'. ENDMETHOD. ENDCLASS. INITIALIZATION. TRY. * Vertikalen Splitter erzeugen DATA(o_splitter) = NEW cl_gui_splitter_container( parent = cl_gui_container=>default_screen no_autodef_progid_dynnr = abap_true rows = 1 columns = 2 ). * 10% / 90% Teilung o_splitter->set_column_width( id = 1 width = 10 ). DATA(o_container_left) = o_splitter->get_container( row = 1 column = 1 ). DATA(o_container_right) = o_splitter->get_container( row = 1 column = 2 ). * Drei Einträge im cl_gui_container_bar DATA(it_captions) = VALUE sbptcaptns( ( caption = 'ABAP' icon = icon_abap no_close = abap_false name = 'CAP1' invisible = abap_false pre_inst = abap_false reuse_cnt_of = '' ) ( caption = 'ABC' icon = icon_abc no_close = abap_false name = 'CAP2' invisible = abap_false pre_inst = abap_false reuse_cnt_of = '' ) ( caption = 'Activate' icon = icon_activate no_close = abap_false name = 'CAP3' invisible = abap_false pre_inst = abap_false reuse_cnt_of = '' ) ). * cl_gui_container_bar im linken Splitter erzeugen DATA(o_toolbar) = NEW cl_gui_container_bar( active_id = 1 " Nr. des aktiven Eintrages parent = o_container_left " Einbettung in linken Container captions = it_captions ). " Einträge * Eventhandler registrieren SET HANDLER lcl_events=>on_clicked FOR o_toolbar. * im rechten Splitter Beispieldaten anzeigen DATA: it_sflight TYPE STANDARD TABLE OF sflight. SELECT * FROM sflight INTO TABLE @it_sflight. DATA: o_salv TYPE REF TO cl_salv_table. cl_salv_table=>factory( EXPORTING r_container = o_container_right IMPORTING r_salv_table = o_salv CHANGING t_table = it_sflight ). o_salv->get_functions( )->set_all( ). o_salv->display( ). * leere Standard-Toolbar ausblenden cl_abap_list_layout=>suppress_toolbar( ). * Ausgabe von cl_gui_container=>default_screen erzwingen WRITE: space. CATCH cx_root INTO DATA(e_txt). ENDTRY.