Changeset 5297 in josm


Ignore:
Timestamp:
Jun 24, 2012 7:14:38 PM (12 months ago)
Author:
Don-vip
Message:

fix #4493, fix #7750: conflict dialog, nodes and members tab: allow selection via double-click, allow zoom via contexual menu, plus various fix in EDT violations

Location:
trunk/src/org/openstreetmap/josm
Files:
5 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/MergeLayerAction.java

    r5233 r5297  
    8282    @Override 
    8383    protected void updateEnabledState() { 
    84         if (getEditLayer() == null) { 
    85             setEnabled(false); 
    86             return; 
    87         } 
    88         setEnabled(!LayerListDialog.getInstance().getModel().getPossibleMergeTargets(getEditLayer()).isEmpty()); 
     84        GuiHelper.runInEDT(new Runnable() { 
     85            @Override 
     86            public void run() { 
     87                if (getEditLayer() == null) { 
     88                    setEnabled(false); 
     89                    return; 
     90                } 
     91                setEnabled(!LayerListDialog.getInstance().getModel().getPossibleMergeTargets(getEditLayer()).isEmpty()); 
     92            } 
     93        }); 
    8994    } 
    9095     
  • trunk/src/org/openstreetmap/josm/gui/MapStatus.java

    r5137 r5297  
    4747import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor; 
    4848import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor.ProgressMonitorDialog; 
     49import org.openstreetmap.josm.gui.util.GuiHelper; 
    4950import org.openstreetmap.josm.tools.GBC; 
    5051import org.openstreetmap.josm.tools.ImageProvider; 
     
    757758        setHelpText(null, t); 
    758759    } 
    759     public void setHelpText(Object id, String text)  { 
     760    public void setHelpText(Object id, final String text)  { 
    760761 
    761762        StatusTextHistory entry = new StatusTextHistory(id, text); 
     
    764765        statusText.add(entry); 
    765766 
    766         helpText.setText(text); 
    767         helpText.setToolTipText(text); 
     767        GuiHelper.runInEDT(new Runnable() { 
     768            @Override 
     769            public void run() { 
     770                helpText.setText(text); 
     771                helpText.setToolTipText(text); 
     772            } 
     773        }); 
    768774    } 
    769775    public void resetHelpText(Object id) { 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java

    r5288 r5297  
    338338        return resolvedCompletely; 
    339339    } 
     340 
     341    public void unregisterListeners() { 
     342        nodeListMerger.unlinkAsListener(); 
     343        relationMemberMerger.unlinkAsListener(); 
     344    } 
    340345} 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java

    r5266 r5297  
    2929import org.openstreetmap.josm.gui.HelpAwareOptionPane; 
    3030import org.openstreetmap.josm.gui.help.HelpUtil; 
     31import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTableModel; 
    3132 
    3233/** 
     
    6970    protected HashMap<ListRole, ArrayList<T>> entries; 
    7071 
    71     protected DefaultTableModel myEntriesTableModel; 
    72     protected DefaultTableModel theirEntriesTableModel; 
    73     protected DefaultTableModel mergedEntriesTableModel; 
     72    protected EntriesTableModel myEntriesTableModel; 
     73    protected EntriesTableModel theirEntriesTableModel; 
     74    protected EntriesTableModel mergedEntriesTableModel; 
    7475 
    7576    protected EntriesSelectionModel myEntriesSelectionModel; 
     
    210211    } 
    211212 
    212     public TableModel getMyTableModel() { 
     213    public OsmPrimitivesTableModel getMyTableModel() { 
    213214        return myEntriesTableModel; 
    214215    } 
    215216 
    216     public TableModel getTheirTableModel() { 
     217    public OsmPrimitivesTableModel getTheirTableModel() { 
    217218        return theirEntriesTableModel; 
    218219    } 
    219220 
    220     public TableModel getMergedTableModel() { 
     221    public OsmPrimitivesTableModel getMergedTableModel() { 
    221222        return mergedEntriesTableModel; 
    222223    } 
     
    535536    protected boolean myAndTheirEntriesEqual() { 
    536537 
    537         if (getMyEntries().size() != getTheirEntries().size()) 
     538        if (getMyEntriesSize() != getTheirEntriesSize()) 
    538539            return false; 
    539         for (int i=0; i < getMyEntries().size(); i++) { 
     540        for (int i=0; i < getMyEntriesSize(); i++) { 
    540541            if (! isEqualEntry(getMyEntries().get(i), getTheirEntries().get(i))) 
    541542                return false; 
     
    555556     * @see ListMergeModel#getMergedTableModel() 
    556557     */ 
    557     public class EntriesTableModel extends DefaultTableModel { 
     558    public class EntriesTableModel extends DefaultTableModel implements OsmPrimitivesTableModel { 
    558559        private final ListRole role; 
    559560 
     
    675676            return role; 
    676677        } 
     678 
     679        @Override 
     680        public OsmPrimitive getReferredPrimitive(int idx) { 
     681            return (OsmPrimitive) getValueAt(idx, 1); 
     682        } 
    677683    } 
    678684 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java

    r5266 r5297  
    3636import javax.swing.event.ListSelectionListener; 
    3737 
     38import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable; 
    3839import org.openstreetmap.josm.tools.CheckParameterUtil; 
    3940import org.openstreetmap.josm.tools.ImageProvider; 
     
    4647 */ 
    4748public abstract class ListMerger<T> extends JPanel implements PropertyChangeListener, Observer { 
    48     protected JTable myEntriesTable; 
    49     protected JTable mergedEntriesTable; 
    50     protected JTable theirEntriesTable; 
     49    protected OsmPrimitivesTable myEntriesTable; 
     50    protected OsmPrimitivesTable mergedEntriesTable; 
     51    protected OsmPrimitivesTable theirEntriesTable; 
    5152 
    5253    protected ListMergeModel<T> model; 
     
    878879                trn("Their version ({0} entry)", "Their version ({0} entries)", model.getTheirEntriesSize(), model.getTheirEntriesSize()) 
    879880        ); 
     881    } 
     882     
     883    public void unlinkAsListener() { 
     884        myEntriesTable.unlinkAsListener(); 
     885        mergedEntriesTable.unlinkAsListener(); 
     886        theirEntriesTable.unlinkAsListener(); 
    880887    } 
    881888 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java

    r5266 r5297  
    22package org.openstreetmap.josm.gui.conflict.pair.nodes; 
    33 
     4import java.util.List; 
     5 
    46import javax.swing.JScrollPane; 
    5 import javax.swing.JTable; 
    67 
     8import org.openstreetmap.josm.Main; 
    79import org.openstreetmap.josm.data.conflict.Conflict; 
    810import org.openstreetmap.josm.data.osm.Node; 
     
    1113import org.openstreetmap.josm.gui.conflict.pair.IConflictResolver; 
    1214import org.openstreetmap.josm.gui.conflict.pair.ListMerger; 
     15import org.openstreetmap.josm.gui.layer.OsmDataLayer; 
    1316 
    1417/** 
     
    2326    @Override 
    2427    protected JScrollPane buildMyElementsTable() { 
    25         myEntriesTable  = new JTable( 
     28        myEntriesTable  = new NodeListTable( 
     29                "table.mynodes", 
    2630                model.getMyTableModel(), 
    27                 new NodeListColumnModel( 
    28                         new NodeListTableCellRenderer() 
    29                 ), 
    3031                model.getMySelectionModel() 
    3132        ); 
    32         myEntriesTable.setName("table.mynodes"); 
    33         myEntriesTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); 
    3433        return embeddInScrollPane(myEntriesTable); 
    3534    } 
     
    3736    @Override 
    3837    protected JScrollPane buildMergedElementsTable() { 
    39         mergedEntriesTable  = new JTable( 
     38        mergedEntriesTable  = new NodeListTable( 
     39                "table.mergednodes", 
    4040                model.getMergedTableModel(), 
    41                 new NodeListColumnModel( 
    42                         new NodeListTableCellRenderer() 
    43                 ), 
    4441                model.getMergedSelectionModel() 
    4542        ); 
    46         mergedEntriesTable.setName("table.mergednodes"); 
    47         mergedEntriesTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); 
    4843        return embeddInScrollPane(mergedEntriesTable); 
    4944    } 
     
    5146    @Override 
    5247    protected JScrollPane buildTheirElementsTable() { 
    53         theirEntriesTable  = new JTable( 
     48        theirEntriesTable  = new NodeListTable( 
     49                "table.theirnodes", 
    5450                model.getTheirTableModel(), 
    55                 new NodeListColumnModel( 
    56                         new NodeListTableCellRenderer() 
    57                 ), 
    5851                model.getTheirSelectionModel() 
    5952        ); 
    60         theirEntriesTable.setName("table.theirnodes"); 
    61         theirEntriesTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); 
    6253        return embeddInScrollPane(theirEntriesTable); 
    6354    } 
    6455 
    6556    public void populate(Conflict<? extends OsmPrimitive> conflict) { 
    66         ((NodeListMergeModel)model).populate((Way)conflict.getMy(), (Way)conflict.getTheir()); 
     57        Way myWay = (Way)conflict.getMy(); 
     58        Way theirWay = (Way)conflict.getTheir(); 
     59        ((NodeListMergeModel)model).populate(myWay, theirWay); 
     60        myEntriesTable.setLayer(findLayerFor(myWay)); 
     61        theirEntriesTable.setLayer(findLayerFor(theirWay)); 
     62    } 
     63     
     64    protected OsmDataLayer findLayerFor(Way w) { 
     65        List<OsmDataLayer> layers = Main.map.mapView.getLayersOfType(OsmDataLayer.class); 
     66        // Find layer with same dataset 
     67        for (OsmDataLayer layer : layers) { 
     68            if (layer.data == w.getDataSet()) { 
     69                return layer; 
     70            } 
     71        } 
     72        // Conflict after merging layers: a dataset could be no more in any layer, try to find another layer with same primitive 
     73        for (OsmDataLayer layer : layers) { 
     74            for (Way way : layer.data.getWays()) { 
     75                if (way.getPrimitiveId().equals(w.getPrimitiveId())) { 
     76                    return layer; 
     77                } 
     78            } 
     79        } 
     80        return null; 
    6781    } 
    6882 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java

    r5266 r5297  
    33 
    44import javax.swing.JScrollPane; 
    5 import javax.swing.JTable; 
    65 
    76import org.openstreetmap.josm.data.conflict.Conflict; 
     
    1817    @Override 
    1918    protected JScrollPane buildMyElementsTable() { 
    20         myEntriesTable  = new JTable( 
     19        myEntriesTable  = new RelationMemberTable( 
     20                "table.mymembers", 
    2121                model.getMyTableModel(), 
    22                 new RelationMemberListColumnModel(), 
    2322                model.getMySelectionModel() 
    2423        ); 
    25         myEntriesTable.setName("table.mynodes"); 
    26         myEntriesTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); 
    2724        return embeddInScrollPane(myEntriesTable); 
    2825    } 
     
    3027    @Override 
    3128    protected JScrollPane buildMergedElementsTable() { 
    32         mergedEntriesTable  = new JTable( 
     29        mergedEntriesTable  = new RelationMemberTable( 
     30                "table.mergedmembers", 
    3331                model.getMergedTableModel(), 
    34                 new RelationMemberListColumnModel(), 
    3532                model.getMergedSelectionModel() 
    3633        ); 
    3734        mergedEntriesTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); 
    38         mergedEntriesTable.setName("table.mergednodes"); 
    39         mergedEntriesTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); 
    4035        return embeddInScrollPane(mergedEntriesTable); 
    4136    } 
     
    4338    @Override 
    4439    protected JScrollPane buildTheirElementsTable() { 
    45         theirEntriesTable  = new JTable( 
     40        theirEntriesTable  = new RelationMemberTable( 
     41                "table.theirmembers", 
    4642                model.getTheirTableModel(), 
    47                 new RelationMemberListColumnModel(), 
    4843                model.getTheirSelectionModel() 
    4944        ); 
    50         theirEntriesTable.setName("table.theirnodes"); 
    51         theirEntriesTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); 
    5245        return embeddInScrollPane(theirEntriesTable); 
    5346    } 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java

    r5266 r5297  
    4646import org.openstreetmap.josm.gui.SideButton; 
    4747import org.openstreetmap.josm.gui.layer.OsmDataLayer; 
     48import org.openstreetmap.josm.gui.util.GuiHelper; 
    4849import org.openstreetmap.josm.tools.ImageProvider; 
    4950import org.openstreetmap.josm.tools.Shortcut; 
     
    156157    public final void refreshView() { 
    157158        OsmDataLayer editLayer =  Main.main.getEditLayer(); 
    158         conflicts = editLayer == null?new ConflictCollection():editLayer.getConflicts(); 
    159         model.fireContentChanged(); 
    160         updateTitle(conflicts.size()); 
     159        conflicts = (editLayer == null ? new ConflictCollection() : editLayer.getConflicts()); 
     160        GuiHelper.runInEDT(new Runnable() { 
     161            @Override 
     162            public void run() { 
     163                model.fireContentChanged(); 
     164                updateTitle(conflicts.size()); 
     165            } 
     166        }); 
    161167    } 
    162168 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java

    r5266 r5297  
    99import java.awt.Dimension; 
    1010import java.awt.FlowLayout; 
    11 import java.awt.Point; 
    1211import java.awt.event.ActionEvent; 
    1312import java.beans.PropertyChangeEvent; 
     
    10099    private void unregisterListeners() { 
    101100        resolver.removePropertyChangeListener(applyResolutionAction); 
     101        resolver.unregisterListeners(); 
    102102    } 
    103103 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java

    r5275 r5297  
    6363import org.openstreetmap.josm.gui.layer.Layer.LayerAction; 
    6464import org.openstreetmap.josm.gui.layer.OsmDataLayer; 
     65import org.openstreetmap.josm.gui.util.GuiHelper; 
    6566import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher; 
    6667import org.openstreetmap.josm.tools.CheckParameterUtil; 
     
    704705        @Override 
    705706        public void updateEnabledState() { 
    706             if (layer == null) { 
    707                 if (getModel().getSelectedLayers().size() != 1) { 
    708                     setEnabled(false); 
    709                     return; 
    710                 } 
    711                 Layer selectedLayer = getModel().getSelectedLayers().get(0); 
    712                 setEnabled(!isActiveLayer(selectedLayer)); 
    713             } else { 
    714                 setEnabled(!isActiveLayer(layer)); 
    715             } 
     707            GuiHelper.runInEDT(new Runnable() { 
     708                @Override 
     709                public void run() { 
     710                    if (layer == null) { 
     711                        if (getModel().getSelectedLayers().size() != 1) { 
     712                            setEnabled(false); 
     713                            return; 
     714                        } 
     715                        Layer selectedLayer = getModel().getSelectedLayers().get(0); 
     716                        setEnabled(!isActiveLayer(selectedLayer)); 
     717                    } else { 
     718                        setEnabled(!isActiveLayer(layer)); 
     719                    } 
     720                } 
     721            }); 
    716722        } 
    717723 
     
    12551261                return; 
    12561262            layer.removePropertyChangeListener(this); 
    1257             int size = getRowCount(); 
    1258             List<Integer> rows = getSelectedRows(); 
    1259             if (rows.isEmpty() && size > 0) { 
    1260                 selectionModel.setSelectionInterval(size-1, size-1); 
    1261             } 
    1262             fireTableDataChanged(); 
    1263             fireRefresh(); 
    1264             ensureActiveSelected(); 
     1263            final int size = getRowCount(); 
     1264            final List<Integer> rows = getSelectedRows(); 
     1265            GuiHelper.runInEDTAndWait(new Runnable() { 
     1266                @Override 
     1267                public void run() { 
     1268                    if (rows.isEmpty() && size > 0) { 
     1269                        selectionModel.setSelectionInterval(size-1, size-1); 
     1270                    } 
     1271                    fireTableDataChanged(); 
     1272                    fireRefresh(); 
     1273                    ensureActiveSelected(); 
     1274                } 
     1275            }); 
    12651276        } 
    12661277 
     
    14261437            if (getLayers().isEmpty()) 
    14271438                return; 
    1428             if (getActiveLayer() != null) { 
     1439            final Layer activeLayer = getActiveLayer(); 
     1440            if (activeLayer != null) { 
    14291441                // there's an active layer - select it and make it 
    14301442                // visible 
    1431                 int idx = getLayers().indexOf(getActiveLayer()); 
     1443                int idx = getLayers().indexOf(activeLayer); 
    14321444                selectionModel.setSelectionInterval(idx, idx); 
    14331445                ensureSelectedIsVisible(); 
     
    15061518        /* ------------------------------------------------------------------------------ */ 
    15071519        @Override 
    1508         public void activeLayerChange(Layer oldLayer, Layer newLayer) { 
    1509             if (oldLayer != null) { 
    1510                 int idx = getLayers().indexOf(oldLayer); 
    1511                 if (idx >= 0) { 
    1512                     fireTableRowsUpdated(idx,idx); 
    1513                 } 
    1514             } 
    1515  
    1516             if (newLayer != null) { 
    1517                 int idx = getLayers().indexOf(newLayer); 
    1518                 if (idx >= 0) { 
    1519                     fireTableRowsUpdated(idx,idx); 
    1520                 } 
    1521             } 
    1522             ensureActiveSelected(); 
     1520        public void activeLayerChange(final Layer oldLayer, final Layer newLayer) { 
     1521            GuiHelper.runInEDTAndWait(new Runnable() { 
     1522                @Override 
     1523                public void run() { 
     1524                    if (oldLayer != null) { 
     1525                        int idx = getLayers().indexOf(oldLayer); 
     1526                        if (idx >= 0) { 
     1527                            fireTableRowsUpdated(idx,idx); 
     1528                        } 
     1529                    } 
     1530 
     1531                    if (newLayer != null) { 
     1532                        int idx = getLayers().indexOf(newLayer); 
     1533                        if (idx >= 0) { 
     1534                            fireTableRowsUpdated(idx,idx); 
     1535                        } 
     1536                    } 
     1537                    ensureActiveSelected(); 
     1538                } 
     1539            }); 
    15231540        } 
    15241541 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java

    r5081 r5297  
    88import java.awt.event.ActionEvent; 
    99import java.awt.event.KeyEvent; 
    10 import java.awt.event.MouseAdapter; 
    11 import java.awt.event.MouseEvent; 
    1210import java.util.Arrays; 
    1311import java.util.Collection; 
     
    2018import javax.swing.KeyStroke; 
    2119import javax.swing.ListSelectionModel; 
    22 import javax.swing.SwingUtilities; 
    2320import javax.swing.event.ListSelectionEvent; 
    2421import javax.swing.event.ListSelectionListener; 
     
    2623import org.openstreetmap.josm.Main; 
    2724import org.openstreetmap.josm.actions.AutoScaleAction; 
    28 import org.openstreetmap.josm.data.osm.OsmPrimitive; 
     25import org.openstreetmap.josm.actions.ZoomToAction; 
    2926import org.openstreetmap.josm.data.osm.Way; 
    3027import org.openstreetmap.josm.gui.MapView; 
     
    3330import org.openstreetmap.josm.gui.layer.Layer; 
    3431import org.openstreetmap.josm.gui.layer.OsmDataLayer; 
    35  
    36 public class MemberTable extends JTable implements IMemberModelListener { 
    37  
    38     /** 
    39      * the data layer in whose context relation members are edited in this table 
    40      */ 
    41     protected OsmDataLayer layer; 
    42  
    43     /** the popup menu */ 
    44     protected JPopupMenu popupMenu; 
    45     private ZoomToAction zoomToAction; 
     32import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable; 
     33 
     34public class MemberTable extends OsmPrimitivesTable implements IMemberModelListener { 
     35 
     36    /** the additional actions in popup menu */ 
    4637    private ZoomToGapAction zoomToGap; 
    4738 
     
    5445    public MemberTable(OsmDataLayer layer, MemberTableModel model) { 
    5546        super(model, new MemberTableColumnModel(layer.data), model.getSelectionModel()); 
    56         this.layer = layer; 
     47        setLayer(layer); 
    5748        model.addMemberModelListener(this); 
    5849        init(); 
    59  
    6050    } 
    6151 
     
    7969        getActionMap().put("selectNextColumnCell", new SelectNextColumnCellAction()); 
    8070        getActionMap().put("selectPreviousColumnCell", new SelectPreviousColumnCellAction()); 
    81  
    82         addMouseListener(new PopupListener()); 
    83         addMouseListener(new DblClickHandler()); 
     71    } 
     72     
     73    @Override 
     74    protected ZoomToAction buildZoomToAction() { 
     75        return new ZoomToAction(this); 
     76    } 
     77     
     78    @Override 
     79    protected JPopupMenu buildPopupMenu() { 
     80        JPopupMenu menu = super.buildPopupMenu(); 
     81        zoomToGap = new ZoomToGapAction(); 
     82        MapView.addLayerChangeListener(zoomToGap); 
     83        getSelectionModel().addListSelectionListener(zoomToGap); 
     84        menu.add(zoomToGap); 
     85        menu.addSeparator(); 
     86        menu.add(new SelectPreviousGapAction()); 
     87        menu.add(new SelectNextGapAction()); 
     88        return menu; 
    8489    } 
    8590 
     
    156161    } 
    157162 
    158     /** 
    159      * Replies the popup menu for this table 
    160      * 
    161      * @return the popup menu 
    162      */ 
    163     protected JPopupMenu getPopUpMenu() { 
    164         if (popupMenu == null) { 
    165             popupMenu = new JPopupMenu(); 
    166             zoomToAction = new ZoomToAction(); 
    167             MapView.addLayerChangeListener(zoomToAction); 
    168             getSelectionModel().addListSelectionListener(zoomToAction); 
    169             popupMenu.add(zoomToAction); 
    170             zoomToGap = new ZoomToGapAction(); 
    171             MapView.addLayerChangeListener(zoomToGap); 
    172             getSelectionModel().addListSelectionListener(zoomToGap); 
    173             popupMenu.add(zoomToGap); 
    174             popupMenu.addSeparator(); 
    175             popupMenu.add(new SelectPreviousGapAction()); 
    176             popupMenu.add(new SelectNextGapAction()); 
    177         } 
    178         return popupMenu; 
    179     } 
    180  
     163    @Override 
    181164    public void unlinkAsListener() { 
    182         MapView.removeLayerChangeListener(zoomToAction); 
     165        super.unlinkAsListener(); 
    183166        MapView.removeLayerChangeListener(zoomToGap); 
    184     } 
    185  
    186     class PopupListener extends MouseAdapter { 
    187         @Override 
    188         public void mousePressed(MouseEvent e) { 
    189             showPopup(e); 
    190         } 
    191  
    192         @Override 
    193         public void mouseReleased(MouseEvent e) { 
    194             showPopup(e); 
    195         } 
    196  
    197         private void showPopup(MouseEvent e) { 
    198             if (e.isPopupTrigger()) { 
    199                 getPopUpMenu().show(e.getComponent(), e.getX(), e.getY()); 
    200             } 
    201         } 
    202     } 
    203  
    204     private class ZoomToAction extends AbstractAction implements LayerChangeListener, ListSelectionListener { 
    205         public ZoomToAction() { 
    206             putValue(NAME, tr("Zoom to")); 
    207             putValue(SHORT_DESCRIPTION, tr("Zoom to the object the first selected member refers to")); 
    208             updateEnabledState(); 
    209         } 
    210  
    211         public void actionPerformed(ActionEvent e) { 
    212             if (! isEnabled()) 
    213                 return; 
    214             int rows[] = getSelectedRows(); 
    215             if (rows == null || rows.length == 0) 
    216                 return; 
    217             int row = rows[0]; 
    218             OsmPrimitive primitive = getMemberTableModel().getReferredPrimitive(row); 
    219             layer.data.setSelected(primitive); 
    220             AutoScaleAction.autoScale("selection"); 
    221         } 
    222  
    223         protected void updateEnabledState() { 
    224             if (Main.main == null || Main.main.getEditLayer() != layer) { 
    225                 setEnabled(false); 
    226                 putValue(SHORT_DESCRIPTION, tr("Zooming disabled because layer of this relation is not active")); 
    227                 return; 
    228             } 
    229             if (getSelectedRowCount() == 0) { 
    230                 setEnabled(false); 
    231                 putValue(SHORT_DESCRIPTION, tr("Zooming disabled because there is no selected member")); 
    232                 return; 
    233             } 
    234             setEnabled(true); 
    235             putValue(SHORT_DESCRIPTION, tr("Zoom to the object the first selected member refers to")); 
    236         } 
    237  
    238         public void valueChanged(ListSelectionEvent e) { 
    239             updateEnabledState(); 
    240         } 
    241  
    242         public void activeLayerChange(Layer oldLayer, Layer newLayer) { 
    243             updateEnabledState(); 
    244         } 
    245  
    246         public void layerAdded(Layer newLayer) { 
    247             updateEnabledState(); 
    248         } 
    249  
    250         public void layerRemoved(Layer oldLayer) { 
    251             updateEnabledState(); 
    252         } 
    253167    } 
    254168 
     
    316230            Way way = (Way) getMemberTableModel().getReferredPrimitive(getSelectedRows()[0]); 
    317231            if (!connectionType.linkPrev) { 
    318                 layer.data.setSelected(WayConnectionType.Direction.FORWARD.equals(connectionType.direction) 
     232                getLayer().data.setSelected(WayConnectionType.Direction.FORWARD.equals(connectionType.direction) 
    319233                        ? way.firstNode() : way.lastNode()); 
    320234                AutoScaleAction.autoScale("selection"); 
    321235            } else if (!connectionType.linkNext) { 
    322                 layer.data.setSelected(WayConnectionType.Direction.FORWARD.equals(connectionType.direction) 
     236                getLayer().data.setSelected(WayConnectionType.Direction.FORWARD.equals(connectionType.direction) 
    323237                        ? way.lastNode() : way.firstNode()); 
    324238                AutoScaleAction.autoScale("selection"); 
     
    328242        private void updateEnabledState() { 
    329243            setEnabled(Main.main != null 
    330                     && Main.main.getEditLayer() == layer 
     244                    && Main.main.getEditLayer() == getLayer() 
    331245                    && getSelectedRowCount() == 1 
    332246                    && hasGap()); 
     
    357271        return (MemberTableModel) getModel(); 
    358272    } 
    359  
    360     private class DblClickHandler extends MouseAdapter { 
    361  
    362         protected void setSelection(MouseEvent e) { 
    363             int row = rowAtPoint(e.getPoint()); 
    364             if (row < 0) return; 
    365             OsmPrimitive primitive = getMemberTableModel().getReferredPrimitive(row); 
    366             getMemberTableModel().getLayer().data.setSelected(primitive.getPrimitiveId()); 
    367         } 
    368  
    369         protected void addSelection(MouseEvent e) { 
    370             int row = rowAtPoint(e.getPoint()); 
    371             if (row < 0) return; 
    372             OsmPrimitive primitive = getMemberTableModel().getReferredPrimitive(row); 
    373             getMemberTableModel().getSelectionModel().addSelectionInterval(row, row); 
    374             getMemberTableModel().getLayer().data.addSelected(primitive.getPrimitiveId()); 
    375  
    376         } 
    377  
    378         @Override 
    379         public void mouseClicked(MouseEvent e) { 
    380             if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() > 1) { 
    381                 if (e.isControlDown()) { 
    382                     addSelection(e); 
    383                 } else { 
    384                     setSelection(e); 
    385                 } 
    386             } 
    387         } 
    388     } 
    389273} 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java

    r5266 r5297  
    4545import org.openstreetmap.josm.gui.dialogs.relation.WayConnectionType.Direction; 
    4646import org.openstreetmap.josm.gui.layer.OsmDataLayer; 
    47  
    48 public class MemberTableModel extends AbstractTableModel implements TableModelListener, SelectionChangedListener, DataSetListener { 
     47import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTableModel; 
     48 
     49public class MemberTableModel extends AbstractTableModel implements TableModelListener, SelectionChangedListener, DataSetListener, OsmPrimitivesTableModel { 
    4950 
    5051    /** 
     
    198199    } 
    199200 
     201    @Override 
    200202    public OsmPrimitive getReferredPrimitive(int idx) { 
    201203        return members.get(idx).getMember(); 
     
    650652     * @return the unlinked node if element is a way, the node itself if element is a node, null otherwise 
    651653     */ 
    652     private static Node getUnusedNode(RelationMember element, RelationMember linked_element) 
     654    /*private static Node getUnusedNode(RelationMember element, RelationMember linked_element) 
    653655    { 
    654656        Node result = null; 
     
    677679 
    678680        return result; 
    679     } 
     681    }*/ 
    680682 
    681683    /* 
  • trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r5275 r5297  
    7878import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor; 
    7979import org.openstreetmap.josm.gui.progress.ProgressMonitor; 
     80import org.openstreetmap.josm.gui.util.GuiHelper; 
    8081import org.openstreetmap.josm.tools.DateUtils; 
    8182import org.openstreetmap.josm.tools.FilteredCollection; 
     
    386387        ); 
    387388 
    388         StringBuffer sb = new StringBuffer(); 
     389        final StringBuffer sb = new StringBuffer(); 
    389390        sb.append("<html>").append(msg1).append("</html>"); 
    390391        if (numNewConflicts > 0) { 
    391             ButtonSpec[] options = new ButtonSpec[] { 
     392            final ButtonSpec[] options = new ButtonSpec[] { 
    392393                    new ButtonSpec( 
    393394                            tr("OK"), 
     
    397398                    ) 
    398399            }; 
    399             HelpAwareOptionPane.showOptionDialog( 
    400                     Main.parent, 
    401                     sb.toString(), 
    402                     tr("Conflicts detected"), 
    403                     JOptionPane.WARNING_MESSAGE, 
    404                     null, /* no icon */ 
    405                     options, 
    406                     options[0], 
    407                     ht("/Concepts/Conflict#WarningAboutDetectedConflicts") 
    408             ); 
    409             Main.map.conflictDialog.unfurlDialog(); 
    410             Main.map.repaint(); 
     400            GuiHelper.runInEDT(new Runnable() { 
     401                @Override 
     402                public void run() { 
     403                    HelpAwareOptionPane.showOptionDialog( 
     404                            Main.parent, 
     405                            sb.toString(), 
     406                            tr("Conflicts detected"), 
     407                            JOptionPane.WARNING_MESSAGE, 
     408                            null, /* no icon */ 
     409                            options, 
     410                            options[0], 
     411                            ht("/Concepts/Conflict#WarningAboutDetectedConflicts") 
     412                    ); 
     413                    Main.map.conflictDialog.unfurlDialog(); 
     414                    Main.map.repaint(); 
     415                } 
     416            }); 
    411417        } 
    412418    } 
  • trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java

    r5233 r5297  
    77import java.awt.Container; 
    88import java.awt.Image; 
     9import java.lang.reflect.InvocationTargetException; 
    910 
    1011import javax.swing.Icon; 
     
    4344        } 
    4445    } 
     46 
     47    public static void runInEDTAndWait(Runnable task) { 
     48        if (SwingUtilities.isEventDispatchThread()) { 
     49            task.run(); 
     50        } else { 
     51            try { 
     52                SwingUtilities.invokeAndWait(task); 
     53            } catch (InterruptedException e) { 
     54                e.printStackTrace(); 
     55            } catch (InvocationTargetException e) { 
     56                e.printStackTrace(); 
     57            } 
     58        } 
     59    } 
    4560     
    4661    /** 
Note: See TracChangeset for help on using the changeset viewer.