Re: How to make MenuBar chnages Persistent par Document.

Carsten Driesner <[email protected]> Wed, 05 Jan 2011 13:43:55 +0100
Newsgroups gmane.comp.openoffice.devel.api
Message-ID <[email protected]>
On 05.01.2011 11:45, Fernand Vanrie wrote:
> Hallo,
> I can make disappear some Buttons from a Menubar in a document). But
> After saving an reopening the doc, the buttons are "again" in place.
>
> my code uses
>
> oMenuBar.Persistent = true
>
> In the ODK help i can find: If the property Persistent is *true* changes
> on the structure of the user interface element are written back to
> configuration source. When this property is changed, afterwards
> XUIElementSettings::updateSettings must be called so the user interface
> element tries to retrieve its settings from the new user interface
> configuration manager. BUT wath mean this lines ?
>
> There was a issue (46194) whois fixed ("false" wasn't working) , but now
> i think "true" is not working any more
Hi Fernand,

You have to use the UI Configuration Manager from the document. Changing 
the "Persistent" property to true (which is the default value) is only a 
prerequisite. If you retrieve the UI element from the Layout Manager the 
configuration source is normally the module and NOT the document.

Just look at the following example which copies the menu bar settings 
from the module to a loaded document.

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

Sub Main
    sMenuBarResUrl = "private:resource/menubar/menubar"
    oDesktop = createUnoService( "com.sun.star.frame.Desktop" )
	
    REM *** Propterties for loadComponentFromUrl ***
    Dim OpenProperties(3) as new com.sun.star.beans.PropertyValue
    OpenProperties(0).Name = "Hidden"
    OpenProperties(0).Value = True
    OpenProperties(1).Name = "AsTemplate"
    OpenProperties(1).Value = False
    OpenProperties(2).Name = "MacroExecutionMode"
    OpenProperties(2).Value = 
com.sun.star.document.MacroExecMode.NEVER_EXECUTE	

    REM *** Load a document ***
    sDocUrl = "file:///d:/document.odt"
    oDoc = oDesktop.loadComponentFromUrl(sDocUrl, "_default", 0, 
OpenProperties())
	
    oModuleCfgMgrSupplier = 
createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier")

    REM *** Retrieve the text module UI 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( sMenuBarResUrl, true )

    REM *** Retrieve the document UI configuration manager
    oDocUICfgMgr = oDoc.getUIConfigurationManager()

    REM *** Insert/replace the menubar settings to the target document
    REM *** with the module ui configuration manager settings.
    if oDocUICfgMgr.hasSettings( sMenuBarResUrl ) then
        oDocUICfgMgr.replaceSettings( sMenuBarResUrl, oMenuBarSettings )
    else
        oDocUICfgMgr.insertSettings( sMenuBarResUrl, oMenuBarSettings )
    endif

    REM *** Store the changes to the document
    oDocUICfgMgr.store()
    oDoc.store()

End Sub

Regards,
Carsten