File: faq.sgml

package info (click to toggle)
glade-nonus 0.6.4-5
  • links: PTS
  • area: main
  • in suites: woody
  • size: 12,152 kB
  • ctags: 3,879
  • sloc: ansic: 54,332; sh: 6,839; makefile: 743; sed: 93
file content (1029 lines) | stat: -rw-r--r-- 34,514 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
<!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V4.0//EN"[

]>

<article class=faq id="index"> <!-- please do not change the id -->

 <!-- ============= Document Header ============================= -->
 <articleinfo> 
  <title>Glade FAQ</title>
  <copyright>
   <year>2000</year>
   <holder>Damon Chaplin</holder>
  </copyright>

  <copyright>
   <year>2001</year>
   <holder>Fabrizio Stefani (traduzione italiana)</holder>
  </copyright>

  <!-- do not put authorname in the header except in copyright - use
  section "authors" below -->

  <legalnotice>
   <para>
    � permesso copiare, distribuire e/o modificare questo documento 
    secondo i termini della <citetitle>GNU Free Documentation
    License</citetitle>, Versione 1.1 o qualsiasi altra versione
    successiva pubblicata dalla Free Software Foundation, senza
    Sezioni non modificabili, senza nessun Testo Copertina e senza nessun
    Testo di retro copertina. � possibile ottenere una copia della
    <citetitle>GNU Free Documentation License</citetitle> dalla Free
    Software Foundation visitando <ulink url="http://www.fsf.org/"
    type="http">il loro sito web</ulink> oppure scrivendo a:
    Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.
   </para>
   <para>
    Molti dei nomi usati dalle compagnie per identificare i loro prodotti
    e servizi sono dichiarati marchi registrati. Quando tali nomi appaiono
    in un qualsiasi documento GNOME, e qualora tali nomi siano noti ai
    membri dello GNOME Documentation Project, essi vengono stampati in
    maiuscolo o con iniziali maiuscole.
   </para>
  </legalnotice>

  <releaseinfo>
   Questa � la versione 1.0 di Glade FAQ.
  </releaseinfo>
 </articleinfo>

 <!-- ============= Document Body ============================= -->

 <para>
  Questa � una lista delle pi� gettonate domande ricorrenti su
  <application>Glade</application>, il costruttore di interfacce
  utente Gtk+/GNOME.
 </para>

 <!-- Cut this out to add a new question and answer.
   <qandaentry>
    <question>
     <para>
     </para>
    </question>
    <answer>
     <para>
     </para>
    </answer>
   </qandaentry> 
 -->

 <qandaset>

  <!-- ============= General Information About Glade ============= -->
  <qandadiv>
   <title>Informazioni generali su Glade</title>

   <qandaentry>
    <question>
     <para>
      Quale documentazione � disponibile per Glade?
     </para>
    </question>
    <answer>
     <para>
      Nella versione GNOME di Glade sono disponibili la Guida Quick-Start, 
      il Manuale e le FAQ, direttamente dal menu Aiuto. Sfortunatamente
      questi ancora non coprono tutti gli aspetti riguardanti l'uso di Glade.
     </para>
     <para>
      Sul web sono reperibili alcuni altri documenti:
     </para>
     <para>
      La guida Spagnola:
      <ulink url="http://tigre.aragon.unam.mx/m3d/links_es.htm"
      type="http">tigre.aragon.unam.mx/m3d/links_es.htm</ulink>
     </para>
     <para>
      La guida Italiana:
      <ulink url="http://digilander.iol.it/robang/glade"
      type="http">digilander.iol.it/robang/glade</ulink>
     </para>
     <para>
      Non credo che ci siano libri che trattano specificatamente di Glade;
      comunque ho visto un capitolo su Glade in un libro della Wrox press
      dedicato agli sviluppatori Linux.
     </para>
     <para>
      Aggiunger�, sulla home page di Glade <ulink url="http://glade.gnome.org/" 
      type="http">glade.gnome.org</ulink>, link riguardanti la documentazione, 
      non appena disponibili.
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Esiste codice d'esempio?
     </para>
    </question>
    <answer>
     <para>
      Glade include un semplice editor di testo, come esempio, nella 
      directory examples/editor. Se avete installato un pacchetto binario 
      di Glade (ad es. un RPM), tali file potrebbero essere stati installati 
      in /usr/doc/glade-X.X.X. Se non riuscite a trovarlo scaricate il 
      pacchetto tar da <ulink url="http://glade.gnome.org/" 
      type="http">glade.gnome.org</ulink>.
     </para>
     <para>
      Il sito web contiene dei link a diverse applicazioni create usando 
      Glade. Queste potrebbero contenere utile codice d'esempio. Vedi la
      pagina 'Applications' su <ulink url="http://glade.gnome.org/" 
      type="http">glade.gnome.org</ulink>.
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Devo usare una qualche licenza particolare per il codice C generato
      con Glade?
     </para>
    </question>
    <answer>
     <para>
      No. Sei libero di usare qualsiasi licenza tu voglia per il codice C
      generato da Glade.
     </para>
     <para>
      Comunque, nello spirito del software libero, ti incoraggiamo ad usare
      la licenza GPL o la LGPL.
     </para>
    </answer>
   </qandaentry> 

  </qandadiv>

  <!-- ============= Creating A User Interface In Glade ======== -->

  <qandadiv>
   <title>Creare una interfaccia utente con Glade</title>

   <qandaentry>
    <question>
     <para>
      Quando aggiungo un widget ad una finestra, questo me la occupa 
      interamente e non posso aggiungere nessun altro widget.
     </para>
    </question>
    <answer>
     <para>
      Non � un bug di <application>Glade</application>! In GTK+
      si usano dei contenitori per disporre i widget. I contenitori
      pi� usati si trovano in fondo alla finestra principale della palette.
      Prova ad aggiungere alla finestra un riquadro verticale. Ora
      aggiungi una tabella in una delle divisioni del riquadro verticale.
      Adesso hai afferrato l'idea?
     </para>
     <para>
      Se proprio vuoi posizionare i widget in specifiche coordinate,
      prova il contenitore a Posizioni fisse. Per� questa tecnica �
      sconsigliata perch� le tue finestre (normali o di dialogo) non
      avranno un bel aspetto quando vengono ridimensionate; e se poi
      traduci il testo delle etichette e dei pulsanti in altre lingue,
      le scritte potrebbero non entrarci.
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Come faccio a cambiare i colori di un widget (ad es. a colorare
      di rosso una label)?
     </para>
    </question>
    <answer>
     <para>
      Puoi usare i file rc GTK+ standard per impostare i colori e i font
      dei tuoi widget. Se in Glade abiliti l'opzione 'Imposta nomi dei
      widget', risulter� pi� semplice fare riferimento ai tuoi widget, 
      visto che potrai chiamarli per nome. Vedi la documentazioni sulle
      risorse di GTK+ presso <ulink
      url="http://developer.gnome.org/doc/API/gtk/index.html"
      type="http">developer.gnome.org/doc/API/gtk/index.html</ulink>. 
     </para>
     <para>
      Puoi anche cambiare lo stile di un widget all'interno del tuo codice
      chiamando gtk_widget_modify_style(); ad es:
      <programlisting>
  GdkColor red = { 0, 65535, 0, 0 };
  GtkRcStyle *rc_style = gtk_rc_style_new ();
  rc_style->fg[GTK_STATE_NORMAL] = red;
  rc_style->color_flags[GTK_STATE_NORMAL] |= GTK_RC_FG;
  gtk_widget_modify_style (widget, rc_style);
  gtk_rc_style_unref (rc_style);
      </programlisting>
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Come aggiungo un disegno ad un pulsante?
     </para>
    </question>
    <answer>
     <para>
      Crea un pulsante e seleziona <guilabel>Rimuovi etichetta</guilabel>
      dal menu a comparsa. Ora puoi aggiungere al pulsante qualsiasi 
      widget tu voglia; ad es. un riquadro orizzontale con dentro un 
      disegno e una etichetta (<application>Glade</application> in futuro
      potrebbe rendere questa operazione ancora pi� semplice).
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Come faccio ad aggiungere pi� di un widget (dello stesso tipo) alla 
      volta?
     </para>
    </question>
    <answer>
     <para>
      Tieni premuto il tasto 'Control' quando selezioni il widget nella
      <interface>Palette</interface>. Rimarr� selezionato finch� non 
      scegli un widget, oppure il <interface>Selettore</interface>.
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Tutte le volte che uso una finestra di scorrimento ottengo il 
      seguente avvertimento:
      Gtk-WARNING **: <errorname>gtk_scrolled_window_add(): cannot add
      non scrollable widget use
      gtk_scrolled_window_add_with_viewport() instead</errorname>
     </para>
    </question>
    <answer>
     <para>
      Puoi tranquillamente ignorarlo. � emesso da GTK+ per ricordare ai
      programmatori di aggiornare il proprio codice; ci� perch� il
      comportamento delle finestre di scorrimento � cambiato abbastanza
      fra GTK+ 1.0 e GTK+ 1.2. Ma il codice di 
      <application>Glade</application> � a posto. L'avvertimento non
      dovrebbe apparire nella tua applicazione finale.
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Quali formati grafici sono supportati da Glade?
     </para>
    </question>
    <answer>
     <para>
      Se stai creando una applicazione GTK+ allora i tuoi disegni devono
      essere in formato XPM (GTK+ 2.0 includer� la libreria gdk-pixbuf e
      quindi supporter� molti pi� formati grafici).
     </para>
     <para>
      Se stai creando una applicazione GNOME allora puoi usare la maggior
      parte dei formati grafici. Comunque il formato PNG � quello da
      preferire per la maggior parte della grafica, tipo le icone.
     </para>
     <para>
      Puoi convertire le immagini nei vari formati usando il programmma
      di grafica GIMP, oppure l'utility 'convert' del pacchetto ImageMagick.
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Come si fa ad aggiungere un gestore di segnale?
     </para>
    </question>
    <answer>
     <para>
      Segui questi passi:
     <itemizedlist>
      <listitem>
       <para>
        Seleziona il widget a cui vuoi aggiungere il gestore.
       </para>
      </listitem>
      <listitem>
       <para>
        Seleziona la scheda 'Segnali' nella finestra dell'editor delle
	propriet�.
       </para>
      </listitem>
      <listitem>
       <para>
        Clicca sul pulsante '...' che si trova a destra del campo 
	'Segnale:'. Apparir� una finestra con l'elenco dei segnali emessi 
	dal widget selezionato.
       </para>
      </listitem>
      <listitem>
       <para>
        Nella finestra appena comparsa scegli a quale segnale vuoi
	connettere un gestore e premi il pulsante 'OK'.
       </para>
      </listitem>
      <listitem>
       <para>
        Glade genera automaticamente un nome, per la funzione del gestore
	di segnale nel campo 'Gestore:', ma sei libero di cambiarlo, se
	preferisci.
       </para>
      </listitem>
      <listitem>
       <para>
        Clicca sul pulsante 'Aggiungi' per aggiungerlo alla lista dei
	gestori di segnale di questo widget.
       </para>
      </listitem>
     </itemizedlist>
    </para>
    <para>
     Quando generi il sorgente C, nel file callbacks.c, verr� scritta una 
     funzione vuota per il gestore di segnale. Puoi aggiungere il tuo
     codice a questa funzione.
    </para>
    </answer>
   </qandaentry> 

  </qandadiv>


  <!-- ============= Building The C Code Generated By Glade ============ -->
  <qandadiv>
   <title>Compilare il codice C generato da Glade</title>

   <qandaentry>
    <question>
     <para>
      Come faccio a compilare il codice generato da Glade?
     </para>
    </question>
    <answer>
     <para>
      Per compilare il codice C generato da <citetitle>Glade</citetitle>
      ti servono <application>automake</application> >= 1.4 e
      <application>autoconf</application> >= 2.13. Se hai attivato il 
      supporto per <application>gettext</application> allora ti serve
      anche <application>gettext</application> >= 0.10.35. Per dei 
      riferimenti sull'argomento vedi la sezione
      <citetitle>Requirements</citetitle> nel file
      <filename>README</filename>.
     </para>
     <para>
      Lancia <command>./autogen.sh</command> nella directory base del
      progetto per eseguire <application>automake</application>,
      <application>autoconf</application> e le relative utilit� per
      generare i <filename>Makefile</filename>. Passagli tutte le
      opzioni che vuoi siano passate al configure; ad es. d�i 
      <command>./autogen.sh --prefix /usr/local/gnome</command>.
     </para>
     <para>
      Poi lancia il <command>make</command> per compilare l'applicazione.
     </para>
     <para>
      Nota che per le applicazioni GNOME devi dare anche un <command>make 
      install</command> di modo che i pixmap vengano installati 
      appropriatamente. Se non lo fai l'applicazione funzioner� lo stesso,
      ma non vedrai i pixmap.
     </para>
    </answer>
   </qandaentry>

   <qandaentry>
    <question>
     <para>
      Mi d� questo errore:
      aclocal: configure.in: 10: <errorname>macro `AM_PATH_GTK' not
      found in library</errorname>
     </para>
    </question>
    <answer>
     <para>
      Significa che non � possibile trovare il file 
      <filename>gtk.m4</filename> (<filename>gtk.m4</filename> � un
      insieme di macro m4 che vengono installate come parte di GTK+ e
      sono usate per compilare i programmi che usano GTK+). 
      <application>aclocal</application> (che fa parte di
      <application>automake</application>) ricerca queste macro per
      aggiungerle ad <filename>aclocal.m4</filename> nella directory
      principale del tuo programma.
     </para>
     <para>
      Per scoprire dove � stato installato GTK+ lancia <command>gtk-config
      --prefix</command>. Il file <filename>gtk.m4</filename> dovrebbe
      trovarsi nella sottodirectory 
      <filename class="directory">share/aclocal</filename>. Per sapere
      qual � la directory che sta usando <application>aclocal</application>
      lancia <command>aclocal --print-ac-dir</command>. 
     </para>
     <para>
      Dovresti aggiungere la directory in cui sono installati i file m4
      GTK+ alla variabile d'ambiente <varname>ACLOCAL_FLAGS</varname>; cio�
      se i file m4 GTK+ si trovano in <filename
      class="directory">/usr/local/share/aclocal</filename>, allora 
      aggiungi <command>export ACLOCAL_FLAGS="-I
      /usr/local/share/aclocal/"</command> al tuo 
      <filename>$HOME/.profile</filename>.
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
        Mi d� questo errore:
	** CRITICAL **: file glade_gnome.c: line 939
	    (glade_gnome_write_menu_item_source):
		assertion `source_buffer != NULL' failed.
     </para>
    </question>
    <answer>
     <para>
      Stai tentando di usare i menu di Gnome in una applicazione che � 
      solo GTK+. Edita tutti i menu del tuo progetto ed assicurati che la 
      propriet� "Oggetto Stock" sia impostata a "Nessuno" in tutte le voci 
      di menu.
     </para>
    </answer>
   </qandaentry> 

   </qandadiv>

  <!-- ============= Using The C Code Generated By Glade ============ -->
  <qandadiv>
   <title>Usare il codice C generato da Glade</title>

   <qandaentry>
    <question>
     <para>
      Quali sono i file scritti da Glade?
     </para>
    </question>
    <answer>
     <para>
      Ecco un elenco dei file che vengono scritti di solito; se hai 
      cambiato le opzioni del progetto alcuni nomi potrebbero essere
      diversi.
     </para>

     <formalpara>
      <title>
       <filename>autogen.sh</filename>
      </title>
      <para>
       Uno script che lancia nel giusto ordine 
       <application>automake</application>, 
       <application>autoconf</application> e i programmi correlati, 
       facilitando enormemente la compilazione dell'applicazione.
       Devi passargli tutti gli argomenti che vuoi siano passati a
       <application>configure</application>. Dopo averlo eseguito
       puoi dare <command>make</command> per compilare l'applicazione.
      </para>
     </formalpara>

     <formalpara>
      <title>
       <filename>configure.in</filename>
      </title>
      <para>
       � lo script standard passato ad <application>autoconf</application>
       per generare lo script di configurazione.
      </para>
     </formalpara>

     <formalpara>
      <title>
       <filename>Makefile.am</filename>
      </title>
      <para>
       Contiene le direttive standard di compilazione, passate ad automake 
       per generare il <filename>Makefile.in</filename>, che lo script
       configure trasforma nel <filename>Makefile</filename>. 
      </para>
     </formalpara>

     <formalpara>
      <title>
       <filename>acconfig.h</filename>
      </title>
      <para>
       Contiene alcune macro che vengono impostate dallo script
       configure e aggiunte al file header <filename>config.h</filename>
       (che deve essere il primo file di cui si fa #include in tutti
       i tuoi file sorgenti). La maggior parte di queste macro servono
       per il supporto a gettext (ENABLE_NLS, HAVE_CATGETS, HAVE_GETTEXT, 
       HAVE_LC_MESSAGES, HAVE_STPCPY), HAVE_LIBSM serve a Gnome (ma non
       danneggia le applicazioni GTK+) e solo alcune sono aggiunte da
       <application>Glade</application> (PACKAGE_LOCALE_DIR,
       PACKAGE_DATA_DIR, PACKAGE_SOURCE_DIR).
      </para>
     </formalpara>
   
     <formalpara>
      <title>
       <filename>stamp-h.in</filename>
      </title>
      <para>
       Usata come timestamp (data/ora) da <application>automake</application>,
       per ricompilare alcuni dei file generati.
      </para>
     </formalpara>

     <formalpara>
      <title>
       <filename>AUTHORS</filename>, <filename>ChangeLog</filename>,
       <filename>NEWS</filename>, <filename>README</filename>
      </title>
      <para>
       Questi file sono tutti inizialmente vuoti, vengono creati solo per
       aderire alle convenzioni GNU.
      </para>
     </formalpara>

     <formalpara>
      <title>
       <filename>src/Makefile.am</filename>
      </title>
      <para>
       Il file standard di make.
      </para>
     </formalpara>

     <formalpara>
      <title>
       <filename>src/main.c</filename>
      </title>
      <para>
       Contiene la funzione <function>main</function>() che creer� per
       te tutte le finestre (normali e di dialogo).
      </para>
     </formalpara>

     <formalpara>
      <title>
       <filename>src/interface.h</filename>
      </title>
      <para>
       Dichiarazioni delle funzioni che puoi chiamare per creare le
       finestre (normali e di dialogo) che sono state preparate in
       <application>Glade</application>.
      </para>
     </formalpara>

     <formalpara>
      <title>
       <filename>src/interface.c</filename>
      </title>
      <para>
       Il codice per creare le finestre (normali e di dialogo) e tutti
       i widget.
      </para>
     </formalpara>

     <formalpara>
      <title>
       <filename>src/callbacks.h</filename>
      </title>
      <para>
       Dichiarazioni delle funzioni di callback e dei gestori di segnale 
       che scriverai.
      </para>
     </formalpara>

     <formalpara>
      <title>
       <filename>src/callbacks.c</filename>
      </title>
      <para>
       Le funzioni di callback e i gestori di segnale.
      </para>
     </formalpara>

     <formalpara>
      <title>
       <filename>src/support.h</filename>
      </title>
      <para>
       Dichiarazioni di alcune funzioni di supporto, compresa
       <function>lookup_widget</function>() che puoi usare per ottenere
       dei puntatori ai widget.
      </para>
     </formalpara>

     <formalpara>
      <title>
       <filename>src/support.c</filename>
      </title>
      <para>
       Le funzioni di supporto.
      </para>
     </formalpara>

     <para>
      Se � abilitato il supporto per <application>gettext</application>
      viene creata la directory <filename class="directory">po</filename> 
      con un <filename>POTFILES.in</filename> ed un 
      <filename>ChangeLog</filename> separato.
      <filename>POTFILES.in</filename> elenca i file sorgenti che 
      contengono delle stringhe traducibili e dovresti aggiungere qui
      tutti i file sorgente che crei.
     </para>

     <para>
      Per i progetti GNOME viene aggiunta anche la directory <filename
      class="directory">macros</filename>, che contiene tutte le macro
      m4 usate per compilare il progetto (veramente queste avrebbero
      dovuto essere installate come parte di GNOME, ma sfortunatamente
      ci� non � stato fatto in GNOME 1.0.x; si spera che questa cosa
      venga corretta in una futura versione di GNOME, al che questa
      directory non sar� pi� necessaria).
     </para>

     <para>
        Dopo aver compilato il progetto, se cambi le opzioni
	<guilabel>Supporto per Gnome</guilabel> o
        <guilabel>Supporto per gettext</guilabel>, allora dovrai aggiornare
	alcuni dei file compilati, come <filename>configure.in</filename> e
	<filename>Makefile.am</filename>. La soluzione migliore probabilmente
	� di cambiare la directory del progetto nella finestra di dialogo
	<interface>Opzioni del progetto</interface> e ricompilare il
	progetto da zero. Tuttavia cos� facendo dovrai ricopiare tutto il 
	codice che avevi, eventualmente, aggiunto per gestire i segnali. 
	Un'alternativa � quella di cancellare <filename>autogen.sh</filename>,
        <filename>configure.in</filename>, <filename>Makefile.am</filename>,
        <filename>src/Makefile.am</filename>, 
	<filename>src/main.c</filename> e ricrearli usando 
        <application>Glade</application>. Ma se avevi fatto dei cambiamenti
	in tali file allora dovrai rifarli (si spera che in futuro 
        <application>Glade</application> gestisca meglio questo problema).
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Quali file possono essere modificati tranquillamente dallo sviluppatore
      e quali invece vengono sovrascritti?
     </para>
    </question>
    <answer>
     <para>
      <application>Glade</application> non sovrascrive quasi nessuno
      dei file. Esso ricreer� i file necessari per la compilazione, se
      non esistono gi� (e se � attivata la corrispondente opzione di 
      progetto).
     </para>
     <para>
      I file che <application>Glade</application> sovrascrive sono:
      <filename>interface.h</filename>, <filename>interface.c</filename>, 
      <filename>support.h</filename> e <filename>support.c</filename>
      (sebbene, nel tuo progetto, potresti averli chiamati diversamente,
      cambiandoli nella finestra di dialogo <interface>Opzioni del 
      progetto</interface>).
     </para>
     <para>
      Tali file hanno tutti un avvertimento in cima che dice <quote>DO
      NOT EDIT</quote> (NON MODIFICARE).
     </para>
     <para>
      Se hai aggiunto, o aggiornato, un qualunque gestore di segnale,
      esso verr� accodato nei file <filename>callbacks.h</filename> e
      <filename>callbacks.c</filename>. In questo modo qualunque codice
      di callback tu avessi gi� aggiunto � completamente al sicuro!
      Se hai cambiato nome ad una funzione di gestione di segnale allora
      sta a te cancellare la vecchia versione e copiare il codice in
      quella nuova.
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Come faccio ad aggiungere al progetto i miei file sorgenti?
     </para>
    </question>
    <answer>
     <para>
      Aggiungili, compresi i file header, in 
      <filename>src/Makefile.am</filename>, nella variabile 
      <varname><replaceable>project1</replaceable>_SOURCES</varname>
      (dove <replaceable>project1</replaceable> � il nome del tuo
      progetto).
     </para>
     <para>
      Se usi <application>gettext</application> probabilmente vorrai
      aggiungere i file sorgente anche in 
      <filename>po/POTFILES.in</filename>; di modo che le stringhe possano
      essere tradotte.
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Come faccio ad aggiungere una libreria al progetto?
     </para>
    </question>
    <answer>
     <para>
      Nel file configure.in del tuo progetto, devi aggiungere un controllo
      per verificare che CPPFLAGS e LIBS siano aggiornati in modo da tener
      conto della libreria (la variabile CPPFLAGS deve contenere tutti i
      flag -I da passare al preprocessore C, mentre la variabile LIBS deve
      contenere le opzioni -l e -L da passare al linker).
     </para>
     <para>
      Autoconf fornisce delle macro come AC_CHECK_HEADER e AC_CHECK_LIB
      che possono essere usate per controllare generici header e librerie.
     </para>
     <para>
      Molte librerie GTK+ e Gnome forniscono uno script di configurazione,
      tipo gtk-config, che emettono i flag CPPFLAGS e LIBS necessari.
     </para>
     <para>
      Ad esempio, libxml fornisce lo script xml-config che puoi usare in
      questo modo:
      <programlisting>
  dnl Get libxml flags & libs
  AC_PATH_PROG(xml_config, xml-config)
  if test "x$xml_config" = "x"; then
    AC_MSG_ERROR([*** xml-config not found.])
  fi

  XML_CFLAGS=`$xml_config --cflags 2>/dev/null`
  XML_LIBS=`$xml_config --libs 2>/dev/null`
  CPPFLAGS="$CPPFLAGS $XML_CFLAGS"
  LIBS="$LIBS $XML_LIBS"
      </programlisting>
     </para>
     <para>
      Assicurati di mettere il tuo configure.in di test prima della
      chiamata di AC_OTUPUT.
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Come ottengo un puntatore ad un widget da dentro un gestore di segnale?
     </para>
    </question>
    <answer>
     <para>
      Usa la funzione <function>lookup_widget</function>() (la puoi
      trovare in <filename>support.c</filename>).
     </para>
     <para>
      Devi passargli un puntatore ad un qualsiasi widget di una finestra e 
      il nome del widget che vuoi ottenere. Di solito, da dentro i gestori 
      di segnale, puoi usare il primo argomento del gestore di segnale come
      primo parametro di <function>lookup_widget</function>(); ad es:
      <programlisting>
void
on_button1_clicked                     (GtkButton       *button,
                                        gpointer         user_data)
{
  GtkWidget *entry1;

  entry1 = lookup_widget (GTK_WIDGET (button), "entry1");

  ...
}
      </programlisting>
     </para>
     <para>
      Nota che ci� non funzioner� se stai usando libglade. Il codice 
      corrispondente per libglade �:
      <programlisting>

void
on_button1_clicked                     (GtkButton       *button,
                                        gpointer         user_data)
{
  GladeXML* xml;
  GtkWidget* entry1;

  xml = glade_get_widget_tree (GTK_WIDGET (button1));
  entry1 = glade_xml_get_widget (xml, "entry1");

  ...
}
      </programlisting>
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Come ottengo un puntatore ad un widget di un'altra finestra?
     </para>
    </question>
    <answer>
     <para>
      Devi tenere traccia dei puntatori a tutte le tue finestre di primo
      livello. Nelle applicazioni pi� semplici, per memorizzare tali 
      puntatori puoi usare delle variabili globali.
     </para>
     <para>
      Nelle applicazioni pi� complesse puoi usare 
      <function>gtk_object_set_data</function>() e le funzioni correlate
      per memorizzare un puntatore ad una finestra contenuta in un'altra
      finestra. Ad esempio, se vuoi creare una finestra di dialogo che
      necessita di accedere ai widget della finestra principale, puoi
      fare cos�:
      <programlisting>
  dialog = create_dialog1 ();  /* Chiama la funzione generata da Glade. */
  gtk_object_set_data (GTK_OBJECT (dialog), "main_window", main_window);
      </programlisting>
       Poi, quando ti serve di accedere alla finestra principale dal
       codice della finestra di dialogo, puoi fare cos�:
      <programlisting>
  main_window = gtk_object_get_data (GTK_OBJECT (dialog), "main_window");
      </programlisting>
     </para>
     <para>
      Devi fare attenzione e assicurarti che il puntatore sia sempre valido.
      Se la finestra a cui punta viene distrutta, non devi pi� usare quel
      puntatore, altrimenti la tua applicazione potrebbe collassare.
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Come ottengo il valore di un GtkOptionMenu?
     </para>
    </question>
    <answer>
     <para>
      Per ottenere la voce di menu correntemente selezionata, chiama
      <function>gtk_menu_get_active</function>() con il menu 
      GtkOptionMenu. Per trovare il suo indice nel menu puoi usare 
      <function>g_list_index</function>():
      <programlisting>
void
on_button1_clicked                     (GtkButton       *button,
                                        gpointer         user_data)
{
  GtkWidget *option_menu, *menu, *active_item;
  gint active_index;

  option_menu = lookup_widget (GTK_WIDGET (button), "optionmenu1");
  menu = GTK_OPTION_MENU (option_menu)->menu;
  active_item = gtk_menu_get_active (GTK_MENU (menu));
  active_index = g_list_index (GTK_MENU_SHELL (menu)->children, active_item);

  g_print ("Active index: %i\n", active_index);
}
      </programlisting>
     </para>
    </answer>
   </qandaentry> 

   <qandaentry id="gtkoptionmenu">
    <question>
     <para>
      Come faccio a far chiamare una funzione a GtkOptionMenu quando cambia?
     </para>
    </question>
    <answer>
     <para>
      Al momento <application>Glade</application> non ha un modo per 
      aiutarti a farlo, ma puoi farlo manualmente.
     </para>
     <para>
      Quando crei la finestra prendi il menu opzioni e connettilo al segnale
      <quote>deactivate</quote> emesso dal suo menu:
      <programlisting>
  window1 = create_window1 ();
  option_menu = lookup_widget (window1, "optionmenu1");
  gtk_signal_connect (GTK_OBJECT (GTK_OPTION_MENU (option_menu)->menu),
                      "deactivate", GTK_SIGNAL_FUNC (on_option_selected),
                      NULL);
      </programlisting>
     </para>

     <para>
      Poi aggiungi un gestore in <filename>callbacks.c</filename>.
      Puoi ottenere l'indice della voce selezionata nel modo spiegato
      nella domanda precedente:
      <programlisting>
static void
on_option_selected (GtkMenuShell *menu_shell,
                    gpointer data)
{
  GtkWidget *active_item;
  gint item_index;

  active_item = gtk_menu_get_active (GTK_MENU (menu_shell));
  item_index = g_list_index (menu_shell->children, active_item);

  g_print ("In on_option_selected active: %i\n", item_index);
}
      </programlisting>
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Come mi connetto ai segnali GtkAdjustment?
     </para>
    </question>
    <answer>
     <para>
      Al momento <application>Glade</application> non lo supporta;
      ma puoi farlo manualmente, in modo simile a quanto visto nella
      domanda 3.6.
     </para>
     <para>
      Quando crei la finestra prendi un puntatore al widget che contiene 
      l'adattamento e connettilo al segnale <quote>changed</quote> o
      <quote>value_changed</quote>:
      <programlisting>
  window1 = create_window1 ();
  hscale = lookup_widget (window1, "hscale1");
  gtk_signal_connect (GTK_OBJECT (GTK_RANGE (hscale)->adjustment),
                      "changed", GTK_SIGNAL_FUNC (on_adjustment_changed),
                      NULL);
      </programlisting>
     </para>
    </answer>
   </qandaentry> 

   <qandaentry>
    <question>
     <para>
      Come faccio ad aggiungere delle righe ad una GtkCList prima che
      la finestra venga disegnata?
     </para>
    </question>
    <answer>
     <para>
      Dopo aver creato la finestra, usando la funzione 'create' generata
      da Glade, usa <function>lookup_widget</function>(), per ottenere un
      puntatore al widget GtkCList, e aggiungi le righe volute. Ad es:
      <programlisting>
  GtkWidget *window, *clist;
  gchar *row[2];		/* La nostra GtkCList ha solo 2 colonne. */

  window = create_window1 ();
  clist = lookup_widget (window, "clist1");

  row[0] = "Ciao";
  row[1] = "Mondo";
  gtk_clist_append (GTK_CLIST (clist), row);

  row[0] = "Seconda";
  row[1] = "Riga";
  gtk_clist_append (GTK_CLIST (clist), row);

  gtk_widget_show (window1);
      </programlisting>
     </para>
    </answer>
   </qandaentry> 

  </qandadiv>

 </qandaset>

  <!-- ============= Authors ================================ -->

   <para>
    Questa FAQ � stata scritta da Damon Chaplin
    (<email>damon@ximian.com</email>). Per favore, invia commenti e
    suggerimenti riguardanti questo manuale all'autore.
    Per maggiori informazioni su <application>Glade</application>, o
    sulle mailing list riguardanti <application>Glade</application>,
    visita la <ulink url="http://glade.gnome.org" type="http">pagina web
    di Glade</ulink>.
   </para>

   <para>
    Traduzione italiana di Fabrizio Stefani
    (<email>fstef@it.gnome.org</email>). Per favore, invia commenti e
    suggerimenti riguardanti questa traduzione al suddetto indirizzo.
   </para>

</article>