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+ avec C & C++ Discussion :

Probleme creation de widget


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Inscrit en
    Avril 2002
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 49
    Par défaut Probleme creation de widget
    Salut les filles,

    je m'attaque actuellement a la creation de mes propres widgets. Cela ne semble pas particulierement complique avec le tuto de Franck jusqu'a ce que l'on essaye.

    Le probleme ne viens pas vraiment de la creation mais plutot de l'identification de mon objet , je m'explique :

    je veux creer un object par exemple calendar2 qui soit simplement une representation graphique du calendar original de Gtk. La representation voulu c'est simplement une frame avec un label.

    Voila la structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct _GtkCalendar2{
      GtkWidget widget;
     
      const gchar *label;
    };
    je vous epargne le reste ce n'est pas vraiment necessaire.

    Voila ma function new :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    GtkWidget *gtk_calendar2_new(const gchar *label)
    {
      GtkCalendar2 *calendar2;
     
      if(label != NULL)
        calendar2 = gtk_type_new(gtk_calendar2_get_type());
     
      if(calendar2 != NULL) 
        {
          calendar2->label = label;
        }
     
      return GTK_WIDGET(calendar2);
    }
    Voila ou j'en suis. Ce que j'aimerais savoir c'est ou je doit creer ma frame avec mon label pour dire que c'est ca mon calendar2

    parceque dans le cas ou je rajoute dans la fonction new quelquechose de ce style

    if(calendar2 != NULL)
    {
    calendar2 = gtk_frame_new(label);
    }

    Cela va bien me creer le composant que je veux a chaque fois que je ferais un gtk_calendar_new("mon Label") mais le probleme viens apres sur l'identification puisque mon widget sera reconnu comme etant une frame et pas un CALENDAR2

    Donc GTK_IS_CALENDAR2(widget) me retourne faux mais GTK_IS_FRAME(widget) me retourne vrai ! Ce qui est logique puisque dams le dans la fonction new je dis que mon calendar2 = frame. Ma question est comment je peux faire ca mais tout en ayant mon object identifie comme un CALENDAR2.

    la question est generale : comment faire pour creer un widget avec d'autre widget tout en ayant celui-ci identife par son propre type.

    Je seche la dessus donc si vous pouviez m'expliquer un peu. je suppose que Franck devrait savoir..

    Merci d'avance...

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par jean
    Cela va bien me creer le composant que je veux a chaque fois que je ferais un gtk_calendar_new("mon Label")
    Si tu as des widgets à créer, il faut le faire dans la fonction ...init

    mais le probleme viens apres sur l'identification puisque mon widget sera reconnu comme etant une frame et pas un CALENDAR2
    D'après ta structure non, le widget que tu met en tant que premier membre définit le widget à partir duquel ton widget est directement dérivé, dans ton cas, une GtkWidget !

    Donc GTK_IS_CALENDAR2(widget) me retourne faux mais GTK_IS_FRAME(widget) me retourne vrai ! Ce qui est logique puisque dams le dans la fonction new je dis que mon calendar2 = frame. Ma question est comment je peux faire ca mais tout en ayant mon object identifie comme un CALENDAR2.
    Normalement cela ne devrait pas être, il devrait au moins te le reconnaître comme un GtkWidget vu que ton widget en hérite directement !

    la question est generale : comment faire pour creer un widget avec d'autre widget tout en ayant celui-ci identife par son propre type.

    Je seche la dessus donc si vous pouviez m'expliquer un peu. je suppose que Franck devrait savoir..
    Bin c'est vrai que j'ai fait un tutoriel sur la création de widget mais à partir de rien et non à partir d'un autre ... je peut te donner un lien en anglais par contre sur la création d'un widget à partir d'un GtkTable: Creating a Composite widget


    J'espère avoir pu t'aider
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre averti

    Inscrit en
    Avril 2002
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 49
    Par défaut
    D'après ta structure non, le widget que tu met en tant que premier membre définit le widget à partir duquel ton widget est directement dérivé, dans ton cas, une GtkWidget !
    Peu importe le widget dont ma classe derive du moment que je fasse calendar2 = gtk_XXX_new() , mon calendar n'est alors plus reconnu comme etant un type CALENDAR2 mais comme le type XXX.

    Bin c'est vrai que j'ai fait un tutoriel sur la création de widget mais à partir de rien et non à partir d'un autre ... je peut te donner un lien en anglais par contre sur la création d'un widget à partir d'un GtkTable: Creating a Composite widget
    Merci pour le lien...je l'avais trouve deja mais il ma pas vraiment aide.

    En faite peu importe le faite de creer ou non un widget a partir de rien ou a partir d'autre composant le probleme et la question reste les meme.
    J'ai ma structure , je l'initialise , etc....jusque la pas de probleme. Mais ensuite ou , quand et comment je dis a gtk de m'afficher mon widget et ce qu'il doit m'afficher ?. Si mon nouveau widget derive de la classe widget et utilise des composants deja existant le tout dans un container , ou je doit lui dire que mon widget c'est mon container avec tout ce qu'il y a dedans.

    En faisant calendar2 = XXX ? Non puisque alors mon widget est le container et il est reconnu comme etant du type du container. Ce qui est logique puisque mon calendar2 reference cet object en memoire.

    Donner des valeurs aux objects de la structure dans la fonction new() c'est bien mais ca sert a rien car mon widget sera juste une structure donc quand on l'affiche ben rien va se passer.

    Le probleme reste donc : comment et ou assigner a mon widget un composant a afficher.

  4. #4
    Membre averti

    Inscrit en
    Avril 2002
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 49
    Par défaut
    Bon ca commence a se preciser tout ca...j'ai reussi a pas mal avancé finalement..

    J'aimerais juste savoir une chose que j'ai pas encore cherché : comment fait t-on pour ajouter des GtkWidgets dans une GdkWindow (j'ai bien dis GDK et pas GTK).

    Une fois que je saurais ca je pense pouvoir arriver a faire un peu tout et n'importe quoi pour la creation de widgets. Je vous ferais un topo la dessus.

    Mais il me faut la réponse à cette question. Le pied serait que quand j'arrive au boulot demain quelqu'un y est répondu .

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par jean
    J'aimerais juste savoir une chose que j'ai pas encore cherché : comment fait t-on pour ajouter des GtkWidgets dans une GdkWindow (j'ai bien dis GDK et pas GTK).
    Ca par contre je sèche, (je sais éventuellement dessiner dedans mais sinon ...) je doute que ce soit directement possible sauf en trantypant peut-être ton GdkWindow en type Gtk... car tout widget est un sorte de GdkWindow mais celui-ci est vraiment une des briques de base de tous widgets !

    Si c'est simplement pour permettre l'ajout d'autres widgets le mieux comme dit plus haut, serait de faire hériter directement ton widget à partir d'un GtkContainer ou d'un type héritant directement de ce type (GtkBox ou GtkTable par exemple) !

    As-tu résolu ton problème de reconnaissance de type de ton widget ? Si non, montre moi une fonction où tu fait le test et aussi ta fonction ...get_type.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre averti

    Inscrit en
    Avril 2002
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 49
    Par défaut
    Oui j'arrive egalement dessiner sans probleme dans la GdkWindow. Je peux donc creer integralement ligne par ligne mon widget mais j'ai pas trop envie ^^.

    Comme tu la dit , chaque widget a une GdkWindow associe c'est ca le cle du probleme. Le travail ne doit pas se faire sur le widget que l'on creer en faisant monWidget = XXX sinon on lui reaffecte l'object XXX d'ou le probleme de type par la suite. Le travail doit ce faire sur la GdkWindow de celui-ci : widget->window pour y acceder tout simplement.

    D'ou ma question comment ajouter des gtkwidgets dans une gdkwindow...si je trouve une solution je pourrais sans probleme ajouter n'importe quelle widgets existant pour la creation d'un nouveau widget. Alors je travail la dessus.
    L'idee de deriver d'un container semble plutot pas mal , je vais encore bosser la dessus. Je vous dirais ce qu'il est ait.

    A plus tard .

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

Discussions similaires

  1. Probleme creation recordset
    Par stan314 dans le forum Access
    Réponses: 1
    Dernier message: 14/05/2006, 16h13
  2. Newbie PgSQL->Probleme Creation de table avec FOREIGN KEY
    Par ralkif dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 07/03/2006, 21h59
  3. probleme creation setup
    Par asiatik91 dans le forum Installation, Déploiement et Sécurité
    Réponses: 5
    Dernier message: 19/11/2005, 21h53
  4. access2000, probleme creation relations de tables
    Par nono_60 dans le forum Access
    Réponses: 2
    Dernier message: 12/09/2005, 22h50
  5. probleme creation projet
    Par choupinet612 dans le forum XMLRAD
    Réponses: 2
    Dernier message: 05/11/2004, 10h11

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