[ABAP] Popupfenster mit Eingabefeldern (cl_gui_toolbar, cl_gui_combobox, cl_gui_input_field)

CLASS lcl_events DEFINITION.
  PUBLIC SECTION.
    TYPES: ty_it_events TYPE STANDARD TABLE OF cntl_simple_event WITH DEFAULT KEY.

    CLASS-METHODS:
      on_close FOR EVENT close OF cl_gui_dialogbox_container
        IMPORTING sender.

    CLASS-METHODS:
      on_select FOR EVENT selected OF cl_gui_combobox
        IMPORTING
          key
          sender.

    CLASS-METHODS:
      on_submit FOR EVENT submit OF cl_gui_input_field
        IMPORTING
          input
          sender.

    CLASS-METHODS:
      on_auto_submit FOR EVENT auto_submit OF cl_gui_input_field
        IMPORTING
          input
          sender.

    CLASS-METHODS:
      on_function_selected FOR EVENT function_selected OF cl_gui_toolbar
        IMPORTING
          fcode
          sender.
ENDCLASS.

CLASS lcl_events IMPLEMENTATION.
  METHOD on_close.
    IF sender IS NOT INITIAL.
      sender->free( ).
    ENDIF.
  ENDMETHOD.

  METHOD on_select.

    MESSAGE key && ' -> ' && sender->get_selected_item( ) TYPE 'S'.

    cl_gui_cfw=>flush( ).
  ENDMETHOD.

  METHOD on_submit.

    MESSAGE 'Submit:' && input && ' -> ' && sender->get_text( ) TYPE 'S'.

    cl_gui_cfw=>flush( ).
  ENDMETHOD.

  METHOD on_auto_submit.

    MESSAGE 'Auto-Submit:' &&  input && ' -> ' && sender->get_text( ) TYPE 'S'.

    cl_gui_cfw=>flush( ).
  ENDMETHOD.

  METHOD on_function_selected.

    MESSAGE fcode TYPE 'S'.
	
	cl_gui_cfw=>flush( ).

  ENDMETHOD.
ENDCLASS.

SELECTION-SCREEN: PUSHBUTTON 2(20) btn1 USER-COMMAND cmd_show.

AT SELECTION-SCREEN.
* wenn Button-Kommando 'CMD_SHOW'
  IF sy-ucomm = 'CMD_SHOW'.
* Container
    DATA(o_cnt) = NEW cl_gui_dialogbox_container( no_autodef_progid_dynnr = abap_true
                                                  caption                 = 'Werte'
                                                  top                     = 5
                                                  left                    = 5
                                                  width                   = 640
                                                  height                  = 240 ).

    SET HANDLER lcl_events=>on_close FOR o_cnt.

* Toolbar
    DATA(o_toolbar) = NEW cl_gui_toolbar( parent       = o_cnt
                                          display_mode = cl_gui_toolbar=>m_mode_horizontal ).

* 2 Buttons mit Separator
    o_toolbar->add_button( fcode     = 'BTN1'
                           icon      = icon_open
                           butn_type = cntb_btype_button ).

    o_toolbar->add_button( fcode     = ''
                           icon      = ''
                           butn_type = cntb_btype_sep ).

    o_toolbar->add_button( fcode     = 'BTN2'
                           icon      = icon_system_save
                           butn_type = cntb_btype_button ).

    DATA(it_events) = VALUE lcl_events=>ty_it_events( ( eventid    = cl_gui_toolbar=>m_id_function_selected
                                                        appl_event = abap_true ) ).

    o_toolbar->set_registered_events( events = it_events ).

    o_toolbar->set_position( height = 16 left = 0 top = 0 width = 250 ).

    SET HANDLER lcl_events=>on_function_selected FOR o_toolbar.

* Input 1
    DATA(o_input) = NEW cl_gui_input_field( parent               = o_cnt
                                            label_text           = 'InputLabel:'
                                            label_width          = 15
                                            input_prompt_text    = 'Text'
                                            activate_find_button = abap_true
                                            activate_auto_submit = abap_true
                                            button_icon_info     = icon_checked
                                            button_tooltip_info  = 'Button' ).

    o_input->set_position( height = 10 left = 10 top = 15 width = 250 ).
    o_input->set_text( '<default>' ).

    SET HANDLER lcl_events=>on_submit FOR o_input.
    SET HANDLER lcl_events=>on_auto_submit FOR o_input.

* Combobox
    DATA(o_combo) = NEW cl_gui_combobox( parent      = o_cnt
                                         label_text  = 'ComboBox:'
                                         label_width = 15
                                         ).

    o_combo->set_items( VALUE vrm_values( ( key = 'A' text = 'Wert1' )
                                          ( key = 'B' text = 'Wert2' )
                                          ( key = 'C' text = 'Wert3' ) ) ).

    o_combo->set_selected_item( 'A' ).

    o_combo->activate_selection_event( ).

    o_combo->set_position( height = 10 left = 10 top = 30 width = 250 ).

    SET HANDLER lcl_events=>on_select FOR o_combo.
  ENDIF.