







|

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.

© 2001,2002 Jürgen Wolf
|