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 :

D�tecter le SCROLL_START et le SCROLL_END d'un widget Gtk::Scale.


Sujet :

GTK+ avec C & C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �prouv�
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par d�faut D�tecter le SCROLL_START et le SCROLL_END d'un widget Gtk::Scale.
    Salut les GTK,

    bon comme le dit le titre j'ai passer la moiti� de la nuit et une bonne partie de la matin�e, a essayer de trouver le moyens de d�tecter quand l'utilisateur de l'interface GTK+3.0 (gtkmm 3.0) active un widget Gtk::Scale pour la premi�re (c.a.d au premier changement de valeur) et la derni�re fois (c.a.d au dernier changement de valeurs).

    Ce qui correspond a quand l'utilisateur empoigne le slider avec la souris et le relache.

    J'ai entre-autres essayer le button-press-event et le button-release-event du Widget Gtk::Widget parent de Gtk::Scale.

    Le probl�me est que dans ce cas l�:

    1. Il faut que le widget soit un widget avec X event signals (file:///usr/share/doc/gtkmm-documentation/tutorial/html/sec-xeventsignals.html).

    Ce qui n'est pas s�r car son parent Gtk::Range est dans la liste des Widgets Without X-Windows (file:///usr/share/doc/gtkmm-documentation/tutorial/html/chapter-widgets-without-xwindows.html)

    2. Et puis j'ai suivit les explications a la lettre du tutoriel: file:///usr/share/doc/gtkmm-documentation/tutorial/html/index.html

    A cette page: file:///usr/share/doc/gtkmm-documentation/tutorial/html/chapter-widgets-without-xwindows.html

    Concernant l'ajout du widget en question dans un widget Gtk::EventBox connectant les signaux en *_event au widget Gtk::EventBox contenant le widget Gtk::Scale.

    Sans succ�s...

    A noter que vous pouvez avoir la m�me doc en t�l�chargeant le paquet: libgtkmm-3.0-doc.

    Je vous propose un petit code comme support.

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
     
    /** Standart libraries: **/
    #include <iostream>
     
     
    /** gtkmm widgets (only the needed widgets). **/
    #include <gtkmm/main.h>
     
    #include <gtkmm/window.h>
     
    #include <gtkmm/box.h>
    #include <gtkmm/frame.h>
     
    #include <gtkmm/scale.h>
     
    #include <gtkmm/adjustment.h>
     
    #include <gtkmm/eventbox.h>
     
    /** Other libraries **/
    #include <glibmm.h>
     
    /** To comil with:
      *
      * $ g++ -std=c++11 main.cpp $(pkg-config --cflags --libs gtkmm-3.0)
      *
      ********************************************************************/
     
    class My_Window : public Gtk::Window {
     
      Gtk::Box       main_box       ;
     
      Gtk::Frame     frame_scale    ;
     
      Gtk::EventBox  event_box      ;
     
      Gtk::Scale     scale          ;
     
      public :  // Constructor:
     
        My_Window() ;
     
      public : // Getters:
     
        Gtk::Scale& get_scale() { return scale ; } ;
     
        Gtk::EventBox& get_eventbox() { return event_box ; }
     
      public : // Signals handlers:
     
        bool get_scroll_type(Gtk::ScrollType scroll_type, double value) ;
     
        void get_scale_value(Gtk::Scale &scale) ;
     
        void scale_adjusment_value_change() ;
     
        void scale_adjusment_change() ;
     
        void my_signal_move_slider(Gtk::ScrollType scroll_type) ;
     
        bool on_button_press(GdkEventButton *event) ;
     
        bool on_button_release(GdkEventButton *event) ;
     
        bool on_scroll_event(GdkEventScroll *event) ;
     
      public : // Variables.  
     
        /** The goal is to set this this variable on @true at
            scale activation start and reset on on @false at end.
        */     
        bool start = false ;
     
        /** The goal is to set this this variable on @true at
            scale activation end and reset on @false at start.
        */   
        bool end   = false ;
     
     
    } ;
     
    My_Window::My_Window() :
     
      main_box(Gtk::ORIENTATION_VERTICAL),
     
      frame_scale("frame"),
     
      event_box(),
     
      scale(Gtk::ORIENTATION_VERTICAL)
     
      {
     
        set_title("My Window")      ;
        set_resizable(false)     ;
        set_border_width(8)      ;
     
     
        scale.set_events(Gdk::BUTTON_PRESS_MASK) ;
        scale.set_events(Gdk::BUTTON_RELEASE_MASK) ;
     
        scale.set_events(Gdk::BUTTON_PRESS_MASK) ;
        scale.set_events(Gdk::BUTTON_RELEASE_MASK) ;
     
        scale.set_events(Gdk::SCROLL_MASK) ;
     
        //scale.set_events(Gdk::BUTTON1_MOTION_MASK) ;
     
     
        event_box.set_events(Gdk::ALL_EVENTS_MASK) ;
     
     
        // Scale widget configuration.
        scale.set_size_request(-1, 256) ;        
        scale.set_digits(0) ;
        scale.set_draw_value(true) ;
        scale.set_has_origin(true) ;
        scale.set_upper_stepper_sensitivity(Gtk::SENSITIVITY_ON) ;
        scale.set_lower_stepper_sensitivity(Gtk::SENSITIVITY_ON) ;
        scale.set_adjustment( scale.get_adjustment() )     ;
        scale.set_range(-255.0, 255.0)     ;
        scale.set_value(0.0)     ;
        scale.set_increments(1.0, 10.0)          ;
        scale.add_mark(0.0, Gtk::POS_RIGHT, "")     ;
        scale.set_margin_left(12)        ;
        scale.set_margin_right(12)       ;
        scale.set_margin_top(8)        ;
        scale.set_margin_bottom(8)     ;
        scale.set_inverted(true)     ;
     
        event_box.add(scale) ;
     
        frame_scale.add(event_box) ;
        //frame_scale.add(scale) ;
     
        main_box.pack_start(frame_scale, true, true, 0) ;
     
        add(main_box) ;
     
        show_all() ;
    }   
     
    bool My_Window::on_scroll_event(GdkEventScroll *event) {
     
     
      fprintf(stdout,"signal_scroll_event()\n") ;
     
      return true ; // return false to propagate events.
     
    }
     
    bool My_Window::on_button_press(GdkEventButton *event) {
     
     
      fprintf(stdout,"BUTTON PRESS\n") ;
     
      return true ; // return false to propagate events.
     
    }
     
    bool My_Window::on_button_release(GdkEventButton *event) {
     
      fprintf(stdout,"BUTTON RELEASE\n") ;   
     
      return true ; // return false to propagate events.
     
    }   
     
    bool My_Window::get_scroll_type(Gtk::ScrollType scroll_type, double value) {
     
      // By activating it start and ends with this signal handler.
      // But this handler is call every changing unfortunaly...
      // And does only provide a single @ScrollType art.
     
      if (scroll_type == Gtk::ScrollType::SCROLL_START) {
        // Can never catch this Shitty !!!
        fprintf(stdout, "Start scroll !!!\n") ;
      }
      else if (scroll_type == Gtk::ScrollType::SCROLL_END) {
        // Can never catch this Shitty !!!
        fprintf(stdout, "End scroll !!!\n") ;
      }
      else {
        //fprintf(stdout,"ScrollType...................: %d\n", scroll_type) ;
        //fprintf(stdout,"default type is SCROLL_JUMP..: %d\n", Gtk::ScrollType::SCROLL_JUMP) ;
      }
     
      return false ; // return false to propagate events.
     
    }    
     
    void My_Window::get_scale_value(Gtk::Scale &scale) {
     
      fprintf(stdout,"current scale value..........: %li\n",static_cast<int64_t>(scale.get_value()) ) ;
    }
     
    void My_Window::scale_adjusment_value_change() {
     
      //fprintf(stdout,"Scale Adjusment: ***signal_value_changed()***\n") ;
     
    }
     
    void My_Window::scale_adjusment_change() {
     
      /** THis handler is never called. **/
     
      //fprintf(stdout,"Scale Adjusment: ***signal_changed()***\n") ;
     
    }   
     
    void My_Window::my_signal_move_slider(Gtk::ScrollType scroll_type) {
     
      /** This handler is called by arrow key pressing. **/
     
      if (scroll_type == Gtk::ScrollType::SCROLL_START) {
        // Can never catch this Shitty !!!
        fprintf(stdout, "Start scroll !!!\n") ;
      }
      else if (scroll_type == Gtk::ScrollType::SCROLL_END) {
        // Can never catch this Shitty !!!
        fprintf(stdout, "End scroll !!!\n") ;
      }
      else {
        fprintf(stdout,"ScrollType...................: %d\n", scroll_type) ;
        //fprintf(stdout,"default type is SCROLL_JUMP..: %d\n", Gtk::ScrollType::SCROLL_JUMP) ;
      }
     
    }   
     
    int main(int argc, char *argv[]) {
     
      Gtk::Main app(argc, argv);
     
      My_Window my_window ;
     
      // Scale widget signals connecting:
      my_window.get_scale().signal_value_changed().connect(sigc::bind<Gtk::Scale &>(sigc::mem_fun(my_window, &My_Window::get_scale_value), my_window.get_scale()) ) ;
      my_window.get_scale().signal_change_value().connect(sigc::mem_fun(my_window, &My_Window::get_scroll_type) ) ;
      my_window.get_scale().signal_move_slider().connect(sigc::mem_fun(my_window, &My_Window::my_signal_move_slider) ) ;
      // _event signals handling:
      my_window.get_scale().signal_button_press_event().connect(sigc::mem_fun(my_window, &My_Window::on_button_press) ) ;
      my_window.get_scale().signal_button_release_event().connect(sigc::mem_fun(my_window, &My_Window::on_button_release) ) ;
      my_window.get_scale().signal_scroll_event().connect(sigc::mem_fun(my_window, &My_Window::on_scroll_event) ) ;
     
      // EventBox wrapping technic.
      my_window.get_eventbox().signal_button_press_event().connect(sigc::mem_fun(my_window, &My_Window::on_button_press) ) ;
      my_window.get_eventbox().signal_button_release_event().connect(sigc::mem_fun(my_window, &My_Window::on_button_release) ) ;
      my_window.get_eventbox().signal_scroll_event().connect(sigc::mem_fun(my_window, &My_Window::on_scroll_event) ) ;
     
     
     
      // Scale adjustment signals connecting:
      my_window.get_scale().get_adjustment()->signal_value_changed().connect(sigc::mem_fun(my_window, &My_Window::scale_adjusment_value_change) ) ;
      my_window.get_scale().get_adjustment()->signal_changed().connect(sigc::mem_fun(my_window, &My_Window::scale_adjusment_change) ) ;
     
      Gtk::Main::run(my_window) ;
     
      return 0 ;
     
    }
    Sur ceux je n'attends plus rien de la vie... ADIEUX MONDE CRUEL !!!

    Couick... rng, rng, rng le num�ro que vous avez demander n'est plus en service actuellement.

  2. #2
    Expert confirm�
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    F�vrier 2008
    Messages
    2 315
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, C�te d'Or (Bourgogne)

    Informations professionnelles :
    Activit� : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par d�faut
    Salut.

    Je suis de retour .

    Apr�s une premi�re compilation j'obtiens :
    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
    main.cc:73:18: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
         bool start = false ;
                      ^
    main.cc:78:18: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
         bool end   = false ;
                      ^
    main.cc: In member function ‘bool My_Window::get_scroll_type(Gtk::ScrollType, double)’:
    main.cc:176:27: error: ‘Gtk::ScrollType’ is not a class or namespace
       if (scroll_type == Gtk::ScrollType::SCROLL_START) {
                               ^
    main.cc:180:32: error: ‘Gtk::ScrollType’ is not a class or namespace
       else if (scroll_type == Gtk::ScrollType::SCROLL_END) {
                                    ^
    main.cc: In member function ‘void My_Window::my_signal_move_slider(Gtk::ScrollType)’:
    main.cc:216:27: error: ‘Gtk::ScrollType’ is not a class or namespace
       if (scroll_type == Gtk::ScrollType::SCROLL_START) {
                               ^
    main.cc:220:32: error: ‘Gtk::ScrollType’ is not a class or namespace
       else if (scroll_type == Gtk::ScrollType::SCROLL_END) {
    Je te fais gr�ce des deux premiers warnings .

    Donc, pour commencer, on n'acc�de pas aux ScollingType comme tu le fais. L'�criture correcte est Gtk::SCROLL_START et non Gtk::ScrollType::SCROLL_START.

  3. #3
    Membre �prouv�
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par d�faut
    Merci pour la r�ponse g�rald3d,

    mais a tu vue que dans le code source il y a la ligne de compilation:
    $ g++ -std=c++11 main.cpp $(pkg-config --cflags --libs gtkmm-3.0)
    Ou a tu mis le bon standard (c++11) et allumer les warnings.

    Par contre ta remarque concernant l'acc�s au SCROLL_TYPE ne m'aide pas trop car j'ai d�j� tester:

    et donc si on d�comnente les fprintf dans ce bout de handler et que l'on rectifie:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if (scroll_type == Gtk::SCROLL_START) {
        // Can never catch this Shitty !!!
        fprintf(stdout, "Start scroll !!!\n") ;
      }
      else if (scroll_type == Gtk::SCROLL_END) {
        // Can never catch this Shitty !!!
        fprintf(stdout, "End scroll !!!\n") ;
      }
      else {
        //fprintf(stdout,"ScrollType...................: %d\n", scroll_type) ;
        //fprintf(stdout,"default type is SCROLL_JUMP..: %d\n", Gtk::SCROLL_JUMP) ;
      }
    l'on obtiens:
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 21
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 23
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 25
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 28
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 30
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 33
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 37
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 40
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 42
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 45
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 50
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 54
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 57
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 62
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    current scale value..........: 64
    ScrollType...................: 1
    default type is SCROLL_JUMP..: 1
    Et donc ca m'avance pas. J'ai pas envie mais je crois qu'il va falloir freaker une solution de secours...???

  4. #4
    Expert confirm�
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    F�vrier 2008
    Messages
    2 315
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, C�te d'Or (Bourgogne)

    Informations professionnelles :
    Activit� : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par d�faut
    Le callback signal_move_slider() est int�ressant pour conna�tre les touches clavier utilis�es sur le Gtk::Scale. Il ne t'apporte rien c�t� souris.

    Apr�s plusieurs essais infructueux je me demande s'il ne serait pas plus simple de tester la valeur du curseur � chaque rel�chement du bouton de la souris :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    bool My_Window::on_button_release(GdkEventButton *event) {
     
      fprintf(stdout,"BUTTON RELEASE\n") ;   
     
      if (scale.get_value() == scale.get_adjustment ()->get_lower())
        std::cout<<"le curseur est sur la position minimale"<<std::endl;
     
       if (scale.get_value() == scale.get_adjustment ()->get_upper())
        std::cout<<"le curseur est sur la position maximale"<<std::endl;
     
      return true ; // return false to propagate events.
     }

  5. #5
    Expert confirm�
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    F�vrier 2008
    Messages
    2 315
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, C�te d'Or (Bourgogne)

    Informations professionnelles :
    Activit� : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par d�faut
    Maintenant que l'on sait quand le curseur est � une extr�mit� de la plage revenons sur le probl�me du Gtk::Scale qui n'accepte pas l'�coute de la souris.

    Gtk::Scale h�rite des Gtk:Widget. Il suffit donc de dire au Gtk::Widget d'�couter le signal Gdk::BUTTON_RELEASE_MASK et ensuite d'y connecter un callback :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
      // Ajout de l'écoute des boutons de la souris au Gtk::Scale
      my_window.get_scale().add_events (Gdk::BUTTON_RELEASE_MASK);
     
      // Connexion d'un callback au signal Gdk::BUTTTON_RELEASE_MASK
      my_window.get_scale().signal_button_release_event().connect(sigc::mem_fun(my_window, &My_Window::on_button_release) ) ;
    Pour faire encore plus propre il serait bon de connecter le callback directement � une m�thode de Gtk::Scale plut�t qu'� une m�thode de Gtk::Window.

  6. #6
    Membre �prouv�
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par d�faut
    Merci g�rald3d,

    Mais je n'arrive strictement pas a connecter correctement les signaux signal_button_press_event() et signal_button_release_event() a un widget Gtk::Scale car la seule fois ou cela fonctionne c'est quand ont clique dans l'espace du widget Gtk::Scale sans que cela affecte la valeur jamais pendant que que l'on active le widget.

    Pourtant j'ai tout fait correctement: armer les masques n�cessaires, etc...
    Et essayer de plusieurs mani�res.
    Je n'arrive simplement pas a le faire fonctionner comme je le voudrai.

    Mais heureusement j'ai trouver une solution sans freaker (sans devoir estimer quand l'utilisateur d�bute et finit son activation du widget) en mettant un bouton apply qui ex�cute selon la valeur courante du widget...

    Si tu y arrive merci de me le faire savoir.

    Merci pour vos r�ponses �clair�es.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. D�tecter Windows 2000 Professionnel
    Par FW-S dans le forum Delphi
    R�ponses: 9
    Dernier message: 03/11/2006, 23h02
  2. D�tecter la validit� d'un handle
    Par ovh dans le forum C++Builder
    R�ponses: 2
    Dernier message: 08/08/2003, 12h57
  3. D�tecter l'appui sur la touche de fonction F2
    Par titiyo dans le forum Composants VCL
    R�ponses: 6
    Dernier message: 18/06/2003, 11h07
  4. D�tecter l'arr�t du syst�me ?
    Par J�remy A dans le forum API, COM et SDKs
    R�ponses: 6
    Dernier message: 24/03/2003, 19h06
  5. R�ponses: 2
    Dernier message: 12/02/2003, 15h26

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