Tobias Krais wrote:

> Hi together,
> 
> since some weeks I'm developing a little OpenOffice connector for a
> program we develeped (called JUDAS: www.judas.de). At the moment I try
> to add a menu called JUDAS to the menu bar at runtime. I found how to
> disable menus at runtime, but not how to add them.
> 
> You may ask why is it necessary that the menus should be added at
> runtime. The menus should appear only if OpenOffice was started by
> JUDAS. If the user starts OpenOffice by itself, the menu should not appear.
> 
> My question is: is it possible to generate menus at runtime? We are
> using OOo2.

There is an example and a hint for documentation on the
dev@api.openoffice.org mailing list. I quote Carsten Driesner:

> There is an API to configure your menu (toolbars), but it's not a
> low-level API like XMenu/XMenuListener. For example, it's not possible
> to disable certain menu item with it. The Office UI is highly dynamic
> and therefor there is no easy way to force menu item to be
> disabled/enabled. You can use DispatchInterceptors or the "disable
> commands" feature (both are documented in the DevelopersGuide for OOo
> 1.1.x).
> 
> Currently the developer documentation which describes the new APIs is
> not ready yet. A first introduction to our new API can be found here:
> http://specs.openoffice.org/ui_in_general/api/ProgrammaticControlOfMenuAndToolbarItems.sxw
> 
> I attached some examples which work on the Beta. Please keep in mind
> that the namespace drafts will removed on a later version, I think
> 1.9.83. The real namespaces will be "com.sun.star.ui" and
> "com.sun.star.frame".
>
> ----------
> 
> REM  *****  BASIC  *****
> Sub Main
>       REM *** Creates a top-level popup menu on the Writer menu bar 
> persistently.
>       REM *** It checks if its popup menu has already been added to the menu 
> bar
>       REM *** and does nothing.
>       REM *** The popup menu contains one menu item with a
> 
>       REM *** Initialize strings
>       sMenuBar = "private:resource/menubar/menubar"
>       sMyPopupMenuCmdId = "vnd.openoffice.org:MyMenu"
> 
>       REM *** Retrieve the module configuration manager from central module 
> configuration manager supplier
>       oModuleCfgMgrSupplier = 
> createUnoService("drafts.com.sun.star.ui.ModuleUIConfigurationManagerSupplier")
> 
>       REM *** Retrieve the module configuration manager with module identifier
>       REM *** See drafts.com.sun.star.frame.ModuleManager for more information
>       oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager( 
> "com.sun.star.text.TextDocument" )
>       oMenuBarSettings = oModuleCfgMgr.getSettings( sMenuBar, true )
> 
>       REM *** Look for our top-level popup menu. Can be identified by the 
> CommandURL property.
>       bHasAlreadyPopupMenu = false
>       nCount = oMenuBarSettings.getCount()
>       for i = 0 to nCount-1
>               oPopupMenu() = oMenuBarSettings.getByIndex( i )
>               nPopupMenuCount = ubound(oPopupMenu())
>               for j = 0 to nPopupMenuCount
>                       if oPopupMenu(j).Name = "CommandURL" then
>                               if oPopupMenu(j).Value = sMyPopupMenuCmdId then
>                                       bHasAlreadyPopupMenu = true
>                               end if
>                       endif
>               next j
>       next i
> 
>       if not bHasAlreadyPopupMenu then
>               sString = "My Macro's"
>               oPopupMenu = CreatePopupMenu( sMyPopupMenuCmdId, sString, 
> oMenuBarSettings )
>               oPopupMenuContainer = oPopupMenu(3).Value
>               oMenuItem = CreateMenuItem( "macro:///Standard.Module1.Test()", 
> "Standard.Module1.Test" )
>               oPopupMenuContainer.insertByIndex( 0, oMenuItem )
>               oMenuBarSettings.insertByIndex( nCount, oPopupMenu )
>               oModuleCfgMgr.replaceSettings( sMenuBar, oMenuBarSettings )
>       end if
> End Sub
> 
> Function CreatePopupMenu( CommandId, Label, Factory ) as Variant
>       Dim aPopupMenu(3) as new com.sun.star.beans.PropertyValue
> 
>       aPopupMenu(0).Name = "CommandURL"
>       aPopupMenu(0).Value = CommandId
>       aPopupMenu(1).Name = "Label"
>       aPopupMenu(1).Value = Label
>       aPopupMenu(2).Name = "Type"
>       aPopupMenu(2).Value = 0
>       aPopupMenu(3).Name = "ItemDescriptorContainer"
>       aPopupMenu(3).Value = Factory.createInstanceWithContext( 
> GetDefaultContext() )
> 
>       CreatePopupMenu = aPopupMenu()
> End Function
> 
> Function CreateMenuItem( Command as String, Label as String ) as Variant
>       Dim aMenuItem(2) as new com.sun.star.beans.PropertyValue
> 
>       aMenuItem(0).Name = "CommandURL"
>       aMenuItem(0).Value = Command
>       aMenuItem(1).Name = "Label"
>       aMenuItem(1).Value = Label
>       aMenuItem(2).Name = "Type"
>       aMenuItem(2).Value = 0
> 
>       CreateMenuItem = aMenuItem()
> End Function
> 
> 
> Sub Test
>       MsgBox "Test"
> End Sub
> 
> --------------
> 
> REM  *****  BASIC  *****
> 
> Sub Main
>       REM *** Modifies the standard bar of the BasicIDE module
>       REM *** Initialize strings
>       sToolbar = "private:resource/toolbar/standardbar"
>       sMyToolbarCmdId = "vnd.openoffice.org:MyFunction"
> 
>       REM *** Retrieve the module configuration manager from central module 
> configuration manager supplier
>       oModuleCfgMgrSupplier = 
> createUnoService("drafts.com.sun.star.ui.ModuleUIConfigurationManagerSupplier")
> 
>       REM *** Retrieve the module configuration manager with module identifier
>       REM *** See drafts.com.sun.star.frame.ModuleManager for more information
>       oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager( 
> "com.sun.star.script.BasicIDE" )
> 
>       oToolbarSettings = oModuleCfgMgr.createSettings()
> 
>       REM *** Create a button
>       sString = "My Macro's"
>       oToolbarItem = CreateToolbarItem( "macro:///Standard.Module1.Test()", 
> "Standard.Module1.Test" )
>       oToolbarSettings.insertByIndex( nCount, oToolbarItem )
> 
>       oModuleCfgMgr.insertSettings( sToolbar, oToolbarSettings )
> End Sub
> 
> Function CreateToolbarItem( Command as String, Label as String ) as Variant
>       Dim aToolbarItem(2) as new com.sun.star.beans.PropertyValue
> 
>       aToolbarItem(0).Name = "CommandURL"
>       aToolbarItem(0).Value = Command
>       aToolbarItem(1).Name = "Label"
>       aToolbarItem(1).Value = Label
>       aToolbarItem(2).Name = "Type"
>       aToolbarItem(2).Value = 0
> 
>       CreateToolbarItem = aToolbarItem()
> End Function
> 
> Sub Test
>       MsgBox "Test"
> End Sub

Best regards,
Mathias

-- 
Mathias Bauer - OpenOffice.org Application Framework Project Lead
Please reply to the list only, [EMAIL PROTECTED] is a spam sink.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to