Kohei Yoshida wrote:
On 10/15/06, Mathias Bauer <[EMAIL PROTECTED]> wrote:

OK, so what we need then is a UNO equivalent for the "SfxVisibilityItem"
so your ProtocolHandler can send it in a status update. That shouldn't
be very hard to implement. Do you have a CWS where we could add this?

Hi Kohei,

The following example code adds menu items to a Writer application module persistently. You only have to adapt the code to use the Calc module and translate it to your target language. The example code adds a top-level popup menu to the Writer persistently. It checks the menu bar to avoid multiple additions. You should trigger the code from a Job (see OpenOffice.org Developer's Guide) which is once called at startup time.

Regards,
Carsten

------------------------------
REM *****  BASIC  *****

REM *** Persistent examples ***

Sub ExampleChangeMenubarPersistent
        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 which call the Basic macro test.

        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("com.sun.star.ui.ModuleUIConfigurationManagerSupplier")

        REM *** Retrieve the module configuration manager with module identifier
        REM *** See 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
        
        MsgBox bHasAlreadyPopupMenu

        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 )
                oModuleCfgMgr.store()
        end if
End Sub

Sub ExampleResetToDefaultMenubarPersistent
        sMenuBar = "private:resource/menubar/menubar"

REM *** Retrieve the module configuration manager from central module configuration manager supplier oModuleCfgMgrSupplier = createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier")

        REM *** Retrieve the module configuration manager with module identifier
        REM *** See com.sun.star.frame.ModuleManager for more information
oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager( "com.sun.star.text.TextDocument" )
        
        REM *** Reset default settings
        oMenuBarSettings = oModuleCfgMgr.getDefaultSettings( sMenuBar )
        oModuleCfgMgr.replaceSettings( oMenuBarSettings )
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

Function FindCommand( Command as String, oPopupMenu as Object ) as Integer
  nCount = oPopupMenu.getCount()-1
  for i = 0 to nCount
    oMenuItem() = oPopupMenu.getByIndex(i)
        nPropertyCount = ubound(oMenuItem())
        for j = 0 to nPropertyCount
          if oMenuItem(j).Name = "CommandURL" then
        if oMenuItem(j).Value = Command then
           FindCommand = j
          exit function
                endif
          endif
        next j
  next i
        
  FindCommand = -1
End Function

Function FindPopupMenu( Command as String, oMenuBarSettings as Object ) as Integer
  for i = 0 to oMenuBarSettings.getCount()-1
    oPopupMenu() = oMenuBarSettings.getByIndex(i)
        nPopupMenuCount = ubound(oPopupMenu())
        for j = 0 to nPopupMenuCount
          if oPopupMenu(j).Name = "CommandURL" then
        if oPopupMenu(j).Value = Command then
           FindPopupMenu = j
           exit function
                endif
          endif
        next j
  next i
        
  FindPopupMenu = -1
End Function

Function GetProperty( PropertyName as String, properties() as Variant ) as Variant
  for j = lbound( properties() ) to ubound( properties() )
    oPropertyValue = properties(j)
    if oPropertyValue.Name = PropertyName then
          GetProperty = oPropertyValue.Value
      exit function
        endif
  next j

  GetProperty = null
end function

Sub Test
        MsgBox "Test"
End Sub

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

Reply via email to