Scrolled
Window
Sono usate per creare un'area scrollabile all'interno di una finestra.
Per creare una nuova scrolled window si usa la funzione:
GtkWidget *gtk_scrolled_window_new( GtkAdjustment
*hadjustment,
GtkAdjustment *vadjustment );
Dove il primo argomento è l' adjustment per la direzione orizzontale ed il secondo
l'adjustment per la direzione verticale, che comunque sono in genere settatti a
NULL.
Per settare la policy relativa alle scrollbars si usa la funzione:
void gtk_scrolled_window_set_policy( GtkScrolledWindow
*scrolled_window,
GtkPolicyType hscrollbar_policy,
GtkPolicyType vscrollbar_policy );
Il primo argomento è la scrolled window, il secondo setta la policy della scrollbar orizzontale ed il terzo quella della scrollbar verticale.
I valori accettati sono: GTK_POLICY_AUTOMATIC, o GTK_POLICY_ALWAYS. Il primo fa comparire le scrollbar solo se si crea la necessità di scrollare (es. una lista troppo lunga rispetto al widget che la contiene il secondo lascia le scrollbars sempre visibili).
Per inserire il nostro widget nella scrolled window possiamo usare:
void gtk_scrolled_window_add_with_viewport( GtkScrolledWindow
*scrolled_window,
GtkWidget *child);
Ecco un esempio che inserisce 100 toggle buttons in una srolled window.
/* Inizio esempio scrolledwin scrolledwin.c */
#include <gtk/gtk.h>
void destroy(GtkWidget
*widget, gpointer data)
{
gtk_main_quit();
}
int main (int argc, char
*argv[])
{
static GtkWidget *window;
GtkWidget *scrolled_window;
GtkWidget *table;
GtkWidget *button;
char buffer[32];
int i, j;
gtk_init (&argc, &argv);
/* Crea una nuova dialog window per la scrolled window */
window = gtk_dialog_new ();
gtk_signal_connect (GTK_OBJECT (window), "destroy",
(GtkSignalFunc) destroy, NULL);
gtk_window_set_title (GTK_WINDOW (window), "GtkScrolledWindow
example");
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
gtk_widget_set_usize(window, 300, 300);
/* crea una nuova scrolled window. */
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
/* Setta la policy */
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG(window)->vbox),
scrolled_window,
TRUE, TRUE, 0);
gtk_widget_show (scrolled_window);
/* crea una table di 10 x 10 spazi. */
table = gtk_table_new (10, 10, FALSE);
/* setta la spaziatura della table */
gtk_table_set_row_spacings (GTK_TABLE (table), 10);
gtk_table_set_col_spacings (GTK_TABLE (table), 10);
/* Inserisce la table nella scrolled window */
gtk_scrolled_window_add_with_viewport (
GTK_SCROLLED_WINDOW (scrolled_window), table);
gtk_widget_show (table);
/* crea una griglia di toggle buttons nella table */
for (i = 0; i < 10; i++)
for (j = 0; j < 10; j++) {
sprintf (buffer, "button (%d,%d)\n", i, j);
button = gtk_toggle_button_new_with_label (buffer);
gtk_table_attach_defaults (GTK_TABLE (table), button,
i, i+1, j, j+1);
gtk_widget_show (button);
}
/* Aggiunge un "close" button alla base della dialog */
button = gtk_button_new_with_label ("close");
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) gtk_widget_destroy,
GTK_OBJECT (window));
/* Rende questo bottone il default. */
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
button, TRUE, TRUE, 0);
/* Fa il "Grab" sul bottone in modo che viene attivato
* premendo il il tasto "Enter" */
gtk_widget_grab_default (button);
gtk_widget_show (button);
gtk_widget_show (window);
gtk_main();
return(0);
}
/* fine esempio */