From: <gil...@us...> - 2008-11-28 18:05:48
|
Revision: 13374 http://cdk.svn.sourceforge.net/cdk/?rev=13374&view=rev Author: gilleain Date: 2008-11-28 18:05:38 +0000 (Fri, 28 Nov 2008) Log Message: ----------- Cleaning up the Renderer2DModel and moving most stuff to RenderingParameters, while preserving (for now) the interface of Renderer2DModel. Modified Paths: -------------- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/ControllerModel.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Java2DRenderer.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer2DModel.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RenderingParameters.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/BasicBondGenerator.java jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/CleanupAction.java Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/ControllerModel.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/ControllerModel.java 2008-11-28 16:16:21 UTC (rev 13373) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/ControllerModel.java 2008-11-28 18:05:38 UTC (rev 13374) @@ -28,247 +28,335 @@ */ package org.openscience.cdk.controller; +import java.io.Serializable; +import java.util.HashMap; + import javax.swing.undo.UndoManager; import javax.swing.undo.UndoableEditSupport; - /** - * @cdk.module control - * @cdk.svnrev $Revision$ + * @cdk.module control + * @cdk.svnrev $Revision$ */ -public class ControllerModel implements java.io.Serializable, Cloneable, IControllerModel -{ - +public class ControllerModel implements Serializable, Cloneable, IControllerModel { + private static final long serialVersionUID = 9007159812273128989L; - - private boolean snapToGridAngle = true; - private int snapAngle = 15; - - private boolean snapToGridCartesian = true; - private int snapCartesian = 10; - - private String defaultElementSymbol = "C"; - private String drawElement = "C"; - private String[] commonElements = { "C", "O", "N", "H", "P", "S" }; - private double bondPointerLength = 20; - private double ringPointerLength = 20; + private boolean snapToGridAngle = true; + + private int snapAngle = 15; + private boolean snapToGridCartesian = true; + + private int snapCartesian = 10; + + private double bondPointerLength = 20; + + private double ringPointerLength = 20; + private boolean autoUpdateImplicitHydrogens = false; - private UndoManager undoManager; - private UndoableEditSupport undoSupport; - //for controlling, if the structure or substructural parts might be moved - private boolean isMovingAllowed = true; + private String defaultElementSymbol = "C"; + + private String drawElement = "C"; + + private String[] commonElements = { "C", "O", "N", "H", "P", "S" }; + + private UndoManager undoManager; + + private UndoableEditSupport undoSupport; + + private HashMap<Object, Object> merge = new HashMap<Object, Object>(); + + // for controlling, if the structure or substructural parts might be moved + private boolean isMovingAllowed = true; + public ControllerModel() { undoManager = new UndoManager(); undoManager.setLimit(100); undoSupport = new UndoableEditSupport(); undoSupport.addUndoableEditListener(new UndoAdapter(undoManager)); } + + /** + * This is the central facility for handling "merges" of atoms. A merge + * occures if during moving atoms an atom is in Range of another atom. These + * atoms are then put into the merge map as a key-value pair. During the + * move, the atoms are then marked by a circle and on releasing the mouse + * they get actually merged, meaning one atom is removed and bonds pointing + * to this atom are made to point to the atom it has been marged with. + * + * @return Returns the merge.map + * + * FIXME: this belongs in the controller model... this is not about + * rendering, it's about editing (aka controlling) + */ + public HashMap<Object, Object> getMerge() { + return merge; + } - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#getSnapToGridAngle() + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#getSnapToGridAngle() */ - public boolean getSnapToGridAngle() - { - return this.snapToGridAngle; - } + public boolean getSnapToGridAngle() { + return this.snapToGridAngle; + } - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#getAutoUpdateImplicitHydrogens() + /* + * (non-Javadoc) + * + * @seeorg.openscience.cdk.controller.IController2DModel# + * getAutoUpdateImplicitHydrogens() */ public boolean getAutoUpdateImplicitHydrogens() { return this.autoUpdateImplicitHydrogens; } - - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#setAutoUpdateImplicitHydrogens(boolean) + + /* + * (non-Javadoc) + * + * @seeorg.openscience.cdk.controller.IController2DModel# + * setAutoUpdateImplicitHydrogens(boolean) */ public void setAutoUpdateImplicitHydrogens(boolean update) { this.autoUpdateImplicitHydrogens = update; } - - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#setSnapToGridAngle(boolean) + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#setSnapToGridAngle( + * boolean) */ - public void setSnapToGridAngle(boolean snapToGridAngle) - { - this.snapToGridAngle = snapToGridAngle; - } + public void setSnapToGridAngle(boolean snapToGridAngle) { + this.snapToGridAngle = snapToGridAngle; + } - - - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.openscience.cdk.controller.IController2DModel#getSnapAngle() */ - public int getSnapAngle() - { - return this.snapAngle; - } + public int getSnapAngle() { + return this.snapAngle; + } - - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.openscience.cdk.controller.IController2DModel#setSnapAngle(int) */ - public void setSnapAngle(int snapAngle) - { - this.snapAngle = snapAngle; - } + public void setSnapAngle(int snapAngle) { + this.snapAngle = snapAngle; + } - - - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#getSnapToGridCartesian() + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#getSnapToGridCartesian + * () */ - public boolean getSnapToGridCartesian() - { - return this.snapToGridCartesian; - } + public boolean getSnapToGridCartesian() { + return this.snapToGridCartesian; + } - - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#setSnapToGridCartesian(boolean) + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#setSnapToGridCartesian + * (boolean) */ - public void setSnapToGridCartesian(boolean snapToGridCartesian) - { - this.snapToGridCartesian = snapToGridCartesian; - } + public void setSnapToGridCartesian(boolean snapToGridCartesian) { + this.snapToGridCartesian = snapToGridCartesian; + } - - - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.openscience.cdk.controller.IController2DModel#getSnapCartesian() */ - public int getSnapCartesian() - { - return this.snapCartesian; - } + public int getSnapCartesian() { + return this.snapCartesian; + } - - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#setSnapCartesian(int) + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#setSnapCartesian(int) */ - public void setSnapCartesian(int snapCartesian) - { - this.snapCartesian = snapCartesian; - } + public void setSnapCartesian(int snapCartesian) { + this.snapCartesian = snapCartesian; + } - - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#getDefaultElementSymbol() + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#getDefaultElementSymbol + * () */ - public String getDefaultElementSymbol() { - return this.defaultElementSymbol; - } + public String getDefaultElementSymbol() { + return this.defaultElementSymbol; + } - - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#setDefaultElementSymbol(java.lang.String) + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#setDefaultElementSymbol + * (java.lang.String) */ - public void setDefaultElementSymbol(String defaultElementSymbol) - { - this.defaultElementSymbol = defaultElementSymbol; - } + public void setDefaultElementSymbol(String defaultElementSymbol) { + this.defaultElementSymbol = defaultElementSymbol; + } - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#getBondPointerLength() + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#getBondPointerLength() */ - public double getBondPointerLength() - { - return this.bondPointerLength; - } + public double getBondPointerLength() { + return this.bondPointerLength; + } - - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#setBondPointerLength(double) + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#setBondPointerLength + * (double) */ - public void setBondPointerLength(double bondPointerLength) - { - this.bondPointerLength = bondPointerLength; - } + public void setBondPointerLength(double bondPointerLength) { + this.bondPointerLength = bondPointerLength; + } - - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#getRingPointerLength() + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#getRingPointerLength() */ - public double getRingPointerLength() - { - return this.ringPointerLength; - } + public double getRingPointerLength() { + return this.ringPointerLength; + } - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#setRingPointerLength(double) + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#setRingPointerLength + * (double) */ - public void setRingPointerLength(double ringPointerLength) - { - this.ringPointerLength = ringPointerLength; - } + public void setRingPointerLength(double ringPointerLength) { + this.ringPointerLength = ringPointerLength; + } - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#setCommonElements(java.lang.String[]) + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#setCommonElements(java + * .lang.String[]) */ public void setCommonElements(String[] elements) { this.commonElements = elements; } - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#getCommonElements() + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#getCommonElements() */ public String[] getCommonElements() { return this.commonElements; } - - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#setDrawElement(java.lang.String) + + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#setDrawElement(java + * .lang.String) */ public void setDrawElement(String element) { this.drawElement = element; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.openscience.cdk.controller.IController2DModel#getDrawElement() */ public String getDrawElement() { return this.drawElement; } - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see org.openscience.cdk.controller.IController2DModel#getUndoSupport() */ - public UndoableEditSupport getUndoSupport() { - return undoSupport; - } - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#setUndoSupport(javax.swing.undo.UndoableEditSupport) + public UndoableEditSupport getUndoSupport() { + return undoSupport; + } + + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#setUndoSupport(javax + * .swing.undo.UndoableEditSupport) */ - public void setUndoSupport(UndoableEditSupport undoSupport) { - this.undoSupport = undoSupport; - } - /* (non-Javadoc) + public void setUndoSupport(UndoableEditSupport undoSupport) { + this.undoSupport = undoSupport; + } + + /* + * (non-Javadoc) + * * @see org.openscience.cdk.controller.IController2DModel#getUndoManager() */ - public UndoManager getUndoManager() { - return undoManager; - } - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#setUndoManager(javax.swing.undo.UndoManager) + public UndoManager getUndoManager() { + return undoManager; + } + + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#setUndoManager(javax + * .swing.undo.UndoManager) */ - public void setUndoManager(UndoManager undoManager) { - this.undoManager = undoManager; - } + public void setUndoManager(UndoManager undoManager) { + this.undoManager = undoManager; + } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.openscience.cdk.controller.IController2DModel#isMovingAllowed() */ - public boolean isMovingAllowed() { - return isMovingAllowed; - } + public boolean isMovingAllowed() { + return isMovingAllowed; + } - /* (non-Javadoc) - * @see org.openscience.cdk.controller.IController2DModel#setMovingAllowed(boolean) + /* + * (non-Javadoc) + * + * @see + * org.openscience.cdk.controller.IController2DModel#setMovingAllowed(boolean + * ) */ - public void setMovingAllowed(boolean isMovingAllowed) { - this.isMovingAllowed = isMovingAllowed; - } + public void setMovingAllowed(boolean isMovingAllowed) { + this.isMovingAllowed = isMovingAllowed; + } } Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java 2008-11-28 16:16:21 UTC (rev 13373) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java 2008-11-28 18:05:38 UTC (rev 13374) @@ -65,6 +65,8 @@ public IntermediateRenderer() { this.rendererModel = new Renderer2DModel(); this.rendererModel.setHighlightRadiusModel(3.5); + this.rendererModel.setBondDistance(0.15); + this.generators = new ArrayList<IGenerator>(); this.generators.add(new BasicBondGenerator(this.rendererModel)); this.generators.add(new BasicAtomGenerator(this.rendererModel)); Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Java2DRenderer.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Java2DRenderer.java 2008-11-28 16:16:21 UTC (rev 13373) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Java2DRenderer.java 2008-11-28 18:05:38 UTC (rev 13374) @@ -322,7 +322,8 @@ Color atomColor = rendererModel.getAtomColor(atom, Color.BLACK); Color otherColor = rendererModel.getForeColor(); Color bgColor; - if (atom == rendererModel.getHighlightedAtom()) { +// if (atom == rendererModel.getHighlightedAtom()) { + if (false) { bgColor = rendererModel.getHoverOverColor(); } else if (rendererModel.getBackColor() != null) { bgColor = rendererModel.getBackColor(); @@ -689,16 +690,16 @@ { bondColor = rendererModel.getForeColor(); } - if (currentBond == rendererModel.getHighlightedBond() && - (rendererModel.getSelectedPart()==null || !rendererModel.getSelectedPart().contains(currentBond))) - { - bondColor = rendererModel.getHoverOverColor(); - for (int j = 0; j < currentBond.getAtomCount(); j++) - { - paintColouredAtomBackground(currentBond.getAtom(j), bondColor, graphics); - - } - } +// if (currentBond == rendererModel.getHighlightedBond() && +// (rendererModel.getSelectedPart()==null || !rendererModel.getSelectedPart().contains(currentBond))) +// { +// bondColor = rendererModel.getHoverOverColor(); +// for (int j = 0; j < currentBond.getAtomCount(); j++) +// { +// paintColouredAtomBackground(currentBond.getAtom(j), bondColor, graphics); +// +// } +// } ring = RingSetManipulator.getHeaviestRing(ringSet, currentBond); if (ring != null) { Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer2DModel.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer2DModel.java 2008-11-28 16:16:21 UTC (rev 13373) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer2DModel.java 2008-11-28 18:05:38 UTC (rev 13374) @@ -25,10 +25,10 @@ package org.openscience.cdk.renderer; import java.awt.Color; -import java.awt.Dimension; import java.awt.Font; import java.awt.Point; import java.awt.Polygon; +import java.io.Serializable; import java.util.ArrayList; import java.util.EventObject; import java.util.HashMap; @@ -37,8 +37,6 @@ import java.util.List; import java.util.Map; -import javax.vecmath.Point2d; - import org.openscience.cdk.event.ICDKChangeListener; import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; @@ -49,526 +47,375 @@ /** * Model for {@link Renderer2DModel} that contains settings for drawing objects. - * + * * @cdk.module render - * @cdk.svnrev $Revision$ + * @cdk.svnrev $Revision$ */ -public class Renderer2DModel implements java.io.Serializable, Cloneable { - - private static final long serialVersionUID = -4420308906715213445L; +public class Renderer2DModel implements Serializable, Cloneable { - private double scaleFactor = 60.0; + private static final long serialVersionUID = -4420308906715213445L; + private RenderingParameters parameters; + + /* If true, the class will notify its listeners of changes */ + private boolean notification = true; + + private transient List<ICDKChangeListener> listeners = new ArrayList<ICDKChangeListener>(); + + private double[] rotateCenter = null; + + private double rotateRadius = 0; + /** Determines how much the image is zoomed into on. */ private double zoomFactor = 1.0; - - private double bondWidth = 2.0; - private double bondDistance = 0.15; + private double bondLength = 36.0; - private double bondLength = 36.0; - - private Color backColor = Color.white; - private Color foreColor = Color.black; - private Color mappingColor = Color.gray; - - private Color hoverOverColor = Color.lightGray; - private Color selectedPartColor = Color.lightGray; - private Color externalHighlightColor = Color.orange; - - /** - * @deprecated old way of storing highlightRadius based on screensize, new one: {@link #highlightRadiusModel()} - */ - @Deprecated private double highlightRadius = 10.0; - private double highlightRadiusModel = 0.7; - - private boolean willDrawNumbers = false; - - private boolean showAtomTypeNames = false; - - private boolean showAtomAtomMapping = true; - - private boolean useAntiAliasing = true; - - private boolean showReactionBoxes = true; - - private boolean showMoleculeTitle = false; - - private int atomRadius = 8; - - private IAtom highlightedAtom = null; - - private IBond highlightedBond = null; - - /** + /** * The color hash is used to color substructures. + * * @see #getColorHash() */ - private Map<IChemObject,Color> colorHash = new Hashtable<IChemObject,Color>(); - private IAtomColorer colorer = new CDK2DAtomColors(); - - private transient List<ICDKChangeListener> listeners = new ArrayList<ICDKChangeListener>(); - - private Point pointerVectorStart = null; - - private Point pointerVectorEnd = null; - - private Polygon selectRect = null; - - private IAtomContainer selectedPart = null; - private IAtomContainer externalSelectedPart = null; - private IAtomContainer clipboardContent = null; - - private List<Point> lassoPoints = new ArrayList<Point>(); + private Map<IChemObject, Color> colorHash = new Hashtable<IChemObject, Color>(); - /** Determines whether structures should be drawn as Kekule structures, - * thus giving each carbon element explicitly, instead of not displaying - * the element symbol. Example C-C-C instead of /\. - */ - private boolean kekuleStructure = false; + private Map<IAtom, String> toolTipTextMap = new HashMap<IAtom, String>(); + + private IAtomColorer colorer = new CDK2DAtomColors(); - /** Determines whether methyl carbons' symbols should be drawn explicit - * for methyl carbons. Example C/\C instead of /\. - */ - private boolean showEndCarbons = false; - - /** Determines whether implicit hydrogens should be drawn. */ - private boolean showImplicitHydrogens = true; - - /** Determines whether implicit hydrogens should be drawn. */ - private boolean showExplicitHydrogens = true; - - /** Determines whether rings should be drawn with a circle if they are aromatic. */ - private boolean showAromaticity = false; - private boolean showAromaticityInCDKStyle = false; - - /** Determines whether atoms are colored by type. */ - private boolean colorAtomsByType = true; - - private Dimension backgroundDimension = new Dimension(794,1123); + private IAtom highlightedAtom = null; - private boolean showTooltip = false; + private IBond highlightedBond = null; - private Map<IAtom,String> toolTipTextMap = new HashMap<IAtom,String>(); + private IAtomContainer selectedPart = null; - private Font customFont = null; + private IAtomContainer externalSelectedPart = null; - private boolean compact=false; + private IAtomContainer clipboardContent = null; - private HashMap merge=new HashMap(); - - private double[] rotateCenter=null; - private double rotateRadius=0; - - private boolean notification = true; - - /** - * Area on each of the four margins to keep white. - */ - private double margin = 0.05; - + private Polygon selectRect = null; + + private List<Point> lassoPoints = new ArrayList<Point>(); + + public Renderer2DModel() { + this.parameters = new RenderingParameters(); + } + + public Renderer2DModel(RenderingParameters parameters) { + this.parameters = parameters; + } + /** * @return null if no custom font set */ public Font getFont() { - return customFont; + return this.parameters.getCustomFont(); } - - public void setFont(Font font) { - this.customFont = font; + + public void setFont(Font customFont) { + this.parameters.setCustomFont(customFont); fireChange(); } - + public boolean getIsCompact() { - return compact; + return this.parameters.isCompact(); } - + public void setIsCompact(boolean compact) { - this.compact=compact; + this.parameters.setCompact(compact); } public boolean getUseAntiAliasing() { - return useAntiAliasing; + return this.parameters.isUseAntiAliasing(); } - + public void setUseAntiAliasing(boolean bool) { - this.useAntiAliasing = bool; + this.parameters.setUseAntiAliasing(bool); fireChange(); } - + public boolean getShowReactionBoxes() { - return showReactionBoxes; + return this.parameters.isShowReactionBoxes(); } - + public void setShowReactionBoxes(boolean bool) { - this.showReactionBoxes = bool; + this.parameters.setShowReactionBoxes(bool); fireChange(); } - + public boolean getShowMoleculeTitle() { - return showMoleculeTitle; + return this.parameters.isShowMoleculeTitle(); } - + public void setShowMoleculeTitle(boolean bool) { - this.showMoleculeTitle = bool; + this.parameters.setShowMoleculeTitle(bool); fireChange(); } - + /** - * Returns the active background dimensions, thus applying the zoom - * factor. - * - * @see #getUnzoomedBackgroundDimension + * Returns the distance between two lines in a double or triple bond + * + * @return the distance between two lines in a double or triple bond */ - public Dimension getBackgroundDimension() { - return new Dimension((int)((double)backgroundDimension.getWidth() * zoomFactor), - (int)((double)backgroundDimension.getHeight() * zoomFactor)); + public double getBondDistance() { + return this.parameters.getBondDistance(); } - + /** - * Returns the unzoomed background dimensions. - * - * @see #getBackgroundDimension + * Sets the distance between two lines in a double or triple bond + * + * @param bondDistance + * the distance between two lines in a double or triple bond */ - public Dimension getUnzoomedBackgroundDimension() { - return backgroundDimension; + public void setBondDistance(double bondDistance) { + this.parameters.setBondDistance(bondDistance); + fireChange(); } - + /** - * Sets the background dimensions in an unzoomed state. + * Returns the thickness of a bond line. + * + * @return the thickness of a bond line */ - public void setBackgroundDimension(Dimension dim) { - this.backgroundDimension = dim; - fireChange(); + public double getBondWidth() { + return this.parameters.getBondDistance(); } - - /** - * Returns the distance between two lines in a double or triple bond - * - * @return the distance between two lines in a double or triple bond - */ - public double getBondDistance() { - return this.bondDistance; - } - - /** - * Sets the distance between two lines in a double or triple bond - * - * @param bondDistance the distance between two lines in a double or triple bond - */ - public void setBondDistance(double bondDistance) { - this.bondDistance = bondDistance; + /** + * Sets the thickness of a bond line. + * + * @param bondWidth + * the thickness of a bond line + */ + public void setBondWidth(double bondWidth) { + this.parameters.setBondWidth(bondWidth); fireChange(); - } + } - + /** + * Returns the length of a bond line. + * + * @return the length of a bond line + */ + public double getBondLength() { + return this.bondLength; + } - /** - * Returns the thickness of a bond line. - * - * @return the thickness of a bond line - */ - public double getBondWidth() - { - return this.bondWidth; - } - - - /** - * Sets the thickness of a bond line. - * - * @param bondWidth the thickness of a bond line - */ - public void setBondWidth(double bondWidth) - { - this.bondWidth = bondWidth; + /** + * Sets the length of a bond line. + * + * @param bondLength + * the length of a bond line + */ + public void setBondLength(double bondLength) { + this.bondLength = bondLength; fireChange(); - } + } + /** + * A zoom factor for the drawing. + * + * @return a zoom factor for the drawing + */ + public double getZoomFactor() { + return this.zoomFactor; + } - /** - * Returns the length of a bond line. - * - * @return the length of a bond line - */ - public double getBondLength() - { - return this.bondLength; - } - - - /** - * Sets the length of a bond line. - * - * @param bondLength the length of a bond line - */ - public void setBondLength(double bondLength) - { - this.bondLength = bondLength; + /** + * Returns the zoom factor for the drawing. + * + * @param zoomFactor + * the zoom factor for the drawing + */ + public void setZoomFactor(double zoomFactor) { + this.zoomFactor = zoomFactor; fireChange(); - } - + } - /** - * A scale factor for the drawing. - * - * @return a scale factor for the drawing - */ - public double getScaleFactor() - { - return this.scaleFactor; - } + /** + * Returns the foreground color for the drawing. + * + * @return the foreground color for the drawing + */ + public Color getForeColor() { + return this.parameters.getForeColor(); + } - - /** - * Returns the scale factor for the drawing - * - * @param scaleFactor the scale factor for the drawing - */ - public void setScaleFactor(double scaleFactor) - { - this.scaleFactor = scaleFactor; + /** + * Sets the foreground color with which bonds and atoms are drawn + * + * @param foreColor + * the foreground color with which bonds and atoms are drawn + */ + public void setForeColor(Color foreColor) { + this.parameters.setForeColor(foreColor); fireChange(); - } + } - /** - * A zoom factor for the drawing. - * - * @return a zoom factor for the drawing - */ - public double getZoomFactor() { - return this.zoomFactor; - } + /** + * Returns the background color + * + * @return the background color + */ + public Color getBackColor() { + return this.parameters.getBackColor(); + } - - /** - * Returns the zoom factor for the drawing. - * - * @param zoomFactor the zoom factor for the drawing - */ - public void setZoomFactor(double zoomFactor) { - this.zoomFactor = zoomFactor; + /** + * Sets the background color + * + * @param backColor + * the background color + */ + public void setBackColor(Color backColor) { + this.parameters.setBackColor(backColor); fireChange(); - } + } - /** - * Returns the foreground color for the drawing. - * - * @return the foreground color for the drawing - */ - public Color getForeColor() - { - return this.foreColor; - } - - - /** - * Sets the foreground color with which bonds and atoms are drawn - * - * @param foreColor the foreground color with which bonds and atoms are drawn - */ - public void setForeColor(Color foreColor) - { - this.foreColor = foreColor; - fireChange(); - } - - - - /** - * Returns the background color - * - * @return the background color - */ - public Color getBackColor() - { - return this.backColor; - } - - - /** - * Sets the background color - * - * @param backColor the background color - */ - public void setBackColor(Color backColor) - { - this.backColor = backColor; - fireChange(); - } - /** - * Returns the atom-atom mapping line color - * - * @return the atom-atom mapping line color + * Returns the atom-atom mapping line color + * + * @return the atom-atom mapping line color */ public Color getAtomAtomMappingLineColor() { - return this.mappingColor; + return this.parameters.getMappingColor(); } /** - * Sets the atom-atom mapping line color - * - * @param mappingColor the atom-atom mapping line color + * Sets the atom-atom mapping line color + * + * @param mappingColor + * the atom-atom mapping line color */ public void setAtomAtomMappingLineColor(Color mappingColor) { - this.mappingColor = mappingColor; + this.parameters.setMappingColor(mappingColor); fireChange(); } - - /** - * Returns if the drawing of atom numbers is switched on for this model - * - * @return true if the drawing of atom numbers is switched on for this model - */ - public boolean drawNumbers() - { - return this.willDrawNumbers; - } + /** + * Returns if the drawing of atom numbers is switched on for this model + * + * @return true if the drawing of atom numbers is switched on for this model + */ + public boolean drawNumbers() { + return this.parameters.isWillDrawNumbers(); + } - public boolean getKekuleStructure() { - return this.kekuleStructure; - } + public boolean getKekuleStructure() { + return this.parameters.isKekuleStructure(); + } - public void setKekuleStructure(boolean kekule) { - this.kekuleStructure = kekule; + public void setKekuleStructure(boolean kekule) { + this.parameters.setKekuleStructure(kekule); fireChange(); - } + } public boolean getColorAtomsByType() { - return this.colorAtomsByType; + return this.parameters.isColorAtomsByType(); } - + public void setColorAtomsByType(boolean bool) { - this.colorAtomsByType = bool; + this.parameters.setColorAtomsByType(bool); fireChange(); } public boolean getShowEndCarbons() { - return this.showEndCarbons; + return this.parameters.isShowEndCarbons(); } - + public void setShowEndCarbons(boolean showThem) { - this.showEndCarbons = showThem; + this.parameters.setShowEndCarbons(showThem); fireChange(); } - + public boolean getShowImplicitHydrogens() { - return this.showImplicitHydrogens; + return this.parameters.isShowImplicitHydrogens(); } - + public void setShowImplicitHydrogens(boolean showThem) { - this.showImplicitHydrogens = showThem; + this.parameters.setShowImplicitHydrogens(showThem); fireChange(); } - + public boolean getShowExplicitHydrogens() { - return this.showExplicitHydrogens; + return this.parameters.isShowExplicitHydrogens(); } - + public void setShowExplicitHydrogens(boolean showThem) { - this.showExplicitHydrogens = showThem; + this.parameters.setShowExplicitHydrogens(showThem); fireChange(); } - + public boolean getShowAromaticity() { - return this.showAromaticity; + return this.parameters.isShowAromaticity(); } - + public void setShowAromaticity(boolean showIt) { - this.showAromaticity = showIt; + this.parameters.setShowAromaticity(showIt); fireChange(); } - + public boolean getShowAromaticityInCDKStyle() { - return this.showAromaticityInCDKStyle; + return this.getShowAromaticityInCDKStyle(); } - + public void setShowAromaticityInCDKStyle(boolean showIt) { - this.showAromaticityInCDKStyle = showIt; + this.parameters.setShowAromaticityInCDKStyle(showIt); fireChange(); } - - /** - * Sets if the drawing of atom numbers is switched on for this model. - * - * @param drawNumbers true if the drawing of atom numbers is to be switched on for this model - */ - public void setDrawNumbers(boolean drawNumbers) - { - this.willDrawNumbers = drawNumbers; + + /** + * Sets if the drawing of atom numbers is switched on for this model. + * + * @param drawNumbers + * true if the drawing of atom numbers is to be switched on for + * this model + */ + public void setDrawNumbers(boolean drawNumbers) { + this.parameters.setWillDrawNumbers(drawNumbers); fireChange(); - } + } - /** - * Returns true if atom numbers are drawn. - */ - public boolean getDrawNumbers() { - return willDrawNumbers; - } + /** + * Returns true if atom numbers are drawn. + */ + public boolean getDrawNumbers() { + return this.parameters.isWillDrawNumbers(); + } + /** + * Returns the radius around an atoms, for which the atom is marked + * highlighted if a pointer device is placed within this radius. + * + * @return The highlight radius for all atoms (in model based size) + */ + public double getHighlightRadiusModel() { + return this.parameters.getHighlightRadiusModel(); + } - /** - * Returns the radius around an atoms, for which the atom is - * marked highlighted if a pointer device is placed within this radius. - * - * @return The highlight radius for all atoms (in screensize) - * @deprecated old way of getting highlightRadius, new one: {@link #getHighlightRadiusModel()} - */ - @Deprecated public double getHighlightRadius() - { - return this.highlightRadius; - } - - - /** - * Sets the radius around an atoms, for which the atom is - * marked highlighted if a pointer device is placed within this radius. - * - * @param highlightRadius the highlight radius of all atoms (in screensize) - * @deprecated old way of getting highlightRadius, new one: {@link #setHighlightRadiusModel()} - */ - @Deprecated public void setHighlightRadius(double highlightRadius) - { - this.highlightRadius = highlightRadius; + /** + * Sets the radius around an atoms, for which the atom is marked highlighted + * if a pointer device is placed within this radius. + * + * @param highlightRadius + * the highlight radius of all atoms (in model based size) + */ + public void setHighlightRadiusModel(double highlightRadius) { + this.parameters.setHighlightRadiusModel(highlightRadius); fireChange(); - } - /** - * Returns the radius around an atoms, for which the atom is - * marked highlighted if a pointer device is placed within this radius. - * - * @return The highlight radius for all atoms (in model based size) - */ - public double getHighlightRadiusModel() - { - return this.highlightRadiusModel; - } - /** - * Sets the radius around an atoms, for which the atom is - * marked highlighted if a pointer device is placed within this radius. - * - * @param highlightRadius the highlight radius of all atoms (in model based size) - */ - public void setHighlightRadiusModel(double highlightRadius) - { - this.highlightRadiusModel = highlightRadius; - fireChange(); - } - /** + } + + /** * Returns whether Atom-Atom mapping must be shown. */ - public boolean getShowAtomAtomMapping() { - return this.showAtomAtomMapping; - } + public boolean getShowAtomAtomMapping() { + return this.parameters.isShowAtomAtomMapping(); + } - /** * Sets whether Atom-Atom mapping must be shown. */ public void setShowAtomAtomMapping(boolean value) { - this.showAtomAtomMapping = value; + this.parameters.setShowAtomAtomMapping(value); fireChange(); } @@ -576,99 +423,87 @@ * XXX No idea what this is about. */ public int getAtomRadius() { - return this.atomRadius; + return this.parameters.getAtomRadius(); } - - /** - * XXX No idea what this is about. - * - * @param atomRadius XXX No idea what this is about - */ - public void setAtomRadius(int atomRadius) - { - this.atomRadius = atomRadius; + /** + * XXX No idea what this is about. + * + * @param atomRadius + * XXX No idea what this is about + */ + public void setAtomRadius(int atomRadius) { + this.parameters.setAtomRadius(atomRadius); fireChange(); - } + } - + /** + * Returns the atom currently highlighted. + * + * @return the atom currently highlighted + */ + public IAtom getHighlightedAtom() { + return this.highlightedAtom; + } - /** - * Returns the atom currently highlighted. - * - * @return the atom currently highlighted - */ - public IAtom getHighlightedAtom() - { - return this.highlightedAtom; - } - - - /** - * Sets the atom currently highlighted. - * - * @param highlightedAtom The atom to be highlighted - */ - public void setHighlightedAtom(IAtom highlightedAtom) - { + /** + * Sets the atom currently highlighted. + * + * @param highlightedAtom + * The atom to be highlighted + */ + public void setHighlightedAtom(IAtom highlightedAtom) { if ((this.highlightedAtom != null) || (highlightedAtom != null)) { this.highlightedAtom = highlightedAtom; fireChange(); } } - + /** + * Returns the Bond currently highlighted. + * + * @return the Bond currently highlighted + */ + public IBond getHighlightedBond() { + return this.highlightedBond; + } - /** - * Returns the Bond currently highlighted. - * - * @return the Bond currently highlighted - */ - public IBond getHighlightedBond() - { - return this.highlightedBond; - } - - - /** - * Sets the Bond currently highlighted. - * - * @param highlightedBond The Bond to be currently highlighted - */ - public void setHighlightedBond(IBond highlightedBond) - { + /** + * Sets the Bond currently highlighted. + * + * @param highlightedBond + * The Bond to be currently highlighted + */ + public void setHighlightedBond(IBond highlightedBond) { if ((this.highlightedBond != null) || (highlightedBond != null)) { this.highlightedBond = highlightedBond; fireChange(); } } - + /** + * Returns the {@link Map} used for coloring substructures. + * + * @return the {@link Map} used for coloring substructures + */ + public Map<IChemObject, Color> getColorHash() { + return this.colorHash; + } - /** - * Returns the {@link Map} used for coloring substructures. - * - * @return the {@link Map} used for coloring substructures - */ - public Map<IChemObject,Color> getColorHash() { - return this.colorHash; - } - /** - * Returns the drawing color of the given atom. - * An atom is colored as highlighted if hightlighted. - * The atom is color marked if in a substructure. - * If not, the color from the CDK2DAtomColor is used - * (if selected). Otherwise, the atom is colored black. + * Returns the drawing color of the given atom. An atom is colored as + * highlighted if highlighted. The atom is color marked if in a + * substructure. If not, the color from the CDK2DAtomColor is used (if + * selected). Otherwise, the atom is colored black. */ public Color getAtomColor(IAtom atom, Color defaultColor) { // logger.debug("Getting atom front color for " + atom.toString()); - if( atom == null) { + if (atom == null) { return defaultColor; } - + Color atomColor = defaultColor; - if (colorAtomsByType) { + if (this.parameters.isColorAtomsByType()) { // logger.debug("Coloring atom by type"); atomColor = colorer.getAtomColor(atom); } @@ -685,422 +520,354 @@ // logger.debug(" BackColor: " + atomColor.toString()); Color hashColor = (Color) this.getColorHash().get(atom); if (hashColor != null) { - // logger.debug("Background color atom according to hashing (substructure)"); + // logger.debug( + // "Background color atom according to hashing (substructure)"); atomColor = hashColor; } - if (atom == this.getHighlightedAtom()) { - // logger.debug("Background color atom according to highlighting"); - atomColor = this.getHoverOverColor(); - } +// if (atom == this.getHighlightedAtom()) { +// // logger.debug("Background color atom according to highlighting"); +// atomColor = this.getHoverOverColor(); +// } // logger.debug("Color: " + atomColor.toString()); return atomColor; } /** * Returns the current atom colorer. - * - * @return The AtomColorer. + * + * @return The AtomColorer. */ - public IAtomColorer getAtomColorer() - { + public IAtomColorer getAtomColorer() { return colorer; } /** * Sets the atom colorer. - * - * @param atomColorer the new colorer. + * + * @param atomColorer + * the new colorer. */ - public void setAtomColorer(final IAtomColorer atomColorer) - { + public void setAtomColorer(final IAtomColorer atomColorer) { colorer = atomColorer; } - /** - * Sets the {@link Map} used for coloring substructures - * - * @param colorHash the {@link Map} used for coloring substructures - */ - public void setColorHash(Map<IChemObject,Color> colorHash) - { - this.colorHash = colorHash; + /** + * Sets the {@link Map} used for coloring substructures + * + * @param colorHash + * the {@link Map} used for coloring substructures + */ + public void setColorHash(Map<IChemObject, Color> colorHash) { + this.colorHash = colorHash; fireChange(); - } - + } - /** - * Returns the end of the pointer vector - * - * @return the end point - */ - public Point getPointerVectorEnd() - { - return this.pointerVectorEnd; - } + /** + * Returns selected rectangular + * + * @return the selection + */ + public Polygon getSelectRect() { + return this.selectRect; + } + /** + * Sets a selected region + * + * @param selectRect + */ + public void setSelectRect(Polygon selectRect) { + this.selectRect = selectRect; + fireChange(); + } - /** - * Sets the end of a pointer vector - * - * @param pointerVectorEnd - */ - public void setPointerVectorEnd(Point pointerVectorEnd) - { - this.pointerVectorEnd = pointerVectorEnd; - fireChange(); - } + /** + * Returns the atoms and bonds on the Renderer2D clipboard. If the clipboard + * is empty it returns null. Primarily used for copy/paste. + * + * @return an atomcontainer with the atoms and bonds on the clipboard. + */ + public IAtomContainer getClipboardContent() { + return clipboardContent; + } - + /** + * Sets the atoms and bonds on the Renderer2D clipboard. Primarily used for + * copy/paste. + * + * @param content + * the new content of the clipboard. + */ + public void setClipboardContent(IAtomContainer content) { + this.clipboardContent = content; + } - /** - * Returns the start of a pointer vector - * - * @return the start point - */ - public Point getPointerVectorStart() - { - return this.pointerVectorStart; - } + /** + * Get selected atoms. These are atoms selected internally in e. g. JCP with + * the lasso, painted in selectedPartColor + * + * @return an atomcontainer with the selected atoms + */ + public IAtomContainer getSelectedPart() { + return this.selectedPart; + } + /** + * Sets the selected atoms. These are atoms selected internally in e. g. JCP + * with the lasso, painted in selectedPartColor + * + * @param selectedPart + */ + public void setSelectedPart(IAtomContainer selectedPart) { + this.selectedPart = selectedPart; + getColorHash().clear(); + for (int i = 0; i < selectedPart.getAtomCount(); i++) { + getColorHash().put(selectedPart.getAtom(i), + this.getSelectedPartColor()); + } + Iterator<IBond> bonds = selectedPart.bonds().iterator(); + while (bonds.hasNext()) { + getColorHash().put(bonds.next(), getSelectedPartColor()); + } + fireChange(); + } - /** - * Sets the start point of a pointer vector - * - * @param pointerVectorStart - */ - public void setPointerVectorStart(Point pointerVectorStart) - { - this.pointerVectorStart = pointerVectorStart; - fireChange(); - } - - + /** + * Returns a set of points constituating a selected region + * + * @return a vector with points + */ + public List<Point> getLassoPoints() { + return this.lassoPoints; + } - /** - * Returns selected rectangular - * - * @return the selection - */ - public Polygon getSelectRect() - { - return this.selectRect; - } + /** + * Adds a point to the list of lasso points + * + * @param point + * Point to add to list + */ + public void addLassoPoint(Point point) { + this.lassoPoints.add(point); + fireChange(); + } + /** + * Adds a change listener to the list of listeners + * + * @param listener + * The listener added to the list + */ - /** - * Sets a selected region - * - * @param selectRect - */ - public void setSelectRect(Polygon selectRect) - { - this.selectRect = selectRect; - fireChange(); - } + public void addCDKChangeListener(ICDKChangeListener listener) { + if (listeners == null) { + listeners = new ArrayList<ICDKChangeListener>(); + } + if (!listeners.contains(listener)) { + listeners.add(listener); + } + } - + /** + * Removes a change listener from the list of listeners + * + * @param listener + * The listener removed from the list + */ + public void removeCDKChangeListener(ICDKChangeListener listener) { + listeners.remove(listener); + } /** - * Returns the atoms and bonds on the Renderer2D clipboard. If the clipboard - * is empty it returns null. - * Primarily used for copy/paste. - * - * @return an atomcontainer with the atoms and bonds on the clipboard. + * Notifies registered listeners of certain changes that have occurred in + * this model. */ - public IAtomContainer getClipboardContent() { - return clipboardContent; + public void fireChange() { + if (getNotification() && listeners != null) { + EventObject event = new EventObject(this); + for (int i = 0; i < listeners.size(); i++) { + listeners.get(i).stateChanged(event); + } + } } + /** + * Gets the toolTipText for atom certain atom. + * + * @param atom + * The atom. + * @return The toolTipText value. + */ + public String getToolTipText(IAtom atom) { + if (toolTipTextMap.get(atom) != null) { + return toolTipTextMap.get(atom); + } else { + return null; + } + } /** - * Sets the atoms and bonds on the Renderer2D clipboard. - * Primarily used for copy/paste. - * - * @param content the new content of the clipboard. + * Sets the showTooltip attribute. + * + * @param showToolTip + * The new value. */ - public void setClipboardContent(IAtomContainer content) { - this.clipboardContent = content; + public void setShowTooltip(boolean showTooltip) { + this.parameters.setShowTooltip(showTooltip); + fireChange(); } - /** - * Get selected atoms. These are atoms selected internally in e. g. JCP with the lasso, painted in selectedPartColor - * - * @return an atomcontainer with the selected atoms - */ - public IAtomContainer getSelectedPart() - { - return this.selectedPart; - } + /** + * Gets showTooltip attribute. + * + * @return The showTooltip value. + */ + public boolean getShowTooltip() { + return this.parameters.isShowTooltip(); + } - /** - * Sets the selected atoms. These are atoms selected internally in e. g. JCP with the lasso, painted in selectedPartColor - * - * @param selectedPart - */ - public void setSelectedPart(IAtomContainer selectedPart) - { - this.selectedPart = selectedPart; - getColorHash().clear(); - for (int i = 0; i < selectedPart.getAtomCount(); i++) - { - getColorHash().put(selectedPart.getAtom(i), this.getSelectedPartColor()); - } - Iterator<IBond> bonds = selectedPart.bonds().iterator(); - while (bonds.hasNext()) { - getColorHash().put(bonds.next(), getSelectedPartColor()); - } + /** + * Sets the toolTipTextMap. + * + * @param map + * A map containing Atoms of the current molecule as keys and + * Strings to display as values. A line break will be inserted + * where a \n is in the string. + */ + public void setToolTipTextMap(Map<IAtom, String> map) { + toolTipTextMap = map; fireChange(); - } + } + /** + * Gets the toolTipTextMap. + * + * @return The toolTipTextValue. + */ + public Map<IAtom, String> getToolTipTextMap() { + return toolTipTextMap; + } - /** - * Returns a set of points constituating a selected region - * - * @return a vector with points - */ - public List<Point> getLassoPoints() - { - return this.lassoPoints; - } + public double[] getRotateCenter() { + return rotateCenter; + } + public void setRotateCenter(double x, double y) { + double[] rotateCenter = { x, y }; + this.rotateCenter = rotateCenter; + } - /** - * Adds a point to the list of lasso points - * - * @param point Point to add to list - */ - public void addLassoPoint(Point point) - { - this.lassoPoints.add(point); - fireChange(); - } + public double getRotateRadius() { + return rotateRadius; + } + public void setRotateRadius(double rotateRadius) { + this.rotateRadius = rotateRadius; + } - /** - * Adds a change listener to the list of listeners - * - * @param listener The listener added to the list - */ + /** + * Gets the color used for drawing the part which was selected externally + */ + public Color getExternalHighlightColor() { + return this.parameters.getExternalHighlightColor(); + } - public void addCDKChangeListener(ICDKChangeListener listener) - { - if (listeners == null) { - listeners = new ArrayList<ICDKChangeListener>(); - } - if (!listeners.contains(listener)) { - listeners.add(listener); - } - } - + /** + * Sets the color used for drawing the part which was selected externally + * + * @param externalHighlightColor + * The color + */ + public void setExternalHighlightColor(Color externalHighlightColor) { + this.parameters.setExternalHighlightColor(externalHighlightColor); + } - /** - * Removes a change listener from the list of listeners - * - * @param listener The listener removed from the list - */ - public void removeCDKChangeListener(ICDKChangeListener listener) { - listeners.remove(listener); - } + /** + * Gets the color used for drawing the part we are hovering over. + */ + public Color getHoverOverColor() { + return this.parameters.getHoverOverColor(); + } + /** + * Sets the color used for drawing the part we are hovering over. + * + * @param hoverOverColor + * The color + */ + public void setHoverOverColor(Color hoverOverColor) { + this.parameters.setHoverOverColor(hoverOverColor); + } - /** - * Notifies registered listeners of certain changes - * that have occurred in this model. - */ - public void fireChange() { - if (getNotification() && listeners != null) { - EventObject event = new EventObject(this); - for (int i = 0; i < listeners.size(); i++) { - listeners.get(i).stateChanged(event); - } - } - } - - - /** - * Gets the toolTipText for atom certain atom. - * - * @param atom The atom. - * @return The toolTipText value. - */ - public String getToolTipText(IAtom atom) { - if (toolTipTextMap.get(atom) != null) { - return toolTipTextMap.get(atom); - } else { - return null; - } - } + /** + * Gets the color used for drawing the internally selected part. + */ + public Color getSelectedPartColor() { + return this.parameters.getSelectedPartColor(); + } + /** + * Sets the color used for drawing the internally selected part. + * + * @param selectedPartColor + * The color + */ + public void setSelectedPartColor(Color selectedPartColor) { + this.parameters.setSelectedPartColor(selectedPartColor); + } /** - * Sets the showTooltip attribute. - * - * @param showToolTip The new value. - */ - public void setShowTooltip(boolean showToolTip) { - this.showTooltip = showToolTip; - fireChange(); + * Get externally selected atoms. These are atoms selected externally in e. + * g. Bioclipse via the ChemObjectTree, painted in externalSelectedPartColor + * + * @return the selected part + */ + public IAtomContainer getExternalSelectedPart() { + return externalSelectedPart; } - - - /** - * Gets showTooltip attribute. - * - * @return The showTooltip value. - */ - public boolean getShowTooltip(){ - return(showTooltip); - } - - - /** - * Sets the toolTipTextMap. - * - * @param map A map containing Atoms of the current molecule as keys and Strings to display as values. A line break will be inserted where a \n is in the string. - */ - public void setToolTipTextMap(Map<IAtom,String> map){ - toolTipTextMap=map; - fireChange(); - } - - /** - * Gets the toolTipTextMap. - * - * @return The toolTipTextValue. - */ - public Map<IAtom,String> getToolTipTextMap(){ - return toolTipTextMap; - } - - /** - * This is the central facility for handling "merges" of atoms. A merge occures if during moving atoms an atom is in Range of another atom. - * These atoms are then put into the merge map as a key-value pair. During the move, the atoms are then marked by a circle and on releasing the mouse - * they get actually merged, meaning one atom is removed and bonds pointing to this atom are made to point to the atom it has been marged with. - * - * @return Returns the merge.map - * - * FIXME: this belongs in the controller model... this is not about rendering, it's about editing (aka controlling) - */ - public HashMap getMerge() { - return merge; - } - - - public double[] getRotateCenter() { - return rotateCenter; - } - - public void setRotateCenter(double x, double y) { - double[] rotateCenter={x,y}; - this.rotateCenter = rotateCenter; - } - - public double getRotateRadius() { - return rotateRadius; - } - - public void setRotateRadius(double rotateRadius) { - this.rotateRadius = rotateRadius; - } - - /** - * Gets the color used for drawing the part which was selected externally - */ - public Color getExternalHighlightColor() { - return externalHighlightColor; - } - - /** - * Sets the color used for drawing the part which was selected externally - * - * @param externalHighlightColor The color - */ - public void setExternalHighlightColor(Color externalHighlightColor) { - this.externalHighlightColor = externalHighlightColor; - } - - /** - * Gets the color used for drawing the part we are hovering over. - */ - public Color getHoverOverColor() { - return hoverOverColor; - } - - /** - * Sets the color used for drawing the part we are... [truncated message content] |
From: <gil...@us...> - 2008-12-01 10:42:52
|
Revision: 13399 http://cdk.svn.sourceforge.net/cdk/?rev=13399&view=rev Author: gilleain Date: 2008-12-01 10:42:48 +0000 (Mon, 01 Dec 2008) Log Message: ----------- Selections. Modified Paths: -------------- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Java2DRenderer.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer2DModel.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RenderingParameters.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/visitor/TransformingDrawVisitor.java jchempaint/trunk/src/main/org/openscience/jchempaint/InsertTextPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/ChangeModeAction.java Added Paths: ----------- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/LassoSelection.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RectangleSelection.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/ShapeSelection.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/elements/PathElement.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/SelectionGenerator.java Added: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java (rev 0) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -0,0 +1,62 @@ +/* $Revision$ $Author$ $Date$ + * + * Copyright (C) 2008 Gilleain Torrance <gil...@gm...> + * + * 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. + * + * 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.renderer.ShapeSelection; + +/** + * @module controller + */ +public class SelectModule extends ControllerModuleAdapter { + + private ShapeSelection selection; + + public SelectModule(IChemModelRelay chemModelRelay) { + super(chemModelRelay); + } + + public void mouseClickedDown(Point2d p) { + this.selection = this.chemModelRelay + .getIJava2DRenderer() + .getRenderer2DModel() + .getShapeSelection(); + this.selection.clear(); + } + + public void mouseDrag(Point2d from, Point2d to) { + this.selection.addPoint(to); + this.selection.select(this.chemModelRelay.getIChemModel()); + this.chemModelRelay.updateView(); + } + + public void mouseClickedUp(Point2d p) { + this.selection.select(this.chemModelRelay.getIChemModel()); + this.selection.reset(); + this.chemModelRelay.updateView(); + } + + public String getDrawModeString() { + return IControllerModel.DrawMode.SELECT.toString(); + } + +} Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java 2008-12-01 08:52:39 UTC (rev 13398) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -1,5 +1,3 @@ -package org.openscience.cdk.renderer; - /* $Revision$ $Author$ $Date$ * * Copyright (C) 2008 Gilleain Torrance <gil...@gm...> @@ -20,7 +18,9 @@ * 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.renderer; + import java.awt.BasicStroke; import java.awt.Graphics2D; import java.awt.Stroke; @@ -41,6 +41,7 @@ import org.openscience.cdk.renderer.generators.BasicBondGenerator; import org.openscience.cdk.renderer.generators.HighlightGenerator; import org.openscience.cdk.renderer.generators.IGenerator; +import org.openscience.cdk.renderer.generators.SelectionGenerator; import org.openscience.cdk.renderer.visitor.TransformingDrawVisitor; /** @@ -71,6 +72,7 @@ this.generators.add(new BasicBondGenerator(this.rendererModel)); this.generators.add(new BasicAtomGenerator(this.rendererModel)); this.generators.add(new HighlightGenerator(this.rendererModel)); + this.generators.add(new SelectionGenerator(this.rendererModel)); this.stroke = new BasicStroke(2); this.fontManager = new AWTFontManager(); this.transform = new AffineTransform(); @@ -282,6 +284,12 @@ } } + public Point2d toScreenCoordinates(double modelX, double modelY) { + double[] dest = new double[2]; + transform.transform(new double[] { modelX, modelY }, 0, dest, 0, 1); + return new Point2d(dest[0], dest[1]); + } + public void setTransform(AffineTransform transform) { this.transform = transform; } Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Java2DRenderer.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Java2DRenderer.java 2008-12-01 08:52:39 UTC (rev 13398) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Java2DRenderer.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -106,10 +106,10 @@ } // set basic shape form for bonds graphics.setColor(Color.BLACK); - graphics.setStroke(new BasicStroke( - (float) (rendererModel.getBondWidth()/rendererModel.getBondLength()), - BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND) - ); +// graphics.setStroke(new BasicStroke( +// (float) (rendererModel.getBondWidth()/rendererModel.getBondLength()), +// BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND) +// ); IRingSet ringSet = getRingSet(atomCon); @@ -298,7 +298,8 @@ //btest has to be substracted to get the text on the exact right position //FIXME: get right value from graphics object? (width of line? or so) - float btest = (float) (rendererModel.getBondWidth()/rendererModel.getBondLength()); +// float btest = (float) (rendererModel.getBondWidth()/rendererModel.getBondLength()); + float btest = 1; double atomSymbolX = atom.getPoint2d().x - boundsAtom.getWidth()/2 - 0.5 * btest; double atomSymbolY = atom.getPoint2d().y - boundsAtom.getHeight() /2 - boundsAtom.getY(); double atomSymbolW = boundsAtom.getWidth(); @@ -1100,10 +1101,10 @@ { // draw the shapes graphics.setColor(bondColor); - graphics.setStroke(new BasicStroke( - (float) (rendererModel.getBondWidth()/rendererModel.getBondLength()), - BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND) - ); +// graphics.setStroke(new BasicStroke( +// (float) (rendererModel.getBondWidth()/rendererModel.getBondLength()), +// BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND) +// ); graphics.setColor(bondColor); graphics.draw(line); } Added: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/LassoSelection.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/LassoSelection.java (rev 0) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/LassoSelection.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -0,0 +1,73 @@ +/* $Revision$ $Author$ $Date$ + * + * Copyright (C) 2008 Gilleain Torrance <gil...@gm...> + * + * 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. + * + * 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.renderer; + +import java.awt.geom.GeneralPath; +import java.util.ArrayList; + +import javax.vecmath.Point2d; + +import org.openscience.cdk.renderer.elements.IRenderingElement; +import org.openscience.cdk.renderer.elements.PathElement; + +/** + * @cdk.module render + */ +public class LassoSelection extends ShapeSelection { + + private final ArrayList<Point2d> points; + private GeneralPath path; + + public LassoSelection() { + this.points = new ArrayList<Point2d>(); + this.path = null; + } + + public IRenderingElement generate() { + return new PathElement(this.points); + } + + public boolean contains(Point2d p) { + if (this.points.size() < 3) return false; + this.path = new GeneralPath(); + Point2d p0 = this.points.get(0); + this.path.moveTo((float)p0.x, (float)p0.y); + for (Point2d point : this.points) { + this.path.lineTo((float)point.x, (float)point.y); + } + this.path.closePath(); + return this.path.contains(p.x, p.y); + } + + public void addPoint(Point2d p) { + this.points.add(new Point2d(p.x, p.y)); + } + + public boolean isEmpty() { + return this.points.isEmpty(); + } + + public void reset() { + this.finished = true; + this.points.clear(); + this.path = null; + } +} Added: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RectangleSelection.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RectangleSelection.java (rev 0) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RectangleSelection.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -0,0 +1,69 @@ +/* $Revision$ $Author$ $Date$ + * + * Copyright (C) 2008 Gilleain Torrance <gil...@gm...> + * + * 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. + * + * 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.renderer; + +import java.awt.Color; +import java.awt.Rectangle; +import java.awt.geom.Point2D; + +import javax.vecmath.Point2d; + +import org.openscience.cdk.renderer.elements.IRenderingElement; +import org.openscience.cdk.renderer.elements.RectangleElement; + +/** + * @cdk.module render + */ +public class RectangleSelection extends ShapeSelection { + + private final Rectangle rectangle; + + public RectangleSelection() { + this.rectangle = new Rectangle(); + } + + public IRenderingElement generate() { + return new RectangleElement( + this.rectangle.getMinX(), + this.rectangle.getMinY(), + this.rectangle.getMaxX(), + this.rectangle.getMaxY(), + Color.LIGHT_GRAY + ); + } + + public boolean contains(Point2d p) { + return this.rectangle.contains(p.x, p.y); + } + + public void addPoint(Point2d p) { + this.rectangle.add(new Point2D.Double(p.x, p.y)); + } + + public boolean isEmpty() { + return this.rectangle.isEmpty(); + } + + public void reset() { + this.finished = true; + this.rectangle.setSize(0, 0); + } +} Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer2DModel.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer2DModel.java 2008-12-01 08:52:39 UTC (rev 13398) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer2DModel.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -61,16 +61,10 @@ private boolean notification = true; private transient List<ICDKChangeListener> listeners = new ArrayList<ICDKChangeListener>(); - - private double[] rotateCenter = null; - - private double rotateRadius = 0; - + /** Determines how much the image is zoomed into on. */ private double zoomFactor = 1.0; - private double bondLength = 36.0; - /** * The color hash is used to color substructures. * @@ -95,6 +89,9 @@ private Polygon selectRect = null; private List<Point> lassoPoints = new ArrayList<Point>(); + + private ShapeSelection shapeSelection = new LassoSelection(); +// private ShapeSelection shapeSelection = new RectangleSelection(); public Renderer2DModel() { this.parameters = new RenderingParameters(); @@ -103,6 +100,14 @@ public Renderer2DModel(RenderingParameters parameters) { this.parameters = parameters; } + + public void setShapeSelection(ShapeSelection shapeSelection) { + this.shapeSelection = shapeSelection; + } + + public ShapeSelection getShapeSelection() { + return this.shapeSelection; + } /** * @return null if no custom font set @@ -192,26 +197,6 @@ } /** - * Returns the length of a bond line. - * - * @return the length of a bond line - */ - public double getBondLength() { - return this.bondLength; - } - - /** - * Sets the length of a bond line. - * - * @param bondLength - * the length of a bond line - */ - public void setBondLength(double bondLength) { - this.bondLength = bondLength; - fireChange(); - } - - /** * A zoom factor for the drawing. * * @return a zoom factor for the drawing @@ -748,23 +733,6 @@ return toolTipTextMap; } - public double[] getRotateCenter() { - return rotateCenter; - } - - public void setRotateCenter(double x, double y) { - double[] rotateCenter = { x, y }; - this.rotateCenter = rotateCenter; - } - - public double getRotateRadius() { - return rotateRadius; - } - - public void setRotateRadius(double rotateRadius) { - this.rotateRadius = rotateRadius; - } - /** * Gets the color used for drawing the part which was selected externally */ Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RenderingParameters.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RenderingParameters.java 2008-12-01 08:52:39 UTC (rev 13398) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RenderingParameters.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -65,7 +65,7 @@ */ private boolean showEndCarbons = false; - /** Determines whether implicit hydrogens should be drawn. */ + /** Determines whether explicit hydrogens should be drawn. */ private boolean showExplicitHydrogens = true; /** Determines whether implicit hydrogens should be drawn. */ Added: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/ShapeSelection.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/ShapeSelection.java (rev 0) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/ShapeSelection.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -0,0 +1,91 @@ +/* $Revision$ $Author$ $Date$ +* +* Copyright (C) 2008 Gilleain Torrance <gil...@gm...> +* +* 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. +* +* 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.renderer; + +import java.util.ArrayList; +import java.util.List; + +import javax.vecmath.Point2d; + +import org.openscience.cdk.interfaces.IAtom; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IBond; +import org.openscience.cdk.interfaces.IChemModel; +import org.openscience.cdk.renderer.elements.IRenderingElement; +import org.openscience.cdk.tools.manipulator.ChemModelManipulator; + +/** + * @module renderer + */ +public abstract class ShapeSelection { + + public final List<IAtom> atoms = new ArrayList<IAtom>(); + + public final List<IBond> bonds = new ArrayList<IBond>(); + + protected boolean finished = false; + + public abstract boolean contains(Point2d p); + + public abstract void addPoint(Point2d p); + + public abstract boolean isEmpty(); + + /** + * Call this after the drawing has finished + */ + public abstract void reset(); + + public abstract IRenderingElement generate(); + + public boolean isFinished() { + return this.finished; + } + + /** + * Call this before starting a new selection. + */ + public void clear() { + this.atoms.clear(); + this.bonds.clear(); + this.finished = false; + } + + public boolean isFilled() { + return !this.atoms.isEmpty() || !this.bonds.isEmpty(); + } + + public void select(IChemModel chemModel) { + for (IAtomContainer ac : ChemModelManipulator.getAllAtomContainers(chemModel)) { + for (IAtom atom : ac.atoms()) { + if (this.contains(atom.getPoint2d()) && !this.atoms.contains(atom)) { + this.atoms.add(atom); + } + } + + for (IBond bond : ac.bonds()) { + if (this.contains(bond.get2DCenter()) && !this.bonds.contains(bond)) { + this.bonds.add(bond); + } + } + } + } +} Added: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/elements/PathElement.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/elements/PathElement.java (rev 0) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/elements/PathElement.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -0,0 +1,43 @@ +/* $Revision$ $Author$ $Date$ + * + * Copyright (C) 2008 Gilleain Torrance <gil...@gm...> + * + * 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. + * + * 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.renderer.elements; + +import java.util.ArrayList; + +import javax.vecmath.Point2d; + +/** + * @module renderer + */ + +public class PathElement implements IRenderingElement { + + public final ArrayList<Point2d> points; + + public PathElement(ArrayList<Point2d> points) { + this.points = points; + } + + public void accept(IRenderingVisitor v) { + v.visit(this); + } + +} Added: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/SelectionGenerator.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/SelectionGenerator.java (rev 0) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/SelectionGenerator.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -0,0 +1,69 @@ +/* $Revision$ $Author$ $Date$ + * + * Copyright (C) 2008 Gilleain Torrance <gil...@gm...> + * + * 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. + * + * 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.renderer.generators; + +import java.awt.Color; + +import javax.vecmath.Point2d; + +import org.openscience.cdk.interfaces.IAtom; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.renderer.Renderer2DModel; +import org.openscience.cdk.renderer.ShapeSelection; +import org.openscience.cdk.renderer.elements.ElementGroup; +import org.openscience.cdk.renderer.elements.IRenderingElement; +import org.openscience.cdk.renderer.elements.RectangleElement; + +/** + * @cdk.module render + */ +public class SelectionGenerator implements IGenerator { + + private Renderer2DModel rendererModel; + private Color selectionColor; + private boolean autoUpdateSelection = true; + + public SelectionGenerator(Renderer2DModel rendererModel) { + this.rendererModel = rendererModel; + this.selectionColor = rendererModel.getSelectedPartColor(); + } + + public IRenderingElement generate(IAtomContainer ac) { + ElementGroup selectionElements = new ElementGroup(); + ShapeSelection selection = this.rendererModel.getShapeSelection(); + if (this.autoUpdateSelection || selection.isFilled()) { + double r = 0.1; + double d = 2 * r; + for (IAtom atom : selection.atoms) { + Point2d p = atom.getPoint2d(); + + selectionElements.add( + new RectangleElement( + p.x - r, p.y - r, d, d, true, selectionColor)); + } + } + if (!selection.isFinished()) { + selectionElements.add(selection.generate()); + } + return selectionElements; + } + +} Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/visitor/TransformingDrawVisitor.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/visitor/TransformingDrawVisitor.java 2008-12-01 08:52:39 UTC (rev 13398) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/visitor/TransformingDrawVisitor.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -36,6 +36,7 @@ import org.openscience.cdk.renderer.elements.IRenderingElement; import org.openscience.cdk.renderer.elements.LineElement; import org.openscience.cdk.renderer.elements.OvalElement; +import org.openscience.cdk.renderer.elements.PathElement; import org.openscience.cdk.renderer.elements.RectangleElement; import org.openscience.cdk.renderer.elements.TextElement; import org.openscience.cdk.renderer.elements.WedgeLineElement; @@ -168,9 +169,25 @@ } public void visit(RectangleElement rectangle) { - int[] p = this.transformPoint(rectangle.x, rectangle.y); - this.g.drawRect(p[0], p[1], (int)rectangle.width, (int)rectangle.height); + int[] p1 = this.transformPoint(rectangle.x, rectangle.y); + int[] p2 = this.transformPoint( + rectangle.x + rectangle.width, rectangle.y + rectangle.height); + if (rectangle.filled) { + this.g.fillRect(p1[0], p1[1], p2[0] - p1[0], p2[1] - p1[1]); + } else { + this.g.drawRect(p1[0], p1[1], p2[0] - p1[0], p2[1] - p1[1]); + } } + + public void visit(PathElement path) { + for (int i = 1; i < path.points.size(); i++) { + Point2d point1 = path.points.get(i - 1); + Point2d point2 = path.points.get(i); + int[] p1 = this.transformPoint(point1.x, point1.y); + int[] p2 = this.transformPoint(point2.x, point2.y); + this.g.drawLine(p1[0], p1[1], p2[0], p2[1]); + } + } public void visit(IRenderingElement element) { if (element instanceof ElementGroup) @@ -187,6 +204,8 @@ visit((TextElement) element); else if (element instanceof RectangleElement) visit((RectangleElement) element); + else if (element instanceof PathElement) + visit((PathElement) element); else System.err.println("Visitor method for " + element.getClass().getName() + " is not implemented"); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/InsertTextPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/InsertTextPanel.java 2008-12-01 08:52:39 UTC (rev 13398) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/InsertTextPanel.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -38,7 +38,6 @@ import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -57,16 +56,15 @@ import org.openscience.cdk.MoleculeSet; import org.openscience.cdk.exception.CDKException; import org.openscience.cdk.exception.InvalidSmilesException; -import org.openscience.cdk.geometry.GeometryTools; import org.openscience.cdk.inchi.InChIGeneratorFactory; import org.openscience.cdk.inchi.InChIToStructure; import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.interfaces.IMolecule; +import org.openscience.cdk.interfaces.IMoleculeSet; import org.openscience.cdk.layout.StructureDiagramGenerator; import org.openscience.cdk.layout.TemplateHandler; -import org.openscience.cdk.renderer.Renderer2DModel; import org.openscience.cdk.smiles.SmilesParser; -import org.openscience.cdk.tools.manipulator.ChemModelManipulator; /** * A panel containing a text field and button to directly insert SMILES or InChI's @@ -77,12 +75,11 @@ private JChemPaintPanel jChemPaintPanel; private JComboBox textCombo; private JTextComponent editor; - private JFrame closeafter=null; + private JFrame closeafter = null; - public InsertTextPanel(JChemPaintPanel jChemPaintPanel, JFrame closeafter) { super(); - this.closeafter=closeafter; + this.closeafter = closeafter; setLayout(new GridBagLayout()); List<String> oldText = new ArrayList<String>(); @@ -95,13 +92,11 @@ textCombo.addActionListener(this); editor = (JTextComponent) textCombo.getEditor().getEditorComponent(); - JButton button = new JButton("Insert"); button.addActionListener(this); GridBagConstraints gridBagConstraints = new GridBagConstraints(); - gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; @@ -118,18 +113,19 @@ gridBagConstraints.gridx = 1; add(button, gridBagConstraints); - this.jChemPaintPanel = jChemPaintPanel; } public void actionPerformed(ActionEvent actionEvent) { String actionCommand = actionEvent.getActionCommand(); - if (actionCommand.equals("comboBoxEdited") || actionCommand.equals("Insert")) { + if (actionCommand.equals("comboBoxEdited") + || actionCommand.equals("Insert")) { IMolecule molecule = getMolecule(); - if (molecule == null) return; + if (molecule == null) + return; generateModel(molecule); - if(closeafter!=null) - closeafter.setVisible(false); + if (closeafter != null) + closeafter.setVisible(false); } } @@ -199,12 +195,9 @@ } private IMolecule getMoleculeFromCAS(String cas) throws IOException { - String data; - String firstURL = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pccompound&term=" + cas; + String data = getDataFromURL(firstURL); - data = getDataFromURL(firstURL); - Pattern pattern = Pattern.compile("http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi\\?cid=(\\d*)"); Matcher matcher = pattern.matcher(data); @@ -227,11 +220,11 @@ pattern = Pattern.compile("<Item Name=\"CanonicalSmile\" Type=\"String\">([^\\s]*?)</Item>"); matcher = pattern.matcher(data); - String smiles = null; + String smiles = ""; found = false; while (matcher.find()) { smiles = matcher.group(1); - if (smiles != null || !smiles.equals("")) { + if (!smiles.equals("")) { found = true; break; } @@ -240,14 +233,12 @@ // got the canonical SMILES, lets get the molecule SmilesParser smilesParser = new SmilesParser(DefaultChemObjectBuilder.getInstance()); - IMolecule molecule; try { - molecule = smilesParser.parseSmiles(smiles); + return smilesParser.parseSmiles(smiles); } catch (InvalidSmilesException e1) { JOptionPane.showMessageDialog(jChemPaintPanel, "Couldn't process data from PubChem"); return null; } - return molecule; } private String getDataFromURL(String url) throws IOException { @@ -263,35 +254,20 @@ public void generateModel(IMolecule molecule) { if (molecule == null) return; - // ok, get relevent bits from active model - Renderer2DModel renderModel = jChemPaintPanel.get2DHub().getIJava2DRenderer().getRenderer2DModel(); - org.openscience.cdk.interfaces.IChemModel chemModel = jChemPaintPanel.getChemModel(); - org.openscience.cdk.interfaces.IMoleculeSet moleculeSet = chemModel.getMoleculeSet(); + // get relevant bits from active model + IChemModel chemModel = jChemPaintPanel.getChemModel(); + IMoleculeSet moleculeSet = chemModel.getMoleculeSet(); if (moleculeSet == null) { moleculeSet = new MoleculeSet(); } - // ok, now generate 2D coordinates + // now generate 2D coordinates StructureDiagramGenerator sdg = new StructureDiagramGenerator(); sdg.setTemplateHandler(new TemplateHandler(moleculeSet.getBuilder())); try { sdg.setMolecule(molecule); sdg.generateCoordinates(new Vector2d(0, 1)); molecule = sdg.getMolecule(); - double bondLength = renderModel.getBondLength(); - double scaleFactor = GeometryTools.getScaleFactor(molecule, bondLength); - GeometryTools.scaleMolecule(molecule, scaleFactor); - //if there are no atoms in the actual chemModel all 2D-coordinates would be set to NaN - if (ChemModelManipulator.getAtomCount(chemModel) != 0) { - IAtomContainer container = chemModel.getBuilder().newAtomContainer(); - Iterator<IAtomContainer> containers = ChemModelManipulator.getAllAtomContainers(chemModel).iterator(); - while (containers.hasNext()) { - container.add((IAtomContainer)containers.next()); - } - GeometryTools.translate2DCenterTo((IAtomContainer)molecule, - GeometryTools.get2DCenter(container)); - } - GeometryTools.translate2D(molecule, 5 * bondLength, 0); // in pixels } catch (Exception exc) { exc.printStackTrace(); } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ChangeModeAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ChangeModeAction.java 2008-12-01 08:52:39 UTC (rev 13398) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ChangeModeAction.java 2008-12-01 10:42:48 UTC (rev 13399) @@ -44,6 +44,7 @@ import org.openscience.cdk.controller.IControllerModel; import org.openscience.cdk.controller.MoveModule; import org.openscience.cdk.controller.RemoveModule; +import org.openscience.cdk.controller.SelectModule; import org.openscience.cdk.event.ICDKChangeListener; import org.openscience.jchempaint.dialog.EnterElementSwingModule; import org.openscience.jchempaint.dialog.PeriodicTableDialog; @@ -86,7 +87,7 @@ } else if (type.equals("enterelement")) { hub.setActiveDrawModule(new EnterElementSwingModule(hub)); } else if (type.equals("lasso")) { - // TODO not yet a module + hub.setActiveDrawModule(new SelectModule(hub)); hub.getController2DModel().setDrawElement("C"); } else if (type.equals("up_bond")) { hub.setActiveDrawModule(new AlterBondStereoModule( This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gil...@us...> - 2008-12-17 17:22:20
|
Revision: 13646 http://cdk.svn.sourceforge.net/cdk/?rev=13646&view=rev Author: gilleain Date: 2008-12-17 17:22:15 +0000 (Wed, 17 Dec 2008) Log Message: ----------- Export as SVG now (minimally) works. Modified Paths: -------------- cdk/branches/jchempaint-primary/META-INF/MANIFEST.MF cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/visitor/SVGGenerator.java jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java Modified: cdk/branches/jchempaint-primary/META-INF/MANIFEST.MF =================================================================== --- cdk/branches/jchempaint-primary/META-INF/MANIFEST.MF 2008-12-17 16:57:44 UTC (rev 13645) +++ cdk/branches/jchempaint-primary/META-INF/MANIFEST.MF 2008-12-17 17:22:15 UTC (rev 13646) @@ -88,6 +88,7 @@ org.openscience.cdk.renderer.color, org.openscience.cdk.renderer.elements, org.openscience.cdk.renderer.selection, + org.openscience.cdk.renderer.visitor, org.openscience.cdk.ringsearch, org.openscience.cdk.ringsearch.cyclebasis, org.openscience.cdk.similarity, Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java 2008-12-17 16:57:44 UTC (rev 13645) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java 2008-12-17 17:22:15 UTC (rev 13646) @@ -349,6 +349,7 @@ IMoleculeSet moleculeSet = chemModel.getMoleculeSet(); IRenderingElement diagram = this.generateDiagram(moleculeSet); setTransform(); + visitor.setTransform(transform); diagram.accept(visitor); } Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/visitor/SVGGenerator.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/visitor/SVGGenerator.java 2008-12-17 16:57:44 UTC (rev 13645) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/visitor/SVGGenerator.java 2008-12-17 17:22:15 UTC (rev 13646) @@ -24,6 +24,7 @@ */ package org.openscience.cdk.renderer.visitor; +import java.awt.Color; import java.awt.geom.AffineTransform; import org.openscience.cdk.renderer.elements.AtomSymbolElement; @@ -43,7 +44,11 @@ */ public class SVGGenerator implements IRenderingVisitor { - public static final String HEADER = "<svg width=\"200\" height=\"200\">"; + public static final String HEADER = "<?xml version=\"1.0\"?>\n" + + "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n" + + "\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n" + + "<svg xmlns=\"http://www.w3.org/2000/svg\" " + + "width=\"1000\" height=\"600\">"; private final StringBuffer svg = new StringBuffer(); @@ -63,6 +68,13 @@ return svg.toString(); } + public int[] transformPoint(double x, double y) { + double[] src = new double[] {x, y}; + double[] dest = new double[2]; + this.transform.transform(src, 0, dest, 0, 1); + return new int[] { (int) dest[0], (int) dest[1] }; + } + public void setTransform(AffineTransform transform) { this.transform = transform; } @@ -81,42 +93,61 @@ public void visit(LineElement line) { newline(); + + int[] p1 = transformPoint(line.x1, line.y1); + int[] p2 = transformPoint(line.x2, line.y2); svg.append(String.format( - "<line x1=\"%s\" y1=\"%s\" x2=\"%s\" y2=\"%s\"/>", - line.x1, - line.y1, - line.x2, - line.y2 + "<line x1=\"%s\" y1=\"%s\" x2=\"%s\" y2=\"%s\" " + + "style=\"stroke:black; stroke-width:1px;\" />", + p1[0], + p1[1], + p2[0], + p2[1] )); } public void visit(OvalElement oval) { newline(); + int[] p1 = transformPoint(oval.x - oval.radius, oval.y - oval.radius); + int[] p2 = transformPoint(oval.x + oval.radius, oval.y + oval.radius); + int r = (p2[0] - p1[0]) / 2; svg.append(String.format( - "<ellipse cx=\"%s\" cy=\"%s\" rx=\"%s\" ry=\"%s\"/>", - oval.x, - oval.y, - oval.radius, - oval.radius - )); + "<ellipse cx=\"%s\" cy=\"%s\" rx=\"%s\" ry=\"%s\" " + + "style=\"stroke:black; stroke-width:1px; fill:none;\" />", + p1[0] + r, p1[1] + r, r, r)); } public void visit(AtomSymbolElement atomSymbol) { newline(); + int[] p = transformPoint(atomSymbol.x, atomSymbol.y); svg.append(String.format( - "<text x=\"%s\" y=\"%s\">%s</text>", - atomSymbol.x, - atomSymbol.y, + "<text x=\"%s\" y=\"%s\" style=\"fill:%s\"" + + ">%s</text>", + p[0], + p[1], + toColorString(atomSymbol.color), atomSymbol.text )); } + // this is a stupid method, but no idea how else to do it... + private String toColorString(Color color) { + if (color == Color.RED) { + return "red"; + } else if (color == Color.BLUE) { + return "blue"; + } else { + return "black"; + } + } + public void visit(TextElement textElement) { newline(); + int[] p = transformPoint(textElement.x, textElement.y); svg.append(String.format( "<text x=\"%s\" y=\"%s\">%s</text>", - textElement.x, - textElement.y, + p[0], + p[1], textElement.text )); } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-17 16:57:44 UTC (rev 13645) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-17 17:22:15 UTC (rev 13646) @@ -39,7 +39,6 @@ import java.awt.event.WindowListener; import java.io.File; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import javax.swing.JButton; @@ -57,7 +56,6 @@ import org.openscience.cdk.ChemModel; import org.openscience.cdk.PseudoAtom; import org.openscience.cdk.Reaction; -import org.openscience.cdk.applications.undoredo.ClearAllEdit; import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.interfaces.IChemObjectChangeEvent; import org.openscience.cdk.interfaces.IChemObjectListener; @@ -87,13 +85,13 @@ private int lines = 1; //we remember the moveButton since this is special protected JButton moveButton=null; - + public JChemPaintPanel(IChemModel chemModel, String gui){ this(chemModel,gui,1); } /** * Builds a JCPPanel with a certain model and a certain gui - * + * * @param chemModel The model * @param gui The gui string */ @@ -106,7 +104,7 @@ this.add(topContainer, BorderLayout.NORTH); renderPanel = new RenderPanel(chemModel, getWidth(), getHeight(), false); this.add(new JScrollPane(renderPanel), BorderLayout.CENTER); - + customizeView(); SwingPopupModule inputAdapter = new SwingPopupModule(renderPanel, renderPanel.getHub()); setupPopupMenus(inputAdapter); @@ -114,18 +112,18 @@ instances.add(this); chemModel.addListener(this); } - + public Container getTopLevelContainer() { return this.getParent().getParent().getParent().getParent(); } - + public void setTitle(String title) { Container topLevelContainer = this.getTopLevelContainer(); if (topLevelContainer instanceof JFrame) { ((JFrame) topLevelContainer).setTitle(title); } } - + public void setupPopupMenus(SwingPopupModule inputAdapter) { if (inputAdapter.getPopupMenu(PseudoAtom.class) == null) @@ -148,30 +146,30 @@ { inputAdapter.setPopupMenu(Reaction.class, new JChemPaintPopupMenu(this, "reaction")); } - } - + } + /** - * Called to force a re-centring of the displayed structure. - * + * Called to force a re-centring of the displayed structure. + * * @param isNewChemModel */ public void setIsNewChemModel(boolean isNewChemModel) { this.renderPanel.setIsNewChemModel(isNewChemModel); } - + /** * Helps in keeping the current action button highlighted - * + * * @return The last action button used */ public JComponent getLastActionButton() { return lastActionButton; } - + /** * Allows setting of the is modified stage (e. g. after save) - * + * * @param isModified is modified */ public void setModified(boolean isModified) { @@ -190,13 +188,13 @@ /** * Helps in keeping the current action button highlighted - needs to be set * if a new action button is choosen - * + * * @param actionButton The new action button */ public void setLastActionButton(JComponent actionButton) { lastActionButton = actionButton; } - + /** * Gets the currentWorkDirectory attribute of the JChemPaintPanel object * @@ -253,7 +251,7 @@ public void setCurrentOpenFileFilter(FileFilter ff) { this.currentOpenFileFilter = ff; } - + /** * Gets the currentSaveFileFilter attribute of the JChemPaintPanel object * @@ -272,7 +270,7 @@ public void setCurrentSaveFileFilter(FileFilter ff) { this.currentSaveFileFilter = ff; } - + /** * Tells if a menu is shown * @@ -320,7 +318,7 @@ topContainer.remove(toolbar); } if (showInsertTextField) { - if (insertTextPanel == null) + if (insertTextPanel == null) insertTextPanel = new InsertTextPanel(this,null); topContainer.add(insertTextPanel, BorderLayout.SOUTH); } else { @@ -358,7 +356,7 @@ this.lines=lines; customizeView(); } - + /** * Returns the value of showToolbar. * @@ -368,7 +366,7 @@ { return showToolBar; } - + /** * Sets if statusbar should be shown * @@ -378,7 +376,7 @@ this.showStatusBar = showStatusBar; customizeView(); } - + /** * Sets the file currently used for saving this Panel. * @@ -412,28 +410,31 @@ this.showInsertTextField = showInsertTextField; customizeView(); } - + /** * Tells if the enter text field is currently shown or not. - * + * * @return text field shown or not */ public boolean getShowInsertTextField() { return showInsertTextField; } - + + public String getSVGString() { + return this.renderPanel.toSVG(); + } + public Image takeSnapshot() { return this.renderPanel.takeSnapshot(); } - + public Image takeSnapshot(Rectangle bounds) { - return this.renderPanel.takeSnapshot(bounds); + return this.renderPanel.takeSnapshot(bounds); } - /** * Shows a warning if the JCPPanel has unsaved content and does save, if the user wants to do it. - * + * * @return OptionPane.YES_OPTION/OptionPane.NO_OPTION/OptionPane.CANCEL_OPTION */ public int showWarning() { @@ -445,7 +446,7 @@ return answer; } else if(guistring.equals(JChemPaintEditorApplet.GUI_APPLET)){ //In case of the applet we do not ask for save but put the clear into the undo stack - ClearAllEdit coa = null; +// ClearAllEdit coa = null; //TODO undo redo missing coa = new ClearAllEdit(this.getChemModel(),(IMoleculeSet)this.getChemModel().getMoleculeSet().clone(),this.getChemModel().getReactionSet()); //this.jchemPaintModel.getControllerModel().getUndoSupport().postEdit(coa); return JOptionPane.YES_OPTION; @@ -490,7 +491,7 @@ } } } - + /* (non-Javadoc) * @see org.openscience.cdk.interfaces.IChemObjectListener#stateChanged(org.openscience.cdk.interfaces.IChemObjectChangeEvent) */ @@ -507,13 +508,13 @@ } } } - - + + /** * Closes all currently opened JCP instances. */ public static void closeAllInstances() { - for (JChemPaintPanel panel : instances) { + for (JChemPaintPanel panel : instances) { JFrame frame = (JFrame) panel.getTopLevelContainer(); WindowListener[] wls = (WindowListener[]) (frame.getListeners(WindowListener.class)); wls[0].windowClosing(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING)); @@ -521,9 +522,9 @@ frame.dispose(); } } - + /** - * Selects the move button and action as the current action. + * Selects the move button and action as the current action. */ public void setMoveAction() { getLastActionButton().setBackground(Color.LIGHT_GRAY); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-12-17 16:57:44 UTC (rev 13645) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-12-17 17:22:15 UTC (rev 13646) @@ -36,7 +36,6 @@ import java.awt.Image; import java.awt.Rectangle; import java.awt.RenderingHints; -import java.util.Iterator; import javax.swing.JPanel; @@ -44,80 +43,88 @@ import org.openscience.cdk.controller.ControllerModel; import org.openscience.cdk.controller.IViewEventRelay; import org.openscience.cdk.controller.SwingMouseEventRelay; -import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IChemModel; -import org.openscience.cdk.interfaces.IMolecularFormula; -import org.openscience.cdk.nonotify.NoNotificationChemObjectBuilder; import org.openscience.cdk.renderer.ISelection; import org.openscience.cdk.renderer.IntermediateRenderer; -import org.openscience.cdk.tools.manipulator.ChemModelManipulator; +import org.openscience.cdk.renderer.visitor.SVGGenerator; import org.openscience.cdk.tools.manipulator.MolecularFormulaManipulator; public class RenderPanel extends JPanel implements IViewEventRelay { - + private IntermediateRenderer renderer; private boolean isNewChemModel; - + private ControllerHub hub; - + private ControllerModel controllerModel; - + private SwingMouseEventRelay mouseEventRelay; - + private boolean fitToScreen; - + private boolean shouldPaintFromCache = false; - + public RenderPanel(IChemModel chemModel, int width, int height, boolean fitToScreen) { this.setupMachinery(chemModel, fitToScreen); this.setupPanel(width, height); this.fitToScreen = fitToScreen; } - + public void setFitToScreen(boolean fitToScreen) { this.renderer.setFitToScreen(fitToScreen); } - + public IChemModel getChemModel() { return this.hub.getIChemModel(); } public void setChemModel(IChemModel model) { - this.setupMachinery(model, this.fitToScreen); + this.setupMachinery(model, this.fitToScreen); } - + public ControllerHub getHub() { return hub; } - + private void setupMachinery(IChemModel chemModel, boolean fitToScreen) { // setup the Renderer and the controller 'model' this.renderer = new IntermediateRenderer(); this.renderer.setFitToScreen(fitToScreen); this.controllerModel = new ControllerModel(); - + // connect the Renderer to the Hub this.hub = new ControllerHub(controllerModel, renderer, chemModel, this); - + // connect mouse events from Panel to the Hub this.mouseEventRelay = new SwingMouseEventRelay(this.hub); this.addMouseListener(mouseEventRelay); this.addMouseMotionListener(mouseEventRelay); this.isNewChemModel = true; } - + private void setupPanel(int width, int height) { this.setBackground(Color.WHITE); this.setPreferredSize(new Dimension(width, height)); } - + + public String toSVG() { + IChemModel chemModel = this.hub.getIChemModel(); + if (chemModel != null && chemModel.getMoleculeSet() != null) { + SVGGenerator svgGenerator = new SVGGenerator(); + this.renderer.paint(svgGenerator, chemModel); + return svgGenerator.getResult(); + } else { + return "<svg></svg>"; + } + } + public Image takeSnapshot() { return this.takeSnapshot(this.getBounds()); } - + public Image takeSnapshot(Rectangle bounds) { Image image = GraphicsEnvironment .getLocalGraphicsEnvironment() @@ -126,32 +133,32 @@ .createCompatibleImage(bounds.width, bounds.height); Graphics2D g = (Graphics2D)image.getGraphics(); super.paint(g); - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); this.paintChemModel(g, bounds); return image; } - + public void paintChemModel(Graphics2D g, Rectangle screenBounds) { - + IChemModel chemModel = this.hub.getIChemModel(); if (chemModel != null && chemModel.getMoleculeSet() != null) { - + // determine the size the canvas needs to be in order to fit the model Rectangle diagramBounds = renderer.calculateScreenBounds(chemModel); - + if (this.overlaps(screenBounds, diagramBounds)) { - Rectangle union = screenBounds.union(diagramBounds); + Rectangle union = screenBounds.union(diagramBounds); this.setPreferredSize(union.getSize()); this.revalidate(); } this.paintChemModel(chemModel, g, screenBounds); - } + } } - + /** - * Check to see if the molecule bounding box has overlapped a screen edge. - * + * Check to see if the molecule bounding box has overlapped a screen edge. + * * @param screenBounds the bounding box of the screen * @param diagramBounds the bounding box of the molecule on the screen * @return @@ -162,53 +169,53 @@ || screenBounds.getMaxX() < diagramBounds.getMaxX() || screenBounds.getMaxY() < diagramBounds.getMaxY(); } - + private void paintChemModel(IChemModel chemModel, Graphics2D g, Rectangle bounds) { - + // paint the chem model, and record that it is no longer new renderer.paintChemModel(chemModel, g, bounds, isNewChemModel); isNewChemModel = false; - + /* - * This is dangerous, but necessary to allow fast - * repainting when scrolling the canvas + * This is dangerous, but necessary to allow fast + * repainting when scrolling the canvas */ this.shouldPaintFromCache = true; } - + public void setIsNewChemModel(boolean isNewChemModel) { this.isNewChemModel = isNewChemModel; } - + public void paint(Graphics g) { this.setBackground(renderer.getRenderer2DModel().getBackColor()); super.paint(g); // set the graphics to antialias Graphics2D g2 = (Graphics2D)g; - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - + if (this.shouldPaintFromCache) { this.paintFromCache(g2); } else { this.paintChemModel(g2, this.getBounds()); } } - + private void paintFromCache(Graphics2D g) { renderer.repaint(g); } public void updateView() { /* - * updateView should only be called in a ControllerModule where + * updateView should only be called in a ControllerModule where * we assume that things have changed so we can't use the cache - */ + */ this.shouldPaintFromCache = false; - + this.repaint(); } - + /** * Returns one of the status strings at the given position * @@ -229,22 +236,22 @@ //TODO should be for all atomcontainers /*IMolecularFormula wholeModel = NoNotificationChemObjectBuilder.getInstance().newMolecularFormula(); - Iterator<IAtomContainer> containers + Iterator<IAtomContainer> containers = ChemModelManipulator.getAllAtomContainers(chemModel).iterator(); while (containers.hasNext()) { for(IAtom atom : containers.next().atoms()){ wholeModel.addIsotope(atom); } }*/ - String formula - = MolecularFormulaManipulator.getHTML( + String formula + = MolecularFormulaManipulator.getHTML( MolecularFormulaManipulator.getMolecularFormula( chemModel.getMoleculeSet().getAtomContainer(0)), true, false); int implicitHs = 0; /*for (int i = 0; i < wholeModel.getAtomCount(); i++) { - IAtom a = wholeModel.getAtom(i); + IAtom a = wholeModel.getAtom(i); if (a.getHydrogenCount() != null) { implicitHs += a.getHydrogenCount(); } @@ -269,7 +276,7 @@ } return status; } - + public IntermediateRenderer getRenderer() { return renderer; } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2008-12-17 16:57:44 UTC (rev 13645) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2008-12-17 17:22:15 UTC (rev 13646) @@ -31,6 +31,7 @@ import java.awt.event.ActionEvent; import java.awt.image.RenderedImage; import java.io.File; +import java.io.FileWriter; import java.io.IOException; import javax.imageio.ImageIO; @@ -44,7 +45,7 @@ /** * Opens a save dialog - * + * */ public class ExportAction extends SaveAsAction { @@ -57,7 +58,7 @@ /** * Constructor for the ExportAction object - * + * *@param jcpPanel * the parent Panel *@param isPopupAction @@ -69,7 +70,7 @@ /** * Exports the canvas as an image. - * + * *@param event * the action event that triggered this action. */ @@ -100,8 +101,11 @@ if (type.equals(JCPExportFileFilter.svg)) { try { - // TODO : convert to svg - } catch (Exception e) { + String svg = this.jcpPanel.getSVGString(); + FileWriter writer = new FileWriter(outFile); + writer.append(svg); + writer.flush(); + } catch (IOException e) { String error = "Problem exporting to svg"; JOptionPane.showMessageDialog(jcpPanel, error); return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2009-01-21 13:26:15
|
Revision: 13955 http://cdk.svn.sourceforge.net/cdk/?rev=13955&view=rev Author: shk3 Date: 2009-01-21 13:26:08 +0000 (Wed, 21 Jan 2009) Log Message: ----------- these actions have been decided to be removed from jcp Removed Paths: ------------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportCompChemAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/PerceiveAtomTypesAction.java Deleted: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportCompChemAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportCompChemAction.java 2009-01-21 13:20:19 UTC (rev 13954) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportCompChemAction.java 2009-01-21 13:26:08 UTC (rev 13955) @@ -1,97 +0,0 @@ -/* - * $RCSfile$ - * $Author: egonw $ - * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ - * $Revision: 7634 $ - * - * Copyright (C) 1997-2008 Egon Willighagen - * - * 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 we ask is that proper credit is given for our 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.jchempaint.action; - -import java.awt.event.ActionEvent; -import java.io.File; -import java.io.FileWriter; -import java.util.Iterator; - -import javax.swing.JFileChooser; - -import org.openscience.cdk.Molecule; -import org.openscience.cdk.interfaces.IAtomContainer; -import org.openscience.cdk.io.listener.SwingGUIListener; -import org.openscience.cdk.io.program.GaussianInputWriter; -import org.openscience.cdk.tools.manipulator.ChemModelManipulator; -import org.openscience.jchempaint.io.JCPCompChemInputSaveFileFilter; -import org.openscience.jchempaint.io.JCPFileView; - -/** - * Export current model to computational chemistry programs - * - */ -public class ExportCompChemAction extends SaveAction { - - private static final long serialVersionUID = -407195104869621963L; - - /** - * Opens a dialog frame and manages the saving of a file. - */ - public void actionPerformed(ActionEvent e) { - - JFileChooser chooser = new JFileChooser(); - chooser.setCurrentDirectory(jcpPanel.getCurrentWorkDirectory()); - JCPCompChemInputSaveFileFilter.addChoosableFileFilters(chooser); - chooser.setFileView(new JCPFileView()); - int returnVal = chooser.showSaveDialog(jcpPanel); - String type = null; - if(returnVal == JFileChooser.APPROVE_OPTION) { - type = ((JCPCompChemInputSaveFileFilter)chooser.getFileFilter()).getType(); - File outFile = chooser.getSelectedFile(); - - if (type.equals(JCPCompChemInputSaveFileFilter.gin)) { - logger.info("Saving the contents as Gaussian input..."); - try { - cow = new GaussianInputWriter(new FileWriter(outFile)); - if (cow != null) { - cow.addChemObjectIOListener(new SwingGUIListener(jcpPanel, 4)); - } - Iterator containers = ChemModelManipulator.getAllAtomContainers(jcpPanel.getChemModel()).iterator(); - while (containers.hasNext()) { - IAtomContainer ac = (IAtomContainer)containers.next(); - if (ac != null) { - cow.write(new Molecule(ac)); - } else { - logger.error("AtomContainer is empty!!!"); - System.err.println("AC == null!"); - } - } - cow.close(); - } catch(Exception exception) { - logger.error("Exception while trying to save Gaussian input"); - logger.debug(exception); - } - } // there is no else - } - - jcpPanel.setCurrentWorkDirectory(chooser.getCurrentDirectory()); - } -} - Deleted: jchempaint/trunk/src/main/org/openscience/jchempaint/action/PerceiveAtomTypesAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/PerceiveAtomTypesAction.java 2009-01-21 13:20:19 UTC (rev 13954) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/PerceiveAtomTypesAction.java 2009-01-21 13:26:08 UTC (rev 13955) @@ -1,84 +0,0 @@ -/* $Revision: 7032 $ $Author: kaihartmann $ $Date: 2006-09-22 17:26:48 +0200 (Fri, 22 Sep 2006) $ - * - * Copyright (C) 2006-2007 Egon Willighagen <ewi...@un...> - * - * 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 we ask is that proper credit is given for our 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.jchempaint.action; - -import java.awt.event.ActionEvent; -import java.util.Iterator; - -import org.openscience.cdk.atomtype.IAtomTypeMatcher; -import org.openscience.cdk.atomtype.MM2AtomTypeMatcher; -import org.openscience.cdk.atomtype.MMFF94AtomTypeMatcher; -import org.openscience.cdk.exception.CDKException; -import org.openscience.cdk.interfaces.IAtom; -import org.openscience.cdk.interfaces.IAtomContainer; -import org.openscience.cdk.interfaces.IChemModel; -import org.openscience.cdk.tools.manipulator.ChemModelManipulator; -import org.openscience.jchempaint.dialog.ValidateFrame; - -/** - * An action that triggers atom type perception by the CDK. - * - * @cdk.module jchempaint - * @author E.L. Willighagen <ewi...@un...> - */ -public class PerceiveAtomTypesAction extends JCPAction -{ - - private static final long serialVersionUID = -3776589605934024224L; - - ValidateFrame frame = null; - - public void actionPerformed(ActionEvent event) { - logger.debug("detected force field type list: ", type); - IAtomTypeMatcher matcher = null; - if ("mm2".equals(type)) { - matcher = new MM2AtomTypeMatcher(); - } else if ("mmff94".equals(type)) { - matcher = new MMFF94AtomTypeMatcher(); - } - //TODO what about cdk valency - if (matcher == null) { - logger.warn("Not a known atom type list: " + type); - return; - } - - IChemModel model = jcpPanel.getChemModel(); - - Iterator<IAtomContainer> containers = ChemModelManipulator.getAllAtomContainers(model).iterator(); - while (containers.hasNext()) { - IAtomContainer container = containers.next(); - for(IAtom atom : container.atoms()){ - try { - atom.setAtomTypeName(matcher.findMatchingAtomType(container, atom).getAtomTypeName()); - } catch (CDKException e) { - logger.error("Could not find atom type name for atom!", e); - logger.debug(e); - } - } - } - } - -} - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gil...@us...> - 2009-02-19 14:28:17
|
Revision: 14199 http://cdk.svn.sourceforge.net/cdk/?rev=14199&view=rev Author: gilleain Date: 2009-02-19 14:28:03 +0000 (Thu, 19 Feb 2009) Log Message: ----------- Synchronised the changes to the selection with the bioclipse-cdk. Modified Paths: -------------- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/ControllerHub.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/IChemModelRelay.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/MoveModule.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/RotateModule.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectSquareModule.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RendererModel.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/SelectionGenerator.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/LogicalSelection.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/RectangleSelection.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/ShapeSelection.java cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/RendererTest.java cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/RendererTestPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/ChangeModeAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java Added Paths: ----------- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectLassoModule.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/IChemObjectSelection.java Removed Paths: ------------- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/HighlightGenerator.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/ISelection.java Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/ControllerHub.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/ControllerHub.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/ControllerHub.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -59,6 +59,7 @@ import org.openscience.cdk.nonotify.NoNotificationChemObjectBuilder; import org.openscience.cdk.renderer.Renderer; import org.openscience.cdk.renderer.RendererModel; +import org.openscience.cdk.renderer.selection.IChemObjectSelection; import org.openscience.cdk.tools.SaturationChecker; import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; import org.openscience.cdk.tools.manipulator.ChemModelManipulator; @@ -995,4 +996,18 @@ private void coordinatesChanged() { if (changeHandler != null) changeHandler.coordinatesChanged(); } + + private void selectionChanged() { + if (changeHandler != null) changeHandler.selectionChanged(); + } + + /* + * Fill a selection by passing it to the hub, which uses its internal + * chem model to do so. + */ + public void select(IChemObjectSelection selection) { + selection.select(this.chemModel); + selectionChanged(); + } + } Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/IChemModelRelay.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/IChemModelRelay.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/IChemModelRelay.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -35,6 +35,7 @@ import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.interfaces.IRing; import org.openscience.cdk.renderer.Renderer; +import org.openscience.cdk.renderer.selection.IChemObjectSelection; /** * @cdk.module render @@ -42,13 +43,14 @@ public interface IChemModelRelay { /* Interaction*/ - public abstract IControllerModel getController2DModel(); - public abstract Renderer getRenderer(); - public abstract IChemModel getIChemModel(); + public IControllerModel getController2DModel(); + public Renderer getRenderer(); + public IChemModel getIChemModel(); public void setChemModel(IChemModel model); - public abstract IAtom getClosestAtom(Point2d worldCoord); - public abstract IBond getClosestBond(Point2d worldCoord); - public abstract void updateView(); + public IAtom getClosestAtom(Point2d worldCoord); + public IBond getClosestBond(Point2d worldCoord); + public void updateView(); + public void select(IChemObjectSelection selection); /* Event model */ public void setEventHandler(IChemModelEventRelayHandler handler); Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/MoveModule.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/MoveModule.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/MoveModule.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -31,7 +31,7 @@ import org.openscience.cdk.geometry.GeometryTools; import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IBond; -import org.openscience.cdk.renderer.selection.ISelection; +import org.openscience.cdk.renderer.selection.IChemObjectSelection; import org.openscience.cdk.tools.LoggingTool; /** @@ -51,7 +51,7 @@ private LoggingTool logger = new LoggingTool(MoveModule.class); private IAtom atom; private IBond bond; - private ISelection selection; + private IChemObjectSelection selection; private Vector2d offset; private Type type = Type.NONE; @@ -59,8 +59,9 @@ super(chemObjectRelay); } - private Type getClosest(IAtom atom, IBond bond, ISelection selection, - Point2d worldCoord) { + private Type getClosest( + IAtom atom, IBond bond, + IChemObjectSelection selection, Point2d worldCoord) { if (selection.isFilled()) return Type.SELECTION; Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/RotateModule.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/RotateModule.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/RotateModule.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -26,7 +26,7 @@ import javax.vecmath.Point2d; -import org.openscience.cdk.renderer.selection.ISelection; +import org.openscience.cdk.renderer.selection.IChemObjectSelection; import org.openscience.cdk.renderer.selection.ShapeSelection; /** @@ -42,7 +42,7 @@ } public void mouseClickedDown(Point2d worldCoord) { - ISelection selection = super.chemModelRelay + IChemObjectSelection selection = super.chemModelRelay .getRenderer() .getRenderer2DModel() .getSelection(); Copied: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectLassoModule.java (from rev 14197, cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java) =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectLassoModule.java (rev 0) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectLassoModule.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -0,0 +1,62 @@ +/* $Revision$ $Author$ $Date$ + * + * Copyright (C) 2008 Gilleain Torrance <gil...@gm...> + * + * 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. + * + * 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.renderer.selection.LassoSelection; +import org.openscience.cdk.renderer.selection.ShapeSelection; + +/** + * @cdk.module control + */ +public class SelectLassoModule extends ControllerModuleAdapter { + + private ShapeSelection selection = new LassoSelection(); + + public SelectLassoModule(IChemModelRelay chemModelRelay) { + super(chemModelRelay); + } + + public void mouseClickedDown(Point2d p) { + this.selection.clear(); + this.chemModelRelay.getRenderer() + .getRenderer2DModel() + .setSelection(this.selection); + } + + public void mouseDrag(Point2d from, Point2d to) { + this.selection.addPoint(to); + this.chemModelRelay.select(selection); + this.chemModelRelay.updateView(); + } + + public void mouseClickedUp(Point2d p) { + this.chemModelRelay.select(selection); + this.selection.reset(); + this.chemModelRelay.updateView(); + } + + public String getDrawModeString() { + return "Select in Free Form"; + } + +} Property changes on: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectLassoModule.java ___________________________________________________________________ Added: svn:mergeinfo + Deleted: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -1,68 +0,0 @@ -/* $Revision$ $Author$ $Date$ - * - * Copyright (C) 2008 Gilleain Torrance <gil...@gm...> - * - * 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. - * - * 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.renderer.selection.LassoSelection; -import org.openscience.cdk.renderer.selection.ShapeSelection; - -/** - * @cdk.module control - */ -public class SelectModule extends ControllerModuleAdapter { - - private ShapeSelection selection = new LassoSelection(); - - public SelectModule(IChemModelRelay chemModelRelay) { - super(chemModelRelay); - } - - public SelectModule(IChemModelRelay chemModelRelay, - IChemModelEventRelayHandler eventhandler) { - super(chemModelRelay); - selection.setEventHandler(eventhandler); - } - - public void mouseClickedDown(Point2d p) { - this.selection.clear(); - this.chemModelRelay.getRenderer() - .getRenderer2DModel() - .setSelection(this.selection); - } - - public void mouseDrag(Point2d from, Point2d to) { - this.selection.addPoint(to); - this.selection.select(this.chemModelRelay.getIChemModel()); - this.chemModelRelay.updateView(); - } - - public void mouseClickedUp(Point2d p) { - this.selection.select(this.chemModelRelay.getIChemModel()); - this.selection.reset(); - this.chemModelRelay.updateView(); - } - - public String getDrawModeString() { - return "Select in Free Form"; - } - -} Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectSquareModule.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectSquareModule.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectSquareModule.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -31,9 +31,8 @@ private RectangleSelection selection = new RectangleSelection(); - public SelectSquareModule(IChemModelRelay chemModelRelay, IChemModelEventRelayHandler eventhandler) { + public SelectSquareModule(IChemModelRelay chemModelRelay) { super(chemModelRelay); - selection.setEventHandler(eventhandler); } public void mouseClickedDown(Point2d p) { @@ -45,12 +44,12 @@ public void mouseDrag(Point2d from, Point2d to) { this.selection.addPoint(to); - this.selection.select(this.chemModelRelay.getIChemModel()); + this.chemModelRelay.select(selection); this.chemModelRelay.updateView(); } public void mouseClickedUp(Point2d p) { - this.selection.select(this.chemModelRelay.getIChemModel()); + this.chemModelRelay.select(selection); this.selection.reset(); this.chemModelRelay.updateView(); } Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RendererModel.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RendererModel.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RendererModel.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -43,7 +43,7 @@ import org.openscience.cdk.renderer.color.CDK2DAtomColors; import org.openscience.cdk.renderer.color.IAtomColorer; import org.openscience.cdk.renderer.font.IFontManager; -import org.openscience.cdk.renderer.selection.ISelection; +import org.openscience.cdk.renderer.selection.IChemObjectSelection; import org.openscience.cdk.renderer.selection.LassoSelection; /** @@ -87,7 +87,7 @@ private IAtomContainer clipboardContent = null; - private ISelection selection = new LassoSelection(); + private IChemObjectSelection selection = new LassoSelection(); public RendererModel() { this.parameters = new RenderingParameters(); @@ -146,11 +146,11 @@ this.parameters.setScale(scale); } - public void setSelection(ISelection selection) { + public void setSelection(IChemObjectSelection selection) { this.selection = selection; } - public ISelection getSelection() { + public IChemObjectSelection getSelection() { return this.selection; } Deleted: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/HighlightGenerator.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/HighlightGenerator.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/HighlightGenerator.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -1,71 +0,0 @@ -package org.openscience.cdk.renderer.generators; - -import java.awt.Color; - -import javax.vecmath.Point2d; - -import org.openscience.cdk.interfaces.IAtom; -import org.openscience.cdk.interfaces.IAtomContainer; -import org.openscience.cdk.interfaces.IBond; -import org.openscience.cdk.renderer.RendererModel; -import org.openscience.cdk.renderer.elements.ElementGroup; -import org.openscience.cdk.renderer.elements.IRenderingElement; -import org.openscience.cdk.renderer.elements.OvalElement; - -/** - * @cdk.module render - */ -public class HighlightGenerator extends BasicBondGenerator - implements IGenerator { - - public HighlightGenerator() {} - - public IRenderingElement generate( - IAtomContainer ac, IAtom atom, RendererModel model) { - IAtom highlightedAtom = atom; - if (highlightedAtom != null) { - Point2d p = atom.getPoint2d(); - - // the element size has to be scaled to model space - // so that it can be scaled back to screen space... - double radius = model.getHighlightDistance() / model.getScale(); - return new OvalElement( - p.x, - p.y, - radius, - model.getHighlightShapeFilled(), - model.getHoverOverColor()); - } - return null; - } - - public IRenderingElement generate( - IAtomContainer ac, IBond bond, RendererModel model) { - if (bond != null) { - super.ringSet = super.getRingSet(ac); - - double r = model.getHighlightDistance() / model.getScale(); - Color hColor = model.getHoverOverColor(); - Point2d p = bond.get2DCenter(); - return new OvalElement( - p.x, p.y, r, model.getHighlightShapeFilled(), hColor); - } else { - return new ElementGroup(); - } - } - - public IRenderingElement generate(IAtomContainer ac, RendererModel model) { - super.setOverrideColor(model.getHoverOverColor()); - ElementGroup elementGroup = new ElementGroup(); - IAtom atom = model.getHighlightedAtom(); - if (atom != null) { - elementGroup.add(this.generate(ac, atom, model)); - } - - IBond bond = model.getHighlightedBond(); - if (bond != null) { - elementGroup.add(this.generate(ac, bond, model)); - } - return elementGroup; - } -} Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/SelectionGenerator.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/SelectionGenerator.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/SelectionGenerator.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -32,7 +32,7 @@ import org.openscience.cdk.renderer.elements.IRenderingElement; import org.openscience.cdk.renderer.elements.OvalElement; import org.openscience.cdk.renderer.elements.RectangleElement; -import org.openscience.cdk.renderer.selection.ISelection; +import org.openscience.cdk.renderer.selection.IChemObjectSelection; /** * @cdk.module render @@ -46,7 +46,7 @@ public IRenderingElement generate(IAtomContainer ac, RendererModel model) { Color selectionColor = model.getSelectedPartColor(); AtomShape shape = model.getSelectionShape(); - ISelection selection = model.getSelection(); + IChemObjectSelection selection = model.getSelection(); ElementGroup selectionElements = new ElementGroup(); if (this.autoUpdateSelection || selection.isFilled()) { Added: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/IChemObjectSelection.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/IChemObjectSelection.java (rev 0) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/IChemObjectSelection.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -0,0 +1,62 @@ +package org.openscience.cdk.renderer.selection; + +import java.awt.Color; + +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IChemModel; +import org.openscience.cdk.renderer.elements.IRenderingElement; + +/** + * @author maclean + * @cdk.module render + */ +public interface IChemObjectSelection { + + /** + * Perform a selection by some method. + * + * @param chemModel an IChemModel to select from. + */ + public void select(IChemModel chemModel); + + public void select(IAtomContainer atomContainer); + + /** + * Remove everything from this selection. + */ + public void clear(); + + /** + * Make an IAtomContainer where all the bonds + * only have atoms that are in the selection. + * + * @return a well defined atom container. + */ + public IAtomContainer getConnectedAtomContainer(); + + /** + * The opposite of a method like "isEmpty" + * + * @return true if there is anything in the selection + */ + public boolean isFilled(); + + /** + * Use this to check if the selection process has finished. + * Some implementing classes may just choose to return 'true' + * if their selection is a simple one-step process. + * + * @return true if the selection process is complete + */ + public boolean isFinished(); + + /** + * Generate a display element that represents this selection. + * This will be used while isFilled() && !isFinished(). + * + * @param color the color of the element to generate. + * @return a rendering element for display purposes. + */ + public IRenderingElement generate(Color color); + +} Deleted: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/ISelection.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/ISelection.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/ISelection.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -1,62 +0,0 @@ -package org.openscience.cdk.renderer.selection; - -import java.awt.Color; - -import org.openscience.cdk.interfaces.IAtomContainer; -import org.openscience.cdk.interfaces.IChemModel; -import org.openscience.cdk.renderer.elements.IRenderingElement; - -/** - * @author maclean - * @cdk.module render - */ -public interface ISelection { - - /** - * Perform a selection by some method. - * - * @param chemModel an IChemModel to select from. - */ - public void select(IChemModel chemModel); - - public void select(IAtomContainer atomContainer); - - /** - * Remove everything from this selection. - */ - public void clear(); - - /** - * Make an IAtomContainer where all the bonds - * only have atoms that are in the selection. - * - * @return a well defined atom container. - */ - public IAtomContainer getConnectedAtomContainer(); - - /** - * The opposite of a method like "isEmpty" - * - * @return true if there is anything in the selection - */ - public boolean isFilled(); - - /** - * Use this to check if the selection process has finished. - * Some implementing classes may just choose to return 'true' - * if their selection is a simple one-step process. - * - * @return true if the selection process is complete - */ - public boolean isFinished(); - - /** - * Generate a display element that represents this selection. - * This will be used while isFilled() && !isFinished(). - * - * @param color the color of the element to generate. - * @return a rendering element for display purposes. - */ - public IRenderingElement generate(Color color); - -} Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/LogicalSelection.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/LogicalSelection.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/LogicalSelection.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -13,7 +13,7 @@ * @author maclean * @cdk.module render */ -public class LogicalSelection implements ISelection { +public class LogicalSelection implements IChemObjectSelection { public enum Type { ALL, NONE }; Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/RectangleSelection.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/RectangleSelection.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/RectangleSelection.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -21,9 +21,6 @@ package org.openscience.cdk.renderer.selection; import java.awt.Color; -import java.awt.Dimension; -import java.awt.Point; -import java.awt.Rectangle; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; @@ -57,14 +54,17 @@ } public void addPoint(Point2d p) { - if(rectangle.getHeight()==0 && rectangle.getWidth()==0){ - rectangle=new Rectangle2D.Double(p.x, p.y, 1,1); - }else{ - if(rectangle.contains(new Point2D.Double(p.x, p.y))) - rectangle.setRect(rectangle.getX(), rectangle.getY(),p.x-rectangle.getX(),p.y-rectangle.getY()); - else - rectangle.add(new Point2D.Double(p.x, p.y)); - } + if (rectangle.getHeight() == 0 && rectangle.getWidth() == 0) { + rectangle = new Rectangle2D.Double(p.x, p.y, 1, 1); + } else { + if (rectangle.contains(new Point2D.Double(p.x, p.y))) { + double x = rectangle.getX(); + double y = rectangle.getY(); + rectangle.setRect(x, y, p.x - x, p.y - y); + } else { + rectangle.add(new Point2D.Double(p.x, p.y)); + } + } } public boolean isEmpty() { Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/ShapeSelection.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/ShapeSelection.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/ShapeSelection.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -26,7 +26,6 @@ import javax.vecmath.Point2d; -import org.openscience.cdk.controller.IChemModelEventRelayHandler; import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IBond; @@ -37,14 +36,12 @@ /** * @cdk.module render */ -public abstract class ShapeSelection implements ISelection { +public abstract class ShapeSelection implements IChemObjectSelection { public final List<IAtom> atoms = new ArrayList<IAtom>(); public final List<IBond> bonds = new ArrayList<IBond>(); - private IChemModelEventRelayHandler changeHandler; - protected boolean finished = false; public abstract boolean contains(Point2d p); @@ -74,7 +71,7 @@ } public boolean isFilled() { - return !this.atoms.isEmpty() || !this.bonds.isEmpty(); + return !atoms.isEmpty() || !bonds.isEmpty(); } /* @@ -86,14 +83,14 @@ */ public IAtomContainer getConnectedAtomContainer() { // you should really have used the isFilled method... - if (this.atoms.size() == 0) return null; + if (atoms.size() == 0) return null; - IAtomContainer ac = this.atoms.get(0).getBuilder().newAtomContainer(); - for (IAtom atom : this.atoms) { + IAtomContainer ac = atoms.get(0).getBuilder().newAtomContainer(); + for (IAtom atom : atoms) { ac.addAtom(atom); } - for (IBond bond : this.bonds) { + for (IBond bond : bonds) { boolean addBond = true; for (IAtom atom : bond.atoms()) { if (!ac.contains(atom)) addBond = false; @@ -110,28 +107,22 @@ public void select(IAtomContainer atomContainer) { clear(); for (IAtom atom : atomContainer.atoms()) { - if (this.contains(atom.getPoint2d()) && !this.atoms.contains(atom)) { - this.atoms.add(atom); + if (contains(atom.getPoint2d()) && !atoms.contains(atom)) { + atoms.add(atom); } } for (IBond bond : atomContainer.bonds()) { - if (this.contains(bond.get2DCenter()) && !this.bonds.contains(bond)) { - this.bonds.add(bond); + if (contains(bond.get2DCenter()) && !bonds.contains(bond)) { + bonds.add(bond); } - } - if(changeHandler!=null) - changeHandler.selectionChanged(); + } } public void select(IChemModel chemModel) { for (IAtomContainer atomContainer : ChemModelManipulator.getAllAtomContainers(chemModel)) { - this.select(atomContainer); + select(atomContainer); } } - - public void setEventHandler(IChemModelEventRelayHandler handler) { - this.changeHandler = handler; - } } Modified: cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/RendererTest.java =================================================================== --- cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/RendererTest.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/RendererTest.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -94,6 +94,7 @@ IAtom c9 = createAtomAndBondTo("C", c7, mol, IBond.Order.SINGLE); createAtomAndBondTo("O", c9, mol, IBond.Order.DOUBLE); IPseudoAtom p1 = new PseudoAtom("R"); + p1.setLabel("Me"); mol.addAtom(p1); mol.addBond(new Bond(p1, c9, IBond.Order.SINGLE)); Modified: cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/RendererTestPanel.java =================================================================== --- cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/RendererTestPanel.java 2009-02-19 13:47:41 UTC (rev 14198) +++ cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/RendererTestPanel.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -19,7 +19,7 @@ import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.renderer.font.AWTFontManager; import org.openscience.cdk.renderer.generators.BasicAtomGenerator; -import org.openscience.cdk.renderer.generators.HighlightGenerator; +import org.openscience.cdk.renderer.generators.HighlightBondGenerator; import org.openscience.cdk.renderer.generators.IGenerator; import org.openscience.cdk.renderer.generators.LonePairGenerator; import org.openscience.cdk.renderer.generators.RadicalGenerator; @@ -43,7 +43,7 @@ generators.add(new BasicAtomGenerator()); generators.add(new LonePairGenerator()); generators.add(new RadicalGenerator()); - generators.add(new HighlightGenerator()); + generators.add(new HighlightBondGenerator()); this.renderer = new Renderer(generators, new AWTFontManager()); final RendererModel rendererModel = this.renderer.getRenderer2DModel(); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2009-02-19 13:47:41 UTC (rev 14198) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -62,7 +62,8 @@ import org.openscience.cdk.renderer.generators.LonePairGenerator; import org.openscience.cdk.renderer.generators.RadicalGenerator; import org.openscience.cdk.renderer.generators.RingGenerator; -import org.openscience.cdk.renderer.selection.ISelection; +import org.openscience.cdk.renderer.generators.SelectionGenerator; +import org.openscience.cdk.renderer.selection.IChemObjectSelection; import org.openscience.cdk.renderer.visitor.AWTDrawVisitor; import org.openscience.cdk.renderer.visitor.SVGGenerator; import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; @@ -135,6 +136,7 @@ generators.add(new ExternalHighlightGenerator()); generators.add(new HighlightAtomGenerator()); generators.add(new HighlightBondGenerator()); + generators.add(new SelectionGenerator()); return generators; } @@ -312,7 +314,9 @@ } } else if (position == 2) { // depict brutto formula of the selected molecule or part of molecule - ISelection selection = renderer.getRenderer2DModel().getSelection(); + IChemObjectSelection selection = + renderer.getRenderer2DModel().getSelection(); + if (selection != null) { IAtomContainer ac = selection.getConnectedAtomContainer(); if (ac != null) { Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ChangeModeAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ChangeModeAction.java 2009-02-19 13:47:41 UTC (rev 14198) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ChangeModeAction.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -44,7 +44,7 @@ import org.openscience.cdk.controller.IControllerModel; import org.openscience.cdk.controller.MoveModule; import org.openscience.cdk.controller.RemoveModule; -import org.openscience.cdk.controller.SelectModule; +import org.openscience.cdk.controller.SelectLassoModule; import org.openscience.cdk.controller.SelectSquareModule; import org.openscience.cdk.controller.undoredo.UndoRedoHandler; import org.openscience.cdk.event.ICDKChangeListener; @@ -90,10 +90,10 @@ } else if (type.equals("enterelement")) { hub.setActiveDrawModule(new EnterElementSwingModule(hub)); } else if (type.equals("lasso")) { - hub.setActiveDrawModule(new SelectModule(hub,jcpPanel)); + hub.setActiveDrawModule(new SelectLassoModule(hub)); hub.getController2DModel().setDrawElement("C"); } else if (type.equals("select")) { - hub.setActiveDrawModule(new SelectSquareModule(hub,jcpPanel)); + hub.setActiveDrawModule(new SelectSquareModule(hub)); hub.getController2DModel().setDrawElement("C"); } else if (type.equals("up_bond")) { hub.setActiveDrawModule(new AlterBondStereoModule( Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java 2009-02-19 13:47:41 UTC (rev 14198) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -47,6 +47,7 @@ import org.openscience.cdk.DefaultChemObjectBuilder; import org.openscience.cdk.Molecule; import org.openscience.cdk.MoleculeSet; +import org.openscience.cdk.controller.ControllerHub; import org.openscience.cdk.controller.MoveModule; import org.openscience.cdk.geometry.GeometryTools; import org.openscience.cdk.interfaces.IAtom; @@ -63,7 +64,7 @@ import org.openscience.cdk.layout.StructureDiagramGenerator; import org.openscience.cdk.layout.TemplateHandler; import org.openscience.cdk.renderer.RendererModel; -import org.openscience.cdk.renderer.selection.ISelection; +import org.openscience.cdk.renderer.selection.IChemObjectSelection; import org.openscience.cdk.renderer.selection.LogicalSelection; import org.openscience.cdk.smiles.SmilesGenerator; import org.openscience.cdk.smiles.SmilesParser; @@ -159,13 +160,15 @@ jcpPanel.getChemModel().setMoleculeSet(moleculeSet); //We select the inserted structure - ISelection selection + IChemObjectSelection selection = new LogicalSelection(LogicalSelection.Type.ALL); selection.select(toPaste); renderModel.setSelection(selection); jcpPanel.setMoveAction(); - jcpPanel.get2DHub().setActiveDrawModule(new MoveModule(jcpPanel.get2DHub())); - jcpPanel.get2DHub().updateView(); + + ControllerHub hub = jcpPanel.get2DHub(); + hub.setActiveDrawModule(new MoveModule(hub)); + hub.updateView(); } } } catch(Exception ex){ Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java 2009-02-19 13:47:41 UTC (rev 14198) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java 2009-02-19 14:28:03 UTC (rev 14199) @@ -38,6 +38,7 @@ import org.openscience.cdk.Atom; import org.openscience.cdk.Bond; import org.openscience.cdk.Reaction; +import org.openscience.cdk.controller.ControllerHub; import org.openscience.cdk.controller.MoveModule; import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; @@ -45,7 +46,7 @@ import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.interfaces.IChemObject; import org.openscience.cdk.renderer.RendererModel; -import org.openscience.cdk.renderer.selection.ISelection; +import org.openscience.cdk.renderer.selection.IChemObjectSelection; import org.openscience.cdk.renderer.selection.LogicalSelection; import org.openscience.cdk.renderer.selection.RectangleSelection; import org.openscience.cdk.renderer.selection.ShapeSelection; @@ -136,11 +137,13 @@ renderModel.setSelection(new LogicalSelection(LogicalSelection.Type.NONE)); } else if (type.equals("selectAll")) { - ISelection allSelection = new LogicalSelection(LogicalSelection.Type.ALL); + IChemObjectSelection allSelection = + new LogicalSelection(LogicalSelection.Type.ALL); allSelection.select(jcpPanel.getChemModel()); renderModel.setSelection(allSelection); jcpPanel.setMoveAction(); - jcpPanel.get2DHub().setActiveDrawModule(new MoveModule(jcpPanel.get2DHub())); + ControllerHub hub = jcpPanel.get2DHub(); + hub.setActiveDrawModule(new MoveModule(hub)); } else if (type.equals("selectMolecule")) { IChemObject object = getSource(event); IAtomContainer relevantAtomContainer=null; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gil...@us...> - 2009-02-22 17:03:56
|
Revision: 14224 http://cdk.svn.sourceforge.net/cdk/?rev=14224&view=rev Author: gilleain Date: 2009-02-22 17:03:50 +0000 (Sun, 22 Feb 2009) Log Message: ----------- Improvements to the renderer, and changes to JCP to accommodate those. Modified Paths: -------------- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/BasicBondGenerator.java cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/RendererTestPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/SwingPopupModule.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/ZoomAction.java Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer.java 2009-02-22 13:57:49 UTC (rev 14223) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer.java 2009-02-22 17:03:50 UTC (rev 14224) @@ -47,8 +47,59 @@ * A general renderer for ChemModels, Reactions, and Molecules. The chem object * is converted into a 'diagram' made up of {@link IRenderingElement}s. It takes * an {@link IDrawVisitor} to do the drawing of the generated diagram. Various - * display properties can be set using the {@link RendererModel}. + * display properties can be set using the {@link RendererModel}.<p> * + * This class has several usage patterns. For just painting fit-to-screen do: + * + * renderer.paintMolecule(molecule, visitor, drawArea) + * + * for painting at a scale determined by the bond length in the RendererModel: + * + * if (moleculeIsNew) { + * renderer.setScale(molecule); + * } + * Rectangle diagramSize = renderer.paintMolecule(molecule, visitor); + * // ...update scroll bars here + * + * to paint at full screen size, but not resize with each change: + * + * if (moleculeIsNew) { + * renderer.setScale(molecule); + * Rectangle diagramBounds = renderer.calculateDiagramBounds(molecule); + * renderer.setZoomToFit(diagramBounds, drawArea); + * renderer.paintMolecule(molecule, visitor); + * } else { + * Rectangle diagramSize = renderer.paintMolecule(molecule, visitor); + * // ...update scroll bars here + * } + * + * finally, if you are scrolling, and have not changed the diagram: + * + * renderer.repaint(visitor) + * + * will just repaint the previously generated diagram, at the same scale. + * + * There are two sets of methods for painting IChemObjects - those that take + * a Rectangle that represents the desired draw area, and those that return a + * Rectangle that represents the actual draw area. The first are intended for + * drawing molecules fitted to the screen (where 'screen' means any drawing + * area) while the second type of method are for drawing bonds at the length + * defined by the {@link RendererModel} parameter bondLength.<p> + * + * There are two numbers used to transform the model so that it fits on screen. + * The first is <tt>scale</tt>, which is used to map model coordinates to + * screen coordinates. The second is <tt>zoom</tt> which is used to, well, + * zoom the on screen coordinates. If the diagram is fit-to-screen, then the + * ratio of the bounds when drawn using bondLength and the bounds of + * the screen is used as the zoom.<p> + * + * So, if the bond length on screen is set to 40, and the average bond length + * of the model is 2 (unitless, but roughly Ångstrom scale) then the + * scale will be 20. If the model is 10 units wide, then the diagram drawn at + * 100% zoom will be 10 * 20 = 200 in width on screen. If the screen is 400 + * pixels wide, then fitting it to the screen will make the zoom 200%. Since the + * zoom is just a floting point number, 100% = 1 and 200% = 2. + * * @author maclean * @cdk.module render */ @@ -76,11 +127,6 @@ private Point2d drawCenter = new Point2d(200, 200); /** - * The rotation applied to the diagram - */ - private double theta = 0.0; - - /** * The default scale is used when the model is empty. */ public static final double DEFAULT_SCALE = 30.0; @@ -109,6 +155,228 @@ } /** + * Calculate and set the zoom factor needed to completely fit the diagram + * onto the screen bounds. + * + * @param diagramBounds + * @param drawBounds + */ + public void setZoomToFit( + Rectangle2D diagramBounds, Rectangle2D drawBounds) { + + // determine the zoom needed to fit the diagram to the screen + double widthRatio = diagramBounds.getWidth() / drawBounds.getWidth(); + double heightRatio = diagramBounds.getHeight() / drawBounds.getHeight(); + + // the area is contained completely within the target + if (widthRatio > 1 && heightRatio > 1) { + this.zoom = Math.min(widthRatio, heightRatio); + } + + // the area is wider than the target, but fits the height + else if (widthRatio < 1 && heightRatio > 1) { + this.zoom = widthRatio; + } + + // the area is taller than the target, but fits the width + else if (widthRatio > 1 && heightRatio < 1) { + this.zoom = heightRatio; + } + + // the target is completely contained by the area + else if (widthRatio > 1 && heightRatio > 1) { + this.zoom = Math.max(heightRatio, widthRatio); + } + + else { + // the bounds are equal + this.zoom = widthRatio; // either is fine + } + + } + + /** + * Set the scale for an IChemModel. It calculates the average bond length of + * the model and calculates the multiplication factor to transform this + * to the bond length that is set in the RendererModel. + * + * @param chemModel + */ + public void setScale(IChemModel chemModel) { + double bondLength = Renderer.calculateAverageBondLength(chemModel); + this.scale = this.calculateScaleForBondLength(bondLength); + + // store the scale so that other components can access it + this.rendererModel.setScale(scale); + } + + /** + * Set the scale for an IReactionSet. It calculates the average bond length + * of the model and calculates the multiplication factor to transform this + * to the bond length that is set in the RendererModel. + * + * @param reactionSet + */ + public void setScale(IReactionSet reactionSet) { + double bondLength = Renderer.calculateAverageBondLength(reactionSet); + this.scale = this.calculateScaleForBondLength(bondLength); + + // store the scale so that other components can access it + this.rendererModel.setScale(scale); + } + + /** + * Set the scale for an IReaction. It calculates the average bond length + * of the model and calculates the multiplication factor to transform this + * to the bond length that is set in the RendererModel. + * @param reaction + */ + public void setScale(IReaction reaction) { + double bondLength = Renderer.calculateAverageBondLength(reaction); + this.scale = this.calculateScaleForBondLength(bondLength); + + // store the scale so that other components can access it + this.rendererModel.setScale(scale); + } + + /** + * Set the scale for an IMoleculeSet. It calculates the average bond length + * of the model and calculates the multiplication factor to transform this + * to the bond length that is set in the RendererModel. + * @param moleculeSet + */ + public void setScale(IMoleculeSet moleculeSet) { + double bondLength = Renderer.calculateAverageBondLength(moleculeSet); + this.scale = this.calculateScaleForBondLength(bondLength); + + // store the scale so that other components can access it + this.rendererModel.setScale(scale); + } + + /** + * Set the scale for an IAtomContainer. It calculates the average bond + * length of the model and calculates the multiplication factor to transform + * this to the bond length that is set in the RendererModel. + * @param atomContainer + */ + public void setScale(IAtomContainer atomContainer) { + double bondLength = GeometryTools.getBondLengthAverage(atomContainer); + this.scale = this.calculateScaleForBondLength(bondLength); + + // store the scale so that other components can access it + this.rendererModel.setScale(scale); + } + + /** + * Paint an IChemModel using the IDrawVisitor at a scale determined by the + * bond length in RendererModel. + * + * @param chemModel + * the chem model to draw + * @param drawVisitor + * the visitor used to draw with + * @return the rectangular area that the diagram will occupy on screen + */ + public Rectangle paintChemModel( + IChemModel chemModel, IDrawVisitor drawVisitor) { + + IMoleculeSet moleculeSet = chemModel.getMoleculeSet(); + IReactionSet reactionSet = chemModel.getReactionSet(); + + if (moleculeSet == null || reactionSet != null) { + if (reactionSet != null) { + return paintMoleculeSet(moleculeSet, drawVisitor); + } + } + + Rectangle2D modelBounds = Renderer.calculateBounds(moleculeSet); + + // setup and draw + this.setupTransformNatural(modelBounds); + IRenderingElement diagram = this.generateDiagram(moleculeSet); + this.paint(drawVisitor, diagram); + + // the size of the painted diagram is returned + return this.convertToDiagramBounds(modelBounds); + } + + public Rectangle paintReactionSet( + IReactionSet reactionSet, IDrawVisitor drawVisitor) { + // total up the bounding boxes + Rectangle2D totalBounds = null; + for (IReaction reaction : reactionSet.reactions()) { + Rectangle2D modelBounds = Renderer.calculateBounds(reaction); + if (totalBounds == null) { + totalBounds = modelBounds; + } else { + totalBounds = totalBounds.createUnion(modelBounds); + } + } + + // setup and draw + this.setupTransformNatural(totalBounds); + ElementGroup diagram = new ElementGroup(); + for (IReaction reaction : reactionSet.reactions()) { + diagram.add(this.generateDiagram(reaction)); + } + this.paint(drawVisitor, diagram); + + // the size of the painted diagram is returned + return this.convertToDiagramBounds(totalBounds); + } + + public Rectangle paintReaction( + IReaction reaction, IDrawVisitor drawVisitor) { + + // calculate the bounds + Rectangle2D modelBounds = Renderer.calculateBounds(reaction); + + // setup and draw + this.setupTransformNatural(modelBounds); + IRenderingElement diagram = this.generateDiagram(reaction); + this.paint(drawVisitor, diagram); + + return this.convertToDiagramBounds(modelBounds); + } + + public Rectangle paintMoleculeSet( + IMoleculeSet moleculeSet, IDrawVisitor drawVisitor) { + // total up the bounding boxes + Rectangle2D totalBounds = null; + for (IAtomContainer molecule : moleculeSet.molecules()) { + Rectangle2D modelBounds = Renderer.calculateBounds(molecule); + if (totalBounds == null) { + totalBounds = modelBounds; + } else { + totalBounds = totalBounds.createUnion(modelBounds); + } + } + + // setup and draw + this.setupTransformNatural(totalBounds); + ElementGroup diagram = new ElementGroup(); + for (IAtomContainer molecule : moleculeSet.molecules()) { + diagram.add(this.generateDiagram(molecule)); + } + this.paint(drawVisitor, diagram); + + return this.convertToDiagramBounds(totalBounds); + } + + public Rectangle paintMolecule( + IAtomContainer atomContainer,IDrawVisitor drawVisitor) { + // the bounds of the model + Rectangle2D modelBounds = Renderer.calculateBounds(atomContainer); + + // setup and draw + this.setupTransformNatural(modelBounds); + IRenderingElement diagram = this.generateDiagram(atomContainer); + this.paint(drawVisitor, diagram); + + return this.convertToDiagramBounds(modelBounds); + } + + /** * Paint a ChemModel. * * @param chemModel @@ -135,7 +403,7 @@ // calculate the total bounding box Rectangle2D modelBounds = Renderer.calculateBounds(moleculeSet); - this.setupTransform(bounds, modelBounds, + this.setupTransformToFit(bounds, modelBounds, Renderer.calculateAverageBondLength(chemModel), resetCenter); // generate the elements @@ -168,7 +436,7 @@ } } - this.setupTransform(bounds, totalBounds, + this.setupTransformToFit(bounds, totalBounds, Renderer.calculateAverageBondLength(reactionSet), resetCenter); ElementGroup diagram = new ElementGroup(); @@ -195,7 +463,7 @@ // calculate the bounds Rectangle2D modelBounds = Renderer.calculateBounds(reaction); - this.setupTransform(bounds, modelBounds, + this.setupTransformToFit(bounds, modelBounds, Renderer.calculateAverageBondLength(reaction), resetCenter); // generate the elements @@ -228,7 +496,7 @@ } } - this.setupTransform(bounds, totalBounds, + this.setupTransformToFit(bounds, totalBounds, Renderer.calculateAverageBondLength(molecules), resetCenter); ElementGroup diagram = new ElementGroup(); @@ -254,7 +522,7 @@ // the bounds of the model Rectangle2D modelBounds = Renderer.calculateBounds(atomContainer); - this.setupTransform(bounds, modelBounds, + this.setupTransformToFit(bounds, modelBounds, GeometryTools.getBondLengthAverage(atomContainer), resetCenter); // the diagram to draw @@ -278,11 +546,10 @@ * @param model the model to draw. * @return a rectangle in screen space. */ - public Rectangle calculateScreenBounds(IChemModel model) { + public Rectangle calculateDiagramBounds(IChemModel model) { IMoleculeSet moleculeSet = model.getMoleculeSet(); IReactionSet reactionSet = model.getReactionSet(); - if ((moleculeSet == null && reactionSet == null) - || this.drawCenter == null) { + if ((moleculeSet == null && reactionSet == null)) { return new Rectangle(); } @@ -296,26 +563,27 @@ return this.calculateScreenBounds(modelBounds); } - public Rectangle calculateScreenBounds(IReactionSet reactionSet) { + public Rectangle calculateDiagramBounds(IReactionSet reactionSet) { return this.calculateScreenBounds( Renderer.calculateBounds(reactionSet)); } - public Rectangle calculateScreenBounds(IReaction reaction) { + public Rectangle calculateDiagramBounds(IReaction reaction) { return this.calculateScreenBounds( Renderer.calculateBounds(reaction)); } - public Rectangle calculateScreenBounds(IMoleculeSet moleculeSet) { + public Rectangle calculateDiagramBounds(IMoleculeSet moleculeSet) { return this.calculateScreenBounds( Renderer.calculateBounds(moleculeSet)); } - public Rectangle calculateScreenBounds(IAtomContainer atomContainer) { + public Rectangle calculateDiagramBounds(IAtomContainer atomContainer) { return this.calculateScreenBounds( Renderer.calculateBounds(atomContainer)); } + // XXX this is the same as calculateDiagramBounds! public Rectangle calculateScreenBounds(Rectangle2D modelBounds) { double margin = this.rendererModel.getMargin(); Point2d modelScreenCenter @@ -478,29 +746,6 @@ return new Point2d(dest[0], dest[1]); } - /** - * Set the zoom to use; a zoom of 1.0 is 100%, 0.5 is 50%, 2.0 is 200%. - * - * @param zoom the zoom - */ - public void setZoom(double zoom) { - this.zoom = zoom; - } - - public double getZoom() { - return this.zoom; - } - - /** - * Set the rotation for drawing; NOTE - should be unset by calling - * <code>setRotation(0)</code>. - * - * @param degrees the angle to rotate by in degrees. - */ - public void setRotation(double degrees) { - this.theta = Math.toRadians(degrees); - } - public void setModelCenter(double x, double y) { this.modelCenter = new Point2d(x, y); } @@ -510,6 +755,18 @@ } /** + * Move the draw center by dx and dy. + * + * @param dx + * the x shift + * @param dy + * the y shift + */ + public void shiftDrawCenter(int dx, int dy) { + this.drawCenter.set(this.drawCenter.x + dx, this.drawCenter.y + dy); + } + + /** * The target method for paintChemModel, paintReaction, and paintMolecule. * * @param drawVisitor @@ -532,80 +789,81 @@ drawVisitor.setRendererModel(this.rendererModel); diagram.accept(drawVisitor); } + + /** + * Set the transform for a non-fit to screen paint. + * + * @param modelBounds + * the bounding box of the model + */ + private void setupTransformNatural(Rectangle2D modelBounds) { + this.zoom = this.rendererModel.getZoomFactor(); + this.fontManager.setFontForZoom(zoom); + this.setup(); + } /** - * Sets the transformation needed to draw the model on the canvas. + * Sets the transformation needed to draw the model on the canvas when + * the diagram needs to fit the screen. * * @param screenBounds * the bounding box of the draw area * @param modelBounds * the bounding box of the model - * @param bondLen + * @param bondLength * the average bond length of the model * @param reset * if true, model center will be set to the modelBounds center * and the scale will be re-calculated */ - private void setupTransform(Rectangle2D screenBounds, + private void setupTransformToFit(Rectangle2D screenBounds, Rectangle2D modelBounds, - double bondLen, + double bondLength, boolean reset) { if (screenBounds == null) return; - // determine the bounds of the diagram - Rectangle2D diagramBounds = - this.calculateDiagramBounds(screenBounds, modelBounds); - - double diagramWidth = diagramBounds.getWidth(); - double diagramHeight = diagramBounds.getHeight(); - double drawWidth = screenBounds.getWidth(); double drawHeight = screenBounds.getHeight(); - - // calculate the scale - if (Double.isNaN(bondLen)) { - this.scale = Renderer.DEFAULT_SCALE; - } else { - if (reset) { - this.scale = this.rendererModel.getBondLength() / bondLen; - } - } - + this.scale = this.calculateScaleForBondLength(bondLength); + this.setDrawCenter( screenBounds.getCenterX(), screenBounds.getCenterY()); - if (rendererModel.isFitToScreen()) { - double widthRatio = drawWidth / (modelBounds.getWidth() * scale); - double heightRatio = drawHeight / (modelBounds.getHeight() * scale); + + // determine the zoom needed to fit the diagram to the screen + double widthRatio = drawWidth / (modelBounds.getWidth() * scale); + double heightRatio = drawHeight / (modelBounds.getHeight() * scale); - // the area is contained completely within the target - if (widthRatio > 1 && heightRatio > 1) { - this.zoom = Math.min(widthRatio, heightRatio); - } + // the area is contained completely within the target + if (widthRatio > 1 && heightRatio > 1) { + this.zoom = Math.min(widthRatio, heightRatio); + } - // the area is wider than the target, but fits the height - else if (widthRatio < 1 && heightRatio > 1) { - this.zoom = widthRatio; - } + // the area is wider than the target, but fits the height + else if (widthRatio < 1 && heightRatio > 1) { + this.zoom = widthRatio; + } - // the area is taller than the target, but fits the width - else if (widthRatio > 1 && heightRatio < 1) { - this.zoom = heightRatio; - } + // the area is taller than the target, but fits the width + else if (widthRatio > 1 && heightRatio < 1) { + this.zoom = heightRatio; + } - // the target is completely contained by the area - else if (widthRatio > 1 && heightRatio > 1) { - this.zoom = Math.max(heightRatio, widthRatio); - } + // the target is completely contained by the area + else if (widthRatio > 1 && heightRatio > 1) { + this.zoom = Math.max(heightRatio, widthRatio); + } - else { - // the bounds are equal - this.zoom = widthRatio; // either is fine - } + else { + // the bounds are equal + this.zoom = widthRatio; // either is fine } + this.fontManager.setFontForZoom(zoom); + + // record the zoom in the model, so that generators can use it this.rendererModel.setZoomFactor(zoom); // this controls whether editing a molecule causes it to re-center @@ -622,6 +880,22 @@ this.setup(); } + + /** + * Given a bond length for a model, calculate the scale that will transform + * this length to the on screen bond length in RendererModel. + * + * @param modelBondLength + * @param reset + * @return + */ + private double calculateScaleForBondLength(double modelBondLength) { + if (Double.isNaN(modelBondLength)) { + return Renderer.DEFAULT_SCALE; + } else { + return this.rendererModel.getBondLength() / modelBondLength; + } + } /** * This is used to calculate the bounds of the diagram as it should appear @@ -629,37 +903,45 @@ * * @param screenBounds * the bounds of the draw area - * @param modelBounds - * the bounds in model space of the model * @return a rectangle that would contain the diagram */ - private Rectangle2D calculateDiagramBounds( - Rectangle2D screenBounds, Rectangle2D modelBounds) { + private Rectangle2D calculateFitBounds(Rectangle2D screenBounds) { double margin = this.rendererModel.getMargin(); - if (this.rendererModel.isFitToScreen()) { - return new Rectangle2D.Double( - screenBounds.getMinX() + margin, - screenBounds.getMinY() + margin, - screenBounds.getWidth() - (margin * 2), - screenBounds.getHeight() - (margin * 2)); - } else { - double cx = modelBounds.getCenterX(); - double cy = modelBounds.getCenterY(); - double mw = modelBounds.getWidth(); - double mh = modelBounds.getWidth(); - - Point2d mc = this.toScreenCoordinates(cx, cy); - - // special case for 0 or 1 atoms - if (mw == 0 && mh == 0) { - return new Rectangle2D.Double(mc.x, mc.y, 0, 0); - } - - double w = (scale * zoom * mw) + (2 * margin); - double h = (scale * zoom * mh) + (2 * margin); + return new Rectangle2D.Double( + screenBounds.getMinX() + margin, + screenBounds.getMinY() + margin, + screenBounds.getWidth() - (margin * 2), + screenBounds.getHeight() - (margin * 2)); + } - return new Rectangle2D.Double((mc.x - w / 2),(mc.y - h / 2), w, h); - } + /** + * Calculate the bounds of the diagram on screen, given the current scale, + * zoom, and margin. + * + * @param modelBounds + * the bounds in model space of the chem object + * @return the bounds in screen space of the drawn diagram + */ + private Rectangle convertToDiagramBounds(Rectangle2D modelBounds) { + double cx = modelBounds.getCenterX(); + double cy = modelBounds.getCenterY(); + double mw = modelBounds.getWidth(); + double mh = modelBounds.getHeight(); + + Point2d mc = this.toScreenCoordinates(cx, cy); + + // special case for 0 or 1 atoms + if (mw == 0 && mh == 0) { + return new Rectangle((int)mc.x, (int)mc.y, 0, 0); + } + + double margin = this.rendererModel.getMargin(); + int w = (int) ((scale * zoom * mw) + (2 * margin)); + int h = (int) ((scale * zoom * mh) + (2 * margin)); + int x = (int) (mc.x - w / 2); + int y = (int) (mc.y - h / 2); + + return new Rectangle(x, y, w, h); } private void setup() { @@ -670,17 +952,15 @@ this.transform.translate(this.drawCenter.x, this.drawCenter.y); this.transform.scale(this.scale, this.scale); this.transform.scale(this.zoom, this.zoom); - this.transform.rotate(this.theta); this.transform.translate(-this.modelCenter.x, -this.modelCenter.y); } catch (NullPointerException npe) { // one of the drawCenter or modelCenter points have not been set! System.err.println(String.format( "null pointer when setting transform: " + - "drawCenter=%s scale=%s zoom=%s rotation=%s modelCenter=%s", + "drawCenter=%s scale=%s zoom=%s modelCenter=%s", this.drawCenter, this.scale, this.zoom, - this.theta, this.modelCenter)); } } Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/BasicBondGenerator.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/BasicBondGenerator.java 2009-02-22 13:57:49 UTC (rev 14223) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/BasicBondGenerator.java 2009-02-22 17:03:50 UTC (rev 14224) @@ -90,8 +90,18 @@ } } + /** + * Determine the color of a bond, returning either the default color, + * the override color or whatever is in the color hash for that bond. + * + * @param bond the bond we are generating an element for + * @param model the rendering model + * @return the color to paint the bond + */ public Color getColorForBond(IBond bond, RendererModel model) { - if (this.overrideColor != null) return overrideColor; + if (this.overrideColor != null) { + return overrideColor; + } Color color = model.getColorHash().get(bond); if (color == null) { Modified: cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/RendererTestPanel.java =================================================================== --- cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/RendererTestPanel.java 2009-02-22 13:57:49 UTC (rev 14223) +++ cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/RendererTestPanel.java 2009-02-22 17:03:50 UTC (rev 14224) @@ -19,6 +19,7 @@ import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.renderer.font.AWTFontManager; import org.openscience.cdk.renderer.generators.BasicAtomGenerator; +import org.openscience.cdk.renderer.generators.HighlightAtomGenerator; import org.openscience.cdk.renderer.generators.HighlightBondGenerator; import org.openscience.cdk.renderer.generators.IGenerator; import org.openscience.cdk.renderer.generators.LonePairGenerator; @@ -43,6 +44,7 @@ generators.add(new BasicAtomGenerator()); generators.add(new LonePairGenerator()); generators.add(new RadicalGenerator()); + generators.add(new HighlightAtomGenerator()); generators.add(new HighlightBondGenerator()); this.renderer = new Renderer(generators, new AWTFontManager()); @@ -63,11 +65,12 @@ public void mouseWheelMoved(MouseWheelEvent e) { rendererModel.setFitToScreen(false); int rotation = e.getWheelRotation(); + double currentZoom = rendererModel.getZoomFactor(); if (rotation < 0) { - renderer.setZoom(renderer.getZoom() * 0.9); + rendererModel.setZoomFactor(currentZoom * 0.9); repaint(); } else { - renderer.setZoom(renderer.getZoom() * 1.1); + rendererModel.setZoomFactor(currentZoom * 1.1); repaint(); } } @@ -87,11 +90,16 @@ public void paint(Graphics g) { super.paint(g); Graphics2D g2 = (Graphics2D)g; - this.renderer.paintChemModel( - this.hub.getIChemModel(), - new AWTDrawVisitor(g2), - this.getBounds(), - isNew); + IChemModel chemModel = this.hub.getIChemModel(); + if (renderer.getRenderer2DModel().isFitToScreen()) { + this.renderer.paintChemModel( + chemModel, + new AWTDrawVisitor(g2), + this.getBounds(), + isNew); + } else { + this.renderer.paintChemModel(chemModel, new AWTDrawVisitor(g2)); + } isNew = false; } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2009-02-22 13:57:49 UTC (rev 14223) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2009-02-22 17:03:50 UTC (rev 14224) @@ -59,6 +59,7 @@ import org.openscience.cdk.nonotify.NoNotificationChemObjectBuilder; import org.openscience.cdk.renderer.Renderer; import org.openscience.cdk.renderer.font.AWTFontManager; +import org.openscience.cdk.renderer.generators.AtomContainerBoundsGenerator; import org.openscience.cdk.renderer.generators.BasicAtomGenerator; import org.openscience.cdk.renderer.generators.ExternalHighlightGenerator; import org.openscience.cdk.renderer.generators.HighlightAtomGenerator; @@ -140,6 +141,7 @@ private List<IGenerator> makeGenerators() { List<IGenerator> generators = new ArrayList<IGenerator>(); + generators.add(new AtomContainerBoundsGenerator()); generators.add(new RingGenerator()); generators.add(new BasicAtomGenerator()); generators.add(new LonePairGenerator()); @@ -185,7 +187,11 @@ public void takeSnapshot(Graphics2D g, Rectangle bounds){ super.paint(g); - this.paintChemModel(g, bounds); + + IChemModel chemModel = hub.getIChemModel(); + if (isValidChemModel(chemModel)) { + this.paintChemModel(chemModel, g, bounds); + } } private boolean isValidChemModel(IChemModel chemModel) { @@ -194,52 +200,118 @@ || chemModel.getReactionSet() != null); } - public void paintChemModel(Graphics2D g, Rectangle screenBounds) { + /** + * Check to see if the molecule bounding box has overlapped a screen edge. + * + * @param screenBounds the bounding box of the screen + * @param diagramBounds the bounding box of the molecule on the screen + * @return + */ + private boolean overlaps(Rectangle screenBounds, Rectangle diagramBounds) { + return screenBounds.getMinX() > diagramBounds.getMinX() + || screenBounds.getMinY() > diagramBounds.getMinY() + || screenBounds.getMaxX() < diagramBounds.getMaxX() + || screenBounds.getMaxY() < diagramBounds.getMaxY(); + } + + private void shift( + Graphics2D g, Rectangle screenBounds, Rectangle diagramBounds) { + int screenMaxX = screenBounds.x + screenBounds.width; + int screenMaxY = screenBounds.y + screenBounds.height; + int diagramMaxX = diagramBounds.x + diagramBounds.width; + int diagramMaxY = diagramBounds.y + diagramBounds.height; - IChemModel chemModel = this.hub.getIChemModel(); - if (isValidChemModel(chemModel)) { - - // paint first, so that the transform is set correctly - this.paintChemModel(chemModel, g, screenBounds); - - // don't calculate screen size as it is equal to screen size! - if (renderer.getRenderer2DModel().isFitToScreen()) { - return; - } - - // determine the size the canvas needs to be to fit the model - Rectangle diagramBounds = renderer.calculateScreenBounds(chemModel); - if (this.overlaps(screenBounds, diagramBounds)) { - Rectangle union = screenBounds.union(diagramBounds); - this.setPreferredSize(union.getSize()); - this.revalidate(); - } + int leftOverlap = screenBounds.x - diagramBounds.x; + int rightOverlap = diagramMaxX - screenMaxX; + int topOverlap = screenBounds.y - diagramBounds.y; + int bottomOverlap = diagramMaxY - screenMaxY; + + boolean overlapsLeft = leftOverlap > 0; + boolean overlapsRight = rightOverlap > 0; + boolean overlapsTop = topOverlap > 0; + boolean overlapsBottom = bottomOverlap > 0; + + int dx = 0; + int dy = 0; + int w = screenBounds.width; + int h = screenBounds.height; + + if (overlapsLeft) { + dx = leftOverlap; } - } + + if (overlapsRight) { + w += rightOverlap; + } + + if (overlapsTop) { + dy = topOverlap; + } + + if (overlapsBottom) { + h += bottomOverlap; + } + + System.err.println( + String.format("%s %s %s %s", + leftOverlap, rightOverlap, topOverlap, rightOverlap)); + + if (dx != 0 || dy != 0) { + renderer.shiftDrawCenter(dx, dy); + this.setPreferredSize(new Dimension(w, h)); + this.revalidate(); + super.paint(g); + this.renderer.paintChemModel( + this.hub.getIChemModel(),new AWTDrawVisitor(g)); + } + } + + public void paint(Graphics g) { + this.setBackground(renderer.getRenderer2DModel().getBackColor()); + super.paint(g); + + Graphics2D g2 = (Graphics2D)g; + + if (this.shouldPaintFromCache) { + renderer.repaint(new AWTDrawVisitor(g2)); + } else { + IChemModel chemModel = this.hub.getIChemModel(); + + if (!isValidChemModel(chemModel)) return; + + /* + * It is more correct to use a rectangle starting at (0,0) + * than to use getBounds() as the RenderPanel may be a child + * of some container window, and its Graphics will be + * translated relative to its parent. + */ + Rectangle screen = new Rectangle(0, 0, getWidth(), getHeight()); + + if (renderer.getRenderer2DModel().isFitToScreen()) { + this.paintChemModelFitToScreen(chemModel, g2, screen); + } else { + this.paintChemModel(chemModel, g2, screen); + } + } + } - /** - * Check to see if the molecule bounding box has overlapped a screen edge. - * - * @param screenBounds the bounding box of the screen - * @param diagramBounds the bounding box of the molecule on the screen - * @return - */ - private boolean overlaps(Rectangle screenBounds, Rectangle diagramBounds) { - return screenBounds.getMinX() > diagramBounds.getMinX() - || screenBounds.getMinY() > diagramBounds.getMinY() - || screenBounds.getMaxX() < diagramBounds.getMaxX() - || screenBounds.getMaxY() < diagramBounds.getMaxY(); - } + /** + * Paint the chem model not fit-to-screen + * + * @param chemModel + * @param g + * @param screen + */ + private void paintChemModel( + IChemModel chemModel,Graphics2D g, Rectangle screen) { - private void paintChemModel( - IChemModel chemModel, Graphics2D g, Rectangle bounds) { + if (isNewChemModel) { + renderer.setScale(chemModel); + } - // paint the chem model, and record that it is no longer new - - renderer.paintChemModel(chemModel, - new AWTDrawVisitor(g), - bounds, - isNewChemModel); + Rectangle diagram = renderer.paintChemModel( + chemModel, new AWTDrawVisitor(g)); + isNewChemModel = false; /* @@ -247,37 +319,29 @@ * repainting when scrolling the canvas */ this.shouldPaintFromCache = true; - } - public void setIsNewChemModel(boolean isNewChemModel) { - this.isNewChemModel = isNewChemModel; - } + // determine the size the canvas needs to be to fit the model + System.out.println(screen + " " + diagram); + shift(g, screen, diagram); +// if (this.overlaps(screen, diagram)) { +// System.err.println("overlaps"); +// Rectangle union = screen.union(diagram); +// this.setPreferredSize(union.getSize()); +// this.revalidate(); +// } + } + + private void paintChemModelFitToScreen( + IChemModel chemModel, Graphics2D g, Rectangle screen) { + + renderer.paintChemModel(chemModel, new AWTDrawVisitor(g), screen, true); - public void paint(Graphics g) { - this.setBackground(renderer.getRenderer2DModel().getBackColor()); - super.paint(g); - - Graphics2D g2 = (Graphics2D)g; - - if (this.shouldPaintFromCache) { - this.paintFromCache(g2); - } else { + } - /* - * It is more correct to use a rectangle starting at (0,0) - * than to use getBounds() as the RenderPanel may be a child - * of some container window, and its Graphics will be - * translated relative to its parent. - */ - this.paintChemModel(g2, - new Rectangle(0, 0, this.getWidth(), this.getHeight())); - } + public void setIsNewChemModel(boolean isNewChemModel) { + this.isNewChemModel = isNewChemModel; } - private void paintFromCache(Graphics2D g) { - renderer.repaint(new AWTDrawVisitor(g)); - } - public void updateView() { /* * updateView should only be called in a ControllerModule where @@ -344,7 +408,10 @@ } } } else if (position == 3) { - status= GT._("Zoomfactor")+": "+NumberFormat.getPercentInstance().format(renderer.getZoom()); + status = GT._("Zoomfactor") + + ": " + + NumberFormat.getPercentInstance().format( + renderer.getRenderer2DModel().getZoomFactor()); } return status; } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/SwingPopupModule.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/SwingPopupModule.java 2009-02-22 13:57:49 UTC (rev 14223) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/SwingPopupModule.java 2009-02-22 17:03:50 UTC (rev 14224) @@ -36,6 +36,9 @@ import org.openscience.cdk.controller.ControllerModuleAdapter; import org.openscience.cdk.controller.IChemModelRelay; import org.openscience.cdk.interfaces.IChemObject; +import org.openscience.cdk.interfaces.IReactionSet; +import org.openscience.cdk.renderer.Renderer; +import org.openscience.cdk.renderer.RendererModel; import org.openscience.cdk.tools.LoggingTool; public class SwingPopupModule extends ControllerModuleAdapter { @@ -44,11 +47,11 @@ private static Hashtable<String, JChemPaintPopupMenu> popupMenus = new Hashtable<String, JChemPaintPopupMenu>(); - private RenderPanel renderer; + private RenderPanel rendererPanel; public SwingPopupModule(RenderPanel renderer,IChemModelRelay chemModelRelay) { super(chemModelRelay); - this.renderer=renderer; + this.rendererPanel=renderer; } @@ -58,7 +61,7 @@ public void mouseClickedDownRight(Point2d worldCoord) { - popupMenuForNearestChemObject(renderer.getRenderer().toScreenCoordinates(worldCoord.x, worldCoord.y)); + popupMenuForNearestChemObject(rendererPanel.getRenderer().toScreenCoordinates(worldCoord.x, worldCoord.y)); } /** @@ -93,27 +96,36 @@ return null; } - private void popupMenuForNearestChemObject(Point2d mouseCoords) - { - IChemObject objectInRange = renderer.getRenderer().getRenderer2DModel().getHighlightedAtom(); - if(objectInRange==null) - objectInRange = renderer.getRenderer().getRenderer2DModel().getHighlightedBond(); + private void popupMenuForNearestChemObject(Point2d mouseCoords) { + Renderer renderer = rendererPanel.getRenderer(); + RendererModel rendererModel = renderer.getRenderer2DModel(); + IChemObject objectInRange = rendererModel.getHighlightedAtom(); + + if (objectInRange == null) + objectInRange = rendererModel.getHighlightedBond(); + //look if we are in a reaction box - if(objectInRange==null && renderer.getChemModel().getReactionSet()!=null && renderer.getChemModel().getReactionSet().getReactionCount()>0){ - Rectangle reactionbounds = renderer.getRenderer().calculateScreenBounds(renderer.getChemModel().getReactionSet()); - if(reactionbounds.contains(mouseCoords.x, mouseCoords.y)) - objectInRange = renderer.getChemModel().getReactionSet().getReaction(0); + IReactionSet reactionSet = + rendererPanel.getChemModel().getReactionSet(); + + if (objectInRange == null && reactionSet != null + && reactionSet.getReactionCount() > 0) { + Rectangle reactionbounds = + renderer.calculateDiagramBounds(reactionSet); + + if (reactionbounds.contains(mouseCoords.x, mouseCoords.y)) + objectInRange = reactionSet.getReaction(0); } - if(objectInRange==null) + + if (objectInRange == null) objectInRange = chemModelRelay.getIChemModel(); + JChemPaintPopupMenu popupMenu = getPopupMenu(objectInRange.getClass()); - if (popupMenu != null) - { + if (popupMenu != null) { popupMenu.setSource(objectInRange); logger.debug("Set popup menu source to: ", objectInRange); - popupMenu.show(renderer, (int)mouseCoords.x, (int)mouseCoords.y); - } else - { + popupMenu.show(rendererPanel, (int)mouseCoords.x, (int)mouseCoords.y); + } else { logger.warn("Popup menu is null! Could not set source!"); } } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ZoomAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ZoomAction.java 2009-02-22 13:57:49 UTC (rev 14223) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ZoomAction.java 2009-02-22 17:03:50 UTC (rev 14224) @@ -30,7 +30,7 @@ import java.awt.event.ActionEvent; -import org.openscience.cdk.renderer.Renderer; +import org.openscience.cdk.renderer.RendererModel; /** * @cdk.module jchempaint @@ -42,16 +42,17 @@ public void actionPerformed(ActionEvent e) { - Renderer renderer = jcpPanel.getRenderPanel().getRenderer(); - double zoom = renderer.getZoom(); + RendererModel rendererModel = + jcpPanel.getRenderPanel().getRenderer().getRenderer2DModel(); + double zoom = rendererModel.getZoomFactor(); logger.debug("Zooming in/out in mode: ", type); if (type.equals("in") && zoom < 10) { - renderer.setZoom(zoom * 1.5); + rendererModel.setZoomFactor(zoom * 1.5); } else if (type.equals("out") && zoom > .1) { - renderer.setZoom(zoom / 1.5); + rendererModel.setZoomFactor(zoom / 1.5); } else if (type.equals("original")) { - renderer.setZoom(1); + rendererModel.setZoomFactor(1); } else { logger.error("Unkown zoom command: " + type); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2009-08-24 14:01:50
|
Revision: 14756 http://cdk.svn.sourceforge.net/cdk/?rev=14756&view=rev Author: shk3 Date: 2009-08-24 14:01:44 +0000 (Mon, 24 Aug 2009) Log Message: ----------- undo/redo clears selection Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/RedoAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/UndoAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/RedoAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/RedoAction.java 2009-08-24 11:17:47 UTC (rev 14755) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/RedoAction.java 2009-08-24 14:01:44 UTC (rev 14756) @@ -30,7 +30,9 @@ import java.awt.event.ActionEvent; +import org.openscience.cdk.renderer.selection.LogicalSelection; + /** * Performce a Redo - a repeat of the last undone action * @@ -51,6 +53,8 @@ if (jcpPanel.getRenderPanel().getUndoManager().canRedo()) { jcpPanel.getRenderPanel().getUndoManager().redo(); } + jcpPanel.getRenderPanel().getRenderer().getRenderer2DModel() + .setSelection(new LogicalSelection(LogicalSelection.Type.NONE)); jcpPanel.updateUndoRedoControls(); jcpPanel.updateStatusBar(); jcpPanel.get2DHub().updateView(); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/UndoAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/UndoAction.java 2009-08-24 11:17:47 UTC (rev 14755) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/UndoAction.java 2009-08-24 14:01:44 UTC (rev 14756) @@ -30,7 +30,11 @@ import java.awt.event.ActionEvent; +import org.openscience.cdk.renderer.selection.IChemObjectSelection; +import org.openscience.cdk.renderer.selection.LogicalSelection; +import org.openscience.cdk.renderer.selection.RectangleSelection; + /** * An action for making things undone :-) * Beneficial in many situations in your life. @@ -53,6 +57,8 @@ if (jcpPanel.getRenderPanel().getUndoManager().canUndo()) { jcpPanel.getRenderPanel().getUndoManager().undo(); } + jcpPanel.getRenderPanel().getRenderer().getRenderer2DModel() + .setSelection(new LogicalSelection(LogicalSelection.Type.NONE)); jcpPanel.updateUndoRedoControls(); jcpPanel.updateStatusBar(); jcpPanel.get2DHub().updateView(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2009-09-14 16:26:34
|
Revision: 14830 http://cdk.svn.sourceforge.net/cdk/?rev=14830&view=rev Author: shk3 Date: 2009-09-14 16:26:15 +0000 (Mon, 14 Sep 2009) Log Message: ----------- the implicit on/off works on all, as intended Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/AddHydrogenAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/AddHydrogenAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/AddHydrogenAction.java 2009-09-14 15:32:32 UTC (rev 14829) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/AddHydrogenAction.java 2009-09-14 16:26:15 UTC (rev 14830) @@ -48,10 +48,14 @@ if (type.equals("hydroon")) { jcpPanel.get2DHub().getRenderer().getRenderer2DModel() .setShowImplicitHydrogens(true); + jcpPanel.get2DHub().getRenderer().getRenderer2DModel() + .setKekuleStructure(true); } else if ( type.equals("hydrooff")) { jcpPanel.get2DHub().getRenderer().getRenderer2DModel() .setShowImplicitHydrogens(false); + jcpPanel.get2DHub().getRenderer().getRenderer2DModel() + .setKekuleStructure(false); } jcpPanel.get2DHub().updateView(); } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java 2009-09-14 15:32:32 UTC (rev 14829) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java 2009-09-14 16:26:15 UTC (rev 14830) @@ -464,18 +464,18 @@ try { cmlWriterClass = this.getClass().getClassLoader().loadClass( "org.openscience.cdk.io.CMLWriter"); + if (cmlWriterClass != null) { + IChemObjectWriter cow = (IChemObjectWriter)cmlWriterClass.newInstance(); + Constructor constructor = cow.getClass().getConstructor(new Class[]{Writer.class}); + cow = (IChemObjectWriter)constructor.newInstance(new Object[]{sw}); + cow.write(tocopy); + cow.close(); + } + cml=sw.toString(); } catch (Exception exception) { logger.error("Could not load CMLWriter: ", exception.getMessage()); logger.debug(exception); } - if (cmlWriterClass != null) { - IChemObjectWriter cow = (IChemObjectWriter)cmlWriterClass.newInstance(); - Constructor constructor = cow.getClass().getConstructor(new Class[]{Writer.class}); - cow = (IChemObjectWriter)constructor.newInstance(new Object[]{sw}); - cow.write(tocopy); - cow.close(); - } - cml=sw.toString(); } public synchronized DataFlavor [] getTransferDataFlavors () { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2009-09-25 12:39:28
|
Revision: 14880 http://cdk.svn.sourceforge.net/cdk/?rev=14880&view=rev Author: shk3 Date: 2009-09-25 12:39:10 +0000 (Fri, 25 Sep 2009) Log Message: ----------- avoids classcastexceptions when All File Types is chosen Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2009-09-25 12:30:26 UTC (rev 14879) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2009-09-25 12:39:10 UTC (rev 14880) @@ -39,7 +39,9 @@ import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; +import org.openscience.jchempaint.GT; import org.openscience.jchempaint.JChemPaintPanel; +import org.openscience.jchempaint.io.IJCPFileFilter; import org.openscience.jchempaint.io.JCPExportFileFilter; import org.openscience.jchempaint.io.JCPFileView; @@ -86,64 +88,69 @@ int returnVal = chooser.showSaveDialog(jcpPanel); currentFilter = chooser.getFileFilter(); if (returnVal == JFileChooser.APPROVE_OPTION) { - type = ((JCPExportFileFilter) currentFilter).getType(); - File outFile = new File( - chooser.getSelectedFile().getAbsolutePath() + "." + type); - if (outFile.exists()) { - String message = "File already exists. Do you want to overwrite it?"; - String title = "File already exists"; - int value = JOptionPane.showConfirmDialog(jcpPanel, message, - title, JOptionPane.YES_NO_OPTION); - if (value == JOptionPane.NO_OPTION) { - return; + if(!(currentFilter instanceof IJCPFileFilter)){ + JOptionPane.showMessageDialog(jcpPanel, GT._("Please chose a file type!"), GT._("No file type chosen"), JOptionPane.INFORMATION_MESSAGE); + return; + }else{ + type = ((JCPExportFileFilter) currentFilter).getType(); + File outFile = new File( + chooser.getSelectedFile().getAbsolutePath() + "." + type); + if (outFile.exists()) { + String message = "File already exists. Do you want to overwrite it?"; + String title = "File already exists"; + int value = JOptionPane.showConfirmDialog(jcpPanel, message, + title, JOptionPane.YES_NO_OPTION); + if (value == JOptionPane.NO_OPTION) { + return; + } } - } - - if (type.equals(JCPExportFileFilter.svg)) { - try { - String svg = this.jcpPanel.getSVGString(); - FileWriter writer = new FileWriter(outFile); - writer.append(svg); - writer.flush(); - JOptionPane.showMessageDialog(jcpPanel, - "Exported image to " + outFile); - return; - } catch (IOException e) { - String error = "Problem exporting to svg"; - JOptionPane.showMessageDialog(jcpPanel, error); - return; - } - } else { - RenderedImage image = (RenderedImage) this.jcpPanel - .takeSnapshot(); - try { - String imageIOType; - if (type.equals(JCPExportFileFilter.bmp)) { - imageIOType = "BMP"; - } else if (type.equals(JCPExportFileFilter.jpg)) { - imageIOType = "JPEG"; - } else { - imageIOType = "PNG"; - } - - boolean succeeded = ImageIO.write(image, imageIOType, - outFile); - if (succeeded) { + + if (type.equals(JCPExportFileFilter.svg)) { + try { + String svg = this.jcpPanel.getSVGString(); + FileWriter writer = new FileWriter(outFile); + writer.append(svg); + writer.flush(); JOptionPane.showMessageDialog(jcpPanel, "Exported image to " + outFile); return; - } else { - // no writer of type imageIOType found - ImageIO.write(image, "PNG", outFile); - JOptionPane.showMessageDialog(jcpPanel, - "Exported image to " + outFile+ - " as PNG, since "+type+" could not be written"); + } catch (IOException e) { + String error = "Problem exporting to svg"; + JOptionPane.showMessageDialog(jcpPanel, error); return; } - } catch (IOException ioe) { - ioe.printStackTrace(); - JOptionPane.showMessageDialog(jcpPanel, - "Problem exporting image"); + } else { + RenderedImage image = (RenderedImage) this.jcpPanel + .takeSnapshot(); + try { + String imageIOType; + if (type.equals(JCPExportFileFilter.bmp)) { + imageIOType = "BMP"; + } else if (type.equals(JCPExportFileFilter.jpg)) { + imageIOType = "JPEG"; + } else { + imageIOType = "PNG"; + } + + boolean succeeded = ImageIO.write(image, imageIOType, + outFile); + if (succeeded) { + JOptionPane.showMessageDialog(jcpPanel, + "Exported image to " + outFile); + return; + } else { + // no writer of type imageIOType found + ImageIO.write(image, "PNG", outFile); + JOptionPane.showMessageDialog(jcpPanel, + "Exported image to " + outFile+ + " as PNG, since "+type+" could not be written"); + return; + } + } catch (IOException ioe) { + ioe.printStackTrace(); + JOptionPane.showMessageDialog(jcpPanel, + "Problem exporting image"); + } } } } else if (returnVal == JFileChooser.CANCEL_OPTION) { Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2009-09-25 12:30:26 UTC (rev 14879) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2009-09-25 12:39:10 UTC (rev 14880) @@ -33,15 +33,12 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; -import java.io.Writer; -import java.lang.reflect.Constructor; import java.util.Iterator; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; -import org.openscience.cdk.Reaction; import org.openscience.cdk.exception.CDKException; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IChemModel; @@ -138,66 +135,71 @@ ready=0; if (returnVal == JFileChooser.APPROVE_OPTION) { - type = ((IJCPFileFilter) currentFilter).getType(); - File outFile = chooser.getSelectedFile(); - if(outFile.exists()){ - ready=JOptionPane.showConfirmDialog((Component)null,"File "+outFile.getName()+" already exists. Do you want to overwrite it?","File already exists",JOptionPane.YES_NO_OPTION); - }else{ - try{ - if(new File(outFile.getCanonicalFile()+"."+type).exists()){ - ready=JOptionPane.showConfirmDialog((Component)null,"File "+outFile.getName()+" already exists. Do you want to overwrite it?","File already exists",JOptionPane.YES_NO_OPTION); - } - }catch(Throwable ex){ - jcpPanel.announceError(ex); - } - ready=0; + if(!(currentFilter instanceof IJCPFileFilter)){ + JOptionPane.showMessageDialog(jcpPanel, GT._("Please chose a file type!"), GT._("No file type chosen"), JOptionPane.INFORMATION_MESSAGE); + return; + }else{ + type = ((IJCPFileFilter) currentFilter).getType(); + File outFile = chooser.getSelectedFile(); + if(outFile.exists()){ + ready=JOptionPane.showConfirmDialog((Component)null,"File "+outFile.getName()+" already exists. Do you want to overwrite it?","File already exists",JOptionPane.YES_NO_OPTION); + }else{ + try{ + if(new File(outFile.getCanonicalFile()+"."+type).exists()){ + ready=JOptionPane.showConfirmDialog((Component)null,"File "+outFile.getName()+" already exists. Do you want to overwrite it?","File already exists",JOptionPane.YES_NO_OPTION); + } + }catch(Throwable ex){ + jcpPanel.announceError(ex); + } + ready=0; + } + if(ready==0){ + + if (object == null) + { + // called from main menu, only possibility + try + { + if (type.equals(JCPSaveFileFilter.mol)) + { + outFile = saveAsMol(model, outFile); + } else if (type.equals(JCPSaveFileFilter.cml)) + { + outFile = saveAsCML2(model, outFile); + } else if (type.equals(JCPSaveFileFilter.smiles)) + { + outFile = saveAsSMILES(model, outFile); + } else if (type.equals(JCPSaveFileFilter.cdk)) + { + outFile = saveAsCDKSourceCode(model, outFile); + } else if (type.equals(JCPSaveFileFilter.rxn)) + { + outFile = saveAsRXN(model, outFile); + } else + { + String error = "Cannot save file in this format: " + type; + logger.error(error); + JOptionPane.showMessageDialog(jcpPanel, error); + return; + } + jcpPanel.setModified(false); + } catch (Exception exc) + { + String error = GT._("Error while writing file")+": " + exc.getMessage(); + logger.error(error); + logger.debug(exc); + JOptionPane.showMessageDialog(jcpPanel, error); + } + } + jcpPanel.setCurrentWorkDirectory(chooser.getCurrentDirectory()); + jcpPanel.setCurrentSaveFileFilter(chooser.getFileFilter()); + jcpPanel.setIsAlreadyAFile(outFile); + if(outFile!=null){ + jcpPanel.getChemModel().setID(outFile.getName()); + jcpPanel.setTitle(outFile.getName()); + } + } } - if(ready==0){ - - if (object == null) - { - // called from main menu, only possibility - try - { - if (type.equals(JCPSaveFileFilter.mol)) - { - outFile = saveAsMol(model, outFile); - } else if (type.equals(JCPSaveFileFilter.cml)) - { - outFile = saveAsCML2(model, outFile); - } else if (type.equals(JCPSaveFileFilter.smiles)) - { - outFile = saveAsSMILES(model, outFile); - } else if (type.equals(JCPSaveFileFilter.cdk)) - { - outFile = saveAsCDKSourceCode(model, outFile); - } else if (type.equals(JCPSaveFileFilter.rxn)) - { - outFile = saveAsRXN(model, outFile); - } else - { - String error = "Cannot save file in this format: " + type; - logger.error(error); - JOptionPane.showMessageDialog(jcpPanel, error); - return; - } - jcpPanel.setModified(false); - } catch (Exception exc) - { - String error = "Error while writing file: " + exc.getMessage(); - logger.error(error); - logger.debug(exc); - JOptionPane.showMessageDialog(jcpPanel, error); - } - } - jcpPanel.setCurrentWorkDirectory(chooser.getCurrentDirectory()); - jcpPanel.setCurrentSaveFileFilter(chooser.getFileFilter()); - jcpPanel.setIsAlreadyAFile(outFile); - if(outFile!=null){ - jcpPanel.getChemModel().setID(outFile.getName()); - jcpPanel.setTitle(outFile.getName()); - } - } } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2009-09-29 08:59:01
|
Revision: 14900 http://cdk.svn.sourceforge.net/cdk/?rev=14900&view=rev Author: shk3 Date: 2009-09-29 08:58:52 +0000 (Tue, 29 Sep 2009) Log Message: ----------- fixes feature/request bug #1579497 Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/OpenAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/OpenAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/OpenAction.java 2009-09-29 08:45:49 UTC (rev 14899) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/OpenAction.java 2009-09-29 08:58:52 UTC (rev 14900) @@ -54,8 +54,6 @@ private static final long serialVersionUID = 1030940425527065876L; - private FileFilter currentFilter = null; - /** * Opens an empty JChemPaint frame. * @@ -68,20 +66,18 @@ chooser.setCurrentDirectory(jcpPanel.getCurrentWorkDirectory()); JCPFileFilter.addChoosableFileFilters(chooser); if (jcpPanel.getCurrentOpenFileFilter() != null) { - chooser.setFileFilter(jcpPanel.getCurrentOpenFileFilter()); + for(int i=0;i<chooser.getChoosableFileFilters().length;i++){ + if(chooser.getChoosableFileFilters()[i].getDescription().equals(jcpPanel.getCurrentOpenFileFilter().getDescription())) + chooser.setFileFilter(chooser.getChoosableFileFilters()[i]); + } } if (jcpPanel.getLastOpenedFile() != null) { chooser.setSelectedFile(jcpPanel.getLastOpenedFile()); } - if (currentFilter != null) { - chooser.setFileFilter(currentFilter); - } chooser.setFileView(new JCPFileView()); int returnVal = chooser.showOpenDialog(jcpPanel); - currentFilter = chooser.getFileFilter(); - if (returnVal == JFileChooser.APPROVE_OPTION) { jcpPanel.setCurrentWorkDirectory(chooser.getCurrentDirectory()); jcpPanel.setCurrentOpenFileFilter(chooser.getFileFilter()); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2009-09-29 08:45:49 UTC (rev 14899) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2009-09-29 08:58:52 UTC (rev 14900) @@ -69,7 +69,6 @@ protected IChemObjectWriter cow; protected static String type = null; - private FileFilter currentFilter = null; /** @@ -121,7 +120,10 @@ JCPSaveFileFilter.addChoosableFileFilters(chooser); if (jcpPanel.getCurrentSaveFileFilter() != null) { - chooser.setFileFilter(jcpPanel.getCurrentSaveFileFilter()); + for(int i=0;i<chooser.getChoosableFileFilters().length;i++){ + if(chooser.getChoosableFileFilters()[i].getDescription().equals(jcpPanel.getCurrentSaveFileFilter().getDescription())) + chooser.setFileFilter(chooser.getChoosableFileFilters()[i]); + } } chooser.setFileView(new JCPFileView()); if(jcpPanel.isAlreadyAFile()!=null) @@ -130,7 +132,7 @@ int returnVal = chooser.showSaveDialog(jcpPanel); IChemObject object = getSource(event); - currentFilter = chooser.getFileFilter(); + FileFilter currentFilter = chooser.getFileFilter(); if(returnVal==JFileChooser.CANCEL_OPTION) ready=0; if (returnVal == JFileChooser.APPROVE_OPTION) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ahe...@us...> - 2009-12-22 20:07:59
|
Revision: 15227 http://cdk.svn.sourceforge.net/cdk/?rev=15227&view=rev Author: aherraez Date: 2009-12-22 20:07:48 +0000 (Tue, 22 Dec 2009) Log Message: ----------- better internationalization of some terms Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2009-12-22 16:58:25 UTC (rev 15226) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2009-12-22 20:07:48 UTC (rev 15227) @@ -122,7 +122,7 @@ writer.append(svg); writer.flush(); JOptionPane.showMessageDialog(jcpPanel, - GT._("Exported image to") + " " + outFile); + GT._("Exported image to {0}", outFile); return; } catch (IOException e) { String error = GT._("Problem exporting to svg"); @@ -146,14 +146,13 @@ outFile); if (succeeded) { JOptionPane.showMessageDialog(jcpPanel, - GT._("Exported image to")+ " " + outFile); + GT._("Exported image to {0}", outFile); return; } else { // no writer of type imageIOType found ImageIO.write(image, "PNG", outFile); JOptionPane.showMessageDialog(jcpPanel, - GT._("Exported image to")+ " " + outFile+ - " " + GT._("as PNG, since")+ " "+type+" "+GT._("could not be written")); + GT._("Exported image to {0} as PNG, since {1} could not be written", outFile,type)); return; } } catch (IOException ioe) { Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2009-12-22 16:58:25 UTC (rev 15226) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2009-12-22 20:07:48 UTC (rev 15227) @@ -156,11 +156,11 @@ type = ((IJCPFileFilter) currentFilter).getType(); File outFile = chooser.getSelectedFile(); if(outFile.exists()){ - ready=JOptionPane.showConfirmDialog((Component)null,GT._("File")+" "+outFile.getName()+" "+GT._("already exists. Do you want to overwrite it?"),GT._("File already exists"),JOptionPane.YES_NO_OPTION); + ready=JOptionPane.showConfirmDialog((Component)null,GT._("File {0} already exists. Do you want to overwrite it?", outFile.getName()),GT._("File already exists"),JOptionPane.YES_NO_OPTION); }else{ try{ if(new File(outFile.getCanonicalFile()+"."+type).exists()){ - ready=JOptionPane.showConfirmDialog((Component)null,GT._("File")+" "+outFile.getName()+" "+GT._("already exists. Do you want to overwrite it?"),GT._("File already exists"),JOptionPane.YES_NO_OPTION); + ready=JOptionPane.showConfirmDialog((Component)null,GT._("File {0} already exists. Do you want to overwrite it?", outFile.getName()),GT._("File already exists"),JOptionPane.YES_NO_OPTION); } }catch(Throwable ex){ jcpPanel.announceError(ex); @@ -194,7 +194,7 @@ outFile = saveAsRXN(model, outFile); } else { - String error = GT._("Cannot save file in this format:") + " " + type; + String error = GT._("Cannot save file in {0} format", type); logger.error(error); JOptionPane.showMessageDialog(jcpPanel, error); return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ahe...@us...> - 2009-12-23 12:06:45
|
Revision: 15228 http://cdk.svn.sourceforge.net/cdk/?rev=15228&view=rev Author: aherraez Date: 2009-12-23 12:06:37 +0000 (Wed, 23 Dec 2009) Log Message: ----------- reverting my previous changes, as they break compilation; need to check them carefully later Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2009-12-22 20:07:48 UTC (rev 15227) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2009-12-23 12:06:37 UTC (rev 15228) @@ -122,7 +122,7 @@ writer.append(svg); writer.flush(); JOptionPane.showMessageDialog(jcpPanel, - GT._("Exported image to {0}", outFile); + GT._("Exported image to") + " " + outFile); return; } catch (IOException e) { String error = GT._("Problem exporting to svg"); @@ -146,13 +146,14 @@ outFile); if (succeeded) { JOptionPane.showMessageDialog(jcpPanel, - GT._("Exported image to {0}", outFile); + GT._("Exported image to")+ " " + outFile); return; } else { // no writer of type imageIOType found ImageIO.write(image, "PNG", outFile); JOptionPane.showMessageDialog(jcpPanel, - GT._("Exported image to {0} as PNG, since {1} could not be written", outFile,type)); + GT._("Exported image to")+ " " + outFile+ + " " + GT._("as PNG, since")+ " "+type+" "+GT._("could not be written")); return; } } catch (IOException ioe) { Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2009-12-22 20:07:48 UTC (rev 15227) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2009-12-23 12:06:37 UTC (rev 15228) @@ -156,11 +156,11 @@ type = ((IJCPFileFilter) currentFilter).getType(); File outFile = chooser.getSelectedFile(); if(outFile.exists()){ - ready=JOptionPane.showConfirmDialog((Component)null,GT._("File {0} already exists. Do you want to overwrite it?", outFile.getName()),GT._("File already exists"),JOptionPane.YES_NO_OPTION); + ready=JOptionPane.showConfirmDialog((Component)null,GT._("File")+" "+outFile.getName()+" "+GT._("already exists. Do you want to overwrite it?"),GT._("File already exists"),JOptionPane.YES_NO_OPTION); }else{ try{ if(new File(outFile.getCanonicalFile()+"."+type).exists()){ - ready=JOptionPane.showConfirmDialog((Component)null,GT._("File {0} already exists. Do you want to overwrite it?", outFile.getName()),GT._("File already exists"),JOptionPane.YES_NO_OPTION); + ready=JOptionPane.showConfirmDialog((Component)null,GT._("File")+" "+outFile.getName()+" "+GT._("already exists. Do you want to overwrite it?"),GT._("File already exists"),JOptionPane.YES_NO_OPTION); } }catch(Throwable ex){ jcpPanel.announceError(ex); @@ -194,7 +194,7 @@ outFile = saveAsRXN(model, outFile); } else { - String error = GT._("Cannot save file in {0} format", type); + String error = GT._("Cannot save file in this format:") + " " + type; logger.error(error); JOptionPane.showMessageDialog(jcpPanel, error); return; @@ -420,4 +420,3 @@ return wasCancelled; } } - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2010-01-18 21:15:39
|
Revision: 15308 http://cdk.svn.sourceforge.net/cdk/?rev=15308&view=rev Author: annulen Date: 2010-01-18 21:15:31 +0000 (Mon, 18 Jan 2010) Log Message: ----------- i18n patch from Angel Herr?\195?\161ez Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2010-01-16 16:55:35 UTC (rev 15307) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2010-01-18 21:15:31 UTC (rev 15308) @@ -122,7 +122,8 @@ writer.append(svg); writer.flush(); JOptionPane.showMessageDialog(jcpPanel, - GT._("Exported image to") + " " + outFile); + //GT._("Exported image to") + " " + outFile); + GT._("Exported image to {0}", outFile.getName())); return; } catch (IOException e) { String error = GT._("Problem exporting to SVG"); @@ -146,7 +147,7 @@ outFile); if (succeeded) { JOptionPane.showMessageDialog(jcpPanel, - GT._("Exported image to")+ " " + outFile); + GT._("Exported image to {0}", outFile.getName())); return; } else { // no writer of type imageIOType found @@ -154,6 +155,8 @@ JOptionPane.showMessageDialog(jcpPanel, GT._("Exported image to")+ " " + outFile+ " " + GT._("as PNG, since")+ " "+type+" "+GT._("could not be written")); +// GT._("Exported image to {0} as PNG, since {1} could not be written", +// outFile.getName(), type)); return; } } catch (IOException ioe) { Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2010-01-16 16:55:35 UTC (rev 15307) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2010-01-18 21:15:31 UTC (rev 15308) @@ -156,11 +156,17 @@ type = ((IJCPFileFilter) currentFilter).getType(); File outFile = chooser.getSelectedFile(); if(outFile.exists()){ - ready=JOptionPane.showConfirmDialog((Component)null,GT._("File")+" "+outFile.getName()+" "+GT._("already exists. Do you want to overwrite it?"),GT._("File already exists"),JOptionPane.YES_NO_OPTION); + //ready=JOptionPane.showConfirmDialog((Component)null,GT._("File")+" "+outFile.getName()+" "+GT._("already exists. Do you want to overwrite it?"),GT._("File already exists"),JOptionPane.YES_NO_OPTION); + ready=JOptionPane.showConfirmDialog((Component)null, + GT._("File {0} already exists. Do you want to overwrite it?", outFile.getName()), + GT._("File already exists"),JOptionPane.YES_NO_OPTION); }else{ try{ if(new File(outFile.getCanonicalFile()+"."+type).exists()){ - ready=JOptionPane.showConfirmDialog((Component)null,GT._("File")+" "+outFile.getName()+" "+GT._("already exists. Do you want to overwrite it?"),GT._("File already exists"),JOptionPane.YES_NO_OPTION); +// ready=JOptionPane.showConfirmDialog((Component)null,GT._("File")+" "+outFile.getName()+" "+GT._("already exists. Do you want to overwrite it?"),GT._("File already exists"),JOptionPane.YES_NO_OPTION); + ready=JOptionPane.showConfirmDialog((Component)null, + GT._("File {0} already exists. Do you want to overwrite it?", outFile.getName()), + GT._("File already exists"),JOptionPane.YES_NO_OPTION); } }catch(Throwable ex){ jcpPanel.announceError(ex); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2010-01-19 10:14:10
|
Revision: 15315 http://cdk.svn.sourceforge.net/cdk/?rev=15315&view=rev Author: annulen Date: 2010-01-19 10:14:04 +0000 (Tue, 19 Jan 2010) Log Message: ----------- i18n Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2010-01-19 09:36:30 UTC (rev 15314) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2010-01-19 10:14:04 UTC (rev 15315) @@ -122,7 +122,6 @@ writer.append(svg); writer.flush(); JOptionPane.showMessageDialog(jcpPanel, - //GT._("Exported image to") + " " + outFile); GT._("Exported image to {0}", outFile.getName())); return; } catch (IOException e) { @@ -153,10 +152,8 @@ // no writer of type imageIOType found ImageIO.write(image, "PNG", outFile); JOptionPane.showMessageDialog(jcpPanel, - GT._("Exported image to")+ " " + outFile+ - " " + GT._("as PNG, since")+ " "+type+" "+GT._("could not be written")); -// GT._("Exported image to {0} as PNG, since {1} could not be written", -// outFile.getName(), type)); + GT._("Exported image to {0} as PNG, since {1} could not be written", + new String[]{outFile.getName(), type})); return; } } catch (IOException ioe) { Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2010-01-19 09:36:30 UTC (rev 15314) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2010-01-19 10:14:04 UTC (rev 15315) @@ -150,20 +150,18 @@ if (returnVal == JFileChooser.APPROVE_OPTION) { if(!(currentFilter instanceof IJCPFileFilter)){ - JOptionPane.showMessageDialog(jcpPanel, GT._("Please chose a file type!"), GT._("No file type chosen"), JOptionPane.INFORMATION_MESSAGE); + JOptionPane.showMessageDialog(jcpPanel, GT._("Please choose a file type!"), GT._("No file type chosen"), JOptionPane.INFORMATION_MESSAGE); return; }else{ type = ((IJCPFileFilter) currentFilter).getType(); File outFile = chooser.getSelectedFile(); if(outFile.exists()){ - //ready=JOptionPane.showConfirmDialog((Component)null,GT._("File")+" "+outFile.getName()+" "+GT._("already exists. Do you want to overwrite it?"),GT._("File already exists"),JOptionPane.YES_NO_OPTION); ready=JOptionPane.showConfirmDialog((Component)null, GT._("File {0} already exists. Do you want to overwrite it?", outFile.getName()), GT._("File already exists"),JOptionPane.YES_NO_OPTION); }else{ try{ if(new File(outFile.getCanonicalFile()+"."+type).exists()){ -// ready=JOptionPane.showConfirmDialog((Component)null,GT._("File")+" "+outFile.getName()+" "+GT._("already exists. Do you want to overwrite it?"),GT._("File already exists"),JOptionPane.YES_NO_OPTION); ready=JOptionPane.showConfirmDialog((Component)null, GT._("File {0} already exists. Do you want to overwrite it?", outFile.getName()), GT._("File already exists"),JOptionPane.YES_NO_OPTION); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |