Fondamenti di programmazione OpenOffice.org Basic a cura di nizan Soluzioni Open Source GNU Free Documentation License Copyright © 2003 nizan Soluzioni OpenSource via Marconi,14 Casalecchio di Reno. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Text Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". 2 OpenOffice.org OpenOffice.org è un progetto Open Source che ha quale scopo primario lo sviluppo di una Suite per l'Ufficio multi-lingue e multi- piattaforma, basata sullo standard aperto XML di salvataggio dei documenti 3 Differenze tra StarOffice e OpenOffice.org Non tutto il codice di StarOffice è disponibile presso OpenOffice.org. La ragione dipende dal fatto che Sun Microsystems utilizza codice di terze parti e ne acquista la licenza; non ha perciò il permesso di renderlo utilizzabile in OpenOffice.org. Le parti che sono o saranno presenti in StarOffice, ma non disponibili in OpenOffice.org includono: * Controllo Ortografico * Alcuni caratteri (inclusi, in modo particolare, i caratteri delle lingue orientali) * La Guida * Il componente di Database (Adabas D) * I Modelli * La vasta galleria di Clip Art * Alcune funzionalità di ordinamento (nelle versioni asiatiche) * Alcuni filtri per i file 4 OpenOffice.org: uso delle macro ● Creazione nuova macro ● Creazione nuovo modulo ● Gestione moduli ● Gestione librerie ● Importazione/esportazione ● Assegnazione macro 5 OpenOffice.org:uso delle macro 6 Finestra Macro: moduli standard 7 Opzioni: percorsi 8 Finestra Macro: moduli utente 9 Gestione macro: moduli 10 Gestione macro: librerie 11 Assegnazione macro: voce di menù 12 Assegnazione macro: combinazione di tasti 13 Assegnazione macro: eventi 14 OpenOffice.org Basic: differenze rispetto ai dialetti basic tradizionali OpenOffice.org Basic è modulare La programmazione con OpenOffice.org Basic è basata su singole Subs o Functions che terminano sempre con End Sub o End Function. In ogni Sub o Function può essere chiamata un'altra Sub o Function Quando una macro viene eseguita automaticamente essa chiama la Sub corrispondente 15 OpenOffice.org Basic: considerazioni tecniche ● Variabili ● Oggetti ● Procedure e funzioni ● Librerie di moduli e dialoghi 16 Variabili: dichiarazione ● DIM a$ – ● DIM a As String – ● dichiara “a” come stringa dichiara “a” come stringa DIM a$, b As Integer – dichiara “a” come stringa, “b” come intero 17 Variabili: dichiarazione La dichiarazione delle variabili obbligatoria NON è Questo comportamento può essere cambiato utilizzando “OPTION EXPLICIT” come prima istruzione di un modulo 18 Variabili: tipi Forma breve DIM Variabile As ... ● DIM Variabile% ● Integer ● Date ● DIM Variabile& ● Long ● Boolean ● DIM Variabile! ● Single ● DIM Variabile# ● Double ● DIM Variabile@ ● Currency ● DIM Variabile$ ● String 19 Procedure e Funzioni: chiamata semplice Sub Inizio DIM Variabile1 As String DIM Variabile2 As Integer Codice End Sub 20 Procedure e Funzioni: chiamata semplice Function Inizio As Integer DIM Variabile1 As String DIM Variabile2 As Integer Codice Inizio = Valore (valore di ritorno) End Function 21 Procedure e Funzioni: chiamata con parametri Sub Inizio(Par1 As Integer, Par2 As String) DIM Variabile1 As String DIM Variabile2 AS Integer Codice End Sub 22 Procedure e Funzioni: chiamata con parametri Function Inizio(Par1 As Single) As Integer DIM Variabile1 As String DIM Variabile2 AS Integer Codice Inizio = Valore (valore di ritorno) End Function 23 Procedure e funzioni: visibilità delle variabili ● PUBLIC Variabile As TYPENAME – ● PRIVATE Variabile As TYPENAME – ● Visibile solo nel modulo corrente DIM Variabile As TYPENAME – ● Visibile in tutti i moduli Come sopra STATIC Variabile As TYPENAME – Preserva il valore di una variabile in una Sub 24 Procedure e funzioni: altre caratteristiche ● Di default tutte le variabili vengono passate alle funzioni per riferimento – ● Per modificare questo comportamento aggiungere la keyword “ByVal” prima di un parametro nella chiamata della funzione Le chiamate ricorsive di Subs e Functions NON sono permesse 25 Librerie, moduli e dialog ● ● ● Le librerie sono un tool per organizzare più moduli. Quando un documento o un template vengono salvati, tutte le librerie in esso contenute vengono salvate I moduli contengono Sub e Function e tutte le variabili valide in uno o tutti i moduli I dialog permettono l'interazione con l'utente tramite controlli ed eventi 26 Gestione macro: moduli 27 OpenOffice.org Basic IDE ● ● ● ● ● Ambiente di sviluppo integrato in OpenOffice.org Supporto linguaggio di programmazione OpenOffice.org Basic Editor avanzato Interfacciamento diretto con API di programmazione Debugging avanzato 28 StarBasic IDE: interfaccia 29 StarBasic IDE: debugging 30 L'API OpenOffice.org L'API OpenOffice.org si basa sulla tecnologia a componenti di OpenOffice.org e consiste in una ampia gamma di interfacce scritte in un linguaggio IDL simile a CORBA. Mentre la tecnologia a componenti determina come i componenti o le applicazioni comunicano gli uni con gli altri e come accedere all'API da specifici linguaggi, l'API definisce l'interfaccia per accedere alle funzionalità indipendentemente dal linguaggio usato. 31 L'API OpenOffice.org: definizione ● L'API OpenOffice.org non è un linguaggio di programmazione – E' una definizione astratta di tutti gli oggetti e delle interfacce che si possono usare nella programmazione. – OpenOffice.org Basic offre un interfacciamento diretto con l'API OpenOffice.org ma le stesse interfacce possono essere utilizzate da altri linguaggi di programmazione (C, C++, Java, StarScript) 32 API OpenOffice.org: informazioni addizionali ● http://api.openoffice.org/ – ● http://api.openoffice.org/basic/man/tutorial/tutorial.pdf – ● Homepage del progetto API OpenOffice.org Tutorial sull'API OpenOffice.org (aka Staroffice) e OpenOffice.org Basic (aka StarBasic) http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html – Manuale di riferimento (online) dell'API OpenOffice.org 33 OpenOffice.org API: concetti ● Servizi e interfacce ● Moduli ● Componenti 34 OpenOffice.org API: servizi e interfacce ● Un servizio è un concetto “astratto” che fornisce interfacce e proprietà – Ogni implementazione di un particolare servizio deve fornire le stesse interfacce – Una interfaccia è una collezione di metodi che forniscono certe funzionalità 35 Gestione macro: librerie 36 Servizi e interfacce 37 OpenOffice.org API: moduli ● I moduli sono raggruppamenti di servizi, interfacce, tipi, numeratori e strutture dati. – Alcuni esempi di moduli sono text, sheet, table e drawing – Sebbene i loro nomi corrispondano con quelli di certe applicazioni non c'è un legame diretto tra questi (es. il modulo document non è usato solamente per documenti di testo) 38 StarOffice API module structure 39 OpenOffice.org API: componenti ● I componenti implementano servizi dell'API di OpenOffice.org – Non è possibile accedervi direttamente programmando con l'API di OpenOffice.org. – Sono accessibili come “beans” che è possibile incorporare nei programmi – Il loro utilizzo è fuori dallo scopo di questo trattato 40 END a cura di nizan Soluzioni Open Source Fondamenti di programmazione OpenOffice.org API (parte 2) a cura di nizan Soluzioni Open Source GNU Free Documentation License Copyright © 2003 nizan Soluzioni OpenSource via Marconi,14 Casalecchio di Reno. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Text Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". Funzioni I/O standard OpenOffice.org Basic comprende un set completo di funzioni di I/O sul filesystem che lo rendono compatibile con Visual Basic. Per garantire l'indipendenza dal sistema operativo usato è stata aggiunta la notazione “file://...” Esempio I/O con funzioni standard Open "file:///home/guandalf/prova.txt" For Input As #1 While Not Eof(#1) Input #1, a$ Print a$ Wend Close #1 I/O con l'API OpenOffice.org Servizio: com.sun.star.ucb.SimpleFileAccess Interfacce: com.sun.star.ucb.XSimpleFileAccess2 com.sun.star.ucb.XSimpleFileAccess I/O con l'API OpenOffice.org metodi ● Copiare, muovere e rimuovere files e folders (copy(), move(), kill()) ● Ottenere informazioni riguardanti files e folders (isFolder(), exists(), getSize(), ...) ● Aprire e creare files (openFileRead(), openFileWrite(), openFileReadWrite()) I/O con l'API OpenOffice.org intefacce stream ● com.sun.star.io.XInputStream, com.sun.star.io.XSeekable ● com.sun.star.io.XOutputStream, com.sun.star.io.XSeekable ● com.sun.star.io.XStream, com.sun.star.io.XSeekable Intefacce stream specifiche per I/O su files di testo Servizi: com.sun.star.io.TextInputStream com.sun.star.io.TextOutputStream Interfacce: com.sun.star.io.XTextInputStream com.sun.star.io.XActiveDataSink com.sun.star.io.XTextOutputStream com.sun.star.io.XActiveDataSource Intefacce stream specifiche per input da files di testo L'interfaccia com.sun.star.io.XActiveDataSink esporta il metodo setInputStream() che accetta come parametro un oggetto ritornato dal metodo openFileRead() Intefacce stream specifiche per I/O su files di testo Utilizzando i metodi readLine() readString() esportati dall'interfaccia com.sun.star.io.XTextInputStream possiamo leggere linee o stringhe dal file di testo Intefacce stream specifiche per I/O su files di testo Utilizzando il metodo setEncoding() possiamo definire la codifica dei caratteri che sarà usata (default UTF-8) http://www.iana.org/assignments/character-sets Intefacce stream specifiche per output su files di testo L'interfaccia com. sun. star. io.XActiveDataSource esporta il metodo setOutputStream() che accetta come parametro un oggetto ritornato dal metodo openFileWrite() Intefacce stream specifiche per I/O su files di testo Utilizzando il metodo writeString() esportato dall'interfaccia com.sun.star.io.XTextOutputStream possiamo scrivere stringhe nel file di testo Chiusura streams I files aperti devono essere chiusi utilizzando i metodi com.sun.star.io.XInputStream:closeInput() com.sun.star.io.XOutputStream:closeOutput() Esempio I/O con API OpenOffice.org oSimpleFileAccess = createUnoService_ ("com.sun.star.ucb.SimpleFileAccess") oStream = oSimpleFileAccess.openFileRead_ ("file:///home/guandalf/prova.txt") oTextStream = createUnoService_ ("com.sun.star.io.TextInputStream") oTextStream.setInputStream(oStream) While Not oTextStream.isEOF() sLine = oTextStream.readLine() Print sLine Wend oStream.closeInput() Formati data e ora OpenOffice.org supporta diversi tipi di formati e funzioni per il trattamento di data e ora compatibili con Visual Basic Formati data e ora I metodi com.sun.star.awt.XDateField:setDate() e com.sun.star.awt.XDateField:getDate() utilizzano uno speciale formato ISO non compatibile con le funzioni Date e Time interne al Basic Formati data e ora Le funzioni CDateToIso e CDateFromIso convertono i formati da quello del Basic a quello delle API e viceversa Interazione tra Basic e API ● StarDesktop ● ThisComponent StarDesktop Dà accesso diretto al servizio: com.sun.star.frame.Desktop MsgBox StarDesktop.Dbg_SupportedInterfaces equivale a Dim oDesktop oDesktop = createUnoService_(“com.sun.star.frame.Desktop”) MsgBox oDesktop.Dbg_SupportedInterfaces ThisComponent ● ● Dà accesso al documento corrente o che contiene il codice eseguito Il valore ritornato dipende dal documento al quale fa riferimento – Es. MsgBox ThisComponent.Dbg_SupportedInterfaces Questo esempio produrrà diversi risultati dipendentemente dal documento sul quale stiamo operando Interfacce di default Tutti i documenti esportano una serie di interfacce di default. Dipendentemente dal tipo di documento, saranno disponibili una ulteriore serie di interfacce specializzate. Interfacce esportate da tutti i documenti (segue) ● com.sun.star.beans.XPropertySet ● com.sun.star.container.XChild ● com.sun.star.document.XdocumentInfoSupplier ● com.sun.star.document.XEventBroadcaster ● com.sun.star.document.XViewDataSupplier ● com.sun.star.document.XEventsSupplier ● com.sun.star.document.XLinkTargetSupplier Interfacce esportate da tutti i documenti ● com.sun.star.frame.XModel ● com.sun.star.frame.XStorable ● com.sun.star.lang.XServiceInfo ● com.sun.star.lang.XMultiServiceFactory ● com.sun.star.lang.XEventListener ● com.sun.star.style.XStyleFamiliesSupplier ● com.sun.star.util.XModifiable ● com.sun.star.view.XPrintable com.sun.star.beans.XPropertySet Fornisce informazioni e accesso alle proprietà di una implementazione. Le proprietà possono essere di tipo: ● Bound ● Constrained ● Free E' possibile legare dei “listener” alle proprietà di tipo bound e constrained. com.sun.star.container.XChild Permette l'accesso al “genitore” dell'oggetto specificato tramite i metodi getParent() setParent() com.sun.star.document.XDocumentInfoSupplier Fornisce informazioni specifiche sul documento come: autore data di creazione titolo informazioni sull'utente com.sun.star.document.XEventBroadcaster Permette di registrare “listener” che saranno chiamati quando determinati eventi avverranno nel documento Alcuni nomi di eventi sono: OnLoadFinished OnPrint OnResize com.sun.star.document.XViewDataSupplier Dà accesso a una serie di proprietà che descrivono le “viste” del documento Ogni vista è descritta da una serie di com.sun.star.beans.PropertyValue com.sun.star.document.XEventsSupplier Attraverso la chiamata al metodo getEvents() ritorna una lista di handlers legati a eventi dell'oggetto com.sun.star.document.XLinkTargetSupplier Interfaccia fornita dagli oggetti all'interno del modello del documento che possono essere target di un link. Il metodo getLinks() ritorna l'elenco e implementa LinkTargets sul quale operare. il servizio com.sun.star.frame.XModel E' la rappresentazione di un componente creato tramite un URL e degli argomenti. Contiene ad esempio il nome della risorsa accessibile tramite il metodo getURL() com.sun.star.frame.XStorable Permette in modo semplice di immagazzinare un componente in un URL. Ad esempio il metodo store() salva il componente nell'URL dal quale era stato caricato. com.sun.star.lang.XServiceInfo Fornisce informazioni riguardanti le implementazioni di servizi, cioè quali servizi sono implementati e il nome dell'implementazione. com.sun.star.lang.XMultiServiceFactory Permette la creazione di istanze di servizi che verranno inclusi nel documento. Con il metodo createInstance() si crea una istanza (ad esempio di un servizio, ma non solo) all'interno del documento. com.sun.star.lang.XEventListener E' l'interfaccia di base per tutte le interfacce “listener” Esporta un metodo disposing() che viene chiamato quando il “broadcaster” sta per essere rimosso com.sun.star.style.XStyleFamiliesSupplier Questa interfaccia fornisce l'accesso alle famiglie di stili contenute nel documento. Il metodo getStyleFamilies() ritorna questo elenco come un contenitore di stili. com.sun.star.util.XModifiable Rende accessibile lo stato di documento modificato attraverso i metodi isModified() setModified() com.sun.star.view.XPrintable Fornisce le funzionalità basilari di stampa Esporta i metodi getPrinter() setPrinter() print() Documenti Text: servizi e interfacce ● Servizio com.sun.star.text.TextDocument che esporta l'intefaccia com.sun.star.text.XTextDocument ● Diverse altre interfacce specialmente dal modulo com.sun.star.text com.sun.star.text.XTextDocument Fornisce l'interfaccia principale per un documento di testo Esporta getText() reformat() Documenti Spreadsheet: servizi e interfacce ● Servizio ● Diverse altre interfacce specialmente dal com.sun.star.sheet.SpreadsheetDocument modulo com.sun.star.sheet com.sun.star.sheet.SpreadsheetDocument Fornisce l'accesso a una collezione di fogli di calcolo Esporta getSheets() Documenti Drawing: servizi e interfacce ● Servizio ● Diverse altre interfacce specialmente dal com.sun.star.sheet.DrawingDocument modulo com.sun.star.drawing END a cura di nizan Soluzioni Open Source