Author: chatellier Date: 2009-08-26 08:42:32 +0000 (Wed, 26 Aug 2009) New Revision: 2528 Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/CopyMapToClipboardListener.java Modified: isis-fish/trunk/changelog.txt isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/CellUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/FisheryRegionUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/PortUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/ZoneUI.jaxx isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties Log: Add a contextual menu on maps to copy current displayed map to system clipboard. Modified: isis-fish/trunk/changelog.txt =================================================================== --- isis-fish/trunk/changelog.txt 2009-08-25 15:40:19 UTC (rev 2527) +++ isis-fish/trunk/changelog.txt 2009-08-26 08:42:32 UTC (rev 2528) @@ -1,5 +1,6 @@ isis-fish (3.2.0.5) stable; urgency=low + * Can copy openmap map to system clipboard * Don't extract database for sensitivity analysis (excepted first) * Add user script javadoc generation * Move script import/export to Jaxx Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/CellUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/CellUI.jaxx 2009-08-25 15:40:19 UTC (rev 2527) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/CellUI.jaxx 2009-08-26 08:42:32 UTC (rev 2528) @@ -40,6 +40,8 @@ setButtonTitle(_("isisfish.input.continueZones")); setNextPath("$root/$zones"); cellMap.addMapMouseListener(getMapListener()); +// add copy to clipboard support +cellMap.addMapMouseListener(new CopyMapToClipboardListener(cellMap)); toolSet.setupListeners(cellMap); toolMap.add((Tool)toolSet); @@ -86,15 +88,18 @@ mapListener = new OpenMapEvents(cellMap, new SelectMouseMode(false), CellSelectionLayer.SINGLE_SELECTION) { @Override public boolean mouseClicked(MouseEvent e) { - for (Cell c : cellMap.getSelectedCells()) { - if (getBean() != null) { - if (!c.getTopiaId().equals(getBean().getTopiaId())) { - jaxx.runtime.SwingUtil.fillComboBox(fieldCell,getRegion().getCell(), c); - return true; + boolean result = false; + if (e.getButton() == MouseEvent.BUTTON1) { + for (Cell c : cellMap.getSelectedCells()) { + if (getBean() != null) { + if (!c.getTopiaId().equals(getBean().getTopiaId())) { + jaxx.runtime.SwingUtil.fillComboBox(fieldCell,getRegion().getCell(), c); + return true; + } } } } - return true; + return result; } }; } Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/CopyMapToClipboardListener.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/CopyMapToClipboardListener.java (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/CopyMapToClipboardListener.java 2009-08-26 08:42:32 UTC (rev 2528) @@ -0,0 +1,201 @@ +/* *##% + * Copyright (C) 2009 Code Lutin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +package fr.ifremer.isisfish.ui.input; + +import static org.codelutin.i18n.I18n._; + +import java.awt.Graphics; +import java.awt.GraphicsEnvironment; +import java.awt.Image; +import java.awt.Toolkit; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; +import java.io.IOException; + +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.bbn.openmap.MapBean; +import com.bbn.openmap.event.MapMouseListener; + +/** + * Listener for openmap map bean to display popop menu on rigth clic. + * + * Currently, this listener can : + * - copy current map to system clip board + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class CopyMapToClipboardListener implements ActionListener, + MapMouseListener { + + /** Class logger. */ + private static Log log = LogFactory + .getLog(CopyMapToClipboardListener.class); + + /** Copy to clic board action command. */ + protected static final String COPY_TO_CLICBOARD_COMMAND = "copytoclipboard"; + + /** Popop menu. */ + public JPopupMenu menu; + + /** Open map bean. */ + protected MapBean mapBean; + + /** + * Constructor with map. + * + * @param mapBean open map bean + */ + public CopyMapToClipboardListener(MapBean mapBean) { + this.mapBean = mapBean; + + menu = new JPopupMenu(); + JMenuItem copyClicboardItem = new JMenuItem(); + copyClicboardItem.setText(_("isisfish.input.map.copytoclicboard")); + copyClicboardItem.setActionCommand(COPY_TO_CLICBOARD_COMMAND); + copyClicboardItem.addActionListener(this); + menu.add(copyClicboardItem); + } + + public MapBean getMapBean() { + return mapBean; + } + + protected void copyToClipBoard() { + + // Get image from mapBean + int width = getMapBean().getWidth(); + int height = getMapBean().getHeight(); + BufferedImage image = new BufferedImage(width, height, + BufferedImage.TYPE_INT_RGB); + GraphicsEnvironment ge = GraphicsEnvironment + .getLocalGraphicsEnvironment(); + Graphics g = ge.createGraphics(image); + g.setClip(0, 0, width, height); + getMapBean().paintAll(g); + ImageSelection imgSel = new ImageSelection(image); + + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imgSel, + null); + + if (log.isInfoEnabled()) { + log.info("Copy current image to system clipboard"); + } + } + + // This class is used to hold an image while on the clipboard. + public static class ImageSelection implements Transferable { + private Image image; + + public ImageSelection(Image image) { + this.image = image; + } + + // Returns supported flavors + public DataFlavor[] getTransferDataFlavors() { + return new DataFlavor[] { DataFlavor.imageFlavor }; + } + + // Returns true if flavor is supported + public boolean isDataFlavorSupported(DataFlavor flavor) { + return DataFlavor.imageFlavor.equals(flavor); + } + + // Returns image + public Object getTransferData(DataFlavor flavor) + throws UnsupportedFlavorException, IOException { + if (!DataFlavor.imageFlavor.equals(flavor)) { + throw new UnsupportedFlavorException(flavor); + } + return image; + } + } + + @Override + public String[] getMouseModeServiceList() { + return null; + } + + @Override + public boolean mouseClicked(MouseEvent e) { + + // seulement en menu contextuel + if (e.getButton() == MouseEvent.BUTTON3) { + menu.show(mapBean, e.getX(), e.getY()); + } + return false; + } + + @Override + public boolean mouseDragged(MouseEvent arg0) { + return false; + } + + @Override + public void mouseEntered(MouseEvent arg0) { + + } + + @Override + public void mouseExited(MouseEvent arg0) { + + } + + @Override + public void mouseMoved() { + + } + + @Override + public boolean mouseMoved(MouseEvent arg0) { + return false; + } + + @Override + public boolean mousePressed(MouseEvent arg0) { + return false; + } + + @Override + public boolean mouseReleased(MouseEvent arg0) { + return false; + } + + @Override + public void actionPerformed(ActionEvent e) { + + if (e.getActionCommand().equals(COPY_TO_CLICBOARD_COMMAND)) { + copyToClipBoard(); + } + + } +} Property changes on: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/CopyMapToClipboardListener.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/FisheryRegionUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/FisheryRegionUI.jaxx 2009-08-25 15:40:19 UTC (rev 2527) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/FisheryRegionUI.jaxx 2009-08-26 08:42:32 UTC (rev 2528) @@ -32,6 +32,9 @@ toolSet.setupListeners(cellMap); toolMap.add((Tool)toolSet); +// add copy to clipboard support +cellMap.addMapMouseListener(new CopyMapToClipboardListener(cellMap)); + setButtonTitle(_("isisfish.input.continueCells")); setNextPath("$root/$cells"); Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/PortUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/PortUI.jaxx 2009-08-25 15:40:19 UTC (rev 2527) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/PortUI.jaxx 2009-08-26 08:42:32 UTC (rev 2528) @@ -39,6 +39,10 @@ toolSet.setupListeners(portMap); toolMap.add((Tool)toolSet); + +// add copy to clipboard support +portMap.addMapMouseListener(new CopyMapToClipboardListener(portMap)); + setMapListener(); setButtonTitle(_("isisfish.input.continueSpecies")); setNextPath("$root/$species"); Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/ZoneUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/ZoneUI.jaxx 2009-08-25 15:40:19 UTC (rev 2527) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/ZoneUI.jaxx 2009-08-26 08:42:32 UTC (rev 2528) @@ -36,6 +36,10 @@ toolSet.setupListeners(zoneMap); toolMap.add((Tool)toolSet); + +// add copy to clipboard support +zoneMap.addMapMouseListener(new CopyMapToClipboardListener(zoneMap)); + zoneMap.addMapMouseListener(getMapListener()); setButtonTitle(_("isisfish.input.continuePorts")); setNextPath("$root/$ports"); Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2009-08-25 15:40:19 UTC (rev 2527) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2009-08-26 08:42:32 UTC (rev 2528) @@ -500,6 +500,7 @@ isisfish.input.continueTripTypes=Continue to trip types isisfish.input.continueVesselTypes=Continue to vessel types isisfish.input.continueZones=Continue to zones +isisfish.input.map.copytoclicboard=Copy to clipboard isisfish.input.menu.addRegion=Add region isisfish.input.menu.commit=Commit change isisfish.input.menu.copyRegion=Copy region Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-08-25 15:40:19 UTC (rev 2527) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-08-26 08:42:32 UTC (rev 2528) @@ -500,6 +500,7 @@ isisfish.input.continueTripTypes=Continuer vers les types de trajets isisfish.input.continueVesselTypes=Continuer vers les types de navires isisfish.input.continueZones=Continuer vers les zones +isisfish.input.map.copytoclicboard=Copier vers de presse-papiers isisfish.input.menu.addRegion=Ajouter une r\u00E9gion isisfish.input.menu.commit=Sauvegarder les changements isisfish.input.menu.copyRegion=Copier r\u00E9gion
participants (1)
-
chatellierï¼ users.labs.libre-entreprise.org