Changeset 2945 in josm for trunk


Ignore:
Timestamp:
2010-02-06T09:37:48+01:00 (15 years ago)
Author:
jttt
Message:

Improvements in conflicts gui

Location:
trunk
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/command/DeletedStateConflictResolveCommand.java

    r2512 r2945  
    7272                conflict.getMy().setDeleted(true);
    7373            } else {
    74                 conflict.getMy().setDeleted(conflict.getTheir().isDeleted());
     74                conflict.getMy().setDeleted(false);
    7575            }
    7676        } else
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java

    r2936 r2945  
    231231        setMy(my);
    232232        setTheir(their);
    233         propertiesMerger.getModel().populate(my, their);
     233        propertiesMerger.populate(my, their);
    234234        if (propertiesMerger.getModel().hasVisibleStateConflict()) {
    235235            tabbedPane.setEnabledAt(1, false);
     
    239239        }
    240240        tabbedPane.setEnabledAt(0, true);
    241         tagMerger.getModel().populate(my, their);
     241        tagMerger.populate(my, their);
    242242        tabbedPane.setEnabledAt(1, true);
    243243
     
    246246            tabbedPane.setEnabledAt(3,false);
    247247        } else if (my instanceof Way) {
    248             nodeListMerger.populate((Way)my, (Way)their);
     248            nodeListMerger.populate(my, their);
    249249            tabbedPane.setEnabledAt(2, true);
    250250            tabbedPane.setEnabledAt(3, false);
     
    252252            tabbedPane.setIconAt(3, null);
    253253        } else if (my instanceof Relation) {
    254             relationMemberMerger.populate((Relation)my, (Relation)their);
     254            relationMemberMerger.populate(my, their);
    255255            tabbedPane.setEnabledAt(2, false);
    256256            tabbedPane.setTitleAt(2,tr("Nodes"));
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/IConflictResolver.java

    r2936 r2945  
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.gui.conflict.pair;
     3
     4import org.openstreetmap.josm.data.osm.OsmPrimitive;
    35
    46public interface IConflictResolver {
    57
    68    void deletePrimitive(boolean deleted);
     9    void populate(OsmPrimitive my, OsmPrimitive their);
    710
    811}
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java

    r2936 r2945  
    310310    }
    311311
     312    public void copyAll(ListRole source) {
     313        getMergedEntries().clear();
     314        getMergedEntries().addAll(entries.get(source));
     315        fireModelDataChanged();
     316    }
     317
    312318    /**
    313319     * Copies the nodes given by indices in rows from the list of  nodes <code>source</code> to the
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java

    r2846 r2945  
    5757    private CopyAfterCurrentLeftAction copyAfterCurrentLeftAction;
    5858    private CopyEndLeftAction copyEndLeftAction;
     59    private CopyAllLeft copyAllLeft;
    5960
    6061    private CopyStartRightAction copyStartRightAction;
     
    6263    private CopyAfterCurrentRightAction copyAfterCurrentRightAction;
    6364    private CopyEndRightAction copyEndRightAction;
     65    private CopyAllRight copyAllRight;
    6466
    6567    private MoveUpMergedAction moveUpMergedAction;
     
    118120        mergedEntriesTable.getSelectionModel().addListSelectionListener(moveDownMergedAction);
    119121        mergedEntriesTable.getSelectionModel().addListSelectionListener(removeMergedAction);
     122
     123        model.addObserver(copyAllLeft);
     124        model.addObserver(copyAllRight);
     125        model.addPropertyChangeListener(copyAllLeft);
     126        model.addPropertyChangeListener(copyAllRight);
    120127    }
    121128
     
    153160        pnl.add(btn, gc);
    154161
     162        gc.gridx = 0;
     163        gc.gridy = 4;
     164        copyAllLeft = new CopyAllLeft();
     165        btn = new JButton(copyAllLeft);
     166        btn.setName("button.copyallleft");
     167        pnl.add(btn, gc);
     168
    155169        return pnl;
    156170    }
     
    180194        copyEndRightAction = new CopyEndRightAction();
    181195        pnl.add(new JButton(copyEndRightAction), gc);
     196
     197        gc.gridx = 0;
     198        gc.gridy = 4;
     199        copyAllRight = new CopyAllRight();
     200        pnl.add(new JButton(copyAllRight), gc);
    182201
    183202        return pnl;
     
    614633                    && ! mergedEntriesTable.getSelectionModel().isSelectionEmpty()
    615634            );
     635        }
     636    }
     637
     638    class CopyAllLeft extends AbstractAction implements Observer, PropertyChangeListener {
     639
     640        public CopyAllLeft() {
     641            ImageIcon icon = ImageProvider.get("dialogs/conflict", "useallleft.png");
     642            putValue(Action.SMALL_ICON, icon);
     643            putValue(Action.SHORT_DESCRIPTION, tr("Use all mine elements"));
     644        }
     645
     646        public void actionPerformed(ActionEvent arg0) {
     647            model.copyAll(ListRole.MY_ENTRIES);
     648            model.setFrozen(true);
     649        }
     650
     651        private void updateEnabledState() {
     652            setEnabled(model.getMergedEntries().isEmpty() && !model.isFrozen());
     653        }
     654
     655        public void update(Observable o, Object arg) {
     656            updateEnabledState();
     657        }
     658
     659        public void propertyChange(PropertyChangeEvent evt) {
     660            updateEnabledState();
     661        }
     662    }
     663
     664    class CopyAllRight extends AbstractAction implements Observer, PropertyChangeListener {
     665
     666        public CopyAllRight() {
     667            ImageIcon icon = ImageProvider.get("dialogs/conflict", "useallright.png");
     668            putValue(Action.SMALL_ICON, icon);
     669            putValue(Action.SHORT_DESCRIPTION, tr("Use all their elements"));
     670        }
     671
     672        public void actionPerformed(ActionEvent arg0) {
     673            model.copyAll(ListRole.THEIR_ENTRIES);
     674            model.setFrozen(true);
     675        }
     676
     677        private void updateEnabledState() {
     678            setEnabled(model.getMergedEntries().isEmpty() && !model.isFrozen());
     679        }
     680
     681        public void update(Observable o, Object arg) {
     682            updateEnabledState();
     683        }
     684
     685        public void propertyChange(PropertyChangeEvent evt) {
     686            updateEnabledState();
    616687        }
    617688    }
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java

    r2936 r2945  
    55
    66import org.openstreetmap.josm.data.osm.Node;
     7import org.openstreetmap.josm.data.osm.OsmPrimitive;
    78import org.openstreetmap.josm.data.osm.Way;
    89import org.openstreetmap.josm.gui.conflict.pair.IConflictResolver;
     
    6263    }
    6364
    64     public void populate(Way my, Way their) {
    65         ((NodeListMergeModel)model).populate(my, their);
     65    public void populate(OsmPrimitive my, OsmPrimitive their) {
     66        ((NodeListMergeModel)model).populate((Way)my, (Way)their);
    6667    }
    6768
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java

    r2940 r2945  
    717717        }
    718718    }
     719
     720    public void populate(OsmPrimitive my, OsmPrimitive their) {
     721        model.populate(my, their);
     722    }
    719723}
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java

    r2936 r2945  
    55import javax.swing.JTable;
    66
     7import org.openstreetmap.josm.data.osm.OsmPrimitive;
    78import org.openstreetmap.josm.data.osm.Relation;
    89import org.openstreetmap.josm.data.osm.RelationMember;
     
    5354    }
    5455
    55     public void populate(Relation my, Relation their) {
     56    public void populate(OsmPrimitive my, OsmPrimitive their) {
    5657        RelationMemberListMergeModel model = (RelationMemberListMergeModel)getModel();
    57         model.populate(my,their);
     58        model.populate((Relation)my, (Relation)their);
    5859    }
    5960
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java

    r2936 r2945  
    66import java.util.ArrayList;
    77import java.util.HashSet;
     8import java.util.List;
    89import java.util.Set;
    910
     
    3334
    3435    /** the list of tag merge items */
    35     private final ArrayList<TagMergeItem> tagMergeItems;
     36    private final List<TagMergeItem> tagMergeItems;
    3637
    3738    /** the property change listeners */
    38     private final ArrayList<PropertyChangeListener> listeners;
     39    private final List<PropertyChangeListener> listeners;
    3940
    4041    private int numUndecidedTags = 0;
     
    210211
    211212    }
     213
     214    public int getFirstUndecided(int startIndex) {
     215        for (int i=startIndex; i<tagMergeItems.size(); i++) {
     216            if (tagMergeItems.get(i).getMergeDecision() == MergeDecisionType.UNDECIDED)
     217                return i;
     218        }
     219        return -1;
     220    }
    212221}
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java

    r2936 r2945  
    2626import javax.swing.event.ListSelectionListener;
    2727
     28import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2829import org.openstreetmap.josm.gui.conflict.pair.IConflictResolver;
    2930import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
     
    241242    public TagMergeModel getModel() {
    242243        return model;
     244    }
     245
     246    private void selectNextConflict(int[] rows) {
     247        int max = rows[0];
     248        for (int row: rows) {
     249            if (row > max) {
     250                max = row;
     251            }
     252        }
     253        int index = model.getFirstUndecided(max+1);
     254        if (index == -1) {
     255            index = model.getFirstUndecided(0);
     256        }
     257        mineTable.getSelectionModel().setSelectionInterval(index, index);
     258        theirTable.getSelectionModel().setSelectionInterval(index, index);
    243259    }
    244260
     
    265281                return;
    266282            model.decide(rows, MergeDecisionType.KEEP_MINE);
     283            selectNextConflict(rows);
    267284        }
    268285
     
    294311                return;
    295312            model.decide(rows, MergeDecisionType.KEEP_THEIR);
     313            selectNextConflict(rows);
    296314        }
    297315
     
    402420        }
    403421    }
     422
     423    public void populate(OsmPrimitive my, OsmPrimitive their) {
     424        model.populate(my, their);
     425        mineTable.getSelectionModel().setSelectionInterval(0, 0);
     426        theirTable.getSelectionModel().setSelectionInterval(0, 0);
     427    }
    404428}
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java

    r2930 r2945  
    137137     */
    138138    private final void resolve() {
    139         if (conflicts == null) return;
    140         if (conflicts.size() == 1) {
    141             lstConflicts.setSelectedIndex(0);
    142         }
    143 
    144         if (lstConflicts.getSelectedIndex() == -1)
    145             return;
    146 
    147         int [] selectedRows = lstConflicts.getSelectedIndices();
    148         if (selectedRows == null || selectedRows.length == 0)
    149             return;
    150         int row = selectedRows[0];
    151         Conflict<?> c = conflicts.get(row);
     139        if (conflicts == null || model.getSize() == 0) return;
     140
     141        int index = lstConflicts.getSelectedIndex();
     142        if (index < 0) {
     143            index = 0;
     144        }
     145
     146        Conflict<?> c = conflicts.get(index);
    152147        OsmPrimitive my = c.getMy();
    153148        OsmPrimitive their = c.getTheir();
     
    155150        dialog.getConflictResolver().populate(my, their);
    156151        dialog.setVisible(true);
     152
     153        lstConflicts.setSelectedIndex(index);
     154
    157155        Main.map.mapView.repaint();
    158156    }
Note: See TracChangeset for help on using the changeset viewer.