IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ Discussion :

GtkAboutDialog, glade, gtkada


Sujet :

GTK+

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 251
    Par défaut GtkAboutDialog, glade, gtkada
    Bonjour.

    J'utilise Glade pour mon interface, et je colle derrière les signaux des callbacks.
    Mon soucis est que pour par exemple le gtkaboutdialog, glade me permet de le remplir en dur, dans les pallettes, pourtant j'aimerai dans mon code lui passer une variable.

    Quelqu'un a t-il une idée de comment contourner cette difficulté?

    D'avance merci.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Bonjour, je pense qu'il te suffit de charger ton interface à coup de GtkBuilder, récupérer le nom du widget qui t'intéresse, et le changer à la volée avant de l'afficher avec gtk_widet_show_all...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 251
    Par défaut
    Bonjour.
    merci de ta réponse.
    Ma fenêtre principale a un menu help.
    Ce menu help a un sous menu about.
    Lorsqu'on clique sur ce sous menu about, là, je charge mon gtkaboutdialog: cela consiste à utiliser gtkbuilder pour charger le fichier xml (glade) du gtkaboutdialog.
    Problème: il a déjà été dessiné dans glade, avec en dur le message à afficher.
    Or ce message, je veux le lui passer en paramètre, car j'ai une variable qui contient mon message, définie dans un fichier de constantes ...
    Dans le xml de gtkaboutdialog, l'id de gtkaboutdialog qui est aboutdialog1, n'est pas visible dans le code ....
    Donc, concrètement, comment lui dire, modifie le copyright qui était en dur dans glade, et prend plutôt celui de ma variable?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 251
    Par défaut
    Faut il créer un nouveau gtkaboutdialog, en utilisant cette fonction:
    function Create_Gtk_Dialog



    (Msg : Glib.UTF8_String

    ;

    Dialog_Type

    : Message_Dialog_Type

    := Information;

    Title : Glib.UTF8_String

    := "";

    Justification

    : Gtk_Justification

    := Justify_Center;

    Parent : Gtk.Window.Gtk_Window

    := null)

    return Gtk.Dialog.Gtk_Dialog

    ;

    -- Convenience function to create a new dialog.

    -- This function was introduced in GtkAda 2.0 to provide a compatibility

    -- with Message_Dialog, while using the standard Gtk.Dialog. You should add

    -- the buttons yourself, through Gtk.Dialog.Gtk_Dialog, and then display

    -- the dialog on the screen through Gtk.Dialog.Run.

    -- As opposed to Message_Dialog, you can provide your own custom buttons if

    -- needed.
    Dans ce cas, je n'ai plus à utiliser glade ... ce qui gâche tout l'intérêt de Glade ...

    Je pense qu'il faut utiliser quelque chose du genre
    function Get_Copyright
    (About : access Gtk_About_Dialog_Record) return UTF8_String
    is
    function Internal
    (About : System.Address) return Interfaces.C.Strings.chars_ptr;
    pragma Import (C, Internal, "gtk_about_dialog_get_copyright");
    begin
    return Interfaces.C.Strings.Value (Internal (Get_Object (About)));
    end Get_Copyright;
    ou
    procedure Set_Copyright
    (About : access Gtk_About_Dialog_Record;
    Copyright : UTF8_String)
    is
    procedure Internal
    (About : System.Address;
    Copyright : Interfaces.C.Strings.chars_ptr);
    pragma Import (C, Internal, "gtk_about_dialog_set_copyright");
    Tmp_Copyright : Interfaces.C.Strings.chars_ptr := New_String (Copyright);
    begin
    Internal (Get_Object (About), Tmp_Copyright);
    Free (Tmp_Copyright);
    end Set_Copyright;
    pour changer la valeur prédéfinie dans glade ...

    Sauf que set_copyright prend en paramètre le gtk_about_dialog, qui a pour id aboutdialog1 dans le fichier xml de glade, mais qui n'est pas visible dans mon code, car j'ai chargé le fichier en entier avec gtkbuilder ...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 251
    Par défaut
    Je crois que ça avance ...

    Je fais ceci:
    Set_Copyright (Get_Widget (Builder, "aboutdialog1"), "nouvelle valeur");
    sauf qu'effectivement, à la compilation, il attend un pointeur sur un gtk_about_dialog, et non un widget ...

    Donc, maintenant la question est: comment transformer un widget en un pointeur sur gtk_about_dialog?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 251
    Par défaut
    Bien entendu, cette conversion ne marche pas
    Set_Copyright (new Gtk_About_Dialog_Record'(Gtk_About_Dialog_Record(Get_Widget (Builder, "aboutdialog1"))), "nouvelle valeur");
    car le widget est plus grand que le gtk_about_dialog_record ....

    Je reviens donc à ma question initiale: faut il créer un gtk_dialog sans passer par glade (solution que je ne préfère pas), ou alors, comment accéder au gtk_dialog de glade?

    Merci pour vos réponse ...

  7. #7
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    GtkAboutDialog est un GtkWidget, il en hérite. En C, tu as juste un cast à faire avec un truc du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GTK_ABOUT_DIALOG (dialog)
    En Ada, aucune idée de comment on fait un cast. M'enfin ton avant dernier essai a l'air meilleur que le dernier. Et pour répondre à ta question, oui, il faut récupérer le widget de ton GtkBuilder et le modifier. C'est tout l'intérêt de Glade et GtkBuilder. Tu n'as pas à tout reconstruire à la main.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 251
    Par défaut Un cast ... et il marche ...
    d : Gtk_Widget;

    d:=Get_Widget (Builder, "aboutdialog1");

    Set_Copyright (gtk_about_dialog(d), "nouvelle valeur");
    Merci les mecs ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Glade] gtkada widget avec un nombre variable de texbuffer
    Par christianf dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 08/05/2014, 09h11
  2. glade gtkada drawingarea tag check failed
    Par christianf dans le forum GTK+
    Réponses: 2
    Dernier message: 08/04/2013, 12h10
  3. gtkada glade callbacks documentation
    Par christianf dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 09/10/2012, 19h22
  4. générer du code gtkada avec glade 3
    Par christianf dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 04/10/2012, 14h35
  5. Installation d'Anjuta + Glade
    Par Noki dans le forum Applications et environnements graphiques
    Réponses: 12
    Dernier message: 31/03/2004, 23h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo