Changeset 16490 in josm


Ignore:
Timestamp:
2020-05-23T22:23:01+02:00 (2 weeks ago)
Author:
simon04
Message:

fix #19255 - History browser: add "index of node/member" column

Location:
trunk/src/org/openstreetmap/josm/gui/history
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/history/DiffTableModel.java

    r16438 r16490  
    1616class DiffTableModel extends AbstractTableModel {
    1717    private transient List<TwoColumnDiff.Item> rows = new ArrayList<>();
     18    private transient int[] rowNumbers;
    1819    private boolean reversed;
    1920
     
    2122        this.rows = rows;
    2223        this.reversed = reversed;
     24        computeRowNumbers();
    2325        fireTableDataChanged();
    2426    }
     
    4850                .findFirst().orElse(-1);
    4951    }
     52
     53    void computeRowNumbers() {
     54        rowNumbers = new int[rows.size()];
     55        int rowNumber = reversed ? rows.size() : 1;
     56        int i = 0;
     57        for (TwoColumnDiff.Item item : rows) {
     58            if (item.state == DiffItemType.EMPTY) {
     59                rowNumbers[i] = -1;
     60            } else if (reversed) {
     61                rowNumbers[i] = rowNumber--;
     62            } else {
     63                rowNumbers[i] = rowNumber++;
     64            }
     65            i++;
     66        }
     67    }
     68
     69    public int getRowNumber(int rowIndex) {
     70        return rowNumbers[rowIndex];
     71    }
    5072}
  • trunk/src/org/openstreetmap/josm/gui/history/NodeListTableCellRenderer.java

    r16458 r16490  
    3737    }
    3838
    39     protected void renderNode(TwoColumnDiff.Item item, boolean isSelected, boolean hasFocus) {
     39    protected void renderIndex(DiffTableModel model, int row) {
     40        int rowNumber = model.getRowNumber(row);
     41        setText(rowNumber > 0 ? Integer.toString(rowNumber) : "");
     42        setToolTipText(null);
     43        setHorizontalAlignment(CENTER);
     44        setIcon(null);
     45    }
     46
     47    protected void renderNode(TwoColumnDiff.Item item) {
    4048        String text = "";
    4149        setIcon(nodeIcon);
     
    4856        }
    4957        setText(text);
    50         GuiHelper.setBackgroundReadable(this, item.state.getColor(isSelected, hasFocus));
     58        setHorizontalAlignment(LEFT);
    5159    }
    5260
     
    5664            int row, int column) {
    5765
    58         if (value != null) {
    59             renderNode((TwoColumnDiff.Item) value, isSelected, hasFocus);
     66        if (value == null) return this;
     67        TwoColumnDiff.Item item = (TwoColumnDiff.Item) value;
     68        GuiHelper.setBackgroundReadable(this, item.state.getColor(isSelected, hasFocus));
     69        switch(column) {
     70        case NodeListTableColumnModel.INDEX_COLUMN:
     71            renderIndex((DiffTableModel) table.getModel(), row);
     72            break;
     73        case NodeListTableColumnModel.NODE_COLUMN:
     74            renderNode(item);
     75            break;
    6076        }
    6177        return this;
  • trunk/src/org/openstreetmap/josm/gui/history/NodeListTableColumnModel.java

    r15773 r16490  
    1313public class NodeListTableColumnModel extends DefaultTableColumnModel {
    1414
     15    static final int INDEX_COLUMN = 0;
     16    static final int NODE_COLUMN = 1;
     17
    1518    /**
    1619     * Constructs a new {@code NodeListTableColumnModel}.
     
    2326        NodeListTableCellRenderer renderer = new NodeListTableCellRenderer();
    2427
    25         // column 0 - Nodes
    26         TableColumn col = new TableColumn(0);
     28        TableColumn col = new TableColumn(INDEX_COLUMN, 0);
     29        col.setHeaderValue(tr("\u2116"));
     30        col.setCellRenderer(renderer);
     31        addColumn(col);
     32
     33        col = new TableColumn(NODE_COLUMN);
    2734        col.setHeaderValue(tr("Nodes"));
    2835        col.setCellRenderer(renderer);
  • trunk/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java

    r16458 r16490  
    3636    }
    3737
     38    protected void renderIndex(DiffTableModel model, int row) {
     39        int rowNumber = model.getRowNumber(row);
     40        setText(rowNumber > 0 ? Integer.toString(rowNumber) : "");
     41        setToolTipText(null);
     42        setHorizontalAlignment(CENTER);
     43        renderIcon(null);
     44    }
     45
    3846    protected void renderRole(Item diffItem) {
    3947        RelationMemberData member = (RelationMemberData) diffItem.value;
     
    4149        setText(text);
    4250        setToolTipText(text);
     51        setHorizontalAlignment(LEFT);
     52        renderIcon(null);
    4353    }
    4454
     
    5666        setText(text);
    5767        setToolTipText(text);
     68        setHorizontalAlignment(LEFT);
     69        renderIcon((RelationMemberData) diffItem.value);
    5870    }
    5971
     
    6577        if (value == null) return this;
    6678        Item member = (TwoColumnDiff.Item) value;
    67         renderIcon((RelationMemberData) member.value);
     79        Item.DiffItemType type = member.state;
    6880        switch(column) {
    69         case 0:
     81        case RelationMemberTableColumnModel.INDEX_COLUMN:
     82            type = Item.DiffItemType.EMPTY;
     83            renderIndex(((DiffTableModel) table.getModel()), row);
     84            break;
     85        case RelationMemberTableColumnModel.ROLE_COLUMN:
    7086            renderRole(member);
    7187            break;
    72         case 1:
     88        case RelationMemberTableColumnModel.OBJECT_COLUMN:
    7389            renderPrimitive(member);
    7490            break;
     
    7692        }
    7793
    78         GuiHelper.setBackgroundReadable(this, member.state.getColor(isSelected, hasFocus));
     94        GuiHelper.setBackgroundReadable(this, type.getColor(isSelected, hasFocus));
    7995        return this;
    8096    }
  • trunk/src/org/openstreetmap/josm/gui/history/RelationMemberTableColumnModel.java

    r15773 r16490  
    1313public class RelationMemberTableColumnModel extends DefaultTableColumnModel {
    1414
     15    static final int INDEX_COLUMN = 0;
     16    static final int ROLE_COLUMN = 1;
     17    static final int OBJECT_COLUMN = 2;
     18
    1519    /**
    1620     * Constructs a new {@code RelationMemberTableColumnModel}.
     
    2327        RelationMemberListTableCellRenderer renderer = new RelationMemberListTableCellRenderer();
    2428
    25         // column 0 - Role
    26         TableColumn col = new TableColumn(0);
     29        TableColumn col = new TableColumn(INDEX_COLUMN, 0);
     30        col.setHeaderValue(tr("\u2116"));
     31        col.setCellRenderer(renderer);
     32        addColumn(col);
     33
     34        col = new TableColumn(ROLE_COLUMN);
    2735        col.setHeaderValue(tr("Role"));
    2836        col.setCellRenderer(renderer);
    2937        addColumn(col);
    3038
    31         // column 1 - Object
    32         col = new TableColumn(1);
     39        col = new TableColumn(OBJECT_COLUMN);
    3340        col.setHeaderValue(tr("Object"));
    3441        col.setCellRenderer(renderer);
Note: See TracChangeset for help on using the changeset viewer.