Blame platform-demos/cs/02_welcome_to_the_grid.js.page

Packit 1470ea
Packit 1470ea
<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="topic" style="task" id="02_welcome_to_the_grid.js" xml:lang="cs">
Packit 1470ea
  <info>
Packit 1470ea
    <link type="guide" xref="beginner.js#tutorials"/>
Packit 1470ea
    <link type="seealso" xref="grid.js"/>
Packit 1470ea
    <link type="seealso" xref="image.js"/>
Packit 1470ea
    <link type="seealso" xref="label.js"/>
Packit 1470ea
    <revision version="0.1" date="2012-07-28" status="draft"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Taryn Fox</name>
Packit 1470ea
      <email its:translate="no">jewelfox@fursona.net</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc>Naučte se, jak rozvrhnout komponenty uživatelského rozhraní, jako jsou obrázky a popisky.</desc>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>2. Vítejte v mřížce</title>
Packit 1470ea
  <synopsis>
Packit 1470ea
    

V této lekci si ukážeme, jak vytvořit základní widgety nebo části uživatelského rozhraní GNOME, jako jsou obrázky (Image) a popisky (Label). Po té se naučíte, jak je uspořádat do mřížky (Grid), která vám umožní umístit widgety právě tam, kde je chcete.

Packit 1470ea
    <note style="warning">

Prošli jste již <link xref="hellognome.js">první lekcí v této sérii</link>? Než budete pokračovat, bylo by to dobré udělat.

</note>
Packit 1470ea
  </synopsis>
Packit 1470ea
Packit 1470ea
  <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="native">
Packit 1470ea
    <title>Buďme přirození</title>
Packit 1470ea
Packit 1470ea
    

V předchozí lekci jsme vytvořili něco, co bylo v podstatě okno GNOME s rámem pro webovou aplikaci. Vše, co jsme se potřebovali naučit z kódu specifického pro GNOME, se točilo okolo vložení WebView – widgetu obsahujícího naši aplikaci – do ApplicationWindow a jak mu říct, aby se zobrazil. K napsání vlastní aplikace byly použity HTML a JavaScript, podobně jako u webových stránek.

Packit 1470ea
    

Tentokrát budeme používat jen nativní widgety GNOME. Widget je prostě věc, jako zaškrtávací políčko nebo obrázek, a GNOME jich má širokou nabídku, ze které můžete vybírat. Nazýváme je „nativní“ widgety kvůli odlišení od věcí, jako jsou tlačítka nebo nadpisy ve webové aplikaci, kterou jsme napsali. Protože místo webového kódu použijeme GTK+, půjde o 100% aplikaci GNOME.

Packit 1470ea
    <note style="tip">

GTK+ je zkratka pro „GIMP Toolkit“. Je to nástrojová sada widgetů, po kterých můžeme sáhnout, když stavíme naši aplikaci. Původně byly napsány pro <link href="http://www.gimp.org/">GIMP</link>, což je svobodný grafický editor.

</note>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="setup">
Packit 1470ea
    <title>Nastavení vaší aplikace</title>
Packit 1470ea
Packit 1470ea
    

Než začneme tahat widgety z nástrojové sady GTK+, musíme nejdříve napsat základní kód, který aplikace vyžaduje a tak se s ním setkáte často.

Packit 1470ea
    
Packit 1470ea
#!/usr/bin/gjs
Packit 1470ea
Packit 1470ea
imports.gi.versions.Gtk = '3.0';
Packit 1470ea
const Gtk = imports.gi.Gtk;
Packit 1470ea
Packit 1470ea
    

Tato část je vždy na začátku kódu. V závislosti na tom, co přesně hodláte dělat, zde můžete deklarovat i další importy. To, co píšeme teď, je docela jednoduché, takže nám to bude stačit takto. Gtk pro widgety používající stabilní API 3.0.

Packit 1470ea
    

Když už o tom mluvíme:

Packit 1470ea
    
Packit 1470ea
class WelcomeToTheGrid {
Packit 1470ea
    // Vytvoří vlastní aplikaci
Packit 1470ea
    constructor() {
Packit 1470ea
        this.application = new Gtk.Application();
Packit 1470ea
Packit 1470ea
        // Napojí signály "activate" a "startup" k funkcím zpětného volání
Packit 1470ea
        this.application.connect('activate', this._onActivate.bind(this));
Packit 1470ea
        this.application.connect('startup', this._onStartup.bind(this));
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    // Funkce zpětného volání pro signál "activate" zobrazující okno při aktivaci
Packit 1470ea
    _onActivate: function () {
Packit 1470ea
        this._window.present ();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    // Funkce zpětného volání pro signál "startup" sestavující uživatelské rozhraní
Packit 1470ea
    _onStartup: function () {
Packit 1470ea
        this._buildUI ();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    

Toto je začátek vlastní aplikace a funkce _init ji vytvoří. Aplikace pak řekne funkci _buildUI, aby vytvořila ApplicationWindow, který budeme nazývat _window a našemu oknu se říká, aby se zobrazilo, kdykoliv je potřeba.

Packit 1470ea
    

Tato část je opět do značné míry vytvořena stylem kopírovat-a-vložit, akorát je potřeba dát aplikaci vždy jedinečný název.

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
    // Sestaví uživatelské rozhraní aplikace
Packit 1470ea
    _buildUI {
Packit 1470ea
Packit 1470ea
        // Vytvoří okno aplikace
Packit 1470ea
        this._window = new Gtk.ApplicationWindow({
Packit 1470ea
            application: this.application,
Packit 1470ea
            window_position: Gtk.WindowPosition.CENTER,
Packit 1470ea
            border_width: 10,
Packit 1470ea
            title: "Welcome to the Grid"});
Packit 1470ea
Packit 1470ea
    

Nakonec spustíme funkci _buildUI vytvořením nového ApplicationWindow. Určíme naší aplikaci, že se má objevit uprostřed obrazovky a že by mělo být nejméně 10 pixelů mezi vnější hranou a widgety uvnitř. Rovněž ji přidělíme název, který se objeví v záhlaví okna.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="toolbox">
Packit 1470ea
    <title>Po čem sáhnout do nástrojové sady GTK+</title>
Packit 1470ea
    

Které widgety bychom měli použít? Řekněme, že chceme napsat aplikaci, která vypadá nějak takto:

Packit 1470ea
Packit 1470ea
    <media type="image" mime="image/png" src="media/02_jsgrid_01.png"/>
Packit 1470ea
Packit 1470ea
    

K tomu budeme potřebovat aspoň obrázek a textový popisek. Začněme obrázkem:

Packit 1470ea
    
Packit 1470ea
        // Vytvoří obrázek
Packit 1470ea
        this._image = new Gtk.Image ({ file: "gnome-image.png" });
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

Obrázek použitý v tomto příkladu si můžete stáhnout <link href="https://live.gnome.org/TarynFox?action=AttachFile&do=get&target=gnome-image.png">zde</link>. Zajistěte, aby byl uložený ve stejné složce, jako kód, který píšete.

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
        // Vytvoří popisek
Packit 1470ea
        this._label = new Gtk.Label ({ label: "Welcome to GNOME, too!" });
Packit 1470ea
Packit 1470ea
    

Tento kód pod něj přidá popisek. Zde můžete vidět, jak se vytváří widgety. Všechny jsou součástí Gtk a mi jim udáváme vlastnosti, kterými si přizpůsobíme, jak se mají chovat. V tomto případě widgetu Image nastavíme vlastnost file na název souboru s obrázkem a popisku vlastnost label na větu, kterou chceme mít pod obrázkem.

Packit 1470ea
    <note style="tip">

Ano, to že má Label vlastnost label vypadá jako zdvojování, ale není tomu tak. Ostatní widgety, které obsahují text, mají vlastnost label, takže kvůli jednotnosti je tomu tak i u widgetu Label.

</note>
Packit 1470ea
    

Tyto widgety nemůžeme do našeho okna jen tak přidat ve správném pořadí, podobně jako se to dělá s prvky HTML na webové stránce. Kvůli tomu, že ApplicationWindow může obsahovat jen jeden widget.

Packit 1470ea
    

Co s tím? Vytvoříme kontejnerový widget, který může obsahovat více než jeden widget a umí je uspořádat. Pohleďte: mřížka.

Packit 1470ea
    
Packit 1470ea
        // Vytvoří mřížku
Packit 1470ea
        this._grid = new Gtk.Grid ();
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

Neudali jsme jí žádné vlastnosti. To uděláme až později, až se naučíme s mřížkou pořádně zacházet. Nejprve pojďme do námi vytvořené mřížky připojit obrázek a popisek.

Packit 1470ea
    
Packit 1470ea
        // Připojení obrázku a popisku do mřížky
Packit 1470ea
        this._grid.attach (this._image, 0, 0, 1, 1);
Packit 1470ea
        this._grid.attach (this._label, 0, 1, 1, 1);
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

Tento kód vypadá strašně složitě, ale není tomu tak. Zde je popsáno, co jednotlivá čísla znamenají:

Packit 1470ea
    <list type="numbered">
Packit 1470ea
      <item>

První číslo je pozice ve směru zleva doprava, na kterou se má widget umístit, počínaje od 0. Widget, který použije 0, patří úplně doleva.

</item>
Packit 1470ea
      <item>

Druhé číslo je pozice ve směru shora dolů, na kterou se má daný widget umístit, počínaje od 0. Popisek má být pod obrázkem, takže widget Image dostane pozici 0 a Label pozici 1.

</item>
Packit 1470ea
      <item>

Třetí a čtvrté číslo udává kolik sloupců a řádků má widget okupovat. Za minutku uvidíme, jak to funguje.

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    
Packit 1470ea
        // Přidá mřížku do okna
Packit 1470ea
        this._window.add (this._grid);
Packit 1470ea
Packit 1470ea
        // Zobrazí okno a všechny jeho synovské widgety
Packit 1470ea
        this._window.show_all();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
};
Packit 1470ea
Packit 1470ea
// Spustí aplikaci
Packit 1470ea
let app = new WelcomeToTheGrid ();
Packit 1470ea
app.application.run (ARGV);
Packit 1470ea
Packit 1470ea
    

Nyní máme vytvořenou mřížku a do ní připojené všechny naše widgety, přidali jsme ji do okna a oknu, jako poslední část funkce _buildUI, řekli, ať se zobrazí. Jako vždy končíme vytvořením nové instance třídy aplikace a jejím spuštěním.

Packit 1470ea
    

Uložte svoji aplikaci jako <file>welcome_to_the_grid.js</file>. Následně ji spusťte tak, že otevřete terminál, přepnete se do složky, ve které je vaše aplikace, a napíšete:

Packit 1470ea
      <screen> <output style="prompt">$ </output>gjs welcome_to_the_grid.js </screen>
Packit 1470ea
Packit 1470ea
    <media type="image" mime="image/png" src="media/02_jsgrid_02.png"/>
Packit 1470ea
Packit 1470ea
    

Ono to funguje! Ale… Nevypadá to úplně hezky. Proč je popisek nalepený těsně na obrázek? To jednak není estetické a jedna se to špatně čte. Co s tím můžeme udělat?

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="tweaking">
Packit 1470ea
    <title>Vyladění mřížky</title>
Packit 1470ea
Packit 1470ea
    

Jedna z věcí, kterou můžeme udělat, je udat popisku při vytváření vlastnost margin_top. Funguje to podobně, jako nastavení vlastnosti „margin“ u prvků HTML pomocí stylování CSS.

Packit 1470ea
    
Packit 1470ea
        // Vytvoří popisek
Packit 1470ea
        this._label = new Gtk.Label ({
Packit 1470ea
            label: "Welcome to GNOME, too!",
Packit 1470ea
            margin_top: 20 });
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

Samozřejmě, že když popisek nahradíme něčím jiným, nebo přidáme další widget, musíme nastavení margin_top zopakovat i u něj. Jinak s končíme s něčím takovýmto:

Packit 1470ea
    <media type="image" mime="image/png" src="media/02_jsgrid_03.png"/>
Packit 1470ea
Packit 1470ea
    

Mohli bychom udat vlastnost margin_bottom u obrázku, ale to by nefungovalo správně, když by nový popisek byl v jiném sloupci. Takže pojďme to místo toho zkusit takto:

Packit 1470ea
    
Packit 1470ea
        // Vytvoří mřížku
Packit 1470ea
        this._grid = new Gtk.Grid ({
Packit 1470ea
            row_spacing: 20 });
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

To zajistí, že vodorovně mezi všemi řádky bude vždy prostor 20 pixelů.

Packit 1470ea
    <note style="tip">

Ano, obdobně můžeme nastavit vlastnost mřížky column_spacing nebo vlastnosti margin_left a margin_right u libovolného widgetu. Jestli chcete, vyzkoušejte si to!

</note>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="adding">
Packit 1470ea
    <title>Přidání dalších widgetů</title>
Packit 1470ea
Packit 1470ea
    

Pokud bychom chtěli přidat druhý popisek, jak bychom to vlastně měli udělat, aby to na pohled vypadalo, že tam patří? Jedním ze způsobů je obrázek nahoře umístit na střed, tak aby byl nad oběma popisky a ne jen nad jedním vlevo. To je ta situace, kdy ostatní čísla u metody pro připojení do mřížky, přijdou vhod:

Packit 1470ea
    
Packit 1470ea
        // Vytvoří druhý popisek
Packit 1470ea
        this._labelTwo = new Gtk.Label ({
Packit 1470ea
            label: "The cake is a pie." });
Packit 1470ea
Packit 1470ea
        // Připojí obrázek a popisky do mřížky
Packit 1470ea
        this._grid.attach (this._image, 0, 0, 2, 1);
Packit 1470ea
        this._grid.attach (this._label, 0, 1, 1, 1);
Packit 1470ea
        this._grid.attach (this._labelTwo, 1, 1, 1, 1);
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

Po té, co vytvoříme druhý popisek, připojíme jej do mřížky napravo od prvního popisku. Pamatujete, že první dvě čísla udávají číslo sloupce a řádku zleva doprava a shora dolů, počítáno od 0? Takže, když je první popisek v sloupci 0 a řádku 1, můžeme vložit druhý do sloupce 1 a řádku 1, aby byl napravo od prvního.

Packit 1470ea
    

Podívejme se na číslo 2 ve výrazu pro připojení obrázku. V něm je ten trik. Toto číslo znamená, přes kolik sloupců se obrázek roztáhne, pamatujete? Takže, když to dáme vše dohromady, dostaneme něco takového:

Packit 1470ea
    <media type="image" mime="image/png" src="media/02_jsgrid_04.png"/>
Packit 1470ea
Packit 1470ea
    

Jsou zde dvě věci, které byste měli vzít na vědomí.

Packit 1470ea
    <list>
Packit 1470ea
      <item>

Natavení obrázku, aby zabíral dva sloupce, přímo obrázek nijak neroztáhne. Místo toho roztáhne neviditelný box obsazený widgetem Image tak, aby zaplnil oba sloupce a obrázek pak umístí do středu tohoto boxu.

</item>
Packit 1470ea
      <item>

I když jsme nastavili vlastnosti row_spacing u mřížky a border_width u okna aplikace, nemáme zatím nic, co by vložilo okraj mezi dva popisky. Dříve byly odděleny díky tomu, že obrázek zabíral jen jeden sloupec, ale nyní, když je roztažen přes oba sloupce, nevidí GNOME důvod k tomu, držet popisky oddělené.

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

Existují aspoň tři způsoby, jak vyřešit druhou záležitost. Jako první můžeme nastavit u jednoho z popisků margin_left nebo margin_right:

Packit 1470ea
    <media type="image" mime="image/png" src="media/02_jsgrid_05.png"/>
Packit 1470ea
Packit 1470ea
    

Zadruhé můžeme nastavit vlastnost mřížky column_homogenous na true.

Packit 1470ea
    
Packit 1470ea
        // Vytvoří mřížku
Packit 1470ea
        this._grid = new Gtk.Grid ({
Packit 1470ea
            column_homogeneous: true,
Packit 1470ea
            row_spacing: 20 });
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

Ve výsledku to bude vypadat nějak takto:

Packit 1470ea
    <media type="image" mime="image/png" src="media/02_jsgrid_06.png"/>
Packit 1470ea
Packit 1470ea
    

A zatřetí můžeme nastavit vlastnost mřížky column_spacing, stejným způsobem jako její vlastnost row_spacing.

Packit 1470ea
    
Packit 1470ea
        // Vytvoří mřížku
Packit 1470ea
        this._grid = new Gtk.Grid ({
Packit 1470ea
            column_spacing: 20,
Packit 1470ea
            row_spacing: 20 });
Packit 1470ea
Packit 1470ea
    

Ve výsledku to bude vypadat takto:

Packit 1470ea
    <media type="image" mime="image/png" src="media/02_jsgrid_07.png"/>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="stock">
Packit 1470ea
    <title>Používání standardních obrázků</title>
Packit 1470ea
Packit 1470ea
    

GNOME má připravenou spoustu standardních obrázků, které můžete použít, kdy se necítíte na vytvoření vlastních nebo chcete použít obecně známou ikonu. Zde je, jak vytvořit standardní obrázek, pro srovnání s tím, jak vytvořit ten normální:

Packit 1470ea
    
Packit 1470ea
        // Vytvoří obrázek
Packit 1470ea
        this._image = new Gtk.Image ({ file: "gnome-image.png" });
Packit 1470ea
Packit 1470ea
        // Vytvoří druhý obrázek pomocí standardní ikony
Packit 1470ea
        this._icon = new Gtk.Image ({ stock: 'gtk-about' });
Packit 1470ea
Packit 1470ea
    

Po té jej připojíme do mřížky nalevo od prvního popisku. (V tomto příkladu nevyužijeme druhý popisek.)

Packit 1470ea
    
Packit 1470ea
        // Připojí obrázky a popisek do mřížky
Packit 1470ea
        this._grid.attach (this._image, 0, 0, 2, 1);
Packit 1470ea
        this._grid.attach (this._icon,  0, 1, 1, 1);
Packit 1470ea
        this._grid.attach (this._label, 1, 1, 1, 1);
Packit 1470ea
Packit 1470ea
    

Po spuštění dostaneme něco takového:

Packit 1470ea
    <media type="image" mime="image/png" src="media/02_jsgrid_08.png"/>
Packit 1470ea
Packit 1470ea
    

Je to to, co vypadá jako standardní ikona „O aplikaci“ (About). Na seznam všech standardních položek, počínaje gtk-about, se můžete podívat v <link href="https://developer.gnome.org/gtk3/3.4/gtk3-Stock-Items.html#GTK-STOCK-ABOUT:CAPS">dokumentaci pro vývojáře GNOME</link>. Byla napsána pro programátory v jazyce C, ale ten nepotřebujete znát k tomu, abyste ji mohli používat. Stačí se jen podívat na část v uvozovkách, jako je "gtk-about" a tuto část zkopírovat, když chcete použít ikonu vedle ní.

Packit 1470ea
    <note style="tip">

Okolo 'gtk-about' jsem v kódu použili jednoduché uvozovky, protože na rozdíl od jiných textových řetězců, které máme v dvojitých uvozovkách, tento nebude nikdy potřeba překládat do jiného národního jazyka. Ve skutečnosti, kdyby byl přeložen, tak by došlo k porušení ikony, protože její název musí být pořád "gtk-about", bez ohledu na jazyk, ve kterém je uživatelské rozhraní.

</note>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
  <section id="next">
Packit 1470ea
    <title>A co dál?</title>
Packit 1470ea
    

Než přikročíme k další lekci, zkusme něco udělat trochu jinak:

Packit 1470ea
    
Packit 1470ea
        // Vytvoří tlačítko
Packit 1470ea
        this._button = new Gtk.Button ({
Packit 1470ea
            label: "Welcome to GNOME, too!"});
Packit 1470ea
Packit 1470ea
        // Připojí obrázky a tlačítka do mřížky
Packit 1470ea
        this._grid.attach (this._image,  0, 0, 2, 1);
Packit 1470ea
        this._grid.attach (this._icon,   0, 1, 1, 1);
Packit 1470ea
        this._grid.attach (this._button, 1, 1, 1, 1);
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

Je to pravda, změnili jsme popisek na tlačítko jen pouhou změnou názvu widgetu! Zjistíte však, že když aplikaci spustíte a kliknete na něj, nic nedělá. Jak jej přimět, aby něco dělalo? To je to, co se dozvíte v <link xref="03_getting_the_signal.js">naší následující lekci</link>.

Packit 1470ea
    

Jestli se vám to líbí, zkuste věnovat nějaký čas experimentování s mřížkami, popisky a obrázky, včetně standardních obrázků.

Packit 1470ea
    <note style="tip">

Jedním z triků, jak vytvořit složitější rozvržení, je vnoření mřížek do sebe. To umožňuje seskupit dohromady související widgety a snadno měnit jejich uspořádání. Pokud vás zajímá, jak se to dělá, podívejte na na ukázkový kód k widgetu <link xref="radiobutton.js">RadioButton</link>.

</note>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="complete">
Packit 1470ea
    <title>Úplný kód ukázky</title>
Packit 1470ea
#!/usr/bin/gjs
Packit 1470ea
Packit 1470ea
imports.gi.versions.Gtk = '3.0';
Packit 1470ea
const Gtk = imports.gi.Gtk;
Packit 1470ea
Packit 1470ea
class WelcomeToTheGrid {
Packit 1470ea
Packit 1470ea
    // Vytvoří vlastní aplikaci
Packit 1470ea
    constructor() {
Packit 1470ea
        this.application = new Gtk.Application();
Packit 1470ea
Packit 1470ea
    // Napojí signály "activate" a "startup" k funkcím zpětného volání
Packit 1470ea
    this.application.connect('activate', this._onActivate.bind(this));
Packit 1470ea
    this.application.connect('startup', this._onStartup.bind(this));
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    // Funkce zpětného volání pro signál "activate" zobrazujicí okno při aktivaci
Packit 1470ea
    _onActivate() {
Packit 1470ea
        this._window.present();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    // Funkce zpětného volání pro signál "startup" sestavující uživatelské rozhraní
Packit 1470ea
    _onStartup() {
Packit 1470ea
        this._buildUI ();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
Packit 1470ea
Packit 1470ea
    // Sestaví uživatelské rozhraní aplikace
Packit 1470ea
    _buildUI() {
Packit 1470ea
Packit 1470ea
        // Vytvoří okno aplikace
Packit 1470ea
        this._window = new Gtk.ApplicationWindow({
Packit 1470ea
            application: this.application,
Packit 1470ea
            window_position: Gtk.WindowPosition.CENTER,
Packit 1470ea
            border_width: 10,
Packit 1470ea
            title: "Welcome to the Grid"});
Packit 1470ea
Packit 1470ea
        // Vytvoří mřížku
Packit 1470ea
        this._grid = new Gtk.Grid ({
Packit 1470ea
            // column_homogeneous: true,
Packit 1470ea
            // column_spacing: 20,
Packit 1470ea
            row_spacing: 20 });
Packit 1470ea
Packit 1470ea
        // Vytvoří obrázek
Packit 1470ea
        this._image = new Gtk.Image ({ file: "gnome-image.png" });
Packit 1470ea
Packit 1470ea
        // Vytvoří druhý obrázek pomocí standardní ikony
Packit 1470ea
        this._icon = new Gtk.Image ({ stock: 'gtk-about' });
Packit 1470ea
Packit 1470ea
        // Vytvoří popisek
Packit 1470ea
        this._label = new Gtk.Label ({
Packit 1470ea
            label: "Welcome to GNOME, too!",
Packit 1470ea
            /* margin_top: 20 */ });
Packit 1470ea
Packit 1470ea
        /* Vytvoří druhý popisek
Packit 1470ea
        this._labelTwo = new Gtk.Label ({
Packit 1470ea
            label: "The cake is a pie." }); */
Packit 1470ea
Packit 1470ea
        /* Vytvoří tlačítko
Packit 1470ea
        this._button = new Gtk.Button ({
Packit 1470ea
            label: "Welcome to GNOME, too!"}); */
Packit 1470ea
Packit 1470ea
        // Připojí obrázek a tlačítka do mřížky
Packit 1470ea
        this._grid.attach (this._image,  0, 0, 2, 1);
Packit 1470ea
        this._grid.attach (this._icon,   0, 1, 1, 1);
Packit 1470ea
        this._grid.attach (this._label,  1, 1, 1, 1);
Packit 1470ea
Packit 1470ea
        // this._grid.attach (this._label, 0, 1, 1, 1);
Packit 1470ea
        // this._grid.attach (this._labelTwo, 1, 1, 1, 1);
Packit 1470ea
Packit 1470ea
        // this._grid.attach (this._button, 1, 1, 1, 1);
Packit 1470ea
Packit 1470ea
        // Přidá mřížku do okna
Packit 1470ea
        this._window.add (this._grid);
Packit 1470ea
Packit 1470ea
        // Zobrazí okno a všechny jeho synovské widgety
Packit 1470ea
        this._window.show_all();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
};
Packit 1470ea
Packit 1470ea
// Spustí aplikaci
Packit 1470ea
let app = new WelcomeToTheGrid ();
Packit 1470ea
app.application.run (ARGV);
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
</page>