Package de.sciss.swingosc

Source Code of de.sciss.swingosc.TabletView

/*
*  TabletView.java
*  SwingOSC
*
*  Copyright (c) 2005-2011 Hanns Holger Rutz. All rights reserved.
*
*  This software is free software; you can redistribute it and/or
*  modify it under the terms of the GNU General Public License
*  as published by the Free Software Foundation; either
*  version 2, june 1991 of the License, or (at your option) any later version.
*
*  This software is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
*  General Public License for more details.
*
*  You should have received a copy of the GNU General Public
*  License (gpl.txt) along with this software; if not, write to the Free Software
*  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
*
*  For further information, please contact Hanns Holger Rutz at
*  contact@sciss.de
*
*
*  Changelog:
*    26-Nov-07  created
*/
package de.sciss.swingosc;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import de.sciss.app.DynamicAncestorAdapter;
import de.sciss.app.DynamicListening;

import com.jhlabs.jnitablet.TabletEvent;
import com.jhlabs.jnitablet.TabletProximityEvent;
import com.jhlabs.jnitablet.TabletListener;
import com.jhlabs.jnitablet.TabletWrapper;

/**
@author    Hanns Holger Rutz
@version  0.59, 25-Feb-08
*/
public class TabletView
extends UserView
implements DynamicListening, TabletListener
{
  private boolean         added      = false;
  protected boolean         inside      = false;
  protected boolean         pressed      = false;
  private final List        listeners    = new ArrayList();
  protected TabletProximityEvent  lastEnterEvent;
  protected boolean        dispatchExit  = false;
 
  public TabletView()
  {
    super();
   
    new DynamicAncestorAdapter( this ).addTo( this );
    addMouseListener( new MouseAdapter() {
      public void mousePressed( MouseEvent e )
      {
//System.out.println( "mousePressed " + isEnabled() );
        if( isEnabled() ) {
          pressed = true;
        }
      }
     
      public void mouseReleased( MouseEvent e )
      {
        pressed = false;
//        if( !inside ) remove();
      }
     
      public void mouseEntered( MouseEvent e ) {
//System.out.println( "mouseEntered " + isEnabled() );
        if( isEnabled() ) {
          inside  = true;
          if( lastEnterEvent != null ) {
            dispatch( lastEnterEvent );
            lastEnterEvent  = null;
            dispatchExit  = true;
          }
//          add();
        }
      }

      public void mouseExited( MouseEvent e ) {
        inside = false;
//        if( !pressed ) remove();
      }
    });
   
    // XXX don't ask me why this...
//    add(); remove();
   
//    final TabletWrapper tabletWrapper = TabletWrapper.getInstance();
//    tabletWrapper.addTabletListener( this );
//    tabletWrapper.removeTabletListener( this );
  }
 
  private void remove()
  {
    if( added ) {
//      System.out.println( "removing" );
      TabletWrapper.getInstance().removeTabletListener( this );
      added = false;
    }
  }
 
  private void add()
  {
    if( !added ) {
//      System.out.println( "adding" );
      TabletWrapper.getInstance().addTabletListener( this );
      added = true;
    }
  }
 
  public void addTabletListener( TabletListener l )
  {
    listeners.add( l );
  }
 
  public void removeTabletListener( TabletListener l )
  {
    listeners.remove( l );
  }

//   ---------------- DynamicListening interface ----------------

  public void startListening()
  {
    add();
  }

  public void stopListening()
  {
    remove();
  }
 
//   ---------------- TabletListener interface ----------------

  public void tabletEvent( TabletEvent e )
  {
    switch( e.getID() ) {
    case MouseEvent.MOUSE_DRAGGED:
      // ignore messages that originate from drags that started outside the view
      if( !pressed ) return;
      break;
    case MouseEvent.MOUSE_MOVED:
      // ignore messages that originate from moves that left the view
      if( !inside ) return;
      break;
    case MouseEvent.MOUSE_PRESSED:
      // ignore messages that originate from clicking outside the view
      if( !inside ) return;
      break;
    case MouseEvent.MOUSE_RELEASED:
      // ignore messages that originate from clicking outside the view
      if( !pressed ) return;
      break;
    default:
      break;
    }

    for( Iterator iter = listeners.iterator(); iter.hasNext(); ) {
      ((TabletListener) iter.next()).tabletEvent( e );
    }
//    System.out.println( "TabletEvent" );
//    System.out.println( "  id                         " + e.getID() );
//    System.out.println( "  x                          " + e.getX() );
//    System.out.println( "  y                          " + e.getY() );
//    System.out.println( "  absoluteY                  " + e.getAbsoluteY() );
//    System.out.println( "  absoluteX                  " + e.getAbsoluteX() );
//    System.out.println( "  absoluteZ                  " + e.getAbsoluteZ() );
//    System.out.println( "  buttonMask                 " + e.getButtonMask() );
//    System.out.println( "  pressure                   " + e.getPressure() );
//    System.out.println( "  rotation                   " + e.getRotation() );
//    System.out.println( "  tiltX                      " + e.getTiltX() );
//    System.out.println( "  tiltY                      " + e.getTiltY() );
//    System.out.println( "  tangentialPressure         " + e.getTangentialPressure() );
//    System.out.println( "  vendorDefined1             " + e.getVendorDefined1() );
//    System.out.println( "  vendorDefined2             " + e.getVendorDefined2() );
//    System.out.println( "  vendorDefined3             " + e.getVendorDefined3() );
//    System.out.println();
  }

  protected void dispatch( TabletProximityEvent e )
  {
    for( Iterator iter = listeners.iterator(); iter.hasNext(); ) {
      ((TabletListener) iter.next()).tabletProximity( e );
    }
  }
 
  public void tabletProximity( TabletProximityEvent e )
  {
    if( e.isEnteringProximity() ) {
      if( inside ) {
        lastEnterEvent  = null;
        dispatch( e );
        dispatchExit  = true;
      } else {
        lastEnterEvent  = e;
      }
    } else {
      if( dispatchExit ) {
        dispatchExit  = false;
        dispatch( e );
      }
    }

//    System.out.println( "TabletProximityEvent" );
//    System.out.println( "  capabilityMask             " + e.getCapabilityMask() );
//    System.out.println( "  deviceID                   " + e.getDeviceID() );
//    System.out.println( "  enteringProximity          " + e.isEnteringProximity() );
//    System.out.println( "  pointingDeviceID           " + e.getPointingDeviceID() );
//    System.out.println( "  pointingDeviceSerialNumber " + e.getPointingDeviceSerialNumber() );
//    System.out.println( "  pointingDeviceType         " + e.getPointingDeviceType() );
//    System.out.println( "  systemTabletID             " + e.getSystemTabletID() );
//    System.out.println( "  tabletID                   " + e.getTabletID() );
//    System.out.println( "  uniqueID                   " + e.getUniqueID() );
//    System.out.println( "  vendorID                   " + e.getVendorID() );
//    System.out.println( "  vendorPointingDeviceType   " + e.getVendorPointingDeviceType() );
//    System.out.println();
  }
}
TOP

Related Classes of de.sciss.swingosc.TabletView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.