Share |

ALVtree toolbar processing


Define class to handle user defined ALVtree toolbar buttons. Insert at end of DATA declaration section but before any ABAP processing.


*--------------------------------------------------------------*
*   INCLUDE ZTEST_TOOLBAR_EVENT_RECEIVER                       *
*--------------------------------------------------------------*
data mr_toolbar type ref to cl_gui_toolbar.  "Add to top include

CLASS lcl_toolbar_event_receiver DEFINITION.

  PUBLIC SECTION.
    METHODS: on_function_selected
               FOR EVENT function_selected OF cl_gui_toolbar
                 IMPORTING fcode,

             on_toolbar_dropdown
               FOR EVENT dropdown_clicked OF cl_gui_toolbar
                 IMPORTING fcode
                           posx
                           posy.
ENDCLASS.


*-------------------------------------------------------------*
*       CLASS lcl_toolbar_event_receiver IMPLEMENTATION
*-------------------------------------------------------------*
*       ........                                              *
*-------------------------------------------------------------*
CLASS lcl_toolbar_event_receiver IMPLEMENTATION.

  METHOD on_function_selected.
    DATA: ls_sflight TYPE sflight.
    DATA: lt_list_commentary TYPE slis_t_listheader,
          l_logo             TYPE sdydo_value.

*   Processing for user defined tollbar button goes here
    CASE fcode.
      WHEN 'NEXT'.
      WHEN 'DELETE'.
        DATA: lt_selected_node TYPE lvc_t_nkey.
        DATA: e_selected_node     TYPE lvc_nkey,
              e_fieldname         TYPE lvc_fname.
        DATA: lt_outtab_line(100)  TYPE c,
              lt_node_text         TYPE lvc_value.

        CALL METHOD gd_tree->get_selected_nodes
                CHANGING
                   ct_selected_nodes = lt_selected_node.

      WHEN 'INSERT_LC'.
*     Code for function code INSERT_LC goes here
      WHEN 'INSERT_FC'.
*     Code for function code INSERT_FC goes here
      WHEN 'INSERT_FS'.
*     Code for function code INSERT_FS goes here
      WHEN 'INSERT_LS'.
*     Code for function code INSERT_LS goes here
      WHEN 'INSERT_NS'.
*     Code for function code INSERT_NS goes here
    ENDCASE.

*   update frontend
    CALL METHOD gd_tree->frontend_update.
  ENDMETHOD.

  METHOD on_toolbar_dropdown.
* create contextmenu
    DATA: l_menu TYPE REF TO cl_ctmenu,
          l_fc_handled TYPE as4flag.

    CREATE OBJECT l_menu.
    CLEAR l_fc_handled.

*   Setup Insert button so options are displayed as drop doan menu
    CASE fcode.
      WHEN 'INSERT_LC'.
        l_fc_handled = 'X'.
*       insert as last child
        CALL METHOD l_menu->add_function
                EXPORTING fcode   = 'INSERT_LC'
                text    = 'Insert New Line as Last Child'.  "#EC NOTEXT
*       insert as first child
        CALL METHOD l_menu->add_function
                EXPORTING fcode   = 'INSERT_FC'
                text    = 'Insert New Line as First Child'. "#EC NOTEXT
*       insert as next sibling
        CALL METHOD l_menu->add_function
                EXPORTING fcode   = 'INSERT_NS'
                text    = 'Insert New Line as Next Sibling'."#EC NOTEXT
*       insert as last sibling
        CALL METHOD l_menu->add_function
                EXPORTING fcode   = 'INSERT_LS'
                text    = 'Insert New Line as Last Sibling'."#EC NOTEXT
*       insert as first sibling
        CALL METHOD l_menu->add_function
                EXPORTING fcode   = 'INSERT_FS'
              text    = 'Insert New Line as First Sibling'. "#EC NOTEXT
    ENDCASE.

* show dropdownbox
    IF l_fc_handled = 'X'.
      CALL METHOD mr_toolbar->track_context_menu
        EXPORTING
            context_menu = l_menu
            posx         = posx
            posy         = posy.
    ENDIF.

  ENDMETHOD.
ENDCLASS.