Sto imbattendomi con la personalizzazione dell'interfaccia di OO per Popup e Toolbar e ho sviluppato un pò di Macro sulle Toolbar prendendo spunto qua e là
Scrivo di seguito il codice sin qui sviluppato sperando che qualcun altro sappia aggiungere nuove funzionalità e contenuti per dare un punto di riferimento a tutti su questo argomento.
Sono ben accetti riferimenti a Tutorial che spiegano con esempi, link ad argomenti, ecc che parlano di questa parte della personalizzazione di OO
Tra gli argomenti su cui ancora ho trovato poco o nulla ci sono:
- Come fare ad associare un'icona ai bottoni
- Come integrare Toolbar e Popup assieme
- Come associare le Toolbar personalizzate all'ambiente generale di lavoro e non al singolo file aperto
- ...
Ok bando alle ciance, di seguito il codice macro
Codice: Seleziona tutto
public sub Toolbar_Main () ' PROGRAMMA MAIN PER LE TOOLBAR
dim sResToolbar, sNameToolbar as string ' DICH. VARIABILI
dim oToolbar as object '
dim oThisDocUICfgMngr as object ' DICHIARA VARIABILI LOCALI
dim I as integer '
oThisDocUICfgMngr = thiscomponent.UIConfigurationManager ' ACQ. User Interface CONFIGURATION MANAGER
sNameToolbar = "Alba" ' NOME DA ASSOCIARE ALLA TOOLBAR
sResToolbar = "private:resource/toolbar/custom_Alba01" ' RESOURCE URL DELLA TOOLBAR
I = 0 ' IMPOSTA INDEX BOTTONI TOOLBAR
'---------------------------------------------'
call ToolbarRemove (sResToolbar) ' CANCELLA LA TOOLBAR SE GIA' PRESENTE
oToolbar = ToolbarCreate (oThisDocUICfgMngr,sNameToolbar) ' LA CREA NUOVA
'---------------------------------------------' DATI PER INSERIMENTO BOTTONI
call ToolbarItemCreate (I, oToolbar, "macro:///Calc01.fnCalc.Fx_InRow_DB()", "InsRifDB"): I = I + 1
call ToolbarItemCreate (I, oToolbar, "macro:///Calc01.fnCalc.Fx_InRow_DBArt()", "InsArtDB"): I = I + 1
call ToolbarItemCreate (I, oToolbar, "macro:///Calc01.fnCalc.Fx_SelArtDB()", "SelArtDB"): I = I + 1
call ToolbarListUpdate (oThisDocUICfgMngr, sResToolbar, oToolbar)
call ToolbarShow (sResToolbar) ' MOSTRA LA TOOLBAR
end sub ' FINE
public function ToolbarCreate (P_oThisDocUICfgMngr, P_sNameToolbar) ' CREAZIONE TOOLBAR PERSONALIZZATA
dim OBJNEW as object ' DICHIARA VARIABILI LOCALI
OBJNEW = P_oThisDocUICfgMngr.createSettings() ' CREA TOOLBAR
OBJNEW.UIName = P_sNameToolbar ' E GLI DA IL NOME DA PARAMETRO
ToolbarCreate = OBJNEW ' TORNA OGGETTO A CHIAMANTE
end function ' FINE
public sub ToolbarItemCreate (P_Index, P_oToolbar, P_Command, P_Label)
'---------------------------------------------'
' Routine per la creazione di un bottone della Toolbar.
'---------------------------------------------'
dim aToolbarItem(3) as new com.sun.star.beans.PropertyValue
'---------------------------------------------'
aToolbarItem(0).Name = "CommandURL" ' ARGOMENTO PER IL COMANDO DA ASSOCIARE AL BOTTONE
aToolbarItem(0).Value = P_Command ' VALORE IN FORMATO STRINGA DEL COMANDO DA ASSOCIARE
aToolbarItem(1).Name = "Label" ' ARGOMENTO PER L'ETICHETTA A VISTA
aToolbarItem(1).Value = P_Label ' VALORE IN FORMATO STRINGA PER L'ETICHETTA A VISTA DEL BOTTONE
aToolbarItem(2).Name = "Type" ' Chi ne sa lo dica
aToolbarItem(2).Value = 0 ' Valore per Type (Con 0 si vede la scritta...)
aToolbarItem(3).Name = "Visible" ' ARGOMENTO PER BOTTONE VISIBULE O NASCOSTO
aToolbarItem(3).Value = true ' true per VISIBILE, false per NASCOSTO
'---------------------------------------------'
' Inserimento By Index nella Toolbar P_oToolbar alla posizione P_Index
'---------------------------------------------'
P_oToolbar.insertByIndex(P_Index, aToolbarItem()) ' INSERIMENTO NELLA TOOLBAR PASSATA COME PARAMETRO
end sub ' FINE
public sub ToolbarListUpdate (P_oThisDocUICfgMngr, P_sResToolbar, P_oToolbar)
'---------------------------------------------'
' Se la toolbar già esiste la Rimpiazza con la sua nuova versione (replace)
' Altrimenti la inserisce come nuova (insert)
'---------------------------------------------'
if P_oThisDocUICfgMngr.hasSettings(P_sResToolbar) then ' IF ESISTE THEN REPLACE
P_oThisDocUICfgMngr.replaceSettings(P_sResToolbar, P_oToolbar)
else ' ELSE INSERT
P_oThisDocUICfgMngr.insertSettings(P_sResToolbar, P_oToolbar)
endif ' ENDIF REPLACE or INSERT
End sub ' FINE
public sub ToolbarRemove (P_ResToolbar) ' CANCELLAZIONE TOOLBAR
dim OCFMNG as object ' DICHIARA VARIABILI
OCFMNG = thiscomponent.UIConfigurationManager ' ACQ. User Interface CONFIGURATION MANAGER
if OCFMNG.hasSettings(P_ResToolbar) then ' IF RESOURCE TOOLBAR TROVATA
OCFMNG.removeSettings(P_ResToolbar) ' LA RIMUOVO DALL'INSIEME
endif ' ENDIF
end sub ' END SUB
public sub ToolbarShow (P_ResToolbar) ' MOSTRA LA TOOLBAR SE NASCOSTA
dim OBJDOC as object ' DICH. VAR. LOCALI
dim I, J, FGOK as integer '
FGOK = 0 ' IMPOSTA FLAG TOOLBAR TROVATA
for I = 0 to stardesktop.frames.count - 1 ' CICLO SU ELENCO FRAMES APERTI
OBJDOC = stardesktop.frames(I).layoutManager ' RIF. OGGETTO FRAME DI CICLO
for J = LBound(OBJDOC.Elements) to UBound(OBJDOC.Elements) ' CERCA TOOLBAR
if OBJDOC.Elements(J).ResourceURL = P_ResToolbar then ' IF TROVATA
FGOK = 1 ' FLAG TROVATA SU VERO
OBJDOC.showElement(OBJDOC.Elements(J).ResourceURL) ' MOSTRA TOOLBAR
endif ' ENDIF
next J ' NEXT ELEMENT DEL FRAME CORRENTE
next I ' NEXT FRAME
if FGOK = 0 then msgbox "Risorsa UI " & P_ResToolbar & " Non Trovata"
end sub ' FINE