Thread: [Bprocessor-commit] gl/src/net/sourceforge/bprocessor/gl/tool DragTool.java, NONE, 1.1 ToolFactory.
Status: Pre-Alpha
Brought to you by:
henryml
From: rimestad <rim...@us...> - 2007-09-03 14:22:07
|
Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv15479/src/net/sourceforge/bprocessor/gl/tool Modified Files: ToolFactory.java SpaceTool.java AbstractTool.java Tool.java AbstractPencil.java SelectStrategy.java SelectTool.java Added Files: DragTool.java Log Message: Added a drag tool and changed the way strategy tools in abstractTool works to be more flexible and responcive Index: Tool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/Tool.java,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** Tool.java 31 Aug 2007 12:47:48 -0000 1.34 --- Tool.java 3 Sep 2007 11:31:34 -0000 1.35 *************** *** 70,73 **** --- 70,75 ---- /** the final tool to move them all */ public static final int FINAL_MOVE_TOOL = 24; + /** the drag tool */ + public static final int DRAG_TOOL = 25; /** Index: ToolFactory.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/ToolFactory.java,v retrieving revision 1.80 retrieving revision 1.81 diff -C2 -d -r1.80 -r1.81 *** ToolFactory.java 8 May 2007 13:24:04 -0000 1.80 --- ToolFactory.java 3 Sep 2007 11:31:34 -0000 1.81 *************** *** 125,128 **** --- 125,131 ---- /** The tool for moving edges alternatively */ private EdgeMoveTool edgeMoveTool; + + /** Tool for navigating in the model */ + private DragTool dragTool; /** The selection button */ *************** *** 197,201 **** Cursor arrowAddCursor = Toolkit.getDefaultToolkit().createCustomCursor(arrowAddImage, new Point(0, 0), "Add"); ! select = new SpaceTool(glv, null); pencil = new Pencil(glv, pencilcursor); --- 200,207 ---- Cursor arrowAddCursor = Toolkit.getDefaultToolkit().createCustomCursor(arrowAddImage, new Point(0, 0), "Add"); ! url = cl.getResource("Bcursordrag.gif"); ! Image dragImage = Toolkit.getDefaultToolkit().getImage(url); ! Cursor dragCursor = ! Toolkit.getDefaultToolkit().createCustomCursor(dragImage, new Point(7, 8), "Drag"); select = new SpaceTool(glv, null); pencil = new Pencil(glv, pencilcursor); *************** *** 220,223 **** --- 226,230 ---- finalMoveTool = new FinalMoveTool(glv, pencilcursor); edgeMoveTool = new EdgeMoveTool(glv, pencilcursor); + dragTool = new DragTool(glv, dragCursor); Toolbar tb = Toolbar.getInstance(); *************** *** 254,257 **** --- 261,265 ---- cRotBut = this.registerTool(Tool.CAMERA_TOOL, camera, "Biconrotcam.gif", "Orbit (Space)"); + this.registerTool(Tool.DRAG_TOOL, dragTool, "Bicondrag.gif", "Drag (Space)"); flyBut = this.registerTool(Tool.FLY_TOOL, fly, "Biconfly.gif", "Fly"); walkBut = this.registerTool(Tool.WALK_TOOL, walk, "Biconwalk.gif", "Walk"); *************** *** 351,354 **** --- 359,366 ---- previousTool = currentTool; currentTool = temp; + if (currentTool != null) { + JToggleButton button = (JToggleButton)buttons.get(currentTool); + button.setSelected(true); + } return temp; } *************** *** 389,392 **** --- 401,407 ---- return currentTool; } else { + if (i == -1) { + return getPrevious(); + } log.error("[get] No such tool " + i); return null; Index: SelectTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/SelectTool.java,v retrieving revision 1.64 retrieving revision 1.65 diff -C2 -d -r1.64 -r1.65 *** SelectTool.java 24 Aug 2007 09:54:27 -0000 1.64 --- SelectTool.java 3 Sep 2007 11:31:34 -0000 1.65 *************** *** 34,39 **** */ protected void moved(MouseEvent e) { ! findTarget(e); ! glv.getView().makeTarget(target); } --- 34,40 ---- */ protected void moved(MouseEvent e) { ! select.moved(e); ! // findTarget(e); ! // glv.getView().makeTarget(target); } *************** *** 43,47 **** * @param e The MouseEvent object */ ! protected void pressed(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON1) { select.pressed(e); --- 44,48 ---- * @param e The MouseEvent object */ ! protected void pressed(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON1) { select.pressed(e); *************** *** 63,67 **** * @param e The MouseEvent */ ! protected void released(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON1) { select.released(e); --- 64,68 ---- * @param e The MouseEvent */ ! protected void released(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON1) { select.released(e); Index: AbstractPencil.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/AbstractPencil.java,v retrieving revision 1.89 retrieving revision 1.90 diff -C2 -d -r1.89 -r1.90 *** AbstractPencil.java 31 Aug 2007 12:25:11 -0000 1.89 --- AbstractPencil.java 3 Sep 2007 11:31:34 -0000 1.90 *************** *** 762,770 **** points(new LinkedList()); number = ""; - glv.repaint(); timer.stop(); active = false; dragging = false; setTip(initialTip()); super.cleanUp(); } --- 762,770 ---- points(new LinkedList()); number = ""; timer.stop(); active = false; dragging = false; setTip(initialTip()); + glv.repaint(); super.cleanUp(); } Index: AbstractTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/AbstractTool.java,v retrieving revision 1.128 retrieving revision 1.129 diff -C2 -d -r1.128 -r1.129 *** AbstractTool.java 31 Aug 2007 12:47:48 -0000 1.128 --- AbstractTool.java 3 Sep 2007 11:31:34 -0000 1.129 *************** *** 35,41 **** import java.awt.Cursor; - import java.awt.Image; - import java.awt.Point; - import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; --- 35,38 ---- *************** *** 46,50 **** import java.io.Reader; import java.io.StringReader; - import java.net.URL; import java.util.HashMap; import java.util.HashSet; --- 43,46 ---- *************** *** 79,90 **** private static Logger log = Logger.getLogger(AbstractTool.class); ! /** TransformStack */ ! private TransformStack transform; ! ! /** ID */ ! private Transform id; ! ! private MouseEvent parked; ! private Timer dragtimer; --- 75,79 ---- private static Logger log = Logger.getLogger(AbstractTool.class); ! /** A timer to check if drag is long enough */ private Timer dragtimer; *************** *** 92,103 **** protected int dragDelay = 200; ! /** Simple selection mechanism **/ ! protected boolean directMode = false; ! /** Camera active */ ! protected boolean cameraMode = false; ! /** Select is active */ ! protected boolean selectMode = false; /** Pan strategy */ --- 81,91 ---- protected int dragDelay = 200; ! /** TransformStack */ ! private TransformStack transform; ! /** ID */ ! private Transform id; ! private MouseEvent parked; /** Pan strategy */ *************** *** 110,113 **** --- 98,104 ---- protected static Strategy orbit; + /** The active strategy */ + protected static Strategy activeStrategy; + /** The x axis */ protected Edge xAxis = new Edge(new Vertex(-50, 0, 0), new Vertex(50, 0, 0)); *************** *** 146,155 **** protected boolean typing; - /** The cursor for drag */ - private Cursor dragCursor; - - /** The cursor for orbit */ - private Cursor orbitCursor; - /** true if meta is pressed otherwise false */ protected boolean metaPressed = false; --- 137,140 ---- *************** *** 181,195 **** this.glv = glv; this.cursor = cursor; - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - URL url = cl.getResource("Bcursordrag.gif"); - Image dragImage = Toolkit.getDefaultToolkit().getImage(url); - dragCursor = - Toolkit.getDefaultToolkit().createCustomCursor(dragImage, new Point(7, 8), "Drag"); - - - url = cl.getResource("Bcursorrotcam.gif"); - Image rotationImage = Toolkit.getDefaultToolkit().getImage(url); - orbitCursor = - Toolkit.getDefaultToolkit().createCustomCursor(rotationImage, new Point(7, 8), "Rotation"); if (pan == null) { --- 166,169 ---- *************** *** 203,215 **** } } ! ! private class DragAction implements ActionListener { ! public void actionPerformed(ActionEvent e) { ! if (parked != null) { ! dragged(parked); ! parked = null; ! glv.repaint(true); } } } --- 177,202 ---- } } ! ! /** ! * Set the active strategy ! */ ! protected void setActiveStrategy(Strategy which) { ! Tool tool = null; ! ToolFactory factory = ToolFactory.getFactory(glv); ! if (which == AbstractTool.pan) { ! tool = factory.get(Tool.DRAG_TOOL); ! } else if (which == AbstractTool.orbit) { ! tool = factory.get(Tool.CAMERA_TOOL); ! } else if (which == AbstractTool.select) { ! tool = factory.get(Tool.SELECT_TOOL); ! } else { ! Tool prev = factory.getPrevious(); ! if (prev != this) { ! factory.getPrevious(); } + tool = this; } + glv.setCursor(tool.getCursor()); + activeStrategy = which; } *************** *** 318,329 **** } if (e.getKeyCode() == KeyEvent.VK_CONTROL) { ! selectMode = true; ! glv.setCursor(null); return; } if (e.getKeyCode() == KeyEvent.VK_SPACE) { if (!typing) { ! cameraMode = true; ! glv.setCursor(orbitCursor); return; } --- 305,314 ---- } if (e.getKeyCode() == KeyEvent.VK_CONTROL) { ! setActiveStrategy(AbstractTool.select); return; } if (e.getKeyCode() == KeyEvent.VK_SPACE) { if (!typing) { ! setActiveStrategy(AbstractTool.orbit); return; } *************** *** 366,381 **** */ public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_META || e.getKeyCode() == KeyEvent.VK_ALT) { metaPressed = false; glv.setCursor(cursor); } - if (e.getKeyCode() == KeyEvent.VK_CONTROL) { - selectMode = false; - glv.setCursor(cursor); - } - if (e.getKeyCode() == KeyEvent.VK_SPACE) { - cameraMode = false; - glv.setCursor(cursor); - } if (e.getKeyCode() == KeyEvent.VK_S) { glv.getView().removeGlObjects3D(glCams); --- 351,361 ---- */ public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_CONTROL || e.getKeyCode() == KeyEvent.VK_SPACE) { + setActiveStrategy(null); + } if (e.getKeyCode() == KeyEvent.VK_META || e.getKeyCode() == KeyEvent.VK_ALT) { metaPressed = false; glv.setCursor(cursor); } if (e.getKeyCode() == KeyEvent.VK_S) { glv.getView().removeGlObjects3D(glCams); *************** *** 402,422 **** AbstractTool.dx = x - pressPos[0]; AbstractTool.dy = y - pressPos[1]; ! if ((e.getModifiersEx() | MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK) { ! pan.dragged(e); } else { ! if (cameraMode) { ! orbit.dragged(e); ! } else if (selectMode) { ! select.dragged(e); } else { ! if (e.getWhen() > pressedTime + dragDelay) { ! dragged(e); ! } else { ! parked = e; ! int delay = (int) (dragDelay - (e.getWhen() - pressedTime)); ! dragtimer = new Timer(delay, new DragAction()); ! dragtimer.setRepeats(false); ! dragtimer.start(); ! } } } --- 382,396 ---- AbstractTool.dx = x - pressPos[0]; AbstractTool.dy = y - pressPos[1]; ! if (activeStrategy != null) { ! activeStrategy.dragged(e); } else { ! if (e.getWhen() > AbstractTool.pressedTime + dragDelay) { ! dragged(e); } else { ! parked = e; ! int delay = (int) (dragDelay - (e.getWhen() - AbstractTool.pressedTime)); ! dragtimer = new Timer(delay, new DragAction()); ! dragtimer.setRepeats(false); ! dragtimer.start(); } } *************** *** 436,442 **** dx = x - pressPos[0]; dy = y - pressPos[1]; ! if (!(cameraMode || selectMode)) { moved(e); ! } previousPos[0] = x; previousPos[1] = y; --- 410,418 ---- dx = x - pressPos[0]; dy = y - pressPos[1]; ! if (activeStrategy != null) { ! activeStrategy.moved(e); ! } else { moved(e); ! } previousPos[0] = x; previousPos[1] = y; *************** *** 467,470 **** --- 443,447 ---- /** * Invoked when a mouse button has been pressed on a component. + * Calls getObjectAtPoint for all objects so just use target as it is * @param e The MouseEvent object */ *************** *** 478,504 **** previousPos[0] = pressPos[0]; previousPos[1] = pressPos[1]; ! Object o = glv.getView().getObjectAtPoint(e.getX(), e.getY(), View.OBJECTS); if (e.getButton() == MouseEvent.BUTTON2) { ! glv.setCursor(dragCursor); ! pan.pressed(e); } else { ! if (cameraMode) { ! orbit.pressed(e); ! } else if (selectMode) { ! if (this instanceof SpaceTool) { ! pressed(e); ! } else { ! select.pressed(e); ! } } else { ! if (o instanceof Widget) { ! Widget widget = (Widget) o; ! widget.action(); ! } else if (o instanceof ClickBox) { ! ClickBox clickbox = (ClickBox) o; ! Project.getInstance().setActiveSpace(clickbox.space()); ! } else { ! pressed(e); ! } } } --- 455,473 ---- previousPos[0] = pressPos[0]; previousPos[1] = pressPos[1]; ! target = glv.getView().getObjectAtPoint(e.getX(), e.getY(), View.OBJECTS); if (e.getButton() == MouseEvent.BUTTON2) { ! setActiveStrategy(AbstractTool.pan); ! } ! if (activeStrategy != null) { ! activeStrategy.pressed(e); } else { ! if (target instanceof Widget) { ! Widget widget = (Widget) target; ! widget.action(); ! } else if (target instanceof ClickBox) { ! ClickBox clickbox = (ClickBox) target; ! Project.getInstance().setActiveSpace(clickbox.space()); } else { ! pressed(e); } } *************** *** 512,526 **** public void mouseReleased(MouseEvent e) { parked = null; ! if (e.getButton() == MouseEvent.BUTTON2) { ! glv.setCursor(cursor); ! pan.released(e); } else { ! if (cameraMode) { ! orbit.released(e); ! } else if (selectMode) { ! select.released(e); ! } else { ! released(e); ! } } glv.repaint(true); --- 481,491 ---- public void mouseReleased(MouseEvent e) { parked = null; ! if (activeStrategy != null) { ! activeStrategy.released(e); } else { ! released(e); ! } ! if (e.getButton() == MouseEvent.BUTTON2) { ! setActiveStrategy(null); } glv.repaint(true); *************** *** 630,638 **** /** ! * ! * */ protected void remove() { ! } --- 595,608 ---- /** ! * The delete or backspace key has been pressed */ protected void remove() { ! for (Geometric current : Selection.primary()) { ! current.erase(); ! } ! Selection.primary().clear(); ! glv.getView().makeTarget(null); ! Project.getInstance().changed(Project.getInstance().getActiveSpace()); ! Project.getInstance().checkpoint(); } *************** *** 649,656 **** /** * The escape key has been pressed - * */ protected void escape() { ! } --- 619,630 ---- /** * The escape key has been pressed */ protected void escape() { ! Selection.primary().clear(); ! glv.getView().makeTarget(null); ! Project p = Project.getInstance(); ! p.setActiveSpace(p.world()); ! p.changed(p); ! glv.repaint(); } *************** *** 945,947 **** --- 919,931 ---- log.info(object); } + + private class DragAction implements ActionListener { + public void actionPerformed(ActionEvent e) { + if (parked != null) { + dragged(parked); + parked = null; + glv.repaint(true); + } + } + } } Index: SpaceTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/SpaceTool.java,v retrieving revision 1.85 retrieving revision 1.86 diff -C2 -d -r1.85 -r1.86 *** SpaceTool.java 28 Aug 2007 07:04:47 -0000 1.85 --- SpaceTool.java 3 Sep 2007 11:31:34 -0000 1.86 *************** *** 373,402 **** return null; } - - - - /** - * Delete - */ - @Override - public void remove() { - for (Geometric current : Selection.primary()) { - current.erase(); - } - Selection.primary().clear(); - glv.getView().makeTarget(null); - Project.getInstance().changed(Project.getInstance().getActiveSpace()); - Project.getInstance().checkpoint(); - } - - /** - * Escape - */ - public void escape() { - Selection.primary().clear(); - glv.getView().makeTarget(null); - Project p = Project.getInstance(); - p.setActiveSpace(p.world()); - p.changed(p); - } } --- 373,375 ---- --- NEW FILE: DragTool.java --- //--------------------------------------------------------------------------------- // $Id: DragTool.java,v 1.1 2007/09/03 11:31:34 rimestad Exp $ // // Copyright (c) 2005 The BProcessor Team (http://bprocessor.sourceforge.net) // Released under the Lesser GNU Public License v2.1 //--------------------------------------------------------------------------------- package net.sourceforge.bprocessor.gl.tool; import net.sourceforge.bprocessor.gl.GLView; import java.awt.Cursor; import java.awt.event.MouseEvent; import org.apache.log4j.Logger; /** * The selecttool */ public class DragTool extends AbstractTool { /** The logger */ private static Logger log = Logger.getLogger(DragTool.class); /** * The constructor * @param glv The 3D canvas * @param cursor The cursor */ public DragTool(GLView glv, Cursor cursor) { super(glv, cursor); dragDelay = 0; } /** * Invoked when the mouse cursor has been moved * @param e The MouseEvent object */ protected void moved(MouseEvent e) { pan.moved(e); } /** * Invoked when a mouse button has been pressed on a component. * @param e The MouseEvent object */ protected void pressed(MouseEvent e) { pan.pressed(e); } /** * Invoked when the mouse is held pressed and moved * @param e The MouseEvent object */ protected void dragged(MouseEvent e) { pan.dragged(e); } /** * Invoked when a mouse button has been released on a component. * @param e The MouseEvent */ protected void released(MouseEvent e) { pan.released(e); } /** * {@inheritDoc} */ public String initialTip() { return "Click and move mouse to navigate the model."; } } Index: SelectStrategy.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/SelectStrategy.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** SelectStrategy.java 24 Aug 2007 09:54:27 -0000 1.17 --- SelectStrategy.java 3 Sep 2007 11:31:34 -0000 1.18 *************** *** 12,15 **** --- 12,16 ---- import java.util.Set; + import org.apache.log4j.Logger; *************** *** 95,98 **** --- 96,101 ---- */ public void moved(MouseEvent e) { + target = glv.getView().getObjectAtPoint(e.getX(), e.getY(), View.OBJECTS); + glv.getView().makeTarget(target); } *************** *** 109,114 **** x = e.getX(); y = e.getY(); - View view = glv.getView(); - target = view.getObjectAtPoint(x, y, View.OBJECTS); if (target == null || target instanceof Geometric) { activated = true; --- 112,115 ---- |