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]