Copyright © 2004 La squadra di Sviluppo di Kommander
È concesso il permesso di copiare, distribuire ovvero modificare questo documento sotto i termini della GNU Free Documentation License, versione 1.1 o qualsiasi versione successiva pubblicata dalla Free Software Foundation; con nessuna sezione invariante, con nessun testo di copertina anteriore e con nessun testo di copertina posteriore. Una copia di questa licenza è inclusa nella sezione intitolata "GNU Free Documentation License".
Kommander è un insieme di strumenti che ti permettono di creare finestre di dialogo GUI dinamiche che generano, in base al loro stato, un pezzo di testo. Il pezzo di testo può essere una riga di comando per un programma, qualsiasi pezzo di codice, documenti di affari che contengono tante ripetizioni o testi di modelli e così via. Il testo generato risultante può essere eseguito come un programma a linea di comando (da qui il nome “Kommander”), scritto in un file, passato ad uno script per un'elaborazione estesa e letteralmente qualsiasi altra cosa tu possa pensare. La parte migliore di tutto ciò? Non devi scrivere una singola riga di codice!
Sommario
Kommander è uno strumento di sviluppo visuale di finestre di dialogo che possono essere espanse fino a creare applicazioni dotate di finestre principali complete. L'obiettivo primario è di creare software nella maniera più efficace senza l'utilizzo di alcun linguaggio di scripting. Ciò si realizza grazie alle seguenti funzionalità:
I comandi speciali sono prefissati da una “@” come in @widgetText. Sono così fornite caratteristiche speciali come il valore di un widget, le funzioni, gli alias, le variabili globali e così via.
L'integrazione con DCOP permette alle finestre di dialogo create con Kommander di controllare ed essere controllate nella loro interazione con le altre applicazioni di KDE. È una funzionalità molto potente!
I segnali e gli Slot sono un po' meno intuitivi per un nuovo utente. Stiamo revisionando per il prossimo rilascio la maniera in cui vengono gestiti. Offrono un limitato modello ad eventi per quando un pulsante viene premuto od un widget viene cambiato. Sono piuttosto potenti se combinati con “Population Text”.
La caratteristica principale delle finestre di dialogo di Kommander è che puoi collegare del testo (Testo Kommander) ad un widget. Se hai, per esempio, @widget1 e @widget2 che sono delle caselle di testo puoi impostare Kommander in maniera tale che visualizzi il loro contenuto inserendo @widgetText nella loro area Testo Kommander. Potrai poi digitare "ciao" in @widget1 e "mondo" in @widget2. Un pulsante potrà poi avere la stringa "Il mio primo programma @widget1 @widget2 in Kommander". Se lanci questa finestra di dialogo da un terminale stamperà "Il mio primo programma ciao mondo in Kommander"
Con qualche speranza stai colo cominciando a scoprire un barlume del potenziale di Kommander. Kommander permette un modello di progettazione molto più rapido per semplici applicazioni perché ti costringe più a pensare al linguaggio, ma ti riporta al molto più semplice e naturale modello a concetti. Nei computer il linguaggio è un mezzo per definire concetti e in quanto tale è uno strato tra i concetti e la loro implementazione che può quindi ostacolare il progresso con tutti i suoi dettagli. Kommander cerca di minimizzare questo strato.
Kommander, inoltre, cerca di basarsi sugli standard. È costruito a partire dell'infrastruttura del Designer di Qt™ e crea dei file *.ui che rinomina in *.kmdr. Può facilmente importare qualsiasi widget di KDE e ciò può avvenire senza dover ricompilare Kommander, grazie ai plugin.
L'altro fattore significativo di Kommander è come indirizza le richieste del linguaggio. I linguaggi dei computer possono essere meravigliosi ma tendono ad avere i propri dogmi e i propri zeloti che cercano, spesso, di fornire un progresso alla progettazione GUI in un ambiente integrato di sviluppo. L'accettazione di questo tipo di IDE è ironicamente limitata dal numero di persone che vogliono adottare un nuovo linguaggio per guadagnare l'accesso alle funzionalità desiderate. È veramente poco ragionevole aspettarsi dalle persone il bisogno di passare attraverso una dozzina di linguaggi diversi per accedere ai diversi insiemi di funzionalità. Rimanendo neutrale ai linguaggi e permettendo ad una finestra di dialogo di Kommander di essere estesa utilizzando qualsiasi linguaggio di scripting, Kommander si colloca in una posizione unica per l'adozione a larga scala. Diversi linguaggi di scripting possono essere usati in una singola finestra di dialogo e altre persone possono prendere il controllo di una applicazione utilizzano un differente linguaggio rispetto a quello originale dello sviluppatore e gradualmente convertirla ed estenderla. Nuovi widget e funzionalità possono istantaneamente essere controllate da tutti i linguaggi disponibili.
Speriamo che Kommander inizi ad avere il supporto degli sviluppatori e il riconoscimento necessario per raggiungere il potenziale che vuole offre. Il nostro obiettivo finale è quello di rendere Kommander utile agli utenti principianti nell'estendere ed unire le loro applicazioni. Contemporaneamente, dovrebbe diventare un buono strumento per creare prototipi. Inoltre apre le porte alle promesse dell'open source in una nuova maniera. Sappiamo che le tutte persone possono estendere i nostri programmi GPL, ma in pratica ben poche ne hanno la capacità. Con Kommander questo numero vedrà un grandissimo incremento! Alcune applicazioni possono essere molto più logiche se pensate come applicazioni di Kommander. Lo usiamo già in quelle aree di Quanta Plus dove vogliamo permettere l'estensibilità.
Speriamo che ti diverta con Kommander. Per favore, aiutaci con la segnalazione degli errori e con finestre di dialogo di esempio, così come con qualsiasi richiesta tu possa avere. Puoi unirti alla nostra lista per utenti per aiutare lo sviluppo di applicazioni con Kommander su http://mail.kdewebdev.org/mailman/listinfo/kommander
I più cordiali saluti dalla squadra di sviluppo di Kommander!
Kommander è stato sviluppato in origine attorno ad un semplice concetto che si è rivelato in parte rivoluzionario tra gli strumenti di progettazione visuale. Questi strumenti permettono tipicamente di creare finestre di dialogo e, se possibile, interfacce delle finestre principali. Una interfaccia della finestra principale è chiaramente la finestra principale del programma che possiede generalmente menu, barre degli strumenti, la barra di stato e l'area dell'applicazione. Le finestre di dialogo sono finestre figlie che in genere non hanno meni e sono chiamate così perché il loro scopo è “intraprendere un dialogo” o scambiare informazioni tra te e l'applicazione principale. Gli elementi su una finestra di dialogo sono chiamati “widget” ed il tuo programma è collegato a loro. Kommander è differente perché in questo caso non è di per sé programmabile. Sfrutta il concetto di associare il testo con il widget sulla finestra di dialogo. All'inizio questo era chiamato “Testo Associato” ma ora il suo nome è “Testo di Kommander”. I widget sulle finestre di dialogo di Kommander possono includere il contenuto degli altri widget attraverso un riferimento ed un widget può far riferimento al proprio contenuto utilizzando un“Comando Speciale” che appare così: @widgetText. I comandi speciali sono comandi con un significato speciale in Kommander. Così se crei una finestra di dialogo con due LineEditWidget e chiami il primo “PrimoNome” ed il secondo “UltimoNome” puoi creare un pulsante ed impostare il suo Testo di Kommander a “Il mio nome è @PrimoNome @UltimoNome”. Dovresti impostare @widgetText nel widget del primo nome ed ultimo nome. Ricordi? Abbiamo bisogno di dire a Kommander di far riferimento al testo al loro interno. Puoi eseguire ciò da una Konsole e stamperebbe in output la stringa per te. Perciò farebbe riferimento al primo nome in questo mode: @PrimoNome -> ottieni il widget chiamato PrimoNome(@PrimoNome) -> @widgetText -> ottieni il contenuto del widget LineEdit. Quindi in questo caso @PrimoNome restituisce “Eric”: @PrimoNome -> @widgetText -> “Eric”.
Questo è il semplice nucleo di Kommander. Il suo utilizzo è la parte interessante. Prima di tutto è importante notare che, confrontato con il normale approccio ad uno strumento basato sul linguaggio, Kommander non ha bisogno di istruzioni di programmazione per definire queste operazioni. Ciò lo rende rapido per gli sviluppatori. Per l'utente finale è molto più semplice che imparare i costrutti di un linguaggio. A tutti, permette di concentrarsi sul proprio compito invece di avere materiale di riferimento eternamente in mano. All'inizio, quando si scopre uno strumento come Kommander la prima domanda è “Quale utilizzo posso trovare per questo stupendo strumento?” Come risulta evidente, manipolare stringhe è usato praticamente ovunque.
Perciò cosa può fare Kommander? Questa è la lista ridotta alle operazioni di base. Kommander può:
Passare le stringhe al programma chiamante attraverso lo stdout.
Richiamare programmi eseguibili.
Utilizzare DCOP per interagire con i programmi KDE
Se non sei un programmatore, ecco la spiegazione in linguaggio profano. Nel primo caso, se lanci Kommander da un terminale, il terminale è il programma chiamante. C'è qui una relazione genitore-figlio. Spedire un messaggio al terminale avviene attraverso lo standard output (stdout) del programma figlio, chiamato così perché esiste anche l'error output. Ciò è interessante perché alcuni programmi come Quanta Plus utilizzano lo standard output per ricevere informazioni dai programmi che lanciano. Le finestre di dialogo di Kommander, quindi, possono stampare in output le loro stringhe di testo direttamente nell'editor di Quanta Plus se sono state chiamate da Quanta Plus. Questo significa che le finestre di dialogo di Kommander possono essere delle utili estensioni ai programmi.
Il secondo caso concerne il richiamare un eseguibile. Qualsiasi programma che giri sul tuo sistema è un eseguibile. Persino un programma script è eseguito dall'interprete dello script, perciò è anche lui tecnicamente eseguito. Kommander può eseguire comandi proprio come con il terminale, anche se lo richiami dal menu. Così, se volessi, per esempio, che apra The GIMP dovresti derivare da un pulsante la stringa “gimp” e dovresti metterlo in un comando speciale come in questo caso: @exec(gimp). Come potrai vedere si aprirà The GIMP quando lo utilizzerai. Puoi persino eseguire “ls -l” ma ne vedresti l'output solamente se tu lo lanciassi da un terminale.
Il terzo caso è in effetti molto interessante. DCOP è un'abbreviazione per Protocollo di COmunicazione del Desktop di KDE ed è molto potente. Prosegui lanciando il programma kdcop per esplorarlo. Potrai rapidamente vedere che ogni applicazione di KDE che è stata progettata secondo gli standard ha le sue azioni enumerate in DCOP e quelle ben disegnate ne hanno proprio tante. Con DCOP puoi richiedere delle informazioni di tutti i tipi così come impostare i valori dei widget e molto altro. C'è una sezione sull'utilizzo di DCOP in questo manuale. Kommander può spedire messaggi DCOP a qualsiasi programma KDE così come può essere controllato attraverso DCOP. In realtà puoi spedire messaggi DCOP dalla linea di comando a tutti i programmi KDE. Perciò qual è il grande vantaggio? Il vantaggio è che se devi eseguire una grande quantità di comandi comincerai a realizzare che la linea di comando DCOP è adeguata solamente per eseguire brevi comandi, ma può causare ritardi se richiamata per esempio in un ciclo diverse centinaia di volte. Questo è il motivo per cui Kommander ha un comando speciale @dcop, perché è quasi 1000 volte più veloce. Dato che Kommander può spedire e ricevere messaggi DCOP, DCOP può essere utilizzato per programmare come uno script Kommander. Questo è il motivo per cui esiste anche un comando speciale DCOP locale, @ldcop, che ti permette di digitare molto di meno per lanciare un comando.
Sono questi tutti i concetti centrali di Kommander? No, ma dovrebbero aiutarti a comprendere il senso di come funziona così che quello che viene spiegato non ti sembri una lingua straniera. Ce n'è ancora qualcuno. I segnali e gli slot sono il mezzo attraverso cui Kommander gestisce gli eventi. Un evento in un programma significa in parole povere che “qualcosa è accaduto”, come la creazione di un widget o la modifica del suo testo. Questi cambiamenti “emettono segnali” e tu puoi connettere questi segnali ad uno slot ricevente che farà qualcosa quando l'evento accadrà. Uno degli utilizzi in Kommander è il fratello di Kommander Text, “Population Text”. Population Text popolerà un widget quando verrà chiamato. Proprio come in Kommander Text, Population Text può contenere stringhe o script.
Tutto questo dovrebbe fornirti i concetti di base per cominciare ad utilizzare Kommander. Cerchiamo di mantenere basso il numero di comandi Speciali e utilizziamo molto DCOP. L'idea è quella di mantenere la potenza di Kommander la più consistente e snella possibile. Scoprirai di potere incorporare qualsiasi linguaggio script in Kommander ovunque tu ne abbia bisogno e persino più linguaggi in una sola finestra di dialogo. Il resto delle informazioni in questo documento assumono che tu sia familiare con i concetti ed i termini presentati qui. Gli esempi ed i tutorial sono inoltre molto utili per comprendere che cosa possa essere fatto con Kommander.
L'editor è basato su Qt™ Designer, uno strumento per disegnare ed implementare interfacce utente create da Trolltech. Abbiamo modificato Qt™ Designer nei seguenti punti:
La sua interfaccia è molto più semplice
Costruito sui nostri widget
Aggiunta la capacità di impostare il Testo Kommander
Diverse altre modifiche superficiali
Se siete familiari con Qt™ Designer, l'utilizzo di Kommander Editor sarà banale.
Le barre degli strumenti contengono diversi pulsanti che forniscono un rapido accesso a diverse funzioni.
La Panoramica dei File mostra tutti i file. Utilizza il campo di ricerca per passare rapidamente da un file all'altro.
L'Esploratore di Oggetti fornisce una panoramica delle relazioni tra i widget in un modulo. È utile per selezionare i widget di un modulo con uno schema complesso.
Nell'Editor di Proprietà si può modificare il comportamento e l'aspetto di un widget.
Nell'Editor di Finestre di Dialogo puoi creare e modificare finestre di dialogo.
Crea una nuova finestra di dialogo
Sfoglia il file system per aprire una finestra di dialogo esistente
Chiude la finestra di dialogo attiva
Salva la finestra di dialogo attiva
Salva la finestra di dialogo attiva con un nuovo nome
Salva tutte le finestre di dialogo aperte
Lista rapida di parte degli ultimi file che hai aperto. Questa lista cambierà ogni volta che apri un file che non si trova al suo interno, facendo uscire per prima il più vecchio.
Chiude Kommander
Annulla l'ultima azione effettuata.
Ripete l'ultima azione annullata.
Taglia l'elemento corrente e depone il suo contenuto nella clipboard.
Copia l'elemento corrente nella clipboard.
Incolla il contenuto della clipboard alla posizione attuale del cursore.
Elimina l'elemento corrente.
Seleziona tutti gli elementi della finestra di dialogo corrente.
Verifica che tutti i tasti acceleratori siano usati solo una volta.
Visualizza una finestra per la modifica e la creazione degli slot e delle funzioni.
Visualizza la finestra di dialogo di visualizzazione e modifica delle connessioni.
Visualizza la finestra di dialogo delle impostazioni del modulo.
Visualizza le preferenze della finestra di dialogo.
Chiude la finestra di dialogo corrente.
Chiude tutte le finestre di dialogo.
Invoca il sistema di aiuto di KDE direttamente alle pagine del manuale di Kommander (questo documento).
Cambia il cursore del mouse in una freccia e un punto di domanda. Se fai clic su un oggetto all'interno di Kommander si aprirà una finestra di aiuto (se ne esiste una per quel particolare oggetto) che spiega la funzione dell'oggetto in questione.
Apre la finestra di segnalazione dei bug dove puoi segnalare un bug oppure esprimere un “desiderio”.
Mostra informazioni sulla versione e sull'autore.
Mostra la versione di KDE e altre informazioni di base.
L'esecutore, chiamato kmdr-executor, lancia gli script di Kommander. Carica il file .kmdr
e costruisce dinamicamente una finestra di dialogo completamente funzionante.
Gli sviluppatori C++ possono facilmente utilizzare la classe KmdrDialogInstace nei loro programmi C++ così che la funzionalità di esecuzione sia inclusa nelle loro applicazioni rendendo inutile il bisogno di lanciare un programma esecutore esterno. Per finestre di dialogo standard il carico della creazione delle finestre di dialogo è minimo ma la creazione dell'applicazione KDE potrebbe ritardare la finestra di dialogo per circa un secondo.
I widget sono i mattoni che costituiscono una finestra di dialogo di Kommander. Sono come qualsiasi altro widget nelle librerie Qt™ e KDE eccetto il fatto che possiedono alcune funzionalità aggiuntive che gli permettono di mantenere delle “associazioni di testo”. Il testo viene associato ad uno stato del widget o al suo slot di popolamento. Il numero di stati dipende dal widget. Se un widget possiede un singolo stato, quello stato è chiamato default.
Widget di testo bla bla
La finestra di dialogo possiede due stati speciali per il testo di Kommander: Initiate e Destroy. Questi vengono eseguiti quando la finestra di dialogo viene inizializzata e quando viene distrutta. Essi proteggono da quelli che vengono chiamati problemi di “corsa” durante l'apertura e significano che non devi richiedere nessuna speciale procedura alla chiusura per gestire le operazioni ausiliarie.
Un contenitore per organizzare pulsanti in un gruppo. Si può impostare un titolo opzionale utilizzando la proprietà title. La cornice può essere regolata tramite la proprietà lineWidth. Il gruppo di pulsanti può essere impostato in modalità esclusiva impostando a vero la proprietà exclusive. Ciò significa che quando si fa clic su un pulsante alternato tutti gli altri pulsanti alternati saranno deselezionati con l'eccezione dei pulsanti radio che sono sempre mutuamente esclusivi anche quando il gruppo è non-esclusivo. I pulsanti radio possono essere impostati a non-esclusivi utilizzando la proprietà radioButtonExclusive. (Non sono al momento sicuro che questa proprietà funzioni.)
ButtonGroup possiede un unico stato, default.
Il testo del widget di un ButtonGroup è l'associazione di tutti i testi dei pulsanti nell'ordine in cui appaiono all'interno del GruppoDiPulsanti.
Un pulsante che può essere marcato o meno. Può inoltre essere semi-marcato se la proprietà tristate è impostata a vero. L'etichetta associata alla CheckBox è impostata tramite la proprietà text. Attivando la proprietà checked la CheckBox sarà inizialmente marcata.
Una CheckBox ha 3 stati: checked, semichecked e unchecked.
Il testo del widget di una CheckBox è il valore della proprietà text.
Un pulsante che, al clic del mouse, esegue la proprio associazione di testo e quindi chiude la finestra di dialogo. L'etichetta del pulsante viene impostata con la proprietà text. L'output dell'associazione di testo sarà stampata sullo stdout se la proprietà writeStdout è vera. Il pulsante può essere l'azione di default della finestra di dialogo se la proprietà default è impostata a vero.
Il CloseButton possiede un unico stato, default.
Non c'è alcuna associazione del testo del widget in un CloseButton.
Una ComboBox è un widget di selezione che combina un pulsante ed un menu a cascata. Mostra la selezione corrente dell'utente da una lista di opzioni in uno spazio minimale. Gli elementi sono aggiunti alla lista utilizzando la finestra di edit. Se la proprietà editable è vera l'utente può inserire stringhe arbitrarie.
Una ComboBox possiede un unico stato, default.
Il testo del widget di una ComboBox è il testo dell'elemento selezionato.
Un pulsante che esegue, quando premuto, la sua associazione di testo. L'etichetta sul pulsante viene impostata tramite la proprietà text. L'output dell'associazione di testo viene stampato sullo stdout se la proprietà writeStdout è attiva. Il pulsante può rappresentare l'azione predefinita di una finestra di dialogo se la proprietà default è attiva.
Un ExecButton possiede un unico stato, default.
Non c'è un'associazione di testo del widget in un ExecButton.
Il widget FileChooser combina una LineEdit con un pulsante che, se premuto, presenterà all'utente una finestra di dialogo per la selezione di file/cartelle. Il file/cartella selezionata viene memorizzato nella LineEdit. Il tipo di FileChooser viene impostato con la proprietà selectionType. I tipi disponibili sono Open, Save e Directory. Si possono selezionare file/cartelle multiple se la proprietà selectionOpenMultiple è impostata a vero. Si può impostare una didascalia per il FileChooser con la proprietà selectionCaption. Questa verrà visualizzata come il titolo della finestra di dialogo. Se non viene specificata alcuna didascalia, verrà visualizzato come titolo il tipo di selezione. I file visualizzati nella finestra di dialogo possono essere limitati tramite la proprietà selectionFilter.
Un FileChooser possiede un unico stato, default.
Il testo del widget di un FileChooser è il testo contenuto nella LineEdit (il file scelto dall'utente).
Un widget contenitore di altri widget. La cornice può essere regolata con la proprietà lineWidth. Si può aggiungere un titolo impostando la proprietà title.
Un GroupBox possiede un unico stato, default.
Il testo del widget di un GroupBox è l'associazione del testo di ognuno dei widget che contiene. Le associazioni saranno nell'ordine in cui i widget appaiono all'interno del BoxGruppo.
Un widget LineEdit è un editor di testo su una singola riga. Permette all'utente di inserire e modificare una singola linea di testo. Il testo iniziale dell'editor può essere impostato tramite la proprietà text. Il widget può essere a sola lettura agendo sulla proprietà readOnly. Esistono tre modalità per questo widget: Normal, NoEcho e Password. La modalità viene impostata tramite la proprietà echoMode.
Una LineEdit possiede un unico stato, default.
Il testo del widget di una LineEdit è il testo contenuto nell'editor.
Un widget ListBox fornisce una lista di elementi selezionabili. Normalmente solamente un solo elemento o nessuno possono essere selezionati. Questo comportamento può essere cambiato con la proprietà selectionMode. Si aggiungono elementi alla ListBox utilizzando la finestra di edit.
Una ListBox possiede un unico stato, default.
Il testo del widget di una ListBox è l'insieme degli elementi nella ListBox. Per sapere quali sono gli elementi correntemente selezionati utilizza @selectWidgetText.
Questo widget è adesso attivato in Kommander. È funzionalmente identico al widget Albero, quindi puoi fare riferimento a quest ultimo per ulteriori informazioni.
Un widget semplice che contiene un'immagine o un'etichetta di testo. La pixmap da visualizzare viene impostata nella proprietà pixmap. Il testo viene impostato tramite la proprietà text. Solo una di queste proprietà può essere impostata contemporaneamente (Così credo: non sono, al momento, in grado di impostarle entrambe tramite l'editor). Se scaledContent è impostata a vero l'immagine verrà ridimensionata per adattarsi alle dimensioni del widget. Il formato del testo può essere impostato tramite la proprietà textFormat.
Questo widget non è abilitato in Kommander e non possiede quindi nessuno stato o testo del widget.
Un pulsante che può essere marcato o meno, utilizzato di solito in un ButtonGroup per avere scelte mutuamente esclusive. Si può impostare un'etichetta associata al pulsante tramite la proprietà text. Si può imporre che il pulsante venga inizialmente marcato impostando la proprietà checked a vero. Se più di un RadioButton in un ButtonGroup ha la proprietà checked impostata a vero, allora solamente l'ultimo pulsante marcato lo sarà.
Un RadioButton possiede due stati: checked e unchecked.
Non c'è un testo del widget associato ad un RadioButton.
Questo widget è un editor di testo che permette una formattazione del testo semplificata.
RichTextEditor possiede un unico stato, default.
Il testo del widget di un RichTextEditor è il testo contenuto nell'editor in formato testo arricchito. @selectedWidgetText restituisce il testo selezionato.
Un widget che permette all'utente di modificare un valore intero sia agendo sulle frecce in su e in giù che inserendo un valore nella casella. Si possono impostare i valori minimo e massimo del widget tramite le proprietà minValue e maxValue. La proprietà specialValueText viene utilizzata per impostare un valore di testo che sarà visualizzato al posto del valore minimo.
Questo widget possiede un unico stato, default.
Il testo del widget di una SpinBoxInt è l'intero correntemente visualizzato.
Un pulsante che, quando premuto, esegue un'altra finestra di dialogo di Kommander. La finestra di dialogo da eseguire viene impostata nella proprietà kmdrFile. Se la proprietà default è impostata a vero, la finestra di dialogo verrà eseguita se viene premuto invio quando la finestra di dialogo possiede il focus. Penso che puoi utilizzarla anche come un contenitore. Dovrò provare a sperimentare un po' di più.
Una SubDialog possiede un unico stato, default.
Il testo del widget di una SubDialog è il testo associato alla finestra di dialogo da eseguire.
Questo widget era progettato per contenere la finestra di dialogo, funzionalità che è stata deprecata dal nuovo concetto di progetto. Dovremmo mantenerla con @dialog()
con il suo testo di Kommander o rimuoverla? Così com è, non va bene.
Un widget che fornisce molteplici schede ognuna delle quali può contenere altri widget.
Un semplice editor multi-riga.
Un semplice widget che contiene un pezzo di testo. Questo widget ti permette anche di impostare una pixmap. OK, l'editor dice che sono entrambe QLabel. Perché abbiamo 2 widget che sembrano essere la stessa cosa ma con nomi differenti? - La correzione è pianificata in A7.
Sino ad Alpha 6 questo widget è parzialmente abilitato e può essere impostato tramite chiamate DCOP esterne.
Un widget che rappresenta una lista sotto forma di una struttura ad albero. Questo widget è, ora, dalla versione Alpha 6, completamente funzionale e permette l'aggiunta e la rimozione di elementi. Puoi aggiungere elementi figlio e dati multi-colonna. Il limite corrente è che non si possono modificare le colonne. Per aggiungere un figlio utilizza “/” come separatore. Per aggiungere dati su colonna utilizza il carattere escape “\t” tra le colonne.
I comandi speciali sono funzioni che vengono processate da Kommander. Sappi che fino a quando Kommander non avrà un parser completo tutti i comandi speciali saranno eseguiti prima che venga eseguito lo script. In molti casi questo non è un problema, ma talvolta sì.
@dcop(appId
, oggetto
, funzione
, argomenti
)
Esegue una chiamata a DCOP. @dcop(“kmail”, “KMailIface”, “checkMail()”, “”)
@dcopid
L'id DCOP del processo (kmdr-executor-@pid)
@dialog(finestra_di_dialogo
[,parametri
])
Richiama la finestra di dialogo di Kommander specificata. Le finestre di dialogo sono ricercate nella cartella delle finestre di dialogo e nella cartella corrente - in quest'ordine. Ciò mette in sospeso la chiamata all'esecutore ed imposta la cartella predefinita a quella in cui si trova l'applicazione di Kommander. I parametri possono essere passati nell'usuale maniera Unix o puoi passare dei parametri per nome come in “variabile=valore”. Puoi infine recuperare i parametri passati nell'ambiente globale. @global(variabile) ritornerebbe “valore”.
@env(variabileDiAmbiente
)
Viene espanso alla variabile d'ambiente specificata. @env(PWD) viene espanso a $PWD. Ricorda che “$” è parte della sintassi shell e non dovrebbe essere utilizzato.
@exec(comando
)
restituisce l'output dell'esecuzione del comando specificato. @exec(ls -l).
@execBegin ... @execEnd
come in @exec
, ma supporta gli script shebang (cioè che cominciano, ad esempio, con #!/bin/sh) e su più righe. Questo è utile in diversi linguaggi di scripting sia dichiarandoli o utilizzando una shebang.
@execBegin(php)
@execBegin
#!/usr/bin/php
Il primo utilizza il nome dell'eseguibile PHP. Kommander cerca nel PATH php e se non lo trova verifica se è registrato con Kommander in una posizione al di fuori del tuo path. Se non è così notifica all'utente che non può essere trovato. Il secondo esempio utilizza la classica “shebang” che può portare sia benefici che alcuni problemi. È utile ad esempio, se possiedi una copia beta di PHP5 in /usr/local/bin
che non deve essere trovata perché il percorso di ricerca è /usr/bin
. Se, però, distribuisce la finestra di dialogo a qualcuno che ha messo PHP in /usr/local/bin
questo non verrà trovato quando verrà usata la shebang. Perciò utilizzate le shebang con cautela. È invece raccomandato indicare l'eseguibile se condividete i file.
@global(variabile
)
viene espanso nel valore della variabile globale specificata.
@null
Restituisce null. Ora che Kommander verifica i widget vuoti durante l'esecuzione questo comando preverrà la segnalazione errata di errori nel caso della non impostazione dello stato di un widget.
@parentPid
Il PID del processo genitore.
@pid
Il PID del processo.
@readSetting(chiave
, valorePredefinito
)
legge un valore da kommanderrc
@selectedWidgetText
il contenuto selezionato di un widget che può visualizzare più di un valore, come i widget lista
@setGlobal(variabile
, valore
)
Imposta la variabile globale al valore specificato.
@widgetText
il contenuto di un widget
@writeSetting(chiave
, valore
)
scrive il valore in kommanderrc
@Array.values(array
)
Restituisce una lista separata da EOL di tutti i valori contenuti nell'array. Può essere utilizzato per scorrere attraverso l'array.
@Array.keys(array
)
Restituisce un elenco separato da fine riga (EOL) di tutte le chiavi del vettore.
@Array.setValue(array
, chiave
, valore
)
Imposta una chiave ed un valore per un elemento di un array. Se l'array non esiste, viene creato.
@Array.clear(array
)
Rimuove tutti gli elementi dal vettore.
@Array.count(array
)
Restituisce il numero di elementi nel vettore.
@Array.value(array
,chiave
)
Restituisce il valore associato alla chiave indicata.
@Array.remove(array
,chiave
)
Rimuove l'elemento con la chiave indicata dall'array.
@Array.fromString(array
,stringa
)
Aggiunge tutti gli elementi nella stringa nell'array. La stringa dovrebbe essere nel formato chiave\tvalore\n."
@Array.toString(array
,stringa
)
Restituisce tutti gli elementi nell'array nel formato chiave\t\n."
@File.read(file
)
Restituisce il contenuto del file indicato.
@File.write(file
stringa
)
Scrive la stringa data su un file.
@File.append(file
stringa
)
Aggiunge la stringa data alla fine del file.
@String.length(stringa
)
Restituisce il numero di caratteri nella stringa.
@String.contains(stringa
,sottostringa
)
Controlla se la stringa contiene la sottostringa data.
@String.find(stringa
)
Restituisce la posizione di una sottostringa nella stringa, o -1 se non trovata."
Questo comando avrà un altro parametro intero opzionale indicante la posizione iniziale da cui cercare nella versione Alpha 6.
@String.left(stringa
, int
)
Restituisce i primi n caratteri della stringa.
@String.right(stringa
, int
)
Restituisce gli ultimi n caratteri della stringa.
@String.mid(stringa
, int inizio
, int fine
)
Restituisce una sottostringa della stringa, iniziando dalla posizione data.
@String.remove(stringa
, sottostringa
)
Rimuove tutte le occorrenze di una data sottostringa.
@String.replace(stringa
, sottostringa_trova
, sottostringa_sostituisci
)
Sostituisce tutte le occorrenze di una data sottostringa con un'altra fornita.
@String.upper(stringa
)
Converte la stringa in maiuscolo.
@String.lower(stringa
)
Converte la stringa in minuscolo.
@String.compare(stringa
, stringa
)
Confronta due stringhe. Restituisce 0 se sono uguali, -1 se la prima è più bassa, 1 se la prima è più alta
@String.isEmpty(stringa
)
Controlla se la stringa è vuota.
@String.isNumber(stringa
)
Controlla se la stringa è un numero valido.
DCOP può essere richiamato in Kommander in diversi modi. Il primo metodo è attraverso la console
dcop kmdr-executor-@pid KommanderIf changeWidgetText myWidget “new text”
Si presume che tu ti trovi in un file Kommander ed hai accesso al comando speciale @pid che contiene l'ID del processo. Nella pratica è più semplice sostituire “kmdr-executor-@pid” con @dcopid. Per modificare la finestra di Kommander, puoi, comunque, utilizzare questa sintassi (ovviamente senza i comandi speciali) dalla linea di comando o da qualsiasi altro script esterno.
Dato che Kommander non possiede un analizzatore completo nel sua fase Alpha, usare il comando DCOP interno, molto più rapido, dalla finestra di un'altra applicazione (la console DCOP è molto lenta) è più complicato perché devi fornire molte informazioni, incluso un prototipo della chiamata. La chiamata di prima diventerebbe:
@dcop(@dcopid, KommanderIf, “enableWidget(QString, bool)”, Widget, true)
Al momento in cui questo manuale è stato scritto dovresti sapere che annidare chiamate DCOP all'interno di strutture di linguaggi di script (come bash) impone l'utilizzo dei metodi di chiamata da console. Se utilizzi il DCOP interno tutti i comandi speciali di Kommander saranno eseguiti prima dello script.
Esiste una nuova modalità semplificata di utilizzare DCOP all'interno di Kommander utilizzando una sintassi ad oggetti. Supponiamo che tu voglia cambiare il testo in un widget chiamato @LineEdit1. Si scriverebbe così.
@LineEdit1.changeWidgetText(New text)
Come puoi vedere la nuova sintassi è molto semplice quanto consistente visivamente con i gruppi di funzioni. Tutti comandi DCOP referenziati qui utilizzeranno la nuova sintassi ad oggetti indicata prima. Per favore, nota che se stai facendo riferimento ad un widget che utilizza DCOP da un'alta finestra o da un'altra applicazione, il primo parametro sarà sempre il nome del widget. Sono qui elencate tutte le funzioni a partire dal secondo parametro.
Restituisce il valore della variabile globale specificata. Quando uno script viene lanciato all'interno di una finestra di Kommander qualsiasi variabile (non globale) impostata in quello script cesserà di esistere una volta terminato lo script e perciò non sarà più disponibile ai processi degli altri script o in una nuova istanza del processo chiamante. Nel “contesto” globale la variabile esisterà per ogni processo od ogni finestra fino al momento in cui quella viene chiusa. Puoi modificare queste variabili in ogni momento con una nuova chiamata a @setGlobal
.
Crea una variabile che è globale per la finestra del processo e le assegna un valore. Questo valore può essere recuperato con global(QString nomeVariabile) o reimpostato.
Questo comando dovrebbe venir rinominato in setWidgetText ed il suo nome verrà probabilmente deprecato. Esso rimuove il testo visualizzato nel widget sostituendolo con il testo fornito.
Abilita o disabilita un widget.
Restituisce il testo associato al particolare widget. Questo non è lo stesso di quello visualizzato. Verrebbe altrimenti utilizzato con “@widgetText” o con il testo e/o script utilizzato per arrivare al valore visualizzato.
Imposta la stringa predefinita di Testo di Kommander. Questa è tipicamente impostata a “@widgetText” per visualizzare ciò che viene inserito nel widget. È raro che tu ne abbia bisogno, in ogni caso c'è. Viene applicato a tutti i widget che contengono informazioni.
Aggiunge un elemento ad un widget ListBox all'indice specificato. L'indice della lista comincia da zero. Per aggiungere alla fine della lista utilizzare -1.
Aggiunge una lista di stringhe in una sola volta. La lista dovrebbe essere delimitata da EOL (\n - a-capo). Questo comando è comodo perché puoi facilmente utilizzare bash per procurarti la lista. Utilizzando, ad esempio, @exec(ls -l ~/projects | grep kmdr) al posto degli elementi, restituirà l'elenco dei file di Kommander nella cartella dei tuoi progetti. L'indice della lista comincia da zero. Utilizza -1 per aggiungere alla fine della lista.
addUniqueItem aggiungerà un elemento alla fine della lista solo se non è già presente.
Rimuove tutti gli elementi.
Rimuove tutti gli elementi a partire dall'indice specificato.
Restituisce il testo dell'elemento all'indice specificato.
Imposta l'elemento corrente (o selezionato) all'indice specificato. Si applica ai widget ListBox e ComboBox.
Attiva/disattiva i widget CheckBox o RadioButton.
Con Kommander puoi creare nuovi widget non basati su Kommander stesso in maniera semplice. L'approccio è quello di derivare la tua nuova classe di Kommander dal widget Qt™/KDE che desideri integrare in Kommander assieme alla classe KommanderWidget. Fare l'override dei metodi di questa classe dà al widget di Kommander le proprie funzionalità.
La maggior parte del codice di un widget di Kommander è solo codice modello. Perciò puoi usare la finestra di dialogo widgetgenerator.kmdr di Kommander per generare la maggior parte del codice del widget di Kommander per te. Tutto quello che devi fare è riempire le parti importanti relative al tuo widget come qualsiasi informazione di stato, testo del widget, ecc.
Per esempio, supponiamo di voler creare un nuovo widget di tipo casella di testo per Kommander basato sul widget KLineEdit di KDE. Utilizzando la finestra di dialogo di generazione dei widget, otteniamo qualcosa di simile a quanto contenuto in questo file header:
Mostra come utilizzare le chiamate DCOP global e setGlobal per fornire le variabili globali agli script
Mostra come utilizzare sia le chiamate DCOP locali che esterne per comunicare con applicazioni esterne.
Mostra come utilizzare le connessioni/slot per gestire gli eventi. Sia gli slot di popolamento che standard sono utilizzati.
Mostra come utilizzare le funzioni @readSetting e @writeSetting per scrivere/ripristinare il contenuto dei widget. Mostra, inoltre, come utilizzare lo slot populate() per inizializzare il contenuto dei widget.
Mostra come puoi aggiungere del testo in TextEdit e come puoi utilizzarlo per visualizzare del testo formattato.
Mostra come puoi passare dei parametri alla finestra di dialogo di Kommander attraverso la linea di comando. Mostra, inoltre, come modificare la lista contenuto ed il pulsante testo.
Mostra come utilizzare la “inizializzazione” per “distruggere” gli script di finestre di dialogo principale per inizializzare e memorizzare delle impostazioni.
La squadra di Sviluppo di Kommander
(consume AT optusnet.com.au)
Sviluppo e documentazione
(tik AT acm.org)
Documentazione
(sequitur AT kde.org)
Manager del progetto e documentazione
(amantia AT kde.org)
Sviluppatore
(mrudolf AT kdewebdev.org)
Sviluppatore
Kommander © 2004 la squadra di Sviluppo di Kommander.
Manuale dell'Utente di Kommander © 2004 la squadra di Sviluppo di Kommander.
Samuele Kaplun(kaplun AT aliceposta.it)
Questa documentazione è concessa in licenza sotto i termini della GNU Free Documentation License.
Questo programma è concesso in licenza sotto i termini della GNU General Public License.
Kommander fa parte del progetto KDE http://www.kde.org/.
Puoi trovare Kommander nel pacchetto kdewebdev all'indirizzo ftp://ftp.kde.org/pub/kde/, il sito FTP principale del progetto KDE.
Per compilare e installare Kommander sul tuo sistema, immetti i seguenti comandi nella directory di base della distribuzione di Kommander:
%
./configure
%
make
%
make install
Dato che Kommander usa autoconf e automake, non dovresti incontrare dei problemi per compilarlo. Se si verificasse qualche problema, per piacere segnalalo alle mailing list di KDE.
Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team