<?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>Blog de GreenIvory &#187; GXT</title>
	<atom:link href="http://blog.greenivory.fr/tag/gxt/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.greenivory.fr</link>
	<description>Développement agile sur technologies web 2.0</description>
	<lastBuildDate>Fri, 03 Feb 2012 11:23:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Tester son application GWT/GXT avec Selenium</title>
		<link>http://blog.greenivory.fr/2009/09/28/tester-son-application-gwtgxt-avec-selenium/</link>
		<comments>http://blog.greenivory.fr/2009/09/28/tester-son-application-gwtgxt-avec-selenium/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 10:45:11 +0000</pubDate>
		<dc:creator>Frédéric</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[GXT]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blog.greenivory.fr/?p=545</guid>
		<description><![CDATA[GXT (grâce à GWT) permet de créer des applications web riches, dont l&#8217;ergonomie est assez proche d&#8217;une application lourde. Nous avons déjà eu l&#8217;occasion de publier des articles à ce sujet sur ce blog. Il est assez simple de faire des tests unitaires sur des services dans les couches basses d&#8217;une application. Et encore, dès [...]]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.greenivory.fr%2F2009%2F09%2F28%2Ftester-son-application-gwtgxt-avec-selenium%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.greenivory.fr/2009/09/28/tester-son-application-gwtgxt-avec-selenium/" ></g:plusone>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Tester son application GWT/GXT avec Selenium" data-url="http://blog.greenivory.fr/2009/09/28/tester-son-application-gwtgxt-avec-selenium/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p>GXT (grâce à GWT) permet de créer des <strong>applications web riches</strong>, dont l&#8217;ergonomie est assez proche d&#8217;une application lourde. Nous avons déjà eu l&#8217;occasion de publier des articles à ce sujet sur ce blog. Il est assez simple de faire des <strong>tests unitaires</strong> sur des services dans les couches basses d&#8217;une application. Et encore, dès qu&#8217;il y a une base de données en jeu, ça se complique (et c&#8217;est d&#8217;ailleurs très souvent le cas). Mais qu&#8217;en est-il des interfaces graphiques ? Evidemment, certains éléments graphiques peuvent être testés via des tests unitaires, mais comment s&#8217;assurer que l&#8217;interface, dans son ensemble, répond aux besoins ?</p>
<p>C&#8217;est là qu&#8217;intervient <a href="http://seleniumhq.org/">Selenium</a>. Selenium est un jeu d&#8217;outils qui permettent d&#8217;<strong>automatiser les tests d&#8217;interface graphique</strong>, en pilotant un navigateur via du code (ce code, c&#8217;est le <strong>testcase</strong>). Par exemple, on va pouvoir demander le chargement d&#8217;une page, effectuer un clic sur un lien bien précis, vérifier que la page contient un texte, &#8230; Une session complète sera dédiée à Selenium au <a href="http://developerforum.eu/">DeveloperForum 5</a>, le <strong>8 octobre 2009 à Strasbourg</strong>.</p>
<p>Mais avant de pouvoir tester nos interfaces, il faut mettre en place Selenium. Voici comment faire fonctionner Selenium dans un projet GWT dans Eclipse sur Mac OS X Snow Leopard (10.6).</p>
<h2>Comment ça marche ?</h2>
<p>Il faut deux éléments pour faire fonctionner le tout :</p>
<ul>
<li><strong>Selenium IDE</strong> est une extension Firefox qui permet d&#8217;enregistrer les actions réalisées dans la fenêtre de Firefox et d&#8217;ainsi produire le code du testcase (dans le langage de votre choix &#8211; dans notre cas, ce sera Java).</li>
<li><strong>Selenium RC</strong> (Remote Control) est un serveur capable de piloter un navigateur et pouvant recevoir des commandes via le réseau, déclenchées par le testcase.</li>
</ul>
<h2>Mise en place</h2>
<p>Utilisez Firefox pour télécharger et installer Selenium IDE (extension Firefox) : <a href="http://seleniumhq.org/download/">http://seleniumhq.org/download/</a><br />
Téléchargez ensuite Selenium RC et décompresser l&#8217;archive dans le répertoire de votre choix. Depuis ce répertoire, lancez Selenium RC via la ligne de commande :</p>
<pre>java -jar selenium-server-1.0.1/selenium-server.jar</pre>
<p>Le serveur se lance et devrait vous afficher les gentillesses suivantes :</p>
<pre>10:53:44.369 INFO - Java: Apple Inc. 14.1-b02-90
10:53:44.370 INFO - OS: Mac OS X 10.6.1 i386
10:53:44.379 INFO - v1.0.1 [2696], with Core v@VERSION@ [@REVISION@]
10:53:44.461 INFO - Version Jetty/5.1.x
10:53:44.462 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
10:53:44.463 INFO - Started HttpContext[/selenium-server,/selenium-server]
10:53:44.463 INFO - Started HttpContext[/,/]
10:53:44.475 INFO - Started SocketListener on 0.0.0.0:4444
10:53:44.475 INFO - Started org.mortbay.jetty.Server@1ff7a1e</pre>
<h2>Premier test</h2>
<p><strong>Dans Firefox</strong>, allez sur une page web de votre choix puis, dans le menu <em>Outils</em>, choisissez <em>Selenium IDE</em>. Commencez à surfer sur la page web et regardez Selenium &laquo;&nbsp;Big Brother&nbsp;&raquo; IDE enregistrer toutes vos actions dans le navigateur&#8230; Exactement comme lorsqu&#8217;on enregistre un macro dans certains logiciels. Après avoir navigué dans quelques pages, sélectionnez du texte dans la page et faites un clic droit puis sélectionnez l&#8217;option <em>verifyTextPresent &lt;le texte que vous avez sélectionné&gt;</em>.</p>
<p>Dans le menu de la <strong>fenêtre de Selenium</strong>, choisissez <em>Exporter le test sous&#8230;</em> puis choisissez <em>Java (JUnit)</em>. Enregistrez le fichier avec le nom de votre choix, sans oublier l&#8217;extension <em>.java</em>.</p>
<p><strong>Dans Eclipse</strong>, dans votre projet GWT/GXT, créez un nouveau dossier de sources nommé <em>test</em> (si ce n&#8217;est pas déjà fait). Ajoutez-y le fichier généré par Selenium IDE puis corrigez le nom du package ainsi que le nom de la classe. Corrigez le build path de votre projet en ajoutant le JAR <em>selenium-java-client-driver.jar</em> (que vous trouverez dans l&#8217;archive de Selenium que vous avez téléchargée). Clic droit sur la classe dans Eclipse puis <em>Run As &gt; JUnit Test</em>.</p>
<p>Et là, c&#8217;est le drame : une <strong>erreur se produit lors du lancement de Firefox</strong>. Après le passage à Snow Leopard, une incompatibilité de librairie est arrivée. Pour la contourner, il existe une <a href="http://stackoverflow.com/questions/1364523/firefox-bin-quit-unexpectedly-while-running-selenium-test">solution</a> qui vaut ce qu&#8217;elle vaut (j&#8217;adore cette expression qui ne veut rien dire dans l&#8217;absolu et qui pourtant veut bien dire&#8230; ce qu&#8217;elle veut dire !) :</p>
<ul>
<li>Quittez Firefox</li>
<li>Lancer le Terminal puis rendez-vous dans <em>/Applications/Firefox.app/Contents/MacOS</em>.</li>
<li>Renommez <em>libsqlite3.dylib</em> : <code>mv libsqlite3.dylib _libsqlite3.dylib</code></li>
</ul>
<p>Relancez votre testcase et tout devrait rentrer dans l&#8217;ordre !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.greenivory.fr/2009/09/28/tester-son-application-gwtgxt-avec-selenium/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Migration de GXT 1.x à GXT 2.x</title>
		<link>http://blog.greenivory.fr/2009/08/13/migration-de-gxt-1x-a-gxt-2x/</link>
		<comments>http://blog.greenivory.fr/2009/08/13/migration-de-gxt-1x-a-gxt-2x/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 13:11:42 +0000</pubDate>
		<dc:creator>Frédéric</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[GXT]]></category>
		<category><![CDATA[migration]]></category>

		<guid isPermaLink="false">http://blog.greenivory.fr/?p=450</guid>
		<description><![CDATA[Il existe bien sûr un guide de migration qui permet de passer de GXT 1.x à GXT 2.x, avec plus ou moins de succès. Mais une chose importante a été oubliée dans ce guide. Quand on utilise des listes paginées, le paramètre indiquant la page de données voulue s&#8217;appelait auparavant start, il s&#8217;appelle désormais offset. [...]]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.greenivory.fr%2F2009%2F08%2F13%2Fmigration-de-gxt-1x-a-gxt-2x%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.greenivory.fr/2009/08/13/migration-de-gxt-1x-a-gxt-2x/" ></g:plusone>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Migration de GXT 1.x à GXT 2.x" data-url="http://blog.greenivory.fr/2009/08/13/migration-de-gxt-1x-a-gxt-2x/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p>Il existe bien sûr un <strong>guide de migration</strong> qui permet de passer de GXT 1.x à GXT 2.x, avec plus ou moins de succès. Mais une chose importante a été oubliée dans ce guide. Quand on utilise des listes paginées, le paramètre indiquant la page de données voulue s&#8217;appelait auparavant <em>start</em>, il s&#8217;appelle désormais <em>offset</em>. C&#8217;est comme ça, et ce n&#8217;est pas paramétrable.<br />
Faut juste modifier toutes les servlets&#8230; à moins que, comme nous, vous n&#8217;ayez centralisé ce genre de choses.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.greenivory.fr/2009/08/13/migration-de-gxt-1x-a-gxt-2x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changement de sélection dans une ListView</title>
		<link>http://blog.greenivory.fr/2009/04/16/changement-de-selection-dans-une-listview/</link>
		<comments>http://blog.greenivory.fr/2009/04/16/changement-de-selection-dans-une-listview/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 12:46:53 +0000</pubDate>
		<dc:creator>Frédéric</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[GXT]]></category>
		<category><![CDATA[ListView]]></category>

		<guid isPermaLink="false">http://blog.greenivory.fr/?p=261</guid>
		<description><![CDATA[Après MashupXFeed et les réseaux sociaux, retournons à un peu de technique : comment gérer le changement de sélection dans une ListView et récupérer la sélection ? Voilà une réponse possible : ajouter un listener sur le SelectionModel. // Initialize the ListView and required stuff to load and display it. ListView&#60;ModelData&#62; listView = new ListView&#60;ModelData&#62;&#40;&#41;; [...]]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.greenivory.fr%2F2009%2F04%2F16%2Fchangement-de-selection-dans-une-listview%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.greenivory.fr/2009/04/16/changement-de-selection-dans-une-listview/" ></g:plusone>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Changement de sélection dans une ListView" data-url="http://blog.greenivory.fr/2009/04/16/changement-de-selection-dans-une-listview/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p>Après MashupXFeed et les réseaux sociaux, retournons à un peu de technique : comment gérer le changement de sélection dans une <code>ListView</code> et récupérer la sélection ?</p>
<p>Voilà une réponse possible : ajouter un <em>listener</em> sur le <em>SelectionModel</em>.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Initialize the ListView and required stuff to load and display it.</span>
ListView<span style="color: #339933;">&lt;</span>ModelData<span style="color: #339933;">&gt;</span> listView <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ListView<span style="color: #339933;">&lt;</span>ModelData<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
listView.<span style="color: #006633;">setTemplate</span><span style="color: #009900;">&#40;</span>getTemplate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
listView.<span style="color: #006633;">setItemSelector</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;div.listview-item&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Setup selection Listener.</span>
listView.<span style="color: #006633;">getSelectionModel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">addListener</span><span style="color: #009900;">&#40;</span>
   Events.<span style="color: #006633;">SelectionChange</span>,
   <span style="color: #000000; font-weight: bold;">new</span> Listener<span style="color: #339933;">&lt;</span>SelectionEvent<span style="color: #339933;">&lt;</span>ModelData<span style="color: #339933;">&gt;&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> handleEvent<span style="color: #009900;">&#40;</span>SelectionEvent<span style="color: #339933;">&lt;</span>ModelData<span style="color: #339933;">&gt;</span> se<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         ModelData selectedModel <span style="color: #339933;">=</span> se.<span style="color: #006633;">selection</span>.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.greenivory.fr/2009/04/16/changement-de-selection-dans-une-listview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Boîte de confirmation avec GXT</title>
		<link>http://blog.greenivory.fr/2009/04/07/boite-de-confirmation-avec-gxt/</link>
		<comments>http://blog.greenivory.fr/2009/04/07/boite-de-confirmation-avec-gxt/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 17:06:18 +0000</pubDate>
		<dc:creator>Frédéric</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[confirmation]]></category>
		<category><![CDATA[GXT]]></category>
		<category><![CDATA[MessageBox]]></category>

		<guid isPermaLink="false">http://blog.greenivory.fr/?p=240</guid>
		<description><![CDATA[À chaque fois que j&#8217;en ai besoin, c&#8217;est pareil : je ne me souviens jamais de la manière de tester la &#171;&#160;valeur de retour&#160;&#187; de MessageBox.confirm(). Alors en l&#8217;écrivant ici, peut-être que je finirai par m&#8217;en souvenir&#8230; Listener&#60;WindowEvent&#62; handler = new Listener&#60;WindowEvent&#62;&#40;&#41; &#123; public void handleEvent&#40;WindowEvent be&#41; &#123; Dialog dialog = &#40;Dialog&#41; be.component; Button btn [...]]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.greenivory.fr%2F2009%2F04%2F07%2Fboite-de-confirmation-avec-gxt%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.greenivory.fr/2009/04/07/boite-de-confirmation-avec-gxt/" ></g:plusone>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Boîte de confirmation avec GXT" data-url="http://blog.greenivory.fr/2009/04/07/boite-de-confirmation-avec-gxt/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p>À chaque fois que j&#8217;en ai besoin, c&#8217;est pareil : je ne me souviens jamais de la manière de tester la &laquo;&nbsp;valeur de retour&nbsp;&raquo; de <code>MessageBox.confirm()</code>. Alors en l&#8217;écrivant ici, peut-être que je finirai par m&#8217;en souvenir&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">Listener<span style="color: #339933;">&lt;</span>WindowEvent<span style="color: #339933;">&gt;</span> handler <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Listener<span style="color: #339933;">&lt;</span>WindowEvent<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> handleEvent<span style="color: #009900;">&#40;</span><span style="color: #003399;">WindowEvent</span> be<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Dialog</span> dialog <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Dialog</span><span style="color: #009900;">&#41;</span> be.<span style="color: #006633;">component</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">Button</span> btn <span style="color: #339933;">=</span> dialog.<span style="color: #006633;">getButtonPressed</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>btn.<span style="color: #006633;">getItemId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Dialog</span>.<span style="color: #006633;">YES</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// L'utilisateur a confirmé !</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
MessageBox.<span style="color: #006633;">confirm</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">&quot;Confirmation&quot;</span>, <span style="color: #0000ff;">&quot;Souhaitez-vous réellement... ?&quot;</span>, handler
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.greenivory.fr/2009/04/07/boite-de-confirmation-avec-gxt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problème avec DragListener.dragCancel()</title>
		<link>http://blog.greenivory.fr/2009/03/20/probleme-avec-draglistenerdragcancel/</link>
		<comments>http://blog.greenivory.fr/2009/03/20/probleme-avec-draglistenerdragcancel/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 03:40:12 +0000</pubDate>
		<dc:creator>Frédéric</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[drag and drop]]></category>
		<category><![CDATA[GXT]]></category>

		<guid isPermaLink="false">http://blog.greenivory.fr/?p=145</guid>
		<description><![CDATA[Je viens de passer un certain temps à me rendre compte que dans la méthode dragCancel() d&#8217;un objet DragListener la propriété component de l&#8217;objet DragEvent reçu en argument vaut null ! Donc si vous avez besoin de cette information, pensez à la stocker dans votre objet dans la méthode dragStart()&#8230; Version de GXT : 1.2.3]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.greenivory.fr%2F2009%2F03%2F20%2Fprobleme-avec-draglistenerdragcancel%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.greenivory.fr/2009/03/20/probleme-avec-draglistenerdragcancel/" ></g:plusone>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Problème avec DragListener.dragCancel()" data-url="http://blog.greenivory.fr/2009/03/20/probleme-avec-draglistenerdragcancel/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p>Je viens de passer un certain temps à me rendre compte que dans la méthode <code>dragCancel()</code> d&#8217;un objet <code>DragListener</code> la propriété <code>component</code> de l&#8217;objet <code>DragEvent</code> reçu en argument vaut <code>null</code> ! Donc si vous avez besoin de cette information, pensez à la stocker dans votre objet dans la méthode <code>dragStart()</code>&#8230;</p>
<p>Version de GXT : 1.2.3</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.greenivory.fr/2009/03/20/probleme-avec-draglistenerdragcancel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrollbar et RowLayout</title>
		<link>http://blog.greenivory.fr/2009/03/05/scrollbar-et-rowlayout/</link>
		<comments>http://blog.greenivory.fr/2009/03/05/scrollbar-et-rowlayout/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 12:02:21 +0000</pubDate>
		<dc:creator>Frédéric</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[GXT]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[scroll]]></category>

		<guid isPermaLink="false">http://blog.greenivory.fr/?p=82</guid>
		<description><![CDATA[L&#8217;utilisation d&#8217;un RowLayout dans un conteneur supprime la possibilité d&#8217;avoir une barre de défilement pour ce conteneur. En fait, la raison est assez simple : RowLayout calcule la position et la taille précises de chaque enfant, et c&#8217;est à chacun de ses enfants de gérer sa barre de défilement, au besoin. Donc, si vous avez [...]]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.greenivory.fr%2F2009%2F03%2F05%2Fscrollbar-et-rowlayout%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.greenivory.fr/2009/03/05/scrollbar-et-rowlayout/" ></g:plusone>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Scrollbar et RowLayout" data-url="http://blog.greenivory.fr/2009/03/05/scrollbar-et-rowlayout/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p>L&#8217;utilisation d&#8217;un <code>RowLayout</code> dans un conteneur supprime la possibilité d&#8217;avoir une barre de défilement pour ce conteneur. En fait, la raison est assez simple : <code>RowLayout</code> calcule la position et la taille précises de chaque enfant, et c&#8217;est à chacun de ses enfants de gérer sa barre de défilement, au besoin.</p>
<p>Donc, <strong>si vous avez besoin d&#8217;une barre de défilement dans un panneau, n&#8217;utilisez pas </strong><code><strong>RowLayout</strong></code> : dans la plupart des cas, un <code>FlowLayout</code> peut être préférable. Utiliser un <code>FlowLayout</code> revient à utiliser un <code>RowLayout(Orientation.VERTICAL)</code> avec des contraintes <code>RowData(1, -1)</code> pour chaque enfant (c&#8217;est-à-dire : utiliser toute la largeur disponible et laisser chacun des enfants calculer sa propre hauteur).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.greenivory.fr/2009/03/05/scrollbar-et-rowlayout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

