menu persnalizzati

Creare una macro - Scrivere uno script - Usare le API
Rispondi
elianaOO
Messaggi: 19
Iscritto il: lunedì 28 febbraio 2011, 16:21

menu persnalizzati

Messaggio da elianaOO »

Salve a tutti,
vorrei modificare il menu con una macro.
ho seguito la guida
http://wiki.services.openoffice.org/wik ... ing_the_UI
ma il mio file menubar.xml non cambia.

Mi spiego meglio:
da strumenti->personalizza aggiungo un nuovo menù, manualmente è facile. ma lo vorrei far fare a una sub.

qualcuno mi aiuta?
grazie!
eliana
LibreOffice 3.3 su uBUNTU 10.10
elianaOO
Messaggi: 19
Iscritto il: lunedì 28 febbraio 2011, 16:21

Re: menu persnalizzati

Messaggio da elianaOO »

Ho trovato qualcosa che fa al caso mio quindi mi rispondo da sola...

Codice: Seleziona tutto

 '''REM ====== To remove menu: delete macro, then delete menu in Tools > Customize... ======'''
 
 '''REM ====== YOUR ROOT BELOW ======'''
 
 const aDataRootFolder="file:///home/Malte/Documents/"
 
 '''REM ====== YOUR ROOT ABOVE ======'''
 sub main
InsertFavoritesMenu(pippo)
end sub
 Sub InsertFavoritesMenu

'    ImplInsertFavoritesMenu( "com.sun.star.frame.StartModule" )
'    ImplInsertFavoritesMenu( "com.sun.star.text.TextDocument" )
    ImplInsertFavoritesMenu( "com.sun.star.sheet.SpreadsheetDocument" )
'    ImplInsertFavoritesMenu( "com.sun.star.drawing.DrawingDocument" )
'    ImplInsertFavoritesMenu( "com.sun.star.presentation.PresentationDocument" )
 End Sub 
 
 Sub ImplInsertFavoritesMenu( ModuleName as string )
    sMenuBar = "private:resource/menubar/menubar"
    sMyPopupMenuCmdId = "vnd.openoffice.org:FavoritesMenu"
 
    oModuleCfgMgrSupplier = createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier")
    oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager( ModuleName )
    oMenuBarSettings = oModuleCfgMgr.getSettings( sMenuBar, true )
 
    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 = "Favorites"
        oPopupMenu = ImplCreatePopupMenu( sMyPopupMenuCmdId, sString, oMenuBarSettings )
        oPopupMenuContainer = oPopupMenu(3).Value
 
        '''REM ====== YOUR CUSTOMIZATIONS BELOW ======'''
 
        oMenuItem = ImplCreateMenuItem( aDataRootFolder+"ToDo.ods", "ToDo's" )
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )
        oMenuItem = ImplCreateMenuItem( aDataRootFolder+"ODF-Plugin ToDo's.ods", "ToDo's ODF Plugin" )
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )
        oMenuItem = ImplCreateMenuItem( aDataRootFolder+"cws-tools-doc-short.odt", "CWS Tools" )
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )
 
        oMenuItem = ImplCreateMenuSeparator()
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )
 
        oMenuItem = ImplCreateMenuItem( aDataRootFolder+"Addresses.ods", "Addresses" )
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )
        oMenuItem = ImplCreateMenuItem( aDataRootFolder+"Data.ods", "Data" )
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )
 
        '''REM ====== YOUR CUSTOMIZATIONS ABOVE ======'''
 
        oMenuBarSettings.insertByIndex( nCount, oPopupMenu )
        oModuleCfgMgr.replaceSettings( sMenuBar, oMenuBarSettings )
    end if
 End Sub
 
 Function ImplCreatePopupMenu( 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() )
    ImplCreatePopupMenu = aPopupMenu()
 End Function
 
 Function ImplCreateMenuItem( 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 = ".uno:Open?URL:string=" + Command + "&FrameName:string=_default"
    aMenuItem(1).Name = "Label"
    aMenuItem(1).Value = Label
    aMenuItem(2).Name = "Type"
    aMenuItem(2).Value = 0
      ImplCreateMenuItem = aMenuItem()
 End Function
 
 Function ImplCreateMenuSeparator() as Variant
    Dim aMenuItem(0) as new com.sun.star.beans.PropertyValue
    aMenuItem(0).Name = "Type"
    aMenuItem(0).Value = 1
    ImplCreateMenuSeparator = aMenuItem()
 End Function
questo codice non fa esattamente quello che mi serve, perché io vorrei lanciare delle macro che ho creato nel modulo corrente,
invece di aprire dei documenti, ma scommetto che presto capirò come farlo.
...o qualcuno mi darà qualche piccolo suggerimento :D

Eliana
LibreOffice 3.3 su uBUNTU 10.10
vladko
Volontario
Volontario
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: menu persnalizzati

Messaggio da vladko »

puoi spiegare meglio chi come cosa quando di tua domanda?
hai guardato nelle faq di OOO?
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
elianaOO
Messaggi: 19
Iscritto il: lunedì 28 febbraio 2011, 16:21

Re: menu personalizzati

Messaggio da elianaOO »

cia Vladko
vorrei personalizzare il menù backside,
cioè fare quello che si fa da strumenti->personalizza->menu "manualmente" in modo automatico,
che è poi quel codice che ho incollato, solo che il codice che ho incollato è un menù favoriti, quindi l'unica cosa che fa è richiamare delle pagine,
mente quello che vorrei io è di aggiungere dei nuovi menù in grado di richiamare delle sub.
LibreOffice 3.3 su uBUNTU 10.10
vladko
Volontario
Volontario
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: menu persnalizzati

Messaggio da vladko »

ci sono alcune extension che creano menu personali.
potresti guardare a quelle
1 che mi viene in mente MRI
2 tools di sergiocorato che ogni tanto passa su questa strada
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
elianaOO
Messaggi: 19
Iscritto il: lunedì 28 febbraio 2011, 16:21

Re: menu persnalizzati

Messaggio da elianaOO »

cerco di spiegarmi meglio.
Dovrei modificare una vecchia extension che girava in excel.
Quindi dovrei creare dei menù che richiamano delle funzioni (se non ho capito male con call)
Queste funzioni a loro volta richiamano codice scritto in fortran e in c.
Ho qualche problema abbastanza serio, tipo che non riesco nemmeno a compilare il codice in c, ed ho anche qualche difficoltà con il fortran, tipo che nel passaggio da windows a ubuntu, le funzioni non sono compatibili al massimo.. avrei bisogno di qualche suggerimento :-)

Grazie
LibreOffice 3.3 su uBUNTU 10.10
Avatar utente
giorgiofoga
Messaggi: 116
Iscritto il: venerdì 28 gennaio 2011, 11:39

Re: menu persnalizzati

Messaggio da giorgiofoga »

bellloooo .... sei la prima fortrannista che mi capita a tiro ..... domanda stupidona .... perchè non fai fare tutto a c++??
libreoffice 3.3.1 su ubuntu 10.10 64bit
openoffice 3.2.1 su ubuntu 10.10 32bit
elianaOO
Messaggi: 19
Iscritto il: lunedì 28 febbraio 2011, 16:21

Re: menu persnalizzati

Messaggio da elianaOO »

Ciao giorgiofoga, non faccio fare tutto a c++ perché ho del codice molto antico che mi è stato regalato, che appunto è in fortran, che fa degli strani calcoli di "roba chimica" tipo calcolo dei parametri degli spettri, che sto cercando di interpretare (cioè di capire) non so bene dove andare a mettere le mani.
La mia extension di excel aveva la funzione di interfacciare graficamente in un modo un po' umano questi programmi di simulazione scritti in Fortran e C, mutuati da un'università americana che ora ha tolto anche i sorgenti dal sito, quindi renditi conto della situazione un po' preistorica del sorgente su cui debbo mettere mani.
Tu mi suggerisci di tramutare tutto in c++?
Non è un'impresa folle, considerando la presenza dei goto?!?
Scusa se ci ho messo tanto a rispondere ma ho preso qualche giorno di vacanza e non avevo il pc.

Eliana
LibreOffice 3.3 su uBUNTU 10.10
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: menu persnalizzati

Messaggio da xergio »

Da macro non li ho mai creati, però sull'extension il codice è questo:

Codice: Seleziona tutto

vnd.sun.star.script:IcsTools.Mod.OpenIcsToolsProjects?language=Basic&location=application
n.b.: la parte IcsTools.Mod.OpenIcsToolsProjects è la posizione e il nome della macro.
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Rispondi