It is the vpd->view_create = hello_create; with hello_create being a function defined like this :
![]() |
|
window->widget
. This means that the widget has
not to be a window with title bar and the like. It will
commonly be a Gtk[V,H]Box but any GTK container will work.
Let's have an example :
Example 12-2. Creating a view
mstatic void hello_create ( gabywindow *window, gboolean first ) { GtkWidget *vbox; GtkWidget *label; GtkWidget *hbb; GtkWidget *button; int *id = &(window->id); record *r; r = table_first(v->subtable->table, -1); *id = ( r == NULL ? 0 : r->id ); r = table_first(window->view->subtable->table, -1); *id = ( r == NULL ? 0 : r->id ); vbox = gtk_vbox_new(FALSE,0); window->widget = vbox; label = gtk_label_new(""); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); hbb = gtk_hbutton_box_new(); gtk_widget_show(hbb); gtk_box_pack_start(GTK_BOX(vbox), hbb, FALSE, TRUE, 0); button = gtk_button_new_with_label(_("Previous")); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", \ GTK_SIGNAL_FUNC(previous_clicked), window); gtk_container_add(GTK_CONTAINER(hbb), button); button = gtk_button_new_with_label(_("Next")); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", \ GTK_SIGNAL_FUNC(next_clicked), window); gtk_container_add(GTK_CONTAINER(hbb), button); gtk_widget_show(vbox); return; }
int *id = &(window->id); record *r; r = table_first(v->subtable->table, -1); *id = ( r == NULL ? 0 : r->id );This sets the record you're currently on to the first record of the table; or to 0 if the table is empty.
Note that unlike the previous version of the API you don't have to play
with lots of gtk_object_get_data
in your plug-ins, making
them cleaner.