1 / 28
Contenido
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
Preliminares (I)
Preliminares (II)
Preliminares (III)
MVC (I)
MVC (II)
MVC: Modelo. Capa de la Aplicacion
MVC: Vista. Capa de Presentaci
on
MVC: Controlador. Capa de Interacci
on
MVC: Diagrama de interacci
on entre capas
Gtk+ (I)
Gtk+ (II)
Gtk+ + Vala + signal/handler (I)
Gtk+ + Vala + signal/handler (II)
Gtk+ + Vala + signal/handler (III)
Gtk+ + Vala + signal/handler (IV)
Gtk+ Widgets (I)
Gtk+ Widgets (II)
Glade (I)
Glade (II)
Glade (III)
Glade (IV)
Glade (V)
Glade + Gtk+ (I)
Glade + Gtk+ (II)
Glade + Gtk+ (III)
Glade + Gtk+ (IV)
2 / 28
Preliminares (I)
ya que para
escribir el codigo de nuestras aplicaciones haremos uso de la misma.
MVC
El interfaz gr
afico de nuestras aplicaciones de escritorio empleara la
biblioteca Gtk+ .
3 / 28
Preliminares (II)
Veremos como crear gr
aficamente el interfaz de la aplicacion con un
de usuario dise
nado. Estos archivos se pueden leer/cargar desde
diversos lenguajes de programaci
on: C, C++, C#, Vala, Java,
etc. . .
Todo esto lo haremos con el lenguaje de programaci
on Vala empleado
4 / 28
Preliminares (III)
Gtk+.
Estas son GLib y Gobject .
Esto influye para que con Vala sea muy sencillo construir aplicaciones
MVC (I)
6 / 28
MVC (II)
en capas, concretamente 3:
1
2
3
Modelo
Vista
Controlador
sin afectar a las otras, p.e., tener diferentes vistas para un mismo
modelo.
Esta divisi
on del codigo garantiza mayor facilidad de portabilidad y de
7 / 28
Es la representaci
on software del problema a resolver, sus datos,
Sirve para mostrar al usuario los datos del modelo que le interesan
en modo texto. . .
Las vistas se comunican con los modelos de forma bi-direccional
9 / 28
Contiene el c
odigo que hace de interfaz entre los dispositivos de
10 / 28
11 / 28
Gtk+ (I)
aplicacion: glade .
12 / 28
Gtk+ (II)
Gtk+ es actualizado sistem
aticamente un par de veces al a
no, hoy da
public v i r t u a l void a c t i v a t e ()
3
5
The a c t i v a t e s i g n a l on G t k B u t t o n i s an a c t i o n s i g n a l and
e m i t t i n g i t causes the button to animate p r e s s then
release . . . .
public v i r t u a l void c l i c k e d ()
E m i t t e d when t h e b u t t o n h a s b e e n a c t i v a t e d ( p r e s s e d and
released ) .
11
...
14 / 28
// F i l e : gtkh e l l o . v a l a
u s i n g Gtk ;
i n t main ( s t r i n g [ ] a r g s ) {
Gtk . i n i t ( r e f a r g s ) ;
6
v a r window = new Window ( ) ; // Gtk . Window ( u s i n g Gtk )
window . t i t l e = " First GTK + Program " ;
window . b o r d e r w i d t h = 1 0 ;
window . w i n d o w p o s i t i o n = W i n d o w P o s i t i o n . CENTER ;
window . s e t d e f a u l t s i z e ( 3 5 0 , 7 0 ) ;
window . d e s t r o y . c o n n e c t ( Gtk . m a i n q u i t ) ;
8
10
12
14
16
window . add ( b u t t o n ) ;
window . s h o w a l l ( ) ;
18
20
22
Gtk . main ( ) ;
return 0;
}
clase Gtk.Button.
16 / 28
contenga.
Gtk.main(): Es el bucle de espera de eventos, de
el solo salimos para
finalizar la aplicacion.
17 / 28
GtkWidget .
En Vala el prefijo Gtk de cualquier identificador, p.e. GtkWidget se
Disponemos de la documentaci
on equivalente para la adaptacion de
18 / 28
limitacion.
Existe un tipo especial de widgets que son los contenedores,
Glade (I)
Glade es el constructor gr
afico oficial de interfaces de usuario para
Gtk+.
El aspecto que presenta es as:
20 / 28
Glade (II)
Creamos las ventanas, dialogos, etc. . . iniciales eligiendolos de entre la
lista de Niveles superiores:
21 / 28
Glade (III)
Le a
nadimos los contenedores necesarios para construir nuestro interfaz:
22 / 28
Glade (IV)
Insertamos en los huecos de los contenedores los widgets que
necesitemos, p.e. botones, etiquetas de texto, campos de texto editable,
etc. . . :
23 / 28
Glade (V)
men
u Archivo.
Son archivos de texto en formato xml.
Suelen llevar la extensi
on .ui.
Desde nuestra aplicaci
on los cargamos dinamicamente con un objeto
de la clase Gtk.Builder.
Con el m
etodo add from file leemos el archivo .ui.
Con el m
etodo get object cargamos uno a uno por su nombre los
24 / 28
la transparencia 15.
2
4
6
8
10
12
14
16
18
20
22
26 / 28
se
nales en Glade.
Veamoslo con un ejemplo:
1
u s i n g Gtk ;
namespace Foo {
p u b l i c c l a s s MyBar {
5
[ CCode ( i n s t a n c e p o s = 1) ]
p u b l i c v o i d o n b u t t o n 1 c l i c k e d ( Button s o u r c e ) {
s o u r c e . l a b e l = " Thank you ! " ;
}
7
9
[ CCode ( i n s t a n c e p o s = 1) ]
p u b l i c v o i d o n b u t t o n 2 c l i c k e d ( Button s o u r c e ) {
s o u r c e . l a b e l = " Thanks ! " ;
}
11
13
}
15
}
17
19
21
// . . .
v a r o b j e c t = new Foo . MyBar ( ) ;
builder . connect signals ( object ) ;
// . . .
27 / 28
28 / 28