org.diamondspin
Class DSTabletopPane

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JLayeredPane
                  extended by javax.swing.JDesktopPane
                      extended by org.diamondspin.DSTabletopPane
All Implemented Interfaces:
KeyListener, MouseListener, MouseMotionListener, ImageObserver, MenuContainer, Serializable, EventListener, Accessible, DSConstants
Direct Known Subclasses:
DSJoglTabletopPane

public class DSTabletopPane
extends JDesktopPane
implements MouseListener, MouseMotionListener, KeyListener, ImageObserver, DSConstants

DSTabletopPane is the general circular container which handles menus, views in the middle, elements on top and dispatches the events. It can be overloaded to build your own app.

Copyright 2002-2009 DiamondSpin project. All Rights Reserved.

Permission to use, copy, modify and distribute this software and its documentation for educational, research and non-profit purposes, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and the following three paragraphs appear in all copies.

To request Permission to incorporate this software into commercial products contact one of the authors of the project.
  • Frederic Vernier (frederic.vernier@limsi.fr)
  • Chia Shen (chia_shen@harvard.edu)
  • Guillaume Besacier (guillaume.besacier@limsi.fr)
  • Daniel Wigdor (dwigdor@microsoft.com)

IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCidENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

THE AUTHORS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVidED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS HAS NO OBLIGATIONS TO PROVidE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

created ???

Regexp used for refactoring 09/2003 :
  • DSPopupMenus\[([^\]]*)\][\s]\=[\s]([^;]*); => DSPopupMenuManager1.setDSPopupMenu($2, $1);
  • DSPopupMenus\[([^\]]*)\] => DSPopupMenuManager1.getDSPopupMenu($1)

    Version:
    : 1.0
    Author:
    : Frederic vernier, (frederic.vernier@gmail.com) and Meredith Ringel (merrie@stanford.edu) under Chia Shen supervision (chia_shen@harvard.edu).
    See Also:
    Serialized Form

    Nested Class Summary
     
    Nested classes/interfaces inherited from class javax.swing.JDesktopPane
    JDesktopPane.AccessibleJDesktopPane
     
    Nested classes/interfaces inherited from class javax.swing.JLayeredPane
    JLayeredPane.AccessibleJLayeredPane
     
    Nested classes/interfaces inherited from class javax.swing.JComponent
    JComponent.AccessibleJComponent
     
    Nested classes/interfaces inherited from class java.awt.Container
    Container.AccessibleAWTContainer
     
    Nested classes/interfaces inherited from class java.awt.Component
    Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
     
    Field Summary
    protected  int[] ActionMode
              Mode that indicates what each user is doing.
    protected  DSView activeView
              The actual view (the one the user sees ) capable to accept events.
    protected  AffineTransform AffineTransform2
               
    protected  double angleInit
              To save the angle of the view when starts to drag&drop it.
    protected  Thread AsynchronousRepaint
              To refresh the interface asynchronously to the user events.
    protected  BufferedImage BackgroundImage
              An image to display in background
    protected  BufferedImage BackgroundTableImage
               
    protected  BufferedImage BackgroundTableImage24
               
    protected  double betaInit
              as AngleInit saves the angle where the drag&drop started, BetaInit save the angle of the dragged element when it starts to move.
    static int BLACKHOLE
              One of the three fisheye possible modes
    protected  Graphics BTIHiddenGraphics
               
    protected  Graphics BTIHiddenGraphics24
               
    protected  int DeformationMode
              The fisheye mode actually used
    protected  double distInit
               
    protected  boolean DoubleBuffered
               
    static int DRAG_TABLE
              Input mode: the drag events are panning the view
    protected  DSElement[] dragObjects
              The list of the elements in the top layer, i.e., the ones which are actually drag & dropped by the users.
    protected  DSMenuBarManager dsMenuBarManager1
              The collaborator in charge of handling menubars
    protected  DSPopupMenuManager dsPopupMenuManager1
              The collaborator in charge of handling popup menus
    protected  EventListenerList DSTableListenerList
              register a DSSTablelistener
    protected  DSView DSViewEmpty
              an empty view to start.
    protected  DSEngine engine
               
    protected  double facingAngle
              Which angle the elements must face (if magnetized).
    protected  boolean first_repaint
               
    protected  BufferedImage HiddenBuffer
               
    protected  Graphics HiddenGraphics
               
    static int HILL
              One of the three fisheye possible modes
    static int IMG_16BITS
               
    static int IMG_32BITS
               
    protected  double MagnetAngle
              Angle where the magnet magnetised the table
    protected  int Magnetid
               
    protected  double magnetRatio
              How much the element must face a certain angle (0 = face the border, 1 = face totally the angle)
    static int MOUSE_STABILITY
               
    static int MOVE_ELEMENT
              Input mode: the drag events are moving the selected element like a window.
    static int MOVE_MENU
              Input mode: the drag events are moving a menubar
    protected  int nbDisp
               
    protected  int NbRepaint
               
    protected  int NbRepaintAll
               
    protected static int NBSEC
               
    protected  Float NextAngleToFace
               
    static int NORMAL
              One of the three fisheye possible modes
    protected  Float oldAngleToFace
              Which angle the elements faced (used during animation)
    protected  Point oldTableCenter
               
    static int ROTATE_TABLE
              Input mode: the drag events are moving the table.
    protected  double saveAngle
              save the angle to use it in priority over MagnetAngle
    protected  AffineTransform SavedMenubarsGraphicsTransform
               
    static int SHADOW_SIZE
              for the active element, so all active element will have a shadow of the same size.
    protected  boolean Squarified
              if the menubars magnetize the documents to the closest border direction instead of the direction of the center of the menubar
    protected  Point startDrag
               
    protected  double tableAngle
               
    protected  Point tableCenter
               
    protected  int tableRadius
              The radius of the circular table.
    protected  double tableZoom
               
    protected  long TimeStart
               
    protected  Graphics2D topScreenGraphics
               
    protected  BufferedImage topScreenImage
               
    protected  int[] touchOrder
               
    static int TWO_FINGERS
              Input mode: the drag events are panning the view
    static int WAITING
              Input mode: waiting for input
    static int ZOOM_TABLE
              Input mode: the drag events are moving the table.
    protected  double zoomInit
               
     
    Fields inherited from class javax.swing.JDesktopPane
    LIVE_DRAG_MODE, OUTLINE_DRAG_MODE
     
    Fields inherited from class javax.swing.JLayeredPane
    DEFAULT_LAYER, DRAG_LAYER, FRAME_CONTENT_LAYER, LAYER_PROPERTY, MODAL_LAYER, PALETTE_LAYER, POPUP_LAYER
     
    Fields inherited from class javax.swing.JComponent
    accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
     
    Fields inherited from class java.awt.Component
    BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
     
    Fields inherited from interface java.awt.image.ImageObserver
    ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
     
    Fields inherited from interface org.diamondspin.DSConstants
    COLLAGE_TOP_COLOR, COLLAGE_TOP_THICKNESS, DRAW_COLLAGE_TOP
     
    Constructor Summary
    DSTabletopPane()
              Constructor.
     
    Method Summary
     void activateDSComponents(DSFrame f)
               
     void activateDSComponents(DSFrame f, Component c)
               
     void activateFakeComponent(Component Component_Arg)
              Do what's necessary to initialize a swing component without displaying it on screen (what swing does only when it's displayed directly on the screen but here it will never happen)
     Component add(Component c)
              override this function to register piler and re-route call to the right thread if necessary to avoid deadlock
     void addDSMenuBar(DSMenuBar DSMenuBar_Arg)
               
     void addDSStrokeListener(DSStrokeListener listener_Arg)
              DSStrokeListeners listens for stroke drawing on the tabletop
     void addDSTableListener(DSTableListener l)
              Adds a listener to the DSTableListenerList attribute of the DSTabletopPane object
     int checkElementAsEventTarget(MouseEvent event)
              checks if an event(mouse, DT, any spatial event) is targetting an element or not (-1)
     void collapseMenu(int id)
               
     void demoteAllDragElementsToTable()
               
     void demoteDragElementToTable(DSElement dsElement)
               
     void demoteEverythingForUser(int id)
              Special gift function from fred to Kate in memory of "dropElementOnTop()".
     void fireStrokeFinished(DSStroke str)
              Fire the "new stroke" events to the subscribers
     void fireTableEngineChanged()
               
     void fireTableGrabbed()
               
     void fireTableReleased()
               
     void fireTableRotated()
               
     void fireTableTranslated()
               
     void fireTableViewChanged()
               
     void fireTableZoomed()
               
     int getActionMode(int id)
              gets the actionMode of a given user
     DSView getActiveView()
               
     double getAngleInit()
               
     BufferedImage getBackgroundImage()
               
     BufferedImage getBackgroundTableImage()
               
     BufferedImage getBackgroundTableImage24()
               
     double getBetaInit()
               
    static int getCurrentUser()
              added by Merrie to get current user id fromthe thread name
     int getDeformationMode()
               
     DSElement getDragObject(int id)
               
     DSMenuBar getDSMenuBar(int index)
               
     int getDSMenuBarCount()
               
     ArrayList<DSMenuBar> getDSMenuBarList()
               
     DSMenuBarManager getDSMenuBarManager()
               
     DSPopupMenu getDSPopupMenu(int id)
              Gets the PopupMenu attribute of the DSTabletopPane object
     DSPopupMenuManager getDSPopupMenuManager()
               
     DSStrokeListener[] getDSStrokeListener()
               
     DSEngine getEngine()
               
     double getFacingAngle()
               
     int getGlobalAction()
               
     int getIDForDragObject(DSElement dsElement)
               
     BufferedImage getImage()
              Gets the image attribute of the DSTabletopPane object
     double getMagnetAngle()
               
     int getMagnetid()
               
     double getMagnetRatio()
               
    static int getMaxFingerCount()
               
    static int getMaxUserCount()
               
     double getMenuAngle(int id)
               
     Float getNextAngleToFace()
               
     Float getOldAngleToFace()
               
     double getPreferredAngle(int id)
              return a preferred angle for a given user.
     int getRadius()
               
     double getSaveAngle()
               
     double getScale(double d, double alpha, double scale)
              This could be seen as part of the transformTable() method but it is better to separate it so element can call it to know which scale factor is really used by the matrix.
     JInternalFrame getSelectedFrame()
               
     double getTableAngle()
               
     Point getTableCenter()
               
     double getTableZoom()
               
     int[] getTouchOrder()
               
     Color getUserColor(int id)
              Gets the Color of the giver user
     boolean hasAMenuBar(int id)
               
     boolean imageUpdate(Image Image_Arg, int Infoflags_Arg, int X_Arg, int Y_Arg, int Width_Arg, int Height_Arg)
              when an image finish to load attached to this component we want to launch a repaintAll() otherwise we call the super.imageUpdate()
     void init(int Width_Arg, int Height_Arg, int bitNumber_Arg)
              Init the repaint process.
    protected  void initDoubleBuffering(int bitNumber_Arg)
              Initialisation of the double buffering system.
     boolean isDisplayCursorForUser(int userid)
               
     boolean isDragObject(DSElement dsElement)
               
     boolean isDSMenuBarAt(double alpha)
               
     boolean isFocusable()
              have to return true to be able to receive key events
     boolean isMenuBarNearUser(DSMenuBar menubar, int id)
               
     boolean isPerformingAction()
               
     boolean isSquarified()
               
     void keyPressed(KeyEvent event)
              Description of the Method
     void keyReleased(KeyEvent KeyEvent_Arg)
              Description of the Method
     void keyTyped(KeyEvent event)
              Description of the Method
     void mouseClicked(MouseEvent event)
               
     void mouseClicked2(MouseEvent MouseEvent_Arg)
              when the user's finger press and release at the same location
     void mouseDragged(MouseEvent event)
              mouseDragged callback
    protected  void mouseDragged2(MouseEvent event)
              mouseDragged callback
     void mouseEntered(MouseEvent MouseEvent_Arg)
              Unused callback
     void mouseExited(MouseEvent MouseEvent_Arg)
              Unused callback
     void mouseMoved(MouseEvent MouseEvent_Arg)
              The mouse moved (without button pressed).
     void mousePressed(MouseEvent event)
              handle a mouse press event from the mouse.
    protected  void mousePressed2(MouseEvent event)
              handle a mouse press from any device.
     boolean mousePressedDragObject(MouseEvent event, int id)
              Description of the Method
     void mouseReleased(MouseEvent event)
              mouseDragged callback
    protected  void mouseReleased2(MouseEvent event)
              When the mouse is released, the system has to change mode, repaint the table in nice if it was rotated, etc.
     void moveToFront(Component f)
               
     void newTouch(int id)
              update Touch order which says which user touched last the table
     void paint(Graphics g)
               
    protected  void paintInterface(Graphics2D Graphics_Arg)
              Display the background then the element on top given by parameter
     void paintTable()
              Merge the background and the view for fast rotation only.
    protected  void paintTable(Graphics g)
              Display the view on the table using the DiamondSpin layout.
     void removeAllDSMenuBars()
               
     void removeDragObject(DSElement dsElement)
              discard a dragged element from one of the 5 users.
     void removeDSMenuBar(DSMenuBar menubar)
               
     void removeDSStrokeListener(DSStrokeListener l)
               
     void removeDSTableListener(DSTableListener l)
              unregister a DSTable listener
     void repaint()
              As it is asynchronous repaint we just have to increase a counter.
     void repaintAll()
              repaint everything, refresh all the layer.
     void restoreAngle()
              restore the angle saved by saveAngle()
     void saveAngle()
               
     BufferedImage scaleImageForBackground(BufferedImage img)
              Change the image to display in background
     void setActionMode(int mode, int id)
              change the action mode for a given user
     void setActiveView(DSView view)
              change the active view of the interface
     void setAngleInit(double tangle)
               
     void setAngleToFace(double AngleToFace_Arg)
               
     void setBackgroundImage(BufferedImage Image_Arg)
              Change the image to display in background
     void setBetaInit(double angle)
               
     void setDeformationMode(int DeformationMode_Arg)
              Sets the deformationMode attribute of the DSTabletopPane object
     void setDesktopManager(DesktopManager d)
               
     void setDisplayCursorForUser(int userid, boolean displayCursor)
               
     void setDragObject(DSElement elem, int id)
              set the element on top for one of the users.
     void setEngine(DSEngine engine)
               
     void setMagnetAngle(double tangle)
               
     void setMagnetid(int id)
               
     void setMagnetRatio(double PercentFace_Arg)
               
     void setNextAngleToFace(Float tangle)
               
     void setOldAngleToFace(Float angle)
              Sets the oldAngleToFace attribute of the PoliciesContainer object
     void setPopupMenu(DSPopupMenu DSPopupMenu_Arg, int id)
              Sets a PopupMenu for a given user
     void setSelectedFrame(JInternalFrame f)
               
     void setTableAngle(double tangle)
              change the global angle of the current view -> turn the table
     void setTableCenter(Point center)
              change the center of the table
     void setTableZoom(double zoom)
              change the global angle of the current view -> turn the table
     void setUserColor(int id, Color col)
              Sets the userColor attribute of the DSTabletopPane object
     void startDragTable(int x, int y, int id)
              Start panning the view.
     void startRotateTable(int x, int y, int id)
              Start rotating the table.
     void startsStroke(MouseEvent event, int id)
              Start to draw a Stroke.
     void startsStroke(MouseEvent event, int id, DSElement attachment)
              Start to draw a Stroke.
     void startZoomTable(int x, int y, int id)
              Start zooming the view.
     void stealDragObject(MouseEvent MouseEvent_Arg, int id0_Arg, int index_Arg)
              Steal a drag object from another user
     AffineTransform transformTable2(double d, double alpha, double beta, double scale, double tangle, double tzoom, int elType, int userid)
              Return an AffineTransform object to apply to a Graphics2D before drawing an element.
     void unsetAllPopupMenus()
              discard all the popup menus ! usefull for switching views
     void unsetAllPopupMenusForElement(DSElement dsElement)
              Unset the popup menu for a given element (for instance if the element is deleted, modified, etc.)
     void unsetPopupMenu(int id)
              unset the popup menu for a given user
     void waitRepaintFinished()
              Wait until the current asynchronous repaints are all finished
     
    Methods inherited from class javax.swing.JDesktopPane
    addImpl, getAccessibleContext, getAllFrames, getAllFramesInLayer, getDesktopManager, getDragMode, getUI, getUIClassID, paramString, remove, removeAll, selectFrame, setComponentZOrder, setDragMode, setUI, updateUI
     
    Methods inherited from class javax.swing.JLayeredPane
    getComponentCountInLayer, getComponentsInLayer, getComponentToLayer, getIndexOf, getLayer, getLayer, getLayeredPaneAbove, getObjectForLayer, getPosition, highestLayer, insertIndexForLayer, isOptimizedDrawingEnabled, lowestLayer, moveToBack, putLayer, setLayer, setLayer, setPosition
     
    Methods inherited from class javax.swing.JComponent
    addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
     
    Methods inherited from class java.awt.Container
    add, add, add, add, addContainerListener, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, removeContainerListener, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
     
    Methods inherited from class java.awt.Component
    action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    tableRadius

    protected int tableRadius
    The radius of the circular table.

    To do:
    maybe compute this instead of hardcoding it ?

    activeView

    protected DSView activeView
    The actual view (the one the user sees ) capable to accept events.


    oldAngleToFace

    protected Float oldAngleToFace
    Which angle the elements faced (used during animation)


    dsMenuBarManager1

    protected DSMenuBarManager dsMenuBarManager1
    The collaborator in charge of handling menubars


    dsPopupMenuManager1

    protected DSPopupMenuManager dsPopupMenuManager1
    The collaborator in charge of handling popup menus


    MOUSE_STABILITY

    public static final int MOUSE_STABILITY
    See Also:
    Constant Field Values

    Magnetid

    protected int Magnetid

    magnetRatio

    protected double magnetRatio
    How much the element must face a certain angle (0 = face the border, 1 = face totally the angle)


    facingAngle

    protected double facingAngle
    Which angle the elements must face (if magnetized). During an animation AngleToFace is between OldAngleToFace and MagnetAngle. At the end it should be = MagnetAngle


    NextAngleToFace

    protected Float NextAngleToFace

    Squarified

    protected boolean Squarified
    if the menubars magnetize the documents to the closest border direction instead of the direction of the center of the menubar


    MagnetAngle

    protected double MagnetAngle
    Angle where the magnet magnetised the table


    saveAngle

    protected double saveAngle
    save the angle to use it in priority over MagnetAngle


    oldTableCenter

    protected Point oldTableCenter

    tableCenter

    protected Point tableCenter

    tableAngle

    protected double tableAngle

    tableZoom

    protected double tableZoom

    angleInit

    protected double angleInit
    To save the angle of the view when starts to drag&drop it.


    startDrag

    protected Point startDrag

    betaInit

    protected double betaInit
    as AngleInit saves the angle where the drag&drop started, BetaInit save the angle of the dragged element when it starts to move. for instance it could return there if dropped at the wrong place


    zoomInit

    protected double zoomInit

    distInit

    protected double distInit

    DSTableListenerList

    protected EventListenerList DSTableListenerList
    register a DSSTablelistener


    NORMAL

    public static final int NORMAL
    One of the three fisheye possible modes

    See Also:
    Constant Field Values

    BLACKHOLE

    public static final int BLACKHOLE
    One of the three fisheye possible modes

    See Also:
    Constant Field Values

    HILL

    public static final int HILL
    One of the three fisheye possible modes

    See Also:
    Constant Field Values

    DeformationMode

    protected int DeformationMode
    The fisheye mode actually used


    AsynchronousRepaint

    protected Thread AsynchronousRepaint
    To refresh the interface asynchronously to the user events. Here is an other thread !


    SHADOW_SIZE

    public static final int SHADOW_SIZE
    for the active element, so all active element will have a shadow of the same size. The function is element dependant to follow the shape of the element

    See Also:
    Constant Field Values

    DoubleBuffered

    protected boolean DoubleBuffered

    HiddenBuffer

    protected BufferedImage HiddenBuffer

    BackgroundTableImage

    protected BufferedImage BackgroundTableImage

    BackgroundTableImage24

    protected BufferedImage BackgroundTableImage24

    topScreenImage

    protected BufferedImage topScreenImage

    HiddenGraphics

    protected Graphics HiddenGraphics

    BTIHiddenGraphics

    protected Graphics BTIHiddenGraphics

    BTIHiddenGraphics24

    protected Graphics BTIHiddenGraphics24

    topScreenGraphics

    protected Graphics2D topScreenGraphics

    SavedMenubarsGraphicsTransform

    protected AffineTransform SavedMenubarsGraphicsTransform

    nbDisp

    protected int nbDisp

    NbRepaint

    protected int NbRepaint

    NbRepaintAll

    protected int NbRepaintAll

    NBSEC

    protected static final int NBSEC
    See Also:
    Constant Field Values

    IMG_16BITS

    public static final int IMG_16BITS
    See Also:
    Constant Field Values

    IMG_32BITS

    public static final int IMG_32BITS
    See Also:
    Constant Field Values

    first_repaint

    protected boolean first_repaint

    TimeStart

    protected long TimeStart

    engine

    protected DSEngine engine

    AffineTransform2

    protected AffineTransform AffineTransform2

    touchOrder

    protected int[] touchOrder

    DSViewEmpty

    protected DSView DSViewEmpty
    an empty view to start. creating an other view is a good idea to use the library


    WAITING

    public static final int WAITING
    Input mode: waiting for input

    See Also:
    Constant Field Values

    MOVE_ELEMENT

    public static final int MOVE_ELEMENT
    Input mode: the drag events are moving the selected element like a window.

    See Also:
    Constant Field Values

    MOVE_MENU

    public static final int MOVE_MENU
    Input mode: the drag events are moving a menubar

    See Also:
    Constant Field Values

    ROTATE_TABLE

    public static final int ROTATE_TABLE
    Input mode: the drag events are moving the table. release will return to WAITING

    See Also:
    Constant Field Values

    DRAG_TABLE

    public static final int DRAG_TABLE
    Input mode: the drag events are panning the view

    See Also:
    Constant Field Values

    TWO_FINGERS

    public static final int TWO_FINGERS
    Input mode: the drag events are panning the view

    See Also:
    Constant Field Values

    ZOOM_TABLE

    public static final int ZOOM_TABLE
    Input mode: the drag events are moving the table. release will return to WAITING

    See Also:
    Constant Field Values

    ActionMode

    protected int[] ActionMode
    Mode that indicates what each user is doing.


    dragObjects

    protected DSElement[] dragObjects
    The list of the elements in the top layer, i.e., the ones which are actually drag & dropped by the users.


    BackgroundImage

    protected BufferedImage BackgroundImage
    An image to display in background

    Constructor Detail

    DSTabletopPane

    public DSTabletopPane()
    Constructor. No argument. should be only one DSTabletopPane per circular table.

    Method Detail

    setDesktopManager

    public void setDesktopManager(DesktopManager d)
    Overrides:
    setDesktopManager in class JDesktopPane

    getRadius

    public int getRadius()
    Returns:
    The distance from the center of the display to the closest border

    getOldAngleToFace

    public Float getOldAngleToFace()
    Returns:
    which angle the elements faced (used during animation)

    setOldAngleToFace

    public void setOldAngleToFace(Float angle)
    Sets the oldAngleToFace attribute of the PoliciesContainer object


    getMaxUserCount

    public static int getMaxUserCount()

    getMaxFingerCount

    public static int getMaxFingerCount()

    getDSMenuBarManager

    public DSMenuBarManager getDSMenuBarManager()

    getDSPopupMenuManager

    public DSPopupMenuManager getDSPopupMenuManager()

    getDSMenuBarList

    public ArrayList<DSMenuBar> getDSMenuBarList()

    hasAMenuBar

    public boolean hasAMenuBar(int id)

    getMenuAngle

    public double getMenuAngle(int id)

    collapseMenu

    public void collapseMenu(int id)

    isMenuBarNearUser

    public boolean isMenuBarNearUser(DSMenuBar menubar,
                                     int id)

    getDSMenuBarCount

    public int getDSMenuBarCount()

    getDSMenuBar

    public DSMenuBar getDSMenuBar(int index)

    removeDSMenuBar

    public void removeDSMenuBar(DSMenuBar menubar)

    removeAllDSMenuBars

    public void removeAllDSMenuBars()

    addDSMenuBar

    public void addDSMenuBar(DSMenuBar DSMenuBar_Arg)

    isDSMenuBarAt

    public boolean isDSMenuBarAt(double alpha)

    getMagnetid

    public int getMagnetid()

    setMagnetid

    public void setMagnetid(int id)

    getMagnetRatio

    public double getMagnetRatio()

    setMagnetRatio

    public void setMagnetRatio(double PercentFace_Arg)

    getFacingAngle

    public double getFacingAngle()

    setAngleToFace

    public void setAngleToFace(double AngleToFace_Arg)

    setNextAngleToFace

    public void setNextAngleToFace(Float tangle)

    getNextAngleToFace

    public Float getNextAngleToFace()

    isSquarified

    public boolean isSquarified()

    getMagnetAngle

    public double getMagnetAngle()

    setMagnetAngle

    public void setMagnetAngle(double tangle)

    getSaveAngle

    public double getSaveAngle()

    saveAngle

    public void saveAngle()

    restoreAngle

    public void restoreAngle()
    restore the angle saved by saveAngle()

    See Also:
    saveAngle()

    getAngleInit

    public double getAngleInit()

    setAngleInit

    public void setAngleInit(double tangle)

    getBetaInit

    public double getBetaInit()

    setBetaInit

    public void setBetaInit(double angle)

    addDSStrokeListener

    public void addDSStrokeListener(DSStrokeListener listener_Arg)
    DSStrokeListeners listens for stroke drawing on the tabletop


    removeDSStrokeListener

    public void removeDSStrokeListener(DSStrokeListener l)

    getDSStrokeListener

    public DSStrokeListener[] getDSStrokeListener()

    fireStrokeFinished

    public void fireStrokeFinished(DSStroke str)
    Fire the "new stroke" events to the subscribers

    Parameters:
    str - the stroke which is finished

    startsStroke

    public void startsStroke(MouseEvent event,
                             int id)
    Start to draw a Stroke.

    Parameters:
    event - The mouse event which starts the stroke
    id - The id which indicates WHO is starting the stroke. We are in a multiple Input environement

    startsStroke

    public void startsStroke(MouseEvent event,
                             int id,
                             DSElement attachment)
    Start to draw a Stroke.

    Parameters:
    event - The mouse event which starts the stroke
    id - The id which indicates WHO is starting the stroke. We are in a multiple Input environement
    attachment - stroke may be attached to an other element (drawn on top for instance) that need to be repainted under

    add

    public Component add(Component c)
    override this function to register piler and re-route call to the right thread if necessary to avoid deadlock

    Overrides:
    add in class Container
    Parameters:
    c - add a compoennt in the awt component tree
    Returns:
    the compoenent added

    addDSTableListener

    public void addDSTableListener(DSTableListener l)
    Adds a listener to the DSTableListenerList attribute of the DSTabletopPane object

    Parameters:
    l - The feature to be added to the DSTableListener attribute

    removeDSTableListener

    public void removeDSTableListener(DSTableListener l)
    unregister a DSTable listener

    Parameters:
    l - Description of the Parameter

    fireTableViewChanged

    public void fireTableViewChanged()

    fireTableEngineChanged

    public void fireTableEngineChanged()

    fireTableGrabbed

    public void fireTableGrabbed()

    fireTableReleased

    public void fireTableReleased()

    fireTableRotated

    public void fireTableRotated()

    fireTableZoomed

    public void fireTableZoomed()

    fireTableTranslated

    public void fireTableTranslated()

    getGlobalAction

    public int getGlobalAction()
    Returns:
    the global action if there is one, WAITING otherwise.

    isPerformingAction

    public boolean isPerformingAction()
    Returns:
    if any user is performing any action.

    startDragTable

    public void startDragTable(int x,
                               int y,
                               int id)
    Start panning the view. Useful because the click arrives in the views. If the views don't find any element under the click, they may want the table to start panning (big map as background for instance)

    Parameters:
    id - The user id who start this action

    startZoomTable

    public void startZoomTable(int x,
                               int y,
                               int id)
    Start zooming the view. Useful because the click arrives in the views. If the views don't find any element under the click, they may want the table to start zooming (big map as background for instance)

    Parameters:
    id - The user id who start this action

    startRotateTable

    public void startRotateTable(int x,
                                 int y,
                                 int id)
    Start rotating the table.

    Parameters:
    x - the point to start the rotation around
    y - the point to start the rotation around
    id - The user id who start this action

    setDeformationMode

    public void setDeformationMode(int DeformationMode_Arg)
    Sets the deformationMode attribute of the DSTabletopPane object

    Parameters:
    DeformationMode_Arg - The new deformationMode value

    getDeformationMode

    public int getDeformationMode()
    Returns:
    the fisheye mode actually used

    getImage

    public BufferedImage getImage()
    Gets the image attribute of the DSTabletopPane object

    Returns:
    The image value

    imageUpdate

    public boolean imageUpdate(Image Image_Arg,
                               int Infoflags_Arg,
                               int X_Arg,
                               int Y_Arg,
                               int Width_Arg,
                               int Height_Arg)
    when an image finish to load attached to this component we want to launch a repaintAll() otherwise we call the super.imageUpdate()

    Specified by:
    imageUpdate in interface ImageObserver
    Overrides:
    imageUpdate in class Component

    init

    public void init(int Width_Arg,
                     int Height_Arg,
                     int bitNumber_Arg)
    Init the repaint process.

    Parameters:
    Width_Arg - the width covered by the table
    Height_Arg - the height covered by the table

    initDoubleBuffering

    protected void initDoubleBuffering(int bitNumber_Arg)
    Initialisation of the double buffering system.


    getBackgroundTableImage

    public BufferedImage getBackgroundTableImage()

    getBackgroundTableImage24

    public BufferedImage getBackgroundTableImage24()

    repaint

    public void repaint()
    As it is asynchronous repaint we just have to increase a counter. A thread (see run()) will repaint the interface by merging the layers. This function does not trigger a full repaint (see #repaintAll()). Finally what this method reveal are all the modification you can have done on the DragObjects

    Overrides:
    repaint in class Component

    repaintAll

    public void repaintAll()
    repaint everything, refresh all the layer. May be much slower the #repaint() so use it only when a non drag-object is modified


    waitRepaintFinished

    public void waitRepaintFinished()
    Wait until the current asynchronous repaints are all finished


    paintTable

    public void paintTable()
    Merge the background and the view for fast rotation only.


    paintTable

    protected void paintTable(Graphics g)
    Display the view on the table using the DiamondSpin layout. This is the 3rd layer drawing. This layer is merged with the background which is the 4th layer.

    Parameters:
    g - a graphic context on the general component = the back buffer of this component

    paintInterface

    protected void paintInterface(Graphics2D Graphics_Arg)
    Display the background then the element on top given by parameter

    Parameters:
    Graphics_Arg - a graphic context to really display the component. we''l display the backbuffer in it at the end

    paint

    public void paint(Graphics g)
    Overrides:
    paint in class JLayeredPane

    setEngine

    public void setEngine(DSEngine engine)

    getEngine

    public DSEngine getEngine()

    transformTable2

    public AffineTransform transformTable2(double d,
                                           double alpha,
                                           double beta,
                                           double scale,
                                           double tangle,
                                           double tzoom,
                                           int elType,
                                           int userid)
    Return an AffineTransform object to apply to a Graphics2D before drawing an element. you can also use the transform() and inverseTransform() methods to compute point positions after or before transformation Actually DSTabletopPane is no longer in charge of it but it is a very convenient way to redirect the call to an other transformTable() which depends on the active view. see #transformTable() in View then

    Parameters:
    d - the distance from the center of the table to the center of the element. Distance to the center of the table 0.5 means between the center and the border
    alpha - the Angle of the element around the center of the table (trigonometric system)
    beta - The additional rotation of the element around the center of the document
    scale - the scale factor. May be overhelmed by the blackhole or central focus technique (0 to not be concerned by fisheye techniques and always act as scale=1)
    tangle - the angle of the whole table to add it to alpha. 0 when dragged and = angle of the view otherwise
    elType - what kind of element is it
    Returns:
    a transformation matrix decribing the element rotations, scale, translation according to the parameter values

    getScale

    public double getScale(double d,
                           double alpha,
                           double scale)
    This could be seen as part of the transformTable() method but it is better to separate it so element can call it to know which scale factor is really used by the matrix. As we said the scale factor can be post-modified by a deformation technique and it is important to know what sclae factor is really going to apply. For instance could decide to paint more or less detail according to the situation !

    Parameters:
    d - the distance from the center of the table to the center of the element
    alpha - the angle of the element
    scale - the scale factor. may be modified by the blackhole or central focus
    Returns:
    the scale to use in this polar coordinate system according to the deformation

    getActiveView

    public DSView getActiveView()
    Returns:
    the actual view capable to accept mouse events.

    setActiveView

    public void setActiveView(DSView view)
    change the active view of the interface

    Parameters:
    view - The new activeView

    setPopupMenu

    public void setPopupMenu(DSPopupMenu DSPopupMenu_Arg,
                             int id)
    Sets a PopupMenu for a given user

    Parameters:
    DSPopupMenu_Arg - The new PopupMenu value
    id - The user concerned by having a popup menu

    unsetPopupMenu

    public void unsetPopupMenu(int id)
    unset the popup menu for a given user

    Parameters:
    id - The id of the user

    getDSPopupMenu

    public DSPopupMenu getDSPopupMenu(int id)
    Gets the PopupMenu attribute of the DSTabletopPane object

    Parameters:
    id - The id of the user
    Returns:
    The PopupMenu value

    unsetAllPopupMenusForElement

    public void unsetAllPopupMenusForElement(DSElement dsElement)
    Unset the popup menu for a given element (for instance if the element is deleted, modified, etc.)

    Parameters:
    dsElement - The element concerned by the operation

    unsetAllPopupMenus

    public void unsetAllPopupMenus()
    discard all the popup menus ! usefull for switching views


    getActionMode

    public int getActionMode(int id)
    gets the actionMode of a given user

    Parameters:
    id - the user's id
    Returns:
    the action mode for this user

    setActionMode

    public void setActionMode(int mode,
                              int id)
    change the action mode for a given user

    Parameters:
    mode - The new actionMode value
    id - The user id

    mousePressedDragObject

    public boolean mousePressedDragObject(MouseEvent event,
                                          int id)
    Description of the Method

    Parameters:
    event - Description of the Parameter
    id - Description of the Parameter
    Returns:
    Description of the Return Value

    mousePressed

    public void mousePressed(MouseEvent event)
    handle a mouse press event from the mouse.

    Specified by:
    mousePressed in interface MouseListener
    Parameters:
    event - the object describing the event

    mousePressed2

    protected void mousePressed2(MouseEvent event)
    handle a mouse press from any device.

    Parameters:
    event - the object describing the event

    mouseDragged

    public void mouseDragged(MouseEvent event)
    mouseDragged callback

    Specified by:
    mouseDragged in interface MouseMotionListener
    Parameters:
    event - Description of the Parameter

    mouseDragged2

    protected void mouseDragged2(MouseEvent event)
    mouseDragged callback

    Parameters:
    event - Description of the Parameter

    mouseReleased

    public void mouseReleased(MouseEvent event)
    mouseDragged callback

    Specified by:
    mouseReleased in interface MouseListener
    Parameters:
    event - Description of the Parameter

    mouseReleased2

    protected void mouseReleased2(MouseEvent event)
    When the mouse is released, the system has to change mode, repaint the table in nice if it was rotated, etc.

    Parameters:
    event - Description of the Parameter

    mouseMoved

    public void mouseMoved(MouseEvent MouseEvent_Arg)
    The mouse moved (without button pressed). Impossible with DT

    Specified by:
    mouseMoved in interface MouseMotionListener
    Parameters:
    MouseEvent_Arg - Description of the Parameter

    mouseClicked

    public void mouseClicked(MouseEvent event)
    Specified by:
    mouseClicked in interface MouseListener

    mouseClicked2

    public void mouseClicked2(MouseEvent MouseEvent_Arg)
    when the user's finger press and release at the same location

    Parameters:
    MouseEvent_Arg - Description of the Parameter

    mouseEntered

    public void mouseEntered(MouseEvent MouseEvent_Arg)
    Unused callback

    Specified by:
    mouseEntered in interface MouseListener
    Parameters:
    MouseEvent_Arg - Description of the Parameter

    mouseExited

    public void mouseExited(MouseEvent MouseEvent_Arg)
    Unused callback

    Specified by:
    mouseExited in interface MouseListener
    Parameters:
    MouseEvent_Arg - Description of the Parameter

    keyPressed

    public void keyPressed(KeyEvent event)
    Description of the Method

    Specified by:
    keyPressed in interface KeyListener
    Parameters:
    event - Description of the Parameter

    keyReleased

    public void keyReleased(KeyEvent KeyEvent_Arg)
    Description of the Method

    Specified by:
    keyReleased in interface KeyListener
    Parameters:
    KeyEvent_Arg - Description of the Parameter

    keyTyped

    public void keyTyped(KeyEvent event)
    Description of the Method

    Specified by:
    keyTyped in interface KeyListener
    Parameters:
    event - Description of the Parameter

    getCurrentUser

    public static int getCurrentUser()
    added by Merrie to get current user id fromthe thread name

    Returns:
    The currentUser value

    isDisplayCursorForUser

    public boolean isDisplayCursorForUser(int userid)

    setDisplayCursorForUser

    public void setDisplayCursorForUser(int userid,
                                        boolean displayCursor)

    getDragObject

    public DSElement getDragObject(int id)
    Parameters:
    id - Description of the Parameter
    Returns:
    the element on top for a given user.

    isDragObject

    public boolean isDragObject(DSElement dsElement)
    Parameters:
    dsElement - The DSElement to test
    Returns:
    whether an element is actually dragged.

    getIDForDragObject

    public int getIDForDragObject(DSElement dsElement)
    Parameters:
    dsElement - Description of the Parameter
    Returns:
    the buffer id containing an element.

    removeDragObject

    public void removeDragObject(DSElement dsElement)
    discard a dragged element from one of the 5 users. 0 is the mouse. 1-4 are the TTBridge users.

    Parameters:
    dsElement - Description of the Parameter

    setDragObject

    public void setDragObject(DSElement elem,
                              int id)
    set the element on top for one of the users.

    Parameters:
    elem - The new dragObject value
    id - The id of the user

    demoteDragElementToTable

    public void demoteDragElementToTable(DSElement dsElement)

    demoteAllDragElementsToTable

    public void demoteAllDragElementsToTable()

    setSelectedFrame

    public void setSelectedFrame(JInternalFrame f)
    Overrides:
    setSelectedFrame in class JDesktopPane

    getSelectedFrame

    public JInternalFrame getSelectedFrame()
    Overrides:
    getSelectedFrame in class JDesktopPane

    demoteEverythingForUser

    public void demoteEverythingForUser(int id)
    Special gift function from fred to Kate in memory of "dropElementOnTop()". Should do a similar job.


    stealDragObject

    public void stealDragObject(MouseEvent MouseEvent_Arg,
                                int id0_Arg,
                                int index_Arg)
    Steal a drag object from another user

    Parameters:
    MouseEvent_Arg -
    id0_Arg - Description of the Parameter
    index_Arg - Description of the Parameter

    setBackgroundImage

    public final void setBackgroundImage(BufferedImage Image_Arg)
    Change the image to display in background

    Parameters:
    Image_Arg - The new backgroundImage value

    scaleImageForBackground

    public BufferedImage scaleImageForBackground(BufferedImage img)
    Change the image to display in background

    Parameters:
    img - the image to scale for the background
    Returns:
    the scaled image

    getBackgroundImage

    public BufferedImage getBackgroundImage()
    Returns:
    the image to display in background

    moveToFront

    public void moveToFront(Component f)
    Overrides:
    moveToFront in class JLayeredPane

    isFocusable

    public boolean isFocusable()
    have to return true to be able to receive key events

    Overrides:
    isFocusable in class Component

    getUserColor

    public Color getUserColor(int id)
    Gets the Color of the giver user

    Returns:
    The Color value

    setUserColor

    public void setUserColor(int id,
                             Color col)
    Sets the userColor attribute of the DSTabletopPane object

    Parameters:
    id - user id because every user has a different color
    col - the new color for the given user

    getTouchOrder

    public int[] getTouchOrder()

    activateFakeComponent

    public void activateFakeComponent(Component Component_Arg)
    Do what's necessary to initialize a swing component without displaying it on screen (what swing does only when it's displayed directly on the screen but here it will never happen)

    Parameters:
    Component_Arg - the component (eventually a panel full of things) to initialize

    activateDSComponents

    public void activateDSComponents(DSFrame f,
                                     Component c)

    activateDSComponents

    public void activateDSComponents(DSFrame f)

    newTouch

    public void newTouch(int id)
    update Touch order which says which user touched last the table


    getPreferredAngle

    public double getPreferredAngle(int id)
    return a preferred angle for a given user. It is actually the middle of the menubar owned byt eh user (if one)

    Parameters:
    id - The user id
    Returns:
    The preferred angle for this user id

    checkElementAsEventTarget

    public int checkElementAsEventTarget(MouseEvent event)
    checks if an event(mouse, DT, any spatial event) is targetting an element or not (-1)

    Parameters:
    event - the mouse event to check
    Returns:
    the index of the drag element being touched by mouse , or -1 if none

    getTableZoom

    public double getTableZoom()
    Returns:
    the zoom factor of the current view

    setTableZoom

    public void setTableZoom(double zoom)
    change the global angle of the current view -> turn the table

    Parameters:
    zoom - The new zoom value

    getTableAngle

    public double getTableAngle()
    Returns:
    the angle of the current view (how much it has been rotated since the beginning) NaN in SaveAngle means nothing is saved otherwise return the saved angle.

    setTableAngle

    public void setTableAngle(double tangle)
    change the global angle of the current view -> turn the table

    Parameters:
    tangle - The new angle value

    getTableCenter

    public Point getTableCenter()
    Returns:
    the angle of the current view (how much it has been rotated since the beginning) NaN in SaveAngle means nothing is saved otherwise return the saved angle.

    setTableCenter

    public void setTableCenter(Point center)
    change the center of the table

    Parameters:
    center - The new center


    Copyright © 2006 Frederic Vernier(LIMSI) Chia Shen(MERL) Guillaume Besacier(LIMSI). All Rights Reserved.