Когда PF-STATUS
полон кнопками и нельзя использовать SELECTION-SCREEN - FUNCTION KEY
по причине того, что ЛБД заняла все 4 кнопки, можно добавить свою кнопку также как делает это GOS.
Примеры
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.
...
" Подменю
lo_menu->create_toolbar(
it_menu = VALUE #(
( function = '_OAOR_ROOT' ... )
( par_function = '_OAOR_ROOT' " После базового элемента
function = '_OAOR_IMPORT'
...
Описание 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
Сам обработчик события указывается в конструкторе (параметр IO_HANDLER) или в методе CHANGE_HANDLER
Этот параметр представляет собой объект в котором должен быть объявлен публичный метод
ON_FUNCTION_SELECTED
for event FUNCTION_SELECTED of CL_GUI_TOOLBAR
Название метода значения не имеет так как метод ищется по его сигнатуре
Чтобы изменять меню в RunTime (к примеру скрыть меню после запуска программы) можно получить доступ до контейнера или самого CL_GUI_TOOLBAR