This file is indexed.

/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>