# &kommander;i põhitõed

## Kontseptsioonid

&kommander; sai alguse visuaalse disaini tööriistade maailmas mõneti revolutsiooniliseks osutunud lihtsat kontseptsioonist. Tavaliselt võimaldavad need tööriistad luua dialooge, vahel ka peaakna liidest. Peaakna liides on aga juba koht, kus reeglina esinevad menüüd, tööriistaribad, olekuriba ja rakendus ise ka muidugi. Dialoogid on alamaknad, millel tavaliselt ei ole ei menüüd, tööriistariba, olekuriba ega ka mingit 'rakenduseala', ning kannavad sellist nime seepärast, et nende eesmärk on pidada dialoogi või vahendada sulle mingit mingit põhirakenduse edastatavat infot. Dialoogi elemente nimetatakse vidinateks ja sul tuleb oma programm nende vidinatega siduda. &kommander; läheneb asjale aga hoopis teisest küljest. Me kasutame siin dialoogis vidinatega seostatud teksti põhimõtet. Algselt kandiski see nimetust seostatud tekst, nüüd nimetame seda lihtsalt &kommander;i tekstiks. Vidinad &kommander;i dialoogides võivad sisaldada viidetena teiste vidinate sisu, samuti võivad vidinad lasta oma sisu viidata spetsiaalsete eride abil, mille näiteks võib olla @widgetText. Erid on &kommander;i spetsiaalse tähendusega käsud. Kui oled näiteks loonud dialoogi kahe tekstikastiga ning andnud neist esimesele nimeks Eesnimi ja teisele Perekonnanimi, võid luua nupu ja määrata selle &kommander;i tekstiks Minu nimi on @Eesnimi @Perekonnanimi. Sul tuleb eesnime- ja perekonnanimevidinas @widgetText. Oli ju arusaadav? Me peame andma &kommander;ile korralduse viidata neis olevale tekstile. Siis võid selle käivitada näiteks Konsoolil ja peaksid nägema väljundina just seda stringi. Eesnime viitame siis nii: @Eesnimi -> hangib vidina nimega Eesnimi(@Eesnimi) -> @widgetText -> hangib tekstikasti vidina sisu. Nii et kui @Eesnimi tagastab Marek, siis @Eesnimi -> @widgetText -> Marek.

See on &kommander; lihtne ja selge tuum. Aga huvitavaks läheb asi siis, kui sa sellega midagi ette võtad. Kõigepealt tasuks märkida, et tavalistest programmeerimiskeeltepõhistest tööriistadest erinevalt ei vaja &kommander; nende operatsioonide defineerimiseks programmeerimislauseid. See muudab &kommander;i arendajatele väga mugavaks vahendiks. Lõppkasutajale on see märksa lihtsam kui programmeerimiskeele reegleid pähe tampida. Ja kõigile tähendab see seda, et saab keskenduda oma ülesandele, ilma et peaks kogu aeg käsiraamatust järele vaatama, kas asi ikka sai õigesti kirja. Tavaliselt küsivad inimesed &kommander;it või mõnda muud taolist töövahendit nähes: Milleks seda kasutada saab? Nagu selgub, on stringide käsitlemisega tegemist tegelikult sisuliselt kõikjal.

Mida &kommander; suudab siis teha? Toome siin ära vaid põhilised operatsioonid. &kommander; suudab:

1. Edastada stringid väljakutsutavale programmile standardväljundi (stdout) kaudu.

2. Kutsuda välja käivitatava programmi.

3. Suhelda &DCOP; vahendusel &kde; programmidega.

Kui sa ei ole just programmeerija, soovid vahest asja ka nii-öelda inimlikus keeles teada saada. Esiteks: kui käivitad &kommander;i konsoolist, on konsool väljakutset esitav programm. Siin tekib ema-lapse ehk siis eellase-järglase suhe. Konsoolile saadetakse sõnum järglasprogrammi standardväljundi (stdout) vahendusel, mida nimetatakse nii sellepärast, et on olemas ka veaväljund. See pakub huvi seepärast. et mitmed programmid, näiteks &quantaplus;, kasutavad standardväljundit info hankimiseks programmidelt, mis nende seest on käivitatud. Seega võivad &kommander;i dialoogid saata oma tekstistringid otse &quantaplus; redaktorisse, kui neid on välja kutsutud &quantaplus;-ist. See tähendab, et &kommander;i dialoogid sobivad väga hästi programmide laienditeks.

Teine juhtum on käivitatava faili väljakutsumine. Kõik sinu süsteemis töötavad programmid on iseenesest käivitatavad failid. Isegi skripti paneb käima skripti interpretaator, nii et tehniliselt võttes ka see käivitatakse. &kommander; võib käske käivitada sama edukalt, kui seda saab teha konsoolilt, kuigi siin võid sa seda teha lausa menüüst. Kui näiteks soovid avada &GIMP;-i, peab sul olema nupp, sellel string gimp ning see tuleb asetada erisse, näiteks @exec(gimp). Ja seda kasutades &GIMP; ka tõepoolest avaneb. Kasutada võib ka exec ls -l, aga väljundit näed ainult siis, kui töötad konsoolil.

Kolmas juhtum on veelgi huvitavam. &DCOP; tähendab lühendatult &kde; töölaua kommunikatsiooniprotokolli (Desktop COmmunication Protocol) ja on üks äraütlemata võimas vahend. Käivita programm dcop ja tee sellega veidi tutuvust. Saad peagi selgeks, et kõik &kde; standardite kohaselt loodud rakendused kasutavad vähemalt mingil määral &DCOP;-i ja mis on eriti hästi loodud, need kohe päris palju. &DCOP; lubab esitada mis tahes infopäringuid, määrata vidinate väärtusi ja nii edasi ja nii edasi. Käesolevas käsiraamatus on ka omaette &DCOP;-ile pühendatud osa. &kommander; võib saata &DCOP; väljakutse igale &kde; programmile ning vastupidi - &DCOP;-i abil saab seda juhtida teistest programmidest. Õigupoolest saab käsurealt &DCOP; väljakutse saata suvalisele &kde; programmile. Mis siis meie juhtumi puhul eriline on? Eriline on see, et kui soovid anda terve hulga käske, siis käsurida kasutades näed peagi, et &DCOP; sobib palju paremini lühikeste käskude jaoks, võib aga tükk aega viivitada, kui peab näiteks sadu kordi mingit silmust läbima. Seepärast kasutab &kommander; eri @dcop, mis on ligikaudu 1000 korda kiirem! Et &kommander; võib &DCOP; väljakutseid nii saata kui saada, võib &DCOP;-i kasutada &kommander;i skriptideks. Seepärast on meil ka kohalik &DCOP; eri @ldcop, mis võimaldab käsku anda päris vähese kirjutamisvaevaga.

Siinräägitu ei ole kaugeltki veel kõik isegi mitte &kommander; põhiomaduste kohta, aga juba sellest peaks piisama mõistmaks, kuidas asi töötab, et edaspidine jutt ei tunduks täiesti arusaamatuna. Rakendus pakub mõistagi palju enam. Signaalide ja pesadega käsitleb &kommander; sündmusi. Sündmus tähendab programmis põhimõtteliselt seda, et midagi juhtus - näiteks loodi vidin või muutus tekst. Need muudatused väljastavad signaali, sina aga võid signaalid ühendada pesadega, mis võtavad omakorda midagi ette, kui toimub sündmus. Üks selle kasutamisviise &kommander;is on &kommander;i teksti järglane populatsioonitekst. Populatsioonitekst populeerib ehk asustab väljakutse peale vidina. Nagu &kommander;i tekst, võib ka populatsioonitekst sisaldada tekstistringe või skripte.

See peaks andma nüüd küll mingi esialgse aimu &kommander;ist. Me oleme püüdnud hoida eride arvu vähesena ja kasutada ohtralt ära &DCOP;-i võimalusi. Nii on meil võimalik hoida &kommander; võimalikult ühtse ja kompaktsena. Sa avastad kindlasti, et &kommander;is saab tegelikult kasutada mis tahes skriptikeelt ja ühes dialoogis võib neid isegi mitu korraga kasutusele olla. Edaspidi oletame, et sa oled siintoodud konptseptsioonide ja mõisteteta juba tutvunud. Lisaks sellele aitavad ka näited ja õppematerjalid mõista täielikumalt &kommander;i võimalusi.

&editor;

## Executor

Executor ehk kmdr-executor käivitab &kommander;i skriptid. See laeb `.kmdr`-failid ning tekitab dünaamiliselt täisfunktsionaalse dialoogi.

### Executor programmeerijatele

C++ arendajad võivad klassi KmdrDialogInstance kasutada ära oma C++ programmides, mis lubab põimida käivitamisfunktsiooni otse rakendusse ilma vajaduseta käivitada välist käivitamisprogrammi. Standardse dialoogi korral on dialoogi loomise kulu minimaalne, kuid näiteks &kde; rakenduse loomisega võib muidugi lausa sekund aega minna.

## Dialoogi loomine