summaryrefslogtreecommitdiffstats
path: root/tde-i18n-da/docs/tdevelop/kde_app_devel/index.docbook
diff options
context:
space:
mode:
Diffstat (limited to 'tde-i18n-da/docs/tdevelop/kde_app_devel/index.docbook')
-rw-r--r--tde-i18n-da/docs/tdevelop/kde_app_devel/index.docbook44
1 files changed, 22 insertions, 22 deletions
diff --git a/tde-i18n-da/docs/tdevelop/kde_app_devel/index.docbook b/tde-i18n-da/docs/tdevelop/kde_app_devel/index.docbook
index 323a428a805..47ae77a6a71 100644
--- a/tde-i18n-da/docs/tdevelop/kde_app_devel/index.docbook
+++ b/tde-i18n-da/docs/tdevelop/kde_app_devel/index.docbook
@@ -160,15 +160,15 @@ return a.exec();
</orderedlist>
</para>
<para>Det andet objekt i vort program er trykknappen, en instans af klassen <classname>QPushButton</classname>. Af de to konstruktorer der er til at oprette klassen, bruger vi den anden. Den tager en tekst, som er tekstindholdet i knappen. Her er det strengen "Hello world!". Derefter kalder vi metoden <methodname>resize()</methodname> for at ændre størrelse på knappen ifølge dens indhold. Knappen skal være større for at gøre strengen fuldstændigt synlig. </para>
-<para>Men hvad gælder for metoden <methodname>show()</methodname>? Nu mærker du, at som de fleste andre grafiske komponenter, er <classname>QPushButton</classname> baseret på enkelt arv. Dokumentationen siger, Arver <classname>QButton</classname>. Følg linket til klassen <classname>QButton</classname>. Det viser mange andre kontroller som arves af <classname>QPushButton</classname>, som vi senere bruger til at forklare signal/slot-mekanismen. Under alle omstændigheder er metoden <methodname>show()</methodname> ikke på listen, og derfor skal den være en metode som også sørges for via arv. Klassen som <classname>QButton</classname> arver er <classname>QWidget</classname>. Følg kun linket igen, så ser du en hel mængde metoder som klassen QWidget sørger for, inklusive metoden <methodname>show()</methodname>. Nu forstår vi hvad der blev gjort i eksemplet med knappen: <orderedlist>
+<para>Men hvad gælder for metoden <methodname>show()</methodname>? Nu mærker du, at som de fleste andre grafiske komponenter, er <classname>QPushButton</classname> baseret på enkelt arv. Dokumentationen siger, Arver <classname>QButton</classname>. Følg linket til klassen <classname>QButton</classname>. Det viser mange andre kontroller som arves af <classname>QPushButton</classname>, som vi senere bruger til at forklare signal/slot-mekanismen. Under alle omstændigheder er metoden <methodname>show()</methodname> ikke på listen, og derfor skal den være en metode som også sørges for via arv. Klassen som <classname>QButton</classname> arver er <classname>TQWidget</classname>. Følg kun linket igen, så ser du en hel mængde metoder som klassen TQWidget sørger for, inklusive metoden <methodname>show()</methodname>. Nu forstår vi hvad der blev gjort i eksemplet med knappen: <orderedlist>
<listitem><para>Lav en instans af <classname>QPushButton</classname>, og brug den anden konstruktor til at angive knappens tekst</para></listitem>
<listitem><para>Ændr størrelsen på kontrollen til dens indhold</para></listitem>
<listitem><para>Sæt kontrollen som hovedkontrol instansen af <classname>QApplication</classname></para></listitem>
-<listitem><para>Fortæl den grafiske kontrol at den skal vises på skærmen ved at kalde <methodname>show()</methodname>, en metode som blev arvet fra <classname>QWidget</classname></para></listitem>
+<listitem><para>Fortæl den grafiske kontrol at den skal vises på skærmen ved at kalde <methodname>show()</methodname>, en metode som blev arvet fra <classname>TQWidget</classname></para></listitem>
</orderedlist>
</para>
<para>Efter at have kaldet metoden <methodname>exec()</methodname>, er programmet synligt for brugeren, og viser et vindue med knappen "Hello world!". Bemærk at programmer med grafiske grænseflader opfører sig noget anderledes sammenlignet med procedurebaserede program. Det vigtigste er at programmet går ind i en såkaldt "hovedbegivenhedsløkke". Det betyder at programmet skal vente på brugerens handlinger og derefter reagere på dem. Det betyder også, for et QT-program, at programmet skal være i hovedbegivenhedsløkken for at starte begivenhedshåndteringen. Næste afsnit beskriver kortfattet hvad det betyder for programmøren og hvad QT tilbyder for at håndtere begivenheder. </para>
-<note><para>For brugere som allerede er avancerede: Knappen har ingen overliggende kontrol deklareret i konstruktoren. Derfor er den en topniveaukontrol og kører med en lokal begivenhedsløkke som ikke behøver at vente på hovedbegivenhedsløkken. Se dokumentationen for klassen QWidget og KDE's biblioteksreferenceguide.</para>
+<note><para>For brugere som allerede er avancerede: Knappen har ingen overliggende kontrol deklareret i konstruktoren. Derfor er den en topniveaukontrol og kører med en lokal begivenhedsløkke som ikke behøver at vente på hovedbegivenhedsløkken. Se dokumentationen for klassen TQWidget og KDE's biblioteksreferenceguide.</para>
</note>
</sect3>
@@ -183,7 +183,7 @@ return a.exec();
</itemizedlist>
</para>
<para>Nu fortsætter vi med at give programmet "liv" ved at behandle brugerbegivenheder. I almindelighed har brugeren to måder at kommunikere med et program: musen og tastaturet. En grafisk brugergrænseflade skal sørge for metoder for begge måder, som detekterer handlinger og gør noget som reaktion på handlingerne. </para>
-<para>Vinduesystemet sender derfor alle kommunikationsbegivenheder til det tilsvarende program. <classname>QApplication</classname> sender dem derefter til det aktive vindue som en <classname>QEvent</classname>, og kontrollerne selv skal bestemme hvad som skal udføres med dem. En kontrol tager imod begivenheden og behandler <methodname>QWidget::event(QEvent*)</methodname>, som afgør hvilken begivenhed der er sket og hvordan reaktionen skal være. Metoden <methodname>event()</methodname> udfører derfor håndteringen af hovedbegivenheden. Derefter sender metoden <methodname>event()</methodname> begivenheden til et såkaldt begivenhedfilter som afgør hvad der sker og hvad der skal udføres med begivenheden. Hvis intet filter signalerer at det er ansvarligt for begivenheden, kaldes speciel begivenhedshåndtering. På den måde kan vi skelne mellem: <itemizedlist>
+<para>Vinduesystemet sender derfor alle kommunikationsbegivenheder til det tilsvarende program. <classname>QApplication</classname> sender dem derefter til det aktive vindue som en <classname>QEvent</classname>, og kontrollerne selv skal bestemme hvad som skal udføres med dem. En kontrol tager imod begivenheden og behandler <methodname>TQWidget::event(QEvent*)</methodname>, som afgør hvilken begivenhed der er sket og hvordan reaktionen skal være. Metoden <methodname>event()</methodname> udfører derfor håndteringen af hovedbegivenheden. Derefter sender metoden <methodname>event()</methodname> begivenheden til et såkaldt begivenhedfilter som afgør hvad der sker og hvad der skal udføres med begivenheden. Hvis intet filter signalerer at det er ansvarligt for begivenheden, kaldes speciel begivenhedshåndtering. På den måde kan vi skelne mellem: <itemizedlist>
<listitem><para>Tastaturbegivenheder: Tabulator og Shift+Tabulator:</para>
<itemizedlist>
<listitem><para><methodname>virtual void focusInEvent(QFocusEvent *)</methodname></para></listitem>
@@ -224,12 +224,12 @@ return a.exec();
</itemizedlist>
</para>
-<para>Bemærk at alle begivenhedsfunktioner er virtuelle og protected. Derfor kan du implementere begivenhederne som du behøver i egne kontroller og angive hvordan din kontrol skal reagere. <classname>QWidget</classname> indeholder også nogle andre virtuelle metoder som kan være nyttige i dine programmer. Under alle omstændigheder er det nødvendigt at kende <classname>QWidget</classname> godt. </para>
+<para>Bemærk at alle begivenhedsfunktioner er virtuelle og protected. Derfor kan du implementere begivenhederne som du behøver i egne kontroller og angive hvordan din kontrol skal reagere. <classname>TQWidget</classname> indeholder også nogle andre virtuelle metoder som kan være nyttige i dine programmer. Under alle omstændigheder er det nødvendigt at kende <classname>TQWidget</classname> godt. </para>
</sect2>
<sect2 id="c1s2s4">
<title>Interaktion mellem objekt med signaler og slots</title>
<para>Nu kommer vi til den mest åbenbare fordel ved QT-værktøjskassen: signal/slot-mekanismen. Den tilbyder en meget bekvem og nyttig løsning for kommunikation mellem objekter, som sædvanligvis løses med tilbagekaldsfunktioner i X-windows værktøjskasser. Eftersom kommunikationen kræver strikt programmering og ind imellem gør det meget svært at oprette brugergrænseflader (som beskrevet i QT-dokumentationen og forklaret i Programming with Qt af K. Dalheimer), opfandt TrollTech et nyt system hvor objekter kan sende signaler som kan forbindes til metoder som deklareres som slots. Som programmør af C++, behøver man kun at vide nogen ting om denne mekanisme: <itemizedlist>
-<listitem><para>klassedeklarationen af en klasse som bruger signaler og slots skal indeholde makroen TQ_OBJECT i begyndelsen (uden et semikolon), og skal afledes fra klassen <classname>QObject</classname> </para></listitem>
+<listitem><para>klassedeklarationen af en klasse som bruger signaler og slots skal indeholde makroen TQ_OBJECT i begyndelsen (uden et semikolon), og skal afledes fra klassen <classname>TQObject</classname> </para></listitem>
<listitem><para>et signal kan sendes med nøgleordet emit, f.eks. emit signal(parametre);, inde i en hvilken som helst medlemsfunktion i en klasse som tillader brug af signaler og slots </para></listitem>
<listitem><para>alle signaler som bruges af klasser som ikke arves skal tilføjes i klassedeklarationen i en signalsektion </para></listitem>
@@ -237,9 +237,9 @@ return a.exec();
<listitem><para>metaobjektoversætteren moc skal køres over deklarationsfilen for at ekspandere makroer og oprette implementeringen (som man ikke behøver kende til). Uddatafilerne fra moc kompileres også af C++ oversætteren. </para></listitem>
</itemizedlist>
</para>
-<para>En anden måde at bruge signaler uden at aflede fra <classname>QObject</classname> er at bruge klassen <classname>QSignal</classname>. Se referencedokumentationen for mere information og eksempel på brug. Vi antager at du afleder fra <classname>QObject</classname> i det følgende. </para>
+<para>En anden måde at bruge signaler uden at aflede fra <classname>TQObject</classname> er at bruge klassen <classname>QSignal</classname>. Se referencedokumentationen for mere information og eksempel på brug. Vi antager at du afleder fra <classname>TQObject</classname> i det følgende. </para>
<para>På denne måde kan din klasse sende signaler hvor som helst og sørge for slots som signaler kan forbindes til. Ved at bruge et signal, behøver du ikke bryde dig om hvem der modtager det. Du behøver kun at sende signalet, og hvilken slot du end forbinder den til kan reagere når den sendes. Desuden kan en slot bruges som en almindelig metode i implementeringen. </para>
-<para>For nu at forbinde et signal til en slot, skal du bruge metoderne <methodname>connect()</methodname> som varetages af <classname>QObject</classname> eller, hvis tilgængelige, specielle metoder som objekter sørger for for at angive forbindelsen for et vist signal. </para>
+<para>For nu at forbinde et signal til en slot, skal du bruge metoderne <methodname>connect()</methodname> som varetages af <classname>TQObject</classname> eller, hvis tilgængelige, specielle metoder som objekter sørger for for at angive forbindelsen for et vist signal. </para>
<sect3 id="c1s2s4s1">
<title>Eksempel på brug</title>
@@ -255,16 +255,16 @@ hello.resize( 100, 30 );
a.setMainWidget( &amp;hello );
-QObject::connect(&amp;hello, SIGNAL( clicked() ), &amp;a, SLOT( quit() ));
+TQObject::connect(&amp;hello, SIGNAL( clicked() ), &amp;a, SLOT( quit() ));
hello.show();
return a.exec();
}
</programlisting>
</para>
-<para>Du mærker at alt du skal tilføje for at give knappen mere kommunikation er metoden <methodname>connect()</methodname>: <methodname>connect (&amp;hello, SIGNAL( clicked() ), &amp;a, SLOT( quit() ))</methodname>;. Hvad er betydningen nu? Klassedeklarationen af QObject siger følgende om metoden <methodname>connect()</methodname>: </para>
-<para><methodname>bool connect ( const QObject * afsender, const char * signal, const QObject * modtager, const char * medlem ) </methodname></para>
-<para>Dette betyder at du skal angive en <classname>QObject</classname>-instanspeger som er signalets afsender, hvilket betyder at den kan sende signalet, som første parameter. Derefter skal du angive signalet som du vil forbinde til. De to sidste parametre er modtagerobjektet som sørger for en slot, fulgt af medlemsfunktionen som er en virkelig slot som vil køres når signalet sendes. </para>
+<para>Du mærker at alt du skal tilføje for at give knappen mere kommunikation er metoden <methodname>connect()</methodname>: <methodname>connect (&amp;hello, SIGNAL( clicked() ), &amp;a, SLOT( quit() ))</methodname>;. Hvad er betydningen nu? Klassedeklarationen af TQObject siger følgende om metoden <methodname>connect()</methodname>: </para>
+<para><methodname>bool connect ( const TQObject * afsender, const char * signal, const TQObject * modtager, const char * medlem ) </methodname></para>
+<para>Dette betyder at du skal angive en <classname>TQObject</classname>-instanspeger som er signalets afsender, hvilket betyder at den kan sende signalet, som første parameter. Derefter skal du angive signalet som du vil forbinde til. De to sidste parametre er modtagerobjektet som sørger for en slot, fulgt af medlemsfunktionen som er en virkelig slot som vil køres når signalet sendes. </para>
<para>Ved at bruge signaler og slots, kan programmets objekter nemt kommunikere med hinanden uden udtrykkeligt at afhænge af typen af modtagarobjektet. Du vil lære mere om hvordan denne mekanisme bruges produktivt senere i håndbogen. Mere information om signal/slot-mekanismen findes også i <ulink url="developer.kde.org/documentation/library/libraryref.html">KDE's biblioteksreferenceguide</ulink> og <ulink url="doc.trolltech.com">QT's reference på nettet</ulink>. </para>
</sect3>
</sect2>
@@ -304,7 +304,7 @@ hello.resize( 100, 30 );
a.setTopWidget( &amp;hello );
-QObject::connect(&amp;hello, SIGNAL( clicked() ), &amp;a, SLOT( quit() ));
+TQObject::connect(&amp;hello, SIGNAL( clicked() ), &amp;a, SLOT( quit() ));
hello.show();
return a.exec();
@@ -313,7 +313,7 @@ return a.exec();
</para>
<para>Du ser at vi først har ændret fra <classname>QApplication</classname> til <classname>TDEApplication</classname>. Desuden var vi tvunget til at ændre den tidligere brugte metode <methodname>setMainWidget()</methodname> til <methodname>setTopWidget</methodname> som <classname>TDEApplication</classname> bruger til for at angive hovedkontrollen. Det er alt! Dit første KDE-program er klart. Du behøver kun at fortælle oversætteren hvilken deklarationssøgesti KDE har, og linkeren at den skal linke med tdecore-biblioteket med -ltdecore. </para>
<para>Eftersom du nu i det mindste ved hvad funktionen <function>main()</function> i almindelighed sørger for, og hvordan et program bliver synligt og tillader kommunikation mellem brugere og objekt, fortsætter vi med næste kapitel, hvor vort første program med &tdevelop; laves. Der kan du også prøve alt som tidligere blev nævnt, og se effekterne. </para>
-<para>Hvad du yderligere bør have kigget på hidtil er QT-referencedokumentationen, især klasserne <classname>QApplication</classname>, <classname>QWidget</classname> og <classname>QObject</classname> og tdecore-biblioteksdokumentationen for klassen <classname>TDEApplication</classname>. <ulink url="developer.kde.org/documentation/library/libraryref.html">KDE's biblioteksreferenceguide</ulink> har også en fuldstændig beskrivelse af hvordan konstruktorerne i <classname>QApplication</classname> og <classname>TDEApplication</classname> kaldes, inklusive behandling af kommandolinjeflag. </para>
+<para>Hvad du yderligere bør have kigget på hidtil er QT-referencedokumentationen, især klasserne <classname>QApplication</classname>, <classname>TQWidget</classname> og <classname>TQObject</classname> og tdecore-biblioteksdokumentationen for klassen <classname>TDEApplication</classname>. <ulink url="developer.kde.org/documentation/library/libraryref.html">KDE's biblioteksreferenceguide</ulink> har også en fuldstændig beskrivelse af hvordan konstruktorerne i <classname>QApplication</classname> og <classname>TDEApplication</classname> kaldes, inklusive behandling af kommandolinjeflag. </para>
</sect2>
</sect1>
@@ -549,10 +549,10 @@ return a.exec();
16 statusBar()->show();
17
18 // tillad visningen at ændre statuslinjen og overskriften
-19 connect(m_view, SIGNAL(signalChangeStatusbar(const QString&amp;)),
-20 this, SLOT(changeStatusbar(const QString&amp;)));
-21 connect(m_view, SIGNAL(signalChangeCaption(const QString&amp;)),
-22 this, SLOT(changeCaption(const QString&amp;)));
+19 connect(m_view, SIGNAL(signalChangeStatusbar(const TQString&amp;)),
+20 this, SLOT(changeStatusbar(const TQString&amp;)));
+21 connect(m_view, SIGNAL(signalChangeCaption(const TQString&amp;)),
+22 this, SLOT(changeCaption(const TQString&amp;)));
23
24 }
</programlisting>
@@ -584,7 +584,7 @@ return a.exec();
</itemizedlist>
</para>
<para>Det behøves ikke at siges at stabilitet er et af hovedmålene med konstruktionen. Ingen kan forhindre fejl, men et minimum kan i det mindste opnås med smarte konstruktionsmål og udbredt brug af objektorienterede konstruktioner. C++ gør det til en fornøjelse at programmere hvis du ved hvordan man udnytter dens muligheder - arv, at skjule information og genbrug af eksisterende kode. </para>
-<para>Når et KDE- eller QT-projekt laves, skal du altid have en visning som arver en QWidget, enten med direkte arv eller fordi en bibliotekskontrol som du vil bruge arver QWidget. Derfor har Programguiden allerede oprettet en visning som er en instans af klassen programnavnView, som allerede arver QWidget. </para>
+<para>Når et KDE- eller QT-projekt laves, skal du altid have en visning som arver en TQWidget, enten med direkte arv eller fordi en bibliotekskontrol som du vil bruge arver TQWidget. Derfor har Programguiden allerede oprettet en visning som er en instans af klassen programnavnView, som allerede arver TQWidget. </para>
<para>Dette kapitel beskriver derfor hvordan bibliotekskontroller bruges til at oprette visninger for KDE- og QT-programmer som laves med &tdevelop;. Derefter kigger vi på bibliotekerne og hvilke slags visninger de allerede tilbyder. </para>
</sect1>
<sect1 id="c4s2">
@@ -601,7 +601,7 @@ return a.exec();
<para>Når du kigger på den første side af QT's net-dokumentation, finder du et link til "Widget Screenshots", hvor du kan kigge på hvordan de grafiske kontroller som QT indeholder ser ud. De er parate til at bruge, og kan kombineres til at give komplekse kontroller som kan oprette programvisninger eller dialoger. I det følgende beskriver vi nogle af disse, som er meget nyttigt til at oprette programvisninger, men husk at KDE-bibliotekerne sommetider indeholder andre kontroller med samme formål. Disse diskuteres i næste afsnit. </para>
<para>Her er nogle vink om hvilken Qt-komponent der kan bruges til hvilket slutmål: <orderedlist>
<listitem><para>Hvis visningsområdet ikke er stort nok til at vise alle data, skal brugeren kunne panorere i dokumentet med lister til venstre og længst nede i visningen. QT sørger for klassen <classname>QScrollView</classname> for dette, som tilbyder et underliggende område med panoreringsmulighed. Som tidligere forklaret, kan du lade dine egne grafiske kontroller arve <classname>QScrollView</classname>, eller bruge en instans for at håndtere dit dokuments visningskomponent. </para></listitem>
-<listitem><para>For at oprette en egen ScrollView, lad komponenten View arve fra <classname>QWidget</classname> og tilføj lodrette og vandrette rullebjælker med <classname>QScrollBars</classname>. (Dette udføres af KDE's kontrol TDEHTMLView.) </para></listitem>
+<listitem><para>For at oprette en egen ScrollView, lad komponenten View arve fra <classname>TQWidget</classname> og tilføj lodrette og vandrette rullebjælker med <classname>QScrollBars</classname>. (Dette udføres af KDE's kontrol TDEHTMLView.) </para></listitem>
<listitem><para>Til tekstbehandling, bruges <classname>QTextEdit</classname>. Denne klasse sørger for en fuldstændig grafisk teksteditorkontrol, som allerede kan klippe, kopiere og indsætte tekst og håndteres af en visning med rullebjælker. </para></listitem>
<listitem><para>Brug <classname>QTable</classname> til at vise data som er arrangeret i en tabel. Eftersom <classname>QTable</classname> også håndteres af rullebjælker, tilbyder den en god løsning for programmer med tabelberegninger. </para></listitem>
<listitem><para>For at vise to forskellige grafiske kontroller eller to instanser af samme kontrol samtidigt, bruges <classname>QSplitter</classname>. Den tillader at visninger lægges side ved side med vandrette eller lodrette opdelere. Kmail er et godt eksempel på hvordan det ser ud. Hovedvinduet er opdelt lodret af en opdeler, og det højre vindue er igen opdelt vandret. </para></listitem>
@@ -653,7 +653,7 @@ return a.exec();
<title>Indstilling af genvejstaster</title>
<para>Noget meget professionelt som du altid bør tilføje i programmet er genvejstaster. De bruges oftest af erfarne brugere som vil arbejde hurtigt med deres programmer og er villige til at lære sig genveje. KDE-bibliotekerne tilbyder klassen <classname>TDEAction</classname> til dette, som sørger for genvejstaster og adgang til globalt indstillede standardgenveje. </para>
<para>Normalt bruger kun rammeprogrammer oprettet af &tdevelop; almindelige genvejstaster såsom F1 for at komme til nethjælp, Ctrl+N for Ny fil, osv. </para>
-<para>Hvis programmet indeholder mange genvejstaster bør du gøre dem indstillelige via en indstillingsmenu. Enten kan det kombineres med anden programindstilling i en QWidget eller være alene. KDE-biblioteket sørger allerede for en <classname>KKeyChooser</classname> til at bruge i fanebladsdialoger, mens <classname>KKeyDialog</classname> sørger for en indstillingsdialog for genvejstaster som er parat til brug. </para>
+<para>Hvis programmet indeholder mange genvejstaster bør du gøre dem indstillelige via en indstillingsmenu. Enten kan det kombineres med anden programindstilling i en TQWidget eller være alene. KDE-biblioteket sørger allerede for en <classname>KKeyChooser</classname> til at bruge i fanebladsdialoger, mens <classname>KKeyDialog</classname> sørger for en indstillingsdialog for genvejstaster som er parat til brug. </para>
</sect1>
</chapter>
@@ -696,7 +696,7 @@ return a.exec();
<sect1 id="c8s4">
<title>Knappen <guibutton>Hvad er dette?</guibutton></title>
<para>Knappen <guibutton>Hvad er dette...?</guibutton> sørger for hjælpevinduer med formålet at give brugeren hjælp med en vis kontrol i visningen som bruges eller et objekt i en værktøjslinje. Den er i værktøjslinjen og aktiveres når brugeren trykker på knappen. Markøren ændres til en pilemarkør med et spørgsmålstegn, præcis som knappen selv ser ud. Derefter kan brugeren klikke på en synlig kontrol og får så et hjælpevindue. Som en øvelse kan du prøve opførslen med knappen <guibutton>Hvad er dette...?</guibutton> inde i &tdevelop;. </para>
-<para>For at tilføje "Hvad er dette...?" hjælp til en af dine grafiske kontroller, bruges den statiske metode <methodname>QWhatsThis::add(QWidget *widget, const QString &amp;text)</methodname> </para>
+<para>For at tilføje "Hvad er dette...?" hjælp til en af dine grafiske kontroller, bruges den statiske metode <methodname>QWhatsThis::add(TQWidget *widget, const TQString &amp;text)</methodname> </para>
</sect1>
</chapter>