Nella creazione di un progetto GTK vengono gia' creati i file necessari compreso un file.ui per il codice xml dell'interfaccia grafica ed i file main e callbacks per il codice da eseguite
Glade all'interno di Anjuta |
Al link seguente il progetto completo per la generazione dell'esempio link
Altrimenti il codice puo' essere riscritto separando la parte della gestione degli eventi (callbacks.c) cosi' come Anjuta suggerisce implicitamente
main.c
----------------------------------------------------------------
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
/*
* main.c
* Copyright (C) Luca Innocenti 2012 <lucainnoc@gmail.com>
*
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <config.h>
#include <gtk/gtk.h>
#include "callbacks.h"
#define UI_FILE "src/gtkglade.ui"
GtkWidget* create_window (void)
{
GtkBuilder *builder;
GError* error = NULL;
builder = gtk_builder_new ();
if (!gtk_builder_add_from_file (builder, UI_FILE, &error))
{
g_warning ("Couldn't load builder file: %s", error->message);
g_error_free (error);
}
gtk_builder_connect_signals (builder, NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
progress = GTK_WIDGET (gtk_builder_get_object (builder, "progressbar1"));
label = GTK_WIDGET (gtk_builder_get_object (builder, "label1"));
scala = GTK_WIDGET (gtk_builder_get_object (builder, "hscale1"));
g_object_unref (builder);
return window;
}
int main (int argc, char *argv[])
{
GtkWidget *window;
gtk_set_locale ();
gtk_init (&argc, &argv);
window = create_window ();
gtk_widget_show (window);
gtk_main ();
return 0;
}
----------------------------------------------------------------
callbacks.c
----------------------------------------------------------------
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
/*
* callbacks.c
* Copyright (C) Luca Innocenti 2012 <lucainnoc@gmail.com>
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include "callbacks.h"
void on_hscale1_value_changed(GtkWidget* widget,gpointer user_data) {
gdouble current_value = gtk_range_get_value(GTK_RANGE(scala));
char buffer [14] = { '\0' };
sprintf ( buffer, "%.0f", current_value);
gtk_label_set_text(label,buffer);
gtk_progress_bar_set_fraction(progress,current_value/100);
}
void
destroy (GtkWidget *widget, gpointer data)
{
gtk_main_quit ();
}
----------------------------------------------------------------
callbacks.h
----------------------------------------------------------------
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
/*
* callbacks.h
* Copyright (C) Luca Innocenti 2012 <lucainnoc@gmail.com>
*/
#include <gtk/gtk.h>
GtkWidget *window;
GtkProgressBar *progress;
GtkLabel *label;
GtkHScale *scala;
void destroy (GtkWidget *widget, gpointer data);
void on_hscale1_value_changed(GtkWidget* widget,gpointer user_data);
Al link seguente il codice completo del progetto link
Nessun commento:
Posta un commento