FAQ GTK+Consultez toutes les FAQ

Nombre d'auteurs : 10, nombre de questions : 101, dernière mise à jour : 30 septembre 2008  Ajouter une question

 

Cette faq a été réalisée à partir des questions fréquemment posées sur les forums de www.developpez.com et de l'expérience personnelle des auteurs.
Je tiens à souligner que cette faq ne garantit en aucun cas que les informations qu'elle propose sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Cette faq ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci.
Sur ce, nous vous souhaitons une bonne lecture, L'équipe GTK+.


SommaireGlade (5)
précédent sommaire
 

Glade est un outil de développement rapide d'interface graphique (RAD) pour GTK+.
Il génère un fichier XML représentant l'interface. Ce dernier peut être manipulé à l'aide la libglade.

Mis à jour le 30 septembre 2008 sub_khaine

Depuis GTK+ 2.12, GTK+ inclue GtkBuilder qui à la même utilité que la libglade, c'est à dire manipuler des fichiers XML décrivant une interface graphique.

Pour pouvoir utiliser les fichiers générés par Glade avec GtkBuilder, il faut les convertir à l'aide de gtk-builder-convert :

Code : Sélectionner tout
gtk-builder-convert file.glade file.ui

Mis à jour le 30 septembre 2008 sub_khaine

C'est en effet un bug de Glade3, il ajoute automatiquement la propriété response_id pour ce type de widget (et dérivé, tel que les GtkCheckButton). Ceci a pour effet de faire passer l'action dans le bloc switch/case de la boîte de dialogue dans le code source.

Pour empêcher cela, il faut trouver la ligne (une par widget possédant cette propriété) correspondant à cette propriété dans le fichier *.glade de votre interface et la supprimer :

Code xml : Sélectionner tout
<property name="response_id">0</property>

Mis à jour le 30 septembre 2008 sub_khaine

Glade est un outil très puissant pour développer rapidement une interface utilisateur, cependant son intégration dans le reste du code n'est pas naturelle au premier abord.

Une solution est de créer une classe abstraite qui va s'occuper de charger le fichier XML. Ensuite on crée une classe fille qui implémentera les fonctions de rappels spécifiées dans glade.

Sam Liddicott à créer une fille de style xslt qui permet de convertir un fichier XML (glade ou GtkBuilder) en classe Vala.

Voici un exemple d'utilisation :

  • Pour commencer, récupérez le fichier xslt : gen-vala-gtk-widget-bindings.xslt
  • A partir du fichier XML suivant (GtkBuilder) :
  • Lancer la commande suivante afin d'obtenir la classe Vala :
    Code xml : Sélectionner tout
    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
    <?xml version="1.0"?> 
    <!--Generated with glade3 3.4.5 on Wed Jun 25 10:19:38 2008 --> 
    <interface> 
      <object class="GtkWindow" id="GladeValaDemo"> 
        <property name="visible">True</property> 
        <signal handler="on_GladeValaDemo_destroy" name="destroy"/> 
        <child> 
          <object class="GtkVBox" id="vbox1"> 
            <property name="visible">True</property> 
            <child> 
              <object class="GtkLabel" id="label"> 
                <property name="visible">True</property> 
                <property name="label" translatable="yes">Press the button to see not much happen</property> 
              </object> 
            </child> 
            <child> 
              <object class="GtkButton" id="button1"> 
                <property name="visible">True</property> 
                <property name="can_focus">True</property> 
                <property name="receives_default">True</property> 
                <property name="label" translatable="yes">gtk-ok</property> 
                <property name="use_stock">True</property> 
                <signal handler="on_button1_clicked" name="clicked"/> 
              </object> 
              <packing> 
                <property name="position">1</property> 
              </packing> 
            </child> 
            <child> 
              <object class="GtkStatusbar" id="statusbar1"> 
                <property name="visible">True</property> 
                <property name="spacing">2</property> 
              </object> 
              <packing> 
                <property name="expand">False</property> 
                <property name="position">2</property> 
              </packing> 
            </child> 
          </object> 
        </child> 
      </object> 
    </interface>
    Code : Sélectionner tout
    xsltproc -nodtdattr gen-vala-gltk-widget-bindings.xslt > glade-vala-demo.vala
  • Pour finir, nous créons notre classe fille :
    Code vala : Sélectionner tout
    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
    using Gtk; 
      
    public class GladeValaDemoWindow : GladeValaDemo { 
      
        construct { 
            /* can't derive this text automatically yet */ 
            this.connect_signals("glade_vala_demo_window_"); 
        } 
      
        [CCode (instance_pos = -1)] 
        public void on_button1_clicked(Gtk.Widget widget) { 
            stdout.printf("You clicked it\n"); 
            this.widgets.label.label="You clicked it"; 
        } 
      
        [CCode (instance_pos = -1)] 
        public void on_GladeValaDemo_destroy (Gtk.Widget widget) { 
            stdout.printf ("Destroying!\n"); 
            Gtk.main_quit (); 
        } 
      
        public static int main (string[] args) { 
            Gtk.init (ref args); 
      
            var sample = new GladeValaDemoWindow (); 
      
            Gtk.main (); 
            return 0; 
        } 
    }


Il est nécessaire d'utiliser l'annotation instance_pos pour les fonctions de rappels afin de récupérer correctement l'instance de notre classe (qui est passée comme dernier argument à la fonction).

Avec les autotools, il est simple d'automatiser cette tâche, afin que la classe abstraite soit recréée après une modification du fichier XML.

Mis à jour le 30 septembre 2008 sub_khaine

Pour que libglade (ou GtkBuilder) puisse faire appel à vos fonctions callback il est nécessaire qu'elles soient exportées lors de l'édition des liens.

Vous devez simplement rajouter l'option suivante :

Code : Sélectionner tout
-Wl,--export-dynamic

Mis à jour le 30 septembre 2008 sub_khaine

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Contacter le responsable de la rubrique GTK+