Status bar e Text entry

 

Status bar.

Le statusbar sono delle semplici widget usate per mostrare un messagio di testo. Funzionano mantenendo uno stack dei messaggi inseriti.

Per creare una statusbar possiamo usare:

GtkWidget *gtk_statusbar_new( void );

Le funzioni per operare sulla statusbar sono:

guint gtk_statusbar_get_context_id( GtkStatusbar *statusbar,
const gchar *context_description );

guint gtk_statusbar_push( GtkStatusbar *statusbar,
guint context_id,
gchar *text );

void gtk_statusbar_pop( GtkStatusbar *statusbar)
guint context_id );

void gtk_statusbar_remove( GtkStatusbar *statusbar,
guint context_id,
guint message_id );

Il funzionamento è spiegato con il seguente esempio:

/* Inizio esempio statusbar statusbar.c */

#include <gtk/gtk.h>
#include <glib.h>

GtkWidget *status_bar;

void push_item (GtkWidget *widget, gpointer data)
{
static int count = 1;
char buff[20];

g_snprintf(buff, 20, "Item %d", count++);
gtk_statusbar_push( GTK_STATUSBAR(status_bar), GPOINTER_TO_INT(data), buff);

return;
}

void pop_item (GtkWidget *widget, gpointer data)
{
gtk_statusbar_pop( GTK_STATUSBAR(status_bar), GPOINTER_TO_INT(data) );
return;
}

int main (int argc, char *argv[])
{

GtkWidget *window;
GtkWidget *vbox;
GtkWidget *button;

gint context_id;

gtk_init (&argc, &argv);

/* crea una nuova finestra */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize( GTK_WIDGET (window), 200, 100);
gtk_window_set_title(GTK_WINDOW (window), "GTK Statusbar Example");
gtk_signal_connect(GTK_OBJECT (window), "delete_event",
(GtkSignalFunc) gtk_exit, NULL);

vbox = gtk_vbox_new(FALSE, 1);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show(vbox);

status_bar = gtk_statusbar_new();
gtk_box_pack_start (GTK_BOX (vbox), status_bar, TRUE, TRUE, 0);
gtk_widget_show (status_bar);

context_id = gtk_statusbar_get_context_id(
GTK_STATUSBAR(status_bar), "Statusbar example");

button = gtk_button_new_with_label("push item");
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC (push_item), GINT_TO_POINTER(context_id) );
gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 2);
gtk_widget_show(button);

button = gtk_button_new_with_label("pop last item");
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC (pop_item), GINT_TO_POINTER(context_id) );
gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 2);
gtk_widget_show(button);


gtk_widget_show(window);

gtk_main ();

return 0;
}
/* fine esempio */

 

 

Text entry

La Entry widget permette di inserire e visualizzare una singola linea di testo.

Ci sono due funzioni per creare una Entry widget:

GtkWidget *gtk_entry_new( void );

GtkWidget *gtk_entry_new_with_max_length( guint16 max );

La seconda setta il limite di lunghezza della linea di testo.

Con le seguenti funzioni si può poi alterare il testo presente nella entry:

void gtk_entry_set_text( GtkEntry *entry,
const gchar *text );

void gtk_entry_append_text( GtkEntry *entry,
const gchar *text );

void gtk_entry_prepend_text( GtkEntry *entry,
const gchar *text );

La prima setta il testo della casella eliminando il precedente contenuto e le altre su inseriscono testo prima o dopo quello correntemente presente.

La seguente funzione serve invece a settare il cursore di inserimento nel punto specificato.

void gtk_entry_set_position( GtkEntry *entry,
gint position );

Il contenuto della entry può essere ricavato con la seguente funzione:

gchar *gtk_entry_get_text( GtkEntry *entry );

Per permettere che la entry accetti la immissione di testo da tastiera dobbiamo cambiare il suo stato con:

void gtk_entry_set_editable( GtkEntry *entry,
gboolean editable );

Passsando TRUE o FALSE la renderemo editabile o meno.

Se vogliamo che il testo della entry non sia visibile come ad es. per un campo in cui vada inserita una password, useremo:

void gtk_entry_set_visibility( GtkEntry *entry,
gboolean visible );

Infine possiamo selezionare una regione di testo con:

void gtk_entry_select_region( GtkEntry *entry,
gint start,
gint end );

L'esempio seguente illustra il funzionamento della entry widget.

/* Inizio esempio entry entry.c */

#include <gtk/gtk.h>

void enter_callback(GtkWidget *widget, GtkWidget *entry)
{
gchar *entry_text;
entry_text = gtk_entry_get_text(GTK_ENTRY(entry));
printf("Entry contents: %s\n", entry_text);
}

void entry_toggle_editable (GtkWidget *checkbutton,
GtkWidget *entry)
{
gtk_entry_set_editable(GTK_ENTRY(entry),
GTK_TOGGLE_BUTTON(checkbutton)->active);
}

void entry_toggle_visibility (GtkWidget *checkbutton,
GtkWidget *entry)
{
gtk_entry_set_visibility(GTK_ENTRY(entry),
GTK_TOGGLE_BUTTON(checkbutton)->active);
}

int main (int argc, char *argv[])
{

GtkWidget *window;
GtkWidget *vbox, *hbox;
GtkWidget *entry;
GtkWidget *button;
GtkWidget *check;

gtk_init (&argc, &argv);

/* Crea una nuova finestra */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize( GTK_WIDGET (window), 200, 100);
gtk_window_set_title(GTK_WINDOW (window), "GTK Entry");
gtk_signal_connect(GTK_OBJECT (window), "delete_event",
(GtkSignalFunc) gtk_exit, NULL);

vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_widget_show (vbox);

entry = gtk_entry_new_with_max_length (50);
gtk_signal_connect(GTK_OBJECT(entry), "activate",
GTK_SIGNAL_FUNC(enter_callback),
entry);
gtk_entry_set_text (GTK_ENTRY (entry), "hello");
gtk_entry_append_text (GTK_ENTRY (entry), " world");
gtk_entry_select_region (GTK_ENTRY (entry),
0, GTK_ENTRY(entry)->text_length);
gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0);
gtk_widget_show (entry);

hbox = gtk_hbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (vbox), hbox);
gtk_widget_show (hbox);

check = gtk_check_button_new_with_label("Editable");
gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT(check), "toggled",
GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
gtk_widget_show (check);

check = gtk_check_button_new_with_label("Visible");
gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT(check), "toggled",
GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
gtk_widget_show (check);

button = gtk_button_new_with_label ("Close");
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC(gtk_exit),
GTK_OBJECT (window));
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_widget_grab_default (button);
gtk_widget_show (button);

gtk_widget_show(window);

gtk_main();
return(0);
}
/* Fine esempio */

 

Torna all'indice