<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1626"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1626/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1626/atom/feed</id>
  <updated>2008-09-10T08:56:23+02:00</updated>
  <entry>
    <title>SWT - Drag &amp; Drop</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1626" />
    <id>http://artisan.karma-lab.net/node/1626</id>
    <published>2008-09-10T08:56:00+02:00</published>
    <updated>2008-09-10T08:56:23+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="java" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>
  Un petit exemple de drag & drop entre un navigateur (source URL) et une application SWING.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Un petit exemple de drag & drop entre un navigateur (source URL) et une application SWING.
</p>
<!--break-->
<p>
D'abord la classe qui gère le type de contenu URL

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">package</span> <span class="co2">net.karmaLab.thema.ui.dnd</span><span class="sy0">;</span><br />
<br />
<span class="kw1">import</span> <span class="co2">java.util.logging.Logger</span><span class="sy0">;</span><br />
<br />
<span class="kw1">import</span> <span class="co2">net.karmaLab.traces.Traces</span><span class="sy0">;</span><br />
<br />
<span class="kw1">import</span> <span class="co2">org.eclipse.swt.dnd.ByteArrayTransfer</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.swt.dnd.TransferData</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.swt.internal.gtk.OS</span><span class="sy0">;</span><br />
<br />
<span class="kw1">public</span> <span class="kw1">class</span> URLTransfer <span class="kw1">extends</span> ByteArrayTransfer <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> URLTransfer _instance <span class="sy0">=</span> <span class="kw1">new</span> URLTransfer<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> <span class="kw1">final</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> TYPE_NAMES <span class="sy0">=</span> <span class="br0">&#123;</span> <span class="st0">&quot;COMPOUND_TEXT&quot;</span>, <span class="st0">&quot;UTF8_STRING&quot;</span>, <span class="st0">&quot;TEXT&quot;</span>, <span class="st0">&quot;text/plain&quot;</span>, <span class="st0">&quot;text/html&quot;</span> <span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> <span class="kw1">final</span> <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> TYPE_IDS <span class="sy0">=</span> registerTypes<span class="br0">&#40;</span>TYPE_NAMES<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="coMULTI">/** static class logger. */</span><br />
&nbsp; &nbsp; &nbsp;<span class="kw1">private</span> <span class="kw1">static</span> Logger logger <span class="sy0">=</span> Traces.<span class="me1">LOGGER</span><span class="br0">&#40;</span>URLTransfer.<span class="kw1">class</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw1">static</span> URLTransfer getInstance<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> _instance<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; &nbsp;* @param typeNames<br />
&nbsp; &nbsp; &nbsp;* @return<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> registerTypes<span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> typeNames<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> ids <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw4">int</span><span class="br0">&#91;</span>typeNames.<span class="me1">length</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> typeNames.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ids<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">=</span> registerType<span class="br0">&#40;</span>typeNames<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> ids<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; @Override <span class="kw1">protected</span> <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> getTypeIds<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> TYPE_IDS<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; @Override <span class="kw1">protected</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> getTypeNames<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> TYPE_NAMES<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; &nbsp;* @param transferData<br />
&nbsp; &nbsp; &nbsp;* @return<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> hex<span class="br0">&#40;</span>TransferData transferData<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AInteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Integer</span></a>.<span class="me1">toHexString</span><span class="br0">&#40;</span>transferData.<span class="me1">type</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; @Override <span class="kw1">public</span> <span class="kw4">boolean</span> isSupportedType<span class="br0">&#40;</span>TransferData transferData<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">boolean</span> res <span class="sy0">=</span> <span class="kw1">super</span>.<span class="me1">isSupportedType</span><span class="br0">&#40;</span>transferData<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> match <span class="sy0">=</span> <span class="st0">&quot;none&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> TYPE_IDS.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>TYPE_IDS<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">==</span> transferData.<span class="me1">type</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; match <span class="sy0">=</span> TYPE_NAMES<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; logger.<span class="me1">config</span><span class="br0">&#40;</span><span class="st0">&quot;Is Supporteed:&quot;</span> <span class="sy0">+</span> hex<span class="br0">&#40;</span>transferData<span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot;[&quot;</span> <span class="sy0">+</span> match <span class="sy0">+</span> <span class="st0">&quot;:&quot;</span> <span class="sy0">+</span> res <span class="sy0">+</span> <span class="st0">&quot;]&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> res<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; @Override <span class="kw1">public</span> <span class="kw4">void</span> javaToNative<span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AObject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> object, TransferData transferData<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;javaToNative called&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; @Override <span class="kw1">public</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AObject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> nativeToJava<span class="br0">&#40;</span>TransferData transferData<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>isSupportedType<span class="br0">&#40;</span>transferData<span class="br0">&#41;</span> <span class="sy0">||</span> transferData.<span class="me1">pValue</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> size <span class="sy0">=</span> transferData.<span class="me1">format</span> <span class="sy0">*</span> transferData.<span class="me1">length</span> <span class="sy0">/</span> <span class="nu0">8</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>size <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> buffer <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw4">byte</span><span class="br0">&#91;</span>size<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; OS.<span class="me1">memmove</span><span class="br0">&#40;</span>buffer, transferData.<span class="me1">pValue</span>, size<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">new</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#40;</span>buffer, <span class="nu0">0</span>, buffer.<span class="me1">length</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="br0">&#41;</span>.<span class="me1">trim</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>
</p>
<p>
  Utilisation :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp; &nbsp;<span class="kw1">private</span> <span class="kw1">final</span> <span class="kw1">class</span> DropItemAdapter <span class="kw1">extends</span> DropTargetAdapter <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;@Override <span class="kw1">public</span> <span class="kw4">void</span> dragOver<span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ADropTargetEvent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">DropTargetEvent</span></a> event<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// try {</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// if (getURIHandleres((TreeItem) event.item, new URI((String) event.data)).size() == 0) {</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// System.out.println((String) event.data);</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// }</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// }</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// catch (URISyntaxException e) {</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// e.printStackTrace();</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// }</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp;@Override <span class="kw1">public</span> <span class="kw4">void</span> drop<span class="br0">&#40;</span><span class="kw1">final</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ADropTargetEvent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">DropTargetEvent</span></a> event<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AMenu+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Menu</span></a> popUpMenu <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;popUpMenu <span class="sy0">=</span> buildNewItemMenu<span class="br0">&#40;</span><span class="br0">&#40;</span>TreeItem<span class="br0">&#41;</span> event.<span class="me1">item</span>, <span class="kw1">new</span> URI<span class="br0">&#40;</span><span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#41;</span> event.<span class="me1">data</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">catch</span> <span class="br0">&#40;</span>URISyntaxException e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;e.<span class="me1">printStackTrace</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;popUpMenu.<span class="me1">setVisible</span><span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp;<span class="br0">&#125;</span><br />
<br />
<a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ADropTarget+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">DropTarget</span></a> dt <span class="sy0">=</span> <span class="kw1">new</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ADropTarget+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">DropTarget</span></a><span class="br0">&#40;</span>tree, DND.<span class="me1">DROP_DEFAULT</span> <span class="sy0">|</span> DND.<span class="me1">DROP_COPY</span> <span class="sy0">|</span> DND.<span class="me1">DROP_LINK</span> <span class="sy0">|</span> DND.<span class="me1">DROP_MOVE</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;dt.<span class="me1">setTransfer</span><span class="br0">&#40;</span><span class="kw1">new</span> Transfer<span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="br0">&#123;</span> URLTransfer.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;dt.<span class="me1">addDropListener</span><span class="br0">&#40;</span><span class="kw1">new</span> DropItemAdapter<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
  </div>
  
  </div>
</p>    ]]></content>
  </entry>
</feed>
