Link Search Menu Expand Document

Когда PF-STATUS полон кнопками и нельзя использовать SELECTION-SCREEN - FUNCTION KEY по причине того, что ЛБД заняла все 4 кнопки, можно добавить свою кнопку также как делает это GOS.

image


Примеры

SE38 -> ZEUI_TEST_MENU

...

  METHODS:
    " Событие CL_GUI_TOOLBAR
    on_gos_menu_clicked FOR EVENT function_selected OF cl_gui_toolbar
      IMPORTING
        fcode.

...

" Кнопка а-ля GOS
DATA(lo_menu) = NEW zcl_eui_menu(
  io_handler = me ). " <- handler is ON_GOS_MENU_CLICKED

" Создание 1 кнопки
lo_menu->create_toolbar(
 iv_width = 90

 it_menu  = VALUE #(
  ( function = mc_cmd-email
    text     = `E-mail`
    icon     = icon_mail ) ) ).
 
...
 
METHOD on_gos_menu_clicked.
  " Только 1 код функции
  CHECK fcdoe = mc_cmd-email.
  ...

image

" Подменю
lo_menu->create_toolbar(
 it_menu  = VALUE #(
  ( function     = '_OAOR_ROOT' ... )

  ( par_function = '_OAOR_ROOT' " После базового элемента
    function     = '_OAOR_IMPORT'
...

image

image


Описание ZCL_EUI_MENU

Класс ZCL_EUI_MENU создает меню на основе CL_GUI_TOOLBAR и использует CL_GUI_GOS_CONTAINER если ему не передали другого контейнера.

Меню можно создать (или пересоздать) вызвав метод CREATE_TOOLBAR.

Он принимает 2 параметра:

  • IV_WIDTH – optional параметр. Если toolbar имеет тексты, а не только иконки
  • IT_MENU – иерархическое меню с описанием кнопок

Основные параметры для CL_GUI_TOOLBAR указаны в структуре STB_BUTTON (id функции, иконка, текст).

Разделитель создается указанием butn_type = cntb_btype_sep

Для создания иерархии нужно заполнить параметр PAR_FUNCTION

image


Сам обработчик события указывается в конструкторе (параметр IO_HANDLER) или в методе CHANGE_HANDLER

Этот параметр представляет собой объект в котором должен быть объявлен публичный метод

ON_FUNCTION_SELECTED
    for event FUNCTION_SELECTED of CL_GUI_TOOLBAR

Название метода значения не имеет так как метод ищется по его сигнатуре

image


Чтобы изменять меню в RunTime (к примеру скрыть меню после запуска программы) можно получить доступ до контейнера или самого CL_GUI_TOOLBAR

image