This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 232222
Collapse All | Expand All

(-)versioning.util/src/org/netbeans/modules/versioning/util/common/VCSCommitTable.java (-69 / +54 lines)
Lines 46-53 Link Here
46
46
47
import java.io.File;
47
import java.io.File;
48
import org.netbeans.modules.versioning.util.FilePathCellRenderer;
48
import org.netbeans.modules.versioning.util.FilePathCellRenderer;
49
import org.netbeans.modules.versioning.util.SortedTable;
50
import org.netbeans.modules.versioning.util.TableSorter;
51
import org.openide.util.NbBundle;
49
import org.openide.util.NbBundle;
52
50
53
import javax.swing.*;
51
import javax.swing.*;
Lines 66-71 Link Here
66
import java.awt.event.MouseListener;
64
import java.awt.event.MouseListener;
67
import java.util.*;
65
import java.util.*;
68
import javax.swing.table.TableCellRenderer;
66
import javax.swing.table.TableCellRenderer;
67
import org.netbeans.swing.etable.ETable;
68
import org.netbeans.swing.etable.ETableColumn;
69
import org.openide.awt.Mnemonics;
69
import org.openide.awt.Mnemonics;
70
70
71
/**
71
/**
Lines 76-87 Link Here
76
public class VCSCommitTable<F extends VCSFileNode> implements AncestorListener, TableModelListener, MouseListener {    
76
public class VCSCommitTable<F extends VCSFileNode> implements AncestorListener, TableModelListener, MouseListener {    
77
    
77
    
78
    private VCSCommitTableModel<F> tableModel;
78
    private VCSCommitTableModel<F> tableModel;
79
    private JTable              table;
79
    private ETable              table;
80
    private JComponent          component;
80
    private JComponent          component;
81
    
81
    
82
    private TableSorter         sorter;
83
    private String[]            columns;
82
    private String[]            columns;
84
    private String[]            sortByColumns;
85
    private Set<File> modifiedFiles = Collections.<File>emptySet();
83
    private Set<File> modifiedFiles = Collections.<File>emptySet();
86
    private VCSCommitPanel commitPanel;
84
    private VCSCommitPanel commitPanel;
87
85
Lines 97-112 Link Here
97
        this.editable = isEditable;
95
        this.editable = isEditable;
98
        this.modifier = tableModel.getCommitModifier();
96
        this.modifier = tableModel.getCommitModifier();
99
        init(tableModel);
97
        init(tableModel);
100
        this.sortByColumns = new String[] { VCSCommitTableModel.COLUMN_NAME_PATH };
101
        setSortingStatus();
102
    }
98
    }
103
99
104
    private void init(VCSCommitTableModel<F> tableModel) {
100
    private void init(VCSCommitTableModel<F> tableModel) {
105
        this.tableModel = tableModel;
101
        this.tableModel = tableModel;
106
        tableModel.addTableModelListener(this);
102
        tableModel.addTableModelListener(this);
107
        sorter = new TableSorter(tableModel);
108
        
103
        
109
        table = new SortedTable(this.sorter);
104
        table = new ETable(tableModel);
110
        table.getTableHeader().setReorderingAllowed(false);
105
        table.getTableHeader().setReorderingAllowed(false);
111
        table.setDefaultRenderer(String.class, new CommitStringsCellRenderer());
106
        table.setDefaultRenderer(String.class, new CommitStringsCellRenderer());
112
        table.setDefaultRenderer(Boolean.class, new CheckboxCellRenderer());
107
        table.setDefaultRenderer(Boolean.class, new CheckboxCellRenderer());
Lines 165-243 Link Here
165
        if (columnModel.getColumnCount() != columns.length) return; 
160
        if (columnModel.getColumnCount() != columns.length) return; 
166
        if (columns.length == 4) {
161
        if (columns.length == 4) {
167
            for (int i = 0; i < columns.length; i++) {
162
            for (int i = 0; i < columns.length; i++) {
168
                String col = columns[i];                                
163
                String col = columns[i];
169
                sorter.setColumnComparator(i, null);                    
164
                ETableColumn column = (ETableColumn) columnModel.getColumn(i);
165
                column.setNestedComparator(null);                    
170
                if (col.equals(VCSCommitTableModel.COLUMN_NAME_COMMIT)) {
166
                if (col.equals(VCSCommitTableModel.COLUMN_NAME_COMMIT)) {
171
                    columnModel.getColumn(i).setMinWidth(new JCheckBox().getMinimumSize().width);
167
                    column.setMinWidth(new JCheckBox().getMinimumSize().width);
172
                    columnModel.getColumn(i).setPreferredWidth(new JCheckBox().getPreferredSize().width);
168
                    column.setPreferredWidth(new JCheckBox().getPreferredSize().width);
173
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_NAME)) {
169
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_NAME)) {
174
                    sorter.setColumnComparator(i, new FileNameComparator());
170
                    column.setNestedComparator(new FileNameComparator());
175
                    columnModel.getColumn(i).setPreferredWidth(width * 30 / 100);
171
                    column.setPreferredWidth(width * 30 / 100);
176
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_ACTION)) {
172
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_ACTION)) {
177
                    columnModel.getColumn(i).setPreferredWidth(width * 15 / 100);
173
                    column.setPreferredWidth(width * 15 / 100);
178
                } else {
174
                } else {
179
                    columnModel.getColumn(i).setPreferredWidth(width * 40 / 100);
175
                    column.setPreferredWidth(width * 40 / 100);
180
                }                
176
                }                
181
            }
177
            }
182
        } else if (columns.length == 5) {
178
        } else if (columns.length == 5) {
183
            for (int i = 0; i < columns.length; i++) {
179
            for (int i = 0; i < columns.length; i++) {
184
                String col = columns[i];                                
180
                String col = columns[i];                                
185
                sorter.setColumnComparator(i, null);                    
181
                ETableColumn column = (ETableColumn) columnModel.getColumn(i);
186
                if (col.equals(VCSCommitTableModel.COLUMN_NAME_COMMIT)) {
182
                if (col.equals(VCSCommitTableModel.COLUMN_NAME_COMMIT)) {
187
                    columnModel.getColumn(i).setMinWidth(new JCheckBox().getMinimumSize().width);
183
                    column.setMinWidth(new JCheckBox().getMinimumSize().width);
188
                    columnModel.getColumn(i).setPreferredWidth(new JCheckBox().getPreferredSize().width);
184
                    column.setPreferredWidth(new JCheckBox().getPreferredSize().width);
189
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_NAME)) {
185
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_NAME)) {
190
                    sorter.setColumnComparator(i, new FileNameComparator());
186
                    column.setNestedComparator(new FileNameComparator());
191
                    columnModel.getColumn(i).setPreferredWidth(width * 25 / 100);
187
                    column.setPreferredWidth(width * 25 / 100);
192
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_STATUS)) {
188
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_STATUS)) {
193
                    sorter.setColumnComparator(i, new StatusComparator());                    
189
                    column.setNestedComparator(new StatusComparator());                    
194
                    columnModel.getColumn(i).setPreferredWidth(width * 15 / 100);
190
                    column.setCellRenderer(statusRenderer);
191
                    column.setPreferredWidth(width * 15 / 100);
195
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_ACTION)) {
192
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_ACTION)) {
196
                    columnModel.getColumn(i).setPreferredWidth(width * 20 / 100);
193
                    column.setPreferredWidth(width * 20 / 100);
197
                } else {
194
                } else {
198
                    columnModel.getColumn(i).setPreferredWidth(width * 40 / 100);
195
                    column.setPreferredWidth(width * 40 / 100);
199
                }                
196
                }                
200
            }
197
            }
201
        } else if (columns.length == 6) {
198
        } else if (columns.length == 6) {
202
            for (int i = 0; i < columns.length; i++) {
199
            for (int i = 0; i < columns.length; i++) {
203
                String col = columns[i];
200
                String col = columns[i];
204
                sorter.setColumnComparator(i, null);                
201
                ETableColumn column = (ETableColumn) columnModel.getColumn(i);
205
                if (col.equals(VCSCommitTableModel.COLUMN_NAME_COMMIT)) {
202
                if (col.equals(VCSCommitTableModel.COLUMN_NAME_COMMIT)) {
206
                    columnModel.getColumn(i).setMinWidth(new JCheckBox().getMinimumSize().width);
203
                    column.setMinWidth(new JCheckBox().getMinimumSize().width);
207
                    columnModel.getColumn(i).setPreferredWidth(new JCheckBox().getPreferredSize().width);
204
                    column.setPreferredWidth(new JCheckBox().getPreferredSize().width);
208
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_NAME)) {
205
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_NAME)) {
209
                    sorter.setColumnComparator(i, new FileNameComparator());
206
                    column.setNestedComparator(new FileNameComparator());
210
                    columnModel.getColumn(i).setPreferredWidth(width * 25 / 100);
207
                    column.setPreferredWidth(width * 25 / 100);
211
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_STATUS)) {
208
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_STATUS)) {
212
                    sorter.setColumnComparator(i, new StatusComparator());
209
                    column.setNestedComparator(new StatusComparator());
213
                    sorter.setSortingStatus(i, TableSorter.ASCENDING);
210
                    column.setCellRenderer(statusRenderer);
214
                    columnModel.getColumn(i).setPreferredWidth(width * 15 / 100);
211
                    column.setPreferredWidth(width * 15 / 100);
215
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_ACTION)) {
212
                } else if (col.equals(VCSCommitTableModel.COLUMN_NAME_ACTION)) {
216
                    columnModel.getColumn(i).setPreferredWidth(width * 15 / 100);
213
                    column.setPreferredWidth(width * 15 / 100);
217
                } else {
214
                } else {
218
                    columnModel.getColumn(i).setPreferredWidth(width * 30 / 100);
215
                    column.setPreferredWidth(width * 30 / 100);
219
                }
216
                }
220
            }
217
            }
221
        }
218
        }
222
    }
219
    }
223
224
    private void setSortingStatus() {
225
        for (int i = 0; i < sortByColumns.length; i++) {
226
            String sortByColumn = sortByColumns[i];        
227
            for (int j = 0; j < columns.length; j++) {
228
                String column = columns[j];
229
                if(column.equals(sortByColumn)) {
230
                    sorter.setSortingStatus(j, column.equals(sortByColumn) ? TableSorter.ASCENDING : TableSorter.NOT_SORTED);                       
231
                    break;
232
                }                    
233
            }                        
234
        }        
235
    }
236
    
220
    
237
    public TableSorter getSorter() {
238
        return sorter;
239
    }
240
    
241
    @Override
221
    @Override
242
    public void ancestorMoved(AncestorEvent event) {
222
    public void ancestorMoved(AncestorEvent event) {
243
    }
223
    }
Lines 250-255 Link Here
250
        if (Arrays.equals(columns, cols)) return;
230
        if (Arrays.equals(columns, cols)) return;
251
        columns = cols;
231
        columns = cols;
252
        tableModel.setColumns(cols);
232
        tableModel.setColumns(cols);
233
        table.setColumnHidingAllowed(false);
253
        setDefaultColumnSizes();
234
        setDefaultColumnSizes();
254
    }
235
    }
255
236
Lines 349-355 Link Here
349
        boolean containsExcluded = false;
330
        boolean containsExcluded = false;
350
        boolean containsIncluded = false;
331
        boolean containsIncluded = false;
351
        for (int rowIndex : table.getSelectedRows()) {
332
        for (int rowIndex : table.getSelectedRows()) {
352
            if (modifier.getExcludedOption().equals(tableModel.getOption(sorter.modelIndex(rowIndex)))) {
333
            if (modifier.getExcludedOption().equals(tableModel.getOption(table.convertRowIndexToModel(rowIndex)))) {
353
                containsExcluded = true;
334
                containsExcluded = true;
354
            } else {
335
            } else {
355
                containsIncluded = true;
336
                containsIncluded = true;
Lines 398-410 Link Here
398
        int[] rows = table.getSelectedRows();
379
        int[] rows = table.getSelectedRows();
399
        int rowCount = table.getRowCount();
380
        int rowCount = table.getRowCount();
400
        for (int i = 0; i < rows.length; ++i) {
381
        for (int i = 0; i < rows.length; ++i) {
401
            rows[i] = sorter.modelIndex(rows[i]);
382
            rows[i] = table.convertRowIndexToModel(rows[i]);
402
        }
383
        }
403
        tableModel.setIncluded(rows, included);
384
        tableModel.setIncluded(rows, included);
404
        // WA for table sorter, keep the selection
385
        // WA for table sorter, keep the selection
405
        if (rowCount == table.getRowCount()) {
386
        if (rowCount == table.getRowCount()) {
406
            for (int i = 0; i < rows.length; ++i) {
387
            for (int i = 0; i < rows.length; ++i) {
407
                table.getSelectionModel().addSelectionInterval(sorter.viewIndex(rows[i]), sorter.viewIndex(rows[i]));
388
                table.getSelectionModel().addSelectionInterval(table.convertRowIndexToView(rows[i]), table.convertRowIndexToView(rows[i]));
408
            }
389
            }
409
        }
390
        }
410
    }
391
    }
Lines 454-463 Link Here
454
        int[] rows = table.getSelectedRows();
435
        int[] rows = table.getSelectedRows();
455
        VCSFileNode[] nodes = new VCSFileNode[rows.length];
436
        VCSFileNode[] nodes = new VCSFileNode[rows.length];
456
        for (int i = 0; i < rows.length; ++i) {
437
        for (int i = 0; i < rows.length; ++i) {
457
            nodes[i] = tableModel.getNode(sorter.modelIndex(rows[i]));
438
            nodes[i] = tableModel.getNode(table.convertRowIndexToModel(rows[i]));
458
        }
439
        }
459
        commitPanel.openDiff(nodes);
440
        commitPanel.openDiff(nodes);
460
    }
441
    }
442
    
443
    private TableCellRenderer statusRenderer = new DefaultTableCellRenderer () {
444
        @Override
445
        public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
446
            if (value instanceof VCSFileInformation) {
447
                value = ((VCSFileInformation) value).getStatusText();
448
            }
449
            return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
450
        }
451
    };
461
452
462
    private class CommitStringsCellRenderer extends DefaultTableCellRenderer {
453
    private class CommitStringsCellRenderer extends DefaultTableCellRenderer {
463
454
Lines 467-476 Link Here
467
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
458
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
468
            int col = table.convertColumnIndexToModel(column);
459
            int col = table.convertColumnIndexToModel(column);
469
            if (VCSCommitTableModel.COLUMN_NAME_NAME.equals(columns[col])) {
460
            if (VCSCommitTableModel.COLUMN_NAME_NAME.equals(columns[col])) {
470
                TableSorter sorter = (TableSorter) table.getModel();
461
                VCSFileNode node = tableModel.getNode(table.convertRowIndexToModel(row));
471
                VCSCommitTableModel model = (VCSCommitTableModel) sorter.getTableModel();
462
                VCSCommitOptions options = tableModel.getOption(table.convertRowIndexToModel(row));
472
                VCSFileNode node = model.getNode(sorter.modelIndex(row));
473
                VCSCommitOptions options = model.getOption(sorter.modelIndex(row));
474
                if (!isSelected) {
463
                if (!isSelected) {
475
                    value = node.getInformation().annotateNameHtml(node.getFile().getName()); 
464
                    value = node.getInformation().annotateNameHtml(node.getFile().getName()); 
476
                }
465
                }
Lines 524-543 Link Here
524
    
513
    
525
    private class StatusComparator extends VCSFileInformation.ByImportanceComparator {
514
    private class StatusComparator extends VCSFileInformation.ByImportanceComparator {
526
        public int compare(Object o1, Object o2) {
515
        public int compare(Object o1, Object o2) {
527
            Integer row1 = (Integer) o1;
516
            VCSFileInformation info1 = (VCSFileInformation) o1;
528
            Integer row2 = (Integer) o2;
517
            VCSFileInformation info2 = (VCSFileInformation) o2;
529
            return super.compare(tableModel.getNode(row1.intValue()).getInformation(),
518
            return super.compare(info1, info2);
530
                                 tableModel.getNode(row2.intValue()).getInformation());
531
        }
519
        }
532
    }
520
    }
533
    
521
    
534
    private class FileNameComparator implements Comparator {
522
    private class FileNameComparator implements Comparator {
535
        @Override
523
        @Override
536
        public int compare(Object o1, Object o2) {
524
        public int compare(Object o1, Object o2) {
537
            Integer row1 = (Integer) o1;
525
            return o1.toString().compareToIgnoreCase(o2.toString());
538
            Integer row2 = (Integer) o2;
539
            return tableModel.getNode(row1.intValue()).getName().compareToIgnoreCase(
540
                    tableModel.getNode(row2.intValue()).getName());
541
        }
526
        }
542
    }    
527
    }    
543
528
(-)versioning.util/src/org/netbeans/modules/versioning/util/common/VCSCommitTableModel.java (-1 / +1 lines)
Lines 194-200 Link Here
194
        } else if (col.equals(COLUMN_NAME_STATUS)) {
194
        } else if (col.equals(COLUMN_NAME_STATUS)) {
195
            node = nodes[rowIndex];
195
            node = nodes[rowIndex];
196
            VCSFileInformation finfo =  node.getInformation();
196
            VCSFileInformation finfo =  node.getInformation();
197
            return finfo.getStatusText();
197
            return finfo;
198
        } else if (col.equals(COLUMN_NAME_ACTION)) {
198
        } else if (col.equals(COLUMN_NAME_ACTION)) {
199
            return nodes[rowIndex].getCommitOptions();
199
            return nodes[rowIndex].getCommitOptions();
200
        } else if (col.equals(COLUMN_NAME_PATH)) {
200
        } else if (col.equals(COLUMN_NAME_PATH)) {
(-)versioning.util/src/org/netbeans/modules/versioning/util/TableSorter.java (+6 lines)
Lines 55-60 Link Here
55
import javax.swing.event.TableModelEvent;
55
import javax.swing.event.TableModelEvent;
56
import javax.swing.event.TableModelListener;
56
import javax.swing.event.TableModelListener;
57
import javax.swing.table.*;
57
import javax.swing.table.*;
58
import org.netbeans.swing.etable.ETable;
58
import org.openide.util.ImageUtilities;
59
import org.openide.util.ImageUtilities;
59
60
60
/**
61
/**
Lines 109-114 Link Here
109
 * @version 2.0 02/27/04
110
 * @version 2.0 02/27/04
110
 */
111
 */
111
112
113
/**
114
 * 
115
 * @deprecated use {@link ETable} instead
116
 */
117
@Deprecated
112
public final class TableSorter extends AbstractTableModel {
118
public final class TableSorter extends AbstractTableModel {
113
    protected TableModel tableModel;
119
    protected TableModel tableModel;
114
120

Return to bug 232222