|
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="comboboxtext.js" xml:lang="cs">
|
|
Packit |
1470ea |
<info>
|
|
Packit |
1470ea |
<title type="text">ComboBoxText (JavaScript)</title>
|
|
Packit |
1470ea |
<link type="guide" xref="beginner.js#menu-combo-toolbar"/>
|
|
Packit |
1470ea |
<link type="seealso" xref="GtkApplicationWindow.js"/>
|
|
Packit |
1470ea |
<link type="seealso" xref="messagedialog.js"/>
|
|
Packit |
1470ea |
<revision version="0.1" date="2012-07-06" 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>Čistě textová rozbalovací nabídka</desc>
|
|
Packit |
1470ea |
</info>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<title>ComboBoxText</title>
|
|
Packit |
1470ea |
<media type="image" mime="image/png" src="media/combobox.png"/>
|
|
Packit |
1470ea |
ComboBox je rozbalovací nabídka. Rozdíl mezi <link xref="combobox.js">ComboBox</link> a ComboBoxText (textová rozbalovací nabídka) je v tom, že má jen základní textové volby, zatímco plnohodnotný ComboBox používá ListStore nebo TreeStore (což jsou v podstatě tabulky) k zobrazení věcí, jako jsou rozvětvené volby nebo obrázky vedle jednotlivých voleb.
|
|
Packit |
1470ea |
<note>Pokud nepotřebujete přidané funkce plného ComboBox nebo komfort práce s ListStore a TreeStore , můžete shledat jednodušším, kdykoliv to použití dovolí, ComboBoxText . </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 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 ComboBoxTextExample = new Lang.Class ({
|
|
Packit |
1470ea |
Name: 'ComboBoxText 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.jscomboboxtext'});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Napojí 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._buildUI ();
|
|
Packit |
1470ea |
},
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Všechen kód této ukázky je ve třídě MessageDialogExample . 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 |
|
|
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 |
title: "Welcome to GNOME",
|
|
Packit |
1470ea |
default_width: 200,
|
|
Packit |
1470ea |
border_width: 10 });
|
|
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="comboboxtext">
|
|
Packit |
1470ea |
<title>Vytvoření ComboBoxText</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří rozbalovací seznam
|
|
Packit |
1470ea |
this._comboBoxText = new Gtk.ComboBoxText();
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Naplní rozbalovací seznam
|
|
Packit |
1470ea |
let distros = ["Select distribution", "Fedora", "Mint", "Suse"];
|
|
Packit |
1470ea |
for (let i = 0; i < distros.length; i++)
|
|
Packit |
1470ea |
this._comboBoxText.append_text (distros[i]);
|
|
Packit |
1470ea |
this._comboBoxText.set_active (0);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Napojí signál "changed" od rozbalovacího seznamu k naší funkci zpětnoho volání
|
|
Packit |
1470ea |
this._comboBoxText.connect ('changed', Lang.bind (this, this._onComboChanged));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Po té, co jsme vytvořili textový rozbalovací seznam, použijeme jeho metodu append_text pro přidání textových řetězců. Podobně jako u položek v poli má každá číslo ID, počínaje od 0. Pro zjednodušení můžete skutečně vytvořit pole a použít smyčku pro přidání jednotlivých položek tak, jako jsme to udělali zde.
|
|
Packit |
1470ea |
Až máme textový rozbalovací seznam naplněný, nastavíme jeho první položku jako aktivní, takže před prvním kliknutím uvidíme řádek „Select distribution“ („Vyberte distribuci“). Následně napojíme signál "changed" na funkci _onComboChanged , takže bude zavolána pokaždé, když je v rozbalovacím seznamu proveden nový výběr.
|
|
Packit |
1470ea |
<note>Když byste chtěli do ComboBoxText dodatečně přidat položku, můžete použít metodu insert_text . A pokud byste raději než čísla použili textové řetězce jako ID pro jednotlivé položky, můžete použít metody append a insert . Ohledně podrobností, jak je použít, se podívejte na odkazy ve spodní části této lekce. </note>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Přidá rozbalovací seznam do okna
|
|
Packit |
1470ea |
this._window.add (this._comboBoxText);
|
|
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 ComboBoxText do okna a oknu řekneme, aby zobrazilo sebe i widgety v něm.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="function">
|
|
Packit |
1470ea |
<title>Funkce, která zpracovává váš výběr</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
_onComboChanged: function () {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Reakce, které použijeme v našem dialogovém okně se zprávou
|
|
Packit |
1470ea |
let responses = ["",
|
|
Packit |
1470ea |
"Fedora is a community distro sponsored by Red Hat.",
|
|
Packit |
1470ea |
"Mint is a popular distro based on Ubuntu.",
|
|
Packit |
1470ea |
"SUSE is a name shared by two separate distros."];
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Budeme vytvářet vyskakovací <link xref="messagedialog.js">MessageDialog</link>, který vám zobrazí zprávu podle vybrané distribuce. Nejdříve vytvoříme pole odpovědí, které se budou používat. Protože první položkou v našem rozbalovacím seznamu je jen informace „Select distribution“, ponecháme první řetězec v našem poli prázdný.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Která položka rozbalovacího seznamu je aktivní?
|
|
Packit |
1470ea |
let activeItem = this._comboBoxText.get_active();
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Žádné dialogové okno se zprávou, když je vybráno „Select distribution“
|
|
Packit |
1470ea |
if (activeItem != 0) {
|
|
Packit |
1470ea |
this._popUp = new Gtk.MessageDialog ({
|
|
Packit |
1470ea |
transient_for: this._window,
|
|
Packit |
1470ea |
modal: true,
|
|
Packit |
1470ea |
buttons: Gtk.ButtonsType.OK,
|
|
Packit |
1470ea |
message_type: Gtk.MessageType.INFO,
|
|
Packit |
1470ea |
text: responses[activeItem]});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Napojí tlačítko OK na obslušnou funkci
|
|
Packit |
1470ea |
this._popUp.connect ('response', Lang.bind (this, this._onDialogResponse));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Zobrazí dialogové okno se zprávou
|
|
Packit |
1470ea |
this._popUp.show();
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
},
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Než zobrazíme dialogové okno se zprávou, nejprve otestujeme, že není vybrána volba „Select distribution“. Po té nastavíme text podle položky v poli, která odpovídá aktivní položce v rozbalovacím seznamu. To uděláme pomocí metody get_active method, která vrací číselné ID vašeho výběru.
|
|
Packit |
1470ea |
<note>Jinými metodami, které bychom mohli použít jsou get_active_id , která vrací textové ID přiřazené metodou append , a get_active_text , která vrací celý text ve vybrané položce. </note>
|
|
Packit |
1470ea |
Po té, co vytvoříme MessageDialog , napojíme jeho signál "response" na funkci _onDialogResponse a následně řekneme oknu, ať se zobrazí.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
_onDialogResponse: function () {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
this._popUp.destroy ();
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Protože jediným tlačítkem, které dialogové okno se zprávou má, je tlačítko <gui>OK</gui>, nepotřebujeme testovat hodnotu response_id , abychom zjistili, na které tlačítko bylo kliknuto. Vše, co uděláme, je, že dialogové okno zlikvidujeme.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Spustí aplikaci
|
|
Packit |
1470ea |
let app = new ComboBoxTextExample ();
|
|
Packit |
1470ea |
app.application.run (ARGV);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Nakonec vytvoříme novou instanci konečné třídy ComboBoxTextExample a aplikaci spustíme.
|
|
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 ComboBoxTextExample {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří vlastní aplikaci
|
|
Packit |
1470ea |
constructor() {
|
|
Packit |
1470ea |
this.application = new Gtk.Application ({
|
|
Packit |
1470ea |
application_id: 'org.example.jscomboboxtext'});
|
|
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 |
// 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 |
title: "Welcome to GNOME",
|
|
Packit |
1470ea |
default_width: 200,
|
|
Packit |
1470ea |
border_width: 10 });
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Vytvoří rozbalovací seznam
|
|
Packit |
1470ea |
this._comboBoxText = new Gtk.ComboBoxText();
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Naplní rozbalovací seznam
|
|
Packit |
1470ea |
let distros = ["Select distribution", "Fedora", "Mint", "Suse"];
|
|
Packit |
1470ea |
for (let i = 0; i < distros.length; i++)
|
|
Packit |
1470ea |
this._comboBoxText.append_text (distros[i]);
|
|
Packit |
1470ea |
this._comboBoxText.set_active (0);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Napojí signál "changed" od rozbalovacího seznamu k naší funkci zpětnoho volání
|
|
Packit |
1470ea |
this._comboBoxText.connect ('changed', this._onComboChanged.bind(this));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Přidá rozbalovací seznam do okna
|
|
Packit |
1470ea |
this._window.add (this._comboBoxText);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Zobrazí okno a všechny jeho synovské widgety
|
|
Packit |
1470ea |
this._window.show_all();
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
_onComboChanged() {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Reakce, které použijeme v našem dialogovém okně se zprávou
|
|
Packit |
1470ea |
let responses = ["",
|
|
Packit |
1470ea |
"Fedora is a community distro sponsored by Red Hat.",
|
|
Packit |
1470ea |
"Mint is a popular distro based on Ubuntu.",
|
|
Packit |
1470ea |
"SUSE is a name shared by two separate distros."];
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Která položka rozbalovacího seznamu je aktivní?
|
|
Packit |
1470ea |
let activeItem = this._comboBoxText.get_active();
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Žádné dialogové okno se zprávou, když je vybráno „Select distribution“
|
|
Packit |
1470ea |
if (activeItem != 0) {
|
|
Packit |
1470ea |
this._popUp = new Gtk.MessageDialog ({
|
|
Packit |
1470ea |
transient_for: this._window,
|
|
Packit |
1470ea |
modal: true,
|
|
Packit |
1470ea |
buttons: Gtk.ButtonsType.OK,
|
|
Packit |
1470ea |
message_type: Gtk.MessageType.INFO,
|
|
Packit |
1470ea |
text: responses[activeItem]});
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Napojí tlačítko OK na obslušnou funkci
|
|
Packit |
1470ea |
this._popUp.connect ('response', this._onDialogResponse.bind(this));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Zobrazí dialogové okno se zprávou
|
|
Packit |
1470ea |
this._popUp.show();
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
_onDialogResponse() {
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
this._popUp.destroy ();
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
};
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
// Spustí aplikaci
|
|
Packit |
1470ea |
let app = new ComboBoxTextExample ();
|
|
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 |
V této ukázce se používá následující:
|
|
Packit |
1470ea |
<list>
|
|
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.ComboBoxText.html">Gtk.ComboBoxText</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.MessageDialog.html">Gtk.MessageDialog</link> </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
</page>
|