/usr/share/help/cs/gnome-devel-demos/textview.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 | <?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="textview.js" xml:lang="cs">
<info>
<title type="text">TextView (JavaScript)</title>
<link type="guide" xref="beginner.js#multiline"/>
<link type="seealso" xref="button.js"/>
<link type="seealso" xref="grid.js"/>
<link type="seealso" xref="GtkApplicationWindow.js"/>
<link type="seealso" xref="label.js"/>
<revision version="0.1" date="2012-06-28" status="draft"/>
<credit type="author copyright">
<name>Taryn Fox</name>
<email its:translate="no">jewelfox@fursona.net</email>
<years>2012</years>
</credit>
<desc>Víceřádkový textový editor</desc>
</info>
<title>TextView</title>
<media type="image" mime="image/png" src="media/textviewpenguinchat.png"/>
<p>TextView (textové zobrazení) je ve skutečnosti, nebo alespoň většinou, sada tří vnořených objektů.</p>
<list>
<item><p>Vespod je <link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextBuffer.html">TextBuffer</link>. Ten uchovává vlastní text.</p></item>
<item><p>Uprostřed je <link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextView.html">TextView</link>, což je widget, který umožňuje zobrazit a upravovat text z vyrovnávací paměti. Automaticky mění svoji velikost v závislosti na množství textu v něm.</p></item>
<item><p>Protože automatické změny mohou učinit <code>TextView</code> neprakticky použitelným, je běžnou praxí umístit jej do widgetu <code>ScrolledWindow</code>. Navzdory výrazu „window“ v názvu se nejedná o běžně známe okno se záhlavím a tlačítkem <gui>×</gui>, ale o widget, který vložený do aplikace bude fungovat jako okno do lépe zvládnutého zobrazení textu. Když bude text ve vyrovnávací paměti delší, než se vleze, objeví se posuvníky.</p></item>
</list>
<p>Když chcete změnit text, který je v <code>TextView</code> zobrazen, musíte pracovat s objektem <code>TextBuffer</code>, protože právě v něm je text uložen. To samé platí, když chcete vidět, co někdo do něj napsal. Tato ukázková aplikace umožňuje promluvit si se (smyšleným) tučňákem a kontroluje <code>TextBuffer</code>, aby zjistila, jestli jste někde nenapsali slovo „fish“ (ryba).</p>
<note><p>Ve skutečném světe populace tučňáků rychle klesá, protože změny klimatu způsobují tání ledovců, na kterých žijí, a zabíjí ryby, které jí. Jestli si chcete v GNOME zahrát (poněkud bláznivou) hru založenou na tomto předpokladu, podívejte se na <link href="http://pingus.seul.org/">Pingus</link>.</p></note>
<links type="section"/>
<section id="imports">
<title>Importované knihovny</title>
<code mime="application/javascript">
#!/usr/bin/gjs
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 TextViewExample = new Lang.Class ({
Name: 'TextView Example',
// Vytvoří vlastní aplikaci
_init: function () {
this.application = new Gtk.Application ({
application_id: 'org.example.jstextview' });
// 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._buildUI ();
},
</code>
<p>Všechen kód této ukázky je ve třídě <code>TextViewExample</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>
<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,
title: "Talk to a Penguin",
default_height: 400,
default_width: 440,
border_width: 20 });
</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="textview">
<title>Vytvoření TextView</title>
<code mime="application/javascript">
// Vytvoří popisek přes který k vám bude promlouvat tučňák
this._penguin = new Gtk.Label ({
height_request: 180,
width_request: 400,
label: "Squaaaak?",
wrap: true });
</code>
<p>Naším prvním krokem v tomto příkladu bude vytvořit <link xref="label.js">Label</link>, který tučňák používá k proslovům. Pomocí nastavení vlastnosti <code>wrap</code> na <code>true</code> zajistíme, že text se může zalamovat, ale u widgetu <code>TextView</code> použijeme jinou metodu, která nám umožní jemnější řízení.</p>
<code mime="application/javascript">
// Vytvoří textové zobrazení, přes které můžete mluvit na tučňáka
this.buffer = new Gtk.TextBuffer();
this._textView = new Gtk.TextView ({
buffer: this.buffer,
editable: true,
wrap_mode: Gtk.WrapMode.WORD });
</code>
<p>Jako první krok je vytvořen <code>TextBuffer</code> pro vkládání slov. Po té zde vytvoříme <code>TextView</code> a řekneme mu, že má používat právě vytvořený <code>TextBuffer</code>. Rovněž se nastaví jako upravitelný, protože chceme mít možnost do něj psát nové věci.</p>
<p>Vlastnost <code>wrap_mode</code> dává možnost vybrat si ze čtyř různých <link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.WrapMode.html">režimů zalamování</link>. Například <code>Gtk.WrapMode.CHAR</code> způsobí zalomení uprostřed slova, když budete pokračovat v psaní za okraj. Většina lidí pravděpodobně použije <code>Gtk.WrapMode.WORD</code>, který automaticky přesune psané slovo na další řádek, když je příliš dlouhé.</p>
<code mime="application/javascript">
// Vytvoří okno s posuvníky pro vložení textového zobrazení, aby
// mohlo posouvat svůj obsah
this._scrolled = new Gtk.ScrolledWindow ({
hscrollbar_policy: Gtk.PolicyType.AUTOMATIC,
vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,
shadow_type: Gtk.ShadowType.ETCHED_IN,
height_request: 180,
width_request: 400, });
// Vloží textové zobrazení do okna s posuvníky
this._scrolled.add_with_viewport (this._textView);
</code>
<p>Zde vytvoříme okno s posuvníky a nastavíme jej, aby automaticky poskytlo posuvníky, když dostaneme příliš velký obsah, ať už vodorovně nebo svisle. Rovněž získáme hezky vypadající okraj <code>ETCHED_IN</code> (prohnutý). Po té dovnitř vložíme <code>TextView</code> a řekneme oknu s posuvníky, aby nám pro něj poskytlo pohled.</p>
</section>
<section id="ui">
<title>Vytvoření zbytku uživatelského rozhraní</title>
<code mime="application/javascript">
// Vytvoří mřížku pro uspořádání widgetů
this._grid = new Gtk.Grid ({
halign: Gtk.Align.CENTER,
valign: Gtk.Align.CENTER });
// Vloží popisek a textové zobrazení do mřížky, jeden nad druhý
this._grid.attach (this._penguin, 0, 0, 1, 1);
this._grid.attach (this._scrolled, 0, 1, 1, 1);
</code>
<p>První widget <link xref="grid.js">Grid</link>, který jsme vytvořili, má uvnitř jen popisek a okno s posuvníky.</p>
<code mime="application/javascript">
// Vytvoří tlačítko pro odeslání vaší zprávy tučňákovi
this._send = new Gtk.Button ({
halign: Gtk.Align.END,
margin_top: 20,
label: "Send" });
this._send.connect ('clicked', Lang.bind (this, this._chat));
// Vytvoří mřížku pro poddružnou mřížku nahoře a tlačítko dole
this._mainGrid = new Gtk.Grid ({
halign: Gtk.Align.CENTER,
valign: Gtk.Align.CENTER });
// Přidá poddružnou mřížku a tlačítko do hlavní mřížky
this._mainGrid.attach (this._grid, 0, 0, 1, 1);
this._mainGrid.attach (this._send, 0, 1, 1, 1);
</code>
<p>Vytvoříme widget <link xref="button.js">Button</link>, který odešle vaši zprávu tučňákovi, a mřížku, která bude nahoře obsahovat předchozí mřížku a dole tlačítko. Tlačítko má nahoře okraj, díky čemuž se nelepí na okno s posuvníky.</p>
<code mime="application/javascript">
// Připojí hlavní mřížku do okna
this._window.add (this._mainGrid);
// Zobrazení okno a všechny jeho synovské widgety
this._window.show_all();
},
</code>
<p>Nakonec připojíme hlavní mřížku do okna, kterému řekneme, aby sebe a vše v něm nastavilo jako viditelné, když se spustí aplikace.</p>
</section>
<section id="function">
<title>Funkce, která se stará o odpovědi tučňáka</title>
<code mime="application/javascript">
_chat: function () {
// Vytvoří náhodné číslo, které určí, co tučňák řekne
this.number = Math.floor ((Math.random() * 3) + 1);
// Řekli jste právě něco?
if (this.buffer.text) {
// Zmínili jste rybu?
if (this.buffer.text.match (/fish/gi)) {
// Tučňák musí zaskřehovat o rybě
if (this.number == 1)
this._penguin.set_label ("FISH!");
else if (this.number == 2)
this._penguin.set_label ("Fish fish fish fish. Fish!");
else
this._penguin.set_label ("Fish? Fish fish fish. Fish fish. FISH!");
}
// Myslím, že jsem se nezmínil o rybě
else {
// Tučňák pokecá o všedních záležitostech tučňáků
if (this.number == 1)
this._penguin.set_label ("SQUAAK!");
else if (this.number == 2)
this._penguin.set_label ("Ork ork ork ork squaak. Squaak squaak! *waves flippers*");
else
this._penguin.set_label ("Ork ork ork ork ork?");
}
}
// Vymaže vyrovnávací paměť
this.buffer.text = "";
// Předá zaměření zpět textovému zobrazení, abyste do něj nemuseli znovu klikat
this._textView.has_focus = true;
}
});
</code>
<p>Zde používámě některé základní funkce jazyka JavaScript k tomu, aby náš tučňák promluvil. Když na to přijde, tučňáci mají rádi ryby, takže pokud zmíníte rybu, chceme, aby na to tučňák reagoval. K tomu použijeme metodu objektu <code>String</code>, který má JavaScript zabudovaný, vůči <code>this.buffer.text</code>, což vrací obsah našeho objektu <code>TextBuffer</code>.</p>
<p>Protože chceme, aby se náš <code>TextBuffer</code> pokaždé, když kliknete na <gui>Send</gui> vymazal, nastavíme po té <code>this.buffer.text</code> na prázdný řetězec. Pak vrátím zaměření textovému zobrazení, takže můžete pokračovat v psaní, aniž byste na něj před tím museli klikat.</p>
<code mime="application/javascript">
// Spustí aplikaci
let app = new TextViewExample ();
app.application.run (ARGV);
</code>
<p>Nakonec vytvoříme novou instanci konečné třídy TextViewExample a aplikaci spustíme.</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 Gtk = imports.gi.Gtk;
class TextViewExample {
// Vytvoří vlastní aplikaci
constructor() {
this.application = new Gtk.Application({
application_id: 'org.example.jstextview'
});
// 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._buildUI();
}
// Sestaví uživatelské rozhraní aplikace
_buildUI() {
// Vytvoří okno aplikace
this._window = new Gtk.ApplicationWindow ({
application: this.application,
window_position: Gtk.WindowPosition.CENTER,
title: "Talk to a Penguin",
default_height: 400,
default_width: 440,
border_width: 20 });
// Vytvoří popisek přes který k vám bude promlouvat tučňák
this._penguin = new Gtk.Label ({
height_request: 180,
width_request: 400,
label: "Squaaaak?",
wrap: true });
// Vytvoří textové zobrazení, přes které můžete mluvit na tučňáka
this.buffer = new Gtk.TextBuffer();
this._textView = new Gtk.TextView ({
buffer: this.buffer,
editable: true,
wrap_mode: Gtk.WrapMode.WORD });
// Vytvoří okno s posuvníky pro vložení textového zobrazení, aby
// mohlo posouvat svůj obsah
this._scrolled = new Gtk.ScrolledWindow ({
hscrollbar_policy: Gtk.PolicyType.AUTOMATIC,
vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,
shadow_type: Gtk.ShadowType.ETCHED_IN,
height_request: 180,
width_request: 400, });
// Vloží textové zobrazení do okna s posuvníky
this._scrolled.add_with_viewport (this._textView);
// Vytvoří mřížku pro uspořádní widgetů
this._grid = new Gtk.Grid ({
halign: Gtk.Align.CENTER,
valign: Gtk.Align.CENTER });
// Vloží popisek a textové zobrazení do mřížky, jeden nad druhý
this._grid.attach (this._penguin, 0, 0, 1, 1);
this._grid.attach (this._scrolled, 0, 1, 1, 1);
// Vytvoří tlačítko pro odeslání vaší zprávy tučňákovi
this._send = new Gtk.Button ({
halign: Gtk.Align.END,
margin_top: 20,
label: "Send" });
this._send.connect ('clicked', this._chat.bind(this));
// Vytvoří mřížku pro poddružnou mřížku nahoře a tlačítko dole
this._mainGrid = new Gtk.Grid ({
halign: Gtk.Align.CENTER,
valign: Gtk.Align.CENTER });
// Přidá poddružnou mřížku a tlačítko do hlavní mřížky
this._mainGrid.attach (this._grid, 0, 0, 1, 1);
this._mainGrid.attach (this._send, 0, 1, 1, 1);
// Připojí hlavní mřížku do okna
this._window.add (this._mainGrid);
// Zobrazí okno a všechny jeho synovské widgety
this._window.show_all();
}
_chat() {
// Vytvoří náhodné číslo, které určí, co tučňák řekne
this.number = Math.floor ((Math.random() * 3) + 1);
// Řekli jste právě něco?
if (this.buffer.text) {
// Zmínili jste rybu?
if (this.buffer.text.match (/fish/gi)) {
// Tučňák musí zaskřehovat o rybě
if (this.number == 1)
this._penguin.set_label ("FISH!");
else if (this.number == 2)
this._penguin.set_label ("Fish fish fish fish. Fish!");
else
this._penguin.set_label ("Fish? Fish fish fish. Fish fish. FISH!");
}
// Myslím, že jsem se nezmínil o rybě
else {
// Tučňák pokecá o všedních záležitostech tučňáků
if (this.number == 1)
this._penguin.set_label ("SQUAAK!");
else if (this.number == 2)
this._penguin.set_label ("Ork ork ork ork squaak. Squaak squaak! *waves flippers*");
else
this._penguin.set_label ("Ork ork ork ork ork?");
}
}
// Vymaže vyrovnávací paměť
this.buffer.text = "";
// Předá zaměření zpět textovému zobrazení, abyste do něj nemuseli znovu klikat
this._textView.has_focus = true;
}
};
// Spustí aplikaci
let app = new TextViewExample ();
app.application.run (ARGV);
</code>
</section>
<section id="in-depth">
<title>Dokumentace jdoucí do hloubky</title>
<list>
<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.Button.html">Gtk.Button</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.Label.html">Gtk.Label</link></p></item>
<item><p><link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.RadioButton.html">Gtk.RadioButton</link></p></item>
<item><p><link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ScrolledWindow.html">Gtk.ScrolledWindow</link></p></item>
<item><p><link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextBuffer.html">Gtk.TextBuffer</link></p></item>
<item><p><link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextView.html">Gtk.TextView</link></p></item>
</list>
</section>
</page>
|