• # glade

    Posté par . En réponse au journal Tutoriel Ruby/GTK. Évalué à 4.

    Salut,

    superbe doc ! J'ai posté un message sur alt.fr.comp.lang.gtk+ qui montre quelques lignes de codes ruby (pompé dans alexandria, http://alexandria.rubyforge.org/(...)) sur l'utilisation de la libglade, si ça peut t'aider pour ta doc :
    Message-ID: <pan.2004年05月14日.23.31.08.763187@taonix.net>

    Je colle ici le code pour ceux qui ne peuvent accéder à alt* :

    Une classe de chargement du fichier Glade que voici :

    class GladeBase
    def initialize(filename, root)
    file = File.join(Geekast::Config::DATA_DIR, 'glade', filename)
    glade = GladeXML.new(file, root) { |handler| method(handler) }
    glade.widget_names.each do |name|
    begin
    instance_variable_set("@#{name}".intern, glade[name])
    rescue
    end
    end
    end
    end

    Ensuite tu créés une classe qui hérite de GladeBase ou tu vas lire ton
    fichier glade, exemple :

    class CallbackPref < GladeBase
    def initialize
    super("geekast.glade", "geekast_setting")
    end
    def on_pref_cancelbutton_clicked(widget)
    @geekast_seeting.destroy
    end
    end


    "super" transfère les paramètres donnés à la méthode de la classe
    mère, donc ici la méthode initialize de GladeBase. Le 2ème paramètre
    est le widget racine (une GtkDialog ici).
    L'astuce de la classe GladeBase c'est qu'elle extrait chaque widget du
    fichier glade (à partir du noeud racine) via glade.widget_names.each et
    quelle instancie chaque widget ensuite via instance_variable_set.
    Donc le widget nommé toto sera accessible dans ton prog Ruby via @toto.

    D'ailleurs tu le vois dans ma méthode on_pref_cancelbutton_clicked qui
    détruit la dialog geekast_seeting via la méthode destroy.

    Très simple et très efficace. Par rapport au code de alexandria j'ai
    juste ajouté le paramètre root, car le Laurent, le dev, créé un projet
    glade par fenêtre ! (perso j'aime pas trop ça).