La fonctin SetupWidget

Toutes les classes gtk++ descendant du gtk_widget possèdent une fonction SetupWidget. Cette fonction est destinée à permettre à l'utilisateur de la classe d'initialiser celle ci après la création du widget gtk+. Cette initialisation peut etre le réglage des propriétés du widget (taille, position aspect, etc), la connexion à des signaux ou la création de widgets enfants.

Exemple, une classe dérivée de dialogue :


using gtkpp;

my_dialog& my_dialog::SetupWidget () 
{
  gtk_dialog::SetupWidget();

  gtk_button* ButtonOK = new gtk_button("OK");
  gtk_button* ButtonCancel = new gtk_button ("Cancel");
  gtk_entry * Entry = new gtk_entry ();

  // On entre les deux boutons dans la zone inferieure
  GetActionArea () += *ButtonOk;
  GetActionArea () += *ButtonCancel;
  // On entre la zone de texte dans la zone superieure
  GetVBox () += *Entry;
  // Zone de 10 pixels autour de la zone de texte
  GetVBox ().SetBorderWidth(10);
  // Connection des boutons
  BoutonOK->SignalConnect("clicked",(GtkSignalFunc) my_dialog::Ok, (gpointer) this);
  BoutonCancel->SignalConnect("clicked",(GtkSignalFunc) my_dialog::Abort, (gpointer) this);
  // Connection de la boite elle meme en cas de fermeture par le window manager
  SignalConnect("destroy",(GtkSignalFunc) my_dialog::Abort, (gpointer)this);
  SignalConnect("delete_event",(GtkSignalFunc) my_dialog::Abort, (gpointer)this);
  // Surtout a ne pas oublier
  return *this;
}

NB : Les fonctions Ok et Abort sont des membres statiques de la classe.

Avec ce morceau de code, toute création d'un objet my_dialog creera une boite de dialogue contenant 3 widget : une zone d'entree de texte et deux bouton (OK et Cancel). Le click sur le bouton delete de la barre de titre de la fenetre ou la destruction du widget gtk+ par des moyens violent produira le meme effet que celui sur le bouton cancel.

Les fonctions SignalConnect recoivent en dernier parametre le pointeur this. La fonction de gestion du signal transmettra ce pointeur à la fonctin callback lors de son appel. Ceci est un moyen simple de retrouver l'instance de la classe à qui est destiné le signal. Il y en a d'autres.

La fonction se termine par la ligne "return *this;". Cette ligne est indispensable pour permettre les appels fonction chainées :

my_dialog Dialog;
Dialog.Create().SetupWidget().Foo(10) ...