Newsgroup: it.comp.os.linux.development
Titolo: gtk+ e c

ciao a tutti
sto cercando di imparare l'utilizzo della libreria
gtk+ per creare programmi c in ambiente X.
la domanda (credo molto banale) č questa:
supponiamo che la mia widget abbia un "button" e
abbia diversi altri elenemti,
come "checkbutton", diverse "label" ... ecc
e supponiamo di voler fare in modo che alla pressione del
button vengano variate le stringhe di 2 o piů label.
alla callback pero' posso passare UN SOLO DATO ALLA VOLTA
infatti il suo prototipo č
static void button_click_cb(GtkWidget* w, gpointer data);
come faccio ad agire su piů di un widget alla volta
in una sola callback ?
(in questo caso a piů di una label)
cosa passo alla callback come "gpointer data" ?
grazie a tutti
davide

 cosa passo alla callback come "gpointer data" ?
Le soluzioni sono  molteplici, sta alla tua  fantasia come risolvere
il problema. Qui di seguito ti do un po' di dritte...
Per prima cosa devi sapere che gpointer č cosě definito (vedi glib.h)
     typedef void* gpointer;
Quindi  č a  tutti  gli effetti  un puntatore  a  void, quindi  puoi
passare un  qualsiasi tipo di  dato. Una prima idea  potrebbe quindi
essere quella di crearti una struttura  con tutti i puntatori di cui
hai  bisogno, per  esempio  tra  i programmini  che  ho scritto  per
imparare ad usare GTK+ avevo scritto questa struttura:
	typedef struct
	{ struct
	  {
	    GtkWidget *window;
	    GtkWidget *button1;
	    GtkWidget *button2;
	    GtkWidget *label1;
	    GtkWidget *label2;
	  } winMain;
	  struct
	  { GtkWidget *window;
	    GtkWidget *label;
	  } winSub;
	  int mioflag;
	} Application;
In questo modo quando potevo creare i widget in questo modo:
app->winMain.label1 = gtk_label_new ("1");
app->winMain.label2 = gtk_label_new ("2");
app->winMain.button1 = gtk_button_new_with_label ("1");
app->winMain.button2 = gtk_button_new_with_label ("2");
Passando  quindi  app  (che  era un  puntatore  ad  Application)  su
gpointer  disponevo di  tutti i  puntatori dei  widget di  cui avevo
bisogno.
Questo va  bene se devi aggiungere  un evento che ha  bisogno di piů
widget, se perň alla pressione di  un tasto esegui un evento che puň
essere diviso  in due  parti separate allora  ti conviene  usare due
callback.  Tanto per  intenderci  se tu  usi gtk_signal_connect  sul
widget button1 per agganciare il signal "clicked" nessuno ti obbliga
ad  usare una  seconda  volta gtk_signal_connect  per agganciare  un
secondo evento. Ovviamente questo metodo  ha molti piů limiti, ma in
certi casi  rende il codice piů  leggibile (quando come ho  detto si
deve eseguire azioni separate).
Per  finire se  usi Glade  proprio qualche  giorno fa  avevo fornito
un  esempio  di  come  risolvere  il  problema  usando  la  funzione
lookup_widget  contenuta  nel  file   support;  il  thread  lo  puoi
ritrovare facilmente visto che era  stato marcato nel subject con il
"tag" [gtk+].
byeZ!
-- 
Vanni Brutto
| email 
za...@nofesso.libero.it
      |
| irc nick VanniB   |   ICQ 18526701 |
--- rimuovi nofesso per rispondere ---
---PC powered by Linux kernel 2.4.18za
Bisogna  sempre fare  le  scuse ad  un
uomo quando  si ha torto, a  una donna
quando si ha ragione. 

 
grazie!!!
la tua risposta č stata mooolto utile ed esauriente,
provo subito a seguire i tuoi consigli.
ciao