Changeset 4454 in josm


Ignore:
Timestamp:
Sep 23, 2011 12:11:43 PM (20 months ago)
Author:
simon04
Message:

fix #6857 - add copy [[all] key/]value to properties dialog

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java

    r4363 r4454  
    3030import java.util.HashSet; 
    3131import java.util.Iterator; 
     32import java.util.LinkedList; 
    3233import java.util.List; 
     34import java.util.Map.Entry; 
    3335import java.util.Map; 
    34 import java.util.Map.Entry; 
     36import java.util.Set; 
    3537import java.util.TreeMap; 
     38import java.util.TreeSet; 
    3639import java.util.Vector; 
    37 import java.util.Set; 
    3840 
    3941import javax.swing.AbstractAction; 
     
    9799import org.openstreetmap.josm.tools.OpenBrowser; 
    98100import org.openstreetmap.josm.tools.Shortcut; 
     101import org.openstreetmap.josm.tools.Utils; 
    99102 
    100103/** 
     
    171174    private DataSetListenerAdapter dataChangedAdapter = new DataSetListenerAdapter(this); 
    172175    private HelpAction helpAction = new HelpAction(); 
     176    private CopyValueAction copyValueAction = new CopyValueAction(); 
     177    private CopyKeyValueAction copyKeyValueAction = new CopyKeyValueAction(); 
     178    private CopyAllKeyValueAction copyAllKeyValueAction = new CopyAllKeyValueAction(); 
    173179    private AddAction addAction = new AddAction(); 
    174180    private Shortcut addActionShortcut = Shortcut.registerShortcut("properties:add", tr("Add Properties"), KeyEvent.VK_B, 
     
    615621                    propertyTable.changeSelection(row, 0, false, false); 
    616622                    JPopupMenu menu = new JPopupMenu(); 
     623                    menu.add(copyValueAction); 
     624                    menu.add(copyKeyValueAction); 
     625                    menu.add(copyAllKeyValueAction); 
     626                    menu.addSeparator(); 
    617627                    menu.add(helpAction); 
    618628                    menu.show(propertyTable, p.x, p.y-3); 
     
    12921302        } 
    12931303    } 
     1304 
     1305    abstract class AbstractCopyAction extends AbstractAction { 
     1306 
     1307        protected abstract Collection<String> getString(OsmPrimitive p, String key); 
     1308 
     1309        @Override 
     1310        public void actionPerformed(ActionEvent ae) { 
     1311            if (propertyTable.getSelectedRowCount() != 1) { 
     1312                return; 
     1313            } 
     1314            String key = propertyData.getValueAt(propertyTable.getSelectedRow(), 0).toString(); 
     1315            Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected(); 
     1316            if (sel.isEmpty()) { 
     1317                return; 
     1318            } 
     1319            Set<String> values = new TreeSet<String>(); 
     1320            for (OsmPrimitive p : sel) { 
     1321                Collection<String> s = getString(p,key); 
     1322                if (s != null) { 
     1323                    values.addAll(s); 
     1324                } 
     1325            } 
     1326            Utils.copyToClipboard(Utils.join("\n", values)); 
     1327        } 
     1328    } 
     1329 
     1330    class CopyValueAction extends AbstractCopyAction { 
     1331 
     1332        public CopyValueAction() { 
     1333            putValue(NAME, tr("Copy Value")); 
     1334            putValue(SHORT_DESCRIPTION, tr("Copy the value of the selected tag to clipboard")); 
     1335        } 
     1336 
     1337        @Override 
     1338        protected Collection<String> getString(OsmPrimitive p, String key) { 
     1339            return Collections.singleton(p.get(key)); 
     1340        } 
     1341    } 
     1342 
     1343    class CopyKeyValueAction extends AbstractCopyAction { 
     1344 
     1345        public CopyKeyValueAction() { 
     1346            putValue(NAME, tr("Copy Key/Value")); 
     1347            putValue(SHORT_DESCRIPTION, tr("Copy the key and value of the selected tag to clipboard")); 
     1348        } 
     1349 
     1350        @Override 
     1351        protected Collection<String> getString(OsmPrimitive p, String key) { 
     1352            String v = p.get(key); 
     1353            return v == null ? null : Collections.singleton(new Tag(key, v).toString()); 
     1354        } 
     1355    } 
     1356 
     1357    class CopyAllKeyValueAction extends AbstractCopyAction { 
     1358 
     1359        public CopyAllKeyValueAction() { 
     1360            putValue(NAME, tr("Copy all Keys/Values")); 
     1361            putValue(SHORT_DESCRIPTION, tr("Copy the key and value of the all tags to clipboard")); 
     1362        } 
     1363 
     1364        @Override 
     1365        protected Collection<String> getString(OsmPrimitive p, String key) { 
     1366            List<String> r = new LinkedList<String>(); 
     1367            for (Entry<String, String> kv : p.getKeys().entrySet()) { 
     1368                r.add(new Tag(kv.getKey(), kv.getValue()).toString()); 
     1369            } 
     1370            return r; 
     1371        } 
     1372    } 
    12941373} 
Note: See TracChangeset for help on using the changeset viewer.