# Barra de ferramentas creada usando Glade (Vala)

Tiffany Antopolski
tiffany.antopolski@gmail.com 2012
Unha barra de botóns
Fran Dieguez
frandieguez@gnome.org 2012-2013.

# Barra de ferramentas creada empregando Glade

This example is similar to , except we use Glade to create the toolbar in an XML ui file.

To create the toolbar using the Glade Interface Designer:

Open Glade, and save the file as toolbar_builder.ui

Screenshot of Glade ui

Under Containers on the left hand side, right click on the toolbar icon and select Add widget as toplevel.

Screenshot of toolbar icon in Glade ui

Under the General tab on the bottom right, change the Name to toolbar and Show Arrow to No.

Screenshot of General tab

Under the Common tab, set Horizontal Expand to Yes.

Screenshot of Common tab

Prema co botón dereito sobre a barra de ferramentas na parte superior dereita e seleccione Editar. A xanela Editor da barra de ferramentas aparecerá.

Screenshot of where to right click to edit toolbar.

Queremos engadir 5 ToolButtons: Novo, Abrir, Desfacer, Pantalla completa e Saír da pantalla completa. Primeiro, precisamos engadir o ToolButton Novo.

Baixo a lapela Xerarquía, prema Engadir.

Cambie o nome do TollItem a new_button.

Scroll down and set Is important to Yes. This will cause the label of the ToolButton to be shown, when you view the toolbar.

Escriba o nome da acción: app.new.

Cambie a Etiqueta a Nova.

Seleccione o Id de inventario New desde o menú despregábel, ou o tipo gtk-new.

Repita os pasos de arriba cos TollButtons que faltan, coas seguintes propiedades:

Nome | É importante | Nome da acción | Etiqueta | ID de inventario
--- | --- | --- | --- | ---
open_button | Si | app.open | Open | gtk-open
undo_button | Si | win.undo | Desfacer | gtk-undo
fullscreen_button | Si | win.fullscreen | Pantalla completa | gtk-fullscreen
leave_fullscreen_button | Si | win.fullscreen | Saír do modo de pantalla completa | gtk-leave-fullscreen

Pechar o Editor de barra de ferramentas.

When our program will first start, we don't want the Leave Fullscreen ToolButton to be visible, since the application will not be in fullscreen mode. You can set this in the Common tab, by clicking the Visible property to No. The ToolButton will still appear in the interface designer, but will behave correctly when the file is loaded into your program code.

Setting the visible property to No

Garde o seu traballo e saia de Glade.

The XML file created by Glade is shown below. This is the description of the toolbar. At the time of this writing, the option to add the class Gtk.STYLE_CLASS_PRIMARY_TOOLBAR in the Glade Interface did not exist. We can manually add this to the XML file. To do this, add the following XML code at line 9 of toolbar_builder.ui:

<style> <class name="primary-toolbar"/> </style>

Se non engade isto, o programa funcionará igual. Porén barra de ferramentas resultante semellará un pouco diferente á captura de pantalla da parte superior desta páxina.

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

Agora crearemos o código de embaixo, que engade a barra de ferrametnas desde o ficheiro que creamos.

/* This is the Window */ class MyWindow : Gtk.ApplicationWindow {

/* Declare these two ToolButtons, as we will get them * from the ui file (see lines 32 and 33), so we can * hide() and show() them as needed.*/ Gtk.ToolButton fullscreen_button; Gtk.ToolButton leave_fullscreen_button;

/* Constructor */ internal MyWindow (MyApplication app) { Object (application: app, title: "Toolbar Example");

this.set_default_size (400, 200); var grid = new Gtk.Grid (); this.add (grid); grid.show ();

/* add the toolbar from the ui file */ var builder = new Gtk.Builder (); try { builder.add_from_file ("toolbar_builder.ui"); } /* Handle the exception */ catch (Error e) { error ("Unable to load file: %s", e.message); }

grid.attach (builder.get_object ("toolbar") as Gtk.Toolbar, 0, 0, 1, 1);

/* get these objects from the ui file so we can toggle between them */ fullscreen_button = builder.get_object ("fullscreen_button") as Gtk.ToolButton; leave_fullscreen_button = builder.get_object ("leave_fullscreen_button") as Gtk.ToolButton;

/* create the "undo" window action action */ var undo_action = new SimpleAction ("undo", null); undo_action.activate.connect (undo_callback); this.add_action (undo_action);

/* create the "fullscreen" window action */ var fullscreen_action = new SimpleAction ("fullscreen", null); fullscreen_action.activate.connect (fullscreen_callback); this.add_action (fullscreen_action); }

void undo_callback (SimpleAction simple, Variant? parameter) { print ("You clicked \"Undo\".\n"); }

void fullscreen_callback (SimpleAction simple, Variant? parameter) { if ((this.get_window ().get_state () & Gdk.WindowState.FULLSCREEN) != 0) { this.unfullscreen (); leave_fullscreen_button.hide (); fullscreen_button.show (); } else { this.fullscreen (); fullscreen_button.hide (); leave_fullscreen_button.show (); } } }

/* This is the application */ class MyApplication : Gtk.Application { protected override void activate () { new MyWindow (this).show (); }

protected override void startup () { base.startup ();

/* Create the "new" action and add it to the app*/ var new_action = new SimpleAction ("new", null); new_action.activate.connect (new_callback); this.add_action (new_action);

/* Create the "open" action, and add it to the app */ var open_action = new SimpleAction ("open", null); open_action.activate.connect (open_callback); this.add_action (open_action);

/* You could also add the action to the app menu * if you wanted to. */ //var menu = new Menu (); //menu.append ("New", "app.new"); //this.app_menu = menu; }

void new_callback (SimpleAction action, Variant? parameter) { print ("You clicked \"New\".\n"); }

void open_callback (SimpleAction action, Variant? parameter) { print ("You clicked \"Open\".\n"); } }

/* The main function creates the application and runs it. */ int main (string[] args) { return new MyApplication ().run (args); }

Neste exemplo empregaremos o seguinte:

Gtk.Toolbar

Gtk.Toolbutton

Gtk.Stock