Ignore:
Timestamp:
2009-06-01T22:20:03+02:00 (15 years ago)
Author:
Gubaer
Message:

added support for merging member lists of relations in extended conflict resolution dialog

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagMerger.java

    r1626 r1631  
    77import java.awt.GridBagConstraints;
    88import java.awt.GridBagLayout;
     9import java.awt.Insets;
    910import java.awt.event.ActionEvent;
    1011import java.awt.event.AdjustmentEvent;
     
    2930
    3031    private JTable mineTable;
    31     private JTable undecidedTable;
     32    private JTable mergedTable;
    3233    private JTable theirTable;
    33     private TagMergeModel model;
     34    private final TagMergeModel model;
    3435    private JButton btnKeepMine;
    3536    private JButton btnKeepTheir;
     
    4041        pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    4142        pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
    42        
     43
    4344        adjustmentSynchronizer.synchronizeAdjustment(pane.getVerticalScrollBar());
    4445        return pane;
    4546    }
    46    
     47
    4748    protected JScrollPane buildMineTagTable() {
    4849        mineTable  = new JTable(
    49            model,
    50            new TagMergeColumnModel(
    51               new MineTableCellRenderer()
    52            )
     50                model,
     51                new TagMergeColumnModel(
     52                        new MineTableCellRenderer()
     53                )
    5354        );
     55        mineTable.setName("table.my");
    5456        return embeddInScrollPane(mineTable);
    5557    }
     
    5759    protected JScrollPane buildTheirTable() {
    5860        theirTable  = new JTable(
    59             model,
    60             new TagMergeColumnModel(
    61                new TheirTableCellRenderer()
    62             )
    63          );
    64          return embeddInScrollPane(theirTable);
    65     }
    66    
     61                model,
     62                new TagMergeColumnModel(
     63                        new TheirTableCellRenderer()
     64                )
     65        );
     66        theirTable.setName("table.their");
     67        return embeddInScrollPane(theirTable);
     68    }
     69
    6770    protected JScrollPane buildUndecidedTable() {
    68         undecidedTable  = new JTable(
    69             model,
    70             new TagMergeColumnModel(
    71                new UndecidedTableCellRenderer()
    72             )
    73          );
    74          return embeddInScrollPane(undecidedTable);
    75     }
    76    
     71        mergedTable  = new JTable(
     72                model,
     73                new TagMergeColumnModel(
     74                        new UndecidedTableCellRenderer()
     75                )
     76        );
     77        mergedTable.setName("table.merged");
     78        return embeddInScrollPane(mergedTable);
     79    }
     80
    7781    protected void build() {
    7882        GridBagConstraints gc = new GridBagConstraints();
    7983        setLayout(new GridBagLayout());
    80        
     84
    8185        adjustmentSynchronizer = new AdjustmentSynchronizer();
    82        
     86
    8387        gc.gridx = 0;
    8488        gc.gridy = 0;
     
    8690        gc.gridheight = 1;
    8791        gc.fill = GridBagConstraints.NONE;
    88         gc.anchor = GridBagConstraints.CENTER; 
    89         gc.weightx = 0.0;
    90         gc.weighty = 0.0;
     92        gc.anchor = GridBagConstraints.CENTER;
     93        gc.weightx = 0.0;
     94        gc.weighty = 0.0;
     95        gc.insets = new Insets(10,0,10,0);
    9196        JLabel lbl = new JLabel(tr("My version (local dataset)"));
    9297        add(lbl, gc);
     
    111116        gc.weightx = 0.0;
    112117        gc.weighty = 0.0;
     118        gc.insets = new Insets(0,0,0,0);
    113119        lbl = new JLabel(tr("Their version (server dataset)"));
    114120        add(lbl, gc);
     
    123129        gc.weighty = 1.0;
    124130        add(buildMineTagTable(), gc);
    125        
     131
    126132        gc.gridx = 1;
    127133        gc.gridy = 1;
     
    135141        mineTable.getSelectionModel().addListSelectionListener(keepMineAction);
    136142        btnKeepMine = new JButton(keepMineAction);
     143        btnKeepMine.setName("button.keepmine");
    137144        add(btnKeepMine, gc);
    138        
     145
    139146        gc.gridx = 2;
    140147        gc.gridy = 1;
     
    146153        gc.weighty = 1.0;
    147154        add(buildUndecidedTable(), gc);
    148        
     155
    149156        gc.gridx = 3;
    150157        gc.gridy = 1;
     
    157164        KeepTheirAction keepTheirAction = new KeepTheirAction();
    158165        btnKeepTheir = new JButton(keepTheirAction);
     166        btnKeepTheir.setName("button.keeptheir");
    159167        add(btnKeepTheir, gc);
    160        
     168
    161169        gc.gridx = 4;
    162170        gc.gridy = 1;
     
    169177        add(buildTheirTable(), gc);
    170178        theirTable.getSelectionModel().addListSelectionListener(keepTheirAction);
    171        
    172        
     179
     180
    173181        DoubleClickAdapter dblClickAdapter = new DoubleClickAdapter();
    174182        mineTable.addMouseListener(dblClickAdapter);
    175183        theirTable.addMouseListener(dblClickAdapter);
    176        
    177        
     184
     185
    178186        gc.gridx = 2;
    179187        gc.gridy = 2;
     
    185193        gc.weighty = 0.0;
    186194        UndecideAction undecidedAction = new UndecideAction();
    187         undecidedTable.getSelectionModel().addListSelectionListener(undecidedAction);
     195        mergedTable.getSelectionModel().addListSelectionListener(undecidedAction);
    188196        JButton btnUndecide = new JButton(undecidedAction);
     197        btnUndecide.setName("button.undecide");
    189198        add(btnUndecide, gc);
    190        
    191     }
    192    
     199
     200    }
     201
    193202    public TagMerger() {
    194203        model = new TagMergeModel();
    195204        build();
    196205    }
    197    
    198    
     206
    199207    public TagMergeModel getModel() {
    200208        return model;
    201209    }
    202    
     210
    203211    protected ImageIcon loadIcon(String name) {
    204        String path = "/images/dialogs/conflict/" + name;
    205        URL url = this.getClass().getResource(path);
    206        if (url == null) {
    207            System.out.println(tr("WARNING: failed to load resource {0}", path));
    208            return null;
    209        }
    210        return new ImageIcon(url);
    211     }
    212    
     212        String path = "/images/dialogs/conflict/" + name;
     213        URL url = this.getClass().getResource(path);
     214        if (url == null) {
     215            System.out.println(tr("WARNING: failed to load resource {0}", path));
     216            return null;
     217        }
     218        return new ImageIcon(url);
     219    }
     220
    213221    class KeepMineAction extends AbstractAction implements ListSelectionListener {
    214222
    215        
     223
    216224        public KeepMineAction() {
    217225            ImageIcon icon = loadIcon("tagkeepmine.png");
     
    225233            setEnabled(false);
    226234        }
    227        
     235
    228236        public void actionPerformed(ActionEvent arg0) {
    229237            int rows[] = mineTable.getSelectedRows();
    230             if (rows == null || rows.length == 0) {
    231                 return;
    232             }
    233             model.decide(rows, MergeDecisionType.KEEP_MINE);     
     238            if (rows == null || rows.length == 0)
     239                return;
     240            model.decide(rows, MergeDecisionType.KEEP_MINE);
    234241        }
    235242
    236243        public void valueChanged(ListSelectionEvent e) {
    237            setEnabled(mineTable.getSelectedRowCount() > 0);           
    238         }
    239     }
    240    
     244            setEnabled(mineTable.getSelectedRowCount() > 0);
     245        }
     246    }
     247
    241248    class KeepTheirAction extends AbstractAction implements ListSelectionListener {
    242        
     249
    243250        public KeepTheirAction() {
    244251            ImageIcon icon = loadIcon("tagkeeptheir.png");
     
    252259            setEnabled(false);
    253260        }
    254        
     261
    255262        public void actionPerformed(ActionEvent arg0) {
    256263            int rows[] = theirTable.getSelectedRows();
    257             if (rows == null || rows.length == 0) {
    258                 return;
    259             }
    260             model.decide(rows, MergeDecisionType.KEEP_THEIR);     
     264            if (rows == null || rows.length == 0)
     265                return;
     266            model.decide(rows, MergeDecisionType.KEEP_THEIR);
    261267        }
    262268
    263269        public void valueChanged(ListSelectionEvent e) {
    264            setEnabled(theirTable.getSelectedRowCount() > 0);           
    265         }
    266     }
    267    
     270            setEnabled(theirTable.getSelectedRowCount() > 0);
     271        }
     272    }
     273
    268274    class AdjustmentSynchronizer implements AdjustmentListener {
    269         private ArrayList<Adjustable> synchronizedAdjustables;
    270        
     275        private final ArrayList<Adjustable> synchronizedAdjustables;
     276
    271277        public AdjustmentSynchronizer() {
    272278            synchronizedAdjustables = new ArrayList<Adjustable>();
    273279        }
    274        
     280
    275281        public void synchronizeAdjustment(Adjustable adjustable) {
    276             if (adjustable == null) {
    277                 return;
    278             }
    279             if (synchronizedAdjustables.contains(adjustable)) {
    280                 return;
    281             }
     282            if (adjustable == null)
     283                return;
     284            if (synchronizedAdjustables.contains(adjustable))
     285                return;
    282286            synchronizedAdjustables.add(adjustable);
    283287            adjustable.addAdjustmentListener(this);
     
    292296        }
    293297    }
    294    
     298
    295299    class DoubleClickAdapter extends MouseAdapter {
    296300
     301        @Override
    297302        public void mouseClicked(MouseEvent e) {
    298             if (e.getClickCount() != 2) {
    299                 return;
    300             }
     303            if (e.getClickCount() != 2)
     304                return;
    301305            JTable table = null;
    302306            MergeDecisionType mergeDecision;
    303            
     307
    304308            if (e.getSource() == mineTable) {
    305                 table = (JTable)mineTable;
     309                table = mineTable;
    306310                mergeDecision = MergeDecisionType.KEEP_MINE;
    307311            } else if (e.getSource() == theirTable) {
    308                 table = (JTable)theirTable;
     312                table = theirTable;
    309313                mergeDecision = MergeDecisionType.KEEP_THEIR;
    310             } else if (e.getSource() == undecidedTable) {
    311                 table = (JTable)undecidedTable;
     314            } else if (e.getSource() == mergedTable) {
     315                table = mergedTable;
    312316                mergeDecision = MergeDecisionType.UNDECIDED;
    313             } else {
     317            } else
    314318                // double click in another component; shouldn't happen,
    315                 // but just in case
    316                 return;
    317             }
     319                // but just in case
     320                return;
    318321            int row = table.rowAtPoint(e.getPoint());
    319322            model.decide(row, mergeDecision);
    320323        }
    321     } 
    322    
     324    }
     325
    323326    class UndecideAction extends AbstractAction implements ListSelectionListener  {
    324327
     
    334337            setEnabled(false);
    335338        }
    336        
     339
    337340        public void actionPerformed(ActionEvent arg0) {
    338             int rows[] = undecidedTable.getSelectedRows();
    339             if (rows == null || rows.length == 0) {
    340                 return;
    341             }
    342             model.decide(rows, MergeDecisionType.UNDECIDED);     
     341            int rows[] = mergedTable.getSelectedRows();
     342            if (rows == null || rows.length == 0)
     343                return;
     344            model.decide(rows, MergeDecisionType.UNDECIDED);
    343345        }
    344346
    345347        public void valueChanged(ListSelectionEvent e) {
    346            setEnabled(undecidedTable.getSelectedRowCount() > 0);           
    347         }   
     348            setEnabled(mergedTable.getSelectedRowCount() > 0);
     349        }
    348350    }
    349351}
Note: See TracChangeset for help on using the changeset viewer.