SlideShare uma empresa Scribd logo
Mantendo a Sanidade Com o Glade Marcelo Lira dos Santos INdT Recife
"horrores que o homem não deveria saber que existem"
"horrores que o homem não deveria saber que existem" Processo de criação de uma aplicação gráfica: Criar a interface com alguma aplicação visual Gerar código Alterar código gerado Precisar alterar a interface Gerar mais código Re-inserir alterações no novo código gerado Voltar indefinidamente ao passo 4 Perder o juízo
"horrores que o homem não deveria saber que existem"
Preliminares
GTK+ Toolkit gráfico multiplataforma Linux, Windows, MacOS X Escrito em C Usado por GNOME XFCE Maemo OLPC OpenMoko
Widgets Elemento da interface com o qual o usuário interage Widget: Window Gadget Propriedades importantes de um widget: Identificação (nome) Estímulos aos quais ele responde Instruções para disposição (layout)
GTK+ GTK+ GDK GLib (all your) Widgets (are belong to us) Abstração das funções primitivas de desenho da plataforma Orientação a Objetos para C (uau!)
Bindings Zilhões de bindings Vantagem: use sua linguagem preferida C++ (gtkmm) Python (PyGTK) Java (Java-GNOME) C# (GTK#/Mono) Vala PHP (PHP-GTK) Perl (gtk2-perl) Haskell (Gtk2Hs) Ruby (Ruby-GNOME2) Lua (lua-gtk) D (DUI) Ada (GtkAda) GTK+
Dissecando a Estrutura Uma aplicação simples num simples ambiente gráfico
Dissecando a Estrutura Servidor X Gerenciador de Janelas Janela GDK Widget da Janela Demais widgets
Descrevendo a Estrutura XML Boa para descrever estrutura <janela> <caixadetexto/>   <botao/> </janela>
Analisando o Comportamento Conceitos Eventos Main Loop Sinais Callbacks
Camadas Dizem que é uma boa prática de programação!
Codando
Codando Interfaces (em C) #include <gtk/gtk.h> void on_button_clicked(GtkWidget *button) { g_print(&quot;Botao clicado.\n&quot;); } int main(int argc, char *argv[]) {   GtkWidget *window;   GtkWidget *vbox;   GtkWidget *label;   GtkWidget *button;   gtk_init(&argc, &argv);   g_set_application_name(&quot;Perdendo a sanidade...&quot;);   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);   vbox = gtk_vbox_new(FALSE, 2);   label = gtk_label_new(&quot;Sou um label!&quot;);   gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);   button = gtk_button_new_with_label(&quot;Me clique!&quot;);   gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0);   g_signal_connect(G_OBJECT(button), &quot;clicked&quot;,   G_CALLBACK(on_button_clicked), G_OBJECT(label));   gtk_container_add(GTK_CONTAINER(window), vbox);   g_signal_connect(G_OBJECT(window), &quot;delete_event&quot;,   G_CALLBACK(gtk_main_quit), NULL);   gtk_widget_show_all(window);   gtk_main();   return 0; }
Codando Interfaces (em Vala) using GLib; using Gtk; public class Hello : Window {   [Widget] protected VBox vbox;   [Widget] protected Label label;   [Widget] protected Button button;   void on_button_clicked(Button button) { stdout.printf(&quot;Botao clicado.\n&quot;); }   construct {   label = new Label(&quot;Sou um label!&quot;);   button = new Button.with_label(&quot;Me clique!&quot;);   button.clicked += on_button_clicked;   vbox = new VBox(false, 2);   vbox.pack_start(label, true, true, 0);   vbox.pack_start(button, false, true, 0);   add(vbox);   delete_event += Gtk.main_quit;   }   static int main (string[] args) {   Gtk.init(out args);   Environment.set_application_name(&quot;Perdendo a sanidade...&quot;);   Hello hello = new Hello();   hello.show_all();   Gtk.main();   return 0;   } }
Codando Interfaces (em Python) setanta@poe:~/mantendoasanidade$ python >>> import gtk >>> window = gtk.Window() >>> vbox = gtk.VBox() >>> label = gtk.Label(&quot;Sou um label!&quot;) >>> button = gtk.Button(&quot;Me clique!&quot;) >>> vbox.pack_start(label) >>> vbox.pack_start(button) >>> window.add(vbox) >>> def on_button_clicked(button): ...  print button ...  >>> button.connect(&quot;clicked&quot;, on_button_clicked) 7L >>> window.show_all() >>> gtk.main()
DevHelp (pra não ter de lembrar de tudo e esquecer seu nome)
Usando o Glade (a aplicacão)
Arquivo Glade
Usando a LibGlade Constrói a interface a partir do XML contido: num arquivo numa string Conectando sinais e eventos conexão individual autoconnect diferencas de uso nas várias linguagens
Usando a LibGlade (em C) // file: hello_glade.c #include <gtk/gtk.h> #include <glade/glade.h> void on_button_clicked(GtkWidget *button) { g_print(&quot;Botao clicado.\n&quot;); } int main(int argc, char *argv[]) {   GladeXML *widget_tree;   GtkWidget *window;   gtk_init(&argc, &argv);   g_set_application_name(&quot;Perdendo a sanidade...&quot;);   widget_tree = glade_xml_new(&quot;simple.glade&quot;, NULL, NULL);   window = glade_xml_get_widget(widget_tree, &quot;window1&quot;);   glade_xml_signal_autoconnect(widget_tree);   gtk_widget_show_all(window);   gtk_main();   return 0; } ----- para compilar: gcc  -rdynamic  `pkg-config --libs --cflags gtk+-2.0 libglade-2.0` hello_glade.c -o hello_glade
Codando Interfaces (em Python) setanta@poe:~/mantendoasanidade$ python >>> import gtk >>>  import gtk.glade >>> class Sample: ...  def __init__(self): ...  self.widget_tree = gtk.glade.XML(&quot;sample.glade&quot;) ...  self.window = self.widget_tree.get_widget(&quot;window1&quot;) ...  self.widget_tree.signal_autoconnect(self) ...  self.window.show_all() ...  gtk.main() ...  def on_apply_button_clicked(self, button): ...  print &quot;Botao clicado.&quot; ...  >>> sample = Sample()
Possibilidades
GtkBuilder A partir de GTK+ 2.12, pode-se usar  GtkBuilder  para construir interfaces a partir de descrições em XML Ainda está um tanto incompleta em relação à  libglade
E se...? O XML de uma interface criada no Glade poderia ser convertido para HTML+CSS+JavaScript
Referências http://www.gtk.org GTK+ em Win32 http://gladewin32.sourceforge.net/modules/news/ http://www.pygtk.org/ Mantendo a Sanidade com o Glade http://www.cin.ufpe.br/~cinlug/wiki/index.php/Mantendo_A_Sanidade_Com_O_Glade
Notas (para mim mesmo) -- APAGUE escolha um ponto para mencionar o DevHelp e os pacotes -doc mencione os pacotes -dev quando comecar a programar
Atribuição-Compartilhamento pela mesma licença 2.5 ( http://creativecommons.org/licenses/by-sa/2.5/deed.pt ) Você pode: copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra Sob as seguintes condições: Atribuição.  Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante. Compartilhamento pela mesma Licença.  Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta. Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra. Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor. Qualquer direito de uso legítimo (ou &quot;fair use&quot;) concedido por lei, ou qualquer outro direito protegido pela legislação local, não são em hipótese alguma afetados pelo disposto acima. Este é um sumário para leigos da Licença Jurídica (na íntegra:  http://creativecommons.org/licenses/by-sa/2.5/br/legalcode ). Termo de exoneração de responsabilidade:  http://creativecommons.org/licenses/disclaimer-popup?lang=pt

Mais conteúdo relacionado

Semelhante a Mantendo a Sanidade com o Glade (20)

ODP
Desenvolvendo GUI com GTK+ - Frederico Schardong
Tchelinux
 
PDF
glade.pdf
ssuser8a26122
 
PDF
FLTK Summer Course - Part I - First Impact
Michel Alves
 
PDF
ESLPE 2008 - Desenvolvendo aplicações no Linux
Jorge Pereira
 
PPTX
Ruby No Desktop - Marcelo Castellani
guest2a3a90
 
PPTX
Ruby No Desktop - Marcelo Castellani
Hugo Borges
 
PDF
Qt tchelinux-2010
Wagner Reck
 
PDF
Dia Debian 2007 - Desenvolvendo aplicações no Linux
Jorge Pereira
 
DOCX
Biblioteca de interface grafica
Leonardo Lima
 
PDF
Programando em python interfaces graficas com tk
samuelthiago
 
PPTX
Minicurso wxWidgets
Renzo Petri
 
PDF
Criando aplicações com PHP-GTK
Pablo Dall'Oglio
 
PDF
Qt Apresentação
Elaine Naomi
 
PDF
Python Para Maemo
Osvaldo Santana Neto
 
PPTX
Construção de interfaces gráficas com Tkinter
Marcos Castro
 
KEY
Mini-curso de linux básico
Adriano Melo
 
PDF
Linux, Software Livre e tudo mais
guilhermemar
 
PPTX
ExtJS Jumpstart Parte 2
Daniel Da Cunha Bueno
 
PDF
Apresentação wxWidgets
Renzo Petri
 
Desenvolvendo GUI com GTK+ - Frederico Schardong
Tchelinux
 
glade.pdf
ssuser8a26122
 
FLTK Summer Course - Part I - First Impact
Michel Alves
 
ESLPE 2008 - Desenvolvendo aplicações no Linux
Jorge Pereira
 
Ruby No Desktop - Marcelo Castellani
guest2a3a90
 
Ruby No Desktop - Marcelo Castellani
Hugo Borges
 
Qt tchelinux-2010
Wagner Reck
 
Dia Debian 2007 - Desenvolvendo aplicações no Linux
Jorge Pereira
 
Biblioteca de interface grafica
Leonardo Lima
 
Programando em python interfaces graficas com tk
samuelthiago
 
Minicurso wxWidgets
Renzo Petri
 
Criando aplicações com PHP-GTK
Pablo Dall'Oglio
 
Qt Apresentação
Elaine Naomi
 
Python Para Maemo
Osvaldo Santana Neto
 
Construção de interfaces gráficas com Tkinter
Marcos Castro
 
Mini-curso de linux básico
Adriano Melo
 
Linux, Software Livre e tudo mais
guilhermemar
 
ExtJS Jumpstart Parte 2
Daniel Da Cunha Bueno
 
Apresentação wxWidgets
Renzo Petri
 

Último (6)

PDF
Apresentação sobre Funções Matemáticas e o módulo.pdf
Gabriel Vitor
 
PPTX
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
PDF
Apresentação de Manipulação de strings em Python .pdf
Gabriel Vitor
 
PPTX
Gestão de Mudanças - O que é e como é implementada
Gateware Group
 
PDF
SENAC Modelagem de Dados - Aula02 curso de ADS.pdf
JhonataLamim1
 
PDF
SENAC Modelagem de Dados - Aula01 do curso de ADSpdf
JhonataLamim1
 
Apresentação sobre Funções Matemáticas e o módulo.pdf
Gabriel Vitor
 
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
Apresentação de Manipulação de strings em Python .pdf
Gabriel Vitor
 
Gestão de Mudanças - O que é e como é implementada
Gateware Group
 
SENAC Modelagem de Dados - Aula02 curso de ADS.pdf
JhonataLamim1
 
SENAC Modelagem de Dados - Aula01 do curso de ADSpdf
JhonataLamim1
 
Anúncio

Mantendo a Sanidade com o Glade

  • 1. Mantendo a Sanidade Com o Glade Marcelo Lira dos Santos INdT Recife
  • 2. &quot;horrores que o homem não deveria saber que existem&quot;
  • 3. &quot;horrores que o homem não deveria saber que existem&quot; Processo de criação de uma aplicação gráfica: Criar a interface com alguma aplicação visual Gerar código Alterar código gerado Precisar alterar a interface Gerar mais código Re-inserir alterações no novo código gerado Voltar indefinidamente ao passo 4 Perder o juízo
  • 4. &quot;horrores que o homem não deveria saber que existem&quot;
  • 6. GTK+ Toolkit gráfico multiplataforma Linux, Windows, MacOS X Escrito em C Usado por GNOME XFCE Maemo OLPC OpenMoko
  • 7. Widgets Elemento da interface com o qual o usuário interage Widget: Window Gadget Propriedades importantes de um widget: Identificação (nome) Estímulos aos quais ele responde Instruções para disposição (layout)
  • 8. GTK+ GTK+ GDK GLib (all your) Widgets (are belong to us) Abstração das funções primitivas de desenho da plataforma Orientação a Objetos para C (uau!)
  • 9. Bindings Zilhões de bindings Vantagem: use sua linguagem preferida C++ (gtkmm) Python (PyGTK) Java (Java-GNOME) C# (GTK#/Mono) Vala PHP (PHP-GTK) Perl (gtk2-perl) Haskell (Gtk2Hs) Ruby (Ruby-GNOME2) Lua (lua-gtk) D (DUI) Ada (GtkAda) GTK+
  • 10. Dissecando a Estrutura Uma aplicação simples num simples ambiente gráfico
  • 11. Dissecando a Estrutura Servidor X Gerenciador de Janelas Janela GDK Widget da Janela Demais widgets
  • 12. Descrevendo a Estrutura XML Boa para descrever estrutura <janela> <caixadetexto/> <botao/> </janela>
  • 13. Analisando o Comportamento Conceitos Eventos Main Loop Sinais Callbacks
  • 14. Camadas Dizem que é uma boa prática de programação!
  • 16. Codando Interfaces (em C) #include <gtk/gtk.h> void on_button_clicked(GtkWidget *button) { g_print(&quot;Botao clicado.\n&quot;); } int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *vbox; GtkWidget *label; GtkWidget *button; gtk_init(&argc, &argv); g_set_application_name(&quot;Perdendo a sanidade...&quot;); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); vbox = gtk_vbox_new(FALSE, 2); label = gtk_label_new(&quot;Sou um label!&quot;); gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0); button = gtk_button_new_with_label(&quot;Me clique!&quot;); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0); g_signal_connect(G_OBJECT(button), &quot;clicked&quot;, G_CALLBACK(on_button_clicked), G_OBJECT(label)); gtk_container_add(GTK_CONTAINER(window), vbox); g_signal_connect(G_OBJECT(window), &quot;delete_event&quot;, G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0; }
  • 17. Codando Interfaces (em Vala) using GLib; using Gtk; public class Hello : Window { [Widget] protected VBox vbox; [Widget] protected Label label; [Widget] protected Button button; void on_button_clicked(Button button) { stdout.printf(&quot;Botao clicado.\n&quot;); } construct { label = new Label(&quot;Sou um label!&quot;); button = new Button.with_label(&quot;Me clique!&quot;); button.clicked += on_button_clicked; vbox = new VBox(false, 2); vbox.pack_start(label, true, true, 0); vbox.pack_start(button, false, true, 0); add(vbox); delete_event += Gtk.main_quit; } static int main (string[] args) { Gtk.init(out args); Environment.set_application_name(&quot;Perdendo a sanidade...&quot;); Hello hello = new Hello(); hello.show_all(); Gtk.main(); return 0; } }
  • 18. Codando Interfaces (em Python) setanta@poe:~/mantendoasanidade$ python >>> import gtk >>> window = gtk.Window() >>> vbox = gtk.VBox() >>> label = gtk.Label(&quot;Sou um label!&quot;) >>> button = gtk.Button(&quot;Me clique!&quot;) >>> vbox.pack_start(label) >>> vbox.pack_start(button) >>> window.add(vbox) >>> def on_button_clicked(button): ... print button ... >>> button.connect(&quot;clicked&quot;, on_button_clicked) 7L >>> window.show_all() >>> gtk.main()
  • 19. DevHelp (pra não ter de lembrar de tudo e esquecer seu nome)
  • 20. Usando o Glade (a aplicacão)
  • 22. Usando a LibGlade Constrói a interface a partir do XML contido: num arquivo numa string Conectando sinais e eventos conexão individual autoconnect diferencas de uso nas várias linguagens
  • 23. Usando a LibGlade (em C) // file: hello_glade.c #include <gtk/gtk.h> #include <glade/glade.h> void on_button_clicked(GtkWidget *button) { g_print(&quot;Botao clicado.\n&quot;); } int main(int argc, char *argv[]) { GladeXML *widget_tree; GtkWidget *window; gtk_init(&argc, &argv); g_set_application_name(&quot;Perdendo a sanidade...&quot;); widget_tree = glade_xml_new(&quot;simple.glade&quot;, NULL, NULL); window = glade_xml_get_widget(widget_tree, &quot;window1&quot;); glade_xml_signal_autoconnect(widget_tree); gtk_widget_show_all(window); gtk_main(); return 0; } ----- para compilar: gcc -rdynamic `pkg-config --libs --cflags gtk+-2.0 libglade-2.0` hello_glade.c -o hello_glade
  • 24. Codando Interfaces (em Python) setanta@poe:~/mantendoasanidade$ python >>> import gtk >>> import gtk.glade >>> class Sample: ... def __init__(self): ... self.widget_tree = gtk.glade.XML(&quot;sample.glade&quot;) ... self.window = self.widget_tree.get_widget(&quot;window1&quot;) ... self.widget_tree.signal_autoconnect(self) ... self.window.show_all() ... gtk.main() ... def on_apply_button_clicked(self, button): ... print &quot;Botao clicado.&quot; ... >>> sample = Sample()
  • 26. GtkBuilder A partir de GTK+ 2.12, pode-se usar GtkBuilder para construir interfaces a partir de descrições em XML Ainda está um tanto incompleta em relação à libglade
  • 27. E se...? O XML de uma interface criada no Glade poderia ser convertido para HTML+CSS+JavaScript
  • 28. Referências http://www.gtk.org GTK+ em Win32 http://gladewin32.sourceforge.net/modules/news/ http://www.pygtk.org/ Mantendo a Sanidade com o Glade http://www.cin.ufpe.br/~cinlug/wiki/index.php/Mantendo_A_Sanidade_Com_O_Glade
  • 29. Notas (para mim mesmo) -- APAGUE escolha um ponto para mencionar o DevHelp e os pacotes -doc mencione os pacotes -dev quando comecar a programar
  • 30. Atribuição-Compartilhamento pela mesma licença 2.5 ( http://creativecommons.org/licenses/by-sa/2.5/deed.pt ) Você pode: copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra Sob as seguintes condições: Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante. Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta. Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra. Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor. Qualquer direito de uso legítimo (ou &quot;fair use&quot;) concedido por lei, ou qualquer outro direito protegido pela legislação local, não são em hipótese alguma afetados pelo disposto acima. Este é um sumário para leigos da Licença Jurídica (na íntegra: http://creativecommons.org/licenses/by-sa/2.5/br/legalcode ). Termo de exoneração de responsabilidade: http://creativecommons.org/licenses/disclaimer-popup?lang=pt