From: <sh...@us...> - 2008-11-27 12:11:34
|
Revision: 13338 http://cdk.svn.sourceforge.net/cdk/?rev=13338&view=rev Author: shk3 Date: 2008-11-27 12:11:30 +0000 (Thu, 27 Nov 2008) Log Message: ----------- added showtoolbar/statusbar/menu Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintMenuBar.java jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JCPGUI_stable.properties jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties Added Paths: ----------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/MenuBarAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/StatusBarAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/ToolBarAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintMenuBar.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintMenuBar.java 2008-11-27 11:49:58 UTC (rev 13337) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintMenuBar.java 2008-11-27 12:11:30 UTC (rev 13338) @@ -174,15 +174,17 @@ menu.add(me); } else if (itemKeys[i].endsWith("+")) { - JMenuItem mi = createMenuItem(jcpPanel, + JMenuItem mi; + if(itemKeys[i].endsWith("++")) + mi = createMenuItem(jcpPanel, + itemKeys[i].substring(0, itemKeys[i].length() - 2), + true, true + ); + else + mi = createMenuItem(jcpPanel, itemKeys[i].substring(0, itemKeys[i].length() - 1), true, false ); - if(itemKeys[i].substring(0, itemKeys[i].length() - 1).equals("addImplHydrogen")) - ((JCheckBoxMenuItem)mi).setSelected(true); - if(itemKeys[i].substring(0, itemKeys[i].length() - 1).equals("insertstructure"))// TODO&& !jcpPanel.guiString.equals("applet")) - ((JCheckBoxMenuItem)mi).setSelected(true); - // default off, because we cannot turn it on anywhere (yet) menu.add(mi); } else { Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-11-27 11:49:58 UTC (rev 13337) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-11-27 12:11:30 UTC (rev 13338) @@ -67,8 +67,34 @@ private boolean showInsertTextField = true; private InsertTextPanel insertTextPanel = null; private JPanel topContainer = null; + private boolean showToolBar=true; + private boolean showStatusBar=true; + private boolean showMenuBar=true; + private JMenuBar menu; + private String guistring; + private JToolBar toolbar; + private int lines=1; /** + * Builds a JCPPanel with a certain model and a certain gui + * + * @param chemModel The model + * @param gui The gui string + */ + public JChemPaintPanel(IChemModel chemModel, String gui){ + this.guistring=gui; + this.setLayout(new BorderLayout()); + topContainer = new JPanel(new BorderLayout()); + topContainer.setLayout(new BorderLayout()); + this.add(topContainer,BorderLayout.NORTH); + renderPanel = new RenderPanel(chemModel); + this.add(renderPanel,BorderLayout.CENTER); + customizeView(); + instances.add(this); + chemModel.addListener(this); + } + + /** * Helps in keeping the current action button highlighted * * @return The last action button used @@ -164,6 +190,112 @@ } /** + * Tells if a menu is shown + * + *@return The showMenu value + */ + public boolean getShowMenuBar() { + return showMenuBar; + } + + + /** + * Sets if a menu is shown + * + *@param showMenuBar The new showMenuBar value + */ + public void setShowMenuBar(boolean showMenuBar) { + this.showMenuBar = showMenuBar; + customizeView(); + } + + + public void customizeView() { + if (showMenuBar) { + if (menu == null) { + menu = new JChemPaintMenuBar(this, this.guistring); + } + topContainer.add(menu, BorderLayout.NORTH); + } else { + topContainer.remove(menu); + } + if (showStatusBar) { + if (statusBar == null) { + statusBar = new JCPStatusBar(); + } + add(statusBar, BorderLayout.SOUTH); + } else { + remove(statusBar); + } + if (showToolBar) { + if (toolbar == null) { + toolbar = JCPToolBar.getToolbar(this, lines); + } + topContainer.add(toolbar, BorderLayout.CENTER); + } else { + topContainer.remove(toolbar); + } + if (showInsertTextField) { + if (insertTextPanel == null) + insertTextPanel = new InsertTextPanel(this,null); + topContainer.add(insertTextPanel, BorderLayout.SOUTH); + } else { + topContainer.remove(insertTextPanel); + } + revalidate(); + } + + /** + * Tells if a status bar is shown + * + *@return The showStatusBar value + */ + public boolean getShowStatusBar() { + return showStatusBar; + } + + /** + * Sets the value of showToolbar. + * + *@param showToolBar The value to assign showToolbar. + */ + public void setShowToolBar(boolean showToolBar) + { + setShowToolBar(showToolBar, 1); + } + + /** + * Sets the value of showToolbar. + * + *@param showToolBar The value to assign showToolbar. + */ + public void setShowToolBar(boolean showToolBar, int lines) { + this.showToolBar = showToolBar; + this.lines=lines; + customizeView(); + } + + /** + * Returns the value of showToolbar. + * + *@return The showToolbar value + */ + public boolean getShowToolBar() + { + return showToolBar; + } + + /** + * Sets if statusbar should be shown + * + *@param showStatusBar The value to assign showStatusBar. + */ + public void setShowStatusBar(boolean showStatusBar) { + this.showStatusBar = showStatusBar; + customizeView(); + } + + /** * Sets the file currently used for saving this Panel. * *@param value The new isAlreadyAFile value @@ -182,30 +314,6 @@ public File isAlreadyAFile() { return isAlreadyAFile; } - - /** - * Builds a JCPPanel with a certain model and a certain gui - * - * @param chemModel The model - * @param gui The gui string - */ - public JChemPaintPanel(IChemModel chemModel, String gui){ - this.setLayout(new BorderLayout()); - JMenuBar menu = new JChemPaintMenuBar(this, gui); - topContainer = new JPanel(new BorderLayout()); - topContainer.setLayout(new BorderLayout()); - this.add(topContainer,BorderLayout.NORTH); - topContainer.add(menu,BorderLayout.NORTH); - setShowInsertTextField(true); - renderPanel = new RenderPanel(chemModel); - this.add(renderPanel,BorderLayout.CENTER); - JToolBar toolbar = JCPToolBar.getToolbar(this, 1); - topContainer.add(toolbar,BorderLayout.CENTER); - statusBar=new JCPStatusBar(); - this.add(statusBar,BorderLayout.SOUTH); - instances.add(this); - chemModel.addListener(this); - } /** * Set to indicate whether the insert text field should be used. @@ -214,13 +322,7 @@ */ public void setShowInsertTextField(boolean showInsertTextField) { this.showInsertTextField = showInsertTextField; - if (showInsertTextField) { - if (insertTextPanel == null) insertTextPanel = new InsertTextPanel(this,null); - topContainer.add(insertTextPanel, BorderLayout.SOUTH); - } else { - topContainer.remove(insertTextPanel); - } - this.revalidate(); + customizeView(); } /** Added: jchempaint/trunk/src/main/org/openscience/jchempaint/action/MenuBarAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/MenuBarAction.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/MenuBarAction.java 2008-11-27 12:11:30 UTC (rev 13338) @@ -0,0 +1,52 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 1997-2008 Christoph Steinbeck, Stefan Kuhn + * + * 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; + +/** + * Opens a new empty JChemPaintFrame. + * + */ +public class MenuBarAction extends JCPAction { + + + private static final long serialVersionUID = 8427001652906942684L; + + /** + * Opens an empty JChemPaint frame. + * + *@param e Description of the Parameter + */ + public void actionPerformed(ActionEvent e) + { + jcpPanel.setShowMenuBar(!jcpPanel.getShowMenuBar()); + } +} + Property changes on: jchempaint/trunk/src/main/org/openscience/jchempaint/action/MenuBarAction.java ___________________________________________________________________ Added: svn:executable + * Added: jchempaint/trunk/src/main/org/openscience/jchempaint/action/StatusBarAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/StatusBarAction.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/StatusBarAction.java 2008-11-27 12:11:30 UTC (rev 13338) @@ -0,0 +1,51 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 1997-2008 Christoph Steinbeck, Stefan Kuhn + * + * 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; + +/** + * Opens a new empty JChemPaintFrame. + * + */ +public class StatusBarAction extends JCPAction { + + private static final long serialVersionUID = -4572129654033268037L; + + /** + * Opens an empty JChemPaint frame. + * + *@param e Description of the Parameter + */ + public void actionPerformed(ActionEvent e) + { + jcpPanel.setShowStatusBar(!jcpPanel.getShowStatusBar()); + } +} + Property changes on: jchempaint/trunk/src/main/org/openscience/jchempaint/action/StatusBarAction.java ___________________________________________________________________ Added: svn:executable + * Added: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ToolBarAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ToolBarAction.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ToolBarAction.java 2008-11-27 12:11:30 UTC (rev 13338) @@ -0,0 +1,52 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 1997-2008 Christoph Steinbeck, Stefan Kuhn + * + * 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; + +/** + * Opens a new empty JChemPaintFrame. + * + */ +public class ToolBarAction extends JCPAction { + + + private static final long serialVersionUID = -7685519078261241187L; + + /** + * Opens an empty JChemPaint frame. + * + *@param e Description of the Parameter + */ + public void actionPerformed(ActionEvent e) + { + jcpPanel.setShowToolBar(!jcpPanel.getShowToolBar()); + } +} + Property changes on: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ToolBarAction.java ___________________________________________________________________ Added: svn:executable + * Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JCPGUI_stable.properties =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JCPGUI_stable.properties 2008-11-27 11:49:58 UTC (rev 13337) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JCPGUI_stable.properties 2008-11-27 12:11:30 UTC (rev 13338) @@ -55,13 +55,13 @@ edit=undo redo - selectAll copy paste cutSelected - @hydrogen \ adjustBondOrders resetBondOrders - @flip cleanup - \ modelProps - @preferences -view=toolbar statusbar menubar insertstructure+ - zoomin zoomout zoomoriginal - renderOptions +view=toolbar++ statusbar++ menubar++ insertstructure++ - zoomin zoomout zoomoriginal - renderOptions insert=insertSMILES report=@validate @atomType - createSMILES createInChI dict=showDicts help=info help tutorial - about license -hydrogen=addImplHydrogen+ makeHydrogenExplicit makeHydrogenImplicit +hydrogen=addImplHydrogen++ makeHydrogenExplicit makeHydrogenImplicit preferences=editPreferences reloadPreferences savePreferences validate=runValidate clearValidate atomType=atValency atMm2 atMmff94 Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-27 11:49:58 UTC (rev 13337) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-27 12:11:30 UTC (rev 13338) @@ -157,9 +157,9 @@ # View menu -toolbarAction=org.openscience.cdk.applications.jchempaint.action.ToolBarAction -statusbarAction=org.openscience.cdk.applications.jchempaint.action.StatusBarAction -menubarAction=org.openscience.cdk.applications.jchempaint.action.MenuBarAction +toolbarAction=org.openscience.jchempaint.action.ToolBarAction +statusbarAction=org.openscience.jchempaint.action.StatusBarAction +menubarAction=org.openscience.jchempaint.action.MenuBarAction insertstructureAction=org.openscience.jchempaint.action.InsertStructureAction zoominAction=org.openscience.cdk.applications.jchempaint.action.ZoomAction@in zoomoutAction=org.openscience.cdk.applications.jchempaint.action.ZoomAction@out This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-11-27 12:55:38
|
Revision: 13336 http://cdk.svn.sourceforge.net/cdk/?rev=13336&view=rev Author: shk3 Date: 2008-11-27 11:35:39 +0000 (Thu, 27 Nov 2008) Log Message: ----------- added input as text Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties Added Paths: ----------- jchempaint/trunk/src/main/org/openscience/jchempaint/InsertTextPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/InsertStructureAction.java Added: jchempaint/trunk/src/main/org/openscience/jchempaint/InsertTextPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/InsertTextPanel.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/InsertTextPanel.java 2008-11-27 11:35:39 UTC (rev 13336) @@ -0,0 +1,303 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 1997-2008 Rajarshi Guha, Stefan Kuhn + * + * 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; + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.BufferedReader; +import java.io.IOException; +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; + +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.text.JTextComponent; +import javax.vecmath.Vector2d; + +import net.sf.jniinchi.INCHI_RET; + +import org.openscience.cdk.DefaultChemObjectBuilder; +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.IMolecule; +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 + * + */ +public class InsertTextPanel extends JPanel implements ActionListener { + + private JChemPaintPanel jChemPaintPanel; + private JComboBox textCombo; + private JTextComponent editor; + private JFrame closeafter=null; + + + public InsertTextPanel(JChemPaintPanel jChemPaintPanel, JFrame closeafter) { + super(); + this.closeafter=closeafter; + setLayout(new GridBagLayout()); + + List<String> oldText = new ArrayList<String>(); + oldText.add(""); + + textCombo = new JComboBox(oldText.toArray()); + textCombo.setEditable(true); + textCombo.setToolTipText("Enter a CAS, SMILES or InChI string"); + + 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; + gridBagConstraints.anchor = GridBagConstraints.FIRST_LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.ipadx = 5; + gridBagConstraints.insets = new Insets(0, 0, 0, 5); + add(textCombo, gridBagConstraints); + + gridBagConstraints.insets = new Insets(0, 0, 2, 0); + gridBagConstraints.ipadx = 5; + gridBagConstraints.ipady = 2; + gridBagConstraints.weightx = 0.0; + 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")) { + IMolecule molecule = getMolecule(); + if (molecule == null) return; + generateModel(molecule); + if(closeafter!=null) + closeafter.setVisible(false); + } + } + + private IMolecule getMolecule() { + + IMolecule molecule; + String text = (String) textCombo.getSelectedItem(); + text = text.trim(); // clean up extra white space + + if (text.equals("")) return null; + + if (text.startsWith("InChI")) { // handle it as an InChI + try { + InChIGeneratorFactory inchiFactory = new InChIGeneratorFactory(); + InChIToStructure inchiToStructure = inchiFactory.getInChIToStructure(text,jChemPaintPanel.getChemModel().getBuilder()); + INCHI_RET status = inchiToStructure.getReturnStatus(); + if (status != INCHI_RET.OKAY) { + JOptionPane.showMessageDialog(jChemPaintPanel, "Could not process InChI"); + return null; + } + IAtomContainer atomContainer = inchiToStructure.getAtomContainer(); + molecule = atomContainer.getBuilder().newMolecule(atomContainer); + } catch (CDKException e2) { + JOptionPane.showMessageDialog(jChemPaintPanel, "Could not load InChI subsystem"); + return null; + } + } else if (isCASNumber(text)) { // is it a CAS number? + try { + molecule = getMoleculeFromCAS(text); + } catch (IOException e) { + JOptionPane.showMessageDialog(jChemPaintPanel, "Error in reading data from PubChem"); + return null; + } + } else { // OK, it must be a SMILES + SmilesParser smilesParser = new SmilesParser(DefaultChemObjectBuilder.getInstance()); + try { + molecule = smilesParser.parseSmiles(text); + } catch (InvalidSmilesException e1) { + JOptionPane.showMessageDialog(jChemPaintPanel, "Invalid SMILES specified"); + return null; + } + } + + // OK, we have a valid molecule, save it and show it + String tmp = (String) textCombo.getItemAt(0); + if (tmp.equals("")) textCombo.removeItemAt(0); + textCombo.addItem(text); + editor.setText(""); + + return molecule; + } + + private boolean isCASNumber(String text) { + String[] chars = text.split("-"); + if (chars.length != 3) return false; + for (int i = 0; i < 3; i++) { + if (i == 2 && chars[i].length() != 1) return false; + if (i == 1 && chars[i].length() != 2) return false; + if (i == 0 && chars[i].length() > 6) return false; + try { + Integer.parseInt(chars[i]); + } catch (NumberFormatException e) { + return false; + } + } + return true; + } + + private IMolecule getMoleculeFromCAS(String cas) throws IOException { + String data; + + String firstURL = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pccompound&term=" + cas; + + data = getDataFromURL(firstURL); + + Pattern pattern = Pattern.compile("http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi\\?cid=(\\d*)"); + Matcher matcher = pattern.matcher(data); + + String cid = null; + boolean found = false; + while (matcher.find()) { + cid = matcher.group(1); + try { // should be an integer + Integer.parseInt(cid); + found = true; + break; + } catch (NumberFormatException e) { + continue; + } + } + if (!found) return null; + + String secondURL = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?tool=jcppubchem&db=pccompound&id=" + cid; + data = getDataFromURL(secondURL); + + pattern = Pattern.compile("<Item Name=\"CanonicalSmile\" Type=\"String\">([^\\s]*?)</Item>"); + matcher = pattern.matcher(data); + String smiles = null; + found = false; + while (matcher.find()) { + smiles = matcher.group(1); + if (smiles != null || !smiles.equals("")) { + found = true; + break; + } + } + if (!found) return null; + + // got the canonical SMILES, lets get the molecule + SmilesParser smilesParser = new SmilesParser(DefaultChemObjectBuilder.getInstance()); + IMolecule molecule; + try { + molecule = 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 { + URL theURL = new URL(url); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(theURL.openStream())); + String data = ""; + String line; + while ((line = bufferedReader.readLine()) != null) data += line; + bufferedReader.close(); + return data; + } + + 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(); + if (moleculeSet == null) { + moleculeSet = new MoleculeSet(); + } + + // ok, 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(); + } + + moleculeSet.addMolecule(molecule); + jChemPaintPanel.getChemModel().setMoleculeSet(moleculeSet); + jChemPaintPanel.get2DHub().updateView(); + } +} Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-11-27 11:26:01 UTC (rev 13335) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-11-27 11:35:39 UTC (rev 13336) @@ -64,7 +64,10 @@ private FileFilter currentSaveFileFilter; private JCPStatusBar statusBar; public static List<JChemPaintPanel> instances = new ArrayList<JChemPaintPanel>(); - + private boolean showInsertTextField = true; + private InsertTextPanel insertTextPanel = null; + private JPanel topContainer = null; + /** * Helps in keeping the current action button highlighted * @@ -189,10 +192,11 @@ public JChemPaintPanel(IChemModel chemModel, String gui){ this.setLayout(new BorderLayout()); JMenuBar menu = new JChemPaintMenuBar(this, gui); - JPanel topContainer = new JPanel(new BorderLayout()); + topContainer = new JPanel(new BorderLayout()); topContainer.setLayout(new BorderLayout()); this.add(topContainer,BorderLayout.NORTH); topContainer.add(menu,BorderLayout.NORTH); + setShowInsertTextField(true); renderPanel = new RenderPanel(chemModel); this.add(renderPanel,BorderLayout.CENTER); JToolBar toolbar = JCPToolBar.getToolbar(this, 1); @@ -202,6 +206,31 @@ instances.add(this); chemModel.addListener(this); } + + /** + * Set to indicate whether the insert text field should be used. + * + * @param showInsertTextField true is the text entry widget is to be shown + */ + public void setShowInsertTextField(boolean showInsertTextField) { + this.showInsertTextField = showInsertTextField; + if (showInsertTextField) { + if (insertTextPanel == null) insertTextPanel = new InsertTextPanel(this,null); + topContainer.add(insertTextPanel, BorderLayout.SOUTH); + } else { + topContainer.remove(insertTextPanel); + } + this.revalidate(); + } + + /** + * Tells if the enter text field is currently shown or not. + * + * @return text field shown or not + */ + public boolean getShowInsertTextField() { + return showInsertTextField; + } /** * Return the ControllerHub of this JCPPanel Added: jchempaint/trunk/src/main/org/openscience/jchempaint/action/InsertStructureAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/InsertStructureAction.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/InsertStructureAction.java 2008-11-27 11:35:39 UTC (rev 13336) @@ -0,0 +1,52 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 1997-2008 Rajarshi Guha, Stefan Kuhn + * + * 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; + +/** + * Opens a new empty JChemPaintFrame. + * + */ +public class InsertStructureAction extends JCPAction { + + + private static final long serialVersionUID = -7685519078261241187L; + + /** + * Hide or show the structure entry text field. + * + * @param e Description of the Parameter + */ + public void actionPerformed(ActionEvent e) { + if (jcpPanel.getShowInsertTextField()) + jcpPanel.setShowInsertTextField(false); + else jcpPanel.setShowInsertTextField(true); + } +} Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-27 11:26:01 UTC (rev 13335) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-27 11:35:39 UTC (rev 13336) @@ -160,7 +160,7 @@ toolbarAction=org.openscience.cdk.applications.jchempaint.action.ToolBarAction statusbarAction=org.openscience.cdk.applications.jchempaint.action.StatusBarAction menubarAction=org.openscience.cdk.applications.jchempaint.action.MenuBarAction -insertstructureAction=org.openscience.cdk.applications.jchempaint.action.InsertStructureAction +insertstructureAction=org.openscience.jchempaint.action.InsertStructureAction zoominAction=org.openscience.cdk.applications.jchempaint.action.ZoomAction@in zoomoutAction=org.openscience.cdk.applications.jchempaint.action.ZoomAction@out zoomoriginalAction=org.openscience.cdk.applications.jchempaint.action.ZoomAction@original This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gil...@us...> - 2008-11-27 13:33:46
|
Revision: 13339 http://cdk.svn.sourceforge.net/cdk/?rev=13339&view=rev Author: gilleain Date: 2008-11-27 13:33:39 +0000 (Thu, 27 Nov 2008) Log Message: ----------- Exporting images now works. Modified Paths: -------------- 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/resources/JChemPaintResources.properties Added Paths: ----------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPExportFileFilter.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-11-27 12:11:30 UTC (rev 13338) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-11-27 13:33:39 UTC (rev 13339) @@ -29,6 +29,8 @@ package org.openscience.jchempaint; import java.awt.BorderLayout; +import java.awt.Image; +import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; @@ -314,7 +316,7 @@ public File isAlreadyAFile() { return isAlreadyAFile; } - + /** * Set to indicate whether the insert text field should be used. * @@ -333,6 +335,14 @@ public boolean getShowInsertTextField() { return showInsertTextField; } + + public Image takeSnapshot() { + return this.renderPanel.takeSnapshot(); + } + + public Image takeSnapshot(Rectangle bounds) { + return this.renderPanel.takeSnapshot(bounds); + } /** * Return the ControllerHub of this JCPPanel @@ -386,7 +396,7 @@ * @param e Description of the Parameter */ public void windowClosing(WindowEvent e) { - JFrame rootFrame = (JFrame) e.getSource(); +// JFrame rootFrame = (JFrame) e.getSource(); /*TODO if (rootFrame.getContentPane().getComponent(0) instanceof JChemPaintEditorPanel) { JChemPaintEditorPanel panel = (JChemPaintEditorPanel) rootFrame.getContentPane().getComponent(0); panel.fireChange(JChemPaintEditorPanel.JCP_CLOSING); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-11-27 12:11:30 UTC (rev 13338) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-11-27 13:33:39 UTC (rev 13339) @@ -32,7 +32,10 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.Rectangle; import java.awt.RenderingHints; +import java.awt.image.BufferedImage; import java.util.Iterator; import javax.swing.JPanel; @@ -93,18 +96,36 @@ this.setPreferredSize(new Dimension(1000, 600)); } + public Image takeSnapshot() { + return this.takeSnapshot(this.getVisibleRect()); + } + + public Image takeSnapshot(Rectangle bounds) { + // XXX is this the right image type? + Image image = + new BufferedImage(bounds.width, bounds.height, BufferedImage.TYPE_4BYTE_ABGR); + Graphics g = image.getGraphics(); + super.paint(g); + this.paintChemModel(g, bounds); + return image; + } + + public void paintChemModel(Graphics g, Rectangle bounds) { + if (this.chemModel != null) { + Graphics2D g2 = (Graphics2D)g; + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + //TODO render the chem model, not atom container + IMoleculeSet moleculeSet = this.chemModel.getMoleculeSet(); + if (moleculeSet != null && moleculeSet.getAtomContainerCount() > 0) { + this.renderer.paintMolecule(moleculeSet.getAtomContainer(0), g2, bounds); + } + } + } + public void paint(Graphics g) { super.paint(g); - if (this.chemModel != null) { - Graphics2D g2 = (Graphics2D)g; - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - //TODO render the chem model, not atom container - IMoleculeSet moleculeSet = this.chemModel.getMoleculeSet(); - if (moleculeSet != null && moleculeSet.getAtomContainerCount() > 0) { - this.renderer.paintMolecule(moleculeSet.getAtomContainer(0), g2, this.getVisibleRect()); - } - } + this.paintChemModel(g, this.getVisibleRect()); } public void updateView() { Added: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportAction.java 2008-11-27 13:33:39 UTC (rev 13339) @@ -0,0 +1,143 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 1997-2008 Stefan Kuhn + * + * 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.awt.image.RenderedImage; +import java.io.File; +import java.io.IOException; + +import javax.imageio.ImageIO; +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; +import javax.swing.filechooser.FileFilter; + +import org.openscience.jchempaint.JChemPaintPanel; +import org.openscience.jchempaint.io.JCPExportFileFilter; +import org.openscience.jchempaint.io.JCPFileView; + +/** + * Opens a save dialog + * + */ +public class ExportAction extends SaveAsAction { + + private static final long serialVersionUID = -6748046051686998776L; + private FileFilter currentFilter = null; + + public ExportAction() { + super(); + } + + /** + * Constructor for the ExportAction object + * + *@param jcpPanel + * the parent Panel + *@param isPopupAction + * true if this is a popup action + */ + public ExportAction(JChemPaintPanel jcpPanel, boolean isPopupAction) { + super(jcpPanel, isPopupAction); + } + + /** + * Exports the canvas as an image. + * + *@param event + * the action event that triggered this action. + */ + public void actionPerformed(ActionEvent event) { + JFileChooser chooser = new JFileChooser(); + chooser.setCurrentDirectory(this.jcpPanel.getCurrentWorkDirectory()); + JCPExportFileFilter.addChoosableFileFilters(chooser); + if (currentFilter != null) { + chooser.setFileFilter(currentFilter); + } + chooser.setFileView(new JCPFileView()); + + while (true) { + 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); + boolean doWrite = true; + 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) { + doWrite = false; + } + } + + if (doWrite) { + if (type.equals(JCPExportFileFilter.svg)) { + try { + // TODO : convert to svg + } catch (Exception e) { + String error = "Problem exporting to svg"; + JOptionPane.showMessageDialog(jcpPanel, error); + } + } else { + RenderedImage image = (RenderedImage)this.jcpPanel.takeSnapshot(); + try { + String imageIOType; + if (type.equals(JCPExportFileFilter.bmp)) { + imageIOType = "BMP"; + } else if (type.equals(JCPExportFileFilter.tiff)) { + imageIOType = "TIFF"; + } 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); + } + } catch (IOException ioe) { + ioe.printStackTrace(); + JOptionPane.showMessageDialog(jcpPanel, "Problem exporting image"); + } + } + } + } + } + + } +} Added: jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPExportFileFilter.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPExportFileFilter.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPExportFileFilter.java 2008-11-27 13:33:39 UTC (rev 13339) @@ -0,0 +1,129 @@ +/* $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 2003-2007 The JChemPaint project + * + * Contact: jch...@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.io; + +import java.io.File; +import java.util.List; +import java.util.ArrayList; + +import javax.swing.JFileChooser; + +/** + * An export filter for JCP file formats + * + * @cdk.module jchempaint + * @author Egon Willighagen + * @cdk.created 2003-04-01 + */ +public class JCPExportFileFilter extends javax.swing.filechooser.FileFilter implements IJCPFileFilter { + + // only those extensions are given here that are *not* on JCPFileFilter + public final static String bmp = "bmp"; + public final static String png = "png"; + public final static String tiff = "tiff"; + public final static String jpg = "jpg"; + public final static String svg = "svg"; + + protected List<String> types; + + public JCPExportFileFilter(String type) { + super(); + types = new ArrayList<String>(); + types.add(type); + } + + /** + * Adds the JCPFileFilter to the JFileChooser object. + */ + public static void addChoosableFileFilters(JFileChooser chooser) { + chooser.addChoosableFileFilter(new JCPExportFileFilter(JCPExportFileFilter.bmp)); + chooser.addChoosableFileFilter(new JCPExportFileFilter(JCPExportFileFilter.jpg)); + chooser.addChoosableFileFilter(new JCPExportFileFilter(JCPExportFileFilter.png)); + chooser.addChoosableFileFilter(new JCPExportFileFilter(JCPExportFileFilter.svg)); + chooser.addChoosableFileFilter(new JCPExportFileFilter(JCPExportFileFilter.tiff)); + } + + /** + * The description of this filter. + */ + public String getDescription() { + String type = (String)types.get(0); + String result = "Unknown"; + if (type.equals(png)) { + result = "PNG"; + } else if (type.equals(bmp)) { + result = "BMP"; + } else if (type.equals(tiff)) { + result = "TIFF"; + } else if (type.equals(jpg)) { + result = "JPEG"; + } else if (type.equals(svg)) { + result = "Scalable Vector Graphics"; + } + return result; + } + + // Accept all directories and all gif, jpg, or tiff files. + public boolean accept(File f) { + boolean accepted = false; + if (f.isDirectory()) { + accepted = true; + } + + String extension = getExtension(f); + if (extension != null) { + if (types.contains(extension)) { + accepted = true; + } + } + return accepted; + } + + /* + * Get the extension of a file. + */ + public static String getExtension(File f) + { + String ext = null; + String s = f.getName(); + int i = s.lastIndexOf('.'); + + if (i > 0 && i < s.length() - 1) { + ext = s.substring(i+1).toLowerCase(); + } + return ext; + } + + public String getType() { + return (String)types.get(0); + } + + public void setType(String type) { + types.add(type); + } +} Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-27 12:11:30 UTC (rev 13338) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-27 13:33:39 UTC (rev 13339) @@ -80,7 +80,7 @@ openAction=org.openscience.jchempaint.action.OpenAction saveAction=org.openscience.jchempaint.action.SaveAction saveAsAction=org.openscience.jchempaint.action.SaveAsAction -exportAction=org.openscience.cdk.applications.jchempaint.action.ExportAction +exportAction=org.openscience.jchempaint.action.ExportAction compchemAction=org.openscience.cdk.applications.jchempaint.action.ExportCompChemAction printAction=org.openscience.cdk.applications.jchempaint.action.PrintAction closeAction=org.openscience.jchempaint.action.CloseAction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-11-27 13:54:51
|
Revision: 13341 http://cdk.svn.sourceforge.net/cdk/?rev=13341&view=rev Author: shk3 Date: 2008-11-27 13:54:46 +0000 (Thu, 27 Nov 2008) Log Message: ----------- removed the svg from save, some cleanups Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPSaveFileFilter.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-11-27 13:46:04 UTC (rev 13340) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-11-27 13:54:46 UTC (rev 13341) @@ -106,6 +106,22 @@ } /** + * Allows setting of the is modified stage (e. g. after save) + * + * @param isModified is modified + */ + public void setModified(boolean isModified) { + this.isModified = isModified; + if(this.getParent().getParent().getParent().getParent() instanceof JFrame){ + if(isModified) + ((JFrame)this.getParent().getParent().getParent().getParent()).setTitle(renderPanel.getChemModel().getID()+"*"); + else + ((JFrame)this.getParent().getParent().getParent().getParent()).setTitle(renderPanel.getChemModel().getID()); + } + } + + + /** * Helps in keeping the current action button highlighted - needs to be set * if a new action button is choosen * @@ -431,9 +447,7 @@ * @see org.openscience.cdk.interfaces.IChemObjectListener#stateChanged(org.openscience.cdk.interfaces.IChemObjectChangeEvent) */ public void stateChanged(IChemObjectChangeEvent event) { - isModified=true; - if(this.getParent().getParent().getParent().getParent() instanceof JFrame) - ((JFrame)this.getParent().getParent().getParent().getParent()).setTitle(renderPanel.getChemModel().getID()+"*"); + setModified(true); /* TODO gives concurrent access problems if (this.getChemModel() != null) { for (int i = 0; i < 3; i++) { String status = p.getStatus(i); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAction.java 2008-11-27 13:46:04 UTC (rev 13340) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAction.java 2008-11-27 13:54:46 UTC (rev 13341) @@ -86,9 +86,6 @@ } else if (type.equals(JCPSaveFileFilter.smiles)) { saveAsSMILES(model, outFile); - } else if (type.equals(JCPSaveFileFilter.svg)) - { - saveAsSVG(model, outFile); } else if (type.equals(JCPSaveFileFilter.cdk)) { saveAsCDKSourceCode(model, outFile); @@ -99,7 +96,7 @@ JOptionPane.showMessageDialog(jcpPanel, error); return; } - //TODO jcpPanel.getJChemPaintModel().resetIsModified(); + jcpPanel.setModified(false); }catch(Exception ex){ String error = "Error while writing file: " + ex.getMessage(); logger.error(error); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2008-11-27 13:46:04 UTC (rev 13340) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/SaveAsAction.java 2008-11-27 13:54:46 UTC (rev 13341) @@ -41,20 +41,16 @@ import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; -import javax.vecmath.Point2d; import org.openscience.cdk.Reaction; -import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.interfaces.IChemObject; -import org.openscience.cdk.interfaces.IMoleculeSet; import org.openscience.cdk.io.CDKSourceCodeWriter; import org.openscience.cdk.io.IChemObjectWriter; import org.openscience.cdk.io.MDLWriter; import org.openscience.cdk.io.SMILESWriter; import org.openscience.cdk.io.listener.SwingGUIListener; -import org.openscience.cdk.renderer.Renderer2DModel; import org.openscience.cdk.tools.manipulator.ChemModelManipulator; import org.openscience.jchempaint.JCPPropertyHandler; import org.openscience.jchempaint.JChemPaintPanel; @@ -125,15 +121,8 @@ JCPSaveFileFilter.addChoosableFileFilters(chooser); if (jcpPanel.getCurrentSaveFileFilter() != null) { - // XXX needs fixing - // chooser.setFileFilter(jcpPanel.getCurrentSaveFileFilter()); + chooser.setFileFilter(jcpPanel.getCurrentSaveFileFilter()); } - //shk3: this makes the choosen file type show up twice if save as is done a second - //time - no idea what it is good for - /*if (currentFilter != null) - { - chooser.setFileFilter(currentFilter); - }*/ chooser.setFileView(new JCPFileView()); int returnVal = chooser.showSaveDialog(jcpPanel); @@ -174,9 +163,6 @@ } else if (type.equals(JCPSaveFileFilter.smiles)) { outFile = saveAsSMILES(model, outFile); - } else if (type.equals(JCPSaveFileFilter.svg)) - { - outFile = saveAsSVG(model, outFile); } else if (type.equals(JCPSaveFileFilter.cdk)) { outFile = saveAsCDKSourceCode(model, outFile); @@ -187,7 +173,7 @@ JOptionPane.showMessageDialog(jcpPanel, error); return; } - //TODO model.resetIsModified(); + jcpPanel.setModified(false); } catch (Exception exc) { String error = "Error while writing file: " + exc.getMessage(); @@ -209,6 +195,7 @@ logger.error(error); JOptionPane.showMessageDialog(jcpPanel, error); } + jcpPanel.setModified(false); } catch (Exception exc) { String error = "Error while writing file: " + exc.getMessage(); @@ -333,37 +320,5 @@ ((JFrame)jcpPanel.getParent().getParent().getParent().getParent()).setTitle(jcpPanel.getChemModel().getID()); return outFile; } - - protected File saveAsSVG(IChemModel model, File outFile) throws Exception - { - logger.info("Saving the contents as a SVG file..."); - /*TODO String fileName = outFile.toString(); - if (!fileName.endsWith(".svg")) { - fileName += ".svg"; - outFile = new File(fileName); - } - cow = new SVGWriter(new FileWriter(outFile)); - if (cow != null && askIOSettings()) - { - cow.addChemObjectIOListener(new SwingGUIListener(jcpPanel, 4)); - } - Iterator containers = ChemModelManipulator.getAllAtomContainers(model).iterator(); - while (containers.hasNext()) { - IAtomContainer ac = (IAtomContainer)containers.next(); - if (ac != null) - { - for(int i=0;i<ac.getAtomCount();i++){ - ac.getAtom(i).setPoint2d((Point2d)jcpPanel.getJChemPaintModel().getRendererModel().getRenderingCoordinates().get(ac.getAtom(i))); - } - cow.write((IAtomContainer) ac.clone()); - } else - { - System.err.println("AC == null!"); - } - } - cow.close();*/ - ((JFrame)jcpPanel.getParent().getParent().getParent().getParent()).setTitle(jcpPanel.getChemModel().getID()); - return outFile; - } } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPSaveFileFilter.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPSaveFileFilter.java 2008-11-27 13:46:04 UTC (rev 13340) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPSaveFileFilter.java 2008-11-27 13:54:46 UTC (rev 13341) @@ -48,11 +48,10 @@ /** * Adds the JCPFileFilter to the JFileChooser object. + * TODO why only these? what about e. g. rxn? */ public static void addChoosableFileFilters(JFileChooser chooser) { chooser.addChoosableFileFilter(new JCPFileFilter(JCPFileFilter.mol)); - //shk3: svg export is broken in 1.0 branch, I remove this. - chooser.addChoosableFileFilter(new JCPSaveFileFilter(JCPSaveFileFilter.svg)); chooser.addChoosableFileFilter(new JCPSaveFileFilter(JCPSaveFileFilter.smiles)); chooser.addChoosableFileFilter(new JCPSaveFileFilter(JCPSaveFileFilter.cdk)); chooser.addChoosableFileFilter(new JCPFileFilter(JCPFileFilter.cml)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-11-27 15:26:17
|
Revision: 13347 http://cdk.svn.sourceforge.net/cdk/?rev=13347&view=rev Author: shk3 Date: 2008-11-27 15:26:12 +0000 (Thu, 27 Nov 2008) Log Message: ----------- added choosing of background color (more a gimmick, ok) Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/editor/Renderer2DModelEditor.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-11-27 15:14:24 UTC (rev 13346) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-11-27 15:26:12 UTC (rev 13347) @@ -125,6 +125,7 @@ public void paint(Graphics g) { super.paint(g); + this.setBackground(renderer.getRenderer2DModel().getBackColor()); this.paintChemModel(g, this.getVisibleRect()); } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/editor/Renderer2DModelEditor.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/editor/Renderer2DModelEditor.java 2008-11-27 15:14:24 UTC (rev 13346) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/editor/Renderer2DModelEditor.java 2008-11-27 15:26:12 UTC (rev 13347) @@ -28,12 +28,14 @@ */ package org.openscience.jchempaint.dialog.editor; +import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JCheckBox; +import javax.swing.JColorChooser; import javax.swing.JFrame; import javax.swing.JLabel; @@ -63,10 +65,15 @@ private JLabel fontName; private JButton chooseFontButton; private Font currentFont; + private JLabel color; + private JButton chooseColorButton; + private Color currentColor; private JFrame frame; private Renderer2DModel model; + + public Renderer2DModelEditor(JFrame frame) { super(); @@ -104,6 +111,12 @@ chooseFontButton.addActionListener(this); chooseFontButton.setActionCommand("chooseFont"); addField("", chooseFontButton); + color = new JLabel("BACKCOLOR"); + addField("Background color", color); + chooseColorButton = new JButton("Choose Color..."); + chooseColorButton.addActionListener(this); + chooseColorButton.setActionCommand("chooseColor"); + addField("", chooseColorButton); } public void setModel(Renderer2DModel model) { @@ -123,6 +136,10 @@ if (currentFont != null) { fontName.setText(currentFont.getFontName()); } + currentColor = model.getBackColor(); + if (currentColor != null) { + color.setForeground(currentColor); + } validate(); } @@ -139,6 +156,7 @@ model.setShowTooltip(showToolTip.isSelected()); model.setShowReactionBoxes(showReactionBoxes.isSelected()); model.setFont(currentFont); + model.setBackColor(currentColor); } /** @@ -152,6 +170,13 @@ fontName.setText(currentFont.getFontName()); } } + if ("chooseColor".equals(e.getActionCommand())) { + Color newColor = JColorChooser.showDialog(this, "Choose Background Color", model.getBackColor()); + if (newColor != null) { + currentColor = newColor; + color.setForeground(currentColor); + } + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-11-27 18:05:47
|
Revision: 13354 http://cdk.svn.sourceforge.net/cdk/?rev=13354&view=rev Author: shk3 Date: 2008-11-27 18:05:41 +0000 (Thu, 27 Nov 2008) Log Message: ----------- added create smiles Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties Added Paths: ----------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateSmilesAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/TextViewDialog.java Added: jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateSmilesAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateSmilesAction.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateSmilesAction.java 2008-11-27 18:05:41 UTC (rev 13354) @@ -0,0 +1,127 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 1997-2008 Christoph Steinbeck, Stefan Kuhn + * + * 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.IOException; +import java.util.Iterator; + +import javax.swing.JFrame; + +import org.openscience.cdk.Molecule; +import org.openscience.cdk.exception.CDKException; +import org.openscience.cdk.geometry.GeometryTools; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IChemModel; +import org.openscience.cdk.layout.HydrogenPlacer; +import org.openscience.cdk.smiles.SmilesGenerator; +import org.openscience.cdk.tools.CDKHydrogenAdder; +import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; +import org.openscience.cdk.tools.manipulator.ChemModelManipulator; +import org.openscience.jchempaint.dialog.TextViewDialog; + + +/** + * Creates a SMILES from the current model + * + */ +public class CreateSmilesAction extends JCPAction +{ + + private static final long serialVersionUID = -4886982931009753342L; + + TextViewDialog dialog = null; + JFrame frame = null; + + public void actionPerformed(ActionEvent e) + { + logger.debug("Trying to create smile: ", type); + if (dialog == null) + { + dialog = new TextViewDialog(frame, "SMILES", null, false, 40, 2); + } + String smiles = ""; + String chiralsmiles =""; + try + { + smiles=getSmiles(jcpPanel.getChemModel()); + chiralsmiles=getChiralSmiles(jcpPanel.getChemModel()); + dialog.setMessage("Generated SMILES:", "SMILES: "+smiles+System.getProperty("line.separator")+"chiral SMILES: "+chiralsmiles); + } catch (Exception exception) + { + String message = "Error while creating SMILES: " + exception.getMessage(); + logger.error(message); + logger.debug(exception); + dialog.setMessage("Error", message); + } + dialog.setVisible(true); + } + + public static String getSmiles(IChemModel model) throws CDKException, ClassNotFoundException, IOException, CloneNotSupportedException{ + String smiles=""; + SmilesGenerator generator = new SmilesGenerator(); + Iterator<IAtomContainer> containers = ChemModelManipulator.getAllAtomContainers(model).iterator(); + while (containers.hasNext()) { + IAtomContainer container = (IAtomContainer)containers.next(); + Molecule molecule = new Molecule(container); + smiles += generator.createSMILES(molecule); + if (containers.hasNext()) { + smiles += "."; + } + } + return smiles; + } + + public static String getChiralSmiles(IChemModel model) throws CDKException, ClassNotFoundException, IOException, CloneNotSupportedException { + String chiralsmiles=""; + SmilesGenerator generator = new SmilesGenerator(); + Iterator<IAtomContainer> containers = ChemModelManipulator.getAllAtomContainers(model).iterator(); + while (containers.hasNext()) { + IAtomContainer container = (IAtomContainer)containers.next(); + Molecule molecule = new Molecule(container); + Molecule moleculewithh=(Molecule)molecule.clone(); + CDKHydrogenAdder.getInstance(moleculewithh.getBuilder()).addImplicitHydrogens(moleculewithh); + AtomContainerManipulator.convertImplicitToExplicitHydrogens(moleculewithh); + double bondLength = GeometryTools.getBondLengthAverage(container); + new HydrogenPlacer().placeHydrogens2D(moleculewithh, bondLength); + boolean[] bool=new boolean[moleculewithh.getBondCount()]; + for(int i=0;i<bool.length;i++){ + if (generator.isValidDoubleBondConfiguration(moleculewithh, moleculewithh.getBond(i))) + bool[i]=true; + } + chiralsmiles += generator.createChiralSMILES(moleculewithh,bool); + if (containers.hasNext()) { + chiralsmiles += "."; + } + } + return chiralsmiles; + } + +} + Property changes on: jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateSmilesAction.java ___________________________________________________________________ Added: svn:executable + * Added: jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/TextViewDialog.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/TextViewDialog.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/TextViewDialog.java 2008-11-27 18:05:41 UTC (rev 13354) @@ -0,0 +1,147 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 1997-2008 Stefan Kuhn + * + * 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.dialog; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; + +/** + * A simple text viewing dialog for general use. + * + * @cdk.module jchempaint + * @cdk.created 2003-08-24 + */ +public class TextViewDialog extends JDialog { + + private static final long serialVersionUID = -1900643115385413976L; + + private JTextArea textArea; + private JLabel textCaption; + + /** + * @see #TextViewDialog(JFrame, String, Dimension, boolean, int, int) + */ + public TextViewDialog(JFrame fr, String title) { + this(fr, title, null); + } + + /** + * @see #TextViewDialog(JFrame, String, Dimension, boolean, int, int) + */ + public TextViewDialog(JFrame fr, String title, Dimension dim) { + this(fr, title, dim, true); + } + + /** + * @see #TextViewDialog(JFrame, String, Dimension, boolean, int, int) + */ + public TextViewDialog(JFrame fr, String title, Dimension dim, boolean wrap) { + this(fr, title, dim, wrap, 20, 60); + } + + /** + * Constructs a new JTextViewDialog. + * + * @param fr Parent JFrame + * @param title String that will appear in the title bar + * @param dim Dimension of the dialog + * @param wrap If true, then the lines will be wrapped + * @param width Number of chars per line + * @param height Number of lines + */ + public TextViewDialog(JFrame fr, String title, Dimension dim, boolean wrap, + int width, int height) { + super(fr, title, true); + textArea = new JTextArea(width,height); + textArea.setEditable(false); + if (wrap) { + textArea.setLineWrap(wrap); + textArea.setWrapStyleWord(true); + } + JScrollPane scroller = new JScrollPane(); + if (dim != null) + scroller.setPreferredSize(dim); + else + scroller.setPreferredSize(new Dimension(400,200)); + scroller.getViewport().add(textArea); + + JPanel textViewer = new JPanel(new BorderLayout()); + //textViewer.setAlignmentX(LEFT_ALIGNMENT); + textViewer.add(scroller, BorderLayout.CENTER); + + JPanel buttonPanel = new JPanel(); + buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); + JButton ok = new JButton("OK"); + ok.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + OKPressed(); + } + }); + buttonPanel.add(ok); + getRootPane().setDefaultButton(ok); + + JPanel container = new JPanel(); + container.setLayout(new BorderLayout()); + container.validate(); + + textCaption = new JLabel(""); + + container.add(textCaption, BorderLayout.NORTH); + container.add(textViewer, BorderLayout.CENTER); + container.add(buttonPanel, BorderLayout.SOUTH); + + getContentPane().add(container); + pack(); + } + + public void OKPressed() { + this.setVisible(false); + } + + public void setText(String text) { + textArea.setText(text); + } + + public void setMessage(String caption, String text) { + textCaption.setText(caption); + textArea.setText(text); + } + +} Property changes on: jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/TextViewDialog.java ___________________________________________________________________ Added: svn:executable + * Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-27 17:11:30 UTC (rev 13353) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-27 18:05:41 UTC (rev 13354) @@ -180,7 +180,7 @@ clearValidateAction=org.openscience.cdk.applications.jchempaint.action.ValidateAction@clear toggleBasicValAction=org.openscience.cdk.applications.jchempaint.action.ValidateAction@toggleBasic toggleCDKValAction=org.openscience.cdk.applications.jchempaint.action.ValidateAction@toggleCDK -createSMILESAction=org.openscience.cdk.applications.jchempaint.action.CreateSmilesAction +createSMILESAction=org.openscience.jchempaint.action.CreateSmilesAction createInChIAction=org.openscience.cdk.applications.jchempaint.action.CreateInChIAction createIChIAction=org.openscience.cdk.applications.jchempaint.action.CreateIChIAction createIUPACAction=org.openscience.cdk.applications.jchempaint.action.CreateIUPACNameAction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gil...@us...> - 2008-11-27 22:59:04
|
Revision: 13359 http://cdk.svn.sourceforge.net/cdk/?rev=13359&view=rev Author: gilleain Date: 2008-11-27 22:59:00 +0000 (Thu, 27 Nov 2008) Log Message: ----------- Filled wedge bonds now render. Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/ChangeModeAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-11-27 22:58:39 UTC (rev 13358) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-11-27 22:59:00 UTC (rev 13359) @@ -117,12 +117,7 @@ Graphics2D g2 = (Graphics2D)g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - //TODO render the chem model, not atom container this.renderer.paintChemModel(chemModel, g2, bounds); -// IMoleculeSet moleculeSet = this.chemModel.getMoleculeSet(); -// if (moleculeSet != null && moleculeSet.getAtomContainerCount() > 0) { -// this.renderer.paintMolecule(moleculeSet.getAtomContainer(0), g2, bounds); -// } } } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ChangeModeAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ChangeModeAction.java 2008-11-27 22:58:39 UTC (rev 13358) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ChangeModeAction.java 2008-11-27 22:59:00 UTC (rev 13359) @@ -37,6 +37,7 @@ import org.openscience.cdk.controller.AddAtomModule; import org.openscience.cdk.controller.AddBondModule; import org.openscience.cdk.controller.AddRingModule; +import org.openscience.cdk.controller.AlterBondStereoModule; import org.openscience.cdk.controller.ChangeFormalChargeModule; import org.openscience.cdk.controller.ControllerHub; import org.openscience.cdk.controller.CycleSymbolModule; @@ -88,10 +89,12 @@ // TODO not yet a module hub.getController2DModel().setDrawElement("C"); } else if (type.equals("up_bond")) { - // TODO not yet a module + hub.setActiveDrawModule(new AlterBondStereoModule( + hub, AlterBondStereoModule.Direction.UP)); hub.getController2DModel().setDrawElement("C"); } else if (type.equals("down_bond")) { - // TODO not yet a module + hub.setActiveDrawModule(new AlterBondStereoModule( + hub, AlterBondStereoModule.Direction.DOWN)); hub.getController2DModel().setDrawElement("C"); } else if (type.equals("triangle")) { hub.setActiveDrawModule(new AddRingModule(hub, 3, false)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-11-28 10:02:00
|
Revision: 13361 http://cdk.svn.sourceforge.net/cdk/?rev=13361&view=rev Author: shk3 Date: 2008-11-28 10:01:58 +0000 (Fri, 28 Nov 2008) Log Message: ----------- added inchi generation Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateSmilesAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties Added Paths: ----------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateInChIAction.java Added: jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateInChIAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateInChIAction.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateInChIAction.java 2008-11-28 10:01:58 UTC (rev 13361) @@ -0,0 +1,117 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 1997-2008 Christoph Steinbeck, Stefan Kuhn + * + * 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 javax.swing.JFrame; + +import net.sf.jniinchi.INCHI_RET; + +import org.openscience.cdk.ChemModel; +import org.openscience.cdk.exception.CDKException; +import org.openscience.cdk.inchi.InChIGenerator; +import org.openscience.cdk.inchi.InChIGeneratorFactory; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.jchempaint.dialog.TextViewDialog; + +/** + * Creates an InChI from the current model + * + * @cdk.module jchempaint + * @author Sam Adams + */ +public class CreateInChIAction extends JCPAction +{ + + private static final long serialVersionUID = -4886982931009753347L; + + TextViewDialog dialog = null; + JFrame frame = null; + + public void actionPerformed(ActionEvent e) + { + logger.debug("Trying to create InChI: ", type); + + if (dialog == null) + { + dialog = new TextViewDialog(frame, "InChI", null, false, 40, 2); + } + + InChIGeneratorFactory factory = null; + try { + factory = new InChIGeneratorFactory(); + } catch (CDKException cdke) { + String message = "Error loading InChI library: " + cdke.getMessage(); + logger.error(message); + logger.debug(cdke); + dialog.setMessage("Error", message); + } + + if (factory != null) { + ChemModel model = (ChemModel) jcpPanel.getChemModel(); + if(model.getReactionSet()!=null && model.getReactionSet().getReactionCount()>0){ + dialog.setMessage("Problem", "You have reactions in JCP. Reactions cannot be shown as InChI!"); + }else{ + StringBuffer dialogText=new StringBuffer(); + int i=0; + String eol = System.getProperty("line.separator"); + for(IAtomContainer container : model.getMoleculeSet().molecules()) + { + if (model.getMoleculeSet().getAtomContainerCount() > 1) { + dialogText.append("Structure #" + (i+1) + eol); + } + try { + InChIGenerator inchiGen = factory.getInChIGenerator(container); + INCHI_RET ret = inchiGen.getReturnStatus(); + String inchi = inchiGen.getInchi(); + String auxinfo = inchiGen.getAuxInfo(); + String message = inchiGen.getMessage(); + if (ret == INCHI_RET.OKAY) { + dialogText.append(inchi + eol + auxinfo + eol + eol); + } else if (ret == INCHI_RET.WARNING) { + dialogText.append(inchi + eol + auxinfo + eol + "Warning: " + message + eol + eol); + } else { + dialogText.append("InChI generation failed (" + ret.toString() + ")" + eol + message + eol + eol); + } + } catch (CDKException cdke) { + dialogText.append("InChI generation failed: " + cdke.getMessage() + eol + eol); + } + i++; + } + dialog.setMessage("Generated InChI:", dialogText.toString()); + } + + } + + + dialog.setVisible(true); + } +} + Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateSmilesAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateSmilesAction.java 2008-11-28 09:46:28 UTC (rev 13360) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/CreateSmilesAction.java 2008-11-28 10:01:58 UTC (rev 13361) @@ -104,8 +104,7 @@ Iterator<IAtomContainer> containers = ChemModelManipulator.getAllAtomContainers(model).iterator(); while (containers.hasNext()) { IAtomContainer container = (IAtomContainer)containers.next(); - Molecule molecule = new Molecule(container); - Molecule moleculewithh=(Molecule)molecule.clone(); + Molecule moleculewithh = new Molecule(container); CDKHydrogenAdder.getInstance(moleculewithh.getBuilder()).addImplicitHydrogens(moleculewithh); AtomContainerManipulator.convertImplicitToExplicitHydrogens(moleculewithh); double bondLength = GeometryTools.getBondLengthAverage(container); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-28 09:46:28 UTC (rev 13360) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-28 10:01:58 UTC (rev 13361) @@ -181,7 +181,7 @@ toggleBasicValAction=org.openscience.cdk.applications.jchempaint.action.ValidateAction@toggleBasic toggleCDKValAction=org.openscience.cdk.applications.jchempaint.action.ValidateAction@toggleCDK createSMILESAction=org.openscience.jchempaint.action.CreateSmilesAction -createInChIAction=org.openscience.cdk.applications.jchempaint.action.CreateInChIAction +createInChIAction=org.openscience.jchempaint.action.CreateInChIAction createIChIAction=org.openscience.cdk.applications.jchempaint.action.CreateIChIAction createIUPACAction=org.openscience.cdk.applications.jchempaint.action.CreateIUPACNameAction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-11-28 11:58:26
|
Revision: 13363 http://cdk.svn.sourceforge.net/cdk/?rev=13363&view=rev Author: shk3 Date: 2008-11-28 11:58:21 +0000 (Fri, 28 Nov 2008) Log Message: ----------- added validation Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties Added Paths: ----------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ValidateAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/ValidateFrame.java Added: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ValidateAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ValidateAction.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ValidateAction.java 2008-11-28 11:58:21 UTC (rev 13363) @@ -0,0 +1,236 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-05-01 20:15:34 +0100 (Tue, 01 May 2007) $ + * $Revision: 8292 $ + * + * Copyright (C) 2003-2007 The JChemPaint project + * + * Contact: jch...@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.FileReader; +import java.io.IOException; +import java.util.Enumeration; +import java.util.Iterator; + +import javax.swing.JCheckBoxMenuItem; + +import org.openscience.cdk.dict.DictionaryDatabase; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IChemObject; +import org.openscience.cdk.tools.manipulator.ChemModelManipulator; +import org.openscience.cdk.validate.BasicValidator; +import org.openscience.cdk.validate.CDKValidator; +import org.openscience.cdk.validate.DictionaryValidator; +import org.openscience.cdk.validate.ProblemMarker; +import org.openscience.cdk.validate.ValencyValidator; +import org.openscience.cdk.validate.ValidatorEngine; +import org.openscience.jchempaint.JCPPropertyHandler; +import org.openscience.jchempaint.dialog.ValidateFrame; + + +/** + * An action opening a validation frame + * + * @cdk.module jchempaint + * @author E.L. Willighagen <el...@ca...> + */ +public class ValidateAction extends JCPAction +{ + + private static final long serialVersionUID = -3776589605934024224L; + + private static ValidatorEngine engine; + + private static DictionaryDatabase dictdb; + + ValidateFrame frame = null; + + public void actionPerformed(ActionEvent event) + { + logger.debug("detected validate action: ", type); + if (type.equals("run")) + { + IChemObject object = getSource(event); + if (object == null) + { + // called from main menu + org.openscience.cdk.interfaces.IChemModel model = jcpPanel.getChemModel(); + if (model != null) + { + runValidate(model); + } else + { + System.out.println("Empty model"); + } + } else + { + // calleb from popup menu + logger.debug("Validate called from popup menu!"); + runValidate(object); + } + } else if (type.equals("clear")) + { + clearValidate(); + } else if (type.startsWith("toggle") && type.length() > 6) + { + String toggle = type.substring(6); + try + { + JCheckBoxMenuItem menuItem = (JCheckBoxMenuItem) event.getSource(); + boolean newChecked = !menuItem.isSelected(); + menuItem.setSelected(newChecked); + if (toggle.equals("Basic")) + { + if (newChecked) + { + logger.info("Turned on " + toggle); + getValidatorEngine().addValidator(new BasicValidator()); + } else + { + logger.info("Turned off " + toggle); + getValidatorEngine().removeValidator(new BasicValidator()); + } + } else if (toggle.equals("CDK")) + { + if (newChecked) + { + logger.info("Turned on " + toggle); + getValidatorEngine().addValidator(new CDKValidator()); + } else + { + logger.info("Turned off " + toggle); + getValidatorEngine().removeValidator(new CDKValidator()); + } + } else + { + logger.error("Don't know what to toggle: " + toggle); + } + } catch (ClassCastException exception) + { + logger.error("Cannot toggle a non JCheckBoxMenuItem!"); + } + } else + { + logger.error("Unknown command: " + type); + } + } + + private void clearValidate() + { + org.openscience.cdk.interfaces.IChemModel model = jcpPanel.getChemModel(); + Iterator containers = ChemModelManipulator.getAllAtomContainers(model).iterator(); + while (containers.hasNext()) { + IAtomContainer atoms = (IAtomContainer)containers.next(); + logger.info("Clearing errors on atoms: " + atoms.getAtomCount()); + for (int i = 0; i < atoms.getAtomCount(); i++) + { + ProblemMarker.unmark(atoms.getAtom(i)); + } + } + jcpPanel.get2DHub().updateView(); + } + + private void runValidate(IChemObject object) + { + logger.info("Running validation"); + clearValidate(); + if (jcpPanel.getChemModel() != null) + { + frame = new ValidateFrame(jcpPanel); + frame.validate(object); + frame.pack(); + frame.setVisible(true); + } + } + + /** + * Gets the validatorEngine attribute of the JChemPaintEditorPanel class + * + *@return The validatorEngine value + */ + public static ValidatorEngine getValidatorEngine() + { + if (engine == null) + { + engine = new ValidatorEngine(); + // default validators + engine.addValidator(new BasicValidator()); + engine.addValidator(new ValencyValidator()); + engine.addValidator(new CDKValidator()); + engine.addValidator(new DictionaryValidator(getDictionaryDatabase())); + } + return engine; + } + + /** + * Gets the dictionaryDatabase attribute of the JChemPaint object + * + *@return The dictionaryDatabase value + */ + public static DictionaryDatabase getDictionaryDatabase() + { + if (dictdb == null) + { + dictdb = new DictionaryDatabase(); + try + { + File dictdir = new File(JCPPropertyHandler.getInstance().getJChemPaintDir(), "dicts"); + logger.info("User dict dir: ", dictdir); + logger.debug(" exists: ", dictdir.exists()); + logger.debug(" isDirectory: ", dictdir.isDirectory()); + if (dictdir.exists() && dictdir.isDirectory()) + { + File[] dicts = dictdir.listFiles(); + for (int i = 0; i < dicts.length; i++) + { + // loop over these files and load them + try + { + FileReader reader = new FileReader(dicts[i]); + String filename = dicts[i].getName(); + dictdb.readDictionary(reader, filename.substring(0, filename.indexOf('.'))); + } catch (IOException exception) + { + logger.error("Problem with reading macie dictionary..."); + } + } + } + logger.info("Read these dictionaries: "); + Enumeration dicts = dictdb.listDictionaries(); + while (dicts.hasMoreElements()) + { + logger.info(" - ", dicts.nextElement().toString()); + } + } catch (Exception exc) + { + logger.error("Could not handle dictionary initialization. Maybe I'm running in a sandbox."); + } + } + return dictdb; + } + +} + Property changes on: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ValidateAction.java ___________________________________________________________________ Added: svn:executable + * Added: jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/ValidateFrame.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/ValidateFrame.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/ValidateFrame.java 2008-11-28 11:58:21 UTC (rev 13363) @@ -0,0 +1,278 @@ +/* $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 2003-2007 The JChemPaint project + * + * Contact: jch...@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.dialog; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.util.Enumeration; +import java.util.Iterator; + +import javax.swing.AbstractAction; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTabbedPane; +import javax.swing.JTextArea; +import javax.swing.JTree; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.TreeSelectionModel; + +import org.openscience.cdk.Atom; +import org.openscience.cdk.Bond; +import org.openscience.cdk.ChemModel; +import org.openscience.cdk.Reaction; +import org.openscience.cdk.applications.swing.FieldTablePanel; +import org.openscience.cdk.interfaces.IChemObject; +import org.openscience.cdk.renderer.Renderer2DModel; +import org.openscience.cdk.validate.ProblemMarker; +import org.openscience.cdk.validate.ValidationReport; +import org.openscience.cdk.validate.ValidationTest; +import org.openscience.jchempaint.JChemPaintPanel; +import org.openscience.jchempaint.action.ValidateAction; + +/** + * Frame to allows editing of dictionary references of + * ChemObjects. + * + * @cdk.module jchempaint + */ +public class ValidateFrame extends JFrame { + + private static final long serialVersionUID = -8073655554072154298L; + + private Renderer2DModel rendererModel; + private JPanel errorTreePanel; + private JPanel warningTreePanel; + private JPanel cdkErrorTreePanel; + private JTextArea detailText; + + public ValidateFrame(JChemPaintPanel jcpp) { + super("Validation Results"); + + rendererModel = jcpp.get2DHub().getIJava2DRenderer().getRenderer2DModel(); + getContentPane().setLayout(new BorderLayout()); + + JPanel southPanel = new JPanel(); + JButton okButton = new JButton("OK"); + okButton.addActionListener(new OKAction()); + southPanel.add(okButton); + + FieldTablePanel detailPanel = new FieldTablePanel(); + detailText = new JTextArea(2,40); + detailText.setBackground(Color.white); + detailText.setWrapStyleWord(true); + detailText.setText(""); + detailPanel.addArea("Details", detailText); + detailPanel.validate(); + + // set up three tabs, one with statistics, one with errors and + // one with warnings (stats omitted for now) + JTabbedPane tabbedPane = new JTabbedPane(); + errorTreePanel = new JPanel(); + addJTree(new JTree(new DefaultMutableTreeNode("not validated")), errorTreePanel); + warningTreePanel = new JPanel(); + addJTree(new JTree(new DefaultMutableTreeNode("not validated")), warningTreePanel); + cdkErrorTreePanel = new JPanel(); + addJTree(new JTree(new DefaultMutableTreeNode("not validated")), cdkErrorTreePanel); + tabbedPane.add("Errors", errorTreePanel); + tabbedPane.add("Warnings", warningTreePanel); + tabbedPane.add("CDK Errors", cdkErrorTreePanel); + + getContentPane().add(tabbedPane, BorderLayout.NORTH); + getContentPane().add(detailPanel, BorderLayout.CENTER); + getContentPane().add(southPanel, BorderLayout.SOUTH); + validate(); + } + + private void addJTree(JTree tree, JPanel treePanel) { + tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); + // Listen for when the selection changes. + final JTree copiedFinal = tree; + tree.addTreeSelectionListener(new TreeSelectionListener() { + public void valueChanged(TreeSelectionEvent e) { + DefaultMutableTreeNode node = (DefaultMutableTreeNode)copiedFinal.getLastSelectedPathComponent(); + + if (node == null) return; + + Object nodeInfo = node.getUserObject(); + if (node.isLeaf() && (nodeInfo instanceof ValidatorErrorNode)) { + ValidatorErrorNode errorNode = (ValidatorErrorNode)nodeInfo; + detailText.setText(errorNode.getValidationTest().getDetails()); + if (errorNode instanceof AtomErrorNode) { + Atom atom = ((AtomErrorNode)errorNode).getAtom(); + // highlight atom in JCPFrame + rendererModel.setHighlightedAtom(atom); + } else if (errorNode instanceof BondErrorNode) { + Bond bond = ((BondErrorNode)errorNode).getBond(); + rendererModel.setHighlightedBond(bond); + } + } + } + }); + + treePanel.removeAll(); + tree.validate(); + JScrollPane scrollPane = new JScrollPane(tree); + scrollPane.setPreferredSize(new Dimension(400, 350)); + treePanel.add(scrollPane); + } + + public void validate(IChemObject object) { + ValidationReport report = null; + // logger.debug("Validating class: " + object.getClass().getName()); + if (object instanceof ChemModel) { + report = ValidateAction.getValidatorEngine().validateChemModel((ChemModel)object); + } else if (object instanceof Atom) { + report = ValidateAction.getValidatorEngine().validateAtom((Atom)object); + } else if (object instanceof org.openscience.cdk.interfaces.IBond) { + report = ValidateAction.getValidatorEngine().validateBond((Bond)object); + } else if (object instanceof Reaction) { + report = ValidateAction.getValidatorEngine().validateReaction((Reaction)object); + } else { + System.err.println("Cannot validate this object: " + object.getClass().getName()); + return; + } + // logger.debug("#errors: " + report.getErrorCount()); + // logger.debug("#warnings: " + report.getWarningCount()); + // logger.debug("#cdk errors: " + report.getCDKErrorCount()); + // logger.debug("#oks: " + report.getOKCount()); + DefaultMutableTreeNode errorsNode = new DefaultMutableTreeNode("errors"); + putErrorsInJTree(errorsNode, report); + addJTree(new JTree(errorsNode), errorTreePanel); + DefaultMutableTreeNode warningsNode = new DefaultMutableTreeNode("warnings"); + putWarningsInJTree(warningsNode, report); + addJTree(new JTree(warningsNode), warningTreePanel); + DefaultMutableTreeNode cdkErrorsNode = new DefaultMutableTreeNode("errors"); + putCDKErrorsInJTree(cdkErrorsNode, report); + addJTree(new JTree(cdkErrorsNode), cdkErrorTreePanel); + } + + private void putErrorsInJTree(DefaultMutableTreeNode rootNode, ValidationReport report) { + // put errors in the tree + Iterator<ValidationTest> errorsEnum = report.getErrors().iterator(); + putTestsInJTree(rootNode, errorsEnum); + } + + private void putWarningsInJTree(DefaultMutableTreeNode rootNode, ValidationReport report) { + // put errors in the tree + Iterator<ValidationTest> errorsEnum = report.getWarnings().iterator(); + putTestsInJTree(rootNode, errorsEnum); + } + + private void putCDKErrorsInJTree(DefaultMutableTreeNode rootNode, ValidationReport report) { + // put CDK errors in the tree + Iterator<ValidationTest> cdkErrorsEnum = report.getCDKErrors().iterator(); + putTestsInJTree(rootNode, cdkErrorsEnum); + } + + private void putTestsInJTree(DefaultMutableTreeNode rootNode, Iterator<ValidationTest> errors) { + // put errors in the tree + while (errors.hasNext()) { + ValidationTest error = errors.next(); + DefaultMutableTreeNode node = new DefaultMutableTreeNode(); + IChemObject object = error.getChemObject(); + if (object instanceof Atom) { + node.setUserObject(new AtomErrorNode(error, (Atom)object)); + ProblemMarker.markWithError((Atom)object); + } else if (object instanceof org.openscience.cdk.interfaces.IBond) { + node.setUserObject(new BondErrorNode(error, (Bond)object)); + } else { + node.setUserObject(new ValidatorErrorNode(error)); + } + rootNode.add(node); + } + } + + public void closeFrame() { + dispose(); + } + + class OKAction extends AbstractAction { + + private static final long serialVersionUID = 8801638051737287899L; + + OKAction() { + super("OK"); + } + + public void actionPerformed(ActionEvent event) { + closeFrame(); + } + } + + class ValidatorErrorNode { + + ValidationTest test; + + ValidatorErrorNode(ValidationTest test) { + this.test = test; + } + + public String toString() { + return test.getError(); + } + + ValidationTest getValidationTest() { + return this.test; + } + } + + class AtomErrorNode extends ValidatorErrorNode { + + Atom atom; + + AtomErrorNode(ValidationTest test, Atom atom) { + super(test); + this.atom = atom; + } + + Atom getAtom() { + return this.atom; + } + } + + class BondErrorNode extends ValidatorErrorNode { + + Bond bond; + + BondErrorNode(ValidationTest test, Bond bond) { + super(test); + this.bond = bond; + } + + Bond getBond() { + return this.bond; + } + } + +} Property changes on: jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/ValidateFrame.java ___________________________________________________________________ Added: svn:executable + * Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-28 11:41:53 UTC (rev 13362) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-28 11:58:21 UTC (rev 13363) @@ -176,8 +176,8 @@ showDictsAction=org.openscience.cdk.applications.jchempaint.action.ShowDictionariesAction # Report menu -runValidateAction=org.openscience.cdk.applications.jchempaint.action.ValidateAction@run -clearValidateAction=org.openscience.cdk.applications.jchempaint.action.ValidateAction@clear +runValidateAction=org.openscience.jchempaint.action.ValidateAction@run +clearValidateAction=org.openscience.jchempaint.action.ValidateAction@clear toggleBasicValAction=org.openscience.cdk.applications.jchempaint.action.ValidateAction@toggleBasic toggleCDKValAction=org.openscience.cdk.applications.jchempaint.action.ValidateAction@toggleCDK createSMILESAction=org.openscience.jchempaint.action.CreateSmilesAction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-11-28 15:11:50
|
Revision: 13368 http://cdk.svn.sourceforge.net/cdk/?rev=13368&view=rev Author: shk3 Date: 2008-11-28 15:11:45 +0000 (Fri, 28 Nov 2008) Log Message: ----------- added export compchem Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties Added Paths: ----------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportCompChemAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPCompChemInputSaveFileFilter.java Added: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportCompChemAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportCompChemAction.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportCompChemAction.java 2008-11-28 15:11:45 UTC (rev 13368) @@ -0,0 +1,97 @@ +/* + * $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()); + } +} + Property changes on: jchempaint/trunk/src/main/org/openscience/jchempaint/action/ExportCompChemAction.java ___________________________________________________________________ Added: svn:executable + * Added: jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPCompChemInputSaveFileFilter.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPCompChemInputSaveFileFilter.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPCompChemInputSaveFileFilter.java 2008-11-28 15:11:45 UTC (rev 13368) @@ -0,0 +1,113 @@ +/* $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 2003-2007 The JChemPaint project + * + * Contact: jch...@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.io; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.JFileChooser; + +/** + * Exports file output in a format suitable for input for computational + * programs, e.g. Gaussian. + * + * @cdk.module jchempaint + * @author Egon Willighagen + * @cdk.created 2003-07-18 + */ +public class JCPCompChemInputSaveFileFilter extends javax.swing.filechooser.FileFilter implements IJCPFileFilter { + + // only those extensions are given here that are *not* on JCPFileFilter + public final static String gin = "gin"; + + protected List types; + + public JCPCompChemInputSaveFileFilter(String type) { + super(); + types = new ArrayList(); + types.add(type); + } + + /** + * Adds the JCPFileFilter to the JFileChooser object. + */ + public static void addChoosableFileFilters(JFileChooser chooser) { + chooser.addChoosableFileFilter(new JCPCompChemInputSaveFileFilter(JCPCompChemInputSaveFileFilter.gin)); + } + + /** + * The description of this filter. + */ + public String getDescription() { + String type = (String)types.get(0); + String result = "Unknown"; + if (type.equals(gin)) { + result = "Gaussian Input"; + } + return result; + } + + // Accept all directories and all gif, jpg, or tiff files. + public boolean accept(File f) { + boolean accepted = false; + if (f.isDirectory()) { + accepted = true; + } + + String extension = getExtension(f); + if (extension != null) { + if (types.contains(extension)) { + accepted = true; + } + } + return accepted; + } + + /* + * Get the extension of a file. + */ + public static String getExtension(File f) { + String ext = null; + String s = f.getName(); + int i = s.lastIndexOf('.'); + + if (i > 0 && i < s.length() - 1) { + ext = s.substring(i+1).toLowerCase(); + } + return ext; + } + + public String getType() { + return (String)types.get(0); + } + + public void setType(String type) { + types.add(type); + } +} Property changes on: jchempaint/trunk/src/main/org/openscience/jchempaint/io/JCPCompChemInputSaveFileFilter.java ___________________________________________________________________ Added: svn:executable + * Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-28 15:09:03 UTC (rev 13367) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-11-28 15:11:45 UTC (rev 13368) @@ -81,7 +81,7 @@ saveAction=org.openscience.jchempaint.action.SaveAction saveAsAction=org.openscience.jchempaint.action.SaveAsAction exportAction=org.openscience.jchempaint.action.ExportAction -compchemAction=org.openscience.cdk.applications.jchempaint.action.ExportCompChemAction +compchemAction=org.openscience.jchempaint.action.ExportCompChemAction printAction=org.openscience.cdk.applications.jchempaint.action.PrintAction closeAction=org.openscience.jchempaint.action.CloseAction exitAction=org.openscience.jchempaint.action.ExitAction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gil...@us...> - 2008-11-28 18:35:46
|
Revision: 13375 http://cdk.svn.sourceforge.net/cdk/?rev=13375&view=rev Author: gilleain Date: 2008-11-28 18:35:39 +0000 (Fri, 28 Nov 2008) Log Message: ----------- Improved cleanup slightly, by using the current average bond length. Modified Paths: -------------- 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/CleanupAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-11-28 18:05:38 UTC (rev 13374) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-11-28 18:35:39 UTC (rev 13375) @@ -95,6 +95,16 @@ instances.add(this); chemModel.addListener(this); } + + /** + * 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 Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-11-28 18:05:38 UTC (rev 13374) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-11-28 18:35:39 UTC (rev 13375) @@ -119,8 +119,8 @@ } } - public void setNewChemModel() { - this.isNewChemModel = true; + public void setIsNewChemModel(boolean isNewChemModel) { + this.isNewChemModel = isNewChemModel; } public void paint(Graphics g) { Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/CleanupAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CleanupAction.java 2008-11-28 18:05:38 UTC (rev 13374) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/CleanupAction.java 2008-11-28 18:35:39 UTC (rev 13375) @@ -34,143 +34,130 @@ import javax.vecmath.Vector2d; import org.openscience.cdk.AtomContainer; +import org.openscience.cdk.controller.IChemModelRelay; import org.openscience.cdk.geometry.GeometryTools; import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IChemModel; +import org.openscience.cdk.interfaces.IChemObjectBuilder; +import org.openscience.cdk.interfaces.IMoleculeSet; import org.openscience.cdk.interfaces.IReaction; +import org.openscience.cdk.interfaces.IReactionSet; import org.openscience.cdk.layout.StructureDiagramGenerator; import org.openscience.cdk.layout.TemplateHandler; import org.openscience.cdk.nonotify.NoNotificationChemObjectBuilder; -import org.openscience.cdk.renderer.Renderer2DModel; - /** * Triggers the invocation of the structure diagram generator - * + * */ -public class CleanupAction extends JCPAction -{ +public class CleanupAction extends JCPAction { - private static final long serialVersionUID = -1048878006430754582L; - private StructureDiagramGenerator diagramGenerator; - + private static final long serialVersionUID = -1048878006430754582L; + private StructureDiagramGenerator diagramGenerator; - /** - * Constructor for the CleanupAction object - */ - public CleanupAction() - { - super(); - } + /** + * Constructor for the CleanupAction object + */ + public CleanupAction() { + super(); + } - - /** - * Relayouts a molecule - * - *@param e Description of the Parameter - */ - public void actionPerformed(ActionEvent e) - { - logger.info("Going to performe a clean up..."); - if (diagramGenerator == null) { + /** + * Re-lays out a molecule + * + *@param e + * Description of the Parameter + */ + public void actionPerformed(ActionEvent e) { + logger.info("Going to perform a clean up..."); + if (diagramGenerator == null) { diagramGenerator = new StructureDiagramGenerator(); diagramGenerator.setTemplateHandler( - new TemplateHandler(jcpPanel.getChemModel().getBuilder()) - ); + new TemplateHandler(jcpPanel.getChemModel().getBuilder())); } - Renderer2DModel renderModel = jcpPanel.get2DHub().getIJava2DRenderer().getRenderer2DModel(); - double bondLength = renderModel.getBondLength(); - diagramGenerator.setBondLength(bondLength * 2.0); - // FIXME this extra factor should not be necessary - logger.debug("getting ChemModel"); - org.openscience.cdk.interfaces.IChemModel model = jcpPanel.getChemModel(); - logger.debug("got ChemModel"); - org.openscience.cdk.interfaces.IMoleculeSet som = model.getMoleculeSet(); - if (som != null) - { - - logger.debug("no mols in som: ", som.getMoleculeCount()); - for(IAtomContainer molecule : som.molecules()) - { + + logger.debug("getting ChemModel"); + + IChemModel model = jcpPanel.getChemModel(); + logger.debug("got ChemModel"); + IMoleculeSet som = model.getMoleculeSet(); + + if (som != null) { + logger.debug("no mols in som: ", som.getMoleculeCount()); + for (IAtomContainer molecule : som.molecules()) { if (molecule != null && molecule.getAtomCount() > 0) { - IAtomContainer cleanedMol = relayoutMolecule(molecule); - for (int j=0; j<molecule.getAtomCount(); j++) { - IAtom atom = molecule.getAtom(j); - IAtom newAtom = cleanedMol.getAtom(j); - Point2d newCoord = newAtom.getPoint2d(); - atom.setPoint2d(newCoord); - } + IAtomContainer cleanedMol = relayoutMolecule(molecule); + for (int j = 0; j < molecule.getAtomCount(); j++) { + IAtom atom = molecule.getAtom(j); + IAtom newAtom = cleanedMol.getAtom(j); + Point2d newCoord = newAtom.getPoint2d(); + atom.setPoint2d(newCoord); + } } - } - } - org.openscience.cdk.interfaces.IReactionSet reactionSet = model.getReactionSet(); - if (reactionSet != null) - { - for(IReaction reaction : reactionSet.reactions()) - { - for(IAtomContainer molecule : reaction.getReactants().atomContainers()) - { - IAtomContainer cleanedMol = relayoutMolecule(molecule); - for (int j=0; j<molecule.getAtomCount(); j++) { - IAtom atom = molecule.getAtom(j); - IAtom newAtom = cleanedMol.getAtom(j); - Point2d newCoord = newAtom.getPoint2d(); - atom.setPoint2d(newCoord); - } - } - for(IAtomContainer molecule : reaction.getProducts().atomContainers()) - { - IAtomContainer cleanedMol = relayoutMolecule(molecule); - for (int j=0; j<molecule.getAtomCount(); j++) { - IAtom atom = molecule.getAtom(j); - IAtom newAtom = cleanedMol.getAtom(j); - Point2d newCoord = newAtom.getPoint2d(); - atom.setPoint2d(newCoord); - } - } - } - } - jcpPanel.get2DHub().getIJava2DRenderer().getRenderer2DModel().setSelectedPart(new AtomContainer()); - jcpPanel.get2DHub().updateView(); - } + } + } + + IReactionSet reactionSet = model.getReactionSet(); + if (reactionSet != null) { + for (IReaction reaction : reactionSet.reactions()) { + for (IAtomContainer molecule : reaction.getReactants() + .atomContainers()) { + IAtomContainer cleanedMol = relayoutMolecule(molecule); + for (int j = 0; j < molecule.getAtomCount(); j++) { + IAtom atom = molecule.getAtom(j); + IAtom newAtom = cleanedMol.getAtom(j); + Point2d newCoord = newAtom.getPoint2d(); + atom.setPoint2d(newCoord); + } + } + for (IAtomContainer molecule : reaction.getProducts() + .atomContainers()) { + IAtomContainer cleanedMol = relayoutMolecule(molecule); + for (int j = 0; j < molecule.getAtomCount(); j++) { + IAtom atom = molecule.getAtom(j); + IAtom newAtom = cleanedMol.getAtom(j); + Point2d newCoord = newAtom.getPoint2d(); + atom.setPoint2d(newCoord); + } + } + } + } + + IChemModelRelay hub = jcpPanel.get2DHub(); + hub.getIJava2DRenderer().getRenderer2DModel().setSelectedPart(new AtomContainer()); + jcpPanel.setIsNewChemModel(true); + hub.updateView(); + } - private IAtomContainer relayoutMolecule(IAtomContainer molecule) - { - if (molecule != null) { - if (molecule.getAtomCount() > 2) { - try { - Point2d centre = GeometryTools.get2DCentreOfMass(molecule); - // since we will copy the coordinates later anyway, let's use - // a NonNotifying data class - diagramGenerator.setMolecule( - NoNotificationChemObjectBuilder.getInstance(). - newMolecule(molecule) - ); - diagramGenerator.generateExperimentalCoordinates(new Vector2d(0, 1)); - molecule = diagramGenerator.getMolecule(); - /* - * make the molecule end up somewhere reasonable - * See constructor of JCPPanel - */ - // Thread.sleep(5000); - GeometryTools.translateAllPositive(molecule); - double scaleFactor = GeometryTools.getScaleFactor(molecule, 2.5); - GeometryTools.scaleMolecule(molecule, scaleFactor); - GeometryTools.translate2DCentreOfMassTo(molecule, centre); - } catch (Exception exc) - { - logger.error("Could not generate coordinates for molecule"); - logger.debug(exc); - } - } else - { - logger.info("Molecule with less than 2 atoms are not cleaned up"); - } - } else - { - logger.error("Molecule is null! Cannot do layout!"); - } - return molecule; - } + private IAtomContainer relayoutMolecule(IAtomContainer molecule) { + if (molecule != null) { + if (molecule.getAtomCount() > 2) { + try { + double bondLength = GeometryTools.getBondLengthAverage(molecule); + diagramGenerator.setBondLength(bondLength); + + // since we will copy the coordinates later anyway, let's + // use a NonNotifying data class + // XXX this is no longer true? + IChemObjectBuilder builder + = NoNotificationChemObjectBuilder.getInstance(); + + diagramGenerator.setMolecule(builder.newMolecule(molecule)); + diagramGenerator + .generateExperimentalCoordinates(new Vector2d(0, 1)); + molecule = diagramGenerator.getMolecule(); + + } catch (Exception exc) { + logger.error("Could not generate coordinates for molecule"); + logger.debug(exc); + } + } else { + logger.info("Molecule with less than 2 atoms are not cleaned up"); + } + } else { + logger.error("Molecule is null! Cannot do layout!"); + } + return molecule; + } } - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-12-02 12:23:18
|
Revision: 13423 http://cdk.svn.sourceforge.net/cdk/?rev=13423&view=rev Author: shk3 Date: 2008-12-02 12:23:15 +0000 (Tue, 02 Dec 2008) Log Message: ----------- cleanup Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintViewerApplet.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java 2008-12-02 12:13:59 UTC (rev 13422) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java 2008-12-02 12:23:15 UTC (rev 13423) @@ -29,247 +29,20 @@ package org.openscience.jchempaint; import java.awt.BorderLayout; -import java.awt.Image; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import javax.swing.JComponent; -import javax.swing.JFrame; -import javax.swing.JMenuBar; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JToolBar; -import javax.swing.filechooser.FileFilter; - -import org.openscience.cdk.controller.ControllerHub; import org.openscience.cdk.interfaces.IChemModel; -import org.openscience.cdk.interfaces.IChemObjectChangeEvent; -import org.openscience.cdk.interfaces.IChemObjectListener; -import org.openscience.jchempaint.action.SaveAction; -public class JChemPaintViewerPanel extends AbstractJChemPaintPanel implements IChemObjectListener { +public class JChemPaintViewerPanel extends AbstractJChemPaintPanel{ - private JComponent lastActionButton; - private File currentWorkDirectory; - private File lastOpenedFile; - private FileFilter currentOpenFileFilter; - private File isAlreadyAFile; - private boolean isModified=false; - private FileFilter currentSaveFileFilter; - public static List<JChemPaintViewerPanel> instances = new ArrayList<JChemPaintViewerPanel>(); - private boolean showInsertTextField = true; - private String guistring; - /** * Builds a JCPPanel with a certain model and a certain gui * * @param chemModel The model * @param gui The gui string */ - public JChemPaintViewerPanel(IChemModel chemModel, String gui){ - this.guistring=gui; + public JChemPaintViewerPanel(IChemModel chemModel){ this.setLayout(new BorderLayout()); renderPanel = new RenderPanel(chemModel); this.add(new javax.swing.JScrollPane(renderPanel),BorderLayout.CENTER); - instances.add(this); - chemModel.addListener(this); } - - /** - * 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) { - this.isModified = isModified; - if(this.getParent().getParent().getParent().getParent() instanceof JFrame){ - if(isModified) - ((JFrame)this.getParent().getParent().getParent().getParent()).setTitle(renderPanel.getChemModel().getID()+"*"); - else - ((JFrame)this.getParent().getParent().getParent().getParent()).setTitle(renderPanel.getChemModel().getID()); - } - } - - - /** - * 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 - * - *@return The currentWorkDirectory value - */ - public File getCurrentWorkDirectory() { - return currentWorkDirectory; - } - - - /** - * Sets the currentWorkDirectory attribute of the JChemPaintPanel object - * - *@param cwd The new currentWorkDirectory value - */ - public void setCurrentWorkDirectory(File cwd) { - this.currentWorkDirectory = cwd; - } - - /** - * Gets the lastOpenedFile attribute of the JChemPaintPanel object - * - *@return The lastOpenedFile value - */ - public File getLastOpenedFile() { - return lastOpenedFile; - } - - - /** - * Sets the lastOpenedFile attribute of the JChemPaintPanel object - * - *@param lof The new lastOpenedFile value - */ - public void setLastOpenedFile(File lof) { - this.lastOpenedFile = lof; - } - - /** - * Gets the currentOpenFileFilter attribute of the JChemPaintPanel object - * - *@return The currentOpenFileFilter value - */ - public FileFilter getCurrentOpenFileFilter() { - return currentOpenFileFilter; - } - - - /** - * Sets the currentOpenFileFilter attribute of the JChemPaintPanel object - * - *@param ff The new currentOpenFileFilter value - */ - public void setCurrentOpenFileFilter(FileFilter ff) { - this.currentOpenFileFilter = ff; - } - - /** - * Gets the currentSaveFileFilter attribute of the JChemPaintPanel object - * - *@return The currentSaveFileFilter value - */ - public FileFilter getCurrentSaveFileFilter() { - return currentSaveFileFilter; - } - - - /** - * Sets the currentSaveFileFilter attribute of the JChemPaintPanel object - * - *@param ff The new currentSaveFileFilter value - */ - public void setCurrentSaveFileFilter(FileFilter ff) { - this.currentSaveFileFilter = ff; - } - - - /** - * Sets the file currently used for saving this Panel. - * - *@param value The new isAlreadyAFile value - */ - public void setIsAlreadyAFile(File value) { - isAlreadyAFile = value; - } - - - /** - * Returns the file currently used for saving this Panel, null if not yet - * saved - * - *@return The currently used file - */ - public File isAlreadyAFile() { - return isAlreadyAFile; - } - - public Image takeSnapshot() { - return this.renderPanel.takeSnapshot(); - } - - public Image takeSnapshot(Rectangle bounds) { - return this.renderPanel.takeSnapshot(bounds); - } - - /** - * Return the ControllerHub of this JCPPanel - * - * @return The ControllerHub - */ - public ControllerHub get2DHub() { - return renderPanel.getHub(); - } - - /* (non-Javadoc) - * @see org.openscience.cdk.interfaces.IChemObjectListener#stateChanged(org.openscience.cdk.interfaces.IChemObjectChangeEvent) - */ - public void stateChanged(IChemObjectChangeEvent event) { - setModified(true); - /* TODO gives concurrent access problems if (this.getChemModel() != null) { - for (int i = 0; i < 3; i++) { - String status = p.getStatus(i); - statusBar.setStatus(i + 1, status); - } - } else { - if (statusBar != null) { - statusBar.setStatus(1, "no model"); - } - }*/ - } - - - /** - * Closes all currently opened JCP instances. - */ - public static void closeAllInstances() { - Iterator<JChemPaintViewerPanel> it = ((List<JChemPaintViewerPanel>)((ArrayList<JChemPaintViewerPanel>)instances).clone()).iterator(); - while (it.hasNext()) { - JFrame frame = (JFrame) it.next().getParent().getParent().getParent().getParent(); - WindowListener[] wls = (WindowListener[]) (frame.getListeners(WindowListener.class)); - wls[0].windowClosing(new WindowEvent(frame, 12)); - frame.setVisible(false); - frame.dispose(); - } - } } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintViewerApplet.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintViewerApplet.java 2008-12-02 12:13:59 UTC (rev 13422) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintViewerApplet.java 2008-12-02 12:23:15 UTC (rev 13423) @@ -34,7 +34,7 @@ public class JChemPaintViewerApplet extends JChemPaintAbstractApplet{ public void init() { - JChemPaintViewerPanel p=new JChemPaintViewerPanel(new ChemModel(),"applet"); + JChemPaintViewerPanel p=new JChemPaintViewerPanel(new ChemModel()); setTheJcpp(p); this.add(p); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-12-02 12:32:59
|
Revision: 13424 http://cdk.svn.sourceforge.net/cdk/?rev=13424&view=rev Author: shk3 Date: 2008-12-02 12:32:57 +0000 (Tue, 02 Dec 2008) Log Message: ----------- cleanup Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/AbstractJChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/AbstractJChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/AbstractJChemPaintPanel.java 2008-12-02 12:23:15 UTC (rev 13423) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/AbstractJChemPaintPanel.java 2008-12-02 12:32:57 UTC (rev 13424) @@ -1,3 +1,31 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 2008 Stefan Kuhn + * + * 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; import javax.swing.JPanel; @@ -5,6 +33,10 @@ import org.openscience.cdk.controller.ControllerHub; import org.openscience.cdk.interfaces.IChemModel; +/** + * An abstract superclass for the viewer and editor panel. + * + */ public abstract class AbstractJChemPaintPanel extends JPanel{ protected RenderPanel renderPanel; Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java 2008-12-02 12:23:15 UTC (rev 13423) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java 2008-12-02 12:32:57 UTC (rev 13424) @@ -35,10 +35,9 @@ public class JChemPaintViewerPanel extends AbstractJChemPaintPanel{ /** - * Builds a JCPPanel with a certain model and a certain gui - * + * Builds a JCPViewerPanel with a certain model + * * @param chemModel The model - * @param gui The gui string */ public JChemPaintViewerPanel(IChemModel chemModel){ this.setLayout(new BorderLayout()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gil...@us...> - 2008-12-02 13:14:04
|
Revision: 13425 http://cdk.svn.sourceforge.net/cdk/?rev=13425&view=rev Author: gilleain Date: 2008-12-02 13:13:59 +0000 (Tue, 02 Dec 2008) Log Message: ----------- Changed RenderPanel to be a lightweight Component, rather than a JPanel. Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-02 12:32:57 UTC (rev 13424) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-02 13:13:59 UTC (rev 13425) @@ -45,6 +45,7 @@ import javax.swing.JMenuBar; import javax.swing.JOptionPane; import javax.swing.JPanel; +import javax.swing.JScrollPane; import javax.swing.JToolBar; import javax.swing.filechooser.FileFilter; @@ -88,8 +89,8 @@ topContainer = new JPanel(new BorderLayout()); topContainer.setLayout(new BorderLayout()); this.add(topContainer,BorderLayout.NORTH); - renderPanel = new RenderPanel(chemModel); - this.add(new javax.swing.JScrollPane(renderPanel),BorderLayout.CENTER); + renderPanel = new RenderPanel(chemModel, this.getWidth(), this.getHeight()); + this.add(new JScrollPane(renderPanel),BorderLayout.CENTER); customizeView(); instances.add(this); chemModel.addListener(this); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java 2008-12-02 12:32:57 UTC (rev 13424) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java 2008-12-02 13:13:59 UTC (rev 13425) @@ -30,6 +30,8 @@ import java.awt.BorderLayout; +import javax.swing.JScrollPane; + import org.openscience.cdk.interfaces.IChemModel; public class JChemPaintViewerPanel extends AbstractJChemPaintPanel{ @@ -41,7 +43,7 @@ */ public JChemPaintViewerPanel(IChemModel chemModel){ this.setLayout(new BorderLayout()); - renderPanel = new RenderPanel(chemModel); - this.add(new javax.swing.JScrollPane(renderPanel),BorderLayout.CENTER); + renderPanel = new RenderPanel(chemModel, this.getWidth(), this.getHeight()); + this.add(new JScrollPane(renderPanel),BorderLayout.CENTER); } } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-12-02 12:32:57 UTC (rev 13424) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-12-02 13:13:59 UTC (rev 13425) @@ -29,6 +29,7 @@ package org.openscience.jchempaint; import java.awt.Color; +import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; @@ -38,8 +39,6 @@ import java.awt.RenderingHints; import java.util.Iterator; -import javax.swing.JPanel; - import org.openscience.cdk.controller.ControllerHub; import org.openscience.cdk.controller.ControllerModel; import org.openscience.cdk.controller.IViewEventRelay; @@ -50,7 +49,7 @@ import org.openscience.cdk.tools.manipulator.ChemModelManipulator; import org.openscience.cdk.tools.manipulator.MolecularFormulaManipulator; -public class RenderPanel extends JPanel implements IViewEventRelay { +public class RenderPanel extends Component implements IViewEventRelay { private IntermediateRenderer renderer; private IChemModel chemModel; @@ -59,10 +58,10 @@ private ControllerModel controllerModel; private SwingMouseEventRelay mouseEventRelay; - public RenderPanel(IChemModel chemModel) { + public RenderPanel(IChemModel chemModel, int width, int height) { this.chemModel = chemModel; this.setupMachinery(); - this.setupPanel(); + this.setupPanel(width, height); this.isNewChemModel = true; } @@ -71,7 +70,7 @@ } public void setChemModel(IChemModel model) { - this.chemModel=model; + this.chemModel = model; } public ControllerHub getHub() { @@ -92,13 +91,14 @@ this.addMouseMotionListener(mouseEventRelay); } - private void setupPanel() { + private void setupPanel(int width, int height) { this.setBackground(Color.WHITE); - this.setPreferredSize(new Dimension(1000, 600)); + this.setPreferredSize(new Dimension(width, height)); } public Image takeSnapshot() { - return this.takeSnapshot(this.getVisibleRect()); +// return this.takeSnapshot(this.getVisibleRect()); + return this.takeSnapshot(this.getBounds()); } public Image takeSnapshot(Rectangle bounds) { @@ -108,13 +108,14 @@ .getDefaultConfiguration() .createCompatibleImage(bounds.width, bounds.height); Graphics g = image.getGraphics(); - super.paint(g); this.paintChemModel(g, bounds); return image; } public void paintChemModel(Graphics g, Rectangle bounds) { if (this.chemModel != null && this.chemModel.getMoleculeSet() != null) { + g.setColor(getBackground()); + g.fillRect(0, 0, this.getWidth(), this.getHeight()); Graphics2D g2 = (Graphics2D)g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); @@ -128,9 +129,9 @@ } public void paint(Graphics g) { - super.paint(g); this.setBackground(renderer.getRenderer2DModel().getBackColor()); - this.paintChemModel(g, this.getVisibleRect()); +// this.paintChemModel(g, this.getVisibleRect()); + this.paintChemModel(g, this.getBounds()); } public void updateView() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gil...@us...> - 2008-12-02 13:32:20
|
Revision: 13427 http://cdk.svn.sourceforge.net/cdk/?rev=13427&view=rev Author: gilleain Date: 2008-12-02 13:32:16 +0000 (Tue, 02 Dec 2008) Log Message: ----------- Hooked up jcp to the fitToScreen parameter. Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-02 13:17:45 UTC (rev 13426) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-02 13:32:16 UTC (rev 13427) @@ -89,7 +89,7 @@ topContainer = new JPanel(new BorderLayout()); topContainer.setLayout(new BorderLayout()); this.add(topContainer,BorderLayout.NORTH); - renderPanel = new RenderPanel(chemModel, this.getWidth(), this.getHeight()); + renderPanel = new RenderPanel(chemModel, this.getWidth(), this.getHeight(), false); this.add(new JScrollPane(renderPanel),BorderLayout.CENTER); customizeView(); instances.add(this); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java 2008-12-02 13:17:45 UTC (rev 13426) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java 2008-12-02 13:32:16 UTC (rev 13427) @@ -43,7 +43,7 @@ */ public JChemPaintViewerPanel(IChemModel chemModel){ this.setLayout(new BorderLayout()); - renderPanel = new RenderPanel(chemModel, this.getWidth(), this.getHeight()); + renderPanel = new RenderPanel(chemModel, this.getWidth(), this.getHeight(), false); this.add(new JScrollPane(renderPanel),BorderLayout.CENTER); } } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-12-02 13:17:45 UTC (rev 13426) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-12-02 13:32:16 UTC (rev 13427) @@ -58,9 +58,10 @@ private ControllerModel controllerModel; private SwingMouseEventRelay mouseEventRelay; - public RenderPanel(IChemModel chemModel, int width, int height) { + public RenderPanel(IChemModel chemModel, int width, int height, + boolean fitToScreen) { this.chemModel = chemModel; - this.setupMachinery(); + this.setupMachinery(fitToScreen); this.setupPanel(width, height); this.isNewChemModel = true; } @@ -77,9 +78,10 @@ return hub; } - private void setupMachinery() { + private void setupMachinery(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 was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-12-02 14:49:56
|
Revision: 13428 http://cdk.svn.sourceforge.net/cdk/?rev=13428&view=rev Author: shk3 Date: 2008-12-02 14:49:53 +0000 (Tue, 02 Dec 2008) Log Message: ----------- more applet stuff Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/NewAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintEditorApplet.java jchempaint/trunk/src/main/org/openscience/jchempaint/application/JChemPaint.java jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JCPGUI_applet.properties Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-02 13:32:16 UTC (rev 13427) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-02 14:49:53 UTC (rev 13428) @@ -49,11 +49,12 @@ import javax.swing.JToolBar; import javax.swing.filechooser.FileFilter; -import org.openscience.cdk.controller.ControllerHub; +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; import org.openscience.jchempaint.action.SaveAction; +import org.openscience.jchempaint.applet.JChemPaintEditorApplet; public class JChemPaintPanel extends AbstractJChemPaintPanel implements IChemObjectListener { @@ -77,13 +78,17 @@ private JToolBar toolbar; private int lines=1; + 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 */ - public JChemPaintPanel(IChemModel chemModel, String gui){ + public JChemPaintPanel(IChemModel chemModel, String gui, int lines){ + this.lines=lines; this.guistring=gui; this.setLayout(new BorderLayout()); topContainer = new JPanel(new BorderLayout()); @@ -343,7 +348,11 @@ return isAlreadyAFile; } - /** + public String getGuistring() { + return guistring; + } + + /** * Set to indicate whether the insert text field should be used. * * @param showInsertTextField true is the text entry widget is to be shown @@ -377,23 +386,18 @@ * @return OptionPane.YES_OPTION/OptionPane.NO_OPTION/OptionPane.CANCEL_OPTION */ public int showWarning() { - if (isModified){ //TODO && !getIsOpenedByViewer() && !guiString.equals("applet")) { + if (isModified && !guistring.equals(JChemPaintEditorApplet.GUI_APPLET)){ //TODO && !getIsOpenedByViewer()) { int answer = JOptionPane.showConfirmDialog(this, renderPanel.getChemModel().getID() + " " + JCPLocalizationHandler.getInstance().getString("warning"), JCPLocalizationHandler.getInstance().getString("warningheader"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); if (answer == JOptionPane.YES_OPTION) { new SaveAction(this, false).actionPerformed(new ActionEvent(this, 12, "")); } return answer; - /* TODO } else if(guiString.equals("applet")){ + } 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; - try { - coa = new ClearAllEdit(this.getChemModel(),(IMoleculeSet)this.getChemModel().getMoleculeSet().clone(),this.getChemModel().getReactionSet()); - this.jchemPaintModel.getControllerModel().getUndoSupport().postEdit(coa); - } catch (Exception e) { - logger.error("Clone of IMoleculeSet failed: ", e.getMessage()); - logger.debug(e); - } - return JOptionPane.YES_OPTION;*/ + //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; } else { return JOptionPane.YES_OPTION; } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/NewAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/NewAction.java 2008-12-02 13:32:16 UTC (rev 13427) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/NewAction.java 2008-12-02 14:49:53 UTC (rev 13428) @@ -30,6 +30,9 @@ import java.awt.event.ActionEvent; +import javax.swing.JOptionPane; + +import org.openscience.jchempaint.applet.JChemPaintEditorApplet; import org.openscience.jchempaint.application.JChemPaint; /** @@ -46,18 +49,18 @@ *@param e Description of the Parameter */ public void actionPerformed(ActionEvent e) { - /*TODO if(jcpPanel.isEmbedded()){ + if(jcpPanel.getGuistring().equals(JChemPaintEditorApplet.GUI_APPLET)){ int clear=jcpPanel.showWarning(); if(clear==JOptionPane.YES_OPTION){ - if(jcpPanel.getJChemPaintModel().getChemModel().getMoleculeSet()!=null) - jcpPanel.getJChemPaintModel().getChemModel().getMoleculeSet().removeAllAtomContainers(); - if(jcpPanel.getJChemPaintModel().getChemModel().getReactionSet()!=null) - jcpPanel.getJChemPaintModel().getChemModel().getReactionSet().removeAllReactions(); - jcpPanel.repaint(); + if(jcpPanel.getChemModel().getMoleculeSet()!=null) + jcpPanel.getChemModel().getMoleculeSet().removeAllAtomContainers(); + if(jcpPanel.getChemModel().getReactionSet()!=null) + jcpPanel.getChemModel().getReactionSet().removeAllReactions(); + jcpPanel.get2DHub().updateView(); } - }else{*/ + }else{ JChemPaint.showEmptyInstance(); - //} + } } } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintEditorApplet.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintEditorApplet.java 2008-12-02 13:32:16 UTC (rev 13427) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintEditorApplet.java 2008-12-02 14:49:53 UTC (rev 13428) @@ -29,17 +29,12 @@ package org.openscience.jchempaint.applet; import org.openscience.cdk.ChemModel; -import org.openscience.cdk.DefaultChemObjectBuilder; -import org.openscience.cdk.interfaces.IAtomContainer; -import org.openscience.cdk.interfaces.IMolecule; -import org.openscience.cdk.layout.StructureDiagramGenerator; -import org.openscience.cdk.smiles.SmilesParser; import org.openscience.jchempaint.JChemPaintPanel; public class JChemPaintEditorApplet extends JChemPaintAbstractApplet{ - + public static final String GUI_APPLET="applet"; public void init() { - JChemPaintPanel p = new JChemPaintPanel(new ChemModel(),"applet"); + JChemPaintPanel p = new JChemPaintPanel(new ChemModel(),GUI_APPLET,2); p.setShowInsertTextField(false); p.setShowStatusBar(false); setTheJcpp(p); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/application/JChemPaint.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/application/JChemPaint.java 2008-12-02 13:32:16 UTC (rev 13427) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/application/JChemPaint.java 2008-12-02 14:49:53 UTC (rev 13428) @@ -49,18 +49,14 @@ import org.apache.commons.cli.UnrecognizedOptionException; import org.openscience.cdk.ChemModel; import org.openscience.cdk.DefaultChemObjectBuilder; -import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IChemFile; import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.interfaces.IChemObject; -import org.openscience.cdk.interfaces.IMolecule; import org.openscience.cdk.io.CMLReader; import org.openscience.cdk.io.INChIReader; import org.openscience.cdk.io.ISimpleChemObjectReader; import org.openscience.cdk.io.MDLV2000Reader; import org.openscience.cdk.io.ReaderFactory; -import org.openscience.cdk.layout.StructureDiagramGenerator; -import org.openscience.cdk.smiles.SmilesParser; import org.openscience.cdk.tools.manipulator.ChemModelManipulator; import org.openscience.jchempaint.JCPLocalizationHandler; import org.openscience.jchempaint.JChemPaintPanel; @@ -69,22 +65,6 @@ public class JChemPaint { public static int instancecounter=1; - - - public static IAtomContainer makeMolecule(String smiles) { - SmilesParser parser = new SmilesParser(DefaultChemObjectBuilder.getInstance()); - try { - IMolecule mol = parser.parseSmiles(smiles); - - StructureDiagramGenerator generator = new StructureDiagramGenerator(); - generator.setMolecule(mol); - generator.generateCoordinates(); - - return (IAtomContainer) generator.getMolecule(); - } catch (Exception e) { - return null; - } - } @SuppressWarnings("static-access") public static void main(String[] args) { Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JCPGUI_applet.properties =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JCPGUI_applet.properties 2008-12-02 13:32:16 UTC (rev 13427) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JCPGUI_applet.properties 2008-12-02 14:49:53 UTC (rev 13428) @@ -104,10 +104,9 @@ # toolbar definition # ####################################################### -toolbar=new open saveAs - \ - undo redo bond - \ - cyclesymbol periodictable enterelement up_bond down_bond plus minus move - \ - eraser lasso select cleanup triangle - square pentagon \ +toolbar= undo redo - bond new \ + cyclesymbol periodictable enterelement up_bond down_bond plus minus - move \ + eraser lasso select cleanup - triangle square pentagon \ hexagon heptagon octagon benzene chemtoolbar= elementtoolbar=C H O N P S F Cl Br I This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gil...@us...> - 2008-12-02 15:52:16
|
Revision: 13429 http://cdk.svn.sourceforge.net/cdk/?rev=13429&view=rev Author: gilleain Date: 2008-12-02 15:52:11 +0000 (Tue, 02 Dec 2008) Log Message: ----------- A particular combination of java.awt.ScrollPane and javax.swing.JPanel is one way to get scrolling to work right. revalidate() is needed from the swing component, and JScrollPane deosn't seem to work right. Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-02 14:49:53 UTC (rev 13428) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-02 15:52:11 UTC (rev 13429) @@ -29,8 +29,10 @@ package org.openscience.jchempaint; import java.awt.BorderLayout; +import java.awt.Container; import java.awt.Image; import java.awt.Rectangle; +import java.awt.ScrollPane; import java.awt.event.ActionEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; @@ -45,7 +47,6 @@ import javax.swing.JMenuBar; import javax.swing.JOptionPane; import javax.swing.JPanel; -import javax.swing.JScrollPane; import javax.swing.JToolBar; import javax.swing.filechooser.FileFilter; @@ -59,24 +60,24 @@ public class JChemPaintPanel extends AbstractJChemPaintPanel implements IChemObjectListener { private JComponent lastActionButton; - private File currentWorkDirectory; - private File lastOpenedFile; - private FileFilter currentOpenFileFilter; - private File isAlreadyAFile; - private boolean isModified=false; - private FileFilter currentSaveFileFilter; - private JCPStatusBar statusBar; - public static List<JChemPaintPanel> instances = new ArrayList<JChemPaintPanel>(); - private boolean showInsertTextField = true; - private InsertTextPanel insertTextPanel = null; - private JPanel topContainer = null; - private boolean showToolBar=true; - private boolean showStatusBar=true; - private boolean showMenuBar=true; - private JMenuBar menu; - private String guistring; - private JToolBar toolbar; - private int lines=1; + private File currentWorkDirectory; + private File lastOpenedFile; + private FileFilter currentOpenFileFilter; + private File isAlreadyAFile; + private boolean isModified = false; + private FileFilter currentSaveFileFilter; + private JCPStatusBar statusBar; + public static List<JChemPaintPanel> instances = new ArrayList<JChemPaintPanel>(); + private boolean showInsertTextField = true; + private InsertTextPanel insertTextPanel = null; + private JPanel topContainer = null; + private boolean showToolBar = true; + private boolean showStatusBar = true; + private boolean showMenuBar = true; + private JMenuBar menu; + private String guistring; + private JToolBar toolbar; + private int lines = 1; public JChemPaintPanel(IChemModel chemModel, String gui){ this(chemModel,gui,1); @@ -89,17 +90,19 @@ */ public JChemPaintPanel(IChemModel chemModel, String gui, int lines){ this.lines=lines; - this.guistring=gui; - this.setLayout(new BorderLayout()); - topContainer = new JPanel(new BorderLayout()); - topContainer.setLayout(new BorderLayout()); - this.add(topContainer,BorderLayout.NORTH); - renderPanel = new RenderPanel(chemModel, this.getWidth(), this.getHeight(), false); - this.add(new JScrollPane(renderPanel),BorderLayout.CENTER); - customizeView(); - instances.add(this); - chemModel.addListener(this); - } + this.guistring = gui; + this.setLayout(new BorderLayout()); + topContainer = new JPanel(new BorderLayout()); + topContainer.setLayout(new BorderLayout()); + this.add(topContainer, BorderLayout.NORTH); + renderPanel = new RenderPanel(chemModel, getWidth(), getHeight(), false); + ScrollPane scroller = new ScrollPane(); + scroller.add(renderPanel); + this.add(scroller, BorderLayout.CENTER); + customizeView(); + instances.add(this); + chemModel.addListener(this); + } /** * Called to force a re-centring of the displayed structure. @@ -127,11 +130,13 @@ */ public void setModified(boolean isModified) { this.isModified = isModified; - if(this.getParent().getParent().getParent().getParent() instanceof JFrame){ - if(isModified) - ((JFrame)this.getParent().getParent().getParent().getParent()).setTitle(renderPanel.getChemModel().getID()+"*"); - else - ((JFrame)this.getParent().getParent().getParent().getParent()).setTitle(renderPanel.getChemModel().getID()); + Container c = this.getParent().getParent().getParent().getParent(); + if (c instanceof JFrame){ + String id = renderPanel.getChemModel().getID(); + if (isModified) + ((JFrame) c).setTitle(id + "*"); + else + ((JFrame) c).setTitle(id); } } @@ -462,7 +467,7 @@ * Closes all currently opened JCP instances. */ public static void closeAllInstances() { - Iterator<JChemPaintPanel> it = ((List<JChemPaintPanel>)((ArrayList<JChemPaintPanel>)instances).clone()).iterator(); + Iterator<JChemPaintPanel> it =((List<JChemPaintPanel>)((ArrayList<JChemPaintPanel>)instances).clone()).iterator(); while (it.hasNext()) { JFrame frame = (JFrame) it.next().getParent().getParent().getParent().getParent(); WindowListener[] wls = (WindowListener[]) (frame.getListeners(WindowListener.class)); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-12-02 14:49:53 UTC (rev 13428) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-12-02 15:52:11 UTC (rev 13429) @@ -29,7 +29,6 @@ package org.openscience.jchempaint; import java.awt.Color; -import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; @@ -39,6 +38,8 @@ import java.awt.RenderingHints; import java.util.Iterator; +import javax.swing.JPanel; + import org.openscience.cdk.controller.ControllerHub; import org.openscience.cdk.controller.ControllerModel; import org.openscience.cdk.controller.IViewEventRelay; @@ -49,7 +50,7 @@ import org.openscience.cdk.tools.manipulator.ChemModelManipulator; import org.openscience.cdk.tools.manipulator.MolecularFormulaManipulator; -public class RenderPanel extends Component implements IViewEventRelay { +public class RenderPanel extends JPanel implements IViewEventRelay { private IntermediateRenderer renderer; private IChemModel chemModel; @@ -85,7 +86,7 @@ this.controllerModel = new ControllerModel(); // connect the Renderer to the Hub - this.hub = new ControllerHub(this.controllerModel, this.renderer, chemModel, this); + this.hub = new ControllerHub(controllerModel, renderer, chemModel, this); // connect mouse events from Panel to the Hub this.mouseEventRelay = new SwingMouseEventRelay(this.hub); @@ -99,7 +100,6 @@ } public Image takeSnapshot() { -// return this.takeSnapshot(this.getVisibleRect()); return this.takeSnapshot(this.getBounds()); } @@ -116,23 +116,42 @@ public void paintChemModel(Graphics g, Rectangle bounds) { if (this.chemModel != null && this.chemModel.getMoleculeSet() != null) { - g.setColor(getBackground()); - g.fillRect(0, 0, this.getWidth(), this.getHeight()); - Graphics2D g2 = (Graphics2D)g; - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - this.renderer.paintChemModel(chemModel, g2, bounds, isNewChemModel); - isNewChemModel = false; + // determine the size the canvas needs to be in order to fit the model + Rectangle screenBounds = renderer.calculateScreenBounds(chemModel); + + if (bounds.contains(screenBounds)) { + this.paintChemModelWithoutChecking(g, bounds); + } else { + Dimension d = + new Dimension(screenBounds.width, screenBounds.height); + this.setPreferredSize(d); + this.revalidate(); + this.paintChemModelWithoutChecking(g, bounds); + } } } + private void paintChemModelWithoutChecking(Graphics g, Rectangle bounds) { + // paint a background of the right color + g.setColor(getBackground()); + g.fillRect(0, 0, bounds.width, bounds.height); + + // set the graphics to antialias + Graphics2D g2 = (Graphics2D)g; + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + + // paint the chem model, and record that it is no longer new + renderer.paintChemModel(chemModel, g2, bounds, isNewChemModel); + isNewChemModel = false; + } + public void setIsNewChemModel(boolean isNewChemModel) { this.isNewChemModel = isNewChemModel; } public void paint(Graphics g) { this.setBackground(renderer.getRenderer2DModel().getBackColor()); -// this.paintChemModel(g, this.getVisibleRect()); this.paintChemModel(g, this.getBounds()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-12-02 16:36:14
|
Revision: 13431 http://cdk.svn.sourceforge.net/cdk/?rev=13431&view=rev Author: shk3 Date: 2008-12-02 16:36:10 +0000 (Tue, 02 Dec 2008) Log Message: ----------- added the select all Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/JCPToolBar.java jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties Added Paths: ----------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JCPToolBar.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JCPToolBar.java 2008-12-02 16:04:12 UTC (rev 13430) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JCPToolBar.java 2008-12-02 16:36:10 UTC (rev 13431) @@ -184,10 +184,8 @@ } b.setRequestFocusEnabled(false); b.setMargin(new Insets(1, 1, 1, 1)); - /*a if(key.equals("bond")) - jcpp.lastAction.add(b); if(key.equals("move")) - jcpp.moveButton=b;*/ + chemPaintPanel.moveButton=b; return b; } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-02 16:04:12 UTC (rev 13430) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-02 16:36:10 UTC (rev 13431) @@ -42,6 +42,7 @@ import java.util.Iterator; import java.util.List; +import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JMenuBar; @@ -78,6 +79,8 @@ private String guistring; private JToolBar toolbar; 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); @@ -445,6 +448,15 @@ } } + public JButton getMoveButton() { + return moveButton; + } + + + public void setMoveButton(JButton moveButton) { + this.moveButton = moveButton; + } + /* (non-Javadoc) * @see org.openscience.cdk.interfaces.IChemObjectListener#stateChanged(org.openscience.cdk.interfaces.IChemObjectChangeEvent) */ Added: jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java 2008-12-02 16:36:10 UTC (rev 13431) @@ -0,0 +1,233 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-05-01 20:15:34 +0100 (Tue, 01 May 2007) $ + * $Revision: 8292 $ + * + * Copyright (C) 2003-2007 The JChemPaint project + * + * Contact: jch...@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.Color; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.openscience.cdk.controller.MoveModule; +import org.openscience.cdk.interfaces.IAtom; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IBond; +import org.openscience.cdk.renderer.Renderer2DModel; +import org.openscience.cdk.tools.manipulator.ChemModelManipulator; + +/** + * This class implements editing options from the 'Edit' menu. + * These actions are implemented: + * <ul> + * <li>cut, deletes all atoms and connected electron containers + * <li>cutSelected, deletes all selected atoms and electron containers + * <li>selectAll, selects all atoms and electron containers + * <li>selectFromChemObject,selects all atoms and electron containers in + * the IChemObject set in the event source + * </ul> + * + * @author hel + * @cdk.created 27. April 2005 + * @cdk.module jchempaint + */ +public class EditAction extends JCPAction { + + private static final long serialVersionUID = -1051272879400028225L; + + public void actionPerformed(ActionEvent event) { + // learn some stuff about event + logger.debug("Event source: ", event.getSource().getClass().getName()); + logger.debug(" IChemObject: ", getSource(event)); + + Renderer2DModel renderModel = jcpPanel.get2DHub().getIJava2DRenderer().getRenderer2DModel(); + org.openscience.cdk.interfaces.IChemModel chemModel = jcpPanel.getChemModel(); + /*if (type.equals("cut")) { + org.openscience.cdk.interfaces.IAtom atomInRange = null; + IChemObject object = getSource(event); + logger.debug("Source of call: ", object); + if (object instanceof Atom) { + atomInRange = (Atom) object; + } + else { + atomInRange = renderModel.getHighlightedAtom(); + } + if (atomInRange != null) { + try{ + Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard(); + IAtomContainer tocopyclone=atomInRange.getBuilder().newAtomContainer(); + tocopyclone.addAtom((IAtom)atomInRange.clone()); + tocopyclone.getAtom(0).setPoint2d(renderModel.getRenderingCoordinate(atomInRange)); + JcpSelection jcpselection=new CopyPasteAction().new JcpSelection(tocopyclone); + sysClip.setContents(jcpselection,null); + }catch(Exception ex){ + //shouldn't happen + ex.printStackTrace(); + } + ChemModelManipulator.removeAtomAndConnectedElectronContainers(chemModel, atomInRange); + } + else { + org.openscience.cdk.interfaces.IBond bond = renderModel.getHighlightedBond(); + if (bond != null) { + ChemModelManipulator.removeElectronContainer(chemModel, bond); + } + } + jcpModel.fireChange(); + } + else if (type.equals("cutSelected")) { + IAtomContainer undoRedoContainer = chemModel.getBuilder().newAtomContainer(); + logger.debug("Deleting all selected atoms..."); + if (renderModel.getSelectedPart() == null || renderModel.getSelectedPart().getAtomCount() == 0) { + JOptionPane.showMessageDialog(jcpPanel, "No selection made. Please select some atoms first!", "Error warning", JOptionPane.WARNING_MESSAGE); + } + else { + IAtomContainer selected = renderModel.getSelectedPart(); + try{ + Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard(); + IAtomContainer tocopyclone=(IAtomContainer)selected.clone(); + for(int i=0;i<tocopyclone.getAtomCount();i++){ + tocopyclone.getAtom(i).setPoint2d(renderModel.getRenderingCoordinate(selected.getAtom(i))); + } + JcpSelection jcpselection=new CopyPasteAction().new JcpSelection(tocopyclone); + sysClip.setContents(jcpselection,null); + }catch(Exception ex){ + //shouldn't happen + ex.printStackTrace(); + } + logger.debug("Found # atoms to delete: ", selected.getAtomCount()); + for (int i = 0; i < selected.getAtomCount(); i++) { + undoRedoContainer.add(selected); + for(int k=0;k<ChemModelManipulator.getRelevantAtomContainer(chemModel,selected.getAtom(i)).getConnectedBondsCount(selected.getAtom(i));k++){ + undoRedoContainer.addBond((IBond)ChemModelManipulator.getRelevantAtomContainer(chemModel,selected.getAtom(i)).getConnectedBondsList(selected.getAtom(i)).get(k)); + } + ChemModelManipulator.removeAtomAndConnectedElectronContainers(chemModel, selected.getAtom(i)); + } + } + renderModel.setSelectedPart(new org.openscience.cdk.AtomContainer()); + RemoveAtomsAndBondsEdit edit = new RemoveAtomsAndBondsEdit(chemModel,undoRedoContainer,"Cut selected"); + jcpPanel.getUndoSupport().postEdit(edit); + jcpModel.fireChange(); + } + else */if (type.equals("selectAll")) { + IAtomContainer wholeModel = chemModel.getBuilder().newAtomContainer(); + Iterator containers = ChemModelManipulator.getAllAtomContainers(chemModel).iterator(); + while (containers.hasNext()) { + wholeModel.add((IAtomContainer)containers.next()); + } + List<IAtom> atoms=new ArrayList<IAtom>(); + for(IAtom atom:wholeModel.atoms()){ + atoms.add(atom); + } + renderModel.getShapeSelection().atoms.addAll(atoms); + List<IBond> bonds=new ArrayList<IBond>(); + for(IBond bond:wholeModel.bonds()){ + bonds.add(bond); + } + renderModel.getShapeSelection().bonds.addAll(bonds); + jcpPanel.getLastActionButton().setBackground(Color.LIGHT_GRAY); + jcpPanel.setLastActionButton(jcpPanel.getMoveButton()); + jcpPanel.getMoveButton().setBackground(Color.GRAY); + jcpPanel.get2DHub().setActiveDrawModule(new MoveModule(jcpPanel.get2DHub())); + } /*else if (type.equals("selectMolecule")) { + IChemObject object = getSource(event); + if (object instanceof Atom) { + renderModel.setSelectedPart(ChemModelManipulator.getRelevantAtomContainer(jcpModel.getChemModel(),(Atom)object)); + } else if (object instanceof org.openscience.cdk.interfaces.IBond) { + renderModel.setSelectedPart(ChemModelManipulator.getRelevantAtomContainer(jcpModel.getChemModel(),(Bond)object)); + } else { + logger.warn("selectMolecule not defined for the calling object ", object); + } + jcpModel.fireChange(); + } else if (type.equals("selectFromChemObject")) { + // FIXME: implement for others than Reaction, Atom, Bond + IChemObject object = getSource(event); + if (object instanceof Atom) { + IAtomContainer container = new org.openscience.cdk.AtomContainer(); + container.addAtom((Atom) object); + renderModel.setSelectedPart(container); + jcpModel.fireChange(); + } + else if (object instanceof org.openscience.cdk.interfaces.IBond) { + IAtomContainer container = new org.openscience.cdk.AtomContainer(); + container.addBond((Bond) object); + renderModel.setSelectedPart(container); + jcpModel.fireChange(); + } + else if (object instanceof Reaction) { + IAtomContainer wholeModel = jcpModel.getChemModel().getBuilder().newAtomContainer(); + Iterator containers = ReactionManipulator.getAllAtomContainers((Reaction)object).iterator(); + while (containers.hasNext()) { + wholeModel.add((IAtomContainer)containers.next()); + } + renderModel.setSelectedPart(wholeModel); + jcpModel.fireChange(); + } + else { + logger.warn("Cannot select everything in : ", object); + } + } + else if (type.equals("selectReactionReactants")) { + IChemObject object = getSource(event); + if (object instanceof Reaction) { + Reaction reaction = (Reaction) object; + IAtomContainer wholeModel = jcpModel.getChemModel().getBuilder().newAtomContainer(); + Iterator containers = MoleculeSetManipulator.getAllAtomContainers(reaction.getReactants()).iterator(); + while (containers.hasNext()) { + wholeModel.add((IAtomContainer)containers.next()); + } + renderModel.setSelectedPart(wholeModel); + jcpModel.fireChange(); + } + else { + logger.warn("Cannot select reactants from : ", object); + } + } + else if (type.equals("selectReactionProducts")) { + IChemObject object = getSource(event); + if (object instanceof Reaction) { + Reaction reaction = (Reaction) object; + IAtomContainer wholeModel = jcpModel.getChemModel().getBuilder().newAtomContainer(); + Iterator containers = MoleculeSetManipulator.getAllAtomContainers(reaction.getProducts()).iterator(); + while (containers.hasNext()) { + wholeModel.add((IAtomContainer)containers.next()); + } + renderModel.setSelectedPart(wholeModel); + jcpModel.fireChange(); + } + else { + logger.warn("Cannot select reactants from : ", object); + } + }*/ + else { + logger.warn("Unsupported EditAction: " + type); + } + jcpPanel.get2DHub().updateView(); + } + +} + Property changes on: jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java ___________________________________________________________________ Added: svn:executable + * Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-12-02 16:04:12 UTC (rev 13430) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-12-02 16:36:10 UTC (rev 13431) @@ -91,7 +91,7 @@ redoAction=org.openscience.cdk.applications.jchempaint.action.RedoAction cutAction=org.openscience.cdk.applications.jchempaint.action.EditAction@cut cutSelectedAction=org.openscience.cdk.applications.jchempaint.action.EditAction@cutSelected -selectAllAction=org.openscience.cdk.applications.jchempaint.action.EditAction@selectAll +selectAllAction=org.openscience.jchempaint.action.EditAction@selectAll selectMoleculeAction=org.openscience.cdk.applications.jchempaint.action.EditAction@selectMolecule copyAction=org.openscience.cdk.applications.jchempaint.action.CopyPasteAction@copy pasteAction=org.openscience.cdk.applications.jchempaint.action.CopyPasteAction@paste This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gil...@us...> - 2008-12-02 17:48:15
|
Revision: 13432 http://cdk.svn.sourceforge.net/cdk/?rev=13432&view=rev Author: gilleain Date: 2008-12-02 17:48:11 +0000 (Tue, 02 Dec 2008) Log Message: ----------- Possible fix for bug in the editor applet. Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintAbstractApplet.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-12-02 16:36:10 UTC (rev 13431) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-12-02 17:48:11 UTC (rev 13432) @@ -62,24 +62,24 @@ public RenderPanel(IChemModel chemModel, int width, int height, boolean fitToScreen) { this.chemModel = chemModel; - this.setupMachinery(fitToScreen); + this.setupMachinery(chemModel, fitToScreen); this.setupPanel(width, height); this.isNewChemModel = true; } public IChemModel getChemModel() { - return chemModel; + return this.hub.getIChemModel(); } public void setChemModel(IChemModel model) { - this.chemModel = model; + this.setupMachinery(model, false); // XXX } public ControllerHub getHub() { return hub; } - private void setupMachinery(boolean fitToScreen) { + private void setupMachinery(IChemModel chemModel, boolean fitToScreen) { // setup the Renderer and the controller 'model' this.renderer = new IntermediateRenderer(); this.renderer.setFitToScreen(fitToScreen); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintAbstractApplet.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintAbstractApplet.java 2008-12-02 16:36:10 UTC (rev 13431) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintAbstractApplet.java 2008-12-02 17:48:11 UTC (rev 13432) @@ -52,7 +52,6 @@ import org.openscience.cdk.smiles.SmilesParser; import org.openscience.jchempaint.AbstractJChemPaintPanel; import org.openscience.jchempaint.InsertTextPanel; -import org.openscience.jchempaint.JChemPaintPanel; import org.openscience.jchempaint.action.CreateSmilesAction; /** @@ -62,7 +61,7 @@ public abstract class JChemPaintAbstractApplet extends JApplet { private AbstractJChemPaintPanel theJcpp = null; //JExternalFrame jexf = null; - private boolean detacheable=false; + private boolean detachable = false; private static String appletInfo = "JChemPaint Applet. See http://cdk.sourceforge.net " + "for more information"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-12-03 14:41:35
|
Revision: 13441 http://cdk.svn.sourceforge.net/cdk/?rev=13441&view=rev Author: shk3 Date: 2008-12-03 14:41:24 +0000 (Wed, 03 Dec 2008) Log Message: ----------- the viewer applet now has showscrollbars parameter Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintViewerApplet.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java 2008-12-03 14:13:28 UTC (rev 13440) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintViewerPanel.java 2008-12-03 14:41:24 UTC (rev 13441) @@ -29,6 +29,7 @@ package org.openscience.jchempaint; import java.awt.BorderLayout; +import java.awt.ScrollPane; import javax.swing.JScrollPane; @@ -41,9 +42,15 @@ * * @param chemModel The model */ - public JChemPaintViewerPanel(IChemModel chemModel){ + public JChemPaintViewerPanel(IChemModel chemModel, int width, int height, boolean fitToScreen){ this.setLayout(new BorderLayout()); - renderPanel = new RenderPanel(chemModel, this.getWidth(), this.getHeight(), false); - this.add(new JScrollPane(renderPanel),BorderLayout.CENTER); + renderPanel = new RenderPanel(chemModel, this.getWidth(), this.getHeight(), fitToScreen); + if(!fitToScreen){ + ScrollPane scroller = new ScrollPane(); + scroller.add(renderPanel); + this.add(scroller, BorderLayout.CENTER); + }else{ + this.add(renderPanel,BorderLayout.CENTER); + } } } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java 2008-12-03 14:13:28 UTC (rev 13440) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java 2008-12-03 14:41:24 UTC (rev 13441) @@ -1,12 +1,12 @@ /* * $RCSfile$ * $Author: egonw $ - * $Date: 2007-05-01 20:15:34 +0100 (Tue, 01 May 2007) $ - * $Revision: 8292 $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ * - * Copyright (C) 2003-2007 The JChemPaint project + * Copyright (C) 1997-2008 Tobias Helmus, Stefan Kuhn * - * Contact: jch...@li... + * 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 @@ -51,10 +51,6 @@ * <li>selectFromChemObject,selects all atoms and electron containers in * the IChemObject set in the event source * </ul> - * - * @author hel - * @cdk.created 27. April 2005 - * @cdk.module jchempaint */ public class EditAction extends JCPAction { Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintViewerApplet.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintViewerApplet.java 2008-12-03 14:13:28 UTC (rev 13440) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintViewerApplet.java 2008-12-03 14:41:24 UTC (rev 13441) @@ -34,7 +34,10 @@ public class JChemPaintViewerApplet extends JChemPaintAbstractApplet{ public void init() { - JChemPaintViewerPanel p=new JChemPaintViewerPanel(new ChemModel()); + boolean fitToScreen=false; + if(this.getParameter("scrollbars")!=null && this.getParameter("scrollbars").equals("false")) + fitToScreen=true; + JChemPaintViewerPanel p=new JChemPaintViewerPanel(new ChemModel(), this.getWidth(), this.getHeight(), fitToScreen); setTheJcpp(p); this.add(p); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-12-03 16:17:35
|
Revision: 13442 http://cdk.svn.sourceforge.net/cdk/?rev=13442&view=rev Author: shk3 Date: 2008-12-03 16:17:31 +0000 (Wed, 03 Dec 2008) Log Message: ----------- copy/paste works Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties Added Paths: ----------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-03 14:41:24 UTC (rev 13441) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-03 16:17:31 UTC (rev 13442) @@ -29,6 +29,7 @@ package org.openscience.jchempaint; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Container; import java.awt.Image; import java.awt.Rectangle; @@ -448,15 +449,6 @@ } } - public JButton getMoveButton() { - return moveButton; - } - - - public void setMoveButton(JButton moveButton) { - this.moveButton = moveButton; - } - /* (non-Javadoc) * @see org.openscience.cdk.interfaces.IChemObjectListener#stateChanged(org.openscience.cdk.interfaces.IChemObjectChangeEvent) */ @@ -488,4 +480,13 @@ frame.dispose(); } } + + /** + * Selects the move button and action as the current action. + */ + public void setMoveAction() { + getLastActionButton().setBackground(Color.LIGHT_GRAY); + setLastActionButton(moveButton); + moveButton.setBackground(Color.GRAY); + } } Added: jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java 2008-12-03 16:17:31 UTC (rev 13442) @@ -0,0 +1,278 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $ + * $Revision: 7634 $ + * + * Copyright (C) 1997-2008 Egon Willighagen, Stefan Kuhn + * + * 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.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.ClipboardOwner; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.event.ActionEvent; +import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.openscience.cdk.ChemFile; +import org.openscience.cdk.DefaultChemObjectBuilder; +import org.openscience.cdk.Molecule; +import org.openscience.cdk.MoleculeSet; +import org.openscience.cdk.controller.MoveModule; +import org.openscience.cdk.geometry.GeometryTools; +import org.openscience.cdk.interfaces.IAtom; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IBond; +import org.openscience.cdk.interfaces.IChemFile; +import org.openscience.cdk.interfaces.IChemModel; +import org.openscience.cdk.interfaces.IMoleculeSet; +import org.openscience.cdk.io.IChemObjectWriter; +import org.openscience.cdk.io.ISimpleChemObjectReader; +import org.openscience.cdk.io.MDLV2000Reader; +import org.openscience.cdk.io.MDLWriter; +import org.openscience.cdk.io.ReaderFactory; +import org.openscience.cdk.layout.StructureDiagramGenerator; +import org.openscience.cdk.layout.TemplateHandler; +import org.openscience.cdk.renderer.Renderer2DModel; +import org.openscience.cdk.smiles.SmilesGenerator; +import org.openscience.cdk.smiles.SmilesParser; +import org.openscience.cdk.tools.manipulator.ChemFileManipulator; + +/** + * Action to copy/paste structures. + * + * @cdk.bug 1288449 + */ +public class CopyPasteAction extends JCPAction{ + + private static final long serialVersionUID = -3343207264261279526L; + + private DataFlavor molFlavor = new DataFlavor( + "chemical/x-mdl-molfile", "mdl mol file format"); + private DataFlavor svgFlavor = new DataFlavor( + "image/svg+xml", "scalable vector graphics"); + private DataFlavor cmlFlavor = new DataFlavor( + "image/cml", "chemical markup language"); + + public void actionPerformed(ActionEvent e) { + try { + handleSystemClipboard(); + logger.info(" type ", type); + logger.debug(" source ", e.getSource()); + Renderer2DModel renderModel = jcpPanel.get2DHub().getIJava2DRenderer().getRenderer2DModel(); + if ("copy".equals(type)) { + IAtomContainer tocopy = jcpPanel.getChemModel().getBuilder().newAtomContainer(); + for(int i=0;i<renderModel.getShapeSelection().atoms.size();i++){ + tocopy.addAtom(renderModel.getShapeSelection().atoms.get(i)); + } + for(int i=0;i<renderModel.getShapeSelection().bonds.size();i++){ + tocopy.addBond(renderModel.getShapeSelection().bonds.get(i)); + if(!tocopy.contains(renderModel.getShapeSelection().bonds.get(i).getAtom(0))) + tocopy.addAtom((renderModel.getShapeSelection().bonds.get(i).getAtom(0))); + if(!tocopy.contains(renderModel.getShapeSelection().bonds.get(i).getAtom(1))) + tocopy.addAtom((renderModel.getShapeSelection().bonds.get(i).getAtom(1))); + } + if (tocopy == null) { + return; + } + Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard(); + JcpSelection jcpselection=new JcpSelection(tocopy); + sysClip.setContents(jcpselection,null); + } else if ("paste".equals(type)) { + Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard(); + Transferable transfer = sysClip.getContents( null ); + ISimpleChemObjectReader reader = null; + // if a MIME type is given ... + if (transfer!=null && (transfer.isDataFlavorSupported (molFlavor))) { + String mol = (String) transfer.getTransferData (molFlavor); + logger.debug("Dataflavor molFlavor found"); + reader = new MDLV2000Reader(new StringReader(mol)); + } else if(transfer!=null && (transfer.isDataFlavorSupported (DataFlavor.stringFlavor))) { + // otherwise, try to use the ReaderFactory... + logger.debug("Dataflavor stringFlavor found"); + String content = (String) transfer.getTransferData (DataFlavor.stringFlavor); + try { + reader = new ReaderFactory().createReader(new StringReader(content)); + } catch (Exception exception) { + logger.warn("Pastes string is not recognized."); + } + } + IAtomContainer topaste = null; + if (reader != null) { + if (reader.accepts(Molecule.class)) { + topaste = (IAtomContainer) reader.read(new Molecule()); + } else if (reader.accepts(ChemFile.class)) { + topaste = new Molecule(); + IChemFile file = (IChemFile)reader.read(new ChemFile()); + Iterator containers = ChemFileManipulator.getAllAtomContainers(file).iterator(); + while (containers.hasNext()) { + topaste.add((IAtomContainer)containers.next()); + } + } + } + if(topaste==null && transfer!=null && (transfer.isDataFlavorSupported (DataFlavor.stringFlavor))) { + try{ + SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); + topaste = sp.parseSmiles((String) transfer.getTransferData (DataFlavor.stringFlavor)); + StructureDiagramGenerator sdg = new StructureDiagramGenerator((Molecule)topaste); + sdg.setTemplateHandler( + new TemplateHandler(topaste.getBuilder()) + ); + sdg.generateCoordinates(); + }catch(Exception ex){ + //we just try smiles + } + } + if (topaste != null) { + //translate the new structure a bit + GeometryTools.translate2D(topaste, renderModel.getHighlightRadiusModel(), renderModel.getHighlightRadiusModel()); //in pixels + IChemModel chemModel = jcpPanel.getChemModel(); + IMoleculeSet moleculeSet = chemModel.getMoleculeSet(); + if (moleculeSet == null) { + moleculeSet = new MoleculeSet(); + } + moleculeSet.addAtomContainer(topaste); + jcpPanel.getChemModel().setMoleculeSet(moleculeSet); + //We select the inserted structure + renderModel.getShapeSelection().clear(); + List<IAtom> atoms=new ArrayList<IAtom>(); + for(IAtom atom:topaste.atoms()){ + atoms.add(atom); + } + renderModel.getShapeSelection().atoms.addAll(atoms); + List<IBond> bonds=new ArrayList<IBond>(); + for(IBond bond:topaste.bonds()){ + bonds.add(bond); + } + renderModel.getShapeSelection().bonds.addAll(bonds); + jcpPanel.setMoveAction(); + jcpPanel.get2DHub().setActiveDrawModule(new MoveModule(jcpPanel.get2DHub())); + jcpPanel.get2DHub().updateView(); + } + } + } catch(Exception ex){ + ex.printStackTrace(); + } + } + + void handleSystemClipboard() + { + Clipboard clipboard = jcpPanel.getToolkit().getSystemClipboard(); + Transferable clipboardContent = clipboard.getContents(this); + DataFlavor flavors[]=clipboardContent.getTransferDataFlavors(); + String text = "System.clipoard content"; + for(int i=0;i<flavors.length;++i) + { + text+="\n\n Name: "+ flavors[i].getHumanPresentableName(); + text+="\n MIME Type: "+flavors[i].getMimeType(); + text+="\n Class: "; + Class cl = flavors[i].getRepresentationClass(); + if(cl==null) text+="null"; + else text+=cl.getName(); + } + logger.debug(text); + } + + class JcpSelection implements Transferable, ClipboardOwner { + private DataFlavor [] supportedFlavors = { + molFlavor, DataFlavor.stringFlavor, svgFlavor, cmlFlavor + }; + String mol; + String smiles; + String svg; + String cml; + + public JcpSelection (IAtomContainer tocopy1) throws Exception{ + Molecule tocopy=new Molecule(tocopy1); + // MDL mol output + StringWriter sw = new StringWriter(); + new MDLWriter(sw).writeMolecule(tocopy); + this.mol=sw.toString(); + SmilesGenerator sg=new SmilesGenerator(); + smiles = sg.createSMILES(tocopy); + // SVG output + /*TODO sw=new StringWriter(); + IChemObjectWriter cow = new SVGWriter(sw); + cow.write(tocopy); + cow.close(); + svg=sw.toString();*/ + // CML output + sw = new StringWriter(); + Class cmlWriterClass = null; + try { + cmlWriterClass = this.getClass().getClassLoader().loadClass("org.openscience.cdk.io.CMLWriter"); + } 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 () { + return (supportedFlavors); + } + + public boolean isDataFlavorSupported (DataFlavor parFlavor) { + for(int i=0;i<supportedFlavors.length;i++){ + if(supportedFlavors[i].equals(parFlavor)) + return true; + } + return false; + } + + public synchronized Object getTransferData (DataFlavor parFlavor) throws UnsupportedFlavorException { + if (parFlavor.equals (molFlavor)) { + return mol; + } else if(parFlavor.equals(DataFlavor.stringFlavor)) { + return smiles; + } else if(parFlavor.equals(cmlFlavor)) { + return cml; + } else if(parFlavor.equals(svgFlavor)) { + return svg; + } else { + throw new UnsupportedFlavorException (parFlavor); + } + } + + public void lostOwnership (Clipboard parClipboard, Transferable parTransferable) { + System.out.println ("Lost ownership"); + } + } +} + Property changes on: jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java ___________________________________________________________________ Added: svn:executable + * Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java 2008-12-03 14:41:24 UTC (rev 13441) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java 2008-12-03 16:17:31 UTC (rev 13442) @@ -145,9 +145,7 @@ bonds.add(bond); } renderModel.getShapeSelection().bonds.addAll(bonds); - jcpPanel.getLastActionButton().setBackground(Color.LIGHT_GRAY); - jcpPanel.setLastActionButton(jcpPanel.getMoveButton()); - jcpPanel.getMoveButton().setBackground(Color.GRAY); + jcpPanel.setMoveAction(); jcpPanel.get2DHub().setActiveDrawModule(new MoveModule(jcpPanel.get2DHub())); } /*else if (type.equals("selectMolecule")) { IChemObject object = getSource(event); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-12-03 14:41:24 UTC (rev 13441) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-12-03 16:17:31 UTC (rev 13442) @@ -93,8 +93,8 @@ cutSelectedAction=org.openscience.cdk.applications.jchempaint.action.EditAction@cutSelected selectAllAction=org.openscience.jchempaint.action.EditAction@selectAll selectMoleculeAction=org.openscience.cdk.applications.jchempaint.action.EditAction@selectMolecule -copyAction=org.openscience.cdk.applications.jchempaint.action.CopyPasteAction@copy -pasteAction=org.openscience.cdk.applications.jchempaint.action.CopyPasteAction@paste +copyAction=org.openscience.jchempaint.action.CopyPasteAction@copy +pasteAction=org.openscience.jchempaint.action.CopyPasteAction@paste addImplHydrogenAction=org.openscience.cdk.applications.jchempaint.action.AddHydrogenAction@implicit makeHydrogenExplicitAction=org.openscience.cdk.applications.jchempaint.action.AddHydrogenAction@explicit makeHydrogenImplicitAction=org.openscience.cdk.applications.jchempaint.action.AddHydrogenAction@allimplicit This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gil...@us...> - 2008-12-03 19:15:44
|
Revision: 13448 http://cdk.svn.sourceforge.net/cdk/?rev=13448&view=rev Author: gilleain Date: 2008-12-03 19:15:38 +0000 (Wed, 03 Dec 2008) Log Message: ----------- - Made an interface for selections (ISelection). - Changed Renderer2DModel to RendererModel (!!). - Created a LogicalSelection class. Modified Paths: -------------- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/HighlightModule.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/RotateModule.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/ISimpleRenderer2D.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/Renderer.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/AtomMassGenerator.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/BasicAtomGenerator.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/BasicBondGenerator.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/BasicGenerator.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/ControllerFeedbackGenerator.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/HighlightGenerator.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/RingGenerator.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/generators/SelectionGenerator.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/visitor/TransformingDrawVisitor.java cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/DrawPolygonTest.java cdk/branches/jchempaint-primary/src/test/org/openscience/cdk/renderer/IntermediateRendererTestPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/action/ModifyDisplaySettingsAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/ModifyRenderOptionsDialog.java jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/ValidateFrame.java Added Paths: ----------- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/ISelection.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/LogicalSelection.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RendererModel.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/selection/LassoSelection.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 jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/editor/RendererModelEditor.java Removed Paths: ------------- 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/Renderer2DModel.java cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/ShapeSelection.java jchempaint/trunk/src/main/org/openscience/jchempaint/dialog/editor/Renderer2DModelEditor.java Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/HighlightModule.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/HighlightModule.java 2008-12-03 17:24:08 UTC (rev 13447) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/HighlightModule.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -28,7 +28,7 @@ import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IBond; -import org.openscience.cdk.renderer.Renderer2DModel; +import org.openscience.cdk.renderer.RendererModel; /** * This should highlight the atom/bond when moving over with the mouse @@ -48,7 +48,7 @@ private IAtom prevHighlightAtom; private IBond prevHighlightBond; - private void updateAtom(IAtom atom, Renderer2DModel model) { + private void updateAtom(IAtom atom, RendererModel model) { if (prevHighlightAtom != atom) { model.setHighlightedAtom(atom); prevHighlightAtom = atom; @@ -58,7 +58,7 @@ } } - private void updateBond(IBond bond, Renderer2DModel model) { + private void updateBond(IBond bond, RendererModel model) { if (prevHighlightBond != bond) { model.setHighlightedBond(bond); prevHighlightBond = bond; @@ -68,7 +68,7 @@ } } - private void unsetHighlights(Renderer2DModel model) { + private void unsetHighlights(RendererModel model) { model.setHighlightedAtom(null); model.setHighlightedBond(null); prevHighlightAtom = null; @@ -79,7 +79,7 @@ public void mouseMove(Point2d worldCoord) { IAtom atom = chemObjectRelay.getClosestAtom(worldCoord); IBond bond = chemObjectRelay.getClosestBond(worldCoord); - Renderer2DModel model = chemObjectRelay.getIJava2DRenderer().getRenderer2DModel(); + RendererModel model = chemObjectRelay.getIJava2DRenderer().getRenderer2DModel(); if (atom == null && bond == null) { if (prevHighlightAtom == null && prevHighlightBond == null) { 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 2008-12-03 17:24:08 UTC (rev 13447) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/RotateModule.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -26,7 +26,8 @@ import javax.vecmath.Point2d; -import org.openscience.cdk.renderer.ShapeSelection; +import org.openscience.cdk.renderer.ISelection; +import org.openscience.cdk.renderer.selection.ShapeSelection; /** * @cdk.module control @@ -41,11 +42,11 @@ } public void mouseClickedDown(Point2d worldCoord) { - ShapeSelection selection = super.chemModelRelay + ISelection selection = super.chemModelRelay .getIJava2DRenderer() .getRenderer2DModel() - .getShapeSelection(); - if (selection.isEmpty()) { + .getSelection(); + if (!selection.isFilled()) { return; } else { rotationAngle = 0.0; Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java 2008-12-03 17:24:08 UTC (rev 13447) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/controller/SelectModule.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -22,7 +22,8 @@ import javax.vecmath.Point2d; -import org.openscience.cdk.renderer.ShapeSelection; +import org.openscience.cdk.renderer.selection.LassoSelection; +import org.openscience.cdk.renderer.selection.ShapeSelection; /** * @cdk.module control @@ -36,11 +37,10 @@ } public void mouseClickedDown(Point2d p) { - this.selection = this.chemModelRelay - .getIJava2DRenderer() - .getRenderer2DModel() - .getShapeSelection(); - this.selection.clear(); + this.selection = new LassoSelection(); + this.chemModelRelay.getIJava2DRenderer() + .getRenderer2DModel() + .setSelection(this.selection); } public void mouseDrag(Point2d from, Point2d to) { Added: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/ISelection.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/ISelection.java (rev 0) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/ISelection.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -0,0 +1,62 @@ +package org.openscience.cdk.renderer; + +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(); + + /** + * If any of the selected bonds are connected to atoms not in the + * selection, return those too. + * + * @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/ISimpleRenderer2D.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/ISimpleRenderer2D.java 2008-12-03 17:24:08 UTC (rev 13447) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/ISimpleRenderer2D.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -65,13 +65,13 @@ * * @param model Model with rendering settings */ - public abstract void setRenderer2DModel(Renderer2DModel model); + public abstract void setRenderer2DModel(RendererModel model); /** * The current rendering settings. * * @return Model with rendering settings */ - public abstract Renderer2DModel getRenderer2DModel(); + public abstract RendererModel getRenderer2DModel(); } \ No newline at end of file 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-03 17:24:08 UTC (rev 13447) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -52,7 +52,7 @@ private AWTFontManager fontManager; - private Renderer2DModel rendererModel; + private RendererModel rendererModel; private ArrayList<IGenerator> generators; @@ -77,7 +77,7 @@ private boolean fitToScreen = false; public IntermediateRenderer() { - this.rendererModel = new Renderer2DModel(); + this.rendererModel = new RendererModel(); this.rendererModel.setHighlightRadiusModel(3.5); this.rendererModel.setBondDistance(0.15); @@ -95,7 +95,7 @@ this.fitToScreen = fitToScreen; } - public Renderer2DModel getRenderer2DModel() { + public RendererModel getRenderer2DModel() { return this.rendererModel; } @@ -348,7 +348,7 @@ return new Rectangle2D.Double(xmin, ymin, w, h); } - public void setRenderer2DModel(Renderer2DModel model) { + public void setRenderer2DModel(RendererModel model) { this.rendererModel = model; } 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-03 17:24:08 UTC (rev 13447) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Java2DRenderer.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -53,13 +53,13 @@ */ public class Java2DRenderer implements IJava2DRenderer { - private Renderer2DModel rendererModel; + private RendererModel rendererModel; private AffineTransform affine; protected LoggingTool logger; IsotopeFactory isotopeFactory; - public Java2DRenderer(final Renderer2DModel model) { + public Java2DRenderer(final RendererModel model) { this.rendererModel = model; logger = new LoggingTool(this); } @@ -1222,11 +1222,11 @@ } } - public Renderer2DModel getRenderer2DModel() { + public RendererModel getRenderer2DModel() { return this.rendererModel; } - public void setRenderer2DModel(final Renderer2DModel model) { + public void setRenderer2DModel(final RendererModel model) { this.rendererModel = model; } } Deleted: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/LassoSelection.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/LassoSelection.java 2008-12-03 17:24:08 UTC (rev 13447) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/LassoSelection.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -1,74 +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.renderer; - -import java.awt.Color; -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(Color color) { - return new PathElement(this.points, color); - } - - 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/LogicalSelection.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/LogicalSelection.java (rev 0) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/LogicalSelection.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -0,0 +1,65 @@ +package org.openscience.cdk.renderer; + +import java.awt.Color; + +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IChemModel; +import org.openscience.cdk.interfaces.IMoleculeSet; +import org.openscience.cdk.renderer.elements.IRenderingElement; +import org.openscience.cdk.tools.manipulator.ChemModelManipulator; + +public class LogicalSelection implements ISelection { + + public enum Type { ALL, NONE }; + + private Type type; + + private IChemModel chemModel; + + public LogicalSelection(LogicalSelection.Type type) { + this.type = type; + } + + public void clear() { + this.type = Type.NONE; + this.chemModel = null; + } + + public IRenderingElement generate(Color color) { + return null; + } + + public IAtomContainer getConnectedAtomContainer() { + if (this.chemModel != null) { + IAtomContainer ac = this.chemModel.getBuilder().newAtomContainer(); + for (IAtomContainer other : + ChemModelManipulator.getAllAtomContainers(chemModel)) { + ac.add(other); + } + return ac; + } + return null; + } + + public boolean isFilled() { + return this.chemModel != null; + } + + public boolean isFinished() { + return true; + } + + public void select(IChemModel chemModel) { + if (this.type == Type.ALL) { + this.chemModel = chemModel; + } + } + + public void select(IAtomContainer atomContainer) { + this.chemModel = atomContainer.getBuilder().newChemModel(); + IMoleculeSet molSet = atomContainer.getBuilder().newMoleculeSet(); + molSet.addAtomContainer(atomContainer); + this.chemModel.setMoleculeSet(molSet); + } + +} Deleted: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RectangleSelection.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RectangleSelection.java 2008-12-03 17:24:08 UTC (rev 13447) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RectangleSelection.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -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.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(Color color) { - return new RectangleElement( - this.rectangle.getMinX(), - this.rectangle.getMinY(), - this.rectangle.getMaxX(), - this.rectangle.getMaxY(), - color); - } - - 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/Renderer.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer.java 2008-12-03 17:24:08 UTC (rev 13447) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -43,7 +43,7 @@ LoggingTool logger = new LoggingTool(Renderer.class); - Renderer2DModel renderer2DModel; + RendererModel renderer2DModel; AffineTransform transform; List<IGenerator> generators; @@ -53,7 +53,7 @@ Point2d center = new Point2d(0, 0); public Renderer(Collection<IGenerator> gen) { - renderer2DModel = new Renderer2DModel(); + renderer2DModel = new RendererModel(); generators = new ArrayList<IGenerator>(gen); dirty = true; } @@ -72,7 +72,7 @@ return null; } - public Renderer2DModel getRenderer2DModel() { + public RendererModel getRenderer2DModel() { return renderer2DModel; } @@ -90,7 +90,7 @@ diagram.accept(renderingVisitor); } - public void setRenderer2DModel(Renderer2DModel model) { + public void setRenderer2DModel(RendererModel model) { renderer2DModel = model; } Deleted: 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-03 17:24:08 UTC (rev 13447) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer2DModel.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -1,799 +0,0 @@ -/* $Revision$ $Author$ $Date$ - * - * Copyright (C) 1997-2007 The Chemistry Development Kit (CDK) project - * - * 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.cdk.renderer; - -import java.awt.Color; -import java.awt.Font; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.EventObject; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.openscience.cdk.event.ICDKChangeListener; -import org.openscience.cdk.interfaces.IAtom; -import org.openscience.cdk.interfaces.IAtomContainer; -import org.openscience.cdk.interfaces.IBond; -import org.openscience.cdk.interfaces.IChemObject; -import org.openscience.cdk.renderer.color.CDK2DAtomColors; -import org.openscience.cdk.renderer.color.IAtomColorer; - -/** - * Model for {@link Renderer2DModel} that contains settings for drawing objects. - * - * @cdk.module render - * @cdk.svnrev $Revision$ - */ -public class Renderer2DModel implements Serializable, Cloneable { - - 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>(); - - /** Determines how much the image is zoomed into on. */ - private double zoomFactor = 1.0; - - /** - * The color hash is used to color substructures. - * - * @see #getColorHash() - */ - private Map<IChemObject, Color> colorHash = new Hashtable<IChemObject, Color>(); - - private Map<IAtom, String> toolTipTextMap = new HashMap<IAtom, String>(); - - private IAtomColorer colorer = new CDK2DAtomColors(); - - private IAtom highlightedAtom = null; - - private IBond highlightedBond = null; - - private IAtomContainer selectedPart = null; - - private IAtomContainer externalSelectedPart = null; - - private IAtomContainer clipboardContent = null; - - private ShapeSelection shapeSelection = new LassoSelection(); - - public Renderer2DModel() { - this.parameters = new RenderingParameters(); - } - - public Renderer2DModel(RenderingParameters parameters) { - this.parameters = parameters; - } - - public void setShapeSelection(ShapeSelection shapeSelection) { - this.shapeSelection = shapeSelection; - } - - public ShapeSelection getShapeSelection() { - return this.shapeSelection; - } - - public RenderingParameters.SelectionShape getSelectionShape() { - return this.parameters.getSelectionShape(); - } - - public void setSelectionShape(RenderingParameters.SelectionShape selectionShape) { - this.parameters.setSelectionShape(selectionShape); - } - - /** - * @return null if no custom font set - */ - public Font getFont() { - return this.parameters.getCustomFont(); - } - - public void setFont(Font customFont) { - this.parameters.setCustomFont(customFont); - fireChange(); - } - - public boolean getIsCompact() { - return this.parameters.isCompact(); - } - - public void setIsCompact(boolean compact) { - this.parameters.setCompact(compact); - } - - public boolean getUseAntiAliasing() { - return this.parameters.isUseAntiAliasing(); - } - - public void setUseAntiAliasing(boolean bool) { - this.parameters.setUseAntiAliasing(bool); - fireChange(); - } - - public boolean getShowReactionBoxes() { - return this.parameters.isShowReactionBoxes(); - } - - public void setShowReactionBoxes(boolean bool) { - this.parameters.setShowReactionBoxes(bool); - fireChange(); - } - - public boolean getShowMoleculeTitle() { - return this.parameters.isShowMoleculeTitle(); - } - - public void setShowMoleculeTitle(boolean bool) { - this.parameters.setShowMoleculeTitle(bool); - fireChange(); - } - - /** - * 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.parameters.getBondDistance(); - } - - /** - * 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.parameters.setBondDistance(bondDistance); - fireChange(); - } - - /** - * Returns the thickness of a bond line. - * - * @return the thickness of a bond line - */ - public double getBondWidth() { - return this.parameters.getBondDistance(); - } - - /** - * 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(); - } - - /** - * A zoom factor for the drawing. - * - * @return a zoom factor for the drawing - */ - public double getZoomFactor() { - return this.zoomFactor; - } - - /** - * Returns the zoom factor for the drawing. - * - * @param zoomFactor - * the zoom factor for the drawing - */ - public void setZoomFactor(double zoomFactor) { - this.zoomFactor = zoomFactor; - fireChange(); - } - - /** - * Returns the foreground color for the drawing. - * - * @return the foreground color for the drawing - */ - public Color getForeColor() { - return this.parameters.getForeColor(); - } - - /** - * 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(); - } - - /** - * Returns the background color - * - * @return the background color - */ - public Color getBackColor() { - return this.parameters.getBackColor(); - } - - /** - * Sets the background color - * - * @param backColor - * the background color - */ - public void setBackColor(Color backColor) { - this.parameters.setBackColor(backColor); - fireChange(); - } - - /** - * Returns the atom-atom mapping line color - * - * @return the atom-atom mapping line color - */ - public Color getAtomAtomMappingLineColor() { - return this.parameters.getMappingColor(); - } - - /** - * Sets the atom-atom mapping line color - * - * @param mappingColor - * the atom-atom mapping line color - */ - public void setAtomAtomMappingLineColor(Color 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.parameters.isWillDrawNumbers(); - } - - public boolean getKekuleStructure() { - return this.parameters.isKekuleStructure(); - } - - public void setKekuleStructure(boolean kekule) { - this.parameters.setKekuleStructure(kekule); - fireChange(); - } - - public boolean getColorAtomsByType() { - return this.parameters.isColorAtomsByType(); - } - - public void setColorAtomsByType(boolean bool) { - this.parameters.setColorAtomsByType(bool); - fireChange(); - } - - public boolean getShowEndCarbons() { - return this.parameters.isShowEndCarbons(); - } - - public void setShowEndCarbons(boolean showThem) { - this.parameters.setShowEndCarbons(showThem); - fireChange(); - } - - public boolean getShowImplicitHydrogens() { - return this.parameters.isShowImplicitHydrogens(); - } - - public void setShowImplicitHydrogens(boolean showThem) { - this.parameters.setShowImplicitHydrogens(showThem); - fireChange(); - } - - public boolean getShowExplicitHydrogens() { - return this.parameters.isShowExplicitHydrogens(); - } - - public void setShowExplicitHydrogens(boolean showThem) { - this.parameters.setShowExplicitHydrogens(showThem); - fireChange(); - } - - public boolean getShowAromaticity() { - return this.parameters.isShowAromaticity(); - } - - public void setShowAromaticity(boolean showIt) { - this.parameters.setShowAromaticity(showIt); - fireChange(); - } - - public boolean getShowAromaticityInCDKStyle() { - return this.parameters.isShowAromaticityInCDKStyle(); - } - - public void setShowAromaticityInCDKStyle(boolean 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.parameters.setWillDrawNumbers(drawNumbers); - fireChange(); - } - - /** - * 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(); - } - - /** - * 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 whether Atom-Atom mapping must be shown. - */ - public boolean getShowAtomAtomMapping() { - return this.parameters.isShowAtomAtomMapping(); - } - - /** - * Sets whether Atom-Atom mapping must be shown. - */ - public void setShowAtomAtomMapping(boolean value) { - this.parameters.setShowAtomAtomMapping(value); - fireChange(); - } - - /** - * XXX No idea what this is about. - */ - public int getAtomRadius() { - 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.parameters.setAtomRadius(atomRadius); - fireChange(); - } - - /** - * 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) { - 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; - } - - /** - * 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 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) { - return defaultColor; - } - - Color atomColor = defaultColor; - if (this.parameters.isColorAtomsByType()) { - // logger.debug("Coloring atom by type"); - atomColor = colorer.getAtomColor(atom); - } - // logger.debug("Color: " + atomColor.toString()); - return atomColor; - } - - /** - * Returns the background color of the given atom. - */ - public Color getAtomBackgroundColor(IAtom atom) { - // logger.debug("Getting atom back color for " + atom.toString()); - Color atomColor = getBackColor(); - // logger.debug(" BackColor: " + atomColor.toString()); - Color hashColor = (Color) this.getColorHash().get(atom); - if (hashColor != null) { - // logger.debug( - // "Background color atom according to hashing (substructure)"); - atomColor = hashColor; - } - // logger.debug("Color: " + atomColor.toString()); - return atomColor; - } - - /** - * Returns the current atom colorer. - * - * @return The AtomColorer. - */ - public IAtomColorer getAtomColorer() { - return colorer; - } - - /** - * Sets the atom colorer. - * - * @param atomColorer - * the new colorer. - */ - 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; - 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; - } - - /** - * 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(); - } - - /** - * Adds a change listener to the list of listeners - * - * @param listener - * The listener added to the list - */ - - 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); - } - - /** - * 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; - } - } - - /** - * Sets the showTooltip attribute. - * - * @param showToolTip - * The new value. - */ - public void setShowTooltip(boolean showTooltip) { - this.parameters.setShowTooltip(showTooltip); - fireChange(); - } - - /** - * Gets showTooltip attribute. - * - * @return The showTooltip value. - */ - public boolean getShowTooltip() { - return this.parameters.isShowTooltip(); - } - - /** - * 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; - } - - /** - * Gets the color used for drawing the part which was selected externally - */ - public Color getExternalHighlightColor() { - return this.parameters.getExternalHighlightColor(); - } - - /** - * 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); - } - - /** - * 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); - } - - /** - * 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); - } - - /** - * 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; - } - - /** - * Set externally selected atoms. These are atoms selected externally in e. - * g. Bioclipse via the ChemObjectTree, painted in externalSelectedPartColor - * - * @param externalSelectedPart - * the selected part - */ - public void setExternalSelectedPart(IAtomContainer externalSelectedPart) { - this.externalSelectedPart = externalSelectedPart; - getColorHash().clear(); - for (int i = 0; i < externalSelectedPart.getAtomCount(); i++) { - getColorHash().put(externalSelectedPart.getAtom(i), - this.getExternalHighlightColor()); - } - Iterator<IBond> bonds = externalSelectedPart.bonds().iterator(); - while (bonds.hasNext()) { - getColorHash().put(bonds.next(), getExternalHighlightColor()); - } - fireChange(); - } - - public boolean getNotification() { - return notification; - } - - public void setNotification(boolean notification) { - this.notification = notification; - } - - public boolean showAtomTypeNames() { - return this.parameters.isShowAtomTypeNames(); - } - - public void setShowAtomTypeNames(boolean showAtomTypeNames) { - this.parameters.setShowAtomTypeNames(showAtomTypeNames); - } - - public double getMargin() { - return this.parameters.getMargin(); - } - - public void setMargin(double margin) { - this.parameters.setMargin(margin); - } -} Copied: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RendererModel.java (from rev 13446, cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/Renderer2DModel.java) =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RendererModel.java (rev 0) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/RendererModel.java 2008-12-03 19:15:38 UTC (rev 13448) @@ -0,0 +1,800 @@ +/* $Revision$ $Author$ $Date$ + * + * Copyright (C) 1997-2007 The Chemistry Development Kit (CDK) project + * + * 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.cdk.renderer; + +import java.awt.Color; +import java.awt.Font; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.EventObject; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.openscience.cdk.event.ICDKChangeListener; +import org.openscience.cdk.interfaces.IAtom; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IBond; +import org.openscience.cdk.interfaces.IChemObject; +import org.openscience.cdk.renderer.color.CDK2DAtomColors; +import org.openscience.cdk.renderer.color.IAtomColorer; +import org.openscience.cdk.renderer.selection.LassoSelection; + +/** + * Model for {@link RendererModel} that contains settings for drawing objects. + * + * @cdk.module render + * @cdk.svnrev $Revision$ + */ +public class RendererModel implements Serializable, Cloneable { + + 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>(); + + /** Determines how much the image is zoomed into on. */ + private double zoomFactor = 1.0; + + /** + * The color hash is used to color substructures. + * + * @see #getColorHash() + */ + private Map<IChemObject, Color> colorHash = new Hashtable<IChemObject, Color>(); + + private Map<IAtom, String> toolTipTextMap = new HashMap<IAtom, String>(); + + private IAtomColorer colorer = new CDK2DAtomColors(); + + private IAtom highlightedAtom = null; + + private IBond highlightedBond = null; + + private IAtomContainer selectedPart = null; + + private IAtomContainer externalSelectedPart = null; + + private IAtomContainer clipboardContent = null; + + private ISelection selection = new LassoSelection(); + + public RendererModel() { + this.parameters = new RenderingParameters(); + } + + public RendererModel(RenderingParameters parameters) { + this.parameters = parameters; + } + + public void setSelection(ISelection selection) { + this.selection = selection; + } + + public ISelection getSelection() { + return this.selection; + } + + public RenderingParameters.SelectionShape getSelectionShape() { + return this.parameters.getSelectionShape(); + } + + public void setSelectionShape(RenderingParameters.SelectionShape selectionShape) { + this.parameters.setSelectionShape(selectionShape); + } + + /** + * @return null if no custom font set + */ + public Font getFont() { + return this.parameters.getCustomFont(); + } + + public void setFont(Font customFont) { + this.parameters.setCustomFont(customFont); + fireChange(); + } + + public boolean getIsCompact() { + return this.parameters.isCompact(); + } + + public void setIsCompact(boolean compact) { + this.parameters.setCompact(compact); + } + + public boolean getUseAntiAliasing() { + return this.parameters.isUseAntiAliasing(); + } + + public void setUseAntiAliasing(boolean bool) { + this.parameters.setUseAntiAliasing(bool); + fireChange(); + } + + public boolean getShowReactionBoxes() { + return this.parameters.isShowReactionBoxes(); + } + + public void setShowReactionBoxes(boolean bool) { + this.parameters.setShowReactionBoxes(bool); + fireChange(); + } + + public boolean getShowMoleculeTitle() { + return this.parameters.isShowMoleculeTitle(); + } + + public void setShowMoleculeTitle(boolean bool) { + this.parameters.setShowMoleculeTitle(bool); + fireChange(); + } + + /** + * 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.parameters.getBondDistance(); + } + + /** + * 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.parameters.setBondDistance(bondDistance); + fireChange(); + } + + /** + * Returns the thickness of a bond line. + * + * @return the thickness of a bond line + */ + public double getBondWidth() { + return this.parameters.getBondDistance(); + } + + /** + * 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(); + } + + /** + * A zoom factor for the drawing. + * + * @return a zoom factor for the drawing + */ + public double getZoomFactor() { + return this.zoomFactor; + } + + /** + * Returns the zoom factor for the drawing. + * + * @param zoomFactor + * the zoom factor for the drawing + */ + public void setZoomFactor(double zoomFactor) { + this.zoomFactor = zoomFactor; + fireChange(); + } + + /** + * Returns the foreground color for the drawing. + * + * @return the foreground color for the drawing + */ + public Color getForeColor() { + return this.parameters.getForeColor(); + } + + /** + * 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(); + } + + /** + * Returns the background color + * + * @return the background color + */ + public Color getBackColor() { + return this.parameters.getBackColor(); + } + + /** + * Sets the background color + * + * @param backColor + * the background color + */ + public void setBackColor(Color backColor) { + this.parameters.setBackColor(backColor); + fireChange(); + } + + /** + * Returns the atom-atom mapping line color + * + * @return the atom-atom mapping line color + */ + public Color getAtomAtomMappingLineColor() { + return this.parameters.getMappingColor(); + } + + /** + * Sets the atom-atom mapping line color + * + * @param mappingColor + * the atom-atom mapping line color + */ + public void setAtomAtomMappingLineColor(Color 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.parameters.isWillDrawNumbers(); + } + + public boolean getKekuleStructure() { + return this.parameters.isKekuleStructure(); + } + + public void setKekuleStructure(boolean kekule) { + this.parameters.setKekuleStructure(kekule); + fireChange(); + } + + public boolean getColorAtomsByType() { + return this.parameters.isColorAtomsByType(); + } + + public void setColorAtomsByType(boolean bool) { + this.parameters.setColorAtomsByType(bool); + fireChange(); + } + + public boolean getShowEndCarbons() { + return this.parameters.isShowEndCarbons(); + } + + public void setShowEndCarbons(boolean showThem) { + this.parameters.setShowEndCarbons(showThem); + fireChange(); + } + + public boolean getShowImplicitHydrogens() { + return this.parameters.isShowImplicitHydrogens(); + } + + public void setShowImplicitHydrogens(boolean showThem) { + this.parameters.setShowImplicitHydrogens(showThem); + fireChange(); + } + + public boolean getShowExplicitHydrogens() { + return this.parameters.isShowExplicitHydrogens(); + } + + public void setShowExplicitHydrogens(boolean showThem) { + this.parameters.setShowExplicitHydrogens(showThem); + fireChange(); + } + + public boolean getShowAromaticity() { + return this.parameters.isShowAromaticity(); + } + + public void setShowAromaticity(boolean showIt) { + this.parameters.setShowAromaticity(showIt); + fireChange(); + } + + public boolean getShowAromaticityInCDKStyle() { + return this.parameters.isShowAromaticityInCDKStyle(); + } + + public void setShowAromaticityInCDKStyle(boolean 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.parameters.setWillDrawNumbers(drawNumbers); + fireChange(); + } + + /** + * 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(); + } + + /** + * 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 whether Atom-Atom mapping must be shown. + */ + public boolean getShowAtomAtomMapping() { + return this.parameters.isShowAtomAtomMapping(); + } + + /** + * Sets whether Atom-Atom mapping must be shown. + */ + public void setShowAtomAtomMapping(boolean value) { + this.parameters.setShowAtomAtomMapping(value); + fireChange(); + } + + /** + * XXX No idea what this is about. + */ + public int getAtomRadius() { + 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.parameters.setAtomRadius(atomRadius); + fireChange();... [truncated message content] |
From: <sh...@us...> - 2008-12-04 13:43:11
|
Revision: 13467 http://cdk.svn.sourceforge.net/cdk/?rev=13467&view=rev Author: shk3 Date: 2008-12-04 13:43:06 +0000 (Thu, 04 Dec 2008) Log Message: ----------- the applet is now detachable Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/AbstractJChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintAbstractApplet.java jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintEditorApplet.java jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintViewerApplet.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/AbstractJChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/AbstractJChemPaintPanel.java 2008-12-04 13:03:20 UTC (rev 13466) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/AbstractJChemPaintPanel.java 2008-12-04 13:43:06 UTC (rev 13467) @@ -42,6 +42,15 @@ protected RenderPanel renderPanel; /** + * + * + * @return + */ + public RenderPanel getRenderPanel() { + return renderPanel; + } + + /** * Return the ControllerHub of this JCPPanel * * @return The ControllerHub Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintAbstractApplet.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintAbstractApplet.java 2008-12-04 13:03:20 UTC (rev 13466) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintAbstractApplet.java 2008-12-04 13:43:06 UTC (rev 13467) @@ -30,6 +30,8 @@ package org.openscience.jchempaint.applet; import java.awt.Color; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; @@ -61,6 +63,7 @@ import org.openscience.cdk.tools.manipulator.ChemModelManipulator; import org.openscience.jchempaint.AbstractJChemPaintPanel; import org.openscience.jchempaint.InsertTextPanel; +import org.openscience.jchempaint.JExternalFrame; import org.openscience.jchempaint.action.CreateSmilesAction; /** @@ -71,6 +74,8 @@ private AbstractJChemPaintPanel theJcpp = null; //JExternalFrame jexf = null; private boolean detachable = false; + private boolean detacheable; + private JExternalFrame jexf; private static String appletInfo = "JChemPaint Applet. See http://cdk.sourceforge.net " + "for more information"; @@ -86,7 +91,7 @@ { "hightlightTable", "true or false", "TODO if true peaks in a table will be highlighted when hovering over atom, ids are assumed to be tableid$atomnumber (default false)"}, { "smiles", "string", "a structure to load as smiles"}, { "scrollbars", "true or false", "if the molecule is too big to be displayed in normal size, shall scrollbars be used (default) or the molecule be resized - only for viewer applet"}, - { "detachable", "true or false", "TODO should the applet be detacheable by a double click (default false)"} + { "detachable", "true or false", "should the applet be detacheable by a double click (default false)"} }; @Override @@ -235,7 +240,7 @@ @Override public void init(){ - //TODO prepareExternalFrame(); + prepareExternalFrame(); } @Override @@ -363,42 +368,47 @@ repaint(); } - public void selectAtom(int atom){ - Renderer2DModel rendererModel = theJcpp.get2DHub().getIJava2DRenderer().getRenderer2DModel(); - IChemModel chemModel = theJcpp.getChemModel(); - rendererModel.setExternalHighlightColor(Color.RED); - IAtomContainer ac=chemModel.getMoleculeSet().getBuilder().newAtomContainer(); - ac.addAtom(chemModel.getMoleculeSet().getMolecule(0).getAtom(atom)); - rendererModel.setExternalSelectedPart(ac); - getTheJcpp().repaint(); - } + /** + * A method for highlighting atoms from JavaScript + * + * @param atom The atom number (starting with 0) + */ + public void selectAtom(int atom){ + Renderer2DModel rendererModel = theJcpp.get2DHub().getIJava2DRenderer().getRenderer2DModel(); + IChemModel chemModel = theJcpp.getChemModel(); + rendererModel.setExternalHighlightColor(Color.RED); + IAtomContainer ac=chemModel.getMoleculeSet().getBuilder().newAtomContainer(); + ac.addAtom(chemModel.getMoleculeSet().getMolecule(0).getAtom(atom)); + rendererModel.setExternalSelectedPart(ac); + getTheJcpp().repaint(); + } /** * @return Returns the jexf. */ -// TODO private JExternalFrame getJexf() { -// if (jexf == null) -// jexf = new JExternalFrame(); -// return jexf; -// } + private JExternalFrame getJexf() { + if (jexf == null) + jexf = new JExternalFrame(); + return jexf; + } /** * sets title for external frame * adds listener for double clicks in order to open external frame */ -// TODO private void prepareExternalFrame() { -// if (this.getParameter("name") != null) -// getJexf().setTitle(this.getParameter("name")); -// if(getParameter("detachable")!=null && getParameter("detachable").equals("true")){ -// detacheable=true; -// getTheJcpp().getDrawingPanel().addMouseListener(new MouseAdapter() { -// public void mousePressed(MouseEvent e) { -// if (e.getButton() == 1 && e.getClickCount() == 2) -// if (!getJexf().isShowing()) { -// getJexf().show(getTheJcpp()); -// } -// } -// }); -// } -// } + private void prepareExternalFrame() { + if (this.getParameter("name") != null) + getJexf().setTitle(this.getParameter("name")); + if(getParameter("detachable")!=null && getParameter("detachable").equals("true")){ + detacheable=true; + getTheJcpp().getRenderPanel().addMouseListener(new MouseAdapter() { + public void mousePressed(MouseEvent e) { + if (e.getButton() == 1 && e.getClickCount() == 2) + if (!getJexf().isShowing()) { + getJexf().show(getTheJcpp()); + } + } + }); + } + } } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintEditorApplet.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintEditorApplet.java 2008-12-04 13:03:20 UTC (rev 13466) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintEditorApplet.java 2008-12-04 13:43:06 UTC (rev 13467) @@ -39,6 +39,7 @@ p.setShowStatusBar(false); setTheJcpp(p); this.add(p); + super.init(); } } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintViewerApplet.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintViewerApplet.java 2008-12-04 13:03:20 UTC (rev 13466) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintViewerApplet.java 2008-12-04 13:43:06 UTC (rev 13467) @@ -40,6 +40,7 @@ JChemPaintViewerPanel p=new JChemPaintViewerPanel(new ChemModel(), this.getWidth(), this.getHeight(), fitToScreen); setTheJcpp(p); this.add(p); + super.init(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-12-09 16:18:19
|
Revision: 13513 http://cdk.svn.sourceforge.net/cdk/?rev=13513&view=rev Author: shk3 Date: 2008-12-09 16:18:14 +0000 (Tue, 09 Dec 2008) Log Message: ----------- added cut selection Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java 2008-12-09 07:12:34 UTC (rev 13512) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/EditAction.java 2008-12-09 16:18:14 UTC (rev 13513) @@ -28,20 +28,24 @@ */ package org.openscience.jchempaint.action; -import java.awt.Color; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; +import javax.swing.JOptionPane; + +import org.openscience.cdk.Atom; +import org.openscience.cdk.applications.undoredo.RemoveAtomsAndBondsEdit; import org.openscience.cdk.controller.MoveModule; 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.interfaces.IChemObject; import org.openscience.cdk.renderer.LogicalSelection; import org.openscience.cdk.renderer.RendererModel; import org.openscience.cdk.tools.manipulator.ChemModelManipulator; +import org.openscience.jchempaint.action.CopyPasteAction.JcpSelection; /** * This class implements editing options from the 'Edit' menu. @@ -65,7 +69,7 @@ RendererModel renderModel = jcpPanel.get2DHub().getIJava2DRenderer().getRenderer2DModel(); IChemModel chemModel = jcpPanel.getChemModel(); - /*if (type.equals("cut")) { + if (type.equals("cut")) { org.openscience.cdk.interfaces.IAtom atomInRange = null; IChemObject object = getSource(event); logger.debug("Source of call: ", object); @@ -80,7 +84,6 @@ Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard(); IAtomContainer tocopyclone=atomInRange.getBuilder().newAtomContainer(); tocopyclone.addAtom((IAtom)atomInRange.clone()); - tocopyclone.getAtom(0).setPoint2d(renderModel.getRenderingCoordinate(atomInRange)); JcpSelection jcpselection=new CopyPasteAction().new JcpSelection(tocopyclone); sysClip.setContents(jcpselection,null); }catch(Exception ex){ @@ -95,22 +98,18 @@ ChemModelManipulator.removeElectronContainer(chemModel, bond); } } - jcpModel.fireChange(); } else if (type.equals("cutSelected")) { IAtomContainer undoRedoContainer = chemModel.getBuilder().newAtomContainer(); logger.debug("Deleting all selected atoms..."); - if (renderModel.getSelectedPart() == null || renderModel.getSelectedPart().getAtomCount() == 0) { + if (renderModel.getSelection().getConnectedAtomContainer() == null || renderModel.getSelection().getConnectedAtomContainer().getAtomCount() == 0) { JOptionPane.showMessageDialog(jcpPanel, "No selection made. Please select some atoms first!", "Error warning", JOptionPane.WARNING_MESSAGE); } else { - IAtomContainer selected = renderModel.getSelectedPart(); + IAtomContainer selected = renderModel.getSelection().getConnectedAtomContainer(); try{ Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard(); IAtomContainer tocopyclone=(IAtomContainer)selected.clone(); - for(int i=0;i<tocopyclone.getAtomCount();i++){ - tocopyclone.getAtom(i).setPoint2d(renderModel.getRenderingCoordinate(selected.getAtom(i))); - } JcpSelection jcpselection=new CopyPasteAction().new JcpSelection(tocopyclone); sysClip.setContents(jcpselection,null); }catch(Exception ex){ @@ -126,12 +125,9 @@ ChemModelManipulator.removeAtomAndConnectedElectronContainers(chemModel, selected.getAtom(i)); } } - renderModel.setSelectedPart(new org.openscience.cdk.AtomContainer()); - RemoveAtomsAndBondsEdit edit = new RemoveAtomsAndBondsEdit(chemModel,undoRedoContainer,"Cut selected"); - jcpPanel.getUndoSupport().postEdit(edit); - jcpModel.fireChange(); + renderModel.setSelection(new LogicalSelection(LogicalSelection.Type.NONE)); } - else */if (type.equals("selectAll")) { + else if (type.equals("selectAll")) { renderModel.setSelection(new LogicalSelection(LogicalSelection.Type.ALL)); jcpPanel.setMoveAction(); jcpPanel.get2DHub().setActiveDrawModule(new MoveModule(jcpPanel.get2DHub())); Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-12-09 07:12:34 UTC (rev 13512) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/resources/JChemPaintResources.properties 2008-12-09 16:18:14 UTC (rev 13513) @@ -90,7 +90,7 @@ undoAction=org.openscience.cdk.applications.jchempaint.action.UndoAction redoAction=org.openscience.cdk.applications.jchempaint.action.RedoAction cutAction=org.openscience.cdk.applications.jchempaint.action.EditAction@cut -cutSelectedAction=org.openscience.cdk.applications.jchempaint.action.EditAction@cutSelected +cutSelectedAction=org.openscience.jchempaint.action.EditAction@cutSelected selectAllAction=org.openscience.jchempaint.action.EditAction@selectAll selectMoleculeAction=org.openscience.cdk.applications.jchempaint.action.EditAction@selectMolecule copyAction=org.openscience.jchempaint.action.CopyPasteAction@copy This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sh...@us...> - 2008-12-10 15:08:17
|
Revision: 13518 http://cdk.svn.sourceforge.net/cdk/?rev=13518&view=rev Author: shk3 Date: 2008-12-10 15:08:14 +0000 (Wed, 10 Dec 2008) Log Message: ----------- and now we use the change just committed to show popups Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java Added Paths: ----------- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPopupMenu.java jchempaint/trunk/src/main/org/openscience/jchempaint/SwingPopupModule.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-10 15:07:00 UTC (rev 13517) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPanel.java 2008-12-10 15:08:14 UTC (rev 13518) @@ -52,6 +52,11 @@ import javax.swing.JToolBar; import javax.swing.filechooser.FileFilter; +import org.openscience.cdk.Atom; +import org.openscience.cdk.Bond; +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; @@ -103,10 +108,37 @@ this.add(new JScrollPane(renderPanel), BorderLayout.CENTER); customizeView(); + SwingPopupModule inputAdapter = new SwingPopupModule(renderPanel, renderPanel.getHub()); + setupPopupMenus(inputAdapter); + renderPanel.getHub().registerGeneralControllerModule(inputAdapter); instances.add(this); chemModel.addListener(this); } + public void setupPopupMenus(SwingPopupModule inputAdapter) + { + if (inputAdapter.getPopupMenu(Atom.class) == null) + { + inputAdapter.setPopupMenu(Atom.class, new JChemPaintPopupMenu(this, "atom")); + } + if (inputAdapter.getPopupMenu(PseudoAtom.class) == null) + { + inputAdapter.setPopupMenu(PseudoAtom.class, new JChemPaintPopupMenu(this, "pseudo")); + } + if (inputAdapter.getPopupMenu(Bond.class) == null) + { + inputAdapter.setPopupMenu(Bond.class, new JChemPaintPopupMenu(this, "bond")); + } + if (inputAdapter.getPopupMenu(ChemModel.class) == null) + { + inputAdapter.setPopupMenu(ChemModel.class, new JChemPaintPopupMenu(this, "chemmodel")); + } + if (inputAdapter.getPopupMenu(Reaction.class) == null) + { + inputAdapter.setPopupMenu(Reaction.class, new JChemPaintPopupMenu(this, "reaction")); + } + } + /** * Called to force a re-centring of the displayed structure. * Added: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPopupMenu.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPopupMenu.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPopupMenu.java 2008-12-10 15:08:14 UTC (rev 13518) @@ -0,0 +1,217 @@ +/* + * $RCSfile$ + * $Author: shk3 $ + * $Date: 2008-07-02 12:33:38 +0100 (Wed, 02 Jul 2008) $ + * $Revision: 11482 $ + * + * Copyright (C) 1997-2007 The JChemPaint project + * + * Contact: jch...@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; + +import java.util.MissingResourceException; + +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JMenu; +import javax.swing.JMenuItem; + +import org.openscience.cdk.tools.LoggingTool; +import org.openscience.jchempaint.action.JCPAction; + +/** + * A pop-up menu for JChemPaint + * + * @cdk.module jchempaint + * @author steinbeck + */ +public class JChemPaintPopupMenu extends CDKPopupMenu +{ + + private static final long serialVersionUID = -1172105004348414589L; + private LoggingTool logger; + private JCPAction jcpaction; + + + /** + * Constructor for the JChemPaintPopupMenu object + * + *@param jcpPanel Description of the Parameter + *@param type Description of the Parameter + */ + JChemPaintPopupMenu(JChemPaintPanel jcpPanel, String type) + { + logger = new LoggingTool(this); + createPopupMenu(jcpPanel, type); + } + + protected void createPopupMenu(JChemPaintPanel jcpPanel, String type) + { + String[] menuKeys = StringHelper.tokenize(getMenuResourceString(type + "popup")); + String menuTitle = JCPLocalizationHandler.getInstance().getString(type + "MenuTitle"); + JMenuItem titleMenuItem = new JMenuItem(menuTitle); + titleMenuItem.setEnabled(false); + titleMenuItem.setArmed(false); + this.add(titleMenuItem); + this.addSeparator(); + for (int i = 0; i < menuKeys.length; i++) + { + String menuKey = menuKeys[i]; + if (menuKey.equals("-")) + { + this.addSeparator(); + } else if (menuKey.startsWith("@")) + { + JMenu me = createMenu(jcpPanel, menuKey.substring(1)); + this.add(me); + } else + { + JMenuItem item = createMenuItem(jcpPanel, menuKey,false,false); + if (item != null) + { + this.add(item); + } + } + } + } + + + /** + * Craetes a JMenuItem given by a String and adds the right ActionListener to + * it. + * + *@param cmd String The Strin to identify the MenuItem + *@param jcpPanel Description of the Parameter + *@return JMenuItem The created JMenuItem + */ + protected JMenuItem createMenuItem(JChemPaintPanel jcpPanel, String cmd, boolean isCheckBox, boolean isChecked) + { + logger.debug("Creating menu item: ", cmd); + String translation = "***" + cmd + "***"; + try + { + translation = JCPLocalizationHandler.getInstance().getString(cmd); + } catch (MissingResourceException mre) + { + logger.error("Could not find translation for: " + cmd); + } + JMenuItem mi = null; + if (isCheckBox) { + mi = new JCheckBoxMenuItem(translation); + mi.setSelected(isChecked); + } + else { + mi = new JMenuItem(translation); + } + String astr = JCPPropertyHandler.getInstance().getResourceString(cmd + JCPAction.actionSuffix); + if (astr == null) + { + astr = cmd; + } + mi.setActionCommand(astr); + JCPAction a = getJCPAction().getAction(jcpPanel, astr, true); + if (a != null) + { + mi.addActionListener(a); + mi.setEnabled(a.isEnabled()); + } else + { + logger.warn("Could not find JCPAction class for:" + astr); + mi.setEnabled(false); + } + return mi; + } + + protected JMenu createMenu(JChemPaintPanel jcpPanel, String key) + { + logger.debug("Creating menu: ", key); + String[] itemKeys = StringHelper.tokenize(getMenuResourceString(key)); + String translation = "***" + key + "***"; + try + { + translation = JCPLocalizationHandler.getInstance().getString(key); + } catch (MissingResourceException mre) + { + logger.error("Could not find translation for: " + key); + } + JMenu menu = new JMenu(translation); + for (int i = 0; i < itemKeys.length; i++) + { + if (itemKeys[i].equals("-")) + { + menu.addSeparator(); + } else if (itemKeys[i].startsWith("@")) + { + String menuTitle = itemKeys[i].substring(1); + JMenu me = createMenu(jcpPanel, menuTitle); + menu.add(me); + } else if (itemKeys[i].endsWith("+")) { + JMenuItem mi = createMenuItem(jcpPanel, + itemKeys[i].substring(0, itemKeys[i].length() - 1),true,false + ); + if(itemKeys[i].substring(0, itemKeys[i].length() - 1).equals("addImplHydrogen")) + ((JCheckBoxMenuItem)mi).setSelected(true); + if(itemKeys[i].substring(0, itemKeys[i].length() - 1).equals("insertstructure") && !jcpPanel.getGuistring().equals("applet")) + ((JCheckBoxMenuItem)mi).setSelected(true); + // default off, because we cannot turn it on anywhere (yet) + menu.add(mi); + } else + { + JMenuItem mi = createMenuItem(jcpPanel, itemKeys[i],false,false); + menu.add(mi); + } + } + return menu; + } + + + /** + * Gets the menuResourceString attribute of the JChemPaint object + * + *@param key Description of the Parameter + *@return The menuResourceString value + */ + public String getMenuResourceString(String key) + { + String str; + try + { + str = JCPPropertyHandler.getInstance().getGUIDefinition().getString(key); + } catch (MissingResourceException mre) + { + str = null; + } + return str; + } + + /** + * Return the JCPAction instance associated with this JCPPanel + * + *@return The jCPAction value + */ + public JCPAction getJCPAction() { + if (jcpaction == null) { + jcpaction = new JCPAction(); + } + return jcpaction; + } +} + Property changes on: jchempaint/trunk/src/main/org/openscience/jchempaint/JChemPaintPopupMenu.java ___________________________________________________________________ Added: svn:executable + * Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-12-10 15:07:00 UTC (rev 13517) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/RenderPanel.java 2008-12-10 15:08:14 UTC (rev 13518) @@ -55,7 +55,7 @@ public class RenderPanel extends JPanel implements IViewEventRelay { private IntermediateRenderer renderer; - + private boolean isNewChemModel; private ControllerHub hub; @@ -262,4 +262,8 @@ return status; } + + public IntermediateRenderer getRenderer() { + return renderer; + } } Added: jchempaint/trunk/src/main/org/openscience/jchempaint/SwingPopupModule.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/SwingPopupModule.java (rev 0) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/SwingPopupModule.java 2008-12-10 15:08:14 UTC (rev 13518) @@ -0,0 +1,87 @@ +package org.openscience.jchempaint; + +import java.awt.event.MouseEvent; +import java.util.Hashtable; + +import javax.swing.JPanel; +import javax.vecmath.Point2d; + +import org.openscience.cdk.controller.ControllerModuleAdapter; +import org.openscience.cdk.controller.IChemModelRelay; +import org.openscience.cdk.interfaces.IChemObject; +import org.openscience.cdk.tools.LoggingTool; + +public class SwingPopupModule extends ControllerModuleAdapter { + + public SwingPopupModule(RenderPanel renderer,IChemModelRelay chemModelRelay) { + super(chemModelRelay); + this.renderer=renderer; + } + + + public String getDrawModeString() { + return "Popup menu"; + } + + + public void mouseClickedUp(Point2d worldCoord) { + popupMenuForNearestChemObject(renderer.getRenderer().toScreenCoordinates(worldCoord.x, worldCoord.y)); + } + + private LoggingTool logger = new LoggingTool(this); + + private static Hashtable<String, CDKPopupMenu> popupMenus = new Hashtable<String, CDKPopupMenu>(); + + private RenderPanel renderer; + + /** + * Sets the popupMenu attribute of the Controller2D object + * + *@param someClass The new popupMenu value + *@param menu The new popupMenu value + */ + public void setPopupMenu(Class someClass, CDKPopupMenu menu) { + SwingPopupModule.popupMenus.put(someClass.getName(), menu); + } + + + /** + * Returns the popup menu for this IChemObject if it is set, and null + * otherwise. + * + *@param someClass Description of the Parameter + *@return The popupMenu value + */ + public CDKPopupMenu getPopupMenu(Class classSearched) { + logger.debug("Searching popup for: ", classSearched.getName()); + while (classSearched.getName().startsWith("org.openscience.cdk")) { + logger.debug("Searching popup for: ", classSearched.getName()); + if (SwingPopupModule.popupMenus.containsKey(classSearched.getName())) { + return (CDKPopupMenu) SwingPopupModule.popupMenus.get(classSearched.getName()); + } else { + logger.debug(" recursing into super class"); + classSearched = classSearched.getSuperclass(); + } + } + return null; + } + + private void popupMenuForNearestChemObject(Point2d mouseCoords) + { + IChemObject objectInRange = renderer.getRenderer().getRenderer2DModel().getHighlightedAtom(); + if(objectInRange==null) + objectInRange = renderer.getRenderer().getRenderer2DModel().getHighlightedBond(); + if(objectInRange==null) + objectInRange = chemModelRelay.getIChemModel(); + CDKPopupMenu popupMenu = getPopupMenu(objectInRange.getClass()); + if (popupMenu != null) + { + popupMenu.setSource(objectInRange); + logger.debug("Set popup menu source to: ", objectInRange); + popupMenu.show(renderer, (int)mouseCoords.x, (int)mouseCoords.y); + } else + { + logger.warn("Popup menu is null! Could not set source!"); + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |