<?xml version="1.0" encoding="utf-8"?>
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2001/XInclude" type="guide" style="task" id="hello-world.vala" lang="cs">

  <info>
  <title type="text">Hello World (Vala)</title>
    <link type="guide" xref="beginner.vala#tutorials" group="#first"/>

    <revision version="0.1" date="2013-06-17" status="review"/>

    <credit type="author copyright">
      <name>Susanna Huhtanen</name>
      <email its:translate="no">ihmis.suski@gmail.com</email>
      <years>2012</years>
    </credit>
    <credit type="editor">
      <name>Tiffany Antopolski</name>
      <email its:translate="no">tiffany.antopolski@gmail.com</email>
    </credit>

    <desc>Základní aplikace „Hello, world“</desc>
  </info>

  <title>Jak sestavit a nainstalovat program „Hello World“ a jak pro něj vytvořit balíček <file>tar.xz</file></title>
    <media type="image" mime="image/png" style="floatend" src="media/hello-world.png"/>
    <synopsis>
      <p>Tato lekce ukazuje jak:</p>
      <list style="numbered">
        <item><p>vytvořit malou aplikaci „Hello, World“ pomocí GTK+</p></item>
        <item><p>vytvořit soubor <file>.desktop</file></p></item>
        <item><p>nastavit sestavovací systém</p></item>
      </list>
    </synopsis>

  <links type="section"/>

  <section id="hello-world"><title>Vytvoření programu</title>

    <links type="section"/>

    <section id="application"><title>Vytvoření hlavního okna pro aplikaci</title>
      <code mime="text/x-csharp">class MyApplication : Gtk.Application {
        protected override void activate () {
                var window = new Gtk.ApplicationWindow (this);
                window.set_title ("Welcome to GNOME");
                window.set_default_size (200, 100);
                window.show_all ();
        }
}</code>

    <p><code>Gt.Application</code> inicializuje GTK+. Rovněž napojí tlačítko <gui>×</gui>, které je vytvořeno automaticky spolu s oknem, na signál <code>"destroy"</code>.</p>
    <p>Můžeme začít sestavovat naše první okno. Provedeme to vytvořením proměnné s názvem <var>window</var>, které přiřadíme <code>new Gtk.ApplicationWindow</code>.</p>
    <p>Oknu přidělíme název pomocí <code>set_title</code>. Název může být libovolný řetězec, jaký se vám hodí. Je však dobrou praxí, aby byl v kódování UTF-8.</p>
    <p>Nyní máme okno, která má název a funkční „zavírací“ tlačítko. Pojďme přidat pořádný text „Hello World“.</p>
    </section>

    <section id="label"><title>Popisek pro okno</title>
      <code mime="text/x-csharp">var label = new Gtk.Label ("Hello GNOME!");
                window.add (label);
</code>

      <p>Nakonec vytvoříme a spustíme aplikaci:</p>

      <code mime="text/x-csharp">int main (string[] args) {
        return new MyApplication ().run (args);
}</code>

      <p>Gtk.Application může v jednu chvíli obsahovat jen jeden widget. Pokud chcete sestrojit složitější program, budete uvnitř okna potřebovat vytvořit kontejnerový widget, jako je <code>Gtk.Grid</code>, a všechny ostatní widgety přidat do něj.</p>
   </section>


    <section id="vala"><title>hello-world.vala</title>
      <p>Celý soubor:</p>
      <code mime="text/x-csharp" style="numbered">public class MyApplication : Gtk.Application {
	protected override void activate () {
		var window = new Gtk.ApplicationWindow (this);
		var label = new Gtk.Label ("Hello GNOME!");
		window.add (label);
		window.set_title ("Welcome to GNOME");
		window.set_default_size (200, 100);
		window.show_all ();
	}
}

public int main (string[] args) {
	return new MyApplication ().run (args);
}
</code>
    </section>

    <section id="terminal"><title>Spuštění aplikace z terminálu</title>
      <p>Když chcete tuto aplikaci spustit, nejprve ji uložte jako <file>hello-world.vala</file>. Pak otevřete terminál a přejděte do složky, kde je aplikace uložená.</p>
      <p>Zkompilujte program:</p>
           <screen>valac --pkg gtk+-3.0 <file>hello-world.vala</file></screen>
      <p>Spusťte program:</p>
           <screen>./<var>hello-world</var></screen>
    </section>
  </section>

  <section id="desktop.in"><title>Soubor <file>.desktop.in</file></title>
      <p>Spouštění aplikace z terminálu je užitečné na začátku při postupném vytváření aplikace. Abychom dostali plně funkční <link href="https://developer.gnome.org/integration-guide/stable/mime.html.cs">aplikaci integrovanou</link> s GNOME 3, potřebujeme spouštěč do pracovního prostředí. K tomu musíte vytvořit soubor <file>.desktop</file>. Soubor <file>.desktop</file> popisuje název aplikace, použitou ikonu a různé integrační drobnosti. Hlubší rozebrání souboru <file>.desktop</file> můžete najít <link href="http://developer.gnome.org/desktop-entry-spec/">zde</link>. Ze souboru <file>.desktop.in</file> se vytvoří soubor <file>.desktop</file>.</p>

    <p>Příklad ukazuje minimální požadavky pro soubor <code>.desktop.in</code>.</p>
    <code mime="text/desktop" style="numbered">[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=Hello World
Comment=Say Hello
Exec=@prefix@/bin/hello-world
Icon=application-default-icon
Terminal=false
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Utility;
</code>

    <p>Nyní se pojďme podívat na některé části souboru <code>.desktop.in</code>.</p>
    <terms>
      <item><title>Name</title><p>Název aplikace.</p></item>
      <item><title>Comment</title><p>Krátký popis aplikace.</p></item>
      <item><title>Exec</title><p>Určuje příkaz, který se má spustit, když aplikaci vyberete v nabídce. V tomto příkladu Exec jednoduše říká, kde najít soubor <file>hello-world</file> a tento soubor se už postará o zbytek.</p></item>
      <item><title>Terminal</title><p>Určuje, jestli příkaz v klíči Exec běží v terminálu.</p></item>
    </terms>

    <p>Abyste vaši aplikaci umístili do správné kategorie, musíte potřebné kategorie přidat na řádek <code>Categories</code>. Více informací o různých kategoriích můžete najít ve <link href="http://standards.freedesktop.org/menu-spec/latest/apa.html">specifikaci nabídky</link>.</p>
    <p>V tomto příkladu používáme existující ikonu. Pro vlastní ikonu potřebujete mít soubor SVG se svojí ikonou uložený v <file>/usr/share/icons/hicolor/scalable/apps</file>. Napište název svého souboru s ikonou do souboru .desktop.in na řádek 7. Více informací o ikonách: <link href="https://wiki.gnome.org/Initiatives/GnomeGoals/AppIcon">Instalace ikon pro motivy</link> a <link href="http://freedesktop.org/wiki/Specifications/icon-theme-spec">Specifikace/icon-theme-spec na freedesktop.org</link>.</p>
  </section>

  <section id="autotools"><title>Sestavovací systém</title>
    <p>Aby se vaše aplikace stala opravdu součástí systému GNOME 3, je potřeba ji nainstalovat za pomoci autotools. Autotools nainstaluje všechny nutné soubory na správná místa.</p>
    <p>K tomu budete potřebovat následující soubory:</p>
    <links type="section"/>

      <section id="autogen"><title>autogen.sh</title>
        <code mime="application/x-shellscript" style="numbered">#!/bin/sh

set -e

test -n "$srcdir" || srcdir=`dirname "$0"`
test -n "$srcdir" || srcdir=.

olddir=`pwd`
cd "$srcdir"

# Toto nám spustí autoconf, automake, atd.
autoreconf --force --install

cd "$olddir"

if test -z "$NOCONFIGURE"; then
  "$srcdir"/configure "$@"
fi
</code>

      <p>Když máme soubor <file>autogen.sh</file> připravený a uložený, spusťte:</p>
      <screen><output style="prompt">$ </output><input>chmod +x autogen.sh</input></screen>
    </section>


    <section id="makefile"><title>Makefile.am</title>
      <code mime="application/x-shellscript" style="numbered"># Skutečný spustitelný program je nastaven do primitiva SCRIPTS
# # Prefix bin_ říká, kam to nakopírovat
bin_PROGRAMS = hello-world
hello_world_CFLAGS = $(gtk_CFLAGS)
hello_world_LDADD = $(gtk_LIBS)
hello_world_VALAFLAGS = --pkg gtk+-3.0
hello_world_SOURCES = hello-world.vala

desktopdir = $(datadir)/applications
desktop_DATA = \
	hello-world.desktop
</code>
    </section>


    <section id="configure"><title>configure.ac</title>
      <code mime="application/x-shellscript" style="numbered"># Tento soubor je zpracován pomocí autoconf, aby vytvořil skript configure
AC_INIT([Hello World], 1.0)
AM_INIT_AUTOMAKE([1.10 no-define foreign dist-xz no-dist-gzip])
AC_PROG_CC
AM_PROG_VALAC([0.16])
PKG_CHECK_MODULES(gtk, gtk+-3.0)
AC_CONFIG_FILES([Makefile hello-world.desktop])

AC_OUTPUT
</code>
    </section>


    <section id="readme"><title>README</title>
       <p>Informace, které by si měl uživatel pro začátek přečíst. Tento soubor může být prázdný.</p>

       <p>Když máme soubory <file>hello-world.c</file>, <file>hello-world.desktop.in</file>, <file>Makefile.am</file>, <file>configure.ac</file> a <file>autogen.sh</file> se správnými informacemi a v pořádku, může soubor <file>README</file> obsahovat následující instrukce:</p>
      <code mime="text/readme" style="numbered">To build and install this program:

./autogen.sh --prefix=/home/your_username/.local
make
make install

-------------
Running the first line above creates the following files:

aclocal.m4
autom4te.cache
config.log
config.status
configure
depcomp
hello-world
hello-world.c
hello-world.desktop
hello_world-hello-world.o
hello_world_vala.stamp
install-sh
missing
Makefile.in
Makefile

Running "make" links all the appropriate libraries.

Running "make install", installs the application in /home/your_username/.local/bin
and installs the hello-world.desktop file in /home/your_username/.local/share/applications

You can now run the application by typing "Hello World" in the Overview.

----------------
To uninstall, type:

make uninstall

----------------
To create a tarball type:

make distcheck

This will create hello-world-1.0.tar.xz
</code>
    </section>

    <!-- TODO: How to make a custom icon with autotools -->

  </section>
</page>
