From: <nie...@us...> - 2007-09-19 14:52:42
|
Revision: 8954 http://cdk.svn.sourceforge.net/cdk/?rev=8954&view=rev Author: nielsout Date: 2007-09-19 07:52:38 -0700 (Wed, 19 Sep 2007) Log Message: ----------- Thought I did this submit last night.. guess that failed somehow Simple version of Controller2DModuleAddAtom added (used to add atoms on mouseclick) To be added: if an atom is selected: change that atom instead of adding one Modified Paths: -------------- trunk/cdk/src/org/openscience/cdk/controller/Controller2DHub.java trunk/cdk/src/org/openscience/cdk/controller/Controller2DModuleAddAtom.java trunk/cdk/src/org/openscience/cdk/controller/Controller2DModuleChangeFormalC.java trunk/cdk/src/org/openscience/cdk/renderer/Renderer2DModel.java trunk/cdk/src/org/openscience/cdk/renderer/progz/Java2DRenderer.java Added Paths: ----------- trunk/cdk/src/org/openscience/cdk/controller/Controller2DModuleHighlight.java Modified: trunk/cdk/src/org/openscience/cdk/controller/Controller2DHub.java =================================================================== --- trunk/cdk/src/org/openscience/cdk/controller/Controller2DHub.java 2007-09-19 12:49:10 UTC (rev 8953) +++ trunk/cdk/src/org/openscience/cdk/controller/Controller2DHub.java 2007-09-19 14:52:38 UTC (rev 8954) @@ -72,6 +72,20 @@ drawModeModules = new HashMap<Controller2DModel.DrawMode,IController2DModule>(); generalModules = new ArrayList<IController2DModule>(); + + //register all 'known' controllers + registerDrawModeControllerModule( + Controller2DModel.DrawMode.MOVE, new Controller2DModuleMove()); + registerDrawModeControllerModule( + Controller2DModel.DrawMode.ERASER, new Controller2DModuleRemove()); + registerDrawModeControllerModule( + Controller2DModel.DrawMode.INCCHARGE, new Controller2DModuleChangeFormalC(1)); + registerDrawModeControllerModule( + Controller2DModel.DrawMode.DECCHARGE, new Controller2DModuleChangeFormalC(-1)); + registerDrawModeControllerModule( + Controller2DModel.DrawMode.ENTERELEMENT, new Controller2DModuleAddAtom()); + + registerGeneralControllerModule( new Controller2DModuleHighlight()); } public Controller2DModel getController2DModel() { return controllerModel; @@ -208,14 +222,6 @@ System.out.println("updateView now in Controller2DHub"); eventRelay.updateView(); - // Relay the updateView event to the general handlers - /* for (IController2DModule module : generalModules) { - module.updateView(); - } - - // Relay the updateView event to the active - IController2DModule activeModule = getActiveDrawModule(); - if (activeModule != null) activeModule.updateView();*/ } private IController2DModule getActiveDrawModule() { return drawModeModules.get(controllerModel.getDrawMode()); @@ -240,7 +246,27 @@ } return closestAtom; } - + public IBond getClosestBond(Point2d worldCoord) { + IBond closestBond = null; + double closestDistance = Double.MAX_VALUE; + + Iterator<IAtomContainer> containers = ChemModelManipulator.getAllAtomContainers(chemModel).iterator(); + while (containers.hasNext()) { + Iterator<IBond> bonds = containers.next().bonds(); + while (bonds.hasNext()) { + IBond nextBond = bonds.next(); + double distance = nextBond.get2DCenter().distance(worldCoord); + if (distance <= renderer.getRenderer2DModel().getHighlightRadiusModel() && + distance < closestDistance) { + closestBond = nextBond; + closestDistance = distance; + } + } + //GeometryToolsInternalCoordinates.getClosestBond( worldCoord.x, worldCoord.y, container); + + } + return closestBond; + } public void removeAtom(IAtom atom) { ChemModelManipulator.removeAtomAndConnectedElectronContainers(chemModel, atom); @@ -259,9 +285,6 @@ System.out.println("atom added??"); } - public IBond getClosestBond(Point2d worldCoord) { - // TODO Auto-generated method stub - return null; - } + } Modified: trunk/cdk/src/org/openscience/cdk/controller/Controller2DModuleAddAtom.java =================================================================== --- trunk/cdk/src/org/openscience/cdk/controller/Controller2DModuleAddAtom.java 2007-09-19 12:49:10 UTC (rev 8953) +++ trunk/cdk/src/org/openscience/cdk/controller/Controller2DModuleAddAtom.java 2007-09-19 14:52:38 UTC (rev 8954) @@ -52,20 +52,19 @@ */ public class Controller2DModuleAddAtom implements IController2DModule { - private String atomType; + //private String atomType; private IChemModelRelay chemObjectRelay; /*private IViewEventRelay eventRelay; public void setEventRelay(IViewEventRelay relay) { this.eventRelay = relay; }*/ - //this should never be triggered.. just to be fail-safe ;) - public Controller2DModuleAddAtom() { +/* public Controller2DModuleAddAtom() { this.atomType = "C"; - } - public Controller2DModuleAddAtom(String atomType) { + }*/ +/* public Controller2DModuleAddAtom(String atomType) { this.atomType = atomType; - } + }*/ public void mouseClickedDouble(Point2d worldCoord) { // TODO Auto-generated method stub @@ -74,6 +73,7 @@ public void mouseClickedDown(Point2d worldCoord) { IAtom closestAtom = chemObjectRelay.getClosestAtom(worldCoord); + String atomType = chemObjectRelay.getController2DModel().getDrawElement(); if (closestAtom == null) { //add atom System.out.println("Trying adding atom " + atomType); Modified: trunk/cdk/src/org/openscience/cdk/controller/Controller2DModuleChangeFormalC.java =================================================================== --- trunk/cdk/src/org/openscience/cdk/controller/Controller2DModuleChangeFormalC.java 2007-09-19 12:49:10 UTC (rev 8953) +++ trunk/cdk/src/org/openscience/cdk/controller/Controller2DModuleChangeFormalC.java 2007-09-19 14:52:38 UTC (rev 8954) @@ -36,7 +36,9 @@ import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.renderer.Renderer2DModel; +import org.openscience.cdk.renderer.progz.GeometryToolsInternalCoordinates; import org.openscience.cdk.renderer.progz.IJava2DRenderer; +import org.openscience.cdk.interfaces.IBond; import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.interfaces.IAtomContainer; @@ -65,10 +67,19 @@ public void mouseClickedDown(Point2d worldCoord) { // TODO Auto-generated method stub + IAtom atom = chemObjectRelay.getClosestAtom(worldCoord); - System.out.println("trying change charge (atm: " + atom.getFormalCharge() + " of: " + atom); + double Atomdist = atom.getPoint2d().distance(worldCoord); + //System.out.println("closest Atom distance: " + Atomdist + " Atom:" + atom); + IBond bond = chemObjectRelay.getClosestBond(worldCoord); + + Point2d bondCenter = GeometryToolsInternalCoordinates.get2DCenter(bond.atoms()); + double Bonddist = bondCenter.distance(worldCoord); + if (atom != null) { + System.out.println("trying change charge (atm: " + atom.getFormalCharge() + " of: " + atom); + Integer newCharge = new Integer(change); if (atom.getFormalCharge() != null) newCharge += atom.getFormalCharge(); @@ -77,7 +88,11 @@ System.out.println("change: " + change + " newCharge: " + newCharge + " atom:" + atom); chemObjectRelay.updateView(); } + else { + System.out.println("no atom close enough to change Formal Charge"); + } + } public void mouseClickedUp(Point2d worldCoord) { Added: trunk/cdk/src/org/openscience/cdk/controller/Controller2DModuleHighlight.java =================================================================== --- trunk/cdk/src/org/openscience/cdk/controller/Controller2DModuleHighlight.java (rev 0) +++ trunk/cdk/src/org/openscience/cdk/controller/Controller2DModuleHighlight.java 2007-09-19 14:52:38 UTC (rev 8954) @@ -0,0 +1,113 @@ +/* $Revision: 7636 $ $Author: nielsout $ $Date: 2007-01-04 18:46:10 +0100 (Thu, 04 Jan 2007) $ + * + * Copyright (C) 2007 Niels Out <nie...@us...> + * + * Contact: cdk...@li... + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * All I ask is that proper credit is given for my work, which includes + * - but is not limited to - adding the above copyright notice to the beginning + * of your source code files, and to any copyright notice that you may distribute + * with programs based on this work. + * + * This program 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ +package org.openscience.cdk.controller; + +import javax.vecmath.Point2d; + +import org.openscience.cdk.interfaces.IAtom; +import org.openscience.cdk.interfaces.IBond; + +/** + * This should highlight the atom/bond when moving over with the mouse + * + * @author Niels Out + * + */ +public class Controller2DModuleHighlight implements IController2DModule { + + private IChemModelRelay chemObjectRelay; + + public void mouseClickedDouble(Point2d worldCoord) { + } + + public void mouseClickedDown(Point2d worldCoord) { + // TODO Auto-generated method stub + + } + + public void mouseClickedUp(Point2d worldCoord) { + // TODO Auto-generated method stub + + } + + public void mouseDrag(Point2d worldCoordFrom, Point2d worldCoordTo) { + + } + + public void mouseEnter(Point2d worldCoord) { + // TODO Auto-generated method stub + + } + + public void mouseExit(Point2d worldCoord) { + // TODO Auto-generated method stub + + } + private IAtom PrevHighlightAtom; + private IBond PrevHighlightBond; + + public void mouseMove(Point2d worldCoord) { + IAtom atom = chemObjectRelay.getClosestAtom(worldCoord); + IBond bond = chemObjectRelay.getClosestBond(worldCoord); + if (atom != null && (bond == null || + bond.get2DCenter().distance(worldCoord) >= atom.getPoint2d().distance(worldCoord))) { + if (PrevHighlightAtom != atom) { + System.out.println("Hovering over another atom now: " + atom); + + chemObjectRelay.getIJava2DRenderer().getRenderer2DModel().setHighlightedAtom(atom); + PrevHighlightAtom = atom; + chemObjectRelay.updateView(); + } + } + else if (PrevHighlightAtom != null) { + //'un'-highlight things here.. + System.out.println("Time to 'un'-highlight PrevHighlightAtom now..: "); + chemObjectRelay.getIJava2DRenderer().getRenderer2DModel().setHighlightedAtom(null); + PrevHighlightAtom = null; + chemObjectRelay.updateView(); + } + if (bond != null && (atom == null || + bond.get2DCenter().distance(worldCoord) < atom.getPoint2d().distance(worldCoord))) { + if (PrevHighlightBond != bond) { + System.out.println("Hovering over another bond now: " + bond); + + chemObjectRelay.getIJava2DRenderer().getRenderer2DModel().setHighlightedBond(bond); + PrevHighlightBond = bond; + chemObjectRelay.updateView(); + } + } + else if (PrevHighlightBond != null) { + //'un'-highlight things here.. + System.out.println("Time to 'un'-highlight PrevHighlightBond now..: "); + chemObjectRelay.getIJava2DRenderer().getRenderer2DModel().setHighlightedBond(null); + PrevHighlightBond = null; + chemObjectRelay.updateView(); + } + } + public void setChemModelRelay(IChemModelRelay relay) { + this.chemObjectRelay = relay; + } + +} Modified: trunk/cdk/src/org/openscience/cdk/renderer/Renderer2DModel.java =================================================================== --- trunk/cdk/src/org/openscience/cdk/renderer/Renderer2DModel.java 2007-09-19 12:49:10 UTC (rev 8953) +++ trunk/cdk/src/org/openscience/cdk/renderer/Renderer2DModel.java 2007-09-19 14:52:38 UTC (rev 8954) @@ -79,7 +79,7 @@ * @deprecated old way of storing highlightRadius based on screensize, new one: {@link #highlightRadiusModel()} */ @Deprecated private double highlightRadius = 10.0; - private double highlightRadiusModel = 0.8; + private double highlightRadiusModel = 0.7; private boolean willDrawNumbers = false; Modified: trunk/cdk/src/org/openscience/cdk/renderer/progz/Java2DRenderer.java =================================================================== --- trunk/cdk/src/org/openscience/cdk/renderer/progz/Java2DRenderer.java 2007-09-19 12:49:10 UTC (rev 8953) +++ trunk/cdk/src/org/openscience/cdk/renderer/progz/Java2DRenderer.java 2007-09-19 14:52:38 UTC (rev 8954) @@ -327,6 +327,11 @@ Color atomColor = getRenderer2DModel().getAtomColor(atom, Color.BLACK); Color otherColor = getRenderer2DModel().getForeColor(); Color bgColor = getRenderer2DModel().getBackColor(); + if (atom == getRenderer2DModel().getHighlightedAtom()) + bgColor = getRenderer2DModel().getHoverOverColor(); + else { + + } //bgColor = Color.green; graphics.setColor(bgColor); @@ -546,7 +551,7 @@ double y = atom.getPoint2d().y; System.out.println("painting paintColouredAtomBackground now at " + x + " / " + y); //FIXME: right size for this AtomRadius (currently estimate) - double atomRadius = 0.8; + double atomRadius = rendererModel.getHighlightRadiusModel(); graphics.setColor(color); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |