Blame platform-demos/cs/toolbar_builder.vala.page

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="toolbar_builder.vala" xml:lang="cs">
Packit 1470ea
  <info>
Packit 1470ea
  <title type="text">Nástrojová lišta vytvořená pomocí Glade (Vala)</title>
Packit 1470ea
    <link type="guide" xref="beginner.vala#menu-combo-toolbar"/>
Packit 1470ea
    <link type="seealso" xref="toolbar.vala"/>
Packit 1470ea
    <link type="seealso" xref="grid.vala"/>
Packit 1470ea
    <revision version="0.1" date="2012-05-08" status="draft"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Tiffany Antopolski</name>
Packit 1470ea
      <email its:translate="no">tiffany.antopolski@gmail.com</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc>Lišta s tlačítky</desc>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>Toolbar (vytvořený pomocí Glade)</title>
Packit 1470ea
Packit 1470ea
  <media type="image" mime="image/png" src="media/toolbar.png"/>
Packit 1470ea
  

Tento příklad je podobný na <link xref="toolbar.vala"/> s tím rozdílem, že k vytvoření nástrojové lišty v souboru .ui ve formátu XML použijeme návrhář Glade.

Packit 1470ea
Packit 1470ea
  

Když chcete vytvořit nástrojovou lištu pomocí <link href="http://glade.gnome.org/">návrháře rozhraní Glade</link>:

Packit 1470ea
  <steps>
Packit 1470ea
    <item>

Otevřete Glade a uložte soubor jako <file>toolbar_builder.ui</file>.

Packit 1470ea
          

<media type="image" src="media/glade_ui.png" width="900">Snímek obrazovky s uživatelským rozhraním Glade</media>

Packit 1470ea
    </item>
Packit 1470ea
Packit 1470ea
    <item>

V <gui>Kontejnerech</gui> na levé straně klikněte pravým tlačítkem na ikonu nástrojové lišty a vyberte <gui>Přidat widget do nejvyšší úrovně</gui>.

Packit 1470ea
          

<media type="image" src="media/glade_select_toolbar.png">Snímek obrazovky s ikonou nástrojové lišty v uživatelském rozhraní Glade</media>

Packit 1470ea
    </item>
Packit 1470ea
Packit 1470ea
    <item>

Na kartě <gui>Obecné</gui> vpravo dole změňte <gui>Název</gui> na <input>toolbar</input> a <gui>Zobrazovat šipku</gui> na <gui>Ne</gui>.

Packit 1470ea
          

<media type="image" src="media/glade_toolbar_general.png">Snímek obrazovky s kartou Obecné</media>

Packit 1470ea
    </item>
Packit 1470ea
Packit 1470ea
    <item>

Na kartě <gui>Běžné</gui> nastavte <gui>Roztáhnout vodorovně</gui> na <gui>Ano</gui>.

Packit 1470ea
         

<media type="image" src="media/glade_toolbar_common.png">Snímek obrazovky s kartou Běžné</media>

Packit 1470ea
     </item>
Packit 1470ea
Packit 1470ea
     <item>

Klikněte pravým tlačítkem na „toolbar“ vpravo nahoře a vyberte <gui>Upravit</gui>. Objeví se okno <gui>Editor nástrojové lišty</gui>.

Packit 1470ea
         

<media type="image" src="media/glade_toolbar_edit.png">Snímek obrazovky, na kterém je kliknuto pravým tlačítkem kvůli úpravě nástrojové lišty</media>

Packit 1470ea
   </item>
Packit 1470ea
Packit 1470ea
   <item>

Chceme přidat 5 tlačítek ToolButton: „New“, „Open“, „Undo“, „Fullscreen“ a „Leave Fullscreen“. Nejprve přidáme ToolButton „New“.

Packit 1470ea
     <steps>
Packit 1470ea
       <item>

Na kartě <gui>Hierarchie</gui> klikněte na <gui>Přidat</gui>.

</item>
Packit 1470ea
       <item>

Změňte název „toolbutton1“ na „new_button“.

</item>
Packit 1470ea
       <item>

Posuňte se dolů a nastavte <gui>Je důležitá</gui> na <gui>Ano</gui>. To způsobí, že když je zobrazena nástrojová lišta, bude nástrojovém tlačítku zobrazen popisek.

</item>
Packit 1470ea
       <item>

Zadejte <gui>Název akce</gui>: <input>app.new</input>.

</item>
Packit 1470ea
       <item>

Změňte <gui>Popisek</gui> na <input>New</input>.

</item>
Packit 1470ea
       <item>

V rozbalovacím seznamu zvolte <gui>New</gui> jako <gui>Standadní ID</gui> nebo napište <input>gtk-new</input>.

</item>
Packit 1470ea
     </steps>
Packit 1470ea
     

Opakujte předchozí kroky pro zbývající tlačítka ToolButton s následujícími vlastnostmi:

Packit 1470ea
  
Packit 1470ea
    
Packit 1470ea
      
Packit 1470ea
        

Name

Packit 1470ea
        

Je důležitá

Packit 1470ea
        

Název akce

Packit 1470ea
        

Label

Packit 1470ea
        

Standardní ID

Packit 1470ea
      
Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
      

open_button

Packit 1470ea
      

Ano

Packit 1470ea
      

app.open

Packit 1470ea
      

Open

Packit 1470ea
      

gtk-open

Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
      

undo_button

Packit 1470ea
      

Ano

Packit 1470ea
      

win.undo

Packit 1470ea
      

Undo

Packit 1470ea
      

gtk-undo

Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
      

fullscreen_button

Packit 1470ea
      

Ano

Packit 1470ea
      

win.fullscreen

Packit 1470ea
      

Fullscreen

Packit 1470ea
      

gtk-fullscreen

Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
      

leave_fullscreen_button

Packit 1470ea
      

Ano

Packit 1470ea
      

win.fullscreen

Packit 1470ea
      

Leave Fullscreen

Packit 1470ea
      

gtk-leave-fullscreen

Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
Packit 1470ea
          <media type="image" src="media/glade_toolbar_editor.png">
Packit 1470ea
Packit 1470ea
          </media>
Packit 1470ea
    </item>
Packit 1470ea
Packit 1470ea
    <item>

Zavřete <gui>Editor panelu nástrojů</gui>.

Packit 1470ea
   </item>
Packit 1470ea
Packit 1470ea
   <item>

Když svůj program spustíte, nechcete aby bylo zobrazené nástrojové tlačítko <gui>Leave Fullscreen</gui>, protože aplikace není v režimu celé obrazovky. Můžete to nastavit na kartě <gui>Běžné</gui>, kde přepnete vlastnost <gui>Viditelný</gui> na <gui>Ne</gui>. Nástrojové tlačítko si bude pořád viditelné v návrháři rozhraní, ale po načtení do vašeho programu se bude chovat podle očekávání.

Packit 1470ea
          

<media type="image" src="media/glade_visible_no.png">Nastavení vlastnosti Viditelná na Ne</media>

Packit 1470ea
   </item>
Packit 1470ea
Packit 1470ea
    <item>

Uložte svoji práci a zavřete Glade.

Packit 1470ea
   </item>
Packit 1470ea
Packit 1470ea
   <item>

Soubor XML vytvořený v <app>Glade</app> je zobrazen níže. Jedná se o popis nástrojové lišty. V době, kdy bylo toto psáno, neexistovala v uživatelském rozhraní <app>Glade</app> volba pro přidání třídy Gtk.STYLE_CLASS_PRIMARY_TOOLBAR. Můžeme ji ale do souboru XML přidat ručně. Udělá se to přidáním následujícího kódu XML na řádek 9 v <file>toolbar_builder.ui</file>:

Packit 1470ea
   
Packit 1470ea
  <style>
Packit 1470ea
     <class name="primary-toolbar"/>
Packit 1470ea
  </style>
Packit 1470ea
  
Packit 1470ea
  

Pokud tuto část nepřidáte, bude program i tak fungovat dobře. Akorát výsledná nástrojová lišty bude vypadat lehce odlišně než ta na snímku obrazovky na začátku této stránky.

Packit 1470ea
   </item>
Packit 1470ea
</steps>
Packit 1470ea
  <?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <!-- interface-requires gtk+ 3.0 -->
Packit 1470ea
  <object class="GtkToolbar" id="toolbar">
Packit 1470ea
    <property name="visible">True</property>
Packit 1470ea
    <property name="can_focus">False</property>
Packit 1470ea
    <property name="hexpand">True</property>
Packit 1470ea
    <property name="show_arrow">False</property>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="new_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="visible">True</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">app.new</property>
Packit 1470ea
        <property name="label" translatable="yes">New</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-new</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="open_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="visible">True</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">app.open</property>
Packit 1470ea
        <property name="label" translatable="yes">Open</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-open</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="undo_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="visible">True</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">win.undo</property>
Packit 1470ea
        <property name="label" translatable="yes">Undo</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-undo</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="fullscreen_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="visible">True</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">win.fullscreen</property>
Packit 1470ea
        <property name="label" translatable="yes">Fullscreen</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-fullscreen</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="leave_fullscreen_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">win.fullscreen</property>
Packit 1470ea
        <property name="label" translatable="yes">Leave Fullscreen</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-leave-fullscreen</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
  </object>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea
Packit 1470ea
  

Nyní vytvoříme kód zobrazený níže, který přidá nástrojovou lištu ze souboru, který jsme právě vytvořili.

Packit 1470ea
/* Toto je okno */
Packit 1470ea
class MyWindow : Gtk.ApplicationWindow {
Packit 1470ea
Packit 1470ea
	/* Deklarace dvou widgetů ToolButton, protože je získáme
Packit 1470ea
	 * ze souboru .ui (viz řádky 32 a 33), tak abchom je mohli
Packit 1470ea
	 * podle potřeby skrýt a zobrazit */
Packit 1470ea
	Gtk.ToolButton fullscreen_button;
Packit 1470ea
	Gtk.ToolButton leave_fullscreen_button;
Packit 1470ea
Packit 1470ea
	/* Konstruktor */
Packit 1470ea
	internal MyWindow (MyApplication app) {
Packit 1470ea
		Object (application: app, title: "Toolbar Example");
Packit 1470ea
Packit 1470ea
		this.set_default_size (400, 200);
Packit 1470ea
		var grid = new Gtk.Grid ();
Packit 1470ea
		this.add (grid);
Packit 1470ea
		grid.show ();
Packit 1470ea
Packit 1470ea
		/* Přidá nástrojovou lištu ze souboru .ui */
Packit 1470ea
		var builder = new Gtk.Builder ();
Packit 1470ea
		try {
Packit 1470ea
			builder.add_from_file ("toolbar_builder.ui");
Packit 1470ea
		}
Packit 1470ea
		/* Obsluha výjimky */
Packit 1470ea
		catch (Error e) {
Packit 1470ea
			error ("Unable to load file: %s", e.message);
Packit 1470ea
		}
Packit 1470ea
Packit 1470ea
		grid.attach (builder.get_object ("toolbar") as Gtk.Toolbar, 0, 0, 1, 1);
Packit 1470ea
Packit 1470ea
		/* Získá tyto objekty ze souboru .ui, takže se můžeme mezi nimi přepínat */
Packit 1470ea
		fullscreen_button = builder.get_object ("fullscreen_button") as Gtk.ToolButton;
Packit 1470ea
		leave_fullscreen_button = builder.get_object ("leave_fullscreen_button") as Gtk.ToolButton;
Packit 1470ea
Packit 1470ea
		/* Vytvoří akci "undo" (akce okna) */
Packit 1470ea
		var undo_action = new SimpleAction ("undo", null);
Packit 1470ea
		undo_action.activate.connect (undo_callback);
Packit 1470ea
		this.add_action (undo_action);
Packit 1470ea
Packit 1470ea
		/* Vytvoří akci "fullscreen" (akce okna) */
Packit 1470ea
		var fullscreen_action = new SimpleAction ("fullscreen", null);
Packit 1470ea
		fullscreen_action.activate.connect (fullscreen_callback);
Packit 1470ea
		this.add_action (fullscreen_action);
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void undo_callback (SimpleAction simple, Variant? parameter) {
Packit 1470ea
			print ("You clicked \"Undo\".\n");
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void fullscreen_callback (SimpleAction simple, Variant? parameter) {
Packit 1470ea
		if ((this.get_window ().get_state () & Gdk.WindowState.FULLSCREEN) != 0) {
Packit 1470ea
			this.unfullscreen ();
Packit 1470ea
			leave_fullscreen_button.hide ();
Packit 1470ea
			fullscreen_button.show ();
Packit 1470ea
		}
Packit 1470ea
		else {
Packit 1470ea
			this.fullscreen ();
Packit 1470ea
			fullscreen_button.hide ();
Packit 1470ea
			leave_fullscreen_button.show ();
Packit 1470ea
		}
Packit 1470ea
	}
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
/* Toto je aplikace */
Packit 1470ea
class MyApplication : Gtk.Application {
Packit 1470ea
	protected override void activate () {
Packit 1470ea
		new MyWindow (this).show ();
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	protected override void startup () {
Packit 1470ea
		base.startup ();
Packit 1470ea
Packit 1470ea
		/* Vytvoří akci "new" a přidá ji do aplikace */
Packit 1470ea
		var new_action = new SimpleAction ("new", null);
Packit 1470ea
		new_action.activate.connect (new_callback);
Packit 1470ea
		this.add_action (new_action);
Packit 1470ea
Packit 1470ea
		/* Vytvoří akci "open" a přidá ji do aplikace */
Packit 1470ea
		var open_action = new SimpleAction ("open", null);
Packit 1470ea
		open_action.activate.connect (open_callback);
Packit 1470ea
		this.add_action (open_action);
Packit 1470ea
Packit 1470ea
		/* Kdbyste chtěli, mohli byste akci přidat i do aplikační
Packit 1470ea
		 * nabídky
Packit 1470ea
		 */
Packit 1470ea
		//var menu = new Menu ();
Packit 1470ea
		//menu.append ("New", "app.new");
Packit 1470ea
		//this.app_menu = menu;
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void new_callback (SimpleAction action, Variant? parameter) {
Packit 1470ea
		print ("You clicked \"New\".\n");
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void open_callback (SimpleAction action, Variant? parameter) {
Packit 1470ea
			print ("You clicked \"Open\".\n");
Packit 1470ea
	}
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
/* Funkce main vytvoří aplikaci a spustí ji */
Packit 1470ea
int main (string[] args) {
Packit 1470ea
	return new MyApplication ().run (args);
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
Packit 1470ea

V této ukázce se používá následující:

Packit 1470ea
<list>
Packit 1470ea
  <item>

<link href="http://www.valadoc.org/gtk+-3.0/Gtk.Toolbar.html">Gtk.Toolbar</link>

</item>
Packit 1470ea
  <item>

<link href="http://www.valadoc.org/gtk+-3.0/Gtk.ToolButton.html">Gtk.Toolbutton</link>

</item>
Packit 1470ea
  <item>

<link href="http://www.valadoc.org/gtk+-3.0/Gtk.Stock.html">Gtk.Stock</link>

</item>
Packit 1470ea
</list>
Packit 1470ea
Packit 1470ea
</page>