Changeset 2945 in josm


Ignore:
Timestamp:
Feb 6, 2010 9:37:48 AM (3 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.