1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
<?xml version="1.0" encoding="UTF-8" ?>
<chapter id="kmdr-basics">
<chapterinfo>
<title
>Grundlæggende &kommander;</title>
<authorgroup>
<author
><firstname
>Tamara</firstname
> <surname
>King</surname
> <affiliation
><address
> <email
>[email protected]</email>
</address
></affiliation>
</author>
<author
><firstname
>Eric</firstname
> <surname
>Laffoon</surname
> <affiliation
><address
> <email
>[email protected]</email>
</address
></affiliation>
</author>
&rune.laursen.role;
</authorgroup>
</chapterinfo>
<title
>Grundlæggende &kommander;</title>
<!-- This chapter should tell the user how to use your app. You should use as
many sections (Chapter, Sect1, Sect3, etc...) as is necessary to fully document
your application. -->
<sect1 id="concepts">
<title
>Koncepter</title>
<para
>&kommander; blev oprindeligt designet omkring et simpelt koncept der har vist sig næsten revolutionerende blandt visuelle designværktøjer. Typisk tillader disse værktøjer at man kan oprette dialoger og måske endda hovedvindue-grænseflader. Hovedvindue-grænseflader er naturligvis et programs hovedgrænseflade der typisk indeholder menuer, værktøjslinjer, statuslinje og programarealet. Dialoger er børnevinduerne som typisk ikke har menuer og således navngivet fordi deres formål er at <quote
>have en dialog</quote
> eller udveksle information mellem dig og hovedprogrammet. Elementerne i en dialog kaldes <quote
>kontroller</quote
> og du kobler dit program til disse kontroller. &kommander; er anderledes pga. sin non-programmatiske natur i denne henseende. Det bruger konceptet om at associere tekst med kontrollerne på dialogen. Til at begynde med kaldtes dette <quote
>Associeret tekst</quote
> men kaldes nu <quote
>&kommander; tekst</quote
>. Kontroller i &kommander;-dialoger kan indeholde indholdet af andre kontroller gennem en reference og en kontrol kan referere sit eget indhold vha. en <quote
>Speciel</quote
> som ser således ud: @kontrolTekst. Specielle er kommandoer med specielle betydning i &kommander;. Så hvis du har oprettet en dialog med to linjeEditorkontroller og navngivet den første <quote
>Fornavn</quote
> og den anden <quote
>Efternavn</quote
>, kan du oprette en knap og sætte dens &kommander;tekst til <quote
>Mit navn er @Fornavn @Efternavn</quote
>. Du vil være nødt til at sætte @kontrolTekst i for- og efternavnskontrollerne, husker du? Vi må fortælle &kommander; at referere til teksten i dem. Du kan køre dette fra en <application
>Konsol</application
> og den vil så udskrive strengen for dig. Så den vil referere fornavnet sådan her: @Fornavn -> hent kontrollen med navnet Fornavn(@Fornavn) -> @kontrolTekst -> hent indholdet af linjeEditorkontrollen. Så i dette tilfælde returnerer @Fornavn <quote
>Eric</quote
>: @fornavn -> @kontrolTekst -> <quote
>Eric</quote
>. </para>
<para
>Dette er kernen af &kommander;. Det er hvad du kan gøre med disse funktionaliteter der gør det interessant. For det første er det værd at bide mærke i, at sammenlignet med den almindelige fremgangsmåde i et sprogbaseret værktøj, er der ikke behov for programmeringsudtryk i &kommander;, for at definere disse operationer. Dette gør &kommander; hurtig for udviklere. For slutbrugere er det meget simplere end at lære sprogkontruktioner. For alle betyder det at man kan fokusere på opgaven og ikke hele tiden sidde med referencedokumentationen i hånden. I starten, når folk introduceres for et værktøj som &kommander;, er det første spørgsmål altid <quote
>Hvad kan jeg bruge sådan et lækkert værktøj til?</quote
> Det viser sig at strengmanipulation bruges sådan ca. overalt. </para>
<para
>Så hvad kan &kommander;? Her er en liste kogt ned til de mest grundlæggende funktioner. &kommander; kan: </para>
<orderedlist>
<listitem
><para
>Videregive strenge til et kaldende program gennem stdout.</para
></listitem>
<listitem
><para
>Kald eksekverbare programmer.</para
></listitem>
<listitem
><para
>Brug &DCOP; for at kommunikere med &kde;-programmer.</para
></listitem>
</orderedlist>
<para
>Hvis du ikke er programmør, vil du måske gerne have en forklaring for lægmand. I den første, hvis du starter &kommander; fra en konsol, så er konsol det kaldende program. Det er et forældre barn forhold der. At sende en besked til en konsol gøre med barnets standardudskrift (sdtout), det hedder sådan fordi der også er fejludskrift. Dette er interessant fordi nogle programmer som &quantaplus; beruger stdout for at modtage information fra programmer de starter. Så &kommander; dialoger kan udskrive deres tekststrenge direkte i &quantaplus;' editor hvis de kaldes fra &quantaplus; Det betyder at &kommander;-dialoger kan være brugbare udvidelser til programmer. </para>
<para
>Det andet tilfælde er når man kalder en eksekverbar. Et hvilket som helst program der kører på dit system er eksekverbart. Selv et scriptprogram køres af scriptets fortolker, så teknisk set eksekveres det også. &kommander; kan køre kommandoer ligesom konsollen, selv hvis du kører det fra menuen. Hvis du f.eks. ville åbne &GIMP; ville du have en knap der afleder strengen <quote
>gimp</quote
> og putte den i en speciel på denne måde: @exec(gimp). På ingen tid vil du se &GIMP; åbnes når du bruger dette. Du kan også exec <quote
>ls -l</quote
>, men du ville kun kunne se uddata når du kører det i en konsol. </para>
<para
>Det tredje tilfælde er meget interessant. &DCOP; er kort for &kde;'s <emphasis
> D</emphasis
>esktop<emphasis
>C</emphasis
>ommunication<emphasis
>P</emphasis
>rotocol og det er meget kraftigt.Prøv at køre <application
>kdcop</application
>-programmet og kig lidt på det. Du finder hurtigt ud af at i alle &kde;programmer der er opbygget efter standarderne, har ting der sker med &DCOP; og i de veldesignede sker der rigtig meget. Med &DCOP; kan du sspørge efter al mulig information såvel som at sætte værdier for kontroller og meget andet. Der er et afsnit om at bruge &DCOP; i denne manual. &kommander; kan sende &DCOP; til et hvilket som helst &kde;-program, såvel som at blive kontrolleret af &DCOP;. Faktisk kan du sende &DCOP; fra kommandolinjen til et hvilket som helst &kde;-program. Så hvad er al den snak til for? Sagen er at hvis du vil udføre mange kommandoer, finder du hurtigt ud af at kommandolinjen og &DCOP; er fine til korte kommandoer, men kan give forsinkelser når det f.eks. kaldes fra en løkke et par hundrede gange. Det er derfor &kommander; har en @dcop speciel, fordi den er ca. 1000 gange hurtigere. Fordi &kommander; kan sende og modtage &DCOP;, kan &DCOP; bruges til at scripte &kommander;. Det er også derfor vi har en lokal &DCOP;-speciel @ldcop, som tillader dig at skrive meget mindre for at bruge en kommando. </para>
<para
>Er dette er alle kernekoncepterne i &kommander;? Nej men det burde være en hjælp til dig for at finde ud af hvordan det virker, så det som vi har beskrevet ikke lyder som rent volapyk. Der er et par koncepter mere. &kommander; bruger signaler og slot til at håndtere begivenheder. En begivenhed i et program betyder sådan set bare <quote
>der skete noget</quote
> som oprettelsen af en kontrol eller en ændring af noget tekst. Disse ændringer <quote
>udsender signaler</quote
> og du kan forbinde disse signaler til en modtagende slot som så gør et eller andet når begivenheden sker.En måde at bruge &kommander; er søsteren til &kommander;s Tekst, <quote
>BefolkningsTekst</quote
> BefolkningsTekst, befolker en kontrol når den kaldes. Ligesom &kommander;Tekst, kan BefolkningsTekst indeholde tekststrenge eller scripter. </para>
<para
>Nu har du fået lært de simple ting i &kommander; så du kn komme i gang. Vi forsøger at holdet antallet af specielle på et lavt niveau og vi bruger &DCOP; rigtig meget. Idéen er at vi vil holde &kommander;s fordele så konsistente og strømlinede som muligt. Du vil opdage at du kan indarbejde et hvilket som helst scriptsprog i &kommander; når behovet opstår og endda flere scriptsprog i en dialog. Resten af informtionen i dette dokument antager at du er bekendt med de her præsenterede koncepter og udtryk. Eksemplerne og gennemgangene er også meget brugbare når man skal forstå hvad &kommander; kan. </para>
</sect1>
&editor; <sect1 id="executor">
<title
>Eksekutoren</title>
<para
>Eksekutoren der hedder <application
>kmdr-executor</application
>, kører &kommander; scripter. Den indlæser <literal role="extension"
>kmdr</literal
>-filer og producerer dynamisk en fuldt funktionel dialog. </para>
<sect2 id="executor-for-programmers">
<title
>Eksekutor for programmører</title>
<para
>C++-udviklere kan nemt bruge KmdrDialogInstance-klassen i deres C++-programmer, så eksekveringsfunktionaliteten er indlejret i deres program. Dette gør det overflødigt at køre et eksternt eksekveringsprogram. For almindelige dialoger, er omkostningerne ved dialogoprettelsen minimal, men oprettelsen af &kde;-applikationen kan medføre at dialogen forsinkes en smule. </para>
</sect2>
</sect1>
<sect1 id="create-dialog">
<title
>At oprette en dialog</title>
<para
></para>
</sect1>
</chapter>
|