/usr/share/help/cs/gnome-devel-demos/switch.js.page is in gnome-devel-docs 3.28.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 | <?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="switch.js" xml:lang="cs">
<info>
<title type="text">Switch (JavaScript)</title>
<link type="guide" xref="beginner.js#buttons"/>
<revision version="0.1" date="2012-06-18" status="draft"/>
<credit type="author copyright">
<name>Taryn Fox</name>
<email its:translate="no">jewelfox@fursona.net</email>
<years>2012</years>
</credit>
<desc>Posuvný vypínač, který se umí překlápět mezi stavy zapnuto a vypnuto</desc>
</info>
<title>Switch</title>
<media type="image" mime="image/png" src="media/switchanimals.png"/>
<p>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>.</p>
<note><p>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ů:</p>
<list>
<item><p><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></p></item>
<item><p><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></p></item>
<item><p><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></p></item>
<item><p><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></p></item>
</list>
<p>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ů!</p></note>
<links type="section"/>
<section id="imports">
<title>Importované knihovny</title>
<code mime="application/javascript">
#!/usr/bin/gjs
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
</code>
<p>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.</p>
</section>
<section id="applicationwindow">
<title>Vytvoření okna aplikace</title>
<code mime="application/javascript">
const SwitchExample = new Lang.Class({
Name: 'Switch Example',
// Vytvoří vlastní aplikaci
_init: function() {
this.application = new Gtk.Application({
application_id: 'org.example.jsswitch',
flags: Gio.ApplicationFlags.FLAGS_NONE
});
// Připojí signály "activate" a "startup" k funkcím zpětného volání
this.application.connect('activate', Lang.bind(this, this._onActivate));
this.application.connect('startup', Lang.bind(this, this._onStartup));
},
// Funkce zpětného volání pro signál "activate" zobrazujicí okno při aktivaci
_onActivate: function() {
this._window.present();
},
// Funkce zpětného volání pro signál "startup" sestavující uživatelské rozhraní
_onStartup: function() {
this._initMenus();
this._buildUI ();
},
</code>
<p>Všechen kód této ukázky je ve třídě <code>SwitchExample</code>. 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.</p>
<note><p>Než zavoláme <code>_buildUI</code>, aby se vytvořilo okno a widgety v něm, potřebujeme zavolat funkci <code>_initMenus</code>, která GNOME řekne, aby vytvořilo nabídku. Reálný kód pro <code>_initMenus</code> můžeme vložit za kód <code>_buildUI</code>, jelikož nezáleží na tom, v jakém pořadí jsou vloženy, protože <code>_initMenus</code> je zavoláno jako první z <code>_onStartup</code>.</p></note>
<code mime="application/javascript">
// Sestaví uživatelské rozhraní aplikace
_buildUI: function() {
// Vytvoří okno aplikace
this._window = new Gtk.ApplicationWindow({
application: this.application,
window_position: Gtk.WindowPosition.CENTER,
border_width: 20,
title: "Animal Creator"});
</code>
<p>Funkce <code>_buildUI</code> 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.</p>
</section>
<section id="button">
<title>Vytvoření vypínačů</title>
<code mime="application/javascript">
// Vytvoří widget Image a nastaví jeho výchozí obrázek
this._image = new Gtk.Image ({file: "redfox.png"});
</code>
<p>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.</p>
<code mime="application/javascript">
// Vytvoří popisek pro první vypínač
this._flyLabel = new Gtk.Label ({
label: "Make it fly",
margin_right: 30});
// Vytvoří první vypínač a nastaví jeho výchozí polohu
this._flySwitch = new Gtk.Switch ({active: false});
this._flySwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));
// Vytvoří popisek pro druhý vypínač
this._birdLabel = new Gtk.Label ({
label: "Make it a bird",
margin_right: 30});
// Vytvoří druhý vypínač
this._birdSwitch = new Gtk.Switch ({active: false});
this._birdSwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));
</code>
<p>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.</p>
<p>Signál, který vypínač vyšle při svém přepnutí do polohy vypnuto nebo zapnuto se nazývá <code>"notify::active"</code>. Po vytvoření každého z vypínačů napojíme tento signál na funkci nazvanou <code>_switchFlip</code>. 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í <code>_image</code>, který obrázek se zobrazí.</p>
<code mime="application/javascript">
// Vytvoří mřížku pro popisky a vypínače pod obrázkem
this._UIGrid = new Gtk.Grid ({
halign: Gtk.Align.CENTER,
valign: Gtk.Align.CENTER,
margin_top: 20});
// Připojí popisky a vypínače do mřížky
this._UIGrid.attach (this._flyLabel, 0, 0, 1, 1);
this._UIGrid.attach (this._flySwitch, 1, 0, 1, 1);
this._UIGrid.attach (this._birdLabel, 0, 1, 1, 1);
this._UIGrid.attach (this._birdSwitch, 1, 1, 1, 1);
// Vytvoří hlavní mřížku pro vložení obrázku a mřížky s ovládacími prvky
this._mainGrid = new Gtk.Grid ({
halign: Gtk.Align.CENTER,
valign: Gtk.Align.CENTER });
// Připojí obrázek a mřížku s ovládacími prvky do hlavní mřížky
this._mainGrid.attach (this._image, 0, 0, 1, 1);
this._mainGrid.attach (this._UIGrid, 0, 1, 1, 1);
</code>
<p>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.</p>
<code mime="application/javascript">
// Přidá hlavní mřížku do okna
this._window.add (this._mainGrid);
// Zobrazí okno a všechny jeho synovské widgety
this._window.show_all();
},
</code>
<p>Nakonec přidáme větší mřížku do okna a oknu řekneme, že má zobrazit sebe a všechny widgety uvnitř sebe.</p>
</section>
<section id="switch-handler">
<title>Funkce, která obsluhuje situaci, kdy je vypínač přepnut</title>
<code mime="application/javascript">
_switchFlip: function() {
// Změní obrázek podle toho, v jaké poloze je vypínač
if (this._flySwitch.get_active()) {
if (this._birdSwitch.get_active()) this._image.set_from_file ("muteswan.png");
else this._image.set_from_file ("fruitbat.png");
}
else {
if (this._birdSwitch.get_active()) this._image.set_from_file ("gentoopenguin.png");
else this._image.set_from_file ("redfox.png");
}
},
</code>
<p>Pokaždé, když je přepnut vypínač, tato funkce zkontroluje, které ze dvou vypínačů jsou zapnuté, za použití funkce <code>get_active()</code>, která je součástí widgetu <code>Switch</code>. 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.</p>
</section>
<section id="about">
<title>Vytvoření AboutDialog</title>
<code mime="application/javascript">
_initMenus: function() {
// Sestaví aplikační nabídku, takže můžeme mít volby About a Quit
let menu = new Gio.Menu();
menu.append("About", 'app.about');
menu.append("Quit",'app.quit');
this.application.set_app_menu(menu);
// Napojí akci "about" na funkci _showAbout()
let aboutAction = new Gio.SimpleAction ({ name: 'about' });
aboutAction.connect('activate', Lang.bind(this,
function() {
this._showAbout();
}));
this.application.add_action(aboutAction);
// Napojí akci "quit" na funkci, která zavře okno
let quitAction = new Gio.SimpleAction ({ name: 'quit' });
quitAction.connect('activate', Lang.bind(this,
function() {
this._window.destroy();
}));
this.application.add_action(quitAction);
},
</code>
<p>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.</p>
<code mime="application/javascript">
_showAbout: function () {
// Pole řetězců se jmény lidí, kteří se na projektu podílejí
var artists = ['Rob Lee http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.jpg',
'Ken Funakoshi http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.jpg',
'Shek Graham http://www.flickr.com/photos/shekgraham/127431519/in/photostream/',
'Mindaugas Urbonas http://commons.wikimedia.org/wiki/File:Mute_Swan-Mindaugas_Urbonas.jpg'];
var authors = ["GNOME Documentation Team"];
var documenters = ["GNOME Documentation Team"];
// Vytvoří dialogové okno „O aplikaci“
let aboutDialog = new Gtk.AboutDialog({
title: "AboutDialog Example",
program_name: "Animal Creator",
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?",
artists: artists,
authors: authors,
documenters: documenters,
website: "http://developer.gnome.org",
website_label: "GNOME Developer Website" });
// Připojí dialogové okno „O aplikaci“ k oknu
aboutDialog.modal = true;
aboutDialog.transient_for = this._window;
// Zobrazí dialogové okno „O aplikaci“
aboutDialog.show();
// Napojí tlačítko Close na signál "destroy" pro dialogové okno
aboutDialog.connect('response', function() {
aboutDialog.destroy();
});
}
});
</code>
<p>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.</p>
<code mime="application/javascript">
// Spustí aplikaci
let app = new SwitchExample ();
app.application.run (ARGV);
</code>
<p>Nakonec vytvoříme novou instanci výsledné třídy SwitchExample a spustíme aplikaci.</p>
</section>
<section id="complete">
<title>Úplný kód ukázky</title>
<code mime="application/javascript" style="numbered">#!/usr/bin/gjs
imports.gi.versions.Gtk = '3.0';
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
class SwitchExample {
// Vytvoří vlastní aplikaci
constructor() {
this.application = new Gtk.Application({
application_id: 'org.example.jsswitch'
});
// Napojí signály "activate" a "startup" k funkcím zpětného volání
this.application.connect('activate', this._onActivate.bind(this));
this.application.connect('startup', this._onStartup.bind(this));
}
// Funkce zpětného volání pro signál "activate" zobrazujicí okno při aktivaci
_onActivate() {
this._window.present();
}
// Funkce zpětného volání pro signál "startup" sestavující uživatelské rozhraní
_onStartup() {
this._initMenus();
this._buildUI();
}
// Sestaví uživatelské rozhraní aplikace
_buildUI() {
// Vytvoří okno aplikace
this._window = new Gtk.ApplicationWindow({
application: this.application,
window_position: Gtk.WindowPosition.CENTER,
border_width: 20,
title: "Animal Creator"});
// Vytvoří widget Image a nastaví jeho výchozí obrázek
this._image = new Gtk.Image ({file: "redfox.png"});
// Vytvoří popisek pro první vypínač
this._flyLabel = new Gtk.Label ({
label: "Make it fly",
margin_right: 30});
// Vytvoří první vypínač a nastaví jeho výchozí polohu
this._flySwitch = new Gtk.Switch ({active: false});
this._flySwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));
// Vytvoří popisek pro druhý vypínač
this._birdLabel = new Gtk.Label ({
label: "Make it a bird",
margin_right: 30});
// Vytvoří druhý vypínač
this._birdSwitch = new Gtk.Switch ({active: false});
this._birdSwitch.connect ('notify::active', this._switchFlip.bind(this));
// Vytvoří mřížku pro popisky a vypínače pod obrázkem
this._UIGrid = new Gtk.Grid ({
halign: Gtk.Align.CENTER,
valign: Gtk.Align.CENTER,
margin_top: 20});
// Připojí popisky a vypínače do mřížky
this._UIGrid.attach (this._flyLabel, 0, 0, 1, 1);
this._UIGrid.attach (this._flySwitch, 1, 0, 1, 1);
this._UIGrid.attach (this._birdLabel, 0, 1, 1, 1);
this._UIGrid.attach (this._birdSwitch, 1, 1, 1, 1);
// Vytvoří hlavní mřížku pro vložení obrázku a mřížky s ovládacími prvky
this._mainGrid = new Gtk.Grid ({
halign: Gtk.Align.CENTER,
valign: Gtk.Align.CENTER });
// Připojí obrázek a mřížku s ovládacími prvky do hlavní mřížky
this._mainGrid.attach (this._image, 0, 0, 1, 1);
this._mainGrid.attach (this._UIGrid, 0, 1, 1, 1);
// Přidá hlavní mřížku do okna
this._window.add (this._mainGrid);
// Zobrazí okno a všechny jeho synovské widgety
this._window.show_all();
}
_switchFlip() {
// Změní obrázek podle toho, v jaké poloze je vypínač
if (this._flySwitch.get_active()) {
if (this._birdSwitch.get_active())
this._image.set_from_file ("muteswan.png");
else
this._image.set_from_file ("fruitbat.png");
} else {
if (this._birdSwitch.get_active())
this._image.set_from_file ("gentoopenguin.png");
else
this._image.set_from_file ("redfox.png");
}
}
_initMenus() {
// Sestaví aplikační nabídku, takže můžeme mít tlačítko „About“
let menu = new Gio.Menu();
menu.append("About", 'app.about');
menu.append("Quit",'app.quit');
this.application.set_app_menu(menu);
// Napojí tlačítko „About“ na funkci _showAbout()
let aboutAction = new Gio.SimpleAction ({ name: 'about' });
aboutAction.connect('activate', () => { this._showAbout(); });
this.application.add_action(aboutAction);
// Napojí tlačítko „Quit“ na funkci, která zavírá okno
let quitAction = new Gio.SimpleAction ({ name: 'quit' });
quitAction.connect('activate', () => { this._window.destroy(); });
this.application.add_action(quitAction);
}
_showAbout() {
// Pole řetězců se jmény lidí, kteří se podílejí na projektu
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'];
var authors = ["GNOME Documentation Team"];
var documenters = ["GNOME Documentation Team"];
// Vytvoří dialogové okno „O aplikaci“
let aboutDialog = new Gtk.AboutDialog({
title: "AboutDialog Example",
program_name: "Animal Creator",
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?",
artists: artists,
authors: authors,
documenters: documenters,
website: "http://developer.gnome.org",
website_label: "GNOME Developer Website" });
// Připojí dialogové okno „O aplikaci“ k oknu
aboutDialog.modal = true;
aboutDialog.transient_for = this._window;
// Zobrazí dialogové okno „O aplikaci“
aboutDialog.show();
// Napojí tlačítko „Zavřít“ na signál "destroy" pro dialogové okno
aboutDialog.connect('response', function() {
aboutDialog.destroy();
});
}
};
// Spustí aplikaci
let app = new SwitchExample ();
app.application.run (ARGV);
</code>
</section>
<section id="in-depth">
<title>Dokumentace jdoucí do hloubky</title>
<list>
<item><p><link href="http://developer.gnome.org/gio/unstable/GMenu.html">GMenu</link></p></item>
<item><p><link href="http://developer.gnome.org/gio/stable/GSimpleAction.html">GSimpleAction</link></p></item>
<item><p><link href="http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Application.html">Gtk.Application</link></p></item>
<item><p><link href="http://developer.gnome.org/gtk3/stable/GtkApplicationWindow.html">Gtk.ApplicationWindow</link></p></item>
<item><p><link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html">Gtk.Grid</link></p></item>
<item><p><link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html">Gtk.Image</link></p></item>
<item><p><link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Label.html">Gtk.Label</link></p></item>
<item><p><link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Switch.html">Gtk.Switch</link></p></item>
</list>
</section>
</page>
|