<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [

  <!ENTITY kappname "&rocs;">
  <!ENTITY package "kdeedu">
  <!ENTITY % addindex "IGNORE">
  <!ENTITY % Swedish "INCLUDE">
]>
<book lang="&language;">

<bookinfo>
<title
>Handbok &rocs;</title>
<authorgroup>
<author
><personname
> <firstname
>Tomaz</firstname
> <surname
>Canabrava</surname
> </personname
> <email
>tomaz.canabrava@gmail.com</email
> </author>
<author
><personname
> <firstname
>Andreas</firstname
> <surname
>Cord-Landwehr</surname
> </personname
> <email
>cordlandwehr@googlemail.com</email
> </author>

<othercredit role="translator"
> <firstname
>Stefan</firstname
> <surname
>Asserhäll</surname
> <affiliation
><address
><email
>stefan.asserhall@comhem.se</email
></address
></affiliation
> <contrib
>Översättare</contrib
></othercredit
> 
</authorgroup>

<copyright
><year
>2009</year
><holder
>Tomaz Canabrava</holder
></copyright>
<copyright
><year
>2011</year
><holder
>Andreas Cord-Landwehr</holder
></copyright>

<date
>2011-12-04</date>
<releaseinfo
>1.1 &kde; 4.8</releaseinfo>

<legalnotice
>&FDLNotice;</legalnotice>

<abstract>
<para
>&rocs; är ett grafteoretiskt verktyg för KDE. </para>
</abstract>

<keywordset>
<keyword
>KDE</keyword>
<keyword
>kdeedu</keyword>
<keyword
>matematik</keyword>
<keyword
>matematik</keyword>
<keyword
>grafer</keyword>
<keyword
>nod</keyword>
<keyword
>båge</keyword>
</keywordset>

</bookinfo>

<chapter id="introduction">
<title
>Inledning</title>
<para
>&rocs; är en integrerad utvecklingsmiljö för grafteori avsedd för alla som är intresserade av att konstruera och analysera grafalgoritmer. Det omfattar speciellt</para>
<itemizedlist>
	<listitem
><para
>föreläsare som till sist vill demonstrera algoritmer för sina studenter,</para
></listitem>
	<listitem
><para
>studenter som vill förstå och se hur en algoritm fungerar,</para
></listitem>
	<listitem
><para
>och alla som måste konstruera grafalgoritmer och behöver ett verktyg för att prova ut prototyper.</para
></listitem>
</itemizedlist>
<para
>För alla dessa användare tillhandahåller &rocs; en lättanvänd grafeditor för att skapa grafer, en kraftfullt Qt Script-skriptverktyg för att utföra algoritmer, och flera hjälpverktyg för att ställa in grafer och datastrukturer för experiment. Det vanliga arbetssättet är att skriva en algoritm, skapa en graf, och se i realtid hur algoritmen fungerar för grafen.</para>

<screenshot>
<screeninfo
>En skärmbild av &rocs;.</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="rocs-screenshot.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>En skärmbild av &rocs;.</phrase>
</textobject>
</mediaobject>
</screenshot>
</chapter>

<chapter id="user-interface">
<title
>&rocs; användargränssnitt</title>

<sect1 id="user-interface-all">
<title
>Allmänna delar i användargränssnittet</title>
<para
>Användargränssnittet är uppdelat i flera logiska delar som framgår av skärmbilden nedan. </para>
<screenshot>
	<screeninfo
>Grafiska element i &rocs; användargränssnitt.</screeninfo>
	<mediaobject>
	<imageobject>
	<imagedata fileref="rocs-interfaces.png" format="PNG"/>
	</imageobject>
	<textobject>
	<phrase
>Grafiska element i &rocs; användargränssnitt.</phrase>
	</textobject>
	</mediaobject>
</screenshot>
<variablelist>
<varlistentry>
	<term
>Verktygsrad för visuell grafeditor</term>
	<listitem
><para
>för att kunna rita eller ändra grafer på den visuella grafeditorns skrivtavla, måste först ett verktyg väljas här</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Visuell grafeditor</term>
	<listitem
><para
>Detta är området där grafer kan ritas. Att högerklicka på skrivtavlan, grafelement, eller markerade grafelement visar en sammanhangsberoende meny, beroende av vad man klickar på.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Grafegenskaper</term>
	<listitem
><para
>Det här ger en fullständig lista med alla olika grafer som för närvarande finns på den visuella grafeditorns skrivtavla. Här kan ändringar av t.ex. grafens namn, synliga egenskaper som nodnamn eller värden göras, eller standardfärger på grafelementen definieras.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Skripteditor</term>
	<listitem
><para
>I texteditorn kan algoritmer skrivas i Qt Script (som i stort sett är samma sak som Javascript för vårt syfte). Det går att arbeta med flera algoritmer samtidigt genom att öppna eller skapa nya skriptflikar i huvudmenyn. Den lilla skivsymbolen på en flik visas om det för närvarande finns osparade ändringar.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Felsöknings- och skriptutmatning</term>
	<listitem
><para
>I det här textområdet skrivs antingen felsökningsinformation eller skriptutmatning från algoritmer ut, beroende på val av utmatningsinställning. Om ett fel uppstår i skriptet, väljes automatiskt felsökningsutmatning. Dessutom visas också alla meddelanden utmatade av programmet i felsökningsutmatningen.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Körning av skript</term>
	<listitem
><para
>Den här området styr körning av algoritmerna. Skriptet som för närvarande är öppet i skripteditorn kan köras med grafen på den visuella grafeditorns skrivtavla, genom att klicka på <guiicon
>Kör</guiicon
>. Medan skriptet körs, är det möjligt att stoppa det genom att klicka på knappen <guiicon
>Stopp</guiicon
>.</para
></listitem>
</varlistentry>
</variablelist>
</sect1>

<sect1 id="user-interface-toolbars">
<title
>Verktygsrader</title>
<para
>Det finns olika möjliga verktygsrader för den visuella grafeditorn som gör det möjligt att komma åt funktioner med bara ett klick. Med standardinställningen visas följande verktygsrader:</para>
<itemizedlist>
	<listitem
><para
>Huvudverktygsrad</para
></listitem>
	<listitem
><para
>Justeringsverktygsrad</para
></listitem>
</itemizedlist>

<sect2 id="user-interface-toolbars-main">
<title
>Huvudverktygsrad</title>
<para
><emphasis
>Huvudverktygsraden</emphasis
> innehåller följande åtgärder. Att klicka på en åtgärd leder till att muspekaren utför den åtgärden på den visuella grafeditorns skrivtavla:</para>
<itemizedlist>
<listitem
><para
><guilabel
>Flytta</guilabel
>: För att markera element, klicka antingen på en oanvänd plats på skrivtavlan, håll musknappen nertryckt och rita en rektangel som innehåller några noder och/eller bågar för att markera dessa element, eller klicka annars direkt på ett omarkerat element för att markera det. Om du klickar på ett markerat element, eller en uppsättning markerade element, kan de flyttas omkring genom att hålla musknappen nertryckt och flytta omkring musen. Det är också möjligt att flytta markerade element med piltangenterna.</para
></listitem>
<listitem
><para
><guilabel
>Lägg till nod</guilabel
>: Klicka på ett godtyckligt ställe på den visuella grafeditorns skrivtavla för att skapa en ny nod som hör till grafen som för närvarande är markerad.</para
></listitem>
<listitem
><para
><guilabel
>Lägg till båge</guilabel
>: Klicka på en nod, håll musknappen nertryckt och rita en linje till en annan nod, dit pilen/bågen ska peka. Åtgärden lyckas bara om den aktuella grafen tillåter att bågen läggs till (i en oriktad graf får t.ex. inte mer än en båge läggas till mellan två noder).</para
></listitem>
<listitem
><para
><guilabel
>Ta bort</guilabel
>: Klicka på ett element för att ta bort det. Om du tar bort en nod, tas också alla intilliggande bågar bort.</para
></listitem>
<listitem
><para
><guilabel
>Zooma</guilabel
>: Klicka på skrivtavlan, håll vänster musknapp nertryckt, och rita på så sätt en rektangel. Skrivtavlan zoomas till det markerade området. Använd också mushjulet för att zooma in eller ut. Ett dubbelklick med musens vänsterknapp återställer ursprunglig zoomnivå.</para
></listitem>
</itemizedlist>
<screenshot>
<screeninfo
>Huvudverktygsraden.</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="rocs-toolbar-main.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>Huvudverktygsraden.</phrase>
</textobject>
</mediaobject>
</screenshot>
</sect2>

<sect2 id="user-interface-toolbars-alignment">
<title
>Justeringsverktygsrad</title>
<para
>Det går att lägga till en valfri <emphasis
>justeringsverktygsrad</emphasis
>. Genom att klicka på ett alternativ i verktygsraden erhålls direkt en effekt på noderna som för närvarande är markerade:</para>
<itemizedlist>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligntop.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Upp</guilabel
>: Justera noderna längs den vertikala positionen av den översta noden. Detta påverkar bara vertikala positioner.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignvmiddle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Mitt</guilabel
>: Justera noderna längs den vertikala positionen som anges av centrum för alla markerade noders vertikala position. Detta påverkar bara vertikala positioner.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignbottom.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Bas</guilabel
>: Justera noderna längs den vertikala positionen av den understa noden. Detta påverkar bara vertikala positioner.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignleft.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Vänster</guilabel
>: Justera noderna längs den horisontella positionen för noden längst åt vänster. Detta påverkar bara horisontella positioner.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignhmiddle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Mitt</guilabel
>: Justera noderna längs den horisontella positionen för noden längst åt höger. Detta påverkar bara horisontella positioner.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignright.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Höger</guilabel
>: Justera noderna längs den horisontella positionen för noden längst åt höger. Detta påverkar bara horisontella positioner.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligncircle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Cirkel</guilabel
>: Justera noderna längs en cirkel vars diameter är lika med den maximala avståndet mellan noderna. Noderna placeras i samma följd som ges av nodernas positioner i förhållande till deras gemensamma masscentrum.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligntree.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Minimera korsande bågar</guilabel
>: Applicerar Fruchterman-Reingold-algoritmen för att (approximativt) minimera antal korsande bågar.</para
></listitem>
</itemizedlist>
<screenshot>
<screeninfo
>Justeringsverktygsraden.</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="rocs-toolbar-alignment.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>Justeringsverktygsraden.</phrase>
</textobject>
</mediaobject>
</screenshot>
</sect2>
</sect1>

<sect1 id="user-interface-graph-properties">
	<title
>Grafegenskaper</title>
	<para
>I den vänstra sidoraden finns alternativ för varje öppen graf. Alla dessa alternativ är allmänna per graf, och kan ändras per nod och båge med dialogrutorna Nodegenskaper och Bågegenskaper.</para>

	<itemizedlist>
	<listitem
><para
><guilabel
>Namn</guilabel
>: Detta är namnet som algoritmen måste använda för att komma åt grafen. </para
></listitem>
	<listitem
><para
><guilabel
>Datafärg</guilabel
> För nyskapade noder, kan nodfärgen för alla aktuella noder ändras genom att klicka på knappen <guilabel
>Alla</guilabel
>. </para
></listitem>
	<listitem
><para>
	  <guilabel
>Pilfärg</guilabel
> <!--FIXME color of edges?-->
	</para
></listitem>
	</itemizedlist>
	<para
>Den sista raden alternativ består av alternativknappar:</para>
	<itemizedlist>
	<listitem
><para
><guilabel
>Visa namn för:</guilabel
> <guilabel
>Data</guilabel
> eller <guilabel
>Pilar</guilabel
>. </para
></listitem>
	<listitem
><para
><guilabel
>Visa värden för:</guilabel
> <guilabel
>Noder</guilabel
> eller <guilabel
>Bågar</guilabel
>. </para
></listitem>
	<!-- FIXME missing Graph Type Undirected Graph, Directed Graph, Multigraph -->
	</itemizedlist>
</sect1>
</chapter>

<chapter id="using-rocs">
<title
>Använda &rocs;</title>
<para
>Oftast är det första steget att skapa en graf med den visuella grafeditorn. Det kan man antingen göra för hand, genom att lägga till noder och koppla ihop dem, eller genom att använda en av hjälpalgoritmerna som finns under <guimenu
>Verktyg</guimenu
> <guimenuitem
>Skapa graf</guimenuitem
>. Vid något tillfälle behöver man också använda hjälpverktygen <guimenu
>Verktyg</guimenu
> <guimenuitem
>Tilldela värden</guimenuitem
> för att tilldela ursprungliga värden till grafens noder och bågar. Till sist måste grafen ges ett namn. Namnet är därefter identifieraren som ska användas i skriptverktyget.</para>

<sect1 id="using-rocs-scripting">
<title
>Använda skript</title>
<para
>&rocs; använder ett Javascript-liknande skriptspråk. Det innebär i huvudsak en definitionen av variabler och funktioner och deras användning görs på exakt samma sätt som i Javascript. Dessutom tillhandahåller &rocs; en uppsättning funktioner som låter dig komma åt graferna och deras element på den visuella grafeditorns skrivtavla. </para>

<sect2
><title
>Komma åt en graf</title>
<para
>En graf kan kommas åt från skriptgränssnittet genom att helt enkelt skriva dess namn och använda det som ett objekt med en av följande funktioner. För att komma åt en nod eller en båge måste en identifierare hämtas från grafobjektet.</para>
<variablelist>
<varlistentry>
<term
>Grafobjekt</term>
<listitem>
<programlisting
>// funktioner
     array list_nodes();
     array list_edges();
     node add_node(name);
     edge add_edge(from, to);
     node node_byname(QString&amp; name);
     node begin_node();
     array end_nodes();

// variabler
     bool directed
     bool automate
     string name
     string nodeDefaultColor // i HEX
     string edgeDefaultColor  // i HEX
</programlisting>
</listitem>
</varlistentry>

<varlistentry>
<term
>Nodobjekt</term>
<listitem>
<programlisting
>// funktioner
     array adj_nodes();
     array adj_edges();
     array input_edges();
     array output_edges();
     array loop_edges();
     array connected_edges(Node *n);
     void self_remove();

// variabler
    double x
    double y
    double width
    string value
    string name
    string color  // i HEX
    bool begin
    bool end
</programlisting>
</listitem>
</varlistentry>

<varlistentry>
<term
>Bågobjekt</term>
<listitem>
<programlisting
>    string color ( em hexa )
    string value
    string name
    double width
    string style ( dot, dash, dash dot, solid )

    node start();
    node  end();

    void self_remove();
</programlisting>
</listitem>
</varlistentry>
</variablelist>
</sect2>

<sect2 id="script-graph-algorithms">
<title
>Grafalgoritmer</title>
<para
>Ibland är det användbart att kunna använda funktioner för vanliga uppgifter, som att beräkna kortaste avståndet mellan två noder. För närvarande stöder vi följande algoritmer som kan anropas från skriptverktyget med noder från samma graf.</para>
<variablelist>
<varlistentry>
<term
>Beräkning av kortaste vägen</term>
<listitem>
	<para
>Beräknar kortaste väg mellan noderna <emphasis
>start</emphasis
> och <emphasis
>slut</emphasis
>. Båda noderna måste ingå i samma graf. Beräkningen tar hänsyn till om grafen är riktad eller inte.</para>
	<funcsynopsis>
	<funcprototype
><funcdef
>array <function
>dijkstra_shortest_path</function
></funcdef
> <paramdef
>Node* <parameter
><replaceable
>start</replaceable
></parameter
></paramdef
> <paramdef
>Node* <parameter
><replaceable
>slut</replaceable
></parameter
></paramdef
> </funcprototype>
	</funcsynopsis>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>

<sect1 id="script-example">
<title
>Exempel</title>
<para
>Här är ett enkelt exempel på ett skript som ställer in färgen på de fyra första noderna i den första grafen:</para>
<programlisting
>/* Ett enkelt exempel som ställer in färgen på de fyra första noderna 
i den första grafen: */

var colors = new Array("red", "green", "blue", "yellow");

/* graphs är ett fält av grafer, du kan komma åt en graf med dess index i
fältet eller med dess namn, så om den första grafens namn är Untitled0,
är följande sats riktig */
var list1 = graphs[0].list_nodes(); // 1:a formen
var list2 = Untitled0.list_nodes(); // 2.a formen
 
 for ( var i = 0; i &lt; colors.length; i++){
        if (i 
> list2.length) break;
        list2[i].color = colors[i]
 }
</programlisting>
</sect1>
<sect1>
	<title
>Import och export</title>
	<para
>&rocs; stöder för närvarande import och export av följande filformat:</para>
	<itemizedlist>
		<listitem
><para
>DOT-filer, också kända som Graphviz-filer.</para
></listitem>
		<listitem
><para
>GML-filer</para
></listitem>
		<listitem
><para
>Vanliga textfiler.</para
></listitem>
	</itemizedlist>
	<para
>För närvarande importeras bara några få värden med de flesta av dessa filtyper. De importerade värdena omfattar noder och deras motsvarande anslutningar, namn på alla element, värden, och också koordinater om de är angivna.</para>
</sect1>
</chapter>

<chapter id="credits">
<title
>Tack till och licens</title>

<para
>&rocs; </para>
<para
>Program Copyright:</para>
<itemizedlist>
	<listitem
><para
>Copyright 2008 Ugo Sangiori (ugorox SNABELA gmail.com)</para
></listitem>
	<listitem
><para
>Copyright 2008-2011 Tomaz Canabrava (tcanabrava SNABELA kde.org)</para
></listitem>
	<listitem
><para
>Copyright 2008-2011 Wagner Reck (wagner.reck SNABELA gmail.com)</para
></listitem>
	<listitem
><para
>Copyright 2011 Andreas Cord-Landwehr (cordlandwehr SNABELA googlemail.com)</para
></listitem>
</itemizedlist>

<para
>Dokumentation Copyright:</para>
<itemizedlist>
	<listitem
><para
>Dokumentation copyright 2009 &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail;</para
></listitem>
	<listitem
><para
>Dokumentation copyright 2009 Tomaz Canabrava (tcanabrava SNABELA kde.org)</para
></listitem>
	<listitem
><para
>Dokumentation copyright 2011 Andreas Cord-Landwehr (cordlandwehr SNABELA googlemail.com)</para
></listitem>
</itemizedlist>

<para
>Översättning Stefan Asserhäll <email
>stefan.asserhall@comhem.se</email
></para
> 
&underFDL; &underGPL; </chapter>

<appendix id="installation">
<title
>Installation</title>

<sect1 id="getting-rocs">
<title
>Hur man skaffar &rocs;</title>
&install.intro.documentation; </sect1>

<sect1 id="compilation">
<title
>Kompilering och installation</title>
&install.compile.documentation; </sect1>
</appendix>

&documentation.index;
</book>
<!--
Local Variables:
mode: sgml
sgml-minimize-attributes: nil
sgml-general-insert-case: lower
sgml-indent-step:0
sgml-indent-data:nil
End:
-->
