







|

Das Packing Widget funktioniert im Prinzip genauso wie beim vertikalen bzw.
horizontalen Packet Widgets. Nur geben wir hier für das Packen eines
Widgets in die Box x/y-Koordinaten an. Man kann sich das ganze wie
bei einem Tabellenkalkulations-Programm vorstellen. Sie erzeugen ein Tabelle
mit einer bestimmten Anzahl von Reihen und Spalten. Mit Hilfe der
x/y Koordinaten geben die Reihe und Spalte an wo sie das Widget platzieren
wollen.
Zuerst wollen wir uns den Syntax der Funktion ansehen, mit der wir eine neue
Tabelle erzeugen:
GtkWidget *gtk_table_new(quint rows, quint columns, gboolen homogeneous);
Mit dieser Funktion legen wir also eine Tabelle mit rows Reihen und columns
Spalten an. Für die Variable homogeneous können sie folgendes angeben:
- TRUE - Alle Spalten haben die selbe Breite
- FALSE - Spalten haben eine unterschiedliche Breite
Nun benötigen wir noch die Funktion mit der wir einzelnen Widgets in die Tabelle
packen können:
void gtk_table_attach_defaults(GtkTable *table, GtkWidget *widget,
quint left_attach, quint right_attach,
quint top_attach, quint bottom_attach);
Mit dieser Funktion packen wir unser Widget in die Tabelle. Die Koordinaten
für die Spalte ist von links -> left_attach bis rechts -> right_attach.
Und die Koordinaten der Reihe ist von oben -> top_attach bis unten -> bottom_attach.
Nehmen wir mal an wir erzeugen eine 3x2 Tabelle mit:
table = gtk_table_new(3,2,TRUE);
Somit ergibt sich folgendes Bild:
Wollen sie nun ein Widget in dieser Tabelle links oben an der Ecke einfügen,
müssen sie dies folgendermaßen machen:
gtk_table_attach_defaults(GTK_TABLE(table), button, 0,1, 0,1);
Somit ergibt sich folgendes Bild:
Nun wenn sie ein weiteres Widget links unten zur Tabelle hinzufügen wollen
schreiben sie folgende Koordinaten:
gtk_table_attach_defaults(GTK_TABLE(table), button2, 0,1, 1,2);
Ich denke mal sie haben verstanden wie die Koordinaten zu verwenden sind.
Für rechts unten müssten sie folgende Koordinaten verwenden:
gtk_table_attach_defaults(GTK_TABLE(table), button2, 2,3, 1,2);
Nun die Funktionsendung _defaults sagt uns schon das es sich dabei um ein
packen in der Defaulteinstellung handelt. Dann stellt sich wohl die Frage
wie die Funktion aussieht, mit der wir die Eigenschaften der einzelnen
Tabellen-Zellen beeinflussen können:
GtkWidget *gtk_table_attach(GtkTable *table, GtkWidget *widget,
quint left_attach, quint right_attach,
quint top_attach, quint bottom_attach,
GtkAttachOptions xoptions,
GtkAttachOptions yoptions,
quint xpadding, quint ypadding);
Hier sind als noch 4 weiter Parameter hinzugekommen. Für die Parameter
gtkAttachOptions können sie folgende Werte angeben:
- GTK_EXPAND - Widget breitet sich aus falls überschüssiger Platz vorhanden
- GTK_FILL - Das Widget wird mit seinem normalen Platz gefüllt
- GTK_SHRINK - Das Widget läßt sich zusammenschrumpfen
Die einzelnen Optionen lassen sich auch mit dem ODER Operator (|) verknüpfen.
Mit xpadding und ypadding können sie den Abstand in Pixeln vom Nachbarn
rechts/links bzw. oben/unten einstellen.
Am besten ich demonstriere Ihnen die Funktion gtk_table_attach
anhand eines Beispiels:
/*Download:table.c*/
#include <gtk/gtk.h>
void ende_cb(GtkObject *object)
{
gtk_main_quit();
}
int main(int argc, char **argv)
{
GtkWidget *fenster;
GtkWidget *button1, *button2, *button3;
GtkWidget *table;
/*Gtk initialisieren*/
gtk_init(&argc, &argv);
/*Ein neues Fenster erstellen*/
fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/*Buttons erstellen*/
button1 = gtk_button_new_with_label("Kein schrumpfen\nkein expandieren");
button2 = gtk_button_new_with_label("Expandiert und schrumpft\nvertikal");
button3 = gtk_button_new_with_label("Expandiert und schrumpft\n in beide Seiten");
/*Tabelle erstellen...*/
table = gtk_table_new(2,2,FALSE);
/*Signale registrieren*/
gtk_signal_connect(GTK_OBJECT(fenster), "delete_event",
GTK_SIGNAL_FUNC(ende_cb), NULL);
/*Fenstertitel*/
gtk_window_set_title(GTK_WINDOW(fenster), "Tabellendemo");
/*Fensterposition*/
gtk_window_set_position(GTK_WINDOW(fenster),GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(fenster),15);
/*Inhalt der Tabelle mit verschiedenen Optionen erstellen....*/
gtk_table_attach(GTK_TABLE(table),button1, 0,1, 0,1,
GTK_FILL, GTK_FILL, 0,0);
gtk_table_attach(GTK_TABLE(table), button2, 0,1, 1,2,
GTK_FILL, GTK_FILL|GTK_EXPAND|GTK_SHRINK,0,0);
gtk_table_attach(GTK_TABLE(table), button3, 1,2, 1,2,
GTK_FILL|GTK_EXPAND|GTK_SHRINK,GTK_FILL|GTK_EXPAND|GTK_SHRINK,
0,0);
gtk_container_add(GTK_CONTAINER(fenster),table);
/*Zeigs uns.....*/
gtk_widget_show_all(fenster);
gtk_main();
return 0;
}
|
Und so könnte es aussehen:
Nun wollen wir unser Tabellendemo auch demonstrieren.
Zuerst wollen wir unser Fenster vertikal vergrößern:
Jetzt wollen wir es noch horizontal vergrößern:
Ich empfehle Ihnen nun dazu selbst mit den Optionen herumzuspielen.
Ich möchte Ihnen nun noch ein paar Funktionen nennen, die sie mit Packing Tabellen
verwenden können.
void gtk_table_resize(GtkTable *table, quint rows, quint columns);
Damit können sie die Größe einer bereits erzeugten Tabelle um rows
Reihen
und columns Spalten ändern.
void gtk_table_set_row_spacing(GtkTable *table, quint rows, quint spacing);
void gtk_table_set_col_spacing(GtkTable *table, quint cols, quint spacing);
Damit können sie den Abstand zwischen einzelnen Widgets in der
Reihe (row) bzw. Spalte (col) ändern.
void gtk_table_set_row_spacings(GtkTable *table, quint spacing);
void gtk_table_set_col_spacings(GtkTable *table, quint spacing);
Damit können sie die Abstände einzelner Widgets auf alle Reihen bzw. Spalten
ändern.

© 2001,2002 Jürgen Wolf
|