Managing PopUp Menus

Hello everybody

We are moving from OpenOffice to LibreOffice

We have some macros that uses popup menus that work perfectly in
OpenOffice but they don't work in LibreOffice.

We developed our code starting from examples (thanks Hania and Ermione)
that we found over the internet and that are attached.

Any suggestions to make the macro run fine?
Thanks to everybody

REM ***** BASIC *****

Dim oDialog As Object

Dim oPopupMenu As Object

Sub Main

  sLibName = "Standard"

  sDialogName = "Dialog1"

  DialogLibraries.LoadLibrary(sLibName)

  ' create new dialog

  oDialog = CreateUnoDialog( _

    DialogLibraries.getByName(sLibName).getByName(sDialogName))

  oDialog.execute()

End Sub

Sub PopupButton

  ' get the size of the button

  oButton = oDialog.getControl("CommandButton1")

  aPosSize = oButton.PosSize

  ' set the position of the popup menu

  Dim aRect As New com.sun.star.awt.Rectangle

  With aRect

    .X = aPosSize.X

    .Y = aPosSize.Y + aPosSize.Height

    .Width = 0'100

    .Height = 0'100

  End With

  ' menu listener

  oMenuListener = CreateUnoListener( _

    "PopupMenuListener_", "com.sun.star.awt.XMenuListener")

  ' new popupmenu

  oPopupMenu = CreateUnoService("com.sun.star.awt.PopupMenu")

  ' set listener and insert menu items

  With oPopupMenu

    .addMenuListener(oMenuListener)

    .insertItem(1,"Menu 1",0,0) 'id, label, type, position

    .insertItem(2,"Menu 2",0,2)

    .insertSeparator(1)

    .setCommand(1,"item1")

    .setCommand(2,"item2")

  End With

  ' show popup menu

  oPopupMenu.execute(oDialog.Peer,aRect, _

    com.sun.star.awt.PopupMenuDirection.EXECUTE_DEFAULT)

  oPopupMenu.removeMenuListener(oMenuListener)

End Sub

Sub PopupMenuListener_select ( oEv )

  sCmd = oEv.Source.getCommand(oEv.MenuId)

  msgbox sCmd

End Sub

Sub PopupMenuListener_highlight ( oEv )

End Sub

Sub PopupMenuListener_activate ( oEv )

End Sub

Sub PopupMenuListener_deactivate ( oEv )

End Sub

Sub PopupMenuListener_disposing( oEv )

End Sub

Hi Paolo

If I understand this correctly you have created a dialog that contains a button that you want to give dropdown-functionality. The Main method starts the dialog and when the button is pressed it calls the sub PopupButton that creates the popup button and sets up the XMenuListener and a couple of subs that are used by the listener.

If you look at the api docs and search for XMenuListener you'll find:
http://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1awt_1_1XMenuListener.html

There you'll find out that the memberfunctions for this listener is not the same as the ones you used. I actually think this is true for newer versions of Apache OpenOffice as well, but that is a side note and I haven't looked into this to deeply.

This means that you need to adapt the names of last five subs from
PopupMenuListener_select -> PopupMenuListener_itemSelected
PopupMenuListener_highlight -> PopupMenuListener_itemHighlighted
PopupMenuListener_activate -> PopupMenuListener_itemActivated
PopupMenuListener_deactivate -> PopupMenuListener_itemDeactivated
PopupMenuListener_disposing -> PopupMenuListener_disposing

OK the last one did not need any adaption. :wink:

A quick tip if you create a uno listener is to inspect it with xray to find out what methods (subs) you need to create. Let us know if you need more guidance.

Regards,
Niklas Johansson

Paolo Ferrario skrev 2014-11-10 07:47:

Hi Niklas

Great!!
It works perfectly!!

Many, many thanks

Best regards
Paolo

Ferrario Luigi s.r.l.
Ing. Paolo Ferrario
Viale Edison 629
20099 Sesto S. Giovanni
Tel: +39.02.22.47.48.49
Fax: +39.02.24.40.418
e-mail: paolo.ferrario@ferrarioimpianti.it