Never been to DZone Snippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

« Newer Snippets
Older Snippets »
Showing 1-1 of 1 total  RSS 

Simple Mouse Wheel support for GWT

I was looking to a way to use the mouse wheel in my GWT app, but I didn“t find a straightforward way... so today I spend my morning learning JSNI and, with some piece of code I found on the Internet, I coded my own approach... Feel free to use anywere .. Hope that it might be useful for someone else too...

   1  
   2  public interface MouseWheelListener {
   3     
   4      public void onMouseWheelUp(int intensity);
   5     
   6      public void onMouseWheelDown(int intensity);
   7     
   8  }
   9  
  10  public class MouseWheel {
  11     
  12      private MouseWheel(Element e, MouseWheelListener listener) {
  13          attachMouseWheelListener(e, listener);
  14      }
  15     
  16      /**
  17       * Sets a MouseWheelListener to a given Element
  18       */
  19      public static void setMouseWheelListener(Element e, MouseWheelListener listener) {
  20          new MouseWheel(e, listener);
  21      }
  22     
  23     
  24      /**
  25       * This method is used by FF
  26       * @param event
  27       */
  28      private static native void dispatchMouseWheelEvent(JavaScriptObject event) /*-{
  29         
  30          @br.com.example.client.util.MouseWheel::dispatchMouseWheelEvent(Lcom/google/gwt/core/client/JavaScriptObject;Lbr/com/example/client/util/MouseWheelListener;)(event, this.__mousewheellistener);
  31     
  32      }-*/;
  33     
  34      /**
  35       * This method is used by IE and FF
  36       * Part of this method was retrieved from http://adomas.org/notes/mouse-wheel.html
  37       *
  38       * @param event
  39       * @param listener
  40       */
  41      private static native void dispatchMouseWheelEvent(JavaScriptObject event, MouseWheelListener listener) /*-{
  42  
  43           if (!event) event = $wnd.event; // For IE
  44  
  45           var delta = 0;
  46           if (event.wheelDelta)             // IE case, delta is multiple of 120
  47                delta = event.wheelDelta / 120;
  48           else if (event.detail )            // Mozilla case
  49                delta = -event.detail / 3;   // different sign and multiple of 3
  50          
  51           if ( delta > 0 ) {
  52               listener.@br.com.example.client.util.MouseWheelListener::onMouseWheelUp(I)(delta);
  53           } else {
  54               listener.@br.com.example.client.util.MouseWheelListener::onMouseWheelDown(I)(-delta);
  55           }
  56  
  57           //taken from http://adomas.org/javascript-mouse-wheel/test2.html
  58           if (event.preventDefault)
  59               event.preventDefault();
  60           event.returnValue = false;
  61  
  62      }-*/;
  63     
  64     
  65      private native void attachMouseWheelListener(Element e, MouseWheelListener listener) /*-{
  66         
  67          e.__mousewheellistener = listener;
  68         
  69          // for FF
  70          if (e.addEventListener) {
  71              e.addEventListener('DOMMouseScroll', @br.com.example.client.util.MouseWheel::dispatchMouseWheelEvent(Lcom/google/gwt/core/client/JavaScriptObject;), false);
  72              return;
  73          }
  74         
  75          // for IE
  76          e.onmousewheel = function(event) {
  77              @br.com.example.client.util.MouseWheel::dispatchMouseWheelEvent (Lcom/google/gwt/core/client/JavaScriptObject;Lbr/com/example/client/util/MouseWheelListener;)(event, this.__mousewheellistener);
  78          }
  79         
  80      }-*/;
  81     
  82  }



And here is how to use it:

   1  
   2  
   3          MouseWheel.setMouseWheelListener(RootPanel.get("slot2").getElement(), new MouseWheelListener() {
   4  
   5              public void onMouseWheelUp(int intensity) {
   6                  Window.alert("up.. " + intensity);
   7              }
   8  
   9              public void onMouseWheelDown(int intensity) {
  10                  Window.alert("down..." + intensity);
  11              }
  12         
  13          }); 
  14  


Remember to replace my hardcoded package name (br.com.example) for your own... If you have any suggestion or critic, feel free to tell me... "tserafim" is my gmail username...
« Newer Snippets
Older Snippets »
Showing 1-1 of 1 total  RSS