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 :

Desactivation des differents etats d'un bouton


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 Desactivation des differents etats d'un bouton
    Encore un soucis

    je travail sur des trucs dans les profondeurs de GTK alors c'est pas facile de s'y retrouver.

    Alors mon probleme est le suivant : j'airmerais desactiver les changement d'etat et donc de style d'un GtkButton.
    Lorsque l'on creer un button , on l'insere dans un conteneur etc...lorsque l'on deplace le pointeur de la souris sur le bouton , celui change de couleur automatiquement et il est egalement possible de cliquer sur le button qui lui fait a nouveau prendre une couleur differente et changer son style.

    Ce que j'aimerais fair cest desactiver tout ca, c'est a dire avoir un bouton ou rien ne se passe quand on a le pointeur de la souris dessus , rien ne se passe quand on clique etc.... J'aimerais que le bouton reste dans toute les situations a son etat normal.

    Je ne trouve malheursement pas le moyen de deconnecter les signaux emits et attacher par defaut a un GtkButton.

    Voila donc si vous avez une idee merci de la transmettre....

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 81
    Par défaut
    salut,

    je ne sais pas si c'est ce que tu cherches, mais tu peux rendre un widget inactif avec la fonction suivante :

    gtk_widget_set_sensitive(GTK_WIDGET(*widget),boolean);

    Si boolean est TRUE le widget prend un aspect inconsistant.

    Volà

  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
    Tu a partiellement raison en faite..

    En applicant le set_sensitie GTK rend inerte le boutton et lui applique un nouveau style. EN faite la solution du probleme revient a mettre set_sensitive a FALSE et a changer ensuite les caracteristique de style du widget.

    Le probeleme c'est que je ne trouve pas comment chopper le style d'un boutton dans son etat normal.

    Quelqu'un serait-il comment faire ca ? si oui le probleme est resolu complement

    Je travail dessus, je donnerais la solution une fois que je l'aurais trouvee bien entendu.

  4. #4
    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 : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    J'ai pas tout suivi Tu veux un bouton avec un aspect normal mais qui ne réagit à aucun signal (qui sert à rien en fin de compte ). Un Label ne te convient pas ?

    Bon je viens d'essayer de bricoler un p'tit truc mais ça marche pas :
    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
    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
    #include <gtk/gtk.h>
     
    int main (int argc, char **argv)
    {
      GtkWidget *win = NULL;
      GtkWidget *button = NULL;
     
      gtk_init (&argc, &argv);
      win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      g_signal_connect (G_OBJECT (win), "delete-event",
                        G_CALLBACK (gtk_main_quit), NULL);
      button = gtk_button_new_with_label ("Un beau bouton");
      {
        GtkStyle *style = NULL;
     
        style = gtk_widget_get_style (button);
        style->fg[GTK_STATE_INSENSITIVE] = style->fg[GTK_STATE_NORMAL];
        style->bg[GTK_STATE_INSENSITIVE] = style->bg[GTK_STATE_NORMAL];
        style->light[GTK_STATE_INSENSITIVE] = style->light[GTK_STATE_NORMAL];
        style->dark[GTK_STATE_INSENSITIVE] = style->dark[GTK_STATE_NORMAL];
        style->mid[GTK_STATE_INSENSITIVE] = style->mid[GTK_STATE_NORMAL];
        style->text[GTK_STATE_INSENSITIVE] = style->text[GTK_STATE_NORMAL];
        style->base[GTK_STATE_INSENSITIVE] = style->base[GTK_STATE_NORMAL];
        style->text_aa[GTK_STATE_INSENSITIVE] = style->text_aa[GTK_STATE_NORMAL];
        style->fg_gc[GTK_STATE_INSENSITIVE] = style->fg_gc[GTK_STATE_NORMAL];
        style->fg_gc[GTK_STATE_INSENSITIVE] = style->fg_gc[GTK_STATE_NORMAL];
        style->light_gc[GTK_STATE_INSENSITIVE] = style->light_gc[GTK_STATE_NORMAL];
        style->dark_gc[GTK_STATE_INSENSITIVE] = style->dark_gc[GTK_STATE_NORMAL];
        style->mid_gc[GTK_STATE_INSENSITIVE] = style->mid_gc[GTK_STATE_NORMAL];
        style->text_gc[GTK_STATE_INSENSITIVE] = style->text_gc[GTK_STATE_NORMAL];
        style->base_gc[GTK_STATE_INSENSITIVE] = style->base_gc[GTK_STATE_NORMAL];
        style->text_aa_gc[GTK_STATE_INSENSITIVE] = style->text_aa_gc[GTK_STATE_NORMAL];
        style->bg_pixmap[GTK_STATE_INSENSITIVE] = style->bg_pixmap[GTK_STATE_NORMAL];
    /*    gtk_widget_set_style (button, style);*/
      }
      gtk_widget_set_state (button, GTK_STATE_INSENSITIVE);
    /*  gtk_widget_set_sensitive (button, FALSE);*/
      gtk_container_add (GTK_CONTAINER (win), button);
      gtk_widget_show_all (win);
      gtk_main ();
      return 0;
    }
    Pourtant je suis sûr que c'est ça
    Citation Envoyé par [url=http://developer.gnome.org/doc/API/2.0/gtk/gtk-Standard-Enumerations.html#GtkStateType]enum GtkStateType[/url]
    The GtkStateType enumeration is also used to identify different colors in a GtkStyle for drawing
    Mais la méthode de copie n'est peux être pas la bonne ?

  5. #5
    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
    Ouai mais non j'ai deja tente ca...l'aspect du bouton reste inactif.

    Par exemple dans un treeview , les titres des colonnes sont des boutons avec un label , mais ils ne sont pas clickable et leur aspect ne change jamais. Ben je veux creer les memes

  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 : 42
    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 jean
    J'ai matte le code du gtktreeview.c mais je suis pas tomber sur un truc qui pourrait correspondre....
    Parce qu'il ne faut pas chercher dans le code du treeview mais des GtkTreeViewColumn :
    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
    16
    17
    18
    static void
    gtk_tree_view_column_create_button (GtkTreeViewColumn *tree_column)
    {
    [...]
      gtk_widget_push_composite_child ();
      tree_column->button = gtk_button_new ();
      gtk_widget_add_events (tree_column->button, GDK_POINTER_MOTION_MASK);
      gtk_widget_pop_composite_child ();
     
    [...]
      g_signal_connect (tree_column->button, "event",
                        G_CALLBACK (gtk_tree_view_column_button_event),
                        tree_column);
      g_signal_connect (tree_column->button, "clicked",
                        G_CALLBACK (gtk_tree_view_column_button_clicked),
                        tree_column);
    [...]
    }
    Je te laisse regarder les callback

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 81
    Par défaut
    Ok j'ai compris

    Je pense qu'ils sont construit avec des labels décorés.
    J'ai essayé de faire comme ça :


    frame = gtk_frame_new ();
    gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);

    label = gtk_label_new (_("Test"));
    gtk_container_add (GTK_CONTAINER (frame), label);

    Mais chez moi il ne fait pas de distinction entre GTK_SHADOW et GTK_SHADOW_ETCHED . Donc pas d'ombre.

Discussions similaires

  1. desactiver des bouton pendant une animation
    Par haydens dans le forum Flash
    Réponses: 3
    Dernier message: 03/08/2008, 02h05
  2. activation et desactivation des boutons
    Par monphp dans le forum VBA Access
    Réponses: 7
    Dernier message: 11/07/2007, 17h25
  3. [CR8.5]masquer des sous-etat
    Par planetevoyage dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 13/05/2005, 10h51
  4. [débutant]Desactiver des champs par rapport a un select
    Par Pymm dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/02/2005, 16h24
  5. wxWidgets : connaître l'etat d'un bouton !
    Par FSF_Sterl dans le forum wxWidgets
    Réponses: 5
    Dernier message: 14/08/2004, 08h55

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