# Basi di &kommander;

## Concetti

&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 unComando 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ò:

1. Passare le stringhe al programma chiamante attraverso lo stdout.

2. Richiamare programmi eseguibili.

3. 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 &quantaplus; 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 &quantaplus; se sono state chiamate da &quantaplus;. 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 &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à &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;.

&editor;

## L'Esecutore

L'esecutore, chiamato kmdr-executor, lancia gli script di &kommander;. Carica il file `.kmdr` e costruisce dinamicamente una finestra di dialogo completamente funzionante.

### L'Esecutore per i Programmatori

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.

## Creare una Finestra di Dialogo