<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>hds619.net » Blog &#187; programmazione</title>
	<atom:link href="http://www.hds619.net/blog/category/programmazione/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hds619.net/blog</link>
	<description>Il blog personale di Davide Francesco Merico</description>
	<lastBuildDate>Wed, 05 Oct 2011 00:34:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Imel 0.2.7</title>
		<link>http://www.hds619.net/blog/07/06/2010/imel-0-2-7/</link>
		<comments>http://www.hds619.net/blog/07/06/2010/imel-0-2-7/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 06:02:51 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[imel]]></category>
		<category><![CDATA[libreria grafica]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/?p=257</guid>
		<description><![CDATA[
Rilasciata da qualche minuto la versione 0.2.7 di Imel.
Le novità di questa versione comprendono uno &#8220;snellimento&#8221; delle dipendenze, le uniche librerie richieste ora sono libfreetype6-dev e libfreeimage3-dev, un&#8217;aggiunta di nuovi formati in cui salvare ( XPM, PPM ( Ascii ), JP2, J2K ), un miglioramento nella lettura di quelli già presenti ( ora vengono salvati [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.hds619.net/blog/wp-content/uploads/2009/12/logo_imel.png"><img class="aligncenter size-full wp-image-228" title="logo_imel" src="http://www.hds619.net/blog/wp-content/uploads/2009/12/logo_imel.png" alt="" width="157" height="97" /></a></p>
<p>Rilasciata da qualche minuto la <a href="http://www.hds619.net/imel-pkg/imel-0.2.7.tar.bz2">versione 0.2.7 di Imel</a>.</p>
<p>Le novità di questa versione comprendono uno &#8220;snellimento&#8221; delle dipendenze, le uniche librerie richieste ora sono libfreetype6-dev e libfreeimage3-dev, un&#8217;aggiunta di nuovi formati in cui salvare ( XPM, PPM ( Ascii ), JP2, J2K ), un miglioramento nella lettura di quelli già presenti ( ora vengono salvati usando la libreria freeimage ) e una nuova modalità per salvarli ( al posto del nome può essere passato direttamente il puntatore a file ).</p>
<p>Inoltre:</p>
<ul>
<li><em>imel_image_apply_noise ()</em>: permette di applicare un disturbo all&#8217;immagine.</li>
<li><em>imel_font_write_vstring ()</em> e<em> imel_font_write_vstring_with_truetype_font ()</em>: permettono di scrivere direttamente in verticale.</li>
<li><em>imel_font_write_string ()</em> e<em> imel_font_write_string_with_truetype_font ()</em>: abilitato il supporto al carattere di newline.</li>
<li><em>imel_image_apply_pattern ()</em>: consente ora di sommare o sottrarre i colori del pattern durante la sua applicazione.</li>
<li><em>IMEL_EFFECT_COLOR_TO_ALPHA</em>: nuovo effetto che consente di rendere trasparente le aree in cui c&#8217;era una tonalità di colore ( uguale al<em><strong> Color to alpha</strong></em> presente in GIMP )</li>
<li><em>imel_image_perspective ()</em>: permette di inclinare i lati dell&#8217;immagine in modo simmetrico creando l&#8217;effetto &#8220;prospettiva&#8221;.</li>
</ul>
<p>Ed altri bugfix..</p>
<p>Le informazioni dettagliate nel <a href="http://www.hds619.net/listing/imel/ChangeLog">ChangeLog</a>.</p>
<p>Link immancabile alla Documentazione (<a href="http://www.hds619.net/documentation/imel"> HTML</a>, <a href="http://www.hds619.net/documentation/imel/imel-doc.pdf">PDF</a> )</p>
<p>Link finale per scaricare il pacchetto della <a href="http://www.hds619.net/imel-pkg/imel-0.2.7.tar.bz2">versione 0.2.7</a> <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F07%2F06%2F2010%2Fimel-0-2-7%2F&amp;linkname=Imel%200.2.7">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/07/06/2010/imel-0-2-7/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Imel 0.2.6 una marea di formati letti :)</title>
		<link>http://www.hds619.net/blog/19/03/2010/imel-0-2-6-una-marea-di-formati-letti/</link>
		<comments>http://www.hds619.net/blog/19/03/2010/imel-0-2-6-una-marea-di-formati-letti/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 00:59:19 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[imel]]></category>
		<category><![CDATA[libreria grafica]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/?p=254</guid>
		<description><![CDATA[
Rilasciata la versione 0.2.6 di Imel la libreria grafica per la manipolazione di immagini che sto scrivendo.
Documentazione riscritta da zero e disponibile ora anche in pdf (  Ben 98 Pagine! )
Tra le novità la più importante è l&#8217;introduzione della libreria FreeImage per leggere le immagini quindi i formati supportati in lettura sono davvero tanti.
Ci [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" title="Logo Imel 0.2.x" src="http://www.hds619.net/blog/wp-content/uploads/2009/12/logo_imel.png" alt="" width="157" height="97" /></p>
<p>Rilasciata la <a href="http://www.hds619.net/imel-pkg/imel-0.2.6.tar.bz2">versione 0.2.6 di Imel</a> la libreria grafica per la manipolazione di immagini che sto scrivendo.<br />
Documentazione riscritta da zero e <a href="http://www.hds619.net/documentation/imel/imel-doc.pdf">disponibile ora anche in pd</a>f (  Ben <strong>98 Pagine</strong>! )</p>
<p>Tra le novità la più importante è l&#8217;introduzione della libreria FreeImage per leggere le immagini quindi i <a href="http://www.hds619.net/documentation/imel/x769.html">formati supportati in lettura</a> sono davvero tanti.</p>
<p>Ci sono numerosi bugfix più o meno importanti.</p>
<p>Altre novità che richiedono attenzione sono:</p>
<ul>
<li>Rotazione ora vera e propria di un angolo a piacere</li>
<li>Abilitazione\Disabilitazione disegno con pennelli ( funzioni generiche )</li>
<li>Maschera per pseudo-livello così da poter effettuare operazioni anche con essa ( + IMEL_MASK_LEVEL )</li>
<li>Macro return_if_fail e return_var_if_fail ora non visualizzano più il messaggio di debug a meno imel non sia stata compilata con il debug abilitato</li>
<li>Risolto un grosso memory leak nel salvataggio in PNG</li>
<li>Categoria a parte per il riempimento, migliore della precedente che in alcuni casi risultava buggata</li>
</ul>
<p>Per altre informazioni consultare il <a href="http://www.hds619.net/listing/imel/ChangeLog">ChangeLog</a>.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F19%2F03%2F2010%2Fimel-0-2-6-una-marea-di-formati-letti%2F&amp;linkname=Imel%200.2.6%20una%20marea%20di%20formati%20letti%20%3A%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/19/03/2010/imel-0-2-6-una-marea-di-formati-letti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Imel 0.2.5</title>
		<link>http://www.hds619.net/blog/20/12/2009/imel-0-2-5/</link>
		<comments>http://www.hds619.net/blog/20/12/2009/imel-0-2-5/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 06:47:07 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[imel]]></category>
		<category><![CDATA[libreria grafica]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/?p=227</guid>
		<description><![CDATA[
Pensavamo di pubblicare questa versione per l&#8217;anno nuovo, ma giorno dopo giorno le novità aumentavano e rischiava di diventare un rilascio obeso quindi per evitare difficoltà con tante novità ho deciso di pubblicare questa versione un po&#8217; grassotta ma gestibile.
Prima di proseguire ringrazio Simone Scarinzi conosciuto come &#8220;Skary&#8221; per la partecipazione e la costanza che [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-228" title="logo_imel" src="http://www.hds619.net/blog/wp-content/uploads/2009/12/logo_imel.png" alt="logo_imel" width="157" height="97" /></p>
<p>Pensavamo di pubblicare questa versione per l&#8217;anno nuovo, ma giorno dopo giorno le novità aumentavano e rischiava di diventare un rilascio obeso quindi per evitare difficoltà con tante novità ho deciso di pubblicare questa versione un po&#8217; grassotta ma gestibile.</p>
<p>Prima di proseguire ringrazio Simone Scarinzi conosciuto come &#8220;Skary&#8221; per la partecipazione e la costanza che sta avendo nell&#8217;aiuto dello sviluppo di questa libreria, a lui si devono le nuove funzioni riguardo al disegno di questa versione e l&#8217;idea di rendere disponibili funzioni che prima erano private come ad esempio imel_point_get_from_line ().</p>
<p>Le novità in questi due mesi di sviluppo sono tantissime inizio ad elencarle per ordine:</p>
<p><span id="more-227"></span><br />
<strong>Effetti</strong></p>
<ul>
<li>IMEL_EFFECT_ANTIALIAS, IMEL_EFFECT_DIRECT_ANTIALIAS: Effetti per applicare l&#8217;antialias all&#8217;immagine in modo passivo o diretto ( guardare la documentazione per maggiori dettagli ).</li>
<li>IMEL_EFFECT_IMAGE_ADD, IMEL_EFFECT_IMAGE_SUBTRACT: Sommano, o sottraggono, ad ogni pixel ( colori e livello ) dell&#8217;immagine a cui si sta applicando l&#8217;effetto i pixel ( colori e livello ) dell&#8217;immagine passata come parametro.</li>
</ul>
<p><strong>Tipi</strong></p>
<ul>
<li>ImelRef: Serve a stabilire se prendere come riferimento il colore o il livello di un&#8217;immagine.</li>
<li>ImelValue:
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 138px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Permette di capire a che tipo di misura si riferisce</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 138px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">un eventuale parametro numerico passato dopo un elemento</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 138px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">di questo tipo</div>
<p>Permette di capire a che tipo di misura si riferisce il valore numerico passato dopo questo tipo.</li>
</ul>
<p><strong>Macro</strong></p>
<ul>
<li>DEG_TO_RAD, RAD_TO_DEG: Converte da gradi a radianti e da radianti a gradi</li>
</ul>
<p><strong>Funzioni migliorate</strong></p>
<ul>
<li>imel_draw_ellipse (): migliorata, prima i punti dell&#8217;ellisse non venivano uniti in ellissi molto grandi</li>
<li>imel_draw_line (), imel_draw_dashed_line (), imel_draw_gradient_line (): Corretto un bug che disegnava a tratti la linea se i parametri riguardanti il punto iniziale e il punto finale erano di un certo tipo.</li>
<li>imel_pixel_copy (): corretta una parte che rallentava di molto la funzione in molte chiamate consecutive.</li>
<li>imel_image_apply_convolution (): corretto un bug nell&#8217;inizializzazione di una variabile locale alla funzione anche se errori dovuti a questa non inizializzazione non erano stati notati.</li>
<li>imel_font_write_string_with_truetype_font (): corretto un grave errore nella resa del carattere, in più sono stati aggiunti degli attributi opzionali nel disegno ( guardare la documentazione per sapere quali sono e come usarli ). Compatibilità con vecchie versioni mantenuta.</li>
<li>imel_draw_circle (): Prestazioni migliorate del 50%</li>
<li>imel_image_new_with_background_color (): da ora si calcola anche il livello del pixel passato per creare l&#8217;immagine</li>
</ul>
<p><strong>Funzioni nuove</strong></p>
<ul>
<li>imel_draw_filled_circle (): disegna un cerchio riempito internamente</li>
<li>imel_draw_filled_ellipse (): disegna un ellissi riempita internamente</li>
<li>imel_pixel_compare_level (): funzione simile alla vecchia imel_pixel_compare () solo che questa è appositamente per confrontare i livelli.</li>
<li>imel_image_auto_cut (): Auto-ritaglia un&#8217;immagine il bordo da considerare in più è deciso dall&#8217;utente che può stabilire se basarsi o sul colore oppure sul livello ( sempre a sua discrezione il loro valore ).</li>
<li>imel_color_get_number (): permette di ottenere il numero di colori unici presenti nell&#8217;immagine</li>
<li>imel_draw_gradient_line (): consente di disegnare una linea che ha come colore una sfumatura che va da un colore iniziale ad uno finale</li>
<li>imel_draw_gradient_curve (): come imel_draw_gradient_line () solo che disegna una curva.</li>
<li>imel_color_sum (), imel_color_subtract (): sommano o sottragono un colore ad un altro sempre rimanendo nel range di valori usabili come color ( 0 &#8211; 255 )</li>
<li>imel_image_shear (): inclina parte o tutta un&#8217;immagine verticalmente o orizzontalmente secondo il verso di una linea teorica ( guardare la documentazione per maggiori informazioni )</li>
<li>imel_image_shift (): sposta l&#8217;immagine in alto, in basso, a destra o a sinistra di un numero di pixel a scelta.</li>
<li>imel_image_new_from_raw (): funzione molto potente, permette di aprire un&#8217;immagine grezza ( raw ) di bits per pixel e bits per channel a scelta ( guardare la documentazione per maggiori informazioni ).</li>
<li>imel_draw_reg_shape (): disegna un poligono regolare all&#8217;interno di una circonferenza con un numero di vertici e un&#8217;inclinazione a scelta</li>
<li>imel_draw_partial_reg_shape (): come imel_draw_reg_shape () solo che disegna solo una parte di poligono</li>
<li>imel_image_shift_lines (): come imel_image_shift () solo che lo spostamento può essere limitato solo ad alcune linee dell&#8217;immagine</li>
<li>imel_point_get_from_line (): restituisce solo i punti e la lunghezza di una linea, i punti possono essere ottenuti tutti oppure solo una parte specificata in modo relativo tramite percentuale o in modo fisso tramite pixel.</li>
<li>imel_point_get_from_reg_shape (): restituisce i punti riguardanti i vertici di un poligono regolare inscritto in una circonferenza.</li>
<li>imel_value_convert (), imel_value_percentage_to_generic (), imel_value_pixel_to_percentage: varie funzioni di conversioni da un valore ad un altro.</li>
<li>imel_draw_arch: disegna un arco</li>
<li>imel_image_shift_bpc: permette di eseguire uno shift sui bit di uno o più canali di colore presenti in un&#8217;immagine, consente anche seguendo due shift opposti con gli stessi valori di ridurre i colori di un&#8217;immagine.</li>
<li>imel_image_remove_noise (): elimina il disturbo che può presentare un&#8217;immagine con una soglia a scelta ( guardare la documentazione )</li>
</ul>
<p>Tutte queste funzioni ( per quelle più complicate da capire e utilizzare l&#8217;ho detto già esplicitamente ) sono documentate nella documentazione online e interna al pacchetto scaricato. I link sono i seguenti:</p>
<p><a href="http://www.hds619.net/imel-pkg/imel-0.2.5.tar.bz2">http://www.hds619.net/imel-pkg/imel-0.2.5.tar.bz2</a> Pacchetto di quest&#8217;ultima versione</p>
<p><a href="http://www.hds619.net/documentation/imel">http://www.hds619.net/documentation/imel</a> Documentazione online dell&#8217;ultima versione stabile</p>
<p><a href="http://www.hds619.net/listing/imel">http://www.hds619.net/listing/imel</a> Sorgenti &#8220;sfusi&#8221; dell&#8217;ultima versione stabile</p>
<p>Buona programmazione <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F20%2F12%2F2009%2Fimel-0-2-5%2F&amp;linkname=Imel%200.2.5">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/20/12/2009/imel-0-2-5/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Imel 0.2.4 un pieno di novità!</title>
		<link>http://www.hds619.net/blog/08/11/2009/imel-0-2-4-un-pieno-di-novita/</link>
		<comments>http://www.hds619.net/blog/08/11/2009/imel-0-2-4-un-pieno-di-novita/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 04:54:26 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[himages]]></category>
		<category><![CDATA[imageshack]]></category>
		<category><![CDATA[imel]]></category>
		<category><![CDATA[libreria grafica]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/?p=200</guid>
		<description><![CDATA[
A solo un mese dal rilascio della versione 0.2.3 procede a ritmo serrato lo sviluppo di imel giunto alla versione 0.2.4. Le novità al contrario di quanto si possa pensare. dato il poco tempo passato tra le due versioni, sono tante.
Tra le più importanti ritroviamo il supporto a pkg-config così da poter compilare staticamente senza [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" style="border: 0px initial initial;" title="Logo Imel" src="http://www.hds619.net/imel/logo_imel.png" alt="" width="157" height="97" /></p>
<p>A solo un mese dal <a href="http://www.hds619.net/blog/07/10/2009/imel-0.2.3-e-qui">rilascio della versione 0.2.3</a> procede a ritmo serrato lo sviluppo di imel giunto alla versione 0.2.4. Le novità al contrario di quanto si possa pensare. dato il poco tempo passato tra le due versioni, sono tante.</p>
<p>Tra le più importanti ritroviamo il supporto a <em>pkg-config</em> così da poter compilare staticamente senza dover scrivere manualmente tutte le librerie, possibilità di tracciare un ellisse e disegnare un cerchio, in più reso possibile il disegno di una linea o una curva con un&#8217;immagine così da poter realizzare l&#8217;effetto &#8220;pennello&#8221; presente in molti programmi di grafica e tante altre funzioni.</p>
<p>E novità più importante di tutte: <strong>aggiunto il supporto al formato BMP</strong>.</p>
<p><a href="http://www.hds619.net/listing/imel/ChangeLog">Il Changelog</a> con tutte le modifiche dettagliate.</p>
<p>Colgo l&#8217;occasione per annunciare la partecipazione di una persona oltre a me a questo progetto: Simone &#8220;Skary&#8221; Scarinzi, per il momento ha aiutato nella creazione della funzione per il disegno di un ellisse ma per le prossime versioni ci regalerà altre funzioni riguardanti il disegno <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.hds619.net/imel-pkg/imel-0.2.4.tar.bz2">Link pacchetto</a> &#8211; <a href="http://www.hds619.net/documentation/imel">Link documentazione</a></p>
<p>P.s.: Il servizio HImages è stato aggiornato per avere il supporto alle bmp.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F08%2F11%2F2009%2Fimel-0-2-4-un-pieno-di-novita%2F&amp;linkname=Imel%200.2.4%20un%20pieno%20di%20novit%C3%A0%21">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/08/11/2009/imel-0-2-4-un-pieno-di-novita/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Imel 0.2.3 è qui!</title>
		<link>http://www.hds619.net/blog/07/10/2009/imel-0-2-3-e-qui/</link>
		<comments>http://www.hds619.net/blog/07/10/2009/imel-0-2-3-e-qui/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 04:00:52 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Programmi]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[imel]]></category>
		<category><![CDATA[libreria grafica]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/?p=161</guid>
		<description><![CDATA[Non scrivo da tempo sul blog, ultimamente ( specialmente le persone con cui chatto di solito ) avrete notato che son sparito dalla circolazione. Oltre ad avere poco tempo ( lo so è una scusa stupida ) avevo voglia di staccare un po&#8217; la spina, ed è quello che ho fatto. Nelle ultime settimane ho [...]]]></description>
			<content:encoded><![CDATA[<p>Non scrivo da tempo sul blog, ultimamente ( specialmente le persone con cui chatto di solito ) avrete notato che son sparito dalla circolazione. Oltre ad avere poco tempo ( lo so è una scusa stupida ) avevo voglia di staccare un po&#8217; la spina, ed è quello che ho fatto. Nelle ultime settimane ho utilizzato il computer solo per programmare qualcosina, rispondere a qualche e-mail e per ascoltare musica.</p>
<p>Comunque programmando poco per volta è nata sotto le mie mani la nuova versione di Imel, tra le novità principali un supporto alla trasparenza migliorato generalmente e anche il suo supporto alle immagini png che ora vengono lette e salvate anche con la trasparenza. Altra novità importante è la riscrittura della funzione per disegnare una linea che non si basa più su quella per disegnare una curva ma utilizza un suo algoritmo molto più snello, semplice e veloce. Altre novità le potete leggere nel <a href="http://www.hds619.net/listing/imel/ChangeLog">ChangeLog</a>.</p>
<p><img class="alignnone" title="Logo Imel" src="http://www.hds619.net/imel/logo_imel.png" alt="" width="157" height="97" /></p>
<p><a href="http://www.hds619.net/imel-pkg/imel-0.2.3.tar.bz2">Link al pacchetto</a> -<a href="http://www.hds619.net/documentation/imel/index.html"> Link Documentazione</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F07%2F10%2F2009%2Fimel-0-2-3-e-qui%2F&amp;linkname=Imel%200.2.3%20%C3%A8%20qui%21">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/07/10/2009/imel-0-2-3-e-qui/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Guida gtk+ a puntate ( XIX parte )</title>
		<link>http://www.hds619.net/blog/10/09/2009/guida-gtk-a-puntate-xix-parte/</link>
		<comments>http://www.hds619.net/blog/10/09/2009/guida-gtk-a-puntate-xix-parte/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 23:05:24 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/10/09/2009/guida-gtk-a-puntate-xix-parte/</guid>
		<description><![CDATA[Come promesso qualche giorno fa ecco la guida alle gtk+ riguardante i menu, questa lezione sarà un po&#8217; diversa in quanto invece di spiegare solamente le singole funzioni o eventuali particolari che tralascerò mi concentrerò sul spiegare passo passo la creazione di un menu facendo riferimento allo stile che adotto io per crearli ( una [...]]]></description>
			<content:encoded><![CDATA[<p>Come promesso qualche giorno fa ecco la guida alle gtk+ riguardante i menu, questa lezione sarà un po&#8217; diversa in quanto invece di spiegare solamente le singole funzioni o eventuali particolari che tralascerò mi concentrerò sul spiegare passo passo la creazione di un menu facendo riferimento allo stile che adotto io per crearli ( una volta poi studiate e capite le funzioni ognuno sarà libero di creare un proprio stile con cui si trova meglio ).
<p style="text-align: center"><strong><em>Costruiamo un semplice menu </em></strong></p>
<p style="text-align: left">Prima di iniziare con menu più articolati vorrei iniziare con un piccolissimo menu giusto per vedere le funzioni principali. Per iniziare abbiamo bisogno dei seguenti widget:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p1514');">[<span id="p1514_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p151code4'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p1514"><td width="1%" class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p151code4"><pre class="c"> GtkWidget <span style="color: #339933;">*</span>window;
 GtkWidget <span style="color: #339933;">*</span>bar;
 GtkWidget <span style="color: #339933;">*</span>file, <span style="color: #339933;">*</span>view, <span style="color: #339933;">*</span>help;</pre></td></tr></table></div>

<p style="text-align: left">Dunque, innanzitutto bisogna creare la barra in cui memorizzare i singoli menu, l&#8217;unica funzione utilizzabile è <em>gtk_menu_bar_new ()</em>  che non riceve argomenti e restituisce il widget che punta alla nuova barra di menu. Una barra di menu può avere come attributo il tipo di ordinamento dei vari widget che può essere uno dei seguenti:</p>
<ul>
<li><strong>GTK_PACK_DIRECTION_LTR</strong> -&gt; Le varie voci del menu saranno messe da sinistra verso destra ( quando non si imposta nessuna di queste opzioni questo è il comportamento predefinito ).</li>
<li><strong>GTK_PACK_DIRECTION_RTL</strong> -&gt; Le voci saranno orientate da destra verso sinistra.</li>
<li><strong>GTK_PACK_DIRECTION_TTB</strong> -&gt; Le voci saranno orientate dall&#8217;alto verso il basso.</li>
<li><strong>GTK_PACK_DIRECTION_BTT</strong> -&gt; Le voci saranno orientate dal basso verso l&#8217;alto.</li>
</ul>
<p>Una volta scelto il tipo di orientamento che si vuol dare agli elementi si può utilizzare la funzione <em>gtk_menu_bar_set_pack_direction ()</em> nel seguente modo:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p1515');">[<span id="p1515_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p151code5'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p1515"><td width="1%" class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p151code5"><pre class="c"> bar <span style="color: #339933;">=</span> gtk_menu_bar_new <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
 gtk_menu_bar_set_pack_direction <span style="color: #009900;">&#40;</span>GTK_MENU_BAR <span style="color: #009900;">&#40;</span>bar<span style="color: #009900;">&#41;</span>, GTK_PACK_DIRECTION_BTT<span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p>Siamo ancora all&#8217;inizio del lavoro, perchè ora dovremo creare: i menu grafici principali ( quelli che si vedono nella barra dei menu ) e i menu astratti ognuno dei quali bisognerà collegarlo a un menu grafico principale così da poter inserire gli elementi ( o meglio le operazioni ) di ogni singolo menu. Dunque partiamo con solo una barra di menu con i menu grafici senza sotto-menu:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p1516');">[<span id="p1516_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p151code6'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p1516"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p151code6"><pre class="c"> file <span style="color: #339933;">=</span> gtk_menu_item_new_with_label <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;File&quot;</span><span style="color: #009900;">&#41;</span>;
 gtk_menu_shell_append <span style="color: #009900;">&#40;</span>GTK_MENU_SHELL <span style="color: #009900;">&#40;</span>bar<span style="color: #009900;">&#41;</span>, file<span style="color: #009900;">&#41;</span>;
&nbsp;
 view <span style="color: #339933;">=</span> gtk_menu_item_new_with_label <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Visualizza&quot;</span><span style="color: #009900;">&#41;</span>;
 gtk_menu_shell_append <span style="color: #009900;">&#40;</span>GTK_MENU_SHELL <span style="color: #009900;">&#40;</span>bar<span style="color: #009900;">&#41;</span>, view<span style="color: #009900;">&#41;</span>;
&nbsp;
 help <span style="color: #339933;">=</span> gtk_menu_item_new_with_label <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Aiuto&quot;</span><span style="color: #009900;">&#41;</span>;
 gtk_menu_shell_append <span style="color: #009900;">&#40;</span>GTK_MENU_SHELL <span style="color: #009900;">&#40;</span>bar<span style="color: #009900;">&#41;</span>, help<span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p>I menu principali della barra solitamente si crea con solo il testo, senza utilizzare checkbutton, radiobutton o icone associate come invece succede per le voci del menu, per fare ciò si utilizza come si può vedere la funzione <em>gtk_menu_item_new_with_label ()</em> che riceve come argomento il label da utilizzare e ritorna il widget riguardante il menu principale da inserire nella barra dei menu.Un menu principale si può anche allineare a destra ( mentre l&#8217;azione predefinita che eseguono le gtk+ è quella di allinearli a sinistra ) tramite la funzione <em>gtk_menu_item_set_right_justified ()</em>.Continuando, per inserire poi il menu nella barra si utilizza la funzione <em>gtk_menu_shell_append ()</em> per inserire il nuovo menu in coda agli altri,<em> gtk_menu_shell_prepend ()</em> per inserirlo prima degli altri o in alternativa <em>gtk_menu_shell_insert ()</em> per impostare manualmente il punto in cui inserirlo, questa funzione come si può immagine oltre ai primi due parametri ( GtkMenuShell che sarà la nostra barra convertita con la macro <strong><em>GTK_MENU_SHELL ()</em></strong> e il GtkWidget rappresentate il nostro menu principale ) anche un intero che rappresenta la posizione in cui inserire il menu che va da 0 ( inizio ) a N-1 ( dove N è il numero dei menu inseriti ).Per velocizzare le operazioni di inserimento delle voci dei vari menu nella prossima puntata creeremo delle funzioni apposite perchè come potete immaginare richiamare tante funzioni per ogni singola operazione rende il lavoro di creazione lungo, stancante e poco mantenibile.</p>
<p><strong>Fine Diciannovesima Puntata</strong><br />
<em>Preferisco fermarmi qui per ora perchè inserire le voci sarà abbastanza lungo da spiegare.</em><br />
<em>Ciauz <img src="http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif" class="wp-smiley" alt=";)" /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F10%2F09%2F2009%2Fguida-gtk-a-puntate-xix-parte%2F&amp;linkname=Guida%20gtk%2B%20a%20puntate%20%28%20XIX%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/10/09/2009/guida-gtk-a-puntate-xix-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guida gtk+ a puntate ( XVIII parte )</title>
		<link>http://www.hds619.net/blog/21/07/2009/guida-gtk-a-puntate-xviii-parte/</link>
		<comments>http://www.hds619.net/blog/21/07/2009/guida-gtk-a-puntate-xviii-parte/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 08:57:22 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/21/07/2009/guida-gtk-a-puntate-xviii-parte/</guid>
		<description><![CDATA[Si continua a parlare di gtk+, vedo che durante queste guide ho iniziato ad affascinare molte ( rispetto a quanto mi aspettavo all&#8217;inizio ) persone e ne son contento  
Dopo la mia piccola riflessione iniziale di autoapprezzamento, possiamo continuare l&#8217;argomento textview affrontando velocemente l&#8217;ultimo argomento per poi poter finalmente passare ad altro.
GtkTextTag
I tag forse [...]]]></description>
			<content:encoded><![CDATA[<p>Si continua a parlare di gtk+, vedo che durante queste guide ho iniziato ad affascinare molte ( rispetto a quanto mi aspettavo all&#8217;inizio ) persone e ne son contento <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Dopo la mia piccola riflessione iniziale di autoapprezzamento, possiamo continuare l&#8217;argomento textview affrontando velocemente l&#8217;ultimo argomento per poi poter finalmente passare ad altro.</p>
<p align="center"><strong>GtkTextTag</strong></p>
<p align="left">I tag forse qualcuno di voi può già intuire cosa siano, per chi non lo sapesse lo spiego non preoccupatevi. Sono delle &#8220;entità&#8221; astratte che permettono di applicare degli effetti al testo come ad esempio il grassetto, evidenziazione, colore, ecc.. Non sono così particolari come utilità, mi è capitato più volte di aver bisogno ad esempio della possibilità di evidenziare del testo per far risaltare ad esempio le parole durante una ricerca di qualche parola cosa non fattibile nel caso i tag non esistessero.</p>
<p align="left"><span id="more-147"></span></p>
<p align="left">I tag oltre ad avere degli attributi ( cosa principale per un tag che più avanti vedremo come settare e quali sono ) hanno anche delle priorità, ovvero se noi abbiamo due tag che evidenziano e capita che vengano utilizzati tutti e due sappiamo che uno dei due sarà sotto l&#8217;altro nel caso si ritrovino nello stesso punto. Solitamente la priorità di tutti i tag è 0 quindi l&#8217;ultimo applicato copre l&#8217;altro. Ciò però si può cambiare tramite una funzione chiamata <em>gtk_text_tag_set_priority ()</em> ( per ottenerla <em>gtk_text_tag_get_priority ()</em> unico argomento il tag, ritorna l&#8217;int rappresentante la priorità ) che riceve come primo argomento il tag, e come secondo argomento la priorità ( da specificare come int ).</p>
<p align="left">Voi ora vi chiederete ma come lo creo il tag? semplicissimamente con la funzione <em>gtk_text_tag_new () </em>che riceve come unico argomento il nome da dare al tag, e ritorna il tag creato ( <strong>GtkTextTag * </strong>).</p>
<p align="left">La parte &#8220;difficile&#8221; è quella del settaggio dei vari attributi che per farla dobbiamo ricorrere al tipo primitivo <em>GObject</em> e quindi alla relativa funzione <em>g_object_set ()</em> che abbiamo già incontrato durante queste guide. Vi dò un codice di esempio:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p1478');">[<span id="p1478_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p147code8'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p1478"><td width="1%" class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p147code8"><pre class="c"> GtkTextTag <span style="color: #339933;">*</span>tag;
&nbsp;
 tag <span style="color: #339933;">=</span> gtk_text_tag_new <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;highlighting&quot;</span><span style="color: #009900;">&#41;</span>;
 g_object_set <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>tag<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;foreground&quot;</span>, <span style="color: #ff0000;">&quot;#ffffff&quot;</span>, <span style="color: #ff0000;">&quot;background&quot;</span>, <span style="color: #ff0000;">&quot;#000000&quot;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p align="left">Come vedete la funzione <em>g_object_set ()</em> riceve come primo argomento il nostro tag convertito in <strong>GObject</strong> tramite la macro <em><strong>G_OBJECT  </strong></em>dopodichè ci sono in sequenza <em>attributo, valore, attributo, valore,</em> .. quando si termina l&#8217;impostazione dei vari attributi diamo NULL come parametro e abbiam finito. Gli attributi da poter dare non sto qui ad elencarli perchè sono veramente tanti, vi rimando quindi alla <a href="http://library.gnome.org/devel/gtk/stable/GtkTextTag.html#GtkTextTag.properties">pagina delle api ufficiali delle gtk+ relativa ai tag</a>.</p>
<p align="left">Per finire rimane l&#8217;ultima questione: <em>Ok, ho capito come creare e impostare il tag, ora però che me ne faccio se non so come applicarlo al testo? </em></p>
<p align="left">Boh! Scherzo <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  diciamo che ci sono molti metodi per usare un tag relativi alla situazione in cui ci si ritrova, perchè ad esso fanno riferimenti molti widget di diversa natura. Elenco qualche funzione:</p>
<ul>
<li><em> gtk_text_buffer_insert_with_tags ()</em>: primo argomento il buffer di testo, secondo argomento l&#8217;iter che individua la posizione in cui inserire il testo, terzo argomento il testo accompagnato dal quarto argomento che è la sua lunghezza ( o -1 se è NULL-terminated ), quinto argomento in poi i vari tag che verranno applicati al testo.. alla fine per terminare gli argomenti è necessario inserire il valore NULL.</li>
<li><em>gtk_text_buffer_insert_with_tags_by_name ()</em>: ( gli autori delle gtk+ non si può dire che siano avari sulla lunghezza dei nomi delle funzioni ) come la funzione precedente solo che al posto di passare i tag veri e propri si può passare il nome del tag creato. Questo però aggiungendo prima il tag alla TagTable del buffer. Non ne ho parlato e non ne parlo per confondere le idee, vi basti sapere che la TagTable ( <strong>GtkTextTagTable</strong> ) del buffer la si prende tramite la funzione <em>gtk_text_buffer_get_tag_table ()</em> che riceve come argomento il buffer e ritorna un puntatore a <strong>GtkTextTagTable</strong>. Dopodichè si può aggiungere il tag alla tabella tramite la funzione <em>gtk_text_tag_table_add () </em>che riceve come primo argomento la TagTable e come secondo argomento il tag da inserire.</li>
<li><em>gtk_text_buffer_apply_tag ()</em>: primo argomento il buffer, secondo argomento il tag da applicare e i due parametri successivi sono il <strong>GtkTextIter</strong> iniziale e quello finale che delimitano lo spazio a cui il tag viene applicato.</li>
<li><em>gtk_text_buffer_apply_tag_by_name ()</em>: come la funzione precedente, solo che il secondo parametro al posto di essere il tag vero e proprio sarà il nome del tag, e qui si torna al ragionamento fatto per la funzione <em>gtk_text_buffer_insert_with_tags_by_name ()</em>.</li>
<li><em>gtk_text_buffer_remove_tag ()</em>: Come la funzione <em>gtk_text_buffer_apply_tag ()</em> solo che al posto di applicare il tag passato all&#8217;area compresa tra l&#8217;iter iniziale e quello finale, rimuove eventuali occorrenze dello stesso in quell&#8217;area.</li>
<li><em>gtk_text_buffer_remove_tag_by_name ()</em>: Come la funzione precedente, il tag anche qui c&#8217;è la differenza che viene passato per nome e quindi si ritorna al discorso delle funzioni <em>_by_name</em> precedenti.</li>
<li><em>gtk_text_buffer_remove_all_tags ()</em>: come la funzione <em>gtk_text_buffer_remove_tag () </em>solo che non c&#8217;è l&#8217;argomento per il tag dato che rimuove tutti i tag eventualmente applicati nell&#8217;area compresa tra l&#8217;iter iniziale e quello finale.</li>
</ul>
<p>Ok, abbiam finito con la gestione di una textview, ho tralasciato alcune parti, nel caso però vi servissero fate pure domande nei commenti che risponderò come posso per affrontare quei lati che ho tralasciato.</p>
<p><strong>Fine Diciottesima Puntata</strong><br />
<em>Capite ora perchè me la son presa con calma per trattare i tag? XD va bien, alla prossima!</em></p>
<p><em>Ciauz <img src="http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F21%2F07%2F2009%2Fguida-gtk-a-puntate-xviii-parte%2F&amp;linkname=Guida%20gtk%2B%20a%20puntate%20%28%20XVIII%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/21/07/2009/guida-gtk-a-puntate-xviii-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( XVII parte )</title>
		<link>http://www.hds619.net/blog/07/07/2009/guida-gtk-a-puntate-xvii-parte/</link>
		<comments>http://www.hds619.net/blog/07/07/2009/guida-gtk-a-puntate-xvii-parte/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 14:37:06 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/07/07/2009/guida-gtk-a-puntate-xvii-parte/</guid>
		<description><![CDATA[Ok, continuiamo a parlare di textview occupandoci questa volta del buffer chiamato GtkTextBuffer.
Iniziamo guardando le due azioni principali che di solito si eseguono: ottenere il testo inserito, inserire del nuovo testo ed eliminare parti di testo.
- Ottenere del testo:
In questo caso ci viene in aiuto la funzione gtk_text_buffer_get_text () che richiede il buffer del testo, [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, continuiamo a parlare di textview occupandoci questa volta del buffer chiamato GtkTextBuffer.</p>
<p>Iniziamo guardando le due azioni principali che di solito si eseguono: ottenere il testo inserito, inserire del nuovo testo ed eliminare parti di testo.</p>
<p><strong>- Ottenere del testo:</strong><br />
In questo caso ci viene in aiuto la funzione <em>gtk_text_buffer_get_text ()</em> che richiede il buffer del testo, il punto iniziale, il punto finale e se ottenere anche i &#8220;caratteri invisibili&#8221;  ( sono presenti quando si inserisce un&#8217;immagine o un widget o altre cose all&#8217;interno della textview cose che noi tralasceremo ).<br />
<span id="more-144"></span><br />
Il punto iniziale e il punto finale sono memorizzati in un GtkTextIter che possiamo ottenere ricorrendo alle funzioni sempre del widget GtkTextBuffer relative ad esso ( il primo argomento sarà sempre il nostro buffer ):</p>
<ul>
<li> <em>gtk_text_buffer_get_iter_at_line ()</em>: il secondo argomento dovrà essere o un puntatore a GtkTextIter oppure l&#8217;indirizzo di un GtkTextIter, anche non inizializzato, e come terzo argomento il numero di linea del testo a cui posizionarlo.</li>
<li><em>gtk_text_buffer_get_start_iter ()</em>: secondo argomento un puntatore a GtkTextIter, o come detto prima l&#8217;indirizzo di un GtkTextIter. Dopo questa funzione l&#8217;iter passato sarà posizionato all&#8217;inizio del testo contenuto nel buffer.</li>
<li><em>gtk_text_buffer_get_end_iter ()</em>: come la funzione precedente. Dopo la sua chiamata l&#8217;iter passato sarà posizionato alla fine del testo contenuto nel buffer.</li>
<li><em>gtk_text_buffer_get_bounds ()</em>: riceve due puntatori a GtkTextIter come secondo e terzo parametro. Dopo la sua chiamata il primo GtkTextIter passato sarà posizionato all&#8217;inizio del testo contenuto nel buffer, mentre il secondo alla fine.</li>
</ul>
<p>Quindi per ottenere il testo possiamo scrivere un codice del genere:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p14410');">[<span id="p14410_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p144code10'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p14410"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p144code10"><pre class="c"><span style="color: #993333;">char</span> <span style="color: #339933;">*</span>foo <span style="color: #009900;">&#40;</span>GtkTextBuffer <span style="color: #339933;">*</span>buffer<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 GtkTextIter start, end;
&nbsp;
 gtk_text_buffer_get_bounds <span style="color: #009900;">&#40;</span>buffer, <span style="color: #339933;">&amp;</span>start, <span style="color: #339933;">&amp;</span>end<span style="color: #009900;">&#41;</span>;
 <span style="color: #b1b100;">return</span> gtk_text_buffer_get_text <span style="color: #009900;">&#40;</span>buffer, <span style="color: #339933;">&amp;</span>start, <span style="color: #339933;">&amp;</span>end, <span style="color: #000000; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><strong>- Inserire del testo:</strong></p>
<p>Per inserire un testo sono anche qui presenti diverse funzioni, il primo argomento sarà anche in questo caso il nostro buffer ( GtkTextBuffer * ).</p>
<ul>
<li><em>gtk_text_buffer_insert ()</em>: il secondo argomento sarà il punto ( sempre l&#8217;iter ) in cui inserire il nuovo testo, il terzo argomento sarà per l&#8217;appunto il testo e come ultimo argomento la lunghezza del testo che si può omettere inserendo -1 nel caso la stringa di testo è null-terminated.</li>
<li><em>gtk_text_buffer_insert_at_cursor ()</em>: secondo argomento il testo da inserire nel punto in cui è presente il cursore, terzo argomento la lunghezza del testo o -1 se la si vuol far calcolare alla funzione la lunghezza della stringa ( che deve essere null-terminated ).</li>
<li><em>gtk_text_buffer_set_text ()</em>: i parametri sono identici alla funzione precedente. Questa funzione però imposta il testo dell&#8217;intero buffer con quello passato come parametro, eliminando eventuali testi inseriti.</li>
</ul>
<p><strong>- Eliminare del testo:</strong></p>
<p>Per eliminare del testo abbiamo una sola funzione ( ok, chi conosce le gtk+ sa che è presente anche un&#8217;altra funzione ma io qui tratto quelle principali, se volete dare altri consigli potete farlo nei commenti <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) ovvero gtk_text_buffer_delete ().  Questa funzione come primo parametro riceve sempre il nostro buffer, come secondo e terzo parametro invece riceve rispettivamente il punto iniziale e il punto finale del testo da eliminare. Si possono sempre usare le funzioni descritte prima nel paragrafo &#8220;Ottenere del testo&#8221; riguardo gli iter.</p>
<p>Per operare e modificare maggiormente gli iter esistono comunque le funzioni ad hoc per essi, non mi metto ad elencarle perché sono veramente tante e tutte sullo stesso livello di utilità, quindi vi lascio<a href="http://library.gnome.org/devel/gtk/stable/gtk-GtkTextIter.html" target="_blank"> il link per guardarle dalla documentazione ufficiale</a>.</p>
<p>Passiamo invece ora ai segnali del GtkTextBuffer che sono molto importanti a mio giudizio:</p>
<ul>
<li> &#8221;changed&#8221; &#8211; Viene emesso quando il testo è cambiato</li>
<li> &#8221;insert-text&#8221; &#8211; Viene emesso quando è inserito del testo.</li>
</ul>
<p>Elenco solo questi due perchè con gli altri andiamo a finire su altri argomenti che non voglio toccare ora. Per quanto riguarda il come strutturare le funzioni che vengono collegate a questi segnali andate come consigliato altre volte a guardare nella documentazione ufficiale che ci sono gli esempi di dichiarazione poi se avete domande chiedete pure nei commenti <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Fine Diciassettesima Puntata</strong><br />
<em>I tag sono un argomento relativamente semplice che preferisco affrontare, e quindi sprecare, ancora un&#8217;altra puntata. Non me ne vogliate se me la prendo con questa calma <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p>
<p><em>Ciauz <img src="http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F07%2F07%2F2009%2Fguida-gtk-a-puntate-xvii-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20XVII%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/07/07/2009/guida-gtk-a-puntate-xvii-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( XVI parte )</title>
		<link>http://www.hds619.net/blog/22/06/2009/guida-gtk-a-puntate-xvi-parte/</link>
		<comments>http://www.hds619.net/blog/22/06/2009/guida-gtk-a-puntate-xvi-parte/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 05:28:56 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/22/06/2009/guida-gtk-a-puntate-xvi-parte/</guid>
		<description><![CDATA[20 giorni di silenzio.. son tanti. L&#8217;estate, intesa come periodo di relax, per me deve ancora iniziare purtroppo.
Vabbè, non ho molta voglia di parlare a quest&#8217;ora. Occupiamoci di questa puntata alle Gtk+. Oggi parliamo del widget &#8220;GtkTextView&#8221; ovvero il widget che permette di ottenere dall&#8217;utente interi testi ( diciamo che si può considerare grosso modo [...]]]></description>
			<content:encoded><![CDATA[<p>20 giorni di silenzio.. son tanti. L&#8217;estate, intesa come periodo di relax, per me deve ancora iniziare purtroppo.</p>
<p>Vabbè, non ho molta voglia di parlare a quest&#8217;ora. Occupiamoci di questa puntata alle Gtk+. Oggi parliamo del widget &#8220;GtkTextView&#8221; ovvero il widget che permette di ottenere dall&#8217;utente interi testi ( diciamo che si può considerare grosso modo un GtkEntry multilinea ).</p>
<p align="center"><em><strong>Vista Testuale ( GtkTextView )</strong></em></p>
<p align="left"><img src="http://library.gnome.org/devel/gtk/stable/multiline-text.png" align="right" height="181" width="256" /></p>
<p align="left">Una GtkTextView è il widget che potete vedere nell&#8217;immagine a fianco. Molto utile quando si deve richiedere all&#8217;utente non una stringa ma un intero testo su più linee. La sua creazione è molto semplice e ci dà l&#8217;opportunità di creare anche dei tag, ovvero creare degli effetti al testocome l&#8217;evidenziazione di alcune parole quando si cerca una stringa, delle stringhe sottolineate o in grassetto o in corsivo e così via..</p>
<p align="left">Per completezza bisogna dire che questo widget sostituisce il vecchio GtkText ormai deprecato e ne sconsiglio vivamente l&#8217;utilizzo in quanto è molto, ma molto lento e poco gestibile. Questo nuovo widget è composto da due parti, la parte &#8220;grafica&#8221; chiamata GtkTextView e la parte del buffer del testo preso in input chiamata GtkTextBuffer che è quella che noi utilizzeremo di più per le operazioni &#8220;pratiche&#8221;.</p>
<p align="left">Ma non corriamo troppo, concentriamoci sul widget GtkTextView prima di tutto però premetto che non tratterò tutte le funzioni ma solo quelle principali e basilari, perchè è un tipo di widget che lavora insieme ad altri widget che rendono il tutto molto grande e lungo da affrontare in queste guide a puntate.</p>
<p><span id="more-143"></span></p>
<p align="left">La creazione di una textview, con buffer, può avvenire in questo modo:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p14312');">[<span id="p14312_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p143code12'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p14312"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p143code12"><pre class="c">GtkWidget <span style="color: #339933;">*</span>textview;
GtkTextBuffer <span style="color: #339933;">*</span>buffer;
&nbsp;
textview <span style="color: #339933;">=</span> gtk_text_view_new <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
buffer <span style="color: #339933;">=</span> gtk_text_view_get_buffer <span style="color: #009900;">&#40;</span>GTK_TEXT_VIEW <span style="color: #009900;">&#40;</span>textview<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p align="left">Andiamo a vedere subito gli attributi che possiamo dare a questo widget:</p>
<ul>
<li> Il come e quando andare a capo tramite la funzione<em> gtk_text_view_set_wrap_mode ()</em> ( ricordatevi che il primo argomento in questi casi è sempre il widget a cui applicare l&#8217;effetto, nel nostro caso la textview convertita tramite la macro <strong><em>G</em><em>TK_TEXT_VIEW ()</em></strong> ) , ci sono quattro metodi disponibili:
<ol>
<li>GTK_WRAP_NONE: non va mai a capo a meno che l&#8217;utente non prema invio, o noi inseriamo il carattere \n.</li>
<li>GTK_WRAP_CHAR: va a capo appena il carattere supera la larghezza della textview</li>
<li>GTK_WRAP_WORD: manda a capo l&#8217;ultima parola che non può essere visualizzata nella larghezza della textview.</li>
<li>GTK_WRAP_WORD_CHAR: manda a capo l&#8217;ultima parola che non può essere visualizzata nella larghezza della textview, se possibile, altrimenti manda a capo l&#8217;ultimo carattere non visualizzabile. ( Ciò succede quando il testo è composto da un&#8217;unica parola troppo lunga per l&#8217;intera riga ).</li>
</ol>
<p>Ricordo comunque che l&#8217;&#8221;a capo&#8221; di cui parlo è un &#8220;a capo&#8221; visivo, nel buffer non verrà inserito il &#8216;\n&#8217;.</li>
<li>Se lasciare l&#8217;opportunità all&#8217;utente di inserire del testo tramite la funzione <em>gtk_text_view_set_editable () </em>specificando nel secondo parametro <strong>TRUE</strong> nel caso si volesse far modificare il testo all&#8217;utente o <strong>FALSE</strong> per il contrario. Utile quando si utilizza una GtkTextView solo per riportare dei messaggi remoti ( ad esempio in una finestra di chat ).</li>
<li>Se visualizzare il punto di inserimento ( di solito segnato col trattino lampeggiante ) con la funzione <em>gtk_text_view_set_cursor_visible ()</em>, anche qui <strong>TRUE</strong> nel caso si volesse visualizzare, altrimenti <strong>FALSE</strong>.</li>
<li>Se impostare il cursore nella modalità sovrascrittura ( di solito l&#8217;utente può attivarla o disattivarla premendo Ins ) con la funzione <em>gtk_text_view_set_overwrite ()</em>, sempre il valore booleano come secondo argomento per specificare come impostare il cursore.</li>
<li>Quanto spazio lasciare tra sopra ( above ) o sotto ( below ) alle righe in pixel tramite la funzione <em>gtk_text_view_set_<strong>above</strong>\<strong>below</strong>_lines ()</em>. Come secondo parametro il numero di pixel da lasciare come margine.</li>
<li>Quanto spazio lasciare tra le parole ( ovvero la larghezza in pixel dello spazio ) con la funzione <em>gtk_text_view_set_pixels_inside_wrap ()</em>. Sempre come secondo argomento la misura specificata in pixel.</li>
<li>Il tipo di giustificazione che deve avere il testo con la funzione <em>gtk_text_view_set_justification ()</em> che richiede come secondo argomento uno dei seguenti valori:
<ol>
<li>GTK_JUSTIFY_LEFT: allinea il testo a sinistra.</li>
<li>GTK_JUSTIFY_RIGHT: allinea il testo a destra.</li>
<li>GTK_JUSTIFY_CENTER: allinea il testo al centro.</li>
<li>GTK_JUSTIFY_FILL: il testo viene distribuito in maniera uniforme su tutta la linea.</li>
</ol>
</li>
<li>I pixel di margine da quello destro e\o da quello sinistro con la funzione <em>gtk_text_view_set_<strong>left</strong>\<strong>right</strong>_margin ()</em>. Secondo argomento il numero di pixel di margine.</li>
<li>Se accettare i tab o meno con la funzione <em>gtk_text_view_set_accepts_tab ()</em>. Valore booleano come secondo argomento per decidere l&#8217;azione.</li>
</ul>
<p>Tutte queste funzioni naturalmente hanno la corrispondente che al posto di <strong>_set_</strong> hanno <strong>_get_</strong> per sapere quale valore è in quel momento in uso.</p>
<p>Andiamo a vedere un&#8217;ultima cosa su questo widget, ovvero i segnali principali <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ol>
<li><em>&#8220;backspace&#8221;</em>: quando si inserisce, o l&#8217;utente esegue, un backspace.</li>
<li><em>&#8220;copy clipboard&#8221;</em>,<em> &#8220;cut clipboard&#8221;</em> e <em>&#8220;paste clipboard&#8221;</em>: quando si copia o si taglia qualcosa dal testo della textview e quando si incolla qualcosa.</li>
<li><em>&#8220;move cursor&#8221;</em>: quando il punto di inserimento viene spostato.</li>
<li><em>&#8220;select-all&#8221;</em>: quando si seleziona tutto il testo</li>
<li><em>&#8220;insert-at-cursor&#8221;</em>: quando l&#8217;utente scrive qualcosa.</li>
<li><em>&#8220;toggle-overwrite&#8221;</em>: quando si cambia il cursore dalla modalità di sovrascrittura a quella di inserimento, o viceversa.</li>
</ol>
<p><strong>Fine Sedicesima Puntata</strong><br />
<em>Per il momento mi fermo qua, sia perchè mi son stancato sia perchè vorrei trattare l&#8217;argomento dei tag e del buffer del testo con più calma in una puntata ad hoc.</em></p>
<p><em>Ciauz <img src="http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F22%2F06%2F2009%2Fguida-gtk-a-puntate-xvi-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20XVI%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/22/06/2009/guida-gtk-a-puntate-xvi-parte/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( XV parte )</title>
		<link>http://www.hds619.net/blog/02/06/2009/guida-gtk-a-puntate-xv-parte/</link>
		<comments>http://www.hds619.net/blog/02/06/2009/guida-gtk-a-puntate-xv-parte/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 18:58:59 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/02/06/2009/guida-gtk-a-puntate-xv-parte/</guid>
		<description><![CDATA[Continuiamo a parlare di gtk+, data la richiesta da parte di luky oggi parleremo dell&#8217;input da parte dell&#8217;utente tramite caselle di testo ( Entry → GtkEntry ) e ho inserito anche un po&#8217; di funzioni da conoscere sui widget di cui non avevo parlato.
Iniziamo  

Caselle di testo ( GtkEntry )

Una casella di testo è [...]]]></description>
			<content:encoded><![CDATA[<p>Continuiamo a parlare di gtk+, data la richiesta da parte di <em>luky</em> oggi parleremo dell&#8217;input da parte dell&#8217;utente tramite caselle di testo ( <em>Entry → GtkEntry</em> ) e ho inserito anche un po&#8217; di funzioni da conoscere sui widget di cui non avevo parlato.</p>
<p>Iniziamo <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-140"></span></p>
<p align="center"><em><strong>Caselle di testo ( GtkEntry )</strong></em></p>
<p align="right"><img src="http://www.hds619.net/blog/wp-content/uploads/2009/06/gtkentry.png" alt="gtkentry.png" align="right" /></p>
<p align="justify">Una casella di testo è quella che potete vedere come esempio a lato. La loro funzione è quella di ricevere l&#8217;input da parte dell&#8217;utente. Possono anche essere usate per ricevere password o altri dati da non visualizzare durante la scrittura. In questo caso esse visualizzeranno un &#8220;pallino&#8221; per ogni carattere.</p>
<p align="justify">La loro creazione può avvenire con due funzioni: <em>gtk_entry_new ()</em>, che non riceve parametri e crea una semplice entry senza limitazioni riguardo la lunghezza del testo che è possibile inserire, e <em>gtk_entry_new_with_max_length ()</em>, che riceve come unico parametro la lunghezza massima dei caratteri che l&#8217;utente potrà inserire. In ogni caso si può impostare la lunghezza massima a parte una volta creata con <em>gtk_entry_new ()</em> richiamando la funzione <em>gtk_entry_set_max_length ()</em>.</p>
<p align="justify">Prima di continuare volevo dirvi che questo widget fa parte dei GtkEditable e quindi si possono usare le funzioni di quel tipo per operare con questo. Ad esempio per selezionare il testo si può far così:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p14016');">[<span id="p14016_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p140code16'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p14016"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code" id="p140code16"><pre class="c"> <span style="color: #339933;">#include &lt;gtk/gtk.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc, <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 GtkWidget <span style="color: #339933;">*</span>window, <span style="color: #339933;">*</span>entry;
 <span style="color: #993333;">int</span> position;
&nbsp;
 gtk_init <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>argc, <span style="color: #339933;">&amp;</span>argv<span style="color: #009900;">&#41;</span>;
&nbsp;
 window <span style="color: #339933;">=</span> gtk_window_new <span style="color: #009900;">&#40;</span>GTK_WINDOW_TOPLEVEL<span style="color: #009900;">&#41;</span>;
 gtk_window_set_title <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;Hello Entry&quot;</span><span style="color: #009900;">&#41;</span>;
 g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;delete_event&quot;</span>,
                   G_CALLBACK <span style="color: #009900;">&#40;</span>gtk_main_quit<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 entry <span style="color: #339933;">=</span> gtk_entry_new <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
 gtk_entry_set_text <span style="color: #009900;">&#40;</span>GTK_ENTRY <span style="color: #009900;">&#40;</span>entry<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;Hello Entry World ;)&quot;</span><span style="color: #009900;">&#41;</span>;
 gtk_container_add <span style="color: #009900;">&#40;</span>GTK_CONTAINER <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, entry<span style="color: #009900;">&#41;</span>;
&nbsp;
 gtk_widget_show_all <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>;
 gtk_editable_select_region <span style="color: #009900;">&#40;</span>GTK_EDITABLE <span style="color: #009900;">&#40;</span>entry<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">6</span>, <span style="color: #cc66cc;">11</span><span style="color: #009900;">&#41;</span>;
 gtk_main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p align="justify">O per disabilitare l&#8217;inserimento del testo:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p14017');">[<span id="p14017_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p140code17'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p14017"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code" id="p140code17"><pre class="c"><span style="color: #339933;">#include &lt;gtk/gtk.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc, <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 GtkWidget <span style="color: #339933;">*</span>window, <span style="color: #339933;">*</span>entry;
 <span style="color: #993333;">int</span> position;
&nbsp;
 gtk_init <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>argc, <span style="color: #339933;">&amp;</span>argv<span style="color: #009900;">&#41;</span>;
&nbsp;
 window <span style="color: #339933;">=</span> gtk_window_new <span style="color: #009900;">&#40;</span>GTK_WINDOW_TOPLEVEL<span style="color: #009900;">&#41;</span>;
 gtk_window_set_title <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;Hello Entry&quot;</span><span style="color: #009900;">&#41;</span>;
 g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;delete_event&quot;</span>,
                   G_CALLBACK <span style="color: #009900;">&#40;</span>gtk_main_quit<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 entry <span style="color: #339933;">=</span> gtk_entry_new <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
 gtk_editable_set_editable <span style="color: #009900;">&#40;</span>GTK_EDITABLE <span style="color: #009900;">&#40;</span>entry<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span>;
 gtk_container_add <span style="color: #009900;">&#40;</span>GTK_CONTAINER <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, entry<span style="color: #009900;">&#41;</span>;
&nbsp;
 gtk_widget_show_all <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>;
 gtk_main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p align="justify">Comunque dovevo dire una cosa all&#8217;inizio delle puntate che essendo tutti questi widget possono essere nascosti ( <em>gtk_widget_hide ()</em> ) e mostrati ( <em>gtk_widget_show () </em>o per mostrare anche eventuali sotto elementi del widget <em>gtk_widget_show_all ()</em> ), disabilitati o abilitati ( <em>gtk_widget_set_sensitive ()</em> che accetta come primo argomento il  widget a cui applicare l&#8217;abilitazione o la disabilitazione e come secondo argomento <strong>TRUE</strong> per abilitarlo o <strong>FALSE</strong> per disbailitarlo ), ecc.. tutte le funzioni le trovate come già detto altre volte nelle api delle gtk+.</p>
<p align="justify">Ora ritornando all&#8217;argomento delle GtkEntry vediamo come rendere un testo &#8220;oscurato&#8221; facendo visualizzare i pallini al posto delle scritte e di come inserire una stringa in un punto qualsiasi dell&#8217;entry e dell&#8217;eventuale testo contenuto.</p>
<p align="justify">Per quanto riguarda i pallini si ricorre alla funzione <em>gtk_entry_set_visibility ()</em> che riceve come primo argomento la GtkEntry e come secondo argomento <strong>TRUE</strong> nel caso si voglia visualizzare il testo e <strong>FALSE</strong> nel caso si voglia visualizzare un pallino al posto di ogni carattere.</p>
<p align="justify">Per inserire il testo invece, come dicevo, bisogna ricorrere al tipo GtkEditable e alla funzione <em>gtk_editable_insert_text ()</em>. Mostro prima il codice e poi spiego che facciam prima.</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p14018');">[<span id="p14018_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p140code18'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p14018"><td width="1%" class="line_numbers"><pre>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
</pre></td><td class="code" id="p140code18"><pre class="c"><span style="color: #339933;">#include &lt;gtk/gtk.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc, <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 GtkWidget <span style="color: #339933;">*</span>window, <span style="color: #339933;">*</span>entry;
 <span style="color: #993333;">int</span> position;
&nbsp;
 gtk_init <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>argc, <span style="color: #339933;">&amp;</span>argv<span style="color: #009900;">&#41;</span>;
&nbsp;
 window <span style="color: #339933;">=</span> gtk_window_new <span style="color: #009900;">&#40;</span>GTK_WINDOW_TOPLEVEL<span style="color: #009900;">&#41;</span>;
 gtk_window_set_title <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;Hello Entry&quot;</span><span style="color: #009900;">&#41;</span>;
 g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;delete_event&quot;</span>,
                   G_CALLBACK <span style="color: #009900;">&#40;</span>gtk_main_quit<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 entry <span style="color: #339933;">=</span> gtk_entry_new <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
 gtk_entry_set_text <span style="color: #009900;">&#40;</span>GTK_ENTRY <span style="color: #009900;">&#40;</span>entry<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;Hello World ;)&quot;</span><span style="color: #009900;">&#41;</span>;
 position <span style="color: #339933;">=</span> <span style="color: #cc66cc;">6</span>;
 gtk_editable_insert_text <span style="color: #009900;">&#40;</span>GTK_EDITABLE <span style="color: #009900;">&#40;</span>entry<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;Entry &quot;</span>, <span style="color: #cc66cc;">-1</span>, <span style="color: #339933;">&amp;</span>position<span style="color: #009900;">&#41;</span>;
 <span style="color: #808080; font-style: italic;">/* Visualizzerà alla fine la frase &quot;Hello Entry World ;)&quot; */</span>
 gtk_container_add <span style="color: #009900;">&#40;</span>GTK_CONTAINER <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, entry<span style="color: #009900;">&#41;</span>;
&nbsp;
 gtk_widget_show_all <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>;
 gtk_main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p align="justify">Come si può vedere i parametri della funzione sono in ordine:</p>
<ol>
<li>La entry convertita in GtkEditable</li>
<li>Il testo da inserire</li>
<li>La lunghezza del testo ( o -1 per farlo calcolare alla funzione )</li>
<li>La posizione in cui inserire il nuovo testo</li>
</ol>
<p>Per finire con le entry resta solo da capire come recuperare il testo inserito, come eliminare una parte del testo all&#8217;interno dell&#8217;entry e infine i segnali che possono essere collegati.</p>
<p>Per recuperare il testo si utilizza la funzione <em>gtk_entry_get_text ()</em> che riceve come unico argomento l&#8217;entry da cui prelevare il testo. Restituisce un<em> &#8220;const char *&#8221;</em> ovvero una stringa non modificabile ( che all&#8217;uscita dovrà essere riconvertita tramite cast a <em>&#8220;char *&#8221;</em> per poterla assegnare a qualche variabile ) essa non ha bisogno di essere liberata in quanto è allocata staticamente dalla funzione. Non sarà mai nulla la stringa ritornata infatti per controllare che sia stato inserito qualcosa bisogna vedere se il primo elemento dell&#8217;array di char è uguale a 0 ( o &#8216;\0&#8242; o 0&#215;00 o chiamatelo un po&#8217; come vi pare ).<br />
Per finire in bellezza con le funzioni principali che riguardano il tipo GtkEntry parliamo di come si può eliminare una porzione di testo da quello inserito. E lo si fa con la funzione <em>gtk_editable_delete_text () </em>che riceve come primo argomento la entry convertita a GtkEditable, come secondo argomento la posizione iniziale da cui eliminare il testo e come terzo argomento il punto finale in cui terminare l&#8217;eliminazione.</p>
<p>E andiamo ora a vedere i segnali, faccio la descrizione dei tre principali relativi più che altro al tipo GtkEditable:</p>
<ul>
<li> &#8221;changed&#8221; &#8211; Viene inviato quando il testo all&#8217;interno dell&#8217;entry è cambiato, quindi quando: si inserisce un nuovo carattere, si elimina un carattere o una porzione di testo, si incolla e si taglia qualcosa.. in pratica ogni qualvolta venga cambiato.</li>
<li>&#8220;delete-text&#8221; &#8211; Viene inviato solamente quando si cancella una parte del testo o un carattere.</li>
<li>&#8220;insert-text&#8221; &#8211; Viene inviato solamente quando si inserisce qualcosa nel testo.</li>
</ul>
<p><strong>Fine Quindicesima Puntata</strong><br />
<em>Bene, abbiam finito anche le entry così da poter iniziare a sviluppare i primi programmini grafici che prendono un input dall&#8217;utente. Buona programmazione <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </em></p>
<p><em>Ciauz <img src="http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F02%2F06%2F2009%2Fguida-gtk-a-puntate-xv-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20XV%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/02/06/2009/guida-gtk-a-puntate-xv-parte/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( XIV parte )</title>
		<link>http://www.hds619.net/blog/31/05/2009/guida-gtk-a-puntate-xiv-parte/</link>
		<comments>http://www.hds619.net/blog/31/05/2009/guida-gtk-a-puntate-xiv-parte/#comments</comments>
		<pubDate>Sun, 31 May 2009 14:39:35 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/31/05/2009/guida-gtk-a-puntate-xiv-parte/</guid>
		<description><![CDATA[Come promesso, dopo la fine degli esami, una nuova guida alle Gtk+. In questa puntata affronteremo due argomenti differenti il primo riguardante la visualizzazione di un&#8217;immagine all&#8217;interno di un&#8217;applicazione in gtk+, il secondo come creare una barra di stato ( quella barra piccola che si vede nella maggior parte delle applicazioni, con a sinistra un [...]]]></description>
			<content:encoded><![CDATA[<p>Come promesso, dopo la fine degli esami, una nuova guida alle Gtk+. In questa puntata affronteremo due argomenti differenti il primo riguardante la visualizzazione di un&#8217;immagine all&#8217;interno di un&#8217;applicazione in gtk+, il secondo come creare una barra di stato ( quella barra piccola che si vede nella maggior parte delle applicazioni, con a sinistra un messaggio e a destra il triangolino per ridimensionare la finestra.</p>
<p><span id="more-137"></span></p>
<p align="center"><em><strong>GtkImage &#8211; Immagini in Gtk+</strong></em></p>
<p align="justify">Le funzioni per il caricamento di un&#8217;immagine in un programma con le gtk+, uniscono ( o richiedono ) operazioni con la libreria Gdk e GdkPixbuf.</p>
<p align="justify">Come per tutte le altre cose, io mi concentro unicamente sulle funzioni principali, tralasciando quelle specifiche per casi particolari, quindi iniziamo a vedere come caricare un&#8217;immagine da file e da stock. Per il primo c&#8217;è una funzione che fa tutto: <em>gtk_image_new_from_file () </em>che riceve come argomento il nome del file\immagine e ritorna, in tipo GtkWidget *, la nostra immagine se il caricamento è avvenuto con successo, altrimenti <a href="http://library.gnome.org/devel/gtk/stable/gtk-Stock-Items.html#GTK-STOCK-MISSING-IMAGE--CAPS">questa stock</a>. Proprio per il fatto che questa funzione non ritorni mai NULL e non dia informazioni sul tipo di errore quando non è possibile caricare il file\immagine specificato si può ricorrere ad un altra funzione che esegue esattamente la stessa cosa ma che allunga, anche se di poco, il giro da fare per visualizzare l&#8217;immagine finale.</p>
<p align="justify">La funzione è <em>gdk_pixbuf_new_from_file ()</em> che riceve come primo argomento sempre il nome del file\immagine da caricare, e come secondo  argomento l&#8217;indirizzo di una variabile GError *, che verrà impostata nel caso la funzione ritorni NULL ( ovvero nel caso sia occorso un qualche tipo di errore ). Questa funzione però ritorna un GdkPixbuf * che noi possiamo tranquillamente convertire nel nostro GtkWidget * da visualizzare tramite la funzione<em> gtk_image_new_from_pixbuf ()</em>. Se non vi è chiaro ancora questo metodo un pochino più articolato faccio un codice di esempio:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p13721');">[<span id="p13721_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code21'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p13721"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p137code21"><pre class="c">GtkWidget <span style="color: #339933;">*</span>image;
GdkPixbuf <span style="color: #339933;">*</span>pixbuf;
GError <span style="color: #339933;">*</span>error <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">NULL</span>;
&nbsp;
pixbuf <span style="color: #339933;">=</span> gdk_pixbuf_new_from_file <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;miofile.jpeg&quot;</span>, <span style="color: #339933;">&amp;</span>error<span style="color: #009900;">&#41;</span>;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>pixbuf <span style="color: #009900;">&#41;</span>
     g_critical <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;(%d) %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, error<span style="color: #339933;">-</span>&gt;code, error<span style="color: #339933;">-</span>&gt;message<span style="color: #009900;">&#41;</span>;
image <span style="color: #339933;">=</span> gtk_image_new_from_pixbuf <span style="color: #009900;">&#40;</span>pixbuf<span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p align="justify">Per quanto riguarda il caricamento di un&#8217;immagine da stock il procedimento è semplicissimo, basta passare il nome della stock a <em>gtk_image_new_from_stock ()</em>  e poi specificare<a href="http://library.gnome.org/devel/gtk/stable/gtk-Themeable-Stock-Images.html#GtkIconSize"> la grandezza della stock </a>dipendentemente dal contesto in cui la si vuole utilizzare. Ritorna il GtkWidget * con l&#8217;immagine STOCK pronta ad essere visualizzata.</p>
<p align="center"><em><strong>GtkStatusbar &#8211; Barra di stato</strong></em></p>
<p align="left">Per chi non avesse ancora capito quale è in un applicazione gtk+ la barra di stato posto un immagine molto autoesplicativa:</p>
<p style="text-align: center"><img src="http://www.hds619.net/blog/wp-content/uploads/2009/05/statusbar-jeex.png" alt="statusbar-jeex.png" /></p>
<p style="text-align: justify" align="center"> La creazione è molto semplice, il widget è ottenibile richiamando unicamente la funzione <em>gtk_statusbar_new ()</em>  che non riceve argomenti. Di questo tipo però ci sarebbe da parlare più teoricamente che praticamente. Il suo funzionamento nella visualizzazione dei messaggi avviene tramite stack LIFO su canali sperati. Ovvero per i messaggi son presenti azioni di <em>push</em> e <em>pop</em>, e possono essere inviati su <em>&#8220;context id&#8221; </em>( canali ) differenti. Se si vuole utilizzare in modo semplicissimo questa barra di stato è bene utilizzare il canale 0 ed eseguire (<em> </em>dopo il primo <em>push </em>) sempre un <em>pop</em> prima di nuovo <em>push</em> così da non lasciare in memoria vecchi messaggi che non servono più.</p>
<p style="text-align: justify" align="center">Codice di esempio:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p13722');">[<span id="p13722_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code22'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p13722"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p137code22"><pre class="c">GtkWidget <span style="color: #339933;">*</span>statusbar;
&nbsp;
statusbar <span style="color: #339933;">=</span> gtk_statusbar_new <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
gtk_statusbar_push <span style="color: #009900;">&#40;</span>GTK_STATUSBAR <span style="color: #009900;">&#40;</span>statusbar<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #ff0000;">&quot;Starting GtkStatusbar :)&quot;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">/* successivamente per non lasciare in buffer nulla */</span>
gtk_statusbar_pop <span style="color: #009900;">&#40;</span>GTK_STATUSBAR <span style="color: #009900;">&#40;</span>statusbar<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>;
gtk_statusbar_push <span style="color: #009900;">&#40;</span>GTK_STATUSBAR <span style="color: #009900;">&#40;</span>statusbar<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #ff0000;">&quot;Pop &amp; Push!&quot;</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p style="text-align: justify" align="center">Per finire con la status bar, il triangolino per ridimensionare si può &#8220;eliminare&#8221; tramite la funzione<em> gtk_statusbar_set_has_resize_grip () </em>che riceve come primo argomento la statusbar e come secondo un valore booleano impostato a TRUE se si vuole mantenere il triangolino per il ridimensionamento altrimenti FALSE.</p>
<p><strong>Fine Quattordicesima Puntata</strong><br />
<em>Ok, abbiamo parlato un po&#8217; e ci voleva dopo tanti giorni di silenzio. Spero che sia tutto chiaro, sono stato molto di più sulla teoria questa volta, alla fin fine star lì a descrivere ogni singola funzione non ha molto senso se non si conosce prima su cosa si sta operando.</em></p>
<p><em>Ciauz <img src="http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F31%2F05%2F2009%2Fguida-gtk-a-puntate-xiv-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20XIV%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/31/05/2009/guida-gtk-a-puntate-xiv-parte/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( XIII parte )</title>
		<link>http://www.hds619.net/blog/12/05/2009/guida-gtk-a-puntate-xiii-parte/</link>
		<comments>http://www.hds619.net/blog/12/05/2009/guida-gtk-a-puntate-xiii-parte/#comments</comments>
		<pubDate>Tue, 12 May 2009 18:07:02 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/12/05/2009/guida-gtk-a-puntate-xiii-parte/</guid>
		<description><![CDATA[Dopo un lungo momento di silenzio a causa della scrittura della documentazione per Imel, continuiamo la nostra guida alle Gtk+. In questa puntata vedremo i label, loro uso e &#8220;consumo&#8221; 

Del testo con delle Gtk+.. ( GtkLabel )
Un label altro non è che un testo, o una stringa, che si può visualizzare all&#8217;interno di un&#8217;interfaccia [...]]]></description>
			<content:encoded><![CDATA[<p>Dopo un lungo momento di silenzio a causa della scrittura della documentazione per Imel, continuiamo la nostra guida alle Gtk+. In questa puntata vedremo i label, loro uso e &#8220;consumo&#8221; <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<span id="more-129"></span></p>
<p align="center"><em><strong>Del testo con delle Gtk+.. ( GtkLabel )</strong></em></p>
<p align="left">Un label altro non è che un testo, o una stringa, che si può visualizzare all&#8217;interno di un&#8217;interfaccia grafica realizzata con le Gtk+.</p>
<p align="left">Un label minimale, ovvero del testo senza alcun effetto è semplicissimo da creare:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p12925');">[<span id="p12925_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p129code25'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p12925"><td width="1%" class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p129code25"><pre class="c">GtkWidget <span style="color: #339933;">*</span>label;
&nbsp;
label <span style="color: #339933;">=</span> gtk_label_new <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Salve, sono un label!&quot;</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p align="left">Il codice mi sembra che sia abbastanza esplicito e non abbia bisogno di commenti, andiamo invece ora a vedere come si può creare un label più ricercato. Ovvero con un colore diverso e in grassetto.</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p12926');">[<span id="p12926_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p129code26'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p12926"><td width="1%" class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p129code26"><pre class="c">GtkWidget <span style="color: #339933;">*</span>label;
&nbsp;
label <span style="color: #339933;">=</span> gtk_label_new <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
gtk_label_set_markup <span style="color: #009900;">&#40;</span>GTK_LABEL <span style="color: #009900;">&#40;</span>label<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;&lt;span color=<span style="color: #000099; font-weight: bold;">\&quot;</span>#990000<span style="color: #000099; font-weight: bold;">\&quot;</span> weight=<span style="color: #000099; font-weight: bold;">\&quot;</span>bold<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;Ciao, io sono un label con markup!&lt;/span&gt;&quot;</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p align="left">Dunque il markup che abbiamo usato è molto simile all&#8217;html, ed è il così chiamato &#8220;Pango Text Attribute Markup Language&#8221; i cui tag possono essere trovati in <a href="http://library.gnome.org/devel/pango/stable/PangoMarkupFormat.html">questa pagina</a>.</p>
<p align="left">&nbsp;</p>
<p>Passiamo ora un attimo agli attributi che può avere un label:</p>
<ul>
<li><strong>Selezionabile</strong>: Un label può essere, o meno, selezionabile dall&#8217;utente. Per stabilire esplicitamente questa opzione si può ricorrere alla funzione<em> gtk_label_set_selectable</em> che riceve come primo argomento il label a cui impostare l&#8217;opzione, e come secondo TRUE o FALSE dipendentemente dall&#8217;attributo che gli si vuol dare.</li>
<li><strong>Giustificabile</strong>:Il testo di un label, se composto da più righe, può essere posto tutto a sinistra ( <em><strong>GTK_JUSTIFY_LEFT</strong></em> ), tutto al centro ( <em><strong>GTK_JUSTIFY_CENTE</strong></em>R ), tutto a destra ( <em><strong>GTK_JUSTIFY_RIGHT</strong></em> ) o distribuito per tutta la linea ( <em><strong>GTK_JUSTIFY_FILL</strong></em> ).<br />
Quest&#8217;operazione può venire eseguita tramite la funzione <em>gtk_label_set_justify</em> che riceve come primo parametro il label a cui eseguire l&#8217;operazione e come secondo il tipo di giustificazione da dargli.</li>
<li><strong>Compresso</strong>: Ovvero, se il label ha una lunghezza superiore a quella del contenitore viene compattato aggiungendo tre puntini nel punto in cui è stato compresso. Questo non va a influire su quando il label viene copiato in quanto nella clipboard verrà inserito tutto il testo del label e non la sua versione compressa. La funzione per far ciò è <em>gtk_label_set_ellipsize</em> che riceve come primo argomento il label a cui applicare l&#8217;operazione e come secondo argomento il punto in cui fare la compressione che può avvenire: all&#8217;inizio ( <em><strong>PANGO_ELLIPSIZE_START</strong></em> ), al centro ( <em><strong>PANGO_ELLIPSIZE_MIDDLE</strong></em> ) e alla fine (<em><strong> PANGO_ELLIPSIZE_END</strong></em> ).</li>
<li><strong>Spezzato</strong>: Se una riga di un label supera la lunghezza del contenitore può venire spezzato mandando a capo le parole, o i caratteri, che superano la lunghezza. La funzione in questo caso è <em>gtk_label_set_line_wrap_mode</em> per impostare il tipo di &#8220;spezzamento&#8221; e <em>gtk_label_set_line_wrap</em> per abilitarlo. Tutte e due le funzioni ricevono come primo parametro il label a cui applicare l&#8217;effetto, come secondo parametro invece la prima può ricevere i seguenti parametri: <em><strong>PANGO_WRAP_WORD</strong></em> ( per mandare a capo le parole in eccesso ), <em><strong>PANGO_WRAP_CHAR</strong></em> ( per mandare a capo i caratteri in eccesso ), <em><strong>PANGO_WRAP_WORD_CHAR</strong></em> ( per mandare a capo le parole in eccesso dove possibile, se non è possibile perchè una sola parola è troppo lunga manda a capo i caratteri in eccesso ). La seconda funzione riceve invece come secondo parametro TRUE se si vuol utilizzare il <em>WRAP</em> del testo, altrimenti FALSE.</li>
<li><strong>Ruotato</strong>: Si può anche dare un&#8217;inclinazione al label da 0° a 90°  tramite la funzione <em>gtk_label_set_angle</em>, che riceve come primo argomento il label a cui applicare la rotazione e come secondo argomento l&#8217;angolo di rotazione in double.</li>
</ul>
<p>Esistono anche dei segnali collegabili ad un label e sono i seguenti<em>,</em> il più utile tra questi è<em> &#8220;copy-clipboard&#8221;</em> che viene inviato quando il testo di un label viene copiato ( associato di solito alla scorciatoia CTRL + C ).</p>
<p><strong>Fine Tredicesima Puntata</strong><br />
<em>Anche questa è fatta, a questo punto penso che ci siano le basi per iniziare a creare delle interfacce grafiche minimali per i vostri programmi. Alla prossima.</em></p>
<p><em>Ciauz <img src="http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F12%2F05%2F2009%2Fguida-gtk-a-puntate-xiii-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20XIII%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/12/05/2009/guida-gtk-a-puntate-xiii-parte/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( XII parte )</title>
		<link>http://www.hds619.net/blog/01/05/2009/guida-gtk-a-puntate-xii-parte/</link>
		<comments>http://www.hds619.net/blog/01/05/2009/guida-gtk-a-puntate-xii-parte/#comments</comments>
		<pubDate>Fri, 01 May 2009 11:32:16 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/01/05/2009/guida-gtk-a-puntate-xii-parte/</guid>
		<description><![CDATA[Ok, le puntate continuano e gli argomenti avanzano. Adesso siamo arrivati all&#8217;argomento pulsanti ( o bottoni che dir si voglia ) molto utili e quasi indispensabili per un&#8217;applicazione in Gtk+.
Questo argomento non è complicatissimo e conto di finire tutti i tipi di pulsanti esistenti in questa puntata. Quindi.. Relax  

 Pulsanti Classici ( Button [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, le puntate continuano e gli argomenti avanzano. Adesso siamo arrivati all&#8217;argomento pulsanti ( o bottoni che dir si voglia ) molto utili e quasi indispensabili per un&#8217;applicazione in Gtk+.</p>
<p>Questo argomento non è complicatissimo e conto di finire tutti i tipi di pulsanti esistenti in questa puntata. Quindi.. Relax <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-123"></span></p>
<p align="center"> <strong>Pulsanti Classici ( Button )<br />
</strong></p>
<p align="left">Iniziamo con i pulsanti classici, ovvero i più comuni che possono contenere solo del testo o anche un&#8217;immagine al loro interno.</p>
<p align="left">Si possono creare con tre funzioni:</p>
<ul>
<li><em>gtk_button_new</em> ()  → Crea un pulsante vuoto, senza testo e senza immagine così da poter settare le varie caratteristiche in seguito.</li>
<li><em>gtk_button_new_with_label</em> () → Crea un pulsante con del testo, si può anche qui naturalmente aggiungere un&#8217;immagine in seguito.</li>
<li><em>gtk_button_new_from_stock</em> () → Crea un pulsante con immagine e testo predefinito di una &#8220;STOCK&#8221;. Una stock è un elemento interno alle Gtk+ che comprende un&#8217;icona e un testo standard, il testo delle stock ha il vantaggio di essere tradotto automaticamente nella lingua del sistema. Le Stock esistenti ed utilizzabili si possono esaminare in <a href="http://library.gnome.org/devel/gtk/stable/gtk-Stock-Items.html#GTK-STOCK-ABOUT--CAPS">questa pagina</a>.</li>
</ul>
<p>Vediamo un esempio di pulsante creato <em>&#8220;from stock&#8221;</em>:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p12329');">[<span id="p12329_symbol">+</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p123code29'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr style="display:none" id="p12329"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code" id="p123code29"><pre class="c"><span style="color: #339933;">#include &lt;gtk/gtk.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc, <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 GtkWidget <span style="color: #339933;">*</span>window, <span style="color: #339933;">*</span>button;
&nbsp;
 gtk_init <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>argc, <span style="color: #339933;">&amp;</span>argv<span style="color: #009900;">&#41;</span>;
&nbsp;
 window <span style="color: #339933;">=</span> gtk_window_new <span style="color: #009900;">&#40;</span>GTK_WINDOW_TOPLEVEL<span style="color: #009900;">&#41;</span>;
 gtk_window_set_title <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;Stock Button&quot;</span><span style="color: #009900;">&#41;</span>;
 gtk_window_set_default_size <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">250</span>, <span style="color: #cc66cc;">45</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 button <span style="color: #339933;">=</span> gtk_button_new_from_stock <span style="color: #009900;">&#40;</span>GTK_STOCK_CLOSE<span style="color: #009900;">&#41;</span>;
 gtk_button_set_relief <span style="color: #009900;">&#40;</span>GTK_BUTTON <span style="color: #009900;">&#40;</span>button<span style="color: #009900;">&#41;</span>, GTK_RELIEF_NORMAL<span style="color: #009900;">&#41;</span>;
 gtk_container_add <span style="color: #009900;">&#40;</span>GTK_CONTAINER <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, button<span style="color: #009900;">&#41;</span>;
&nbsp;
 gtk_widget_show_all <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>;
&nbsp;
 gtk_main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><img src="http://www.hds619.net/blog/wp-content/uploads/2009/05/schermata-stock-button.png" alt="schermata-stock-button.png" /></p>
<p>Come si può vedere però è presente il bordo del pulsante, cioè l&#8217;effetto rilievo che lo fa risultare come parte esterna al resto dell&#8217;applicazione ( prendete ad esempio la barra a comparsa che esce quando si cerca una parola in firefox, il pulsante per chiuderla non è in rilievo ).. per fare in modo che non sia in rilievo o per cambiare il tipo di rilievo si utilizza l&#8217;attributo &#8220;relief&#8221; tramite la funzione <em>gtk_button_set_relief</em>.</p>
<p>I segnali collegabili a questo tipo di pulsanti, che è il padre di tutti gli altri che tra poco vedremo, sono:</p>
<ul>
<li><em>&#8220;activated&#8221;</em> &#8211; viene emesso quando il pulsante è premuto o rilasciato.</li>
<li><em>&#8220;clicked&#8221;</em> &#8211; viene emesso quando il pulsante è premuto e rilasciato</li>
<li><em>&#8220;pressed&#8221;</em> &#8211; viene emesso quando il pulsante è premuto</li>
<li><em>&#8220;clicked&#8221;</em> &#8211; viene emesso quando il pulsante è rilasciato</li>
</ul>
<p align="center"><strong>Pulsanti &#8220;Toggled&#8221; ( ToggledButton )<br />
</strong></p>
<p align="justify"> I pulsanti di tipo &#8220;toggled&#8221; sono quei pulsanti che una volta premuti rimangono premuti e non ritornano &#8220;su&#8221; finchè non vengono ripremuti. Non si possono creare <em>&#8220;from stock&#8221;</em> ma solo con testo o senza niente.</p>
<p align="justify">Per impostare il loro stato manualmente su &#8220;premuto\giù&#8221; o &#8220;rilasciato\su&#8221;  si può usare la funzione <em>gtk_toggle_button_set_active</em>.</p>
<p align="justify">Il segnale aggiuntivo che ha questo tipo rispetto al precedente è quello <em>&#8220;toggled&#8221;</em>  che viene emesso quando il pulsante cambia stato.</p>
<p align="center"><strong>Pulsanti di Controllo ( CheckButton )</strong></p>
<p align="justify"><img src="http://library.gnome.org/devel/gtk/stable/check-button.png" align="right" width="256" height="91" /> I &#8220;Pulsanti di Controllo&#8221; ( che vi prego di farmi chiamare col loro nome originario &#8220;CheckButton&#8221; perché questa italianizzazione non mi piace per niente ) sono molto importanti specialmente nelle &#8220;preferenze&#8221; di un programma.</p>
<p align="justify">Sono una sottocategoria dei Toggled  e ne ereditano tutte le caratteristiche. Quindi non possono essere creati <em>&#8220;from stock&#8221;</em> ed hanno anch&#8217;essi il segnale aggiuntivo <em>&#8220;toggled&#8221;</em>.</p>
<p align="center"><strong>Pulsanti per la selezione di un colore ( ColorButton )</strong></p>
<p align="justify"><img src="http://library.gnome.org/devel/gtk/stable/color-button.png" align="left" width="256" height="91" /> Non è un pulsante comunissimo lo devo ammettere, ma comunque può tornare utile. Può essere creato vuoto, così da settare i vari attributi successivamente, oppure con un colore predefinito ( se non lo si setta viene messo il nero ) a scelta. Per farlo bisogna utilizzare un GdkColor in questo modo:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p12330');">[<span id="p12330_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p123code30'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p12330"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p123code30"><pre class="c">&nbsp;
GtkWidget <span style="color: #339933;">*</span>color_button;
GdkColor color;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> gdk_color_parse <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;#990000&quot;</span>, <span style="color: #339933;">&amp;</span>color<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
     color_button <span style="color: #339933;">=</span> gtk_color_button_new_with_color <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>color<span style="color: #009900;">&#41;</span>;
<span style="color: #b1b100;">else</span> color_button <span style="color: #339933;">=</span> gtk_color_button_new <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p align="justify">Per poi ottenere il colore si può utilizzare la funzione <a href="http://library.gnome.org/devel/gtk/stable/GtkColorButton.html#gtk-color-button-get-color" class="link" title="gtk_color_button_get_color ()">gtk_color_button_get_color</a>.</p>
<p align="center"> <strong>Pulsanti per la selezione di un font ( FontButton )</strong></p>
<p align="justify">Questo pulsante è ancor meno comune del p<img src="http://library.gnome.org/devel/gtk/stable/font-button.png" align="right" width="256" height="91" />recedente, serve per far selezionare un font all&#8217;utente.. apre una finestra ( che in futuro ritroveremo ) dove selezionare il font preferito. La sua creazione può avvenire tramite<em> gtk_font_button_new_with_font</em> che ha come parametro il nome del font da inserire come predefinito, ad esempio con &#8220;Monospace 10&#8243; avremo selezionato il font monospace a dimensione 10.</p>
<p align="center"><strong>Pulsanti per link ( LinkButton )</strong></p>
<p align="left">Questi pulsanti si ritrovano spesso nei dialoghi di informazione per creare un collegamento al sito o alla pagina dedicata al programma. La parte più difficile nella gestione di questi pulsanti è l&#8217;apertura del link in questione, ma potete prendere spunto da <a href="http://www.hds619.net/view_source.php?filename=%27source/Aprire_un_sito_web_(_Gtk_).c%27">questa funzione</a> che avevo fatto per questi casi.</p>
<p align="center"><strong>Pulsanti per il &#8220;volume&#8221; ( Volume Button )</strong></p>
<p align="left"><img src="http://library.gnome.org/devel/gtk/stable/volumebutton.png" align="left" width="61" height="192" />Concludiamo questo tour tra i pulsanti con quelli per il &#8220;volume&#8221; ( anche se possono essere usati in molti altri casi ). Questo tipo di pulsanti comprende una sola funzione che consente la loro creazione, ovvero: <em>gtk_volume_button_new</em>.</p>
<p align="left">Ciò avviene perchè questo tipo è un sottotipo del tipo &#8220;ScaleButton&#8221;, quindi le funzioni riferite al gruppo padre devono venir usate per operare con questo figlio.</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;</p>
<p><strong>Fine Dodicesima Puntata</strong><br />
<em>Mi dispiace un po&#8217; aver già finito, ci ho messo tanto a fare le finestre, i contenitori e tutto il resto del mondo e per i pulsanti che ritengo più interessanti c&#8217;è poco da dire, vabbè alla prossima <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</em></p>
<p><em>Ciauz <img src="http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F01%2F05%2F2009%2Fguida-gtk-a-puntate-xii-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20XII%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/01/05/2009/guida-gtk-a-puntate-xii-parte/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( XI parte )</title>
		<link>http://www.hds619.net/blog/22/04/2009/guida-gtk-a-puntate-xi-parte/</link>
		<comments>http://www.hds619.net/blog/22/04/2009/guida-gtk-a-puntate-xi-parte/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 01:56:53 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/22/04/2009/guida-gtk-a-puntate-xi-parte/</guid>
		<description><![CDATA[Bien, questa è la puntata in cui concludiamo con i contenitori.. rileggendo la vecchia puntata noto che abbiamo già fatto la parte più complicata, ovvero tabelle e box.
Questo terzo capitolo sui contenitori è l&#8217;ultima tappa dopodichè passaremo come promesso ai pulsanti. Preparatevi che iniziamo!

Frame
 Un frame è un&#8217;area delimitata da un bordo e con un titolo, [...]]]></description>
			<content:encoded><![CDATA[<p>Bien, questa è la puntata in cui concludiamo con i contenitori.. rileggendo la vecchia puntata noto che abbiamo già fatto la parte più complicata, ovvero tabelle e box.</p>
<p>Questo terzo capitolo sui contenitori è l&#8217;ultima tappa dopodichè passaremo come promesso ai pulsanti. Preparatevi che iniziamo!</p>
<p><span id="more-120"></span></p>
<p align="center"><em><strong>Frame</strong></em></p>
<p align="left"> Un frame è un&#8217;area delimitata da un bordo e con un titolo,<img src="http://library.gnome.org/devel/gtk/stable/frame.png" alt="frame" align="right" width="256" height="181" /> come si può benissimo vedere dall&#8217;immagine a lato.</p>
<p align="left"> La sua creazione è molto semplice:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p12032');">[<span id="p12032_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p120code32'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p12032"><td width="1%" class="line_numbers"><pre>1
</pre></td><td class="code" id="p120code32"><pre class="c"> gtk_frame_new <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Titolo Frame&quot;</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p style="text-align: justify">Il parametro, che rappresenta il testo che verrà visualizzato in alto, può anche essere omesso o risettato successivamente con la funzione <em>gtk_frame_set_label. </em>Non esistono altre operazioni con i frame importanti se non quella che permette di modificare lo stile del bordo che può essere:</p>
<ul>
<li><strong>GTK_SHADOW_NONE</strong> &#8211; nessun bordo</li>
<li><strong>GTK_SHADOW_IN</strong> &#8211; il bordo è incassato all&#8217;interno</li>
<li><strong>GTK_SHADOW_OUT</strong> &#8211; il bordo è incassato all&#8217;esterno</li>
<li><strong>GTK_SHADOW_ETCHED_IN</strong> &#8211; il bordo è incassato verso l&#8217;interno con un aspetto 3D</li>
<li><strong>GTK_SHADOW_ETCHED_OUT</strong> &#8211; il bordo è incassato verso l&#8217;esterno con un aspetto 3D</li>
</ul>
<p>Si lo so, le descrizioni non sono molto chiare degli ultrimi 4 tipi.. ho fatto un programma di test per vedere graficamente cosa cambiava e non vedo molte differenze. Vi lascio comunque lo screen:</p>
<p><a href="http://www.hds619.net/blog/wp-content/uploads/2009/04/frame_shadow_type.png" title="frame_shadow_type.png"></a></p>
<p style="text-align: center"><a href="http://www.hds619.net/blog/wp-content/uploads/2009/04/frame_shadow_type.png" title="frame_shadow_type.png"><img src="http://www.hds619.net/blog/wp-content/uploads/2009/04/frame_shadow_type.png" alt="frame_shadow_type.png" /></a></p>
<p style="text-align: center"><em><strong>Pannelli</strong></em></p>
<p style="text-align: justify">I pannelli detti <em>GtkPaned</em> sono dei widget che permettono il ridimensionamento delle due &#8220;aree&#8221; ( o pannelli ) che ha al suo interno da parte dell&#8217;utente.</p>
<p style="text-align: center"><img src="http://library.gnome.org/devel/gtk/stable/panes.png" alt="GtkPaned" width="256" height="181" /></p>
<p style="text-align: justify" align="left">Possono essere di due tipi, intuibili dall&#8217;immagine superiore, ovvero: Orizzontali e verticali. La loro creazione avviene quindi con <em>gtk_hpaned_new</em> o <em>gtk_vpaned_new</em>. Queste due funzioni non ricevono argomenti e restituiscono il nostro GtkPaned.</p>
<p style="text-align: justify" align="left"> Ha solo due funzioni che ci servono e useremo quando opereremo con questo tipo: gtk_paned_add1 e gtk_paned_add2. Tutte e due ricevono come primo argomento il nostro GtkPaned e come secondo argomento il widget da inserirci ( gtk_paned_add1 riguarda la posizione a sinistra o in alto, gtk_paned_add2 quella a destra o in basso ).</p>
<p style="text-align: justify" align="left">&nbsp;</p>
<p><strong>Fine Undecesima Puntata</strong><br />
<em>Sono andato abbastanza veloce eh? Beh non c&#8217;era molto da dire su questi due contenitori.. per problemi su questo argomento, come su qualunque altro nel corso delle puntate chiedete pure nei commenti.</em></p>
<p><em>Ciauz <img src="http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F22%2F04%2F2009%2Fguida-gtk-a-puntate-xi-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20XI%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/22/04/2009/guida-gtk-a-puntate-xi-parte/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( X parte )</title>
		<link>http://www.hds619.net/blog/10/04/2009/guida-gtk-a-puntate-x-parte/</link>
		<comments>http://www.hds619.net/blog/10/04/2009/guida-gtk-a-puntate-x-parte/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 23:10:34 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/10/04/2009/guida-gtk-a-puntate-x-parte/</guid>
		<description><![CDATA[Eccoci ritrovati alla decima puntata, e manca ancora tanto tanto.. ma pian pianino ce la faremo. Come avevo promesso in questa puntata ci occupiamo delle tabelle.
Aprite il vostro editor e compilatore, preparate il vostro quadernetto con gli appunti che iniziamo!
Tabelle
 Una tabella penso sappiate tutti cosa sia, un riquadro composto da un tot di righe [...]]]></description>
			<content:encoded><![CDATA[<p>Eccoci ritrovati alla decima puntata, e manca ancora tanto tanto.. ma pian pianino ce la faremo. Come avevo promesso in questa puntata ci occupiamo delle tabelle.</p>
<p>Aprite il vostro editor e compilatore, preparate il vostro quadernetto con gli appunti che iniziamo!</p>
<p align="center"><span id="more-114"></span><em><strong>Tabelle</strong></em></p>
<p align="justify"> Una tabella penso sappiate tutti cosa sia, un riquadro composto da un tot di righe e un tot di colonne. Questo tipo di contenitore è molto comodo nel caso si debbano allineare molti widget senza stare ad impazzire con 1000 box, ad esempio se si sta scrivendo una calcolatrice.</p>
<p align="justify">Bene l&#8217;utilizzo è molto semplice, non vi mostro la funzione &#8220;easy&#8221; per aggiungere i vari widget perché la maggiorparte delle volte crea solo obbrobri.. vi mostro invece la procedura con la funzione relativamente difficile che vi consiglio di usarel&#8217;80% delle volte.</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p11436');">[<span id="p11436_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p114code36'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p11436"><td width="1%" class="line_numbers"><pre>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
</pre></td><td class="code" id="p114code36"><pre class="c"><span style="color: #339933;">#include &lt;gtk/gtk.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc, <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 GtkWidget <span style="color: #339933;">*</span>window, <span style="color: #339933;">*</span>table, <span style="color: #339933;">*</span>button;
 <span style="color: #993333;">int</span> rows, cols;
&nbsp;
 gtk_init <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>argc, <span style="color: #339933;">&amp;</span>argv<span style="color: #009900;">&#41;</span>;
&nbsp;
 window <span style="color: #339933;">=</span> gtk_window_new <span style="color: #009900;">&#40;</span>GTK_WINDOW_TOPLEVEL<span style="color: #009900;">&#41;</span>;
 gtk_window_set_title <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;Ciao Tabelle!&quot;</span><span style="color: #009900;">&#41;</span>;
 gtk_container_set_border_width <span style="color: #009900;">&#40;</span>GTK_CONTAINER <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 table <span style="color: #339933;">=</span> gtk_table_new <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span>, <span style="color: #cc66cc;">3</span>, <span style="color: #000000; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span>;
 gtk_container_add <span style="color: #009900;">&#40;</span>GTK_CONTAINER <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, table<span style="color: #009900;">&#41;</span>;
&nbsp;
 <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span> rows <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span>; rows &lt; <span style="color: #cc66cc;">4</span>; rows<span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
       <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span> cols <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span>; cols &lt; <span style="color: #cc66cc;">3</span>; cols<span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
             button <span style="color: #339933;">=</span> gtk_button_new_from_stock <span style="color: #009900;">&#40;</span>GTK_STOCK_CLOSE<span style="color: #009900;">&#41;</span>;
             gtk_table_attach <span style="color: #009900;">&#40;</span>GTK_TABLE <span style="color: #009900;">&#40;</span>table<span style="color: #009900;">&#41;</span>, button, cols, cols <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>,
                               rows, rows <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>, GTK_FILL | GTK_EXPAND,
                               GTK_FILL | GTK_EXPAND, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>;
             g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>button<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;clicked&quot;</span>,
                               G_CALLBACK <span style="color: #009900;">&#40;</span>gtk_main_quit<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
       <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
 gtk_widget_show_all <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>;
 g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;delete_event&quot;</span>,
                   G_CALLBACK <span style="color: #009900;">&#40;</span>gtk_main_quit<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 gtk_main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
 <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p align="justify">&nbsp;</p>
<p align="justify">Con questo codice abbiamo la seguente tabella:</p>
<p align="justify"><a href="http://www.hds619.net/blog/wp-content/uploads/2009/04/ciao_tabelle.png" title="ciao_tabelle.png"></a></p>
<p style="text-align: center"><a href="http://www.hds619.net/blog/wp-content/uploads/2009/04/ciao_tabelle.png" title="ciao_tabelle.png"><img src="http://www.hds619.net/blog/wp-content/uploads/2009/04/ciao_tabelle.thumbnail.png" alt="ciao_tabelle.png" /></a></p>
<p align="justify">Ok iniziamo a spiegare i vari punti:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p11437');">[<span id="p11437_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p114code37'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p11437"><td width="1%" class="line_numbers"><pre>1
</pre></td><td class="code" id="p114code37"><pre class="c"> table <span style="color: #339933;">=</span> gtk_table_new <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span>, <span style="color: #cc66cc;">3</span>, <span style="color: #000000; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p align="justify">Con questa funzione si crea una nuova tabella, i parametri sono in ordine: il numero di righe, il numero di colonne, se riservare a tutte le celle lo stesso spazio.</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p11438');">[<span id="p11438_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p114code38'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p11438"><td width="1%" class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p114code38"><pre class="c">  gtk_table_attach <span style="color: #009900;">&#40;</span>GTK_TABLE <span style="color: #009900;">&#40;</span>table<span style="color: #009900;">&#41;</span>, button, cols, cols <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>,
                    rows, rows <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>, GTK_FILL | GTK_EXPAND,
                    GTK_FILL | GTK_EXPAND, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p align="justify">Questa era la funzione difficile di cui vi parlavo, quello che fa paura è il numero di parametri.. ma andiamo a vederli nello specifico <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<ol>
<li>La tabella in cui inserire il widget</li>
<li>Il widget da inserire</li>
<li>Posizione della colonna di partenza</li>
<li>Posizione della colonna finale</li>
<li>Posizione della riga di partenza</li>
<li>Posizione della riga finale</li>
<li>Attributi dell&#8217;<em>ancoraggio</em> orizzontale</li>
<li>Attributi dell&#8217;<em>ancoraggio</em> verticale</li>
<li>Padding ( Ovvero spazio in pixel ) aggiuntivo da riservare orizzontalmente</li>
<li>Padding aggiuntivo da riservare verticalmente</li>
</ol>
<p>Ok, scommetto che non vi sono chiari i punti dal 3 al 6 se vi sono chiari pazienza, spiego ugualmente.</p>
<p>Dovete immaginarvi la tabella in questo modo:</p>
<p><img src='http://www.hds619.net/blog/wp-content/uploads/2009/04/tabella_teorica.png' alt='tabella_teorica.png' /></p>
<p>Il widget iniziale quindi partirà dalla colonna\riga 0 e finirà alla colonna\riga 1 indi x(0,1)\y(0,1), il secondo widget x(1,2)\y(0,1) e così via..</p>
<p>Ora ritornando ai parametri che richiede la funzione <i>gtk_table_attach</i> mi soffermerei due secondi sui punti 7 e 8. ovvero sugli attributi che possono essere dati. Bene gli attributi possono essere usati contemporaneamente unendoli tramite OR ( <b>|</b> ) e sono:</p>
<ul>
<li><b>GTK_FILL</b>: Fa in modo che il widget sia &#8220;incollato&#8221; alla colonna precedente</li>
<li><b>GTK_EXPAND</b>: Dà la possibilità al widget di espandersi adattandosi alle dimensioni della cella.</li>
<li><b>GTK_SHRINK</b>: Richiede al widget di occupare il minor posto possibile all&#8217;interno della cella.
</ul>
<p>Abbiamo concluso con le tabelle, l&#8217;ultima cosa da sapere è che si può settare uno spazio di default tra le varie celle tramite le funzioni: <i>gtk_table_set_row_spacings</i> e <i>gtk_table_set_col_spacings</i> dando come primo parametro la tabella e come secondo lo spazio in pixel che si vuole impostare alle varie righe o colonne.</p>
<p><strong>Fine Decima Puntata</strong><br />
<em>OOooooook, vi aspetto nella prossima puntata così concludiamo veramente e definitivamente l&#8217;argomento Contenitori, e passiamo a cosa più stimolanti come i pulsanti!<br />
Ciauz <img src="http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F10%2F04%2F2009%2Fguida-gtk-a-puntate-x-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20X%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/10/04/2009/guida-gtk-a-puntate-x-parte/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Guida gtk+ a puntate ( IX parte )</title>
		<link>http://www.hds619.net/blog/03/04/2009/guida-gtk-a-puntate-ix-parte/</link>
		<comments>http://www.hds619.net/blog/03/04/2009/guida-gtk-a-puntate-ix-parte/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 15:18:38 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/03/04/2009/guida-gtk-a-puntate-ix-parte/</guid>
		<description><![CDATA[Mi scuso in anticipo per l&#8217;abbandono sia del blog in generale sia della guida andando nello specifico, purtroppo ho avuto un sacco di impegni sia realmente che virtualmente, da questo momento in poi il fine settimana sarò un po&#8217; più libero e dedicherò qualche minuto a voi.
Ho scoperto, con piacere, che alcune persone hanno trovato [...]]]></description>
			<content:encoded><![CDATA[<p>Mi scuso in anticipo per l&#8217;abbandono sia del blog in generale sia della guida andando nello specifico, purtroppo ho avuto un sacco di impegni sia realmente che virtualmente, da questo momento in poi il fine settimana sarò un po&#8217; più libero e dedicherò qualche minuto a voi.<br />
Ho scoperto, con piacere, che alcune persone hanno trovato questa guida a puntate utile. Sono molto soddisfatto di ciò, vuol dire che non sono proprio una frana a spiegare le cose <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Nell&#8217;ultima puntata, qualche secolo fa, avevo preannunciato che in questa avremmo iniziato a parlare dei contenitori.<br />
Benissimo, non perdiamo altro tempo e iniziamo!<span id="more-112"></span></p>
<p align="center"><em><strong>Box</strong></em></p>
<p align="left">Dunque il tipo box, o meglio,<em> GtkBox</em>, è uno dei tipi più semplici per &#8220;impacchettare&#8221; i widget. Vi chiederete forse &#8220;che vuol dire impacchettare? a che serve?&#8221;. Iniziamo a rispondere alla prima domanda, impacchettare vuol dire inserire uno o più widget dentro un altro; mentre per quanto riguarda lo scopo possiam dire che i vari contenitori servono per dare un aspetto migliore all&#8217;interfaccia, ovvero a posizionare per bene i widget.. ad esempio se si vuole fare un interfaccia con il titolo su una riga e sotto seguito da due bottoni uno di fianco all&#8217;altro.</p>
<p align="left">Vediamo subito un esempio che rende tutto più chiaro:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p11241');">[<span id="p11241_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p112code41'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p11241"><td width="1%" class="line_numbers"><pre>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
</pre></td><td class="code" id="p112code41"><pre class="c"><span style="color: #339933;">#include &lt;gtk/gtk.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc, <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 GtkWidget <span style="color: #339933;">*</span>window, <span style="color: #339933;">*</span>hbox, <span style="color: #339933;">*</span>vbox, <span style="color: #339933;">*</span>widget;
&nbsp;
 gtk_init <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>argc, <span style="color: #339933;">&amp;</span>argv<span style="color: #009900;">&#41;</span>;
&nbsp;
 window <span style="color: #339933;">=</span> gtk_window_new <span style="color: #009900;">&#40;</span>GTK_WINDOW_TOPLEVEL<span style="color: #009900;">&#41;</span>;
 gtk_window_set_title <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;Test con i Box&quot;</span><span style="color: #009900;">&#41;</span>;
 gtk_window_set_default_size <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">300</span>, <span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span>;
 gtk_container_set_border_width <span style="color: #009900;">&#40;</span>GTK_CONTAINER <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 vbox <span style="color: #339933;">=</span> gtk_vbox_new <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span>;
 gtk_container_add <span style="color: #009900;">&#40;</span>GTK_CONTAINER <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, vbox<span style="color: #009900;">&#41;</span>;
&nbsp;
 hbox <span style="color: #339933;">=</span> gtk_hbox_new <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>;
 gtk_box_pack_start <span style="color: #009900;">&#40;</span>GTK_BOX <span style="color: #009900;">&#40;</span>vbox<span style="color: #009900;">&#41;</span>, hbox, <span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #000000; font-weight: bold;">TRUE</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 widget <span style="color: #339933;">=</span> gtk_label_new <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Ciao BOX!&quot;</span><span style="color: #009900;">&#41;</span>;
 gtk_box_pack_start <span style="color: #009900;">&#40;</span>GTK_BOX <span style="color: #009900;">&#40;</span>hbox<span style="color: #009900;">&#41;</span>, widget, <span style="color: #000000; font-weight: bold;">TRUE</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 hbox <span style="color: #339933;">=</span> gtk_hbox_new <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>;
 gtk_box_pack_start <span style="color: #009900;">&#40;</span>GTK_BOX <span style="color: #009900;">&#40;</span>vbox<span style="color: #009900;">&#41;</span>, hbox, <span style="color: #000000; font-weight: bold;">TRUE</span>, <span style="color: #000000; font-weight: bold;">TRUE</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 widget <span style="color: #339933;">=</span> gtk_button_new_from_stock <span style="color: #009900;">&#40;</span>GTK_STOCK_CLOSE<span style="color: #009900;">&#41;</span>;
 gtk_box_pack_start <span style="color: #009900;">&#40;</span>GTK_BOX <span style="color: #009900;">&#40;</span>hbox<span style="color: #009900;">&#41;</span>, widget, <span style="color: #000000; font-weight: bold;">TRUE</span>, <span style="color: #000000; font-weight: bold;">TRUE</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>;
 g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>widget<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;clicked&quot;</span>, G_CALLBACK <span style="color: #009900;">&#40;</span>gtk_main_quit<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 widget <span style="color: #339933;">=</span> gtk_button_new_from_stock <span style="color: #009900;">&#40;</span>GTK_STOCK_CLOSE<span style="color: #009900;">&#41;</span>;
 gtk_box_pack_start <span style="color: #009900;">&#40;</span>GTK_BOX <span style="color: #009900;">&#40;</span>hbox<span style="color: #009900;">&#41;</span>, widget, <span style="color: #000000; font-weight: bold;">TRUE</span>, <span style="color: #000000; font-weight: bold;">TRUE</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>;
 g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>widget<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;clicked&quot;</span>, G_CALLBACK <span style="color: #009900;">&#40;</span>gtk_main_quit<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 gtk_widget_show_all <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>;
 gtk_main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Innanzitutto, prima di spiegare il codice, bisogna notare che esistono due tipi di box: orizzontali e verticali. La differenza tra i due si può immaginare: se vengono impacchettati widget in un box orizzontale saranno messi uno di fianco all&#8217;altro, mentre se si impacchettano widget in un box verticale verranno messi uno sotto ( o sopra ) l&#8217;altro.</p>
<p>In questo codice noi vediamo il box principale che è verticale, al cui interno abbiamo inserito dei box orizzontali. La funzione <em>gtk_box_pack_start</em> permette di inserire un widget in un box allineandolo all&#8217;inizio del box, riceve come parametri:</p>
<ol>
<li> il box in cui inserire il widget</li>
<li>il widget da inserire</li>
<li>TRUE se si vuole che il widget venga &#8220;espanso&#8221; occupando tutto lo spazio possibile, altrimenti FALSE</li>
<li>TRUE se si vuole che il widget venga &#8220;attaccato&#8221; all&#8217;inizio del box</li>
<li>Spazio aggiuntivo in pixel con i widget &#8220;vicini&#8221;, una specie di bordo.</li>
</ol>
<p>Naturalmente esistono altre funzioni per impacchettare i widget e li potete trovare con relativa descrizione ( in inglese ) <a href="http://library.gnome.org/devel/gtk/stable/GtkBox.html#GtkBox.synopsis" target="_blank">qui</a>.</p>
<p>Lasciando stare ora l&#8217;impacchettamento,  guardiamo la creazione che è molto più veloce. Come si può vedere nel codice ho utilizzato due semplici funzioni per creare un box: <em>gtk_hbox_new</em>, <em>gtk_vbox_new</em>. Si può intuire che la prima sia per creare box orizzontali, mentre la seconda verticali. Ricevono entrambe come parametri:</p>
<ol>
<li>TRUE se si vuole che i widget inseriti abbiano tutti lo stesso spazio nel box.</li>
<li>Distanza in pixel tra i vari widget inseriti.</li>
</ol>
<p>Esiste però un altro tipo di box di cui non ho ancora parlato, ed è un box specifico per i pulsanti e il loro allineamento, il suo nome è <strong>GtkButtonBox</strong>. Anche lui può essere orizzontale e verticale.. vediamo un esempio:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p11242');">[<span id="p11242_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p112code42'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p11242"><td width="1%" class="line_numbers"><pre>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
</pre></td><td class="code" id="p112code42"><pre class="c"><span style="color: #339933;">#include &lt;gtk/gtk.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc, <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  GtkWidget <span style="color: #339933;">*</span>window, <span style="color: #339933;">*</span>button, <span style="color: #339933;">*</span>button_box;
  <span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span>;
&nbsp;
  gtk_init <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>argc, <span style="color: #339933;">&amp;</span>argv<span style="color: #009900;">&#41;</span>;
&nbsp;
  window <span style="color: #339933;">=</span> gtk_window_new <span style="color: #009900;">&#40;</span>GTK_WINDOW_TOPLEVEL<span style="color: #009900;">&#41;</span>;
  gtk_window_set_default_size <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">400</span>, <span style="color: #cc66cc;">-1</span><span style="color: #009900;">&#41;</span>;
&nbsp;
  button_box <span style="color: #339933;">=</span> gtk_hbutton_box_new <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
  gtk_button_box_set_layout <span style="color: #009900;">&#40;</span>GTK_BUTTON_BOX <span style="color: #009900;">&#40;</span>button_box<span style="color: #009900;">&#41;</span>, GTK_BUTTONBOX_EDGE<span style="color: #009900;">&#41;</span>;
  gtk_container_add <span style="color: #009900;">&#40;</span>GTK_CONTAINER <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, button_box<span style="color: #009900;">&#41;</span>;
&nbsp;
  <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> i<span style="color: #339933;">++</span> &lt; <span style="color: #cc66cc;">3</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          button <span style="color: #339933;">=</span> gtk_button_new_from_stock <span style="color: #009900;">&#40;</span>GTK_STOCK_CLOSE<span style="color: #009900;">&#41;</span>;
          gtk_box_pack_start_defaults <span style="color: #009900;">&#40;</span>GTK_BOX <span style="color: #009900;">&#40;</span>button_box<span style="color: #009900;">&#41;</span>, button<span style="color: #009900;">&#41;</span>;
          g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>button<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;clicked&quot;</span>,
                            G_CALLBACK <span style="color: #009900;">&#40;</span>gtk_main_quit<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
  <span style="color: #009900;">&#125;</span>
&nbsp;
  gtk_widget_show_all <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>;
&nbsp;
  gtk_main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
  <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>A differenza dei normali box, la creazione di un nuovo <em>button box</em> non richiede argomenti, ma richiede invece, eventualmente, il tipo di layout che dovranno avere i pulsanti inseriti al suo interno. I layout disponibili sono:</p>
<ul>
<li><strong>GTK_BUTTONBOX_DEFAULT_STYLE</strong> -&gt; Layout di default</li>
<li><strong>GTK_BUTTONBOX_SPREAD</strong> -&gt; I pulsanti avranno tutti lo stesso spazio sia tra di loro sia riguardo i bordi.</li>
<li><strong>GTK_BUTTONBOX_EDGE</strong> -&gt; Come per il layout SPREAD, solo che non c&#8217;è spazio ai bordi</li>
<li><strong>GTK_BUTTONBOX_START</strong> -&gt; I pulsanti vengono allineati tutti all&#8217;inizio</li>
<li><strong>GTK_BUTTONBOX_END</strong> -&gt; I pulsanti vengono allineati tutti alla fine</li>
<li><strong>GTK_BUTTONBOX_CENTER</strong> -&gt; I pulsanti vengono allineati tutti al centro</li>
</ul>
<p><strong>Fine Nona Puntata</strong><br />
<em>Bene, preferisco fermarmi qui, così la prossima volta potremmo affrontare con più calma le tabelle e tutto il resto sui contenitori.<br />
Ciauz <img src="http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F03%2F04%2F2009%2Fguida-gtk-a-puntate-ix-parte%2F&amp;linkname=Guida%20gtk%2B%20a%20puntate%20%28%20IX%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/03/04/2009/guida-gtk-a-puntate-ix-parte/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ottenere il valore decimale da un numero binario in C</title>
		<link>http://www.hds619.net/blog/12/12/2008/ottenere-il-valore-decimale-da-un-numero-binario-in-c/</link>
		<comments>http://www.hds619.net/blog/12/12/2008/ottenere-il-valore-decimale-da-un-numero-binario-in-c/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 04:32:21 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[binario]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[decimale]]></category>
		<category><![CDATA[funzioni]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/12/12/2008/ottenere-il-valore-decimale-da-un-numero-binario-in-c/</guid>
		<description><![CDATA[Vi sarà capitata l&#8217;occasione di ritrovarvi una stringa contenente un numero binario e di doverlo convertire in un numero decimale ( o comunque memorizzarlo in una variabile ) e utilizzare i procedimenti più assurdi per farlo? No? Beati voi, a me è capitato.. anzi in particolar modo è capitato di avere i vari 1 e [...]]]></description>
			<content:encoded><![CDATA[<p>Vi sarà capitata l&#8217;occasione di ritrovarvi una stringa contenente un numero binario e di doverlo convertire in un numero decimale ( o comunque memorizzarlo in una variabile ) e utilizzare i procedimenti più assurdi per farlo? No? Beati voi, a me è capitato.. anzi in particolar modo è capitato di avere i vari 1 e 0 divisi in varie variabili.. In questo post farò vedere un metodo, a mio avviso elegante, per ottenere la nostra decantata variabile contenente il valore decimale.</p>
<p>Ed ecco qui, subito subito la funzione:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p11044');">[<span id="p11044_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p110code44'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p11044"><td class="code" id="p110code44"><pre class="c"><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> get_value_from_binary_string <span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>s<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 <span style="color: #993333;">short</span> <span style="color: #993333;">int</span> i;
 <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> byte <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span>;
&nbsp;
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>s || strlen <span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #009900;">&#40;</span> <span style="color: #993333;">sizeof</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">8</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
      <span style="color: #b1b100;">return</span> byte;
&nbsp;
 <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span> i <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span>; i &gt; <span style="color: #cc66cc;">-1</span>; i<span style="color: #339933;">--</span> <span style="color: #009900;">&#41;</span>
       byte <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> byte | <span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">1</span> <span style="color: #339933;">+</span> i <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> <span style="color: #ff0000;">'0'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> &lt;&lt; <span style="color: #009900;">&#40;</span> i ? <span style="color: #cc66cc;">1</span> <span style="color: #339933;">:</span> <span style="color: #cc66cc;">0</span> <span style="color: #009900;">&#41;</span>;
&nbsp;
 <span style="color: #b1b100;">return</span> byte;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Naturalmente qua si parla di una stringa contenente il valore di un byte, ma è facilmente utilizzabili con stringhe contenenti valori di 2, 4, 8, 16, 32 e 64 byte utilizzando le variabili appropriate.<br />
Il fulcro della conversione comunque sta in quelle due righe di for. 2 righe e si fa quello che molti altri farebbero in minimo 20 in modo osceno.</p>
<p>Ciauz <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F12%2F12%2F2008%2Fottenere-il-valore-decimale-da-un-numero-binario-in-c%2F&amp;linkname=Ottenere%20il%20valore%20decimale%20da%20un%20numero%20binario%20in%20C">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/12/12/2008/ottenere-il-valore-decimale-da-un-numero-binario-in-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( VIII parte )</title>
		<link>http://www.hds619.net/blog/11/12/2008/guida-gtk-a-puntate-viii-parte/</link>
		<comments>http://www.hds619.net/blog/11/12/2008/guida-gtk-a-puntate-viii-parte/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 20:44:27 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/11/12/2008/guida-gtk-a-puntate-viii-parte/</guid>
		<description><![CDATA[Bene, questo post sarà il mio trampolino di lancio per le prossime puntate.. il primo post scritto direttamente nel blog e al momento.
Proviamo, speriamo che non esca un obbrobrio.
In questa puntata vedremo i dialoghi di assistenza, conosciuti nelle gtk+ come GtkAssistant che sono molto utili nelle procedure guidate. Iniziamo.

 Dialoghi di Assistenza
I dialoghi di assistenza [...]]]></description>
			<content:encoded><![CDATA[<p>Bene, questo post sarà il mio trampolino di lancio per le prossime puntate.. il primo post scritto direttamente nel blog e al momento.<br />
Proviamo, speriamo che non esca un obbrobrio.</p>
<p>In questa puntata vedremo i dialoghi di assistenza, conosciuti nelle gtk+ come GtkAssistant che sono molto utili nelle procedure guidate. Iniziamo.</p>
<p><span id="more-109"></span></p>
<p align="center"><span id="more-109"></span> <em><strong>Dialoghi di Assistenza</strong></em></p>
<p>I dialoghi di assistenza sono dei dialoghi composti da tante pagine che possono essere cambiate tramite dei pulsanti in fondo al dialogo che possono essere: <em>Avanti</em>, <em>Indietro</em>, <em>Ultimo</em>, <em>Applica</em>, <em>Annulla</em>, <em>Primo</em>.<br />
Proprio per questa particolarità quando operiamo con un dialogo di questo tipo ci dobbiamo un po’ incasinare la vita con le funzioni, ma sono semplicissime da gestire. Innanzitutto vediamo com’è composta la funzione principale per la creazione di questo dialogo.</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10949');">[<span id="p10949_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p109code49'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10949"><td width="1%" class="line_numbers"><pre>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
</pre></td><td class="code" id="p109code49"><pre class="c"><span style="color: #993333;">void</span> main_assistant <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 <span style="color: #993333;">static</span> GtkWidget <span style="color: #339933;">*</span>assistant <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">NULL</span>;
 <span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span>;
&nbsp;
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>assistant <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      assistant <span style="color: #339933;">=</span> gtk_assistant_new <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
      gtk_window_set_default_size <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>assistant<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">460</span>, <span style="color: #cc66cc;">235</span><span style="color: #009900;">&#41;</span>;
      gtk_window_set_modal <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>assistant<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span>;
&nbsp;
      g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>assistant<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;cancel&quot;</span>, G_CALLBACK <span style="color: #009900;">&#40;</span>on_assistant_close_cancel<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
      g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>assistant<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;close&quot;</span>,  G_CALLBACK <span style="color: #009900;">&#40;</span>on_assistant_close_cancel<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
      g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>assistant<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;apply&quot;</span>,  G_CALLBACK <span style="color: #009900;">&#40;</span>on_assistant_apply<span style="color: #009900;">&#41;</span>, assistant<span style="color: #009900;">&#41;</span>;
      g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>assistant<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;prepare&quot;</span>, G_CALLBACK <span style="color: #009900;">&#40;</span>on_assistant_prepare<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
&nbsp;
      make_page_one <span style="color: #009900;">&#40;</span>GTK_ASSISTANT <span style="color: #009900;">&#40;</span>assistant<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
      make_page_two <span style="color: #009900;">&#40;</span>GTK_ASSISTANT <span style="color: #009900;">&#40;</span>assistant<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
      <span style="color: #808080; font-style: italic;">/* Etc.. etc.. */</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>GTK_WIDGET_VISIBLE <span style="color: #009900;">&#40;</span>assistant<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
      gtk_widget_show <span style="color: #009900;">&#40;</span>assistant<span style="color: #009900;">&#41;</span>;
 <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      gtk_widget_destroy <span style="color: #009900;">&#40;</span>assistant<span style="color: #009900;">&#41;</span>;
      assistant <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">NULL</span>;
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Dopodichè si possono creare le varie pagine.. e adesso vediamo come.</p>
<p>La creazione di una nuova pagina è molto semplice  innanzitutto si crea tutta la tabella o box nei quali inserire i vari widget ecc… cioè si crea il contenuto dopodichè si visualizza tutto con gtk_widget_show_all passato al widget superiore e infine si inserisce nel dialogo di assistenza in questo modo:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10950');">[<span id="p10950_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p109code50'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10950"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p109code50"><pre class="c"> gtk_assistant_insert_page <span style="color: #009900;">&#40;</span>assistant, table, i<span style="color: #009900;">&#41;</span>;
 gtk_assistant_set_page_title <span style="color: #009900;">&#40;</span>assistant, table, <span style="color: #ff0000;">&quot;Pagina di test&quot;</span><span style="color: #009900;">&#41;</span>;
 gtk_assistant_set_page_complete <span style="color: #009900;">&#40;</span>assistant, table, <span style="color: #000000; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span>;
 gtk_assistant_set_page_type <span style="color: #009900;">&#40;</span>assistant, table, GTK_ASSISTANT_PAGE_CONTENT<span style="color: #009900;">&#41;</span>;
 pixbuf <span style="color: #339933;">=</span> gtk_widget_render_icon <span style="color: #009900;">&#40;</span>GTK_WIDGET <span style="color: #009900;">&#40;</span>assistant<span style="color: #009900;">&#41;</span>, GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
 gtk_assistant_set_page_header_image <span style="color: #009900;">&#40;</span>assistant, table, pixbuf<span style="color: #009900;">&#41;</span>;
 g_object_unref <span style="color: #009900;">&#40;</span>pixbuf<span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p>Dunque andiamo per righe:</p>
<ol>
<li>Abbiamo inserito nel posto “<em><strong>i</strong></em>“  il widget principale, in questo caso una tabella, nel nostro dialogo.</li>
<li>Abbiamo impostato alla pagina dell’assistent contenente come widget principale la tabella il titolo “Pagina di test”</li>
<li>Abbiamo impostato la pagina come completa, cioè si può andare avanti alla pagina successiva o fare applica, di solito una pagina è completa a priori quando contiene parametri facoltativi. La si può impostare in un secondo momento come attiva o non attiva tramite la funzione <em>gtk_assistant_set_page_complete</em> che riceve come parametri il nostro dialogo di assistenza, il widget che corrisponde alla pagina interessata e infine TRUE o FALSE per indicare se la pagina è completa o meno.</li>
<li>Abbiamo impostato il tipo di pagina, i tipi impostabili li si può trovare <a href="http://library.gnome.org/devel/gtk/stable/GtkAssistant.html#GtkAssistantPageType" onclick="javascript:urchinTracker ('/outbound/article/library.gnome.org');">QUI</a>.</li>
<li>Abbiamo creato una nuova immagine da inserire come “HEADER” ( intestazione ) della pagina.</li>
<li>L’abbiamo inserita.</li>
<li>Abbiamo liberato la memoria occupata da pixbuf.</li>
</ol>
<p>Ora andiamo a vedere invece come usare tutte le funzioni collegate ai vari segnali che abbiamo visto prima.</p>
<p>La prima è <strong>on_assistant_close_cancel</strong> che viene chiamata quando il dialogo viene chiuso o annullato.</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10951');">[<span id="p10951_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p109code51'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10951"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p109code51"><pre class="c"><span style="color: #993333;">static</span> <span style="color: #993333;">void</span>
on_assistant_close_cancel <span style="color: #009900;">&#40;</span>GtkWidget <span style="color: #339933;">*</span>widget, gpointer data<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 gtk_widget_hide <span style="color: #009900;">&#40;</span>widget<span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>In questo caso io ho semplicemente nascosto il dialogo di assistenza, perchè quando si richiama la funzione applica dopo aver recuperato i dati setto tutti i widget com’erano di default.</p>
<p>La seconda è  <strong>on_assistant_apply</strong> che è inutile vederla dato che dipende da caso a caso cosa andare a recuperare e cosa fare.. viene chiamata solo quando la procedura è finita quindi non ci son molte cose da fare col dialogo di assistenza.</p>
<p>La terza e ultima è <strong>on_assistant_prepare</strong> che come abbiamo detto viene chiamata quando si passa da una pagina ad un’altra. Queste funzioni naturalmente possono essere usate un po’ come si vuole, io questa qui l’ho usato per impostare il numero della fase corrente sulle fasi totali come titolo del dialogo.</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10952');">[<span id="p10952_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p109code52'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10952"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code" id="p109code52"><pre class="c"><span style="color: #993333;">static</span> <span style="color: #993333;">void</span>
on_assistant_prepare <span style="color: #009900;">&#40;</span>GtkWidget <span style="color: #339933;">*</span>widget, GtkWidget <span style="color: #339933;">*</span>page, gpointer data<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  gint current_page, n_pages;
  gchar <span style="color: #339933;">*</span>title;
&nbsp;
  current_page <span style="color: #339933;">=</span> gtk_assistant_get_current_page <span style="color: #009900;">&#40;</span>GTK_ASSISTANT <span style="color: #009900;">&#40;</span>widget<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
  n_pages <span style="color: #339933;">=</span> gtk_assistant_get_n_pages <span style="color: #009900;">&#40;</span>GTK_ASSISTANT <span style="color: #009900;">&#40;</span>widget<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
  title <span style="color: #339933;">=</span> g_strdup_printf <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Inserimento Cliente (%d of %d)&quot;</span>, current_page <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>, n_pages<span style="color: #009900;">&#41;</span>;
  gtk_window_set_title <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>widget<span style="color: #009900;">&#41;</span>, title<span style="color: #009900;">&#41;</span>;
  g_free <span style="color: #009900;">&#40;</span>title<span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>E con questo è tutto. Abbiamo finito col GtkAssistant.</p>
<p><strong>Fine Ottava Puntata</strong><br />
<em>Ordunque, sembra venuta bene questa puntata.. pensavo peggio. Ora abbiamo finito di occuparci delle finestra, la prossima volta ci occuperemo dei contenitori.<br />
Ciauz <img src="http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F11%2F12%2F2008%2Fguida-gtk-a-puntate-viii-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20VIII%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/11/12/2008/guida-gtk-a-puntate-viii-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( VII parte )</title>
		<link>http://www.hds619.net/blog/09/12/2008/guida-gtk-a-puntate-vii-parte/</link>
		<comments>http://www.hds619.net/blog/09/12/2008/guida-gtk-a-puntate-vii-parte/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 12:04:05 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/09/12/2008/guida-gtk-a-puntate-vii-parte/</guid>
		<description><![CDATA[Oook, rieccoci qui.. sono sempre più incasinato tra vari impegni ma finalmente ho trovato un po&#8217; ti tempo per continuare questa guida. Non ho abbandonato nessuno  
Dov&#8217;eravamo rimasti? Ah si, i dialoghi di informazione. Bene Iniziamo subito e non perdiamoci in chiacchiere.

Dialoghi di Informazione 
I dialoghi di informazione sono presenti nella maggior parte delle [...]]]></description>
			<content:encoded><![CDATA[<p>Oook, rieccoci qui.. sono sempre più incasinato tra vari impegni ma finalmente ho trovato un po&#8217; ti tempo per continuare questa guida. Non ho abbandonato nessuno <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Dov&#8217;eravamo rimasti? Ah si, i dialoghi di informazione. Bene Iniziamo subito e non perdiamoci in chiacchiere.</p>
<p><span id="more-106"></span></p>
<p align="center"><em><strong>Dialoghi di Informazione </strong></em></p>
<p><a href="http://www.hds619.net/blog/wp-content/uploads/2008/12/aboutdialog.png" title="Dialogo di informazione"><img src="http://www.hds619.net/blog/wp-content/uploads/2008/12/aboutdialog.png" alt="Dialogo di informazione" height="171" width="261" align="left" /></a>I dialoghi di informazione sono presenti nella maggior parte delle applicazioni gtk, essi servono a informare l&#8217;utente sul tipo di licenza con cui è rilasciato il programma, qual&#8217;è il sito web del progetto, il logo, la versione, chi sono gli sviluppatori o i grafici e così via..</p>
<p>Il tipo di widget riguardante questo dialogo è GtkAboutDialog, la sua creazione è molto semplice.. lo si può creare con un GtkWidget essendo il tipo su cui si basa quindi:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10654');">[<span id="p10654_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p106code54'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10654"><td class="code" id="p106code54"><pre class="c">GtkWidget <span style="color: #339933;">*</span>about_dialog <span style="color: #339933;">=</span> gtk_about_dialog_new <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p>Dopodiché si possono settare i vari attributi, essendo molti e trattandosi di semplici funzioni usabili molto semplicemente rimando al link ( <a href="http://library.gnome.org/devel/gtk/stable/GtkAboutDialog.html">GtkAboutDialog</a> ) della documentazione ufficiale.<br />
Una volta creato si potrà visualizzarlo con la funzione gtk_widget_show.</p>
<p><strong>Fine Settima Puntata </strong><br />
<i>E lo so, è troppo breve questa puntata, ma è una grande puntata perchè da ora in poi sarò costretto a scrivere &#8220;on the run&#8221; le varie puntate visto che la guida che avevo iniziato a scrivere è finita. Nella prossima puntata vedremo i Dialoghi di Assistenza ( Assistant Dialog ) e poi avremmo finito con le finestre e inizieremo con i pulsanti, poi le tabelle\box e poi vederemo. Bye <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </i></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F09%2F12%2F2008%2Fguida-gtk-a-puntate-vii-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20VII%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/09/12/2008/guida-gtk-a-puntate-vii-parte/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( VI parte )</title>
		<link>http://www.hds619.net/blog/03/12/2008/guida-gtk-a-puntate-vi-parte/</link>
		<comments>http://www.hds619.net/blog/03/12/2008/guida-gtk-a-puntate-vi-parte/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 02:35:38 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/03/12/2008/guida-gtk-a-puntate-vi-parte/</guid>
		<description><![CDATA[Scusate innanzitutto per la sospensione, per così tanto tempo, della guida a puntate ma sono stato megaraffreddato e con la febbre sto fine\inizio settimana. Sono sicuro che le Gtk+ in futuro avranno anche qualche funzione per farmi stare meglio dato che già adesso implementano il mondo intero.
Dov&#8217;è che eravamo arrivati? Ah si, i dialoghi  [...]]]></description>
			<content:encoded><![CDATA[<p>Scusate innanzitutto per la sospensione, per così tanto tempo, della guida a puntate ma sono stato megaraffreddato e con la febbre sto fine\inizio settimana. Sono sicuro che le Gtk+ in futuro avranno anche qualche funzione per farmi stare meglio dato che già adesso implementano il mondo intero.</p>
<p>Dov&#8217;è che eravamo arrivati? Ah si, i dialoghi <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Oggi vedremo le Finestre vere, quindi riprendete il vostro compilatore che stava ammuffendo, il vostro vim, geany, gedit, emacs, nano o quello che è e iniziamo.</p>
<p><span id="more-105"></span></p>
<p align="center"><em><strong>Finestre </strong></em></p>
<p>Una finestra è nella stragrande maggioranza dei casi, il widget di base in cui vengono inseriti altri widget. É un contenitore per un solo elemento, per questo più avanti troveremo le tabelle e i box che permettono di inserire, organizzare e tenere in ordine più widget. La loro creazione è molto semplice:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10560');">[<span id="p10560_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p105code60'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10560"><td class="code" id="p105code60"><pre class="c">GtkWidget <span style="color: #339933;">*</span>window;
window <span style="color: #339933;">=</span> gtk_window_new <span style="color: #009900;">&#40;</span>GTK_WINDOW_TOPLEVEL<span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p>Il parametro di gtk_window_new l&#8217;abbiamo già spiegato durante l&#8217;introduzione alle Gtk+ così come settare il titolo o la dimensione di default. Adesso vedremo come dare un&#8217;icona al programma. Ciò lo possiamo fare tramite la funzione <em>gtk_window_set_icon_from_file</em> nel seguente esempio vedremo come utilizzarla.</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10561');">[<span id="p10561_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p105code61'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10561"><td class="code" id="p105code61"><pre class="c">GtkWidget <span style="color: #339933;">*</span>window;
GError <span style="color: #339933;">*</span>error <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">NULL</span>;
&nbsp;
gboolean chk;window <span style="color: #339933;">=</span> gtk_window_new <span style="color: #009900;">&#40;</span>GTK_WINDOW_TOPLEVEL<span style="color: #009900;">&#41;</span>;
chk <span style="color: #339933;">=</span> gtk_window_set_icon_from_file <span style="color: #009900;">&#40;</span>GTK_WINDOW<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;myicon.png&quot;</span>, <span style="color: #339933;">&amp;</span>error<span style="color: #009900;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> chk <span style="color: #339933;">==</span> <span style="color: #000000; font-weight: bold;">FALSE</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     g_warning <span style="color: #009900;">&#40;</span>error<span style="color: #339933;">-</span>&gt;message<span style="color: #009900;">&#41;</span>;
     g_error_free <span style="color: #009900;">&#40;</span>error<span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Abbiamo introdotto due nuovi tipi delle Glib: <em>Gerror</em> e <em>gboolean</em>. Il primo è una struttura organizzata in questo modo:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10562');">[<span id="p10562_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p105code62'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10562"><td class="code" id="p105code62"><pre class="c"><span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span> <span style="color: #009900;">&#123;</span>
     GQuark domain;
     gint code;
     gchar <span style="color: #339933;">*</span>message;
<span style="color: #009900;">&#125;</span> GError;</pre></td></tr></table></div>

<p>In questo modo abbiamo in <em>domain</em> ( che è un <em>GQuark</em>, un tipo che equivale a <em>unsigned long int</em> ) l&#8217;indentificativo univoco del tipo di errore, in <em>code</em> il codice di errore, una sorta di variabile errno, e infine in<em> message</em> la stringa di errore &#8220;human-readable&#8221; ovvero visualizzabile direttamente come output.<br />
Dopo aver caricato l&#8217;immagine, nell&#8217;if, troviamo la funzione g_warning sempre delle glib, ne esistono 5 di questo &#8220;tipo&#8221; con effetti diversi:</p>
<ol>
<li><em>g_message</em> -&gt; riporta semplici messaggi.</li>
<li><em>g_warning</em> -&gt; riporta avvertimenti, ovvero errori non fatali per il proseguimento dell&#8217;applicazione.</li>
<li><em>g_critical</em> -&gt; riporta avvertimenti, fatali per il proseguimento di alcune operazioni.</li>
<li><em>g_error</em>-&gt; riporta errori, fatali per il proseguimento dell&#8217;applicazione. Dopo aver visualizzato il messaggio chiama la funzione <em>abort ()</em> per terminare il programma.</li>
<li><em>g_debug</em> -&gt; funzione per riportare messaggi riguardanti il debug dell&#8217;applicazione.</li>
</ol>
<p>Una volta capito questo piccolo esempio andiamo a vedere come si può fare a settare un&#8217;immagine come icona del programma nel caso essa non sia un file ma sia memorizzata in qualche variabile all&#8217;interno del programma. Per fare questa operazione abbiamo bisogno della libreria GdkPixbuf sempre all&#8217;interno delle Gtk+ come sotto categoria della libreria Gdk.<br />
Il formato più comune e semplice da utilizzare all&#8217;interno dell&#8217;applicazione è XPM. Un&#8217;icona ad esempio di una pagina in XPM può essere creata così:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10563');">[<span id="p10563_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p105code63'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10563"><td class="code" id="p105code63"><pre class="c"><span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> xpm_data<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
<span style="color: #ff0000;">&quot;16 16 3 1&quot;</span>,
<span style="color: #ff0000;">&quot;       c None&quot;</span>,
<span style="color: #ff0000;">&quot;.      c #000000&quot;</span>,
<span style="color: #ff0000;">&quot;X      c #FFFFFF&quot;</span>,
<span style="color: #ff0000;">&quot;                &quot;</span>,
<span style="color: #ff0000;">&quot;   ......       &quot;</span>,
<span style="color: #ff0000;">&quot;   .XXX.X.      &quot;</span>,
<span style="color: #ff0000;">&quot;   .XXX.XX.     &quot;</span>,
<span style="color: #ff0000;">&quot;   .XXX.XXX.    &quot;</span>,
<span style="color: #ff0000;">&quot;   .XXX.....    &quot;</span>,
<span style="color: #ff0000;">&quot;   .XXXXXXX.    &quot;</span>,
<span style="color: #ff0000;">&quot;   .XXXXXXX.    &quot;</span>,
<span style="color: #ff0000;">&quot;   .XXXXXXX.    &quot;</span>,
<span style="color: #ff0000;">&quot;   .XXXXXXX.    &quot;</span>,
<span style="color: #ff0000;">&quot;   .XXXXXXX.    &quot;</span>,
<span style="color: #ff0000;">&quot;   .XXXXXXX.    &quot;</span>,
<span style="color: #ff0000;">&quot;   .XXXXXXX.    &quot;</span>,
<span style="color: #ff0000;">&quot;   .........    &quot;</span>,
<span style="color: #ff0000;">&quot;                &quot;</span>,
<span style="color: #ff0000;">&quot;                &quot;</span><span style="color: #009900;">&#125;</span>;</pre></td></tr></table></div>

<p>L&#8217;immagine è composta nella maniera seguente:</p>
<ul>
<li> Prima Riga:
<ul>
<li>Primo Numero: Larghezza</li>
<li>Secondo Numero: Altezza</li>
<li>Terzo Numero: Colori Immagine</li>
<li>Quarto Numero: Caratteri per Pixel</li>
</ul>
</li>
<li>Seconda Riga:
<ul>
<li>Inizia la dichiarazione di tutti i colori nel formato <em>carattere       c colore</em></li>
</ul>
</li>
<li>Una volta finito di specificare i colori si può iniziare a disegnare</li>
</ul>
<p>Alla fine della creazione dell&#8217;immagine, la si memorizza in una variabile GdkPixbuf * in questo modo:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10564');">[<span id="p10564_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p105code64'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10564"><td class="code" id="p105code64"><pre class="c">GdkPixbuf <span style="color: #339933;">*</span>pixbuf <span style="color: #339933;">=</span> gdk_pixbuf_new_from_xpm_data <span style="color: #009900;">&#40;</span>xmp_data<span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p>E infine la si setta come icona tramite la funzione <em>gtk_window_set_icon</em> che riceve come primo parametro la finestra a cui settare l&#8217;icona e come secondo parametro il <em>GdkPixbuf</em> con l&#8217;immagine.<br />
Ultima cosa da dire su quest&#8217;argomento delle icone è che se si volesse settare un&#8217;icona univoca per tutte le finestre e dialoghi creati nel programma bisognerà usare la funzione <em>gtk_set_default_icon_from_file</em> o <em>gtk_set_default_icon</em> che funzionano esattamente come le funzioni che abbiamo visto tranne per il fatto che non richiedono la finestra come primo parametro.</p>
<p>Per finire con le finestre invece, vediamo come rendere una finestra modale, ovvero che forza il controllo sull&#8217;ultima finestra aperta. Abbiamo bisogno di sole due funzioni: <em>gtk_window_set_transient_for</em> e<em> gtk_window_set_modal.</em> La prima funzione serve a rendere &#8220;parenti&#8221; la finestra corrente con quella principale, riceve infatti come primo parametro la finestra corrente e come secondo quella principale. La seconda funzione invece abilita o disabilita ( dipendentemente dal secondo parametro ) il controllo forzato sulla finestra passata come primo parametro, per forzare il controllo bisognerà passare come secondo parametro TRUE altrimenti FALSE.</p>
<p><strong>Fine Sesta Puntata </strong><br />
<em>Bene, abbiamo recuperato il tempo perso con questa puntatona. Abbiamo pure introdotto le immagini XPM e il tipo GdkPixbuf.. direi che nella prossima puntata vedremo i <u>Dialoghi di Informazione</u> e poi ho finito di scopiazzare la guida che avevo scritto e dovrò iniziare a scriverla direttamente qui e quindi si potrebbe pensare di andare a vedere il tipo di finestra GtkAssistant&#8230; chissà. Buona notte, data l&#8217;ora e ciauz <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F03%2F12%2F2008%2Fguida-gtk-a-puntate-vi-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20VI%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/03/12/2008/guida-gtk-a-puntate-vi-parte/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( V parte )</title>
		<link>http://www.hds619.net/blog/28/11/2008/guida-gtk-a-puntate-v-parte/</link>
		<comments>http://www.hds619.net/blog/28/11/2008/guida-gtk-a-puntate-v-parte/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 23:26:52 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/28/11/2008/guida-gtk-a-puntate-v-parte/</guid>
		<description><![CDATA[Abbiamo raggiunto la quinta puntata! Anvedi! Bene, non perdiamo tempo, la strada è ancora lunga e anche se probabilmente qualcuno avrò iniziato a fare i suoi primi programmini graficosi ci sono un sacco di cose da sapere per sviluppare come si deve in Gtk+.
Ora ci occupiamo delle varie finestre anche perché senza di esse non [...]]]></description>
			<content:encoded><![CDATA[<p>Abbiamo raggiunto la quinta puntata! Anvedi! Bene, non perdiamo tempo, la strada è ancora lunga e anche se probabilmente qualcuno avrò iniziato a fare i suoi primi programmini graficosi ci sono un sacco di cose da sapere per sviluppare come si deve in Gtk+.</p>
<p>Ora ci occupiamo delle varie finestre anche perché senza di esse non si va da nessuna parte.</p>
<p>Ready? GO!</p>
<p><span id="more-104"></span></p>
<p align="center"><em><strong>Dialoghi</strong></em></p>
<p align="justify"><em> </em>  Un dialogo è simile ad una finestra, che vedremo tra poco, viene usato principalmente per il riporto di piccoli messaggi o la richiesta di input semplici. Essendo del tipo finestra può essere utilizzato con la macro GTK_CONTAINER, GTK_WINDOW e GTK_DIALOG godendo di tutte le funzioni relative ad ognuno di questi tipi.  Ci son due modi per creare un Dialogo, il primo lo si usa quando si vuole settare da 0 tutto come con una finestra e lo si fa tramite:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10468');">[<span id="p10468_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p104code68'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10468"><td width="1%" class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p104code68"><pre class="c">GtkWidget <span style="color: #339933;">*</span>dialog;
&nbsp;
dialog <span style="color: #339933;">=</span> gtk_dialog_new <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p align="justify">L&#8217;altro metodo invece permette di avere una finestra di dialogo già pronta, come quando ad esempio bisogna visualizzare una finestra di errore, di info o quando bisogna proporre una scelta a cui si può rispondere si o no..<br />
Il metodo è il seguente:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10469');">[<span id="p10469_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p104code69'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10469"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code" id="p104code69"><pre class="c">GtkWidget <span style="color: #339933;">*</span>dialog, <span style="color: #339933;">*</span>dialog_area, <span style="color: #339933;">*</span>label;
&nbsp;
dialog <span style="color: #339933;">=</span> gtk_dialog_new_with_buttons <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Titolo dialogo&quot;</span>,
                                      finestra_principale,
                                      GTK_DIALOG_MODAL,
                                      GTK_STOCK_OK,
                                      GTK_RESPONSE_OK,
                                      <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
&nbsp;
dialog_area <span style="color: #339933;">=</span> gtk_dialog_get_content_area <span style="color: #009900;">&#40;</span>GTK_DIALOG <span style="color: #009900;">&#40;</span>dialog<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
label <span style="color: #339933;">=</span> gtk_label_new <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Testo all'interno del dialogo&quot;</span><span style="color: #009900;">&#41;</span>;
gtk_container_add <span style="color: #009900;">&#40;</span>GTK_CONTAINER <span style="color: #009900;">&#40;</span>dialog_area<span style="color: #009900;">&#41;</span>, label<span style="color: #009900;">&#41;</span>;
&nbsp;
gtk_dialog_run <span style="color: #009900;">&#40;</span>GTK_DIALOG<span style="color: #009900;">&#40;</span>dialog<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p>Dunque esaminando meglio i parametri vediamo che al primo posto è il titolo del dialogo ( o NULL se si vuole utilizzare il titolo di default delle finestre gtk ), come secondo parametro la finestra principale ( o NULL se non è presente ), come terzo i Flags del dialogo che possono essere:</p>
<ul>
<li>GTK_DIALOG_MODAL</li>
<li>GTK_DIALOG_DESTROY_WITH_PARENT</li>
<li>GTK_DIALOG_NO_SEPARATOR</li>
</ul>
<p>La prima forza il controllo sul dialogo e quindi non permette di usare la finestra principale, la seconda fa sì che una volta chiuso il dialogo si chiuda anche la finestra a cui è collegata e infine l&#8217;ultima non inserisce una linea separatrisce tra il contenuto del dialogo ed eventuali bottoni inseriti.<br />
Continuando gli argomenti dal quarto posto in poi sono facoltativi e finisce di aspettarsi argomenti quando trova il parametro NULL. I parametri facoltativi vanno di due in due, ovvero: STOCK_BUTTON &#8211; VALORE_DI_RITORNO. Nel nostro caso abbiamo il pulsante OK che ritorna il valore GTK_RESPONSE_OK. Il valore del pulsante premuto verrà restituito da dialog_run ( che restituisce un gint ).</p>
<p>Andando avanti nella creazione di questo dialogo, vediamo la funzione gtk_dialog_get_content che restituisce un GtkContainer sotto forma di GtkWidget dove poter inserire il contenuto del dialogo, nel nostro caso abbiamo inserito un semplicissimo label. Questo caso non l&#8217;ho fatto casualmente ma per un motivo ben preciso ovvero il poter introdurre il tipo<strong> GtkMessageDialog</strong>.</p>
<p>Esso altro non è che un&#8217;astrazione di GtkDialog fatta appositamente per creare dialoghi che riportano messaggi. Il suo prototipo è:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10470');">[<span id="p10470_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p104code70'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10470"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p104code70"><pre class="c">GtkWidget<span style="color: #339933;">*</span>          gtk_message_dialog_new     <span style="color: #009900;">&#40;</span>GtkWindow <span style="color: #339933;">*</span>parent,
                                                GtkDialogFlags flags,
                                                GtkMessageType type,
                                                GtkButtonsType buttons,
                                                <span style="color: #993333;">const</span> gchar <span style="color: #339933;">*</span>message_format,
                                                ...<span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p>Il primo parametro è la classica finestra principale, il secondo sono i flag del dialogo ( quei tre descritti poco fa ), il terzo il tipo di messaggio che può essere uno di questi:</p>
<ul>
<li><em>GTK_MESSAGE_INFO</em> → Messaggio di informazione</li>
<li><em>GTK_MESSAGE_WARNING</em> → Messaggio di errore non fatale</li>
<li><em>GTK_MESSAGE_QUESTION</em> → Messaggio di domanda</li>
<li><em>GTK_MESSAGE_ERROR</em> → Messaggio di errore fatale</li>
<li><em>GTK_MESSAGE_OTHER</em> → Messaggio generico</li>
</ul>
<p>Dopodichè ci sono i bottoni da visualizzare e abbiamo le seguenti scelte:</p>
<ul>
<li>GTK_BUTTONS_NONE → Nessun Pulsante</li>
<li>GTK_BUTTONS_OK → Visualizza il pulsante OK</li>
<li>GTK_BUTTONS_CLOSE → Visualizza il pulsante CHIUDI</li>
<li>GTK_BUTTONS_CANCEL → Visualizza il pulsante ANNULLA</li>
<li>GTK_BUTTONS_YES_NO → Visualizza i pulsanti SI E NO</li>
<li>GTK_BUTTONS_OK_CANCEL → Visualizza i pulsanti OK e ANNULLA</li>
</ul>
<p>Infine abbiamo la stringa del messaggio in modalità printf-like, quindi come quinto argomento potremmo scrivere qualcosa come <em>&#8220;Ciao %s, sei sicuro di avere %d anni?&#8221;</em>, nome, anni.<br />
Se si vuole utilizzare il markup di pango c&#8217;è la funzione gtk_message_dialog_new_with_markup che riceve gli stessi parametri di gtk_message_dialog_new solo che converte ad esempio un testo <em>&#8220;&lt;b&gt;ciao&lt;/b&gt;&#8221;</em> in grassetto.</p>
<p>Per finire, ricordo che i flags dei dialoghi possono essere uniti tramite l&#8217;operatore di unione bit-a-bit |.</p>
<p><strong>Fine Quinta Puntata</strong><br />
<em>E lo so, finisce troppo presto.. purtroppo non sono tipo da monologhi e pagine interminabili.<br />
Comunque nella prossima puntata vedremo le finestre intese come GtkWindow promesso. <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F28%2F11%2F2008%2Fguida-gtk-a-puntate-v-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20V%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/28/11/2008/guida-gtk-a-puntate-v-parte/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( IV parte )</title>
		<link>http://www.hds619.net/blog/25/11/2008/guida-gtk-a-puntate-iv-parte/</link>
		<comments>http://www.hds619.net/blog/25/11/2008/guida-gtk-a-puntate-iv-parte/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 11:28:58 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/25/11/2008/guida-gtk-a-puntate-iv-parte/</guid>
		<description><![CDATA[Inizia la quarta puntata, preparatevi i pop corn, lattine di opencola (   ), compilatori, shell e tutto il resto. Oggi finiremo la terza puntata che avevo lasciato in sospeso altrimenti diventava poi troppo lunga.
Mettetevi comodi, e iniziamo!

Ora che abbiamo spiegato un po&#8217; le basi, vediamo come risolvere il problema di prima: il programma [...]]]></description>
			<content:encoded><![CDATA[<p>Inizia la quarta puntata, preparatevi i pop corn, lattine di opencola ( <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ), compilatori, shell e tutto il resto. Oggi finiremo la terza puntata che avevo lasciato in sospeso altrimenti diventava poi troppo lunga.</p>
<p>Mettetevi comodi, e iniziamo!</p>
<p><span id="more-102"></span></p>
<p>Ora che abbiamo spiegato un po&#8217; le basi, vediamo come risolvere il problema di prima: il programma che non si chiude dopo aver clickato sul pulsante di chiusura, e giacché ci siamo miglioriamo un po&#8217; l&#8217;hello world inserendo un pulsantino e collegandoci un evento <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10272');">[<span id="p10272_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p102code72'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10272"><td width="1%" class="line_numbers"><pre>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
</pre></td><td class="code" id="p102code72"><pre class="c"><span style="color: #339933;">#include &lt;gtk/gtk.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span>;
&nbsp;
<span style="color: #993333;">static</span> <span style="color: #993333;">void</span>
button_func <span style="color: #009900;">&#40;</span>GtkWidget <span style="color: #339933;">*</span> widget<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">:</span>
      g_print <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;E' la prima volta che clicki :)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span>;
      <span style="color: #000000; font-weight: bold;">break</span>;
    <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>
    <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">:</span>
    <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">:</span>
      g_print <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Ci prendi la mano a clickare eh?<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span>;
      <span style="color: #000000; font-weight: bold;">break</span>;
    <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
      g_print <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Ok, basta. Torna a studiar le gtk ;)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span>;
      <span style="color: #000000; font-weight: bold;">break</span>;
  <span style="color: #009900;">&#125;</span>
&nbsp;
  i<span style="color: #339933;">++</span>;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span>
main <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc, <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  GtkWidget <span style="color: #339933;">*</span>window, <span style="color: #339933;">*</span>button;
&nbsp;
  gtk_init <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>argc, <span style="color: #339933;">&amp;</span>argv<span style="color: #009900;">&#41;</span>;
&nbsp;
  window <span style="color: #339933;">=</span> gtk_window_new <span style="color: #009900;">&#40;</span>GTK_WINDOW_TOPLEVEL<span style="color: #009900;">&#41;</span>;
  gtk_window_set_default_size <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">250</span>, <span style="color: #cc66cc;">250</span><span style="color: #009900;">&#41;</span>;
  gtk_window_set_title <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;Ciao Mondo delle Gtk+!&quot;</span><span style="color: #009900;">&#41;</span>;
  gtk_widget_show <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>;
&nbsp;
  button <span style="color: #339933;">=</span> gtk_button_new_with_label <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Clickami!&quot;</span><span style="color: #009900;">&#41;</span>;
  gtk_container_add <span style="color: #009900;">&#40;</span>GTK_CONTAINER <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, button<span style="color: #009900;">&#41;</span>;
  gtk_widget_show <span style="color: #009900;">&#40;</span>button<span style="color: #009900;">&#41;</span>;
&nbsp;
  g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;delete_event&quot;</span>,
                    G_CALLBACK <span style="color: #009900;">&#40;</span>gtk_main_quit<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
  g_signal_connect <span style="color: #009900;">&#40;</span>G_OBJECT <span style="color: #009900;">&#40;</span>button<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;clicked&quot;</span>,
                    G_CALLBACK <span style="color: #009900;">&#40;</span>button_func<span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>;
&nbsp;
  gtk_main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
  <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Dunque, analizziamo un attimo le nuove funzioni, quella più importante e una delle più usate in un programma che utilizza le Gtk+ è <em>g_signal_connect</em> il cui prototipo è:<em><br />
</em></p>
<p align="center"><em>gulong g_signal_connect (gpointer object, const gchar *signal_name,                                            </em><br />
<em>                   GCallback handler, gpointer data);  </em></p>
<p>Ovvero, riceve come primo parametro l&#8217;oggetto ( <em>GObject</em> ) a cui collegare il segnale, come secondo parametro il tipo di evento da intercettare ( gli eventi intercettabili cambiano da widget a widget ), come terzo la funzione da chiamare una volta che si verifica l&#8217;evento e infine un eventuale parametro da passarci, il parametro deve essere convertito in<em> gpointer ( che equivale al void * )</em>.<br />
Una particolarità della funzione che verrà collegata è che può essere di qualunque tipo, accettare ciò che si vuole e ritornare ciò che vuole. Nel caso però si volesse ottenere nella funzione chiamata il parametro passato e il widget collegato solitamente si utilizza questo prototipo:</p>
<p align="center"><em>gpointer funzione_chiamata (GtkWidget *widget, gpointer data);</em></p>
<p>In widget sarà l&#8217;elemento a cui è collegata la funzione, e in data il parametro passato.</p>
<p>Andando avanti possiamo vedere oltre al classico bottone creato, una funzione particolare, <em>gtk_container_add</em>.</p>
<p>Le Gtk+ hanno una struttura di tipo gerarchico fatta ad esempio in questo modo:</p>
<p><a href="http://www.hds619.net/blog/wp-content/uploads/2008/11/uto-ger.png" title="uto-ger.png"><img src="http://www.hds619.net/blog/wp-content/uploads/2008/11/uto-ger.png" alt="uto-ger.png" /></a></p>
<p>Ora, questa gerarchia è messa un po&#8217; così per far intuire meglio, quella vera delle Gtk+ la potete consultare <a href="http://library.gnome.org/devel/gtk/stable/ch01.html">qui</a>.</p>
<p>Nel caso del nostro script noi abbiamo la finestra che oltre che una finestra è anche un contenitore e quindi al suo interno ci inseriamo direttamente il pulsante che, come si potrà vedere, si espanderà per tutta la dimensione del contenitore, per limitare la sua dimensione potevamo avvalerci o di una tabella o box, nel caso fossero stati presenti più elementi, oppure della funzione <em>gtk_widget_set_usize</em> che forza un widget ad avere esattamente la dimensione scelta. I parametri di quest&#8217;ultima funzione sono simili a quelli di <em>gtk_window_set_default_size</em> solo che il primo elemento al posto di essere una GtkWindow è un GtkWidget, quindi nella stragrande maggior parte dei casi non c&#8217;è bisogno di eseguire alcun cast.<br />
Per finire quindi, abbiamo visto la funzione <em>gtk_main_quit</em>, che termina l&#8217;applicazione gtk ed esce dal programma.</p>
<p><strong>Fine Quarta Putanta</strong><br />
<i>Nella prossima puntata inizieremo ad andare più in profondità studiando i vari tipi di finestre, adesso abbiamo solo dato uno sguardo generale. Bye <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </i></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F25%2F11%2F2008%2Fguida-gtk-a-puntate-iv-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20IV%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/25/11/2008/guida-gtk-a-puntate-iv-parte/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( III parte )</title>
		<link>http://www.hds619.net/blog/23/11/2008/guida-gtk-a-puntate-iii-parte/</link>
		<comments>http://www.hds619.net/blog/23/11/2008/guida-gtk-a-puntate-iii-parte/#comments</comments>
		<pubDate>Sun, 23 Nov 2008 16:14:34 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/23/11/2008/guida-gtk-a-puntate-iii-parte/</guid>
		<description><![CDATA[Ed eccoci arrivati alla terza parte, siamo giunti all&#8217;inizio di questo fantastico mondo e dopo aver dato un primo sguardo generale è ora di salutarlo  
E come si può salutare un mondo se non con un bellissimo Hello World ?
Iniziamo.
Hello Gtk+ World!
 In questo primo capitolo vedremo come creare piccole e minimali interfacce grafiche, [...]]]></description>
			<content:encoded><![CDATA[<p>Ed eccoci arrivati alla terza parte, siamo giunti all&#8217;inizio di questo fantastico mondo e dopo aver dato un primo sguardo generale è ora di salutarlo <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><em>E come si può salutare un mondo se non con un bellissimo Hello World ?</em></p>
<p align="left">Iniziamo.</p>
<p align="center"><span id="more-100"></span><em><strong>Hello Gtk+ World!</strong></em></p>
<p align="justify"> In questo primo capitolo vedremo come creare piccole e minimali interfacce grafiche, quali sono i widget più comuni e come utilizzarli e tante altre piccole cose che si approfondiranno poi nei capitoli seguenti.</p>
<p>In particolare vedremo come:</p>
<ul>
<li>Creare una finestra</li>
<li>Inserirci dei widget</li>
<li>Collegare delle funzioni a determinati eventi</li>
<li>Funziona la logica delle Gtk+</li>
</ul>
<p>Iniziamo subito con un piccolo codice di esempio:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p10074');">[<span id="p10074_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p100code74'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p10074"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code" id="p100code74"><pre class="c"><span style="color: #339933;">#include &lt;gtk/gtk.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc, <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 GtkWidget <span style="color: #339933;">*</span>window;
&nbsp;
 gtk_init <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>argc, <span style="color: #339933;">&amp;</span>argv<span style="color: #009900;">&#41;</span>;
&nbsp;
 window <span style="color: #339933;">=</span> gtk_window_new <span style="color: #009900;">&#40;</span>GTK_WINDOW_TOPLEVEL<span style="color: #009900;">&#41;</span>;
 gtk_window_set_default_size <span style="color: #009900;">&#40;</span>GTK_WINDOW<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">250</span>, <span style="color: #cc66cc;">250</span><span style="color: #009900;">&#41;</span>;
 gtk_window_set_title <span style="color: #009900;">&#40;</span>GTK_WINDOW<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>, <span style="color: #ff0000;">&quot;Ciao Mondo delle Gtk+!&quot;</span><span style="color: #009900;">&#41;</span>;
 gtk_widget_show <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>;
&nbsp;
 gtk_main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
 <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Questo codice come si potrà notare una volta compilato e lanciato produrrà una finestra di questo tipo:</p>
<p><a href="http://www.hds619.net/blog/wp-content/uploads/2008/11/finestra-gtk-hello.jpeg" title="Hello Gtk+ Window World"></a></p>
<p style="text-align: center"><a href="http://www.hds619.net/blog/wp-content/uploads/2008/11/finestra-gtk-hello.jpeg" title="Hello Gtk+ Window World"><img src="http://www.hds619.net/blog/wp-content/uploads/2008/11/finestra-gtk-hello.jpeg" alt="Hello Gtk+ Window World" /></a></p>
<p align="justify">Una cosa che si può notare fin da subito è che se si fa click sul pulsante per chiudere la finestra, l&#8217;applicazione resta ancora in esecuzione, ciò avviene perché ancora non gestiamo l&#8217;evento di chiusura della finestra, a breve lo vedremo. Prima di tutto però analizziamo il codice.</p>
<p>Nella prima riga troviamo la classica inclusione della libreria gtk, che a sua volta include le glib, pango e altre come sue sotto-librerie e in più include anche la libreria standard di input\output, stdio.h.<br />
Dopodiché vediamo la funzione<em> gtk_init </em>che inizializza l&#8217;ambiente gtk ed esamina eventuali argomenti da riga di comando, ad esempio se si lancia l&#8217;applicazione con argomento <em>&#8211;sync</em>, esso verrà intercettato da <em>gtk_init</em> che provvederà a visualizzare eventuali errori ed eventi in modo sincronizzato con l&#8217;applicazione senza ritardi dovuti ad altre operazioni.<br />
Proseguendo troviamo l&#8217;inizializzazione del <em>widget</em> &#8216;window&#8217; che sarà appunto la nostra finestra.<br />
Per crearlo abbiamo dovuto utilizzare la funzione <em>gtk_window_new</em> che riceve come parametro il tipo di finestra, nel nostro caso abbiamo utilizzato <strong>GTK_WINDOW_TOPLEVEL</strong> che posiziona la nuova finestra appena creata sopra tutte quelle precedenti. Oltre a questo stile però c&#8217;è anche <strong>GTK_WINDOW_POPUP</strong> che ignora il window manager e quindi non visualizza i bordi della finestra.</p>
<p>Dopo aver inizializzato la finestra, gli abbiamo dato le dimensioni, per far ciò abbiamo utilizzato la funzione <em>gtk_window_set_default_size</em> che riceve come primo argomento una GtkWindow, ma avendo noi un GtkWidget per trasformarla in GtkWindow utilizziamo la macro <em><strong>GTK_WINDOW</strong></em> che convertirà il tipo in quello desiderato, come secondo argomento invece riceve la larghezza e l&#8217;altezza. Subito dopo impostiamo il titolo e infine visualizziamo la finestra inizializzata.<br />
Alla fine del programma troviamo <em>gtk_main</em> che evita di far chiudere il programma, senza di esso come viene visualizzata la finestra il programma si chiude e con esso si eliminano anche tutti i widget creati.</p>
<p>A questo punto possiamo iniziare a dare uno sguardo generale a come funziona un programma gtk, sono pochi punti:</p>
<ol>
<li>Si inizializza l&#8217;ambiente</li>
<li>Si creano i widget</li>
<li>
<ol>
<li>Gli si stabiliscono i vari attributi</li>
<li>Si visualizzano</li>
</ol>
</li>
<li>Si aspetta un qualche evento senza uscire dal programma</li>
</ol>
<p>Tutto qui <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>La parte che può ritornare difficile da capire invece è il nome delle funzioni, ma non è niente di particolarmente difficile, la stragrande maggior parte delle funzioni utilizza questa logica:</p>
<p><em>libreria_tipo_azione → gtk_window_set_title<br />
→ gtk_widget_show<br />
→ &#8230;</em></p>
<p><strong>Fine Terza Parte</strong><br />
Per non riempire troppo la testa tutta in una volta, rimandiamo la vera fine alla prossima parte.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F23%2F11%2F2008%2Fguida-gtk-a-puntate-iii-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20III%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/23/11/2008/guida-gtk-a-puntate-iii-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( II parte )</title>
		<link>http://www.hds619.net/blog/22/11/2008/guida-gtk-a-puntate-ii-parte/</link>
		<comments>http://www.hds619.net/blog/22/11/2008/guida-gtk-a-puntate-ii-parte/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 23:28:33 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/22/11/2008/guida-gtk-a-puntate-ii-parte/</guid>
		<description><![CDATA[Bene, continua la guida a puntate. L&#8217;ultima volta abbiamo dato uno sguardo agli obiettivi di questa guida, a quale conoscenze bisogna avere prima di iniziare a esplorare il fantastico mondo delle Gtk+  e qual&#8217;è la loro storia.
Oggi vedremo invece come si possono installare e come compilare un programma che ne fa uso una volta installate. [...]]]></description>
			<content:encoded><![CDATA[<p>Bene, continua la guida a puntate. L&#8217;ultima volta abbiamo dato uno sguardo agli obiettivi di questa guida, a quale conoscenze bisogna avere prima di iniziare a esplorare il fantastico mondo delle Gtk+  e qual&#8217;è la loro storia.</p>
<p>Oggi vedremo invece come si possono installare e come compilare un programma che ne fa uso una volta installate. Questa seconda parte sarà un po&#8217; breve, mi rifarò con la prossima <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ( vedere la fine di quest&#8217;articolo per sapere cosa faremo )</p>
<p><span id="more-98"></span></p>
<p align="center"><em><strong>Dove le ottengo?<br />
Come le installo?<br />
</strong></em></p>
<p>Su un sistema Debian si sa che apt semplifica il lavoro di installazione, quindi utilizzandolo può bastare un semplicissimo:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p9879');">[<span id="p9879_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p98code79'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p9879"><td width="1%" class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p98code79"><pre>sudo apt-get update
sudo apt-get install libgtk2.0-0 libgtk2.0-dev</pre></td></tr></table></div>

<p>Se lo si volesse installare da sorgente invece i passi da seguire sono:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p9880');">[<span id="p9880_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p98code80'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p9880"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code" id="p98code80"><pre>mkdir gtk-install
cd gtk-install
wget http://ftp.gnome.org/pub/gnome/sources/gtk+/2.14/gtk+-2.14.3.tar.bz2
wget http://ftp.gnome.org/pub/gnome/sources/pango/1.20/pango-1.20.5.tar.bz2
wget http://ftp.gnome.org/pub/gnome/sources/glib/2.18/glib-2.18.1.tar.bz2
&nbsp;
tar -xjf gtk+-2.14.3.tar.bz2
tar -xjf pango-1.20.5.tar.bz2
tar -xjf glib-2.18.1.tar.bz2
&nbsp;
sudo apt-get update
sudo apt-get install build-essential
&nbsp;
./pango*/configure &amp;&amp; make -C pango* &amp;&amp; sudo make install -C pango*
./glib*/configure &amp;&amp; make -C glib* &amp;&amp; sudo make install -C glib*
./gtk*/configure &amp;&amp; make -C gtk* &amp;&amp; sudo make install -C gtk*</pre></td></tr></table></div>

<p align="justify">Se si volesse abilitare il debug, basta passare l&#8217;opzione &#8211;enable-debug al configure.<br />
Per altre informazioni su come installarle su altre piattaforme rimando alla pagina di gtk.org dove spiega dettagliatamente, in inglese, tutti i passaggi da effettuare e contiene anche al suo interno i vari link per alcuni repository da cui si potranno scaricare gli archivi in diversi formati.<br />
La pagina è: <a href="http://www.gtk.org/download.html" target="_blank">http://www.gtk.org/download.html</a><br />
Una volta installato potrà essere richiamato tramite l&#8217;utily pkg-config che nei capitoli seguenti useremo come una sorta di parametro di GCC, ad esempio:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p9881');">[<span id="p9881_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p98code81'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p9881"><td width="1%" class="line_numbers"><pre>1
</pre></td><td class="code" id="p98code81"><pre>gcc main.c -o programma `pkg-config --cflags --libs gtk+-2.0`</pre></td></tr></table></div>

<p align="justify">pkg-config ritornerà a gcc le varie librerie da linkare e i vari percorsi in cui trovare i file di header, ad esempio nel mio sistema ho:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p9882');">[<span id="p9882_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p98code82'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p9882"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p98code82"><pre>hds619@neckers:~$ pkg-config --cflags --libs gtk+-2.0
-I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include
-I/usr/local/include/atk-1.0 -I/usr/local/include/pango-1.0
-I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include
-I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/freetype2
-I/usr/include/libpng12 -I/usr/include/pixman-1 -L/usr/local/lib
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0
-lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype
-lz -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0</pre></td></tr></table></div>

<p><strong>Fine Seconda Parte <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong><br />
<em>Nella prossima costruiremo i primi programmi Gtk+ di esempio per dare uno sguardo generale al toolkit</em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F22%2F11%2F2008%2Fguida-gtk-a-puntate-ii-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20II%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/22/11/2008/guida-gtk-a-puntate-ii-parte/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Guida Gtk+ a puntate ( I parte )</title>
		<link>http://www.hds619.net/blog/21/11/2008/guida-gtk-a-puntate-i-parte/</link>
		<comments>http://www.hds619.net/blog/21/11/2008/guida-gtk-a-puntate-i-parte/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 12:26:13 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[manuale gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/21/11/2008/guida-gtk-a-puntate-i-parte/</guid>
		<description><![CDATA[Ebbene, eccomi qui. Tempo fa avevo iniziato a scrivere un pdf che voleva diventare una guida, decente, alle Gtk+ in italiano, purtroppo però è un lavoro molto lungo per una persona sola e prima di arrivare alla fine probabilmente avranno già rilasciato una nuova versione delle Gtk+  
A questo punto ho deciso di pubblicare, [...]]]></description>
			<content:encoded><![CDATA[<p>Ebbene, eccomi qui. Tempo fa avevo iniziato a scrivere un pdf che voleva diventare una guida, decente, alle Gtk+ in italiano, purtroppo però è un lavoro molto lungo per una persona sola e prima di arrivare alla fine probabilmente avranno già rilasciato una nuova versione delle Gtk+ <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>A questo punto ho deciso di pubblicare, in varie &#8220;puntate&#8221;, qui sul blog questa guida. E ora..</p>
<p align="center"><span id="more-96"></span><strong>..Iniziamo!</strong></p>
<p align="center"><strong><em>A chi è rivolto questo &#8220;corso&#8221;?<br />
Quali conoscenze bisogna avere?</em></strong></p>
<p align="justify">Nonostante le Gtk+ siano multipiattaforma, questo &#8220;corso&#8221; le tratta su un sistema Debian ( e derivati ) con kernel Linux.<br />
Non servono particolari requisiti anche se, secondo me, se si vuole sviluppare con le Gtk+ è consigliabile avere un ambiente desktop scritto con questo toolkit, come ad esempio gnome o xfce per una migliore integrazione.<br />
Per quanto riguarda le conoscenze invece bisogna sapere almeno le basi del C e saper gestire un po&#8217; i puntatori che, nelle Gtk+, sono tutto. Inoltre naturalmente bisogna sapere come compilare un programma, come lanciarlo, come utilizzare un po&#8217; la shell in generale. In particolare con le gtk+ è consigliabile creare un mini-makefile dato che solitamente scrivere di volta in volta le dipendenze da dare a gcc risulta stancante.<br />
Nella guida si partirà da zero zero fino ad arrivare a creare interfacce e programmini un po&#8217; più complessi, ci sarà teoria ma anche alcuni programmini di esempio.</p>
<p align="justify">&nbsp;</p>
<p align="center"><strong><em>Storia delle Gtk+</em></strong></p>
<p align="justify"><a href="http://www.hds619.net/blog/wp-content/uploads/2008/11/schermata-gimp.png" title="Schermata di Gimp"><img src="http://www.hds619.net/blog/wp-content/uploads/2008/11/schermata-gimp.png" alt="Schermata di Gimp" align="right" /></a>Le Gtk+ sono nate nel 1996 come toolkit per GIMP, un programma di fotoritocco, e hanno raggiunto la loro prima fase stabile nell&#8217;Aprile del 1998. Le Gtk+ 1.0 contenevano al loro interno solo i widgets basilari usati da GIMP, nella successiva release ( 1.2 ) nel Febbraio del 1999 hanno iniziato ad avere nuovi widgets utilizzabili per sviluppare altre applicazioni più generiche senza essere più Gimp-centriche. La versione 1.2 è anche stata la<br />
prima versione che creava, e divideva dal toolkit principale, la libreria GLib.<br />
Dopo la versione 1.2 le Gtk+ sono entrate a far parte in un lungo ciclo di sviluppo durante il quale sono state apportate moltissime modifiche. Il rendering del testo è stato cambiato per far si che fosse eseguito utilizzando la libreria Pango, cercando come prima cosa di mantenere il supporto all&#8217;internazionalizzazione. La<br />
gestione del sistema ad oggetti è stato generalizzato e spostato nelle Glib sotto il nome di Gobject. Un altra separazione è stata introdotta nelle GDK. Due nuovi randi widgets, la TextView e la TreeView, che sono stati scritti da zero. Entrambe le funzionalità di un&#8217;architettura ModelView.<br />
Durante questo periodo di tre anni, gnome era in attesa impaziente per le Gtk+ 2.0, dato che gnome dipendeva da esse. Una delle lezioni che il team di sviluppatori delle Gtk+ ha appreso dal ciclo di rilascio delle 2.0 è quello di cercare di mantenersi tra i 9 e i 12 mesi di sviluppo per le versioni stabili.<br />
I rilasci dopo la 2.0 hanno avuto un carattere incrementale. Le nuove principali funzionalità delle 2.2 è stato il supporto per la visualizzazione multipla, per il tradizionale X11 multischermo/multimonitor e Xinerama.</p>
<p align="justify"> <strong>Fine Prima Parte <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </strong><br />
<em>Nella prossima parte vedremo come installarle e come compilare un programma con le Gtk+</em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F21%2F11%2F2008%2Fguida-gtk-a-puntate-i-parte%2F&amp;linkname=Guida%20Gtk%2B%20a%20puntate%20%28%20I%20parte%20%29">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/21/11/2008/guida-gtk-a-puntate-i-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funzioni Standard.. poco Standard</title>
		<link>http://www.hds619.net/blog/07/08/2008/funzioni-standard-poco-standard/</link>
		<comments>http://www.hds619.net/blog/07/08/2008/funzioni-standard-poco-standard/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 15:18:10 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[programmazione]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[GNU]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/07/08/2008/funzioni-standard-poco-standard/</guid>
		<description><![CDATA[Proprio poco fa stavo parlando in chat con Dani, mentre io insultavo quelli che hanno creato la strcmp ( in quanto se gli si passa uno dei due parametri a NULL fa andare il programma in Segmentation Fault che è una bellezza ), mi ha detto che la strcmp oltre a fare il semplice confronto [...]]]></description>
			<content:encoded><![CDATA[<p>Proprio poco fa stavo parlando in chat con <strong>Dani</strong>, mentre io insultavo quelli che hanno creato la <em>strcmp ( in quanto se gli si passa uno dei due parametri a NULL fa andare il programma in Segmentation Fault che è una bellezza ),</em> mi ha detto che la <em>strcmp</em> oltre a fare il semplice confronto tra le due stringhe restituisce anche la differenza tra i caratteri, e proprio per questo lui l&#8217;aveva utilizzata per riordinare alfabeticamente i pacchetti in <em>slackyd</em>.</p>
<p>Allora non sapendo questa cosa da niubbo della situazione mi son messo a fare un test:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p8785');">[<span id="p8785_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p87code85'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p8785"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p87code85"><pre class="c"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;string.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc, <span style="color: #993333;">char</span> <span style="color: #339933;">**</span>argv<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> argc &lt; <span style="color: #cc66cc;">3</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">1</span>;
&nbsp;
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Diff: `%d'<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, strcmp<span style="color: #009900;">&#40;</span>argv<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span>, argv<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
 <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Benissimo lo vado ad avviare e mi restituisce solo 0 ( uguali ), 1 o -1 ( non uguali ).. dopo vari attimi di stupore da parte sua, va a provare lo stesso identico codice e le stesse identiche stringhe passate come parametro sul suo computer e la funzione lì restituiva davvero la differenza tra le due stringhe!</p>
<p>Ora mi domando cosa renda così variabile una funzione standard che dovrebbbe avere lo stesso funzionamento su tutti i computer del mondo. La versione delle<em><strong> libc</strong></em> comunque era uguale giusto per cronaca. Da notare comunque anche che ho provato la strcasecmp che <u>non dovrebbe far parte del C Standard</u>, e restituisce la famosa differenza tra le due!</p>
<p>? Mah..</p>
<p>P.s.: Altra cosa che mi fa incazzare, se si passa un parametro null alla <em>strcmp</em>, o all&#8217;<em>atoi</em> perchè cavolo mi deve compromettere tutto il programma? cosa gli costa a quelli che hanno scritto la <strong><em>gnu c library</em></strong> mettere due piccolissime macro del tipo:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p8786');">[<span id="p8786_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p87code86'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p8786"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p87code86"><pre class="c"><span style="color: #339933;">#define return_if_fail(cond) if ( !(cond) ) { \</span>
                                  <span style="color: #b1b100;">return</span>; \
                             <span style="color: #009900;">&#125;</span>
<span style="color: #339933;">#define return_val_if_fail(cond, val) if ( !(cond) ) { \</span>
                                           <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span>val<span style="color: #009900;">&#41;</span>; \
                                      <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>per controllare che i parametri non siano nulli? BAH!</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F07%2F08%2F2008%2Ffunzioni-standard-poco-standard%2F&amp;linkname=Funzioni%20Standard..%20poco%20Standard">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/07/08/2008/funzioni-standard-poco-standard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E la nostra funzione restituì la pagina corrente..</title>
		<link>http://www.hds619.net/blog/14/07/2008/e-la-nostra-funzione-restitui-la-pagina-corrente/</link>
		<comments>http://www.hds619.net/blog/14/07/2008/e-la-nostra-funzione-restitui-la-pagina-corrente/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 18:50:19 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[Guide veloci]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/14/07/2008/e-la-nostra-funzione-restitui-la-pagina-corrente/</guid>
		<description><![CDATA[Dunque dopo alcuni sbattimenti ieri ( look here for more details ) con quella funzione, da un forum arriva l&#8217;illuminazione. Ma prima andiamo a spiegare i motivi..
Se il cambiamento di pagina viene gestito col segnale &#8220;switch-page&#8221; il segnale arriva prima del passaggio alla pagina successiva e quindi logicamente gtk_notebook_get_current_page restituisce la pagina che diventa precedente [...]]]></description>
			<content:encoded><![CDATA[<p>Dunque dopo alcuni sbattimenti ieri ( <a href="http://www.hds619.net/blog/13/07/2008/gtknotebook-ti-odio/">look here for more details</a> ) con quella funzione, da un forum arriva l&#8217;illuminazione. Ma prima andiamo a spiegare i motivi..</p>
<p>Se il cambiamento di pagina viene gestito col segnale <em>&#8220;switch-page&#8221;</em> il segnale arriva prima del passaggio alla pagina successiva e quindi logicamente <em>gtk_notebook_get_current_page</em> restituisce la pagina che diventa precedente appena terminata la funzione collegata a quel segnale. Per risolvere questo problema però basta giocare con i parametri della funzione che colleghiamo, infatti se noi al posto del classico:</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p7689');">[<span id="p7689_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p76code89'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p7689"><td width="1%" class="line_numbers"><pre>1
</pre></td><td class="code" id="p76code89"><pre class="c">gpointer nostra_funzione<span style="color: #009900;">&#40;</span>GtkWidget <span style="color: #339933;">*</span>widget, gpointer data<span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Facciamo</p>

<div id="wp_codebox_msgheader"><span class="right"><a href="javascript:;" onclick="toggle_collapse('p7690');">[<span id="p7690_symbol">-</span>]</a><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p76code90'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div id="wp_codebox"><table width="100%" ><tr id="p7690"><td width="1%" class="line_numbers"><pre>1
</pre></td><td class="code" id="p76code90"><pre class="c">gpointer nostra_funzione<span style="color: #009900;">&#40;</span>GtkNotebook <span style="color: #339933;">*</span>notebook, GtkNotebookPage <span style="color: #339933;">*</span>page, gint page_num<span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Ci ritroveremo in page_num la pagina in cui stiamo andando <img src='http://www.hds619.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Tutto è bene quel che finisce bene.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F14%2F07%2F2008%2Fe-la-nostra-funzione-restitui-la-pagina-corrente%2F&amp;linkname=E%20la%20nostra%20funzione%20restitu%C3%AC%20la%20pagina%20corrente..">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/14/07/2008/e-la-nostra-funzione-restitui-la-pagina-corrente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GtkNotebook ti odio!</title>
		<link>http://www.hds619.net/blog/13/07/2008/gtknotebook-ti-odio/</link>
		<comments>http://www.hds619.net/blog/13/07/2008/gtknotebook-ti-odio/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 20:22:34 +0000</pubDate>
		<dc:creator>hds619</dc:creator>
				<category><![CDATA[programmazione]]></category>
		<category><![CDATA[follia]]></category>
		<category><![CDATA[gtk]]></category>

		<guid isPermaLink="false">http://www.hds619.net/blog/13/07/2008/gtknotebook-ti-odio/</guid>
		<description><![CDATA[Io mi domando il perchè certa gente si metta a implementare qualcosa in una libreria considerata con i controcazzi, che non funziona! Ultimamente sto cercando di implementare in Jeex ( l&#8217;editor esadecimale che ormai tutti conoscerete, lo trovate comunque nella sezione progetti di hds619.net ) la gestione di più file in Schede, tutto ok dopo [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://nicolasj.developpez.com/blog/images/gtk-logo-draft.png" width="256" align="left" height="256" />Io mi domando il perchè certa gente si metta a implementare qualcosa in una libreria considerata con i controcazzi, che <strong>non</strong> funziona! Ultimamente sto cercando di implementare in <em><strong>Jeex</strong></em> (<em> l&#8217;editor esadecimale che ormai tutti conoscerete, lo trovate comunque nella <a href="http://www.hds619.net/progetti.php">sezione progetti</a> di hds619.net</em> ) la gestione di più file in Schede, tutto ok dopo qualche momento di <em>Segmentation Fault</em> e <em>errori con la realloc</em> alla fine &#8220;ce l&#8217;ho fatta&#8221;, diciamo, a fare qualcosa con la creazione dei nuovi file, per l&#8217;apertura ci devo ancora guardare, ho dovuto riscrivere praticamente tutto il nucleo principale.</p>
<p>Ma vabbè a sto punto vado a fare un pò di prove nel gestire più schede e le informazioni sui vari byte e nella status bar, sorpresa non funzionano appena aggiungo una scheda! Ad esempio seleziono il byte 31 nella scheda 1 e non fa niente, vado nella scheda 2 o altre e mi dà le informazioni su quel byte, la stessa cosa con altre schede. Dopo del sano controllo di ogni singola variabile fino all&#8217;esaurimento nervoso scopro che la funzione <em>gtk_notebook_get_current_page</em> mi restituisce non la scheda corrente in cui sto ma quella precedente in cui stavo!</p>
<p>Da esaurimento.. con sto caldo poi.. meglio prendersi una pausa.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.hds619.net%2Fblog%2F13%2F07%2F2008%2Fgtknotebook-ti-odio%2F&amp;linkname=GtkNotebook%20ti%20odio%21">Condividi\Salva Articolo</a>]]></content:encoded>
			<wfw:commentRss>http://www.hds619.net/blog/13/07/2008/gtknotebook-ti-odio/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

