Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

ALV-like listbox button in status GUI

OttoGold
Active Contributor
0 Kudos

Hello ladies and gentlemen,

I have a question and am not sure if the thing I want to do is even possible. Please don`t laugh.

ALV has "ordinary buttons" as well as some more fancy ones - like those which immediately open a "list box" of actions.

I would lik to have such a button on my status bar. I don`t remember any transaction/ report where one could see such thing, that`s why I think that might not be even possible.

My program changes ALV grids during the processing and buttons which are relevant all the time are of course on the status bar and those, which are "stage" relevant are on the specific grid status bar. That`s why I need something on the status and if that could be fancy, it would be super cool. Any suggestions?

Thanks,

cheers Otto

1 ACCEPTED SOLUTION

Former Member

Hi

Do you mean something like the list shown by the right button of the mouse?

Max

12 REPLIES 12

Former Member

Hi

Do you mean something like the list shown by the right button of the mouse?

Max

0 Kudos

Not a context menu, Max:)) I can search and these are all over the place.

But sometimes ALV has these fancy buttons: its a button which is little wider with an arrow pointing down on the right side. If you click the button something like a context menu opens up.

You can see it in ALV for example when you want to export the content to the file or send it to Excel in-place.

Example: transaction SU21, there is printer icon of this type and a create button with this "context menu". Or an example could be that GOS thing... hmmm... that mean that if I find that GOS thing, I could take a look how it is done:))

Any idea where to begin?

Thanks for your time and effort

Otto

0 Kudos

Uhm

Perhasp something like it's explained in program demo BCALV_GRID_07

Max

0 Kudos

I think we have a mutual understanding about what I want to have. But you don`t understand where.

I don`t want that on the ALV bar, I want that on status GUI bar.

I need that to be "available for all process steps" and so above the changing grids.

Otto

0 Kudos

Ok

I don't think it's possible to have on status gui, I've never seen something like that, because there's the menu bar (I know there's no icon).

Max

0 Kudos

Hi

I think (perhaps it's just your opinion too) the only solution is to add a new button like GOS

I post my first investigation;

DATA: MY_TOOLBAR   TYPE REF TO CL_GUI_TOOLBAR.
DATA: MY_CONTAINER TYPE REF TO CL_GUI_GOS_CONTAINER.
DATA: LP_ICON      TYPE ICONNAME.
DATA: LP_QUICK     TYPE ICONQUICK.
DATA: LT_EVENT     TYPE CNTL_SIMPLE_EVENTS.
DATA LS_EVENT TYPE CNTL_SIMPLE_EVENT.

CLASS LCL_HANDLE_EVENT DEFINITION DEFERRED.

DATA TOOL_EVENT TYPE REF TO LCL_HANDLE_EVENT.
*
CLASS LCL_HANDLE_EVENT DEFINITION.
  PUBLIC SECTION.
    METHODS: ON_DROPDOWN_CLICKED FOR EVENT DROPDOWN_CLICKED
               OF CL_GUI_TOOLBAR.
    METHODS: ON_FUNCTION_SELECTED FOR EVENT FUNCTION_SELECTED
               OF CL_GUI_TOOLBAR.
ENDCLASS.                    "lcl_handle_event DEFINITION
*
CLASS LCL_HANDLE_EVENT IMPLEMENTATION.
  METHOD ON_DROPDOWN_CLICKED.
    DATA LO_MENU TYPE REF TO CL_CTMENU.
* Dysplay the context menu: in progress
  ENDMETHOD.                    "ON_DROPDOWN_CLICKED

  METHOD ON_FUNCTION_SELECTED.
  ENDMETHOD.                    "ON_FUNCTION_SELECTED
ENDCLASS.                    "lcl_handle_event IMPLEMENTATION


START-OF-SELECTION.

  CREATE OBJECT MY_CONTAINER
    EXPORTING
      WIDTH                   = 58
      NO_AUTODEF_PROGID_DYNNR = 'X'
    EXCEPTIONS
      OTHERS                  = 5.

  CHECK SY-SUBRC = 0.
  CREATE OBJECT MY_TOOLBAR
    EXPORTING
      PARENT = MY_CONTAINER.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      NAME       = 'ICON_WS_PLANE'
      ADD_STDINF = SPACE
    IMPORTING
      RESULT     = LP_ICON
    EXCEPTIONS
      OTHERS     = 0.

  LP_QUICK = 'New Menu'.

  CALL METHOD MY_TOOLBAR->ADD_BUTTON
    EXPORTING
      FCODE     = 'MY_MENU'
      ICON      = LP_ICON
      BUTN_TYPE = 1
      QUICKINFO = LP_QUICK.

  CLEAR LT_EVENT.
  LS_EVENT-EVENTID = CL_GUI_TOOLBAR=>M_ID_FUNCTION_SELECTED.
  LS_EVENT-APPL_EVENT = SPACE.
  APPEND LS_EVENT TO LT_EVENT.
  LS_EVENT-EVENTID = CL_GUI_TOOLBAR=>M_ID_DROPDOWN_CLICKED.
  LS_EVENT-APPL_EVENT = SPACE.
  APPEND LS_EVENT TO LT_EVENT.
  CALL METHOD MY_TOOLBAR->SET_REGISTERED_EVENTS
    EXPORTING
      EVENTS = LT_EVENT.

  CREATE OBJECT TOOL_EVENT.

  SET HANDLER TOOL_EVENT->ON_DROPDOWN_CLICKED FOR MY_TOOLBAR.

  WRITE 'Hello'.

The work is in progress of course, but let me know if you're interested about that, because I like it and perhaps we can exchange some views, some idea

Max

0 Kudos

Second step:

DATA: MY_TOOLBAR   TYPE REF TO CL_GUI_TOOLBAR.
DATA: MY_CONTAINER TYPE REF TO CL_GUI_GOS_CONTAINER.
DATA: LP_ICON      TYPE ICONNAME.
DATA: LP_QUICK     TYPE ICONQUICK.
DATA: LT_EVENT     TYPE CNTL_SIMPLE_EVENTS.
DATA LS_EVENT TYPE CNTL_SIMPLE_EVENT.

CLASS LCL_HANDLE_EVENT DEFINITION DEFERRED.

DATA TOOL_EVENT TYPE REF TO LCL_HANDLE_EVENT.
*
CLASS LCL_HANDLE_EVENT DEFINITION.
  PUBLIC SECTION.
    METHODS: ON_DROPDOWN_CLICKED FOR EVENT DROPDOWN_CLICKED
               OF CL_GUI_TOOLBAR
                 IMPORTING FCODE POSX POSY.
    METHODS: ON_FUNCTION_SELECTED FOR EVENT FUNCTION_SELECTED
               OF CL_GUI_TOOLBAR.
ENDCLASS.                    "lcl_handle_event DEFINITION
*
CLASS LCL_HANDLE_EVENT IMPLEMENTATION.
  METHOD ON_DROPDOWN_CLICKED.
    DATA: MY_MENU  TYPE REF TO CL_CTMENU,
          SUB_MENU TYPE REF TO CL_CTMENU.

    CREATE OBJECT MY_MENU.

    MY_MENU->ADD_FUNCTION( FCODE = 'OPTION1'
                           TEXT  = 'Do something...1' ).
    MY_MENU->ADD_FUNCTION( FCODE = 'OPTION2'
                           TEXT  = 'Do something...2' ).
    MY_MENU->ADD_FUNCTION( FCODE = 'OPTION3'
                           TEXT  = 'Do something...3' ).

* Separator
    MY_MENU->ADD_SEPARATOR( ).
*   Create sub menu
    CREATE OBJECT SUB_MENU.

    SUB_MENU->ADD_FUNCTION( FCODE = 'SUB1'
                            TEXT  = 'Do something...1' ).
    SUB_MENU->ADD_FUNCTION( FCODE = 'SUB2'
                            TEXT  = 'Do something...2' ).


*-- Add sub menu to the context menu
    MY_MENU->ADD_SUBMENU( MENU = SUB_MENU
                          TEXT = 'Do something else.....' ).

    CALL METHOD MY_TOOLBAR->TRACK_CONTEXT_MENU
      EXPORTING
        CONTEXT_MENU = MY_MENU
        POSX         = POSX
        POSY         = POSY.


  ENDMETHOD.                    "ON_DROPDOWN_CLICKED

  METHOD ON_FUNCTION_SELECTED.
  ENDMETHOD.                    "ON_FUNCTION_SELECTED
ENDCLASS.                    "lcl_handle_event IMPLEMENTATION


START-OF-SELECTION.

  CREATE OBJECT MY_CONTAINER
    EXPORTING
      WIDTH                   = 58
      NO_AUTODEF_PROGID_DYNNR = 'X'
    EXCEPTIONS
      OTHERS                  = 5.

  CHECK SY-SUBRC = 0.
  CREATE OBJECT MY_TOOLBAR
    EXPORTING
      PARENT = MY_CONTAINER.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      NAME       = 'ICON_WS_PLANE'
      ADD_STDINF = SPACE
    IMPORTING
      RESULT     = LP_ICON
    EXCEPTIONS
      OTHERS     = 0.

  LP_QUICK = 'New Menu'.

  CALL METHOD MY_TOOLBAR->ADD_BUTTON
    EXPORTING
      FCODE     = 'MY_MENU'
      ICON      = LP_ICON
      BUTN_TYPE = 1
      QUICKINFO = LP_QUICK.

  CLEAR LT_EVENT.
  LS_EVENT-EVENTID = CL_GUI_TOOLBAR=>M_ID_FUNCTION_SELECTED.
  LS_EVENT-APPL_EVENT = SPACE.
  APPEND LS_EVENT TO LT_EVENT.
  LS_EVENT-EVENTID = CL_GUI_TOOLBAR=>M_ID_DROPDOWN_CLICKED.
  LS_EVENT-APPL_EVENT = SPACE.
  APPEND LS_EVENT TO LT_EVENT.
  CALL METHOD MY_TOOLBAR->SET_REGISTERED_EVENTS
    EXPORTING
      EVENTS = LT_EVENT.

  CREATE OBJECT TOOL_EVENT.

  SET HANDLER TOOL_EVENT->ON_DROPDOWN_CLICKED FOR MY_TOOLBAR.

  WRITE 'Hello'.

.

Max

0 Kudos

Third step

DATA: MY_TOOLBAR   TYPE REF TO CL_GUI_TOOLBAR.
DATA: MY_CONTAINER TYPE REF TO CL_GUI_GOS_CONTAINER.
DATA: LP_ICON      TYPE ICONNAME.
DATA: LP_QUICK     TYPE ICONQUICK.
DATA: LT_EVENT     TYPE CNTL_SIMPLE_EVENTS.
DATA LS_EVENT TYPE CNTL_SIMPLE_EVENT.

CLASS LCL_HANDLE_EVENT DEFINITION DEFERRED.

DATA TOOL_EVENT TYPE REF TO LCL_HANDLE_EVENT.
*
CLASS LCL_HANDLE_EVENT DEFINITION.
  PUBLIC SECTION.
    METHODS: ON_DROPDOWN_CLICKED FOR EVENT DROPDOWN_CLICKED
               OF CL_GUI_TOOLBAR
                 IMPORTING FCODE POSX POSY.
    METHODS: ON_FUNCTION_SELECTED FOR EVENT FUNCTION_SELECTED
               OF CL_GUI_TOOLBAR
                 IMPORTING FCODE.
ENDCLASS.                    "lcl_handle_event DEFINITION
*
CLASS LCL_HANDLE_EVENT IMPLEMENTATION.
  METHOD ON_DROPDOWN_CLICKED.
    DATA: MY_MENU  TYPE REF TO CL_CTMENU,
          SUB_MENU TYPE REF TO CL_CTMENU.

    CHECK FCODE = 'MY_MENU'.

    CREATE OBJECT MY_MENU.

    MY_MENU->ADD_FUNCTION( FCODE = 'OPTION1'
                           TEXT  = 'Do something...1' ).
    MY_MENU->ADD_FUNCTION( FCODE = 'OPTION2'
                           TEXT  = 'Do something...2' ).
    MY_MENU->ADD_FUNCTION( FCODE = 'OPTION3'
                           TEXT  = 'Do something...3' ).

* Separator
    MY_MENU->ADD_SEPARATOR( ).
*   Create sub menu
    CREATE OBJECT SUB_MENU.

    SUB_MENU->ADD_FUNCTION( FCODE = 'SUB1'
                            TEXT  = 'Do something...1' ).
    SUB_MENU->ADD_FUNCTION( FCODE = 'SUB2'
                            TEXT  = 'Do something...2' ).


*-- Add sub menu to the context menu
    MY_MENU->ADD_SUBMENU( MENU = SUB_MENU
                          TEXT = 'Do something else.....' ).

    CALL METHOD MY_TOOLBAR->TRACK_CONTEXT_MENU
      EXPORTING
        CONTEXT_MENU = MY_MENU
        POSX         = POSX
        POSY         = POSY.


  ENDMETHOD.                    "ON_DROPDOWN_CLICKED

  METHOD ON_FUNCTION_SELECTED.
    CASE FCODE.
      WHEN 'MY_MENU'. MESSAGE I208(00) WITH 'Press on Icon'.
      WHEN 'OPTION1'. MESSAGE I208(00) WITH 'Option 1'.
      WHEN 'OPTION2'. MESSAGE I208(00) WITH 'Option 2'.
      WHEN 'OPTION3'. MESSAGE I208(00) WITH 'Option 3'.
      WHEN 'SUB1'.    MESSAGE I208(00) WITH 'Sub Option 1'.
      WHEN 'SUB2'.    MESSAGE I208(00) WITH 'Sub Option 2'.
    ENDCASE.
  ENDMETHOD.                    "ON_FUNCTION_SELECTED
ENDCLASS.                    "lcl_handle_event IMPLEMENTATION


START-OF-SELECTION.

  CREATE OBJECT MY_CONTAINER
    EXPORTING
      WIDTH                   = 58
      NO_AUTODEF_PROGID_DYNNR = 'X'
    EXCEPTIONS
      OTHERS                  = 5.

  CHECK SY-SUBRC = 0.
  CREATE OBJECT MY_TOOLBAR
    EXPORTING
      PARENT = MY_CONTAINER.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      NAME       = 'ICON_WS_PLANE'
      ADD_STDINF = SPACE
    IMPORTING
      RESULT     = LP_ICON
    EXCEPTIONS
      OTHERS     = 0.

  LP_QUICK = 'New Menu'.

  CALL METHOD MY_TOOLBAR->ADD_BUTTON
    EXPORTING
      FCODE     = 'MY_MENU'
      ICON      = LP_ICON
      BUTN_TYPE = 1
      QUICKINFO = LP_QUICK.

  CLEAR LT_EVENT.
  LS_EVENT-EVENTID = CL_GUI_TOOLBAR=>M_ID_FUNCTION_SELECTED.
  LS_EVENT-APPL_EVENT = SPACE.
  APPEND LS_EVENT TO LT_EVENT.
  LS_EVENT-EVENTID = CL_GUI_TOOLBAR=>M_ID_DROPDOWN_CLICKED.
  LS_EVENT-APPL_EVENT = SPACE.
  APPEND LS_EVENT TO LT_EVENT.
  CALL METHOD MY_TOOLBAR->SET_REGISTERED_EVENTS
    EXPORTING
      EVENTS = LT_EVENT.

  CREATE OBJECT TOOL_EVENT.

  SET HANDLER TOOL_EVENT->ON_DROPDOWN_CLICKED FOR MY_TOOLBAR.
  SET HANDLER TOOL_EVENT->ON_FUNCTION_SELECTED FOR MY_TOOLBAR.

  WRITE 'Hello'.

Max

0 Kudos

and 4

DATA: MY_TOOLBAR   TYPE REF TO CL_GUI_TOOLBAR.
DATA: MY_CONTAINER TYPE REF TO CL_GUI_GOS_CONTAINER.
DATA: LP_ICON      TYPE ICONNAME.
DATA: LP_QUICK     TYPE ICONQUICK.
DATA: LT_EVENT     TYPE CNTL_SIMPLE_EVENTS.
DATA LS_EVENT TYPE CNTL_SIMPLE_EVENT.

CLASS LCL_HANDLE_EVENT DEFINITION DEFERRED.

DATA TOOL_EVENT TYPE REF TO LCL_HANDLE_EVENT.
*
CLASS LCL_HANDLE_EVENT DEFINITION.
  PUBLIC SECTION.
    METHODS: ON_DROPDOWN_CLICKED FOR EVENT DROPDOWN_CLICKED
               OF CL_GUI_TOOLBAR
                 IMPORTING FCODE POSX POSY.
    METHODS: ON_FUNCTION_SELECTED FOR EVENT FUNCTION_SELECTED
               OF CL_GUI_TOOLBAR
                 IMPORTING FCODE.
ENDCLASS.                    "lcl_handle_event DEFINITION
*
CLASS LCL_HANDLE_EVENT IMPLEMENTATION.
  METHOD ON_DROPDOWN_CLICKED.
    DATA: MY_MENU  TYPE REF TO CL_CTMENU,
          SUB_MENU TYPE REF TO CL_CTMENU.

    CREATE OBJECT MY_MENU.

    CASE FCODE.
      WHEN 'MY_MENU'.

        MY_MENU->ADD_FUNCTION( FCODE = 'OPTION1'
                               TEXT  = 'Do something...1' ).
        MY_MENU->ADD_FUNCTION( FCODE = 'OPTION2'
                               TEXT  = 'Do something...2' ).
        MY_MENU->ADD_FUNCTION( FCODE = 'OPTION3'
                               TEXT  = 'Do something...3' ).

* Separator
        MY_MENU->ADD_SEPARATOR( ).
*   Create sub menu
        CREATE OBJECT SUB_MENU.

        SUB_MENU->ADD_FUNCTION( FCODE = 'SUB1'
                                TEXT  = 'Do something...1' ).
        SUB_MENU->ADD_FUNCTION( FCODE = 'SUB2'
                                TEXT  = 'Do something...2' ).


*-- Add sub menu to the context menu
        MY_MENU->ADD_SUBMENU( MENU = SUB_MENU
                              TEXT = 'Do something else.....' ).
      WHEN 'MY_MENU2'.
        MY_MENU->ADD_FUNCTION( FCODE = 'OPTION21'
                               TEXT  = 'Do something crazy' ).
        MY_MENU->ADD_FUNCTION( FCODE = 'OPTION22'
                               TEXT  = 'Do something funny' ).
    ENDCASE.

    CALL METHOD MY_TOOLBAR->TRACK_CONTEXT_MENU
      EXPORTING
        CONTEXT_MENU = MY_MENU
        POSX         = POSX
        POSY         = POSY.


  ENDMETHOD.                    "ON_DROPDOWN_CLICKED

  METHOD ON_FUNCTION_SELECTED.
    CASE FCODE.
      WHEN 'MY_MENU'.  MESSAGE I208(00) WITH 'Press on Icon Plane'.
      WHEN 'MY_MENU2'. MESSAGE I208(00) WITH 'Press on Icon Truck'.
      WHEN 'OPTION1'.  MESSAGE I208(00) WITH 'Option 1'.
      WHEN 'OPTION2'.  MESSAGE I208(00) WITH 'Option 2'.
      WHEN 'OPTION3'.  MESSAGE I208(00) WITH 'Option 3'.
      WHEN 'SUB1'.     MESSAGE I208(00) WITH 'Sub Option 1'.
      WHEN 'SUB2'.     MESSAGE I208(00) WITH 'Sub Option 2'.
      WHEN 'OPTION21'. MESSAGE I208(00) WITH 'Option 2/1'.
      WHEN 'OPTION22'. MESSAGE I208(00) WITH 'Option 2/2'.
    ENDCASE.
  ENDMETHOD.                    "ON_FUNCTION_SELECTED
ENDCLASS.                    "lcl_handle_event IMPLEMENTATION


START-OF-SELECTION.

  CREATE OBJECT MY_CONTAINER
    EXPORTING
      WIDTH                   = 120
      NO_AUTODEF_PROGID_DYNNR = 'X'
    EXCEPTIONS
      OTHERS                  = 5.

  CHECK SY-SUBRC = 0.
  CREATE OBJECT MY_TOOLBAR
    EXPORTING
      PARENT = MY_CONTAINER.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      NAME       = 'ICON_WS_PLANE'
      ADD_STDINF = SPACE
    IMPORTING
      RESULT     = LP_ICON
    EXCEPTIONS
      OTHERS     = 0.

  LP_QUICK = 'New Menu'.

  CALL METHOD MY_TOOLBAR->ADD_BUTTON
    EXPORTING
      FCODE     = 'MY_MENU'
      ICON      = LP_ICON
      BUTN_TYPE = 1
      QUICKINFO = LP_QUICK.

  CLEAR LP_ICON.
  LP_QUICK = 'New Menu 2'.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      NAME       = 'ICON_TRANSPORT'
      ADD_STDINF = SPACE
    IMPORTING
      RESULT     = LP_ICON
    EXCEPTIONS
      OTHERS     = 0.

  CALL METHOD MY_TOOLBAR->ADD_BUTTON
    EXPORTING
      FCODE     = 'MY_MENU2'
      ICON      = LP_ICON
      BUTN_TYPE = 1
      QUICKINFO = LP_QUICK.

  CLEAR LT_EVENT.
  LS_EVENT-EVENTID = CL_GUI_TOOLBAR=>M_ID_FUNCTION_SELECTED.
  LS_EVENT-APPL_EVENT = SPACE.
  APPEND LS_EVENT TO LT_EVENT.
  LS_EVENT-EVENTID = CL_GUI_TOOLBAR=>M_ID_DROPDOWN_CLICKED.
  LS_EVENT-APPL_EVENT = SPACE.
  APPEND LS_EVENT TO LT_EVENT.
  CALL METHOD MY_TOOLBAR->SET_REGISTERED_EVENTS
    EXPORTING
      EVENTS = LT_EVENT.

  CREATE OBJECT TOOL_EVENT.

  SET HANDLER TOOL_EVENT->ON_DROPDOWN_CLICKED FOR MY_TOOLBAR.
  SET HANDLER TOOL_EVENT->ON_FUNCTION_SELECTED FOR MY_TOOLBAR.

  WRITE 'Hello'.

Max

Ok

in this last updating, I've added a text for icon only

I hope I can be interesting for you

DATA: MY_TOOLBAR   TYPE REF TO CL_GUI_TOOLBAR.
DATA: MY_CONTAINER TYPE REF TO CL_GUI_GOS_CONTAINER.
DATA: LP_ICON      TYPE ICONNAME.
DATA: LP_QUICK     TYPE ICONQUICK.
DATA: LT_EVENT     TYPE CNTL_SIMPLE_EVENTS.
DATA LS_EVENT TYPE CNTL_SIMPLE_EVENT.

CLASS LCL_HANDLE_EVENT DEFINITION DEFERRED.

DATA TOOL_EVENT TYPE REF TO LCL_HANDLE_EVENT.
*
CLASS LCL_HANDLE_EVENT DEFINITION.
  PUBLIC SECTION.
    METHODS: ON_DROPDOWN_CLICKED FOR EVENT DROPDOWN_CLICKED
               OF CL_GUI_TOOLBAR
                 IMPORTING FCODE POSX POSY.
    METHODS: ON_FUNCTION_SELECTED FOR EVENT FUNCTION_SELECTED
               OF CL_GUI_TOOLBAR
                 IMPORTING FCODE.
ENDCLASS.                    "lcl_handle_event DEFINITION
*
CLASS LCL_HANDLE_EVENT IMPLEMENTATION.
  METHOD ON_DROPDOWN_CLICKED.
    DATA: MY_MENU  TYPE REF TO CL_CTMENU,
          SUB_MENU TYPE REF TO CL_CTMENU.

    CREATE OBJECT MY_MENU.

    CASE FCODE.
      WHEN 'MY_MENU'.

        MY_MENU->ADD_FUNCTION( FCODE = 'OPTION1'
                               TEXT  = 'Do something...1' ).
        MY_MENU->ADD_FUNCTION( FCODE = 'OPTION2'
                               TEXT  = 'Do something...2' ).
        MY_MENU->ADD_FUNCTION( FCODE = 'OPTION3'
                               TEXT  = 'Do something...3' ).

* Separator
        MY_MENU->ADD_SEPARATOR( ).
*   Create sub menu
        CREATE OBJECT SUB_MENU.

        SUB_MENU->ADD_FUNCTION( FCODE = 'SUB1'
                                TEXT  = 'Do something...1' ).
        SUB_MENU->ADD_FUNCTION( FCODE = 'SUB2'
                                TEXT  = 'Do something...2' ).


*-- Add sub menu to the context menu
        MY_MENU->ADD_SUBMENU( MENU = SUB_MENU
                              TEXT = 'Do something else.....' ).
      WHEN 'MY_MENU2'.
        MY_MENU->ADD_FUNCTION( FCODE = 'OPTION21'
                               TEXT  = 'Do something crazy' ).
        MY_MENU->ADD_FUNCTION( FCODE = 'OPTION22'
                               TEXT  = 'Do something funny' ).
    ENDCASE.

    CALL METHOD MY_TOOLBAR->TRACK_CONTEXT_MENU
      EXPORTING
        CONTEXT_MENU = MY_MENU
        POSX         = POSX
        POSY         = POSY.


  ENDMETHOD.                    "ON_DROPDOWN_CLICKED

  METHOD ON_FUNCTION_SELECTED.
    CASE FCODE.
      WHEN 'MY_MENU'.  MESSAGE I208(00) WITH 'Press on Icon Plane'.
      WHEN 'MY_MENU2'. MESSAGE I208(00) WITH 'Press on Icon Truck'.
      WHEN 'OPTION1'.  MESSAGE I208(00) WITH 'Option 1'.
      WHEN 'OPTION2'.  MESSAGE I208(00) WITH 'Option 2'.
      WHEN 'OPTION3'.  MESSAGE I208(00) WITH 'Option 3'.
      WHEN 'SUB1'.     MESSAGE I208(00) WITH 'Sub Option 1'.
      WHEN 'SUB2'.     MESSAGE I208(00) WITH 'Sub Option 2'.
      WHEN 'OPTION21'. MESSAGE I208(00) WITH 'Option 2/1'.
      WHEN 'OPTION22'. MESSAGE I208(00) WITH 'Option 2/2'.
    ENDCASE.
  ENDMETHOD.                    "ON_FUNCTION_SELECTED
ENDCLASS.                    "lcl_handle_event IMPLEMENTATION


START-OF-SELECTION.

  CREATE OBJECT MY_CONTAINER
    EXPORTING
      WIDTH                   = 160
      NO_AUTODEF_PROGID_DYNNR = 'X'
    EXCEPTIONS
      OTHERS                  = 5.

  CHECK SY-SUBRC = 0.
  CREATE OBJECT MY_TOOLBAR
    EXPORTING
      PARENT = MY_CONTAINER.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      NAME       = 'ICON_WS_PLANE'
      ADD_STDINF = SPACE
    IMPORTING
      RESULT     = LP_ICON
    EXCEPTIONS
      OTHERS     = 0.

  LP_QUICK = 'New Menu'.

  CALL METHOD MY_TOOLBAR->ADD_BUTTON
    EXPORTING
      FCODE     = 'MY_MENU'
      ICON      = LP_ICON
      BUTN_TYPE = 1
      QUICKINFO = LP_QUICK.

  CLEAR LP_ICON.
  LP_QUICK = 'New Menu 2'.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      NAME       = 'ICON_TRANSPORT'
      ADD_STDINF = SPACE
    IMPORTING
      RESULT     = LP_ICON
    EXCEPTIONS
      OTHERS     = 0.

  CALL METHOD MY_TOOLBAR->ADD_BUTTON
    EXPORTING
      FCODE     = 'MY_MENU2'
      ICON      = LP_ICON
      BUTN_TYPE = 1
      TEXT      = 'Go on!'
      QUICKINFO = LP_QUICK.

  CLEAR LT_EVENT.
  LS_EVENT-EVENTID = CL_GUI_TOOLBAR=>M_ID_FUNCTION_SELECTED.
  LS_EVENT-APPL_EVENT = SPACE.
  APPEND LS_EVENT TO LT_EVENT.
  LS_EVENT-EVENTID = CL_GUI_TOOLBAR=>M_ID_DROPDOWN_CLICKED.
  LS_EVENT-APPL_EVENT = SPACE.
  APPEND LS_EVENT TO LT_EVENT.
  CALL METHOD MY_TOOLBAR->SET_REGISTERED_EVENTS
    EXPORTING
      EVENTS = LT_EVENT.

  CREATE OBJECT TOOL_EVENT.

  SET HANDLER TOOL_EVENT->ON_DROPDOWN_CLICKED FOR MY_TOOLBAR.
  SET HANDLER TOOL_EVENT->ON_FUNCTION_SELECTED FOR MY_TOOLBAR.

  WRITE 'Hello'.

Max

OttoGold
Active Contributor
0 Kudos

Hello Max,

my apologies for not answering for such a long time. I forgot. I was on vacation when we had our conversation and then forgot.

The trick I used to make possible what I was up to was to create a button that was changing status GUI. This way I got enough space for twice as much buttons. But your solution is much MUCH better, thank you for that!!

If you can accept my apology. I feel bad about breaking the rule of trust here on SDN. Two months is way too long.

See you around, next time I plan to be more nice.

Cheers Otto

Former Member
0 Kudos

Hi

Don't worry

It's important it was helpfull for you

Max