Changeset 12953 in josm for trunk


Ignore:
Timestamp:
2017-10-08T18:37:02+02:00 (7 years ago)
Author:
bastiK
Message:

see #15410 - highlight entries with modified color; fix "set to default"

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java

    r12952 r12953  
    77import java.awt.Component;
    88import java.awt.Dimension;
     9import java.awt.Font;
    910import java.awt.GridBagLayout;
    1011import java.awt.event.MouseAdapter;
     
    1617import java.util.List;
    1718import java.util.Map;
     19import java.util.Objects;
    1820
    1921import javax.swing.BorderFactory;
     
    4749import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
    4850import org.openstreetmap.josm.gui.util.GuiHelper;
     51import org.openstreetmap.josm.tools.CheckParameterUtil;
    4952import org.openstreetmap.josm.tools.ColorHelper;
    5053import org.openstreetmap.josm.tools.GBC;
     
    7881
    7982        public ColorEntry(String key, String colorHtml) {
     83            CheckParameterUtil.ensureParameterNotNull(key, "key");
    8084            this.key = key;
    8185            this.color = ColorHelper.html2color(colorHtml);
     
    8589        }
    8690
     91        public String getDisplay() {
     92            return Main.pref.getColorName(key);
     93        }
     94
    8795        @Override
    8896        public int compareTo(ColorEntry o) {
    89             return Collator.getInstance().compare(getName(key), getName(o.key));
     97            if (o == null) return -1;
     98            return Collator.getInstance().compare(getDisplay(), o.getDisplay());
    9099        }
    91100    }
     
    111120        }
    112121
     122        public ColorEntry getEntry(int row) {
     123            return data.get(row);
     124        }
     125
    113126        public List<ColorEntry> getData() {
    114127            return data;
     
    136149        @Override
    137150        public Object getValueAt(int rowIndex, int columnIndex) {
    138             return columnIndex == 0 ? getName(data.get(rowIndex).key) : data.get(rowIndex).color;
     151            return columnIndex == 0 ? data.get(rowIndex) : data.get(rowIndex).color;
    139152        }
    140153
     
    153166            if (columnIndex == 1 && aValue instanceof Color) {
    154167                data.get(rowIndex).color = (Color) aValue;
    155                 fireTableCellUpdated(rowIndex, columnIndex);
     168                fireTableRowsUpdated(rowIndex, rowIndex);
    156169            }
    157170        }
     
    211224    }
    212225
    213     private static String getName(String o) {
    214         return Main.pref.getColorName(o);
    215     }
    216 
    217226    @Override
    218227    public void addGui(final PreferenceTabbedPane gui) {
     
    223232        colorEdit.addActionListener(e -> {
    224233            int sel = colors.getSelectedRow();
    225             JColorChooser chooser = new JColorChooser((Color) colors.getValueAt(sel, 1));
     234            ColorEntry ce = tableModel.getEntry(sel);
     235            JColorChooser chooser = new JColorChooser(ce.color);
    226236            int answer = JOptionPane.showConfirmDialog(
    227237                    gui, chooser,
    228                     tr("Choose a color for {0}", getName((String) colors.getValueAt(sel, 0))),
     238                    tr("Choose a color for {0}", ce.getDisplay()),
    229239                    JOptionPane.OK_CANCEL_OPTION,
    230240                    JOptionPane.PLAIN_MESSAGE);
     
    236246        defaultSet.addActionListener(e -> {
    237247            int sel = colors.getSelectedRow();
    238             String name = (String) colors.getValueAt(sel, 0);
    239             Color c = Main.pref.getDefaultColor(name);
     248            ColorEntry ce = tableModel.getEntry(sel);
     249            Color c = Main.pref.getDefaultColor(ce.key);
    240250            if (c != null) {
    241251                colors.setValueAt(c, sel, 1);
     
    244254        JButton defaultAll = new JButton(tr("Set all to default"));
    245255        defaultAll.addActionListener(e -> {
    246             for (int i = 0; i < colors.getRowCount(); ++i) {
    247                 String name = (String) colors.getValueAt(i, 0);
    248                 Color c = Main.pref.getDefaultColor(name);
     256            List<ColorEntry> data = tableModel.getData();
     257            for (int i = 0; i < data.size(); ++i) {
     258                ColorEntry ce = data.get(i);
     259                Color c = Main.pref.getDefaultColor(ce.key);
    249260                if (c != null) {
    250261                    colors.setValueAt(c, i, 1);
     
    279290        });
    280291        colors.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     292        colors.getColumnModel().getColumn(0).setCellRenderer(new DefaultTableCellRenderer() {
     293            @Override
     294            public Component getTableCellRendererComponent(
     295                    JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
     296                Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
     297                if (value != null && comp instanceof JLabel) {
     298                    JLabel label = (JLabel) comp;
     299                    ColorEntry e = (ColorEntry) value;
     300                    label.setText(e.getDisplay());
     301                    if (!Objects.equals(e.color, Main.pref.getDefaultColor(e.key))) {
     302                        label.setFont(label.getFont().deriveFont(Font.BOLD));
     303                    } else {
     304                        label.setFont(label.getFont().deriveFont(Font.PLAIN));
     305                    }
     306                    return label;
     307                }
     308                return comp;
     309            }
     310        });
    281311        colors.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer() {
    282312            @Override
     
    315345
    316346    Boolean isRemoveColor(int row) {
    317         return tableModel.getData().get(row).key.startsWith("layer.");
     347        return tableModel.getEntry(row).key.startsWith("layer.");
    318348    }
    319349
Note: See TracChangeset for help on using the changeset viewer.