|
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="guide" style="task" id="switch.js" xml:lang="cs">
|
|
Packit |
1470ea |
<info>
|
|
Packit |
1470ea |
<title type="text">Switch (JavaScript)</title>
|
|
Packit |
1470ea |
<link type="guide" xref="beginner.js#buttons"/>
|
|
Packit |
1470ea |
<revision version="0.1" date="2012-06-18" 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>Posuvný vypínač, který se umí překlápět mezi stavy zapnuto a vypnuto</desc>
|
|
Packit |
1470ea |
</info>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<title>Switch</title>
|
|
Packit |
1470ea |
<media type="image" mime="image/png" src="media/switchanimals.png"/>
|
|
Packit |
1470ea |
Vypínač má dvě polohy, zapnuto a vypnuto. V tomto příkladu si ukážeme, jak použít více vypínačů dohromady k řízení, který obrázek <link xref="image.js">Image</link> bude v okně zobrazen. Obrázky použité v tomto příkladu <link href="https://live.gnome.org/TarynFox?action=AttachFile&do=get&target=Animal+Photos.zip">můžete stáhnout zde</link>.
|
|
Packit |
1470ea |
<note>Okno může obsahovat ikonu „poškozený obrázek“ místo obrázku, když se soubor s obrázkem s názvem <file>redfox.png</file>, <file>muteswan.png</file>, <file>fruitbat.png</file> nebo <file>gentoopenguin.png</file> nenachází ve stejné složce, jako program. Kód a obrázky si můžete změnit dle své libosti. Fotografie s licencí Creative Commons použité v tomto příkladu byly pořízeny z následujících zdrojů a zmenšeny na 640 × 425 pixelů:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item><link href="http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.jpg">Fotografie červené lišky</link> od Rob Lee, licencováno pod <link href="http://creativecommons.org/licenses/by/2.0/deed.en">CC-By</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.jpg">Fotografie tučňáka Gentoo</link> od Ken Funakoshi, licencováno pod <link href="http://creativecommons.org/licenses/by-sa/2.0/deed.en">CC-By-SA</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://www.flickr.com/photos/shekgraham/127431519/in/photostream/">Fotografie kaloně</link> od Shek Graham, licencováno pod <link href="http://creativecommons.org/licenses/by/2.0/deed.en">CC-By</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://commons.wikimedia.org/wiki/File:Mute_Swan-Mindaugas_Urbonas.jpg">Fotografie mlčící labutě</link> od Mindaugas Urbonas, licencováno pod <link href="http://creativecommons.org/licenses/by-sa/2.5/deed.en">CC-By-SA</link> </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
Informace o zásluhách a licencích vztahujících se k fotografiím jsou zobrazeny v okně <link xref="aboutdialog.js">AboutDialog</link>. Vždy, když používáte <link href="http://creativecommons.org">práce licencované pod Creative Commons</link>, pamatujte na zásluhy původních autorů! </note>
|
|
Packit |
1470ea |
<links type="section"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="imports">
|
|
Packit |
1470ea |
<title>Importované knihovny</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
#!/usr/bin/gjs
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
const Gio = imports.gi.Gio;
|
|
Packit |
1470ea |
const Gtk = imports.gi.Gtk;
|
|
Packit |
1470ea |
const Lang = imports.lang;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Toto jsou knihovny, které potřebujeme naimportovat, aby aplikace běžela. Pamatujte si, že řádek, který GNOME říká, že používáme Gjs, musí být vždy na začátku.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="applicationwindow">
|
|
Packit |
1470ea |
<title>Vytvoření okna aplikace</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
const SwitchExample = new Lang.Class({
|
|
Packit |
1470ea |
Name: 'Switch Example',
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří vlastní aplikaci
|
|
Packit |
1470ea |
_init: function() {
|
|
Packit |
1470ea |
this.application = new Gtk.Application({
|
|
Packit |
1470ea |
application_id: 'org.example.jsswitch',
|
|
Packit |
1470ea |
flags: Gio.ApplicationFlags.FLAGS_NONE
|
|
Packit |
1470ea |
});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Připojí signály "activate" a "startup" k funkcím zpětného volání
|
|
Packit |
1470ea |
this.application.connect('activate', Lang.bind(this, this._onActivate));
|
|
Packit |
1470ea |
this.application.connect('startup', Lang.bind(this, this._onStartup));
|
|
Packit |
1470ea |
},
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Funkce zpětného volání pro signál "activate" zobrazujicí 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._initMenus();
|
|
Packit |
1470ea |
this._buildUI ();
|
|
Packit |
1470ea |
},
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Všechen kód této ukázky je ve třídě SwitchExample . Výše uvedený kód vytvoří <link href="http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Application.html">Gtk.Application</link> pro naše widgety a okno, ve kterém budou.
|
|
Packit |
1470ea |
<note>Než zavoláme _buildUI , aby se vytvořilo okno a widgety v něm, potřebujeme zavolat funkci _initMenus , která GNOME řekne, aby vytvořilo nabídku. Reálný kód pro _initMenus můžeme vložit za kód _buildUI , jelikož nezáleží na tom, v jakém pořadí jsou vloženy, protože _initMenus je zavoláno jako první z _onStartup . </note>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Sestaví uživatelské rozhraní aplikace
|
|
Packit |
1470ea |
_buildUI: function() {
|
|
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: 20,
|
|
Packit |
1470ea |
title: "Animal Creator"});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Funkce _buildUI je místo, ze kterého voláme všechen kód, který vytváří uživatelské rozhraní aplikace. Prvním krokem je vytvoření nového <link xref="GtkApplicationWindow.js">Gtk.ApplicationWindow</link>, do kterého vložíme všechny naše widgety.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="button">
|
|
Packit |
1470ea |
<title>Vytvoření vypínačů</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří widget Image a nastaví jeho výchozí obrázek
|
|
Packit |
1470ea |
this._image = new Gtk.Image ({file: "redfox.png"});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Neprve vytvoříme <link xref="image.js">Image</link>, který budou vypínače řídit. Pamatujte, že soubor s názvem <file>redfox.png</file> musí být ve stejné složce, jako tato aplikace.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří popisek pro první vypínač
|
|
Packit |
1470ea |
this._flyLabel = new Gtk.Label ({
|
|
Packit |
1470ea |
label: "Make it fly",
|
|
Packit |
1470ea |
margin_right: 30});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří první vypínač a nastaví jeho výchozí polohu
|
|
Packit |
1470ea |
this._flySwitch = new Gtk.Switch ({active: false});
|
|
Packit |
1470ea |
this._flySwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří popisek pro druhý vypínač
|
|
Packit |
1470ea |
this._birdLabel = new Gtk.Label ({
|
|
Packit |
1470ea |
label: "Make it a bird",
|
|
Packit |
1470ea |
margin_right: 30});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří druhý vypínač
|
|
Packit |
1470ea |
this._birdSwitch = new Gtk.Switch ({active: false});
|
|
Packit |
1470ea |
this._birdSwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Použijeme <link xref="label.js">Label</link> k označení každého z vypínačů a necháme mu malý okraj napravo, aby text nebyl nalepený hned na vypínač. Po té vytvoříme vypínače a nastavíme je na vypnuté ve výchozím stavu.
|
|
Packit |
1470ea |
Signál, který vypínač vyšle při svém přepnutí do polohy vypnuto nebo zapnuto se nazývá "notify::active" . Po vytvoření každého z vypínačů napojíme tento signál na funkci nazvanou _switchFlip . Když máte více vypínačů, kdy každý dělá něco jiného, můžete je chtít napojit na různé funkce, ale zde jsou oba použity pro stejnou věc: řízení pomocí _image , který obrázek se zobrazí.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří mřížku pro popisky a vypínače pod obrázkem
|
|
Packit |
1470ea |
this._UIGrid = new Gtk.Grid ({
|
|
Packit |
1470ea |
halign: Gtk.Align.CENTER,
|
|
Packit |
1470ea |
valign: Gtk.Align.CENTER,
|
|
Packit |
1470ea |
margin_top: 20});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Připojí popisky a vypínače do mřížky
|
|
Packit |
1470ea |
this._UIGrid.attach (this._flyLabel, 0, 0, 1, 1);
|
|
Packit |
1470ea |
this._UIGrid.attach (this._flySwitch, 1, 0, 1, 1);
|
|
Packit |
1470ea |
this._UIGrid.attach (this._birdLabel, 0, 1, 1, 1);
|
|
Packit |
1470ea |
this._UIGrid.attach (this._birdSwitch, 1, 1, 1, 1);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří hlavní mřížku pro vložení obrázku a mřížky s ovládacími prvky
|
|
Packit |
1470ea |
this._mainGrid = new Gtk.Grid ({
|
|
Packit |
1470ea |
halign: Gtk.Align.CENTER,
|
|
Packit |
1470ea |
valign: Gtk.Align.CENTER });
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Připojí obrázek a mřížku s ovládacími prvky do hlavní mřížky
|
|
Packit |
1470ea |
this._mainGrid.attach (this._image, 0, 0, 1, 1);
|
|
Packit |
1470ea |
this._mainGrid.attach (this._UIGrid, 0, 1, 1, 1);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Jako první vytvoříme <link xref="grid.js">Grid</link> pro popisky a vypínače, abychom je uspořádali do matice 2 × 2 s okrajem mezi nimi a obrázkem. Pak tuto mřížku vložíme do větší mřížky 2 × 1, která má nahoře obrázek a dole mřížku s popisky a vypínači.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Přidá hlavní mřížku do okna
|
|
Packit |
1470ea |
this._window.add (this._mainGrid);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Zobrazí okno a všechny jeho synovské widgety
|
|
Packit |
1470ea |
this._window.show_all();
|
|
Packit |
1470ea |
},
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Nakonec přidáme větší mřížku do okna a oknu řekneme, že má zobrazit sebe a všechny widgety uvnitř sebe.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="switch-handler">
|
|
Packit |
1470ea |
<title>Funkce, která obsluhuje situaci, kdy je vypínač přepnut</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
_switchFlip: function() {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Změní obrázek podle toho, v jaké poloze je vypínač
|
|
Packit |
1470ea |
if (this._flySwitch.get_active()) {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
if (this._birdSwitch.get_active()) this._image.set_from_file ("muteswan.png");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
else this._image.set_from_file ("fruitbat.png");
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
else {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
if (this._birdSwitch.get_active()) this._image.set_from_file ("gentoopenguin.png");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
else this._image.set_from_file ("redfox.png");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
},
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Pokaždé, když je přepnut vypínač, tato funkce zkontroluje, které ze dvou vypínačů jsou zapnuté, za použití funkce get_active() , která je součástí widgetu Switch . Pak příslušně změní obrázek. Názvy souborů si můžete měnit dle libosti, čímž se patřičně změní použité obrázky.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="about">
|
|
Packit |
1470ea |
<title>Vytvoření AboutDialog</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
_initMenus: function() {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Sestaví aplikační nabídku, takže můžeme mít volby About a Quit
|
|
Packit |
1470ea |
let menu = new Gio.Menu();
|
|
Packit |
1470ea |
menu.append("About", 'app.about');
|
|
Packit |
1470ea |
menu.append("Quit",'app.quit');
|
|
Packit |
1470ea |
this.application.set_app_menu(menu);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Napojí akci "about" na funkci _showAbout()
|
|
Packit |
1470ea |
let aboutAction = new Gio.SimpleAction ({ name: 'about' });
|
|
Packit |
1470ea |
aboutAction.connect('activate', Lang.bind(this,
|
|
Packit |
1470ea |
function() {
|
|
Packit |
1470ea |
this._showAbout();
|
|
Packit |
1470ea |
}));
|
|
Packit |
1470ea |
this.application.add_action(aboutAction);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Napojí akci "quit" na funkci, která zavře okno
|
|
Packit |
1470ea |
let quitAction = new Gio.SimpleAction ({ name: 'quit' });
|
|
Packit |
1470ea |
quitAction.connect('activate', Lang.bind(this,
|
|
Packit |
1470ea |
function() {
|
|
Packit |
1470ea |
this._window.destroy();
|
|
Packit |
1470ea |
}));
|
|
Packit |
1470ea |
this.application.add_action(quitAction);
|
|
Packit |
1470ea |
},
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Prvním krokem je sestavení <link xref="gmenu.js">GMenu</link>, do kterého položka <gui>About</gui> patří. Jedná se o nabídku, která se objeví, když kliknete na název aplikace v levém horním rohu obrazovky, vedle nabídky <gui>Činnosti</gui>. Naše nabídka má jen dvě položky: About a Quit.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
_showAbout: function () {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Pole řetězců se jmény lidí, kteří se na projektu podílejí
|
|
Packit |
1470ea |
var artists = ['Rob Lee http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.jpg',
|
|
Packit |
1470ea |
'Ken Funakoshi http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.jpg',
|
|
Packit |
1470ea |
'Shek Graham http://www.flickr.com/photos/shekgraham/127431519/in/photostream/',
|
|
Packit |
1470ea |
'Mindaugas Urbonas http://commons.wikimedia.org/wiki/File:Mute_Swan-Mindaugas_Urbonas.jpg'];
|
|
Packit |
1470ea |
var authors = ["GNOME Documentation Team"];
|
|
Packit |
1470ea |
var documenters = ["GNOME Documentation Team"];
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří dialogové okno „O aplikaci“
|
|
Packit |
1470ea |
let aboutDialog = new Gtk.AboutDialog({
|
|
Packit |
1470ea |
title: "AboutDialog Example",
|
|
Packit |
1470ea |
program_name: "Animal Creator",
|
|
Packit |
1470ea |
copyright: "Copyright \xa9 2012 GNOME Documentation Team\n\nRed fox photo licensed CC-By by Rob Lee\nGentoo penguin photo licensed CC-By-SA by Ken Funakoshi\nFruit bat photo licensed CC-By by Shek Graham\nMute swan photo licensed CC-By-SA by Mindaugas Urbonas\nLinks to the originals are available under Credits.\n\nHave you hugged a penguin today?",
|
|
Packit |
1470ea |
artists: artists,
|
|
Packit |
1470ea |
authors: authors,
|
|
Packit |
1470ea |
documenters: documenters,
|
|
Packit |
1470ea |
website: "http://developer.gnome.org",
|
|
Packit |
1470ea |
website_label: "GNOME Developer Website" });
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Připojí dialogové okno „O aplikaci“ k oknu
|
|
Packit |
1470ea |
aboutDialog.modal = true;
|
|
Packit |
1470ea |
aboutDialog.transient_for = this._window;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Zobrazí dialogové okno „O aplikaci“
|
|
Packit |
1470ea |
aboutDialog.show();
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Napojí tlačítko Close na signál "destroy" pro dialogové okno
|
|
Packit |
1470ea |
aboutDialog.connect('response', function() {
|
|
Packit |
1470ea |
aboutDialog.destroy();
|
|
Packit |
1470ea |
});
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Widget <link xref="aboutdialog.js">AboutDialog</link> má spoustu různých věcí, které můžete nastavit, abyste ocenili zásluhy každého, kdo na aplikaci pracoval, a nechali vzkaz komukoliv, kdo to bude číst. V tomto případě část s autorskými právy obsahuje naši poznámku a přičítá zásluhy původním fotografům, zatímco část s umělci, když kliknete na tlačítko <gui>Credits</gui>, uvádí seznam fotografů s odkazy na originální fotografie. Webová adresa URL vložená za jejich jména v poli způsobí, že jména budou v části <gui>Credists</gui> fungovat jako živé odkazy.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Spustí aplikaci
|
|
Packit |
1470ea |
let app = new SwitchExample ();
|
|
Packit |
1470ea |
app.application.run (ARGV);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Nakonec vytvoříme novou instanci výsledné třídy SwitchExample a spustíme aplikaci.
|
|
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 |
|
|
Packit |
1470ea |
const Gio = imports.gi.Gio;
|
|
Packit |
1470ea |
const Gtk = imports.gi.Gtk;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
class SwitchExample {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří vlastní aplikaci
|
|
Packit |
1470ea |
constructor() {
|
|
Packit |
1470ea |
this.application = new Gtk.Application({
|
|
Packit |
1470ea |
application_id: 'org.example.jsswitch'
|
|
Packit |
1470ea |
});
|
|
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._initMenus();
|
|
Packit |
1470ea |
this._buildUI();
|
|
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: 20,
|
|
Packit |
1470ea |
title: "Animal Creator"});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří widget Image a nastaví jeho výchozí obrázek
|
|
Packit |
1470ea |
this._image = new Gtk.Image ({file: "redfox.png"});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří popisek pro první vypínač
|
|
Packit |
1470ea |
this._flyLabel = new Gtk.Label ({
|
|
Packit |
1470ea |
label: "Make it fly",
|
|
Packit |
1470ea |
margin_right: 30});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří první vypínač a nastaví jeho výchozí polohu
|
|
Packit |
1470ea |
this._flySwitch = new Gtk.Switch ({active: false});
|
|
Packit |
1470ea |
this._flySwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří popisek pro druhý vypínač
|
|
Packit |
1470ea |
this._birdLabel = new Gtk.Label ({
|
|
Packit |
1470ea |
label: "Make it a bird",
|
|
Packit |
1470ea |
margin_right: 30});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří druhý vypínač
|
|
Packit |
1470ea |
this._birdSwitch = new Gtk.Switch ({active: false});
|
|
Packit |
1470ea |
this._birdSwitch.connect ('notify::active', this._switchFlip.bind(this));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří mřížku pro popisky a vypínače pod obrázkem
|
|
Packit |
1470ea |
this._UIGrid = new Gtk.Grid ({
|
|
Packit |
1470ea |
halign: Gtk.Align.CENTER,
|
|
Packit |
1470ea |
valign: Gtk.Align.CENTER,
|
|
Packit |
1470ea |
margin_top: 20});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Připojí popisky a vypínače do mřížky
|
|
Packit |
1470ea |
this._UIGrid.attach (this._flyLabel, 0, 0, 1, 1);
|
|
Packit |
1470ea |
this._UIGrid.attach (this._flySwitch, 1, 0, 1, 1);
|
|
Packit |
1470ea |
this._UIGrid.attach (this._birdLabel, 0, 1, 1, 1);
|
|
Packit |
1470ea |
this._UIGrid.attach (this._birdSwitch, 1, 1, 1, 1);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří hlavní mřížku pro vložení obrázku a mřížky s ovládacími prvky
|
|
Packit |
1470ea |
this._mainGrid = new Gtk.Grid ({
|
|
Packit |
1470ea |
halign: Gtk.Align.CENTER,
|
|
Packit |
1470ea |
valign: Gtk.Align.CENTER });
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Připojí obrázek a mřížku s ovládacími prvky do hlavní mřížky
|
|
Packit |
1470ea |
this._mainGrid.attach (this._image, 0, 0, 1, 1);
|
|
Packit |
1470ea |
this._mainGrid.attach (this._UIGrid, 0, 1, 1, 1);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Přidá hlavní mřížku do okna
|
|
Packit |
1470ea |
this._window.add (this._mainGrid);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Zobrazí okno a všechny jeho synovské widgety
|
|
Packit |
1470ea |
this._window.show_all();
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
_switchFlip() {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Změní obrázek podle toho, v jaké poloze je vypínač
|
|
Packit |
1470ea |
if (this._flySwitch.get_active()) {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
if (this._birdSwitch.get_active())
|
|
Packit |
1470ea |
this._image.set_from_file ("muteswan.png");
|
|
Packit |
1470ea |
else
|
|
Packit |
1470ea |
this._image.set_from_file ("fruitbat.png");
|
|
Packit |
1470ea |
} else {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
if (this._birdSwitch.get_active())
|
|
Packit |
1470ea |
this._image.set_from_file ("gentoopenguin.png");
|
|
Packit |
1470ea |
else
|
|
Packit |
1470ea |
this._image.set_from_file ("redfox.png");
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
_initMenus() {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Sestaví aplikační nabídku, takže můžeme mít tlačítko „About“
|
|
Packit |
1470ea |
let menu = new Gio.Menu();
|
|
Packit |
1470ea |
menu.append("About", 'app.about');
|
|
Packit |
1470ea |
menu.append("Quit",'app.quit');
|
|
Packit |
1470ea |
this.application.set_app_menu(menu);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Napojí tlačítko „About“ na funkci _showAbout()
|
|
Packit |
1470ea |
let aboutAction = new Gio.SimpleAction ({ name: 'about' });
|
|
Packit |
1470ea |
aboutAction.connect('activate', () => { this._showAbout(); });
|
|
Packit |
1470ea |
this.application.add_action(aboutAction);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Napojí tlačítko „Quit“ na funkci, která zavírá okno
|
|
Packit |
1470ea |
let quitAction = new Gio.SimpleAction ({ name: 'quit' });
|
|
Packit |
1470ea |
quitAction.connect('activate', () => { this._window.destroy(); });
|
|
Packit |
1470ea |
this.application.add_action(quitAction);
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
_showAbout() {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Pole řetězců se jmény lidí, kteří se podílejí na projektu
|
|
Packit |
1470ea |
var artists = ['Rob Lee http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.png', 'Ken Funakoshi http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.png', 'Shek Graham http://www.flickr.com/photos/shekgraham/127431519/in/photostream/', 'Mindaugas Urbonas http://commons.wikimedia.org/wiki/File:Mute_Swan-Mindaugas_Urbonas.png'];
|
|
Packit |
1470ea |
var authors = ["GNOME Documentation Team"];
|
|
Packit |
1470ea |
var documenters = ["GNOME Documentation Team"];
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří dialogové okno „O aplikaci“
|
|
Packit |
1470ea |
let aboutDialog = new Gtk.AboutDialog({
|
|
Packit |
1470ea |
title: "AboutDialog Example",
|
|
Packit |
1470ea |
program_name: "Animal Creator",
|
|
Packit |
1470ea |
copyright: "Copyright \xa9 2012 GNOME Documentation Team\n\nRed fox photo licensed CC-By by Rob Lee\nGentoo penguin photo licensed CC-By-SA by Ken Funakoshi\nFruit bat photo licensed CC-By by Shek Graham\nMute swan photo licensed CC-By-SA by Mindaugas Urbonas\nLinks to the originals are available under Credits.\n\nHave you hugged a penguin today?",
|
|
Packit |
1470ea |
artists: artists,
|
|
Packit |
1470ea |
authors: authors,
|
|
Packit |
1470ea |
documenters: documenters,
|
|
Packit |
1470ea |
website: "http://developer.gnome.org",
|
|
Packit |
1470ea |
website_label: "GNOME Developer Website" });
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Připojí dialogové okno „O aplikaci“ k oknu
|
|
Packit |
1470ea |
aboutDialog.modal = true;
|
|
Packit |
1470ea |
aboutDialog.transient_for = this._window;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Zobrazí dialogové okno „O aplikaci“
|
|
Packit |
1470ea |
aboutDialog.show();
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Napojí tlačítko „Zavřít“ na signál "destroy" pro dialogové okno
|
|
Packit |
1470ea |
aboutDialog.connect('response', function() {
|
|
Packit |
1470ea |
aboutDialog.destroy();
|
|
Packit |
1470ea |
});
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
};
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Spustí aplikaci
|
|
Packit |
1470ea |
let app = new SwitchExample ();
|
|
Packit |
1470ea |
app.application.run (ARGV);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="in-depth">
|
|
Packit |
1470ea |
<title>Dokumentace jdoucí do hloubky</title>
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gio/unstable/GMenu.html">GMenu</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gio/stable/GSimpleAction.html">GSimpleAction</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Application.html">Gtk.Application</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/stable/GtkApplicationWindow.html">Gtk.ApplicationWindow</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html">Gtk.Grid</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html">Gtk.Image</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Label.html">Gtk.Label</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Switch.html">Gtk.Switch</link> </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
</page>
|