Toolbar da Macro, queste sconosciute

Forum di discussione per specifici progetti legati a OpenOffice
Rispondi
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Toolbar da Macro, queste sconosciute

Messaggio da Mizio1961 »

Ciao a tutti
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 
Ciao a tutti e 'buon divertimento' per chi si vorrà cimentare assieme a me... ;)
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
pinosauro
Messaggi: 37
Iscritto il: sabato 7 settembre 2013, 8:33

Re: Toolbar da Macro, queste sconosciute

Messaggio da pinosauro »

Ciao Mizio,

Codice: Seleziona tutto

Sub main
ThisComponent.CurrentController.Frame.LayoutManager.hideElement("private:resource/toolbar/standardbar")
End Sub
...facendo riferimento al codice che ti ho scritto, hai idea di quali sono gli altri nomi da utilizzare per far apparire/scomparire le altre barre al posto di STANDARDBAR?

grazie
OpenOffice 3.3 / win 8
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Toolbar da Macro, queste sconosciute

Messaggio da Mizio1961 »

Ciao
Se cerchi toolbar in questo forum dovresti trovare anche ciò che chiedi.
Io per ora ho lasciato un pò da parte questo studio ma devi partire dall'oggetto LayoutManager che nella proprietà element ti consente di 'ciclare' le toolbar presenti e quindi di lavorarci sopra in hide e in show.
Il problema è che di documentazione in italiano ne esiste poca e ovviamente la difficoltà di quella in inglese risiede nel fatto di trovare la 'parola magica' che ti faccia trovare l'argomento giusto nei forum stranieri.
Considera però che la logica di questi oggetti è quella di Java, quindi trovando l'argomento in tale ambito dovrebbe poi essere semplice riportarlo in OOBasic... almeno in qualche situazione che ho potuto sperimentare personalmente così sono riuscito a venire a capo di diversi enigmi che mi bloccavano.
Di seguito un paio di macro che dovrebbero fare al caso tuo...

Codice: Seleziona tutto

public sub HideLM (oForm as object)
'   dim oForm as object
   dim oFormLM as object
   dim i as integer
   msgbox "Hide"
'   oForm    = Thiscomponent
   oFormLM  = oForm.CurrentController.Frame.LayoutManager
   for i = lbound(oFormLM.elements) to ubound(oFormLM.elements)
      oFormLM.hideElement(oFormLM.elements(i).resourceurl)
   next i
'   oForm.refresh
end sub

public sub ShowLM
   dim oForm as object
   dim oFormLM as object
   dim i as integer
   oForm    = Thiscomponent
   oFormLM = oForm.CurrentController.Frame.LayoutManager
   for i = lbound(oFormLM.elements) to ubound(oFormLM.elements)
      oFormLM.showElement(oFormLM.elements(i).resourceurl)
   next i
   oForm.refresh
   oForm.currentController.frame.close(true)
end sub

Ciao e... buon divertimento ;)
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
pinosauro
Messaggi: 37
Iscritto il: sabato 7 settembre 2013, 8:33

Re: Toolbar da Macro, queste sconosciute

Messaggio da pinosauro »

Complimenti per la velocità e grazie per le indicazioni.

Ho copiato la macro HideLM e l'ho associata ad un pulsante ma non succede nulla. Le barre rimangono tutte lì però mi appare la finestrella hide...

Che faccio?
OpenOffice 3.3 / win 8
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Toolbar da Macro, queste sconosciute

Messaggio da Mizio1961 »

Vedi che ci sono delle righe 'remmate' relative all'acquisizione della Form su cui operare
Devi renderle attive come segue

Codice: Seleziona tutto

public sub HideLM (oForm as object)
   dim oForm as object
   dim oFormLM as object
   dim i as integer
'   msgbox "Hide"
   oForm    = Thiscomponent
   oFormLM  = oForm.CurrentController.Frame.LayoutManager
   for i = lbound(oFormLM.elements) to ubound(oFormLM.elements)
      oFormLM.hideElement(oFormLM.elements(i).resourceurl)
   next i
   oForm.refresh
end sub
Così dovrebbe funzionare. E' però fondamentale che tu capisca il senso della macro, che è racchiuso nel ciclo for ... next. Altrimenti potrebbe non essere quello che ti occorre
Saluti
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Toolbar da Macro, queste sconosciute

Messaggio da Mizio1961 »

Se può interessare è possibile percorrere una strada alternativa con i file scritti in XML
Saluti
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Rispondi