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 :

Un Seul ToggleButton enfoncé dans un Gtk::ButtonBox


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut Un Seul ToggleButton enfoncé dans un Gtk::ButtonBox
    Bonjour ,

    voilà , je suis en trop de développer un tchat , j'ai "fait" un système d'onglet pour les messages privés qui est un Gtk::ButtonBox qui contient des ToggleButton que je rajoute dynamiquement.
    Seulement voilà , pour l'esthétique je voudrais qu'un seul des ToggleButton soit enfoncé et le reste non pour que l'utilisateur sache dans quelle "discussion" il est.

    J'ai tenté de parcourir les boutons et de changer tous les états suivants le critère du label du bouton qui m'intéresse mais cela déclenche des appels récursifs à la fonction callback signal_clicked que j'ai surchargé pour les ToggleButton de la ButtonBox , ce qui provoque une erreur de segmentation ( explosion de la pile surement ).

    Donc voilà , je m'en remets à vous.

  2. #2
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Par défaut
    Essaye d'utiliser des radio boutons, ce composant répond parfaitement à ta problématique

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Citation Envoyé par camumu Voir le message
    voilà , je suis en trop de développer un tchat , j'ai "fait" un système d'onglet pour les messages privés qui est un Gtk::ButtonBox qui contient des ToggleButton que je rajoute dynamiquement.
    Seulement voilà , pour l'esthétique je voudrais qu'un seul des ToggleButton soit enfoncé et le reste non pour que l'utilisateur sache dans quelle "discussion" il est.

    J'ai tenté de parcourir les boutons et de changer tous les états suivants le critère du label du bouton qui m'intéresse mais cela déclenche des appels récursifs à la fonction callback signal_clicked que j'ai surchargé pour les ToggleButton de la ButtonBox , ce qui provoque une erreur de segmentation ( explosion de la pile surement ).
    Simple curieusité, utiliser un Gtk::Notebook, ça serait trop simple ?

    Sinon tu dois pouvoir utiliser la propriété toggled, je ne pense pas que cela déclenche si signal clicked. Au pire passer un paramètre à la fonction callback qui permet de différencier les appels dû à l'utilisateur des autres

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    J'y ai bien pensé mais ca "rend" vraiment pas pareil sur l'interface , mes ToggleButton sont tout en bas de mon interface , ce qui donne une impression d'onglet , avec des RadioButton ca rendra pas pareil , je garde cette solution en dernier recours néanmoins.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    Citation Envoyé par gege2061 Voir le message
    Bonjour,



    Simple curieusité, utiliser un Gtk::Notebook, ça serait trop simple ?
    Whooo , je ne connaissais pas du tout ce widget , il a l'air de correspondre parfaitement à mon besoin , mais après avoir lu vite fait la doc j'ai une question :
    Pour le moment j'ai un TextView et plusieurs TextBuffer , mais là si j'utilise NoteBook , vais-je devoir instancier a chaque fois un nouvel TextView et le passer en paramètre de append_page ?


    Citation Envoyé par gege2061 Voir le message
    Sinon tu dois pouvoir utiliser la propriété toggled, je ne pense pas que cela déclenche si signal clicked. Au pire passer un paramètre à la fonction callback qui permet de différencier les appels dû à l'utilisateur des autres
    J'ai essayé avec toggled et ca fait aussi un appel récursif :/
    Pour le paramètre je vois pas trop comment faire ...

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par camumu Voir le message
    Pour le moment j'ai un TextView et plusieurs TextBuffer , mais là si j'utilise NoteBook , vais-je devoir instancier a chaque fois un nouvel TextView et le passer en paramètre de append_page ?
    C'est la manière la plus simple, après un esprit tordu peux très bien utiliser le signal page-changed afin de déplacer le TextView mais le widget perd un peu de son intérêt

    Citation Envoyé par camumu Voir le message
    J'ai essayé avec toggled et ca fait aussi un appel récursif :/
    Pour le paramètre je vois pas trop comment faire ...
    Je viens de tester, ça fonctionne (presque) bien
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    public class MainWindow : Gtk.Window
    {
      private Gtk.ToggleButton btn1;
      private Gtk.ToggleButton btn2;
     
      [Callback]
      private void tgl (Gtk.ToggleButton sender)
      {
        if (sender == btn1)
        {
          btn2.active = false;
        }
        else
        {
          btn1.active = false;
        }
      }
     
      private void  populate ()
      {
        Gtk.HBox box = new Gtk.HBox (true, 0);
        this.add (box);
     
        btn1 = new Gtk.ToggleButton.with_label ("1");
        btn1.toggled += tgl;
        box.add (btn1);
     
        btn2 = new Gtk.ToggleButton.with_label ("2");
        btn2.toggled += tgl;
        box.add (btn2);
      }
     
      public static int main (string[] args)
      {
        Gtk.init (ref args);
     
        MainWindow win = new MainWindow ();
        win.populate ();
        win.destroy += Gtk.main_quit;
     
        win.show_all ();
        Gtk.main ();
        return 0;
      }
    }

    Seul problème, il faut cliquer deux fois sur un bouton pour qu'il reste enfoncé

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    Merci pour ces réponses , là je penche sur la solution du Notebook mais quand j'en instancie un ( soit directement avec Glade ou à la main ) j'ai droit à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (Client:5793): Gtk-CRITICAL **: gtk_notebook_set_tab_label: assertion `GTK_IS_WIDGET (child)' failed
     
    (Client:5793): Gtk-CRITICAL **: gtk_notebook_set_tab_label: assertion `GTK_IS_WIDGET (child)' failed
     
    (Client:5793): Gtk-CRITICAL **: gtk_notebook_set_tab_label: assertion `GTK_IS_WIDGET (child)' failed
    Du coup ma Notebook n'apparait pas , une idée la -dessus ? Google ne m'a pas été d'un grand secours.

    Edit : un petit show_all() de la fenêtre à corriger l'affichage , mais j'ai toujours ces 3 lignes de messages , ... pas bien grave mais bon si quelqu'un sait d'où ca vient , qu'il n'hésite pas. Vais tenter de créer mes TextView maintenant :/

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

Discussions similaires

  1. Petit Problème dans une GTK-Table
    Par simtim dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 16/04/2007, 11h41
  2. Insérer un Gdk.Pixmap dans une Gtk.Window
    Par ZbergK dans le forum Ada
    Réponses: 1
    Dernier message: 25/02/2007, 11h18
  3. Lancer un et un seul thread unique dans une application web
    Par rach375 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 22/09/2006, 15h35
  4. Réponses: 13
    Dernier message: 20/06/2006, 18h11

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