001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.history; 003 004import java.awt.datatransfer.Clipboard; 005 006import javax.swing.JComponent; 007import javax.swing.JTable; 008import javax.swing.TransferHandler; 009import javax.swing.table.TableModel; 010 011import org.openstreetmap.josm.data.osm.TagMap; 012import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils; 013import org.openstreetmap.josm.gui.datatransfer.TagTransferable; 014import org.openstreetmap.josm.gui.datatransfer.data.TagTransferData; 015 016/** 017 * This transfer handler allows to select and copy tags from a table with the {@link TagTableColumnModel}. 018 * @author Michael Zangl 019 * @since 10637 020 */ 021public class TagInfoTransferHandler extends TransferHandler { 022 023 @Override 024 public void exportToClipboard(JComponent comp, Clipboard clip, int action) { 025 if (comp instanceof JTable) { 026 TableModel model = ((JTable) comp).getModel(); 027 if (model instanceof TagTableModel) { 028 exportFromModel((JTable) comp, (TagTableModel) model); 029 } 030 } 031 } 032 033 private static void exportFromModel(JTable comp, TagTableModel model) { 034 int[] selected = comp.getSelectedRows(); 035 TagMap tags = new TagMap(); 036 for (int row : selected) { 037 String key = model.getKeyAt(row); 038 String value = model.getValue(key); 039 if (value != null) { 040 tags.put(key, value); 041 } 042 } 043 TagTransferData data = new TagTransferData(tags); 044 ClipboardUtils.copy(new TagTransferable(data)); 045 } 046}