ein Kapitel zurück                                           ein Kapitel weiter

Toggled Buttons sind im nichts anderes als normale Buttons. Nur das sie hier einen Knopf drücken, dieser gedrückt bleibt, bis sie Ihn erneut betätigen, oder auch umgekehrt. So wie sie dies bei den Office Programmen mit der Schriftendarstellung wie Invers (I), Bold (B) oder Underline (U) kennen. Dies sind Toggled Buttons. Toggled Buttons stellen in GTK auch gleich die Basis für Checkbuttons oder Radiobuttons da.

Zuerst der Syntax wie sie einen Toggled Button erstellen können:

GtkWidget *gtk_toggle_button_new(void);

oder mit Label:

GtkWidget *gtk_toggle_button_new_with_label(gchar *label);

Der Umgang mit den Toggled Buttons ist der selbe wie mit den normalen. Um zu überprüfen ob ein Button ge"toggeld" oder nicht ge"toggeld" ist lässt sich mit folgendem Makro überprüfen:

 if(GTK_TOGGLE_BUTTON(widget)->active)
  { /*Button ist aktiviert*/ }
 else
  { /*Button ist deaktiviert*/ }  

Am besten wir sehen uns dazu ein einfaches Beispiel an:

/*Download:gtktog1.c*/

#include <gtk/gtk.h>

GtkWidget *button1, *button2, *button3, *button_quit;

void ende_cb(GtkObject *object)
{
  g_print("\n\nZustand der Toggled Buttons zum Abschluss : \n");
 if(GTK_TOGGLE_BUTTON(button1)->active)
   g_print("Knopf 1 war aktiviert (toggled)\n");
 else
   g_print("Knopf 1 war deaktiviert (not toggled)\n");

   g_print("Zustand der Toggled Buttons zum Abschluss : \n");
 if(GTK_TOGGLE_BUTTON(button2)->active)
   g_print("Knopf 2 war aktiviert (toggled)\n");
 else
   g_print("Knopf 2 war deaktiviert (not toggled)\n");

   g_print("Zustand der Toggled Buttons zum Abschluss : \n");
 if(GTK_TOGGLE_BUTTON(button3)->active)
   g_print("Knopf 3 war aktiviert (toggled)\n");
 else
   g_print("Knopf 3 war deaktiviert (not toggled)\n");


 gtk_main_quit();
}

void check_toggle_cb(GtkWidget *widget, gpointer data)
{
 if(GTK_TOGGLE_BUTTON(widget)->active)
   g_print("%s aktiviert (toggled)\n",(char *)data);
 else
   g_print("%s deaktiviert (not toggled)\n",(char *)data);
}

int main(int argc, char **argv)
{
 GtkWidget *fenster;
 GtkWidget *box;
 /*Gtk initialisieren*/
 gtk_init(&argc, &argv);
 /*Ein neues Fenster erstellen*/
 fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 /*Buttons erstellen*/
 button1  = gtk_toggle_button_new_with_label("Knopf 1");
 button2  = gtk_toggle_button_new_with_label("Knopf 2");
 button3  = gtk_toggle_button_new_with_label("Knopf 3");
 button_quit  = gtk_button_new_with_label("Ende");
 /*Neue Box erstellen*/
 box = gtk_vbox_new(FALSE,0);

 /*Signale registrieren*/
 gtk_signal_connect_object(GTK_OBJECT(button_quit), "clicked",
                           GTK_SIGNAL_FUNC(ende_cb), GTK_OBJECT(fenster));
 gtk_signal_connect(GTK_OBJECT(fenster), "destroy",
                    GTK_SIGNAL_FUNC(ende_cb), NULL);
 gtk_signal_connect(GTK_OBJECT(button1), "clicked",
                    GTK_SIGNAL_FUNC(check_toggle_cb),"Knopf 1");
 gtk_signal_connect(GTK_OBJECT(button2), "clicked",
                    GTK_SIGNAL_FUNC(check_toggle_cb),"Knopf 2");
 gtk_signal_connect(GTK_OBJECT(button3), "clicked",
                    GTK_SIGNAL_FUNC(check_toggle_cb),"Knopf 3");
 /*Fenstertitel*/
 gtk_window_set_title(GTK_WINDOW(fenster), "Toggled Buttons");
 /*Fensterposition*/
 gtk_window_set_position(GTK_WINDOW(fenster),GTK_WIN_POS_CENTER);

 gtk_container_set_border_width(GTK_CONTAINER(fenster),25);

 /*Nun alles rein in die Box....*/
 gtk_box_pack_start(GTK_BOX(box), button1, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box), button2, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box), button3, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box), button_quit, FALSE, FALSE, 20);


 gtk_container_add(GTK_CONTAINER(fenster),box);

 /*Zeigs uns.....*/
 gtk_widget_show_all(fenster);

 gtk_main();

 return 0;
}

Das Programm überprüft auch den Buttonzustand bei Beendigung des Programms. So könnte es in etwas aussehen:




Hier ist Beispielsweise "Knopf 2" aktiviert.

Hierzu noch weitere, nützliche, Funktion für unsere Toggle Buttons.

void gtk_toggle_button_set_mode(GtkToggleButton *t_button, gboolen draw);  

Mit dieser Funktion können sie einen Button unsichtbar machen. Dies geschieht mit dem Parameter draw. Default-Einstellung ist für diesen FALSE. Geben sie stattdessen TRUE an, verschwindet der Button. So wird es verwendet:

gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(button1), TRUE);  

Sie können es ja im Programm oben einbauen. Hiermit würde der button1 nicht angezeigt.

Wollen sie einen Buttonzustand setzen, oder abfragen können sie folgende Funktionen benutzen:

void gtk_toggle_button_set_mode(GtkToggleButton *t_button, gboolen how);  

Mit dem Parameter how, können sie den Button aktivieren (TRUE) oder wieder deaktiviere (FALSE). In der Praxis sieht dies so aus:

gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button1),TRUE);  

Das Gegenstück zu dieser Funktion lautet dann:

gboolen gtk_toggle_button_get_mode(GtkToogleButton *t_button);

Diese Funktion liefert als Rückgabewert TRUE wenn der Button aktiviert ist. Ansonsten FALSE.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf