Ho deciso di raggruppare tutti gli script elementari fatti fino ad ora in un unico e più consultabile archivio. L'archivio è questo:
http://etnablog.altervista.or
g/misc/script-c/programmi_c.tar.gz
Non mi dilungherò a darvi spiegazioni particolari su come agiscono gli script dato che sono abbastanza commentati.
Vi sono cinque script, ve li accenno:
/* Created by Anjuta version 1.2.4a */
/* This file will not be overwritten */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <gnome.h>
#include <glade/glade.h>
void
ok_button_clicked (GtkWidget *widget, gpointer user_data)
{
printf ("Thanks for trying out my program.n");
gtk_main_quit ();
}
int
main (int argc, char *argv[])
{
GladeXML *main_window;
GtkWidget *widget;
gtk_init (&argc, &argv);
/* Carica l'interfaccia utente */
main_window = glade_xml_new ("example-1.glade", NULL, NULL);
/* Predispone la gestione del bottone chiamato "OKButton" */
widget = glade_xml_get_widget (main_window, "OKButton");
g_signal_connect (G_OBJECT (widget), "clicked",
G_CALLBACK (ok_button_clicked),
NULL);
/* Chiusura del programma quando l'utente chiude la finestra */
widget = glade_xml_get_widget (main_window, "MainWindow");
g_signal_connect (G_OBJECT (widget), "delete_event",
G_CALLBACK (gtk_main_quit), NULL);
/* Avvia il ciclo */
gtk_main ();
return 0;
}
/* Created by Anjuta version 1.2.4a */
/* This file will not be overwritten */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <gnome.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
on_button1_clicked (GtkWidget *widget, gpointer user_data)
{
printf ("Bau n");
}
on_button2_clicked (GtkWidget *widget, gpointer user_data)
{
printf ("Arrivederci n");
gtk_main_quit ();
}
on_button3_clicked (GtkWidget *widget, gpointer user_data)
{
printf ("Hai premuto button3 nn");
gchar stringa2[80]="<span size="x-large">Ciao</span>";
GladeXML *self = glade_get_widget_tree(GTK_WIDGET(widget));
GtkWidget *label = glade_xml_get_widget (self, "label2");
gchar *stringa1 = gtk_label_get_label(label);
//gchar *stringa1 = gtk_label_get_text (label);
//serve a prendere solo il testo, senza tag di stile
//invece gtk_label_get_label prende anche i tag di stile (se ci sono)
printf ("Il contenuto di "label1" è "%s"n", stringa1);
printf ("stringa1: %s ; stringa2: %sn", stringa1, stringa2);
/*
In C per comparare due stringhe fare: if (strcmp (string1, string2) == 0)
o if (g_str_equal (string1, string2))
o if (g_utf8_collate (string1, string2) == 0)
*/
if (strcmp (stringa1, stringa2) == 0) {
gtk_label_set_markup (GTK_LABEL(label), "<span size="x-large">è uguale a output</span>");
//gtk_label_set_text(GTK_LABEL(label),"è uguale a output");
}
else {
gchar *saluto = "Ciao";
//g_strconcat: serve ad unire piu stringhe. Ricordarsi il NULL alla fine!
gchar *stringa3 = g_strconcat("<span size="x-large">",saluto,"</span>", NULL);
gtk_label_set_markup (GTK_LABEL(label), stringa3);
//invece avrei usato:
//gtk_label_set_text(GTK_LABEL(label),stringa2);
//Se non avevo tag di stile <span>
}
}
void on_entry1_activate (GtkWidget *widget, gpointer user_data)
{
printf ("Hai scritto il tuo nome.n");
gchar output[80]="Ciao ";
strcat(output,gtk_entry_get_text(GTK_ENTRY(widget)));
printf ("%s n",output);
}
int main (int argc, char *argv[])
{
GtkWidget *window1;
GladeXML *xml;
#ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
textdomain (PACKAGE);
#endif
gnome_init (PACKAGE, VERSION, argc, argv);
glade_gnome_init ();
/*
* The .glade filename should be on the next line.
*/
xml = glade_xml_new ("provalibglade.glade", NULL, NULL);
/* This is important */
glade_xml_signal_autoconnect (xml);
window1 = glade_xml_get_widget (xml, "window1");
gtk_widget_show (window1);
gtk_main ();
return 0;
}
/* Created by Anjuta version 1.2.4a */
/* This file will not be overwritten */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <gnome.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
on_button1_clicked (GtkWidget *widget, gpointer user_data)
{
printf ("Bau n");
}
on_button2_clicked (GtkWidget *widget, gpointer user_data)
{
printf ("Arrivederci n");
gtk_main_quit ();
}
on_button3_clicked (GtkWidget *widget, gpointer user_data)
{
printf ("Hai premuto button3 nn");
gchar stringa2[80]="<span size="x-large">Ciao</span>";
GladeXML *self = glade_get_widget_tree(GTK_WIDGET(widget));
GtkWidget *label = glade_xml_get_widget (self, "label2");
gchar *stringa1 = gtk_label_get_label(label);
//gchar *stringa1 = gtk_label_get_text (label);
//serve a prendere solo il testo, senza tag di stile
//invece gtk_label_get_label prende anche i tag di stile (se ci sono)
printf ("Il contenuto di "label1" è "%s"n", stringa1);
printf ("stringa1: %s ; stringa2: %sn", stringa1, stringa2);
/*
In C per comparare due stringhe fare: if (strcmp (string1, string2) == 0)
o if (g_str_equal (string1, string2))
o if (g_utf8_collate (string1, string2) == 0)
*/
if (strcmp (stringa1, stringa2) == 0) {
gtk_label_set_markup (GTK_LABEL(label), "<span size="x-large">è uguale a output</span>");
//gtk_label_set_text(GTK_LABEL(label),"è uguale a output");
}
else {
gchar *saluto = "Ciao";
//g_strconcat: serve ad unire piu stringhe. Ricordarsi il NULL alla fine!
gchar *stringa3 = g_strconcat("<span size="x-large">",saluto,"</span>", NULL);
gtk_label_set_markup (GTK_LABEL(label), stringa3);
//invece avrei usato:
//gtk_label_set_text(GTK_LABEL(label),stringa2);
//Se non avevo tag di stile <span>
}
}
void on_entry1_activate (GtkWidget *widget, gpointer user_data)
{
printf ("Hai scritto il tuo nome.n");
gchar output[80]="Ciao ";
strcat(output,gtk_entry_get_text(GTK_ENTRY(widget)));
printf ("%s n",output);
}
int main (int argc, char *argv[])
{
GtkWidget *window1;
GladeXML *xml;
#ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
textdomain (PACKAGE);
#endif
gnome_init (PACKAGE, VERSION, argc, argv);
glade_gnome_init ();
/*
* The .glade filename should be on the next line.
*/
xml = glade_xml_new ("provalibglade.glade", NULL, NULL);
/* This is important */
glade_xml_signal_autoconnect (xml);
window1 = glade_xml_get_widget (xml, "window1");
gtk_widget_show (window1);
gtk_main ();
return 0;
}
/* Created by Anjuta version 1.2.4a */
/* This file will not be overwritten */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <gnome.h>
#include <glade/glade.h>
void on_risultato1_clicked (GtkWidget *widget, gpointer user_data) {
GladeXML *self = glade_get_widget_tree(GTK_WIDGET(widget));
GtkWidget *label = glade_xml_get_widget (self, "label3");
char buffer[50];
int a=2, b=2;
g_snprintf(buffer, 49, "%d", a+b);
//g_snprintf converte l'intero in stringa. E' piu sicuro di usare sprintf.
gtk_label_set_text(GTK_LABEL(label),buffer);
}
void on_risultato2_clicked (GtkWidget *widget, gpointer user_data) {
GladeXML *self = glade_get_widget_tree(GTK_WIDGET(widget));
GtkWidget *label = glade_xml_get_widget (self, "label3");
char buffer[50];
int a=4, b=8;
g_snprintf(buffer, 49, "%d", a*b);
gtk_label_set_text(GTK_LABEL(label),buffer);
}
void on_risultato3_clicked (GtkWidget *widget, gpointer user_data) {
GladeXML *self = glade_get_widget_tree(GTK_WIDGET(widget));
GtkWidget *label = glade_xml_get_widget (self, "label3");
char buffer[50];
int a=12, b=4;
g_snprintf(buffer, 49, "%d", a/b);
gtk_label_set_text(GTK_LABEL(label),buffer);
}
void on_info_button_clicked (GtkWidget *widget, gpointer user_data) {
GtkWidget *window2;
GladeXML *xml;
xml = glade_xml_new ("provaglade4.glade", NULL, NULL);
glade_xml_signal_autoconnect (xml);
window2 = glade_xml_get_widget (xml, "window2");
gtk_widget_show (window2);
}
void on_exit_button_clicked (GtkWidget *widget, gpointer user_data) {
printf ("Arrivederci!n");
gtk_main_quit ();
}
int main (int argc, char *argv[])
{
GtkWidget *window1, *widget;
GladeXML *xml;
#ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
textdomain (PACKAGE);
#endif
gnome_init (PACKAGE, VERSION, argc, argv);
glade_gnome_init ();
/*
* The .glade filename should be on the next line.
*/
xml = glade_xml_new ("provaglade4.glade", NULL, NULL);
// Questo servirebbe a fare in modo di modificare tutti i caratteri
//della finestra (escludendo la scelta di default fatta dall'utente
//nelle impostazioni di GNOME. In realtà è preferibile che sia l'utente
//a scegliere il carattere che preferisce.
//g_object_set(gtk_settings_get_default(), "gtk-font-name", "Sans 20", NULL);
//gtk_label_set_use_markup(label, TRUE); gtk_label_set_markup(label, "<b>Your label</b>");
/* This is important */
glade_xml_signal_autoconnect (xml);
window1 = glade_xml_get_widget (xml, "window1");
gtk_widget_show (window1);
/* Chiusura del programma quando l'utente chiude la finestra */
widget = glade_xml_get_widget (xml, "window1");
g_signal_connect (G_OBJECT (widget), "delete_event",
G_CALLBACK (gtk_main_quit), NULL);
gtk_main ();
return 0;
}
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <gnome.h>
#include <glade/glade.h>
void
on_button1_clicked (GtkButton *button, gpointer user_data)
{
GtkWidget *window1;
window1 = gtk_widget_get_toplevel(button);
char *filename;
GtkWidget *dialog;
dialog = gtk_file_chooser_dialog_new ("Open File",
window1,
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
NULL);
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
{
//char *filename;
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
//open_file (filename);
// g_free (filename);
}
else filename = "";
gtk_widget_destroy (dialog);
/* Ho preferito ricercare la GtkLabel a partire da window1, per esigenze di esperimento,
* ma avrei potuto direttamente scrivere:
* GladeXML *self = glade_get_widget_tree(GTK_WIDGET(button));
*/
GladeXML *self = glade_get_widget_tree(GTK_WIDGET(window1));
GtkWidget *label = glade_xml_get_widget (self, "etichetta");
gtk_label_set_markup (GTK_LABEL(label), filename);
return 0;
}
int main (int argc, char *argv[])
{
GtkWidget *window1, *button1;
GladeXML *xml;
// PACKAGE è definito in config.h
gnome_init (PACKAGE, VERSION, argc, argv);
glade_gnome_init ();
xml = glade_xml_new ("scelta_file.glade", NULL, NULL);
/* Ho ESCLUSO l'autoconnect, faccio le callback manualmente */
// glade_xml_signal_autoconnect (xml);
window1 = glade_xml_get_widget (xml, "window1");
button1 = glade_xml_get_widget (xml, "button1");
g_signal_connect (G_OBJECT (button1), "clicked",
G_CALLBACK (on_button1_clicked),
NULL);
g_signal_connect (G_OBJECT (window1), "delete_event",
G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show (window1);
gtk_main ();
return 0;
}
Sei un Bomber...!
ho quasi capito come funziona il tutto con i programmi di esempio