Changeset 4340 in josm


Ignore:
Timestamp:
2011-08-26T21:40:33+02:00 (8 years ago)
Author:
stoecker
Message:

fix #4439 - patch by simon04 - remove useless spaces in tagging presets, remodeduplicate code - please report regressions in tagging presets if there are any

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java

    r4302 r4340  
    118118
    119119    public static abstract class Item {
     120
    120121        protected void initAutoCompletionField(AutoCompletingTextField field, String key) {
    121122            OsmDataLayer layer = Main.main.getEditLayer();
    122             if (layer == null) return;
    123             AutoCompletionList list  = new AutoCompletionList();
     123            if (layer == null) {
     124                return;
     125            }
     126            AutoCompletionList list = new AutoCompletionList();
    124127            Main.main.getEditLayer().data.getAutoCompletionManager().populateWithTagValues(list, key);
    125128            field.setAutoCompletionList(list);
     
    127130
    128131        abstract boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel);
     132
    129133        abstract void addCommands(List<Tag> changedTags);
    130         boolean requestFocusInWindow() {return false;}
     134
     135        boolean requestFocusInWindow() {
     136            return false;
     137        }
    131138    }
    132139
     
    140147
    141148        public boolean unused() {
    142             return values.size() == 0;
     149            return values.isEmpty();
    143150        }
    144151        public String getFirst() {
     
    290297        }
    291298
    292         @Override public void addCommands(List<Tag> changedTags) {
     299        @Override
     300        public void addCommands(List<Tag> changedTags) {
    293301
    294302            // return if unchanged
    295             String v = (value instanceof JComboBox) ?
    296                     ((JComboBox)value).getEditor().getItem().toString() :
    297                         ((JTextField)value).getText();
    298 
    299                     if (!"false".equals(use_last_as_default)) {
    300                         lastValue.put(key, v);
    301                     }
    302                     if (v.equals(originalValue) || (originalValue == null && v.length() == 0)) return;
    303 
    304                     if (delete_if_empty && v.length() == 0) {
    305                         v = null;
    306                     }
    307                     changedTags.add(new Tag(key, v));
    308         }
    309         @Override boolean requestFocusInWindow() {return value.requestFocusInWindow();}
     303            String v = (value instanceof JComboBox)
     304                    ? ((JComboBox) value).getEditor().getItem().toString()
     305                    : ((JTextField) value).getText();
     306            v = v.trim();
     307
     308            if (!"false".equals(use_last_as_default)) {
     309                lastValue.put(key, v);
     310            }
     311            if (v.equals(originalValue) || (originalValue == null && v.length() == 0)) {
     312                return;
     313            }
     314
     315            if (delete_if_empty && v.length() == 0) {
     316                v = null;
     317            }
     318            changedTags.add(new Tag(key, v));
     319        }
     320
     321        @Override
     322        boolean requestFocusInWindow() {
     323            return value.requestFocusInWindow();
     324        }
    310325    }
    311326
     
    395410    }
    396411
    397     public static class Combo extends Item {
    398 
    399         public String key;
    400         public String text;
    401         public String text_context;
    402         public String locale_text;
    403         public String values;
    404         public String values_context;
    405         public String display_values;
    406         public String locale_display_values;
    407         public String short_descriptions;
    408         public String locale_short_descriptions;
    409         public String default_;
    410         public boolean delete_if_empty = false;
    411         public boolean editable = true;
    412         public String use_last_as_default = "false";
    413         public boolean required = false;
    414 
    415         private List<String> short_description_list;
    416         private JComboBox combo;
    417         private Map<String, PresetListEntry> lhm;
    418         private Usage usage;
    419         private PresetListEntry originalValue;
    420 
    421         @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
    422 
    423             // find out if our key is already used in the selection.
    424             usage = determineTextUsage(sel, key);
    425             String def = default_;
    426 
    427             String[] value_array = splitEscaped(',', values);
    428             String[] display_array;
    429             String[] short_descriptions_array = null;
    430 
    431             if(locale_display_values != null) {
    432                 display_array = splitEscaped(',', locale_display_values);
    433             } else if (display_values != null) {
    434                 display_array = splitEscaped(',', display_values);
    435             } else {
    436                 display_array = value_array;
    437             }
    438 
    439             if (locale_short_descriptions != null) {
    440                 short_descriptions_array = splitEscaped(',', locale_short_descriptions);
    441             } else if (short_descriptions != null) {
    442                 short_descriptions_array = splitEscaped(',', short_descriptions);
    443             } else if (short_description_list != null) {
    444                 short_descriptions_array = short_description_list.toArray(new String[0]);
    445             }
    446 
    447             if (!"false".equals(use_last_as_default) && def == null && lastValue.containsKey(key)) {
    448                 def = lastValue.get(key);
    449             }
    450 
    451             if (display_array.length != value_array.length) {
    452                 System.err.println(tr("Broken tagging preset \"{0}-{1}\" - number of items in ''display_values'' must be the same as in ''values''", key, text));
    453                 display_array = value_array;
    454             }
    455 
    456             if (short_descriptions_array != null && short_descriptions_array.length != value_array.length) {
    457                 System.err.println(tr("Broken tagging preset \"{0}-{1}\" - number of items in ''short_descriptions'' must be the same as in ''values''", key, text));
    458                 short_descriptions_array = null;
    459             }
    460 
    461             lhm = new LinkedHashMap<String, PresetListEntry>();
    462             if (!usage.hasUniqueValue() && !usage.unused()) {
    463                 lhm.put(DIFFERENT, new PresetListEntry(DIFFERENT));
    464             }
    465             for (int i=0; i<value_array.length; i++) {
    466                 PresetListEntry e = new PresetListEntry(value_array[i]);
    467                 e.display_value = (locale_display_values == null)
    468                 ? (values_context == null ? tr(fixPresetString(display_array[i]))
    469                         : trc(values_context, fixPresetString(display_array[i]))) : display_array[i];
    470                 if (short_descriptions_array != null) {
    471                     e.short_description = locale_short_descriptions == null ? tr(fixPresetString(short_descriptions_array[i]))
    472                             : fixPresetString(short_descriptions_array[i]);
    473                 }
    474                 lhm.put(value_array[i], e);
    475             }
    476             if(!usage.unused()){
    477                 for (String s : usage.values) {
    478                     if (!lhm.containsKey(s)) {
    479                         lhm.put(s, new PresetListEntry(s));
    480                     }
    481                 }
    482             }
    483             if (def != null && !lhm.containsKey(def)) {
    484                 lhm.put(def, new PresetListEntry(def));
    485             }
    486             lhm.put("", new PresetListEntry(""));
    487 
    488             combo = new JComboBox(lhm.values().toArray());
    489             combo.setRenderer(new PresetComboListCellRenderer());
    490             combo.setEditable(editable);
    491             combo.setMaximumRowCount(13);
    492             AutoCompletingTextField tf = new AutoCompletingTextField();
    493             initAutoCompletionField(tf, key);
    494             tf.getAutoCompletionList().add(Arrays.asList(display_array), AutoCompletionItemPritority.IS_IN_STANDARD);
    495             combo.setEditor(tf);
    496 
    497             if (usage.hasUniqueValue()) {
    498                 // all items have the same value (and there were no unset items)
    499                 originalValue=lhm.get(usage.getFirst());
    500                 combo.setSelectedItem(originalValue);
    501             }
    502             else if (def != null && usage.unused()) {
    503                 // default is set and all items were unset
    504                 if (!usage.hadKeys() || PROP_FILL_DEFAULT.get() || "force".equals(use_last_as_default)) {
    505                     // selected osm primitives are untagged or filling default feature is enabled
    506                     combo.setSelectedItem(def);
    507                 } else {
    508                     // selected osm primitives are tagged and filling default feature is disabled
    509                     combo.setSelectedItem("");
    510                 }
    511                 originalValue=lhm.get(DIFFERENT);
    512             }
    513             else if (usage.unused()) {
    514                 // all items were unset (and so is default)
    515                 originalValue=lhm.get("");
    516                 combo.setSelectedItem(originalValue);
    517             }
    518             else {
    519                 originalValue=lhm.get(DIFFERENT);
    520                 combo.setSelectedItem(originalValue);
    521             }
    522 
    523             if(locale_text == null) {
    524                 if(text_context != null) {
    525                     locale_text = trc(text_context, fixPresetString(text));
    526                 } else {
    527                     locale_text = tr(fixPresetString(text));
    528                 }
    529             }
    530             p.add(new JLabel(locale_text+":"), GBC.std().insets(0,0,10,0));
    531             p.add(combo, GBC.eol().fill(GBC.HORIZONTAL));
    532             return true;
    533         }
    534 
    535 
    536         private static class PresetComboListCellRenderer implements ListCellRenderer {
    537 
    538             HtmlPanel lbl;
    539             JComponent dummy = new JComponent() {};
    540 
    541             public PresetComboListCellRenderer() {
    542                 lbl = new HtmlPanel();
    543             }
    544 
    545             public Component getListCellRendererComponent(
    546                     JList list,
    547                     Object value,
    548                     int index,
    549                     boolean isSelected,
    550                     boolean cellHasFocus)
    551             {
    552                 if (isSelected) {
    553                     lbl.setBackground(list.getSelectionBackground());
    554                     lbl.setForeground(list.getSelectionForeground());
    555                 } else {
    556                     lbl.setBackground(list.getBackground());
    557                     lbl.setForeground(list.getForeground());
    558                 }
    559 
    560                 PresetListEntry item = (PresetListEntry) value;
    561                 String s = item.getListDisplay();
    562                 lbl.setText(s);
    563                 // We do not want the editor to have the maximum height of all
    564                 // entries. Return a dummy with bogus height.
    565                 if (index == -1) {
    566                     dummy.setPreferredSize(new Dimension(lbl.getPreferredSize().width, 10));
    567                     return dummy;
    568                 }
    569                 return lbl;
    570             }
    571         }
    572 
    573         @Override public void addCommands(List<Tag> changedTags) {
    574             Object obj = combo.getSelectedItem();
    575             String display = (obj == null) ? null : obj.toString();
    576             String value = null;
    577             if(display == null && combo.isEditable()) {
    578                 display = combo.getEditor().getItem().toString();
    579             }
    580 
    581             if (display != null)
    582             {
    583                 for (String key : lhm.keySet()) {
    584                     String k = lhm.get(key).toString();
    585                     if (k != null && k.equals(display)) {
    586                         value=key;
    587                     }
    588                 }
    589                 if(value == null) {
    590                     value = display;
    591                 }
    592             } else {
    593                 value = "";
    594             }
    595 
    596             // no change if same as before
    597             if (originalValue == null) {
    598                 if (value.length() == 0)
    599                     return;
    600             } else if (value.equals(originalValue.toString()))
    601                 return;
    602 
    603             if (delete_if_empty && value.length() == 0) {
    604                 value = null;
    605             }
    606             if (!"false".equals(use_last_as_default)) {
    607                 lastValue.put(key, value);
    608             }
    609             changedTags.add(new Tag(key, value));
    610         }
    611 
    612         public void setShort_description(String s) {
    613             if (short_description_list == null) {
    614                 short_description_list = new ArrayList<String>();
    615             }
    616             short_description_list.add(tr(s));
    617         }
    618 
    619         @Override boolean requestFocusInWindow() {return combo.requestFocusInWindow();}
    620     }
    621 
    622     /**
    623      * Class that allows list values to be assigned and retrived as a comma-delimited
    624      * string.
    625      */
    626     public static class ConcatenatingJList extends JList {
    627         private String delimiter;
    628         public ConcatenatingJList(String del, Object[] o) {
    629             super(o);
    630             delimiter = del;
    631         }
    632         public void setSelectedItem(Object o) {
    633             if (o == null) {
    634                 clearSelection();
    635             } else {
    636                 String s = o.toString();
    637                 HashSet<String> parts = new HashSet<String>(Arrays.asList(s.split(delimiter)));
    638                 ListModel lm = getModel();
    639                 int[] intParts = new int[lm.getSize()];
    640                 int j = 0;
    641                 for (int i = 0; i < lm.getSize(); i++) {
    642                     if (parts.contains((((PresetListEntry)lm.getElementAt(i)).value))) {
    643                         intParts[j++]=i;
    644                     }
    645                 }
    646                 setSelectedIndices(Arrays.copyOf(intParts, j));
    647                 // check if we have acutally managed to represent the full
    648                 // value with our presets. if not, cop out; we will not offer
    649                 // a selection list that threatens to ruin the value.
    650                 setEnabled(s.equals(getSelectedItem()));
    651             }
    652         }
    653         public String getSelectedItem() {
    654             ListModel lm = getModel();
    655             int[] si = getSelectedIndices();
    656             StringBuilder builder = new StringBuilder();
    657             for (int i=0; i<si.length; i++) {
    658                 if (i>0) {
    659                     builder.append(delimiter);
    660                 }
    661                 builder.append(((PresetListEntry)lm.getElementAt(si[i])).value);
    662             }
    663             return builder.toString();
    664         }
    665     }
    666 
    667     public static class MultiSelect extends Item {
     412    public static abstract class ComboMultiSelect extends Item {
    668413
    669414        public String key;
     
    682427        public String use_last_as_default = "false";
    683428        public boolean required = false;
    684         public long rows = -1;
    685 
    686         private List<String> short_description_list;
    687         private ConcatenatingJList list;
    688         private Map<String, PresetListEntry> lhm;
    689         private Usage usage;
    690         private String originalValue;
    691 
    692         @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
     429
     430        protected List<String> short_description_list;
     431        protected JComponent component;
     432        protected Map<String, PresetListEntry> lhm;
     433        protected Usage usage;
     434        protected Object originalValue;
     435
     436        protected abstract Object getSelectedItem();
     437        protected abstract void addToPanelAnchor(JPanel p, String def, String[] display_array);
     438
     439        @Override
     440        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
    693441
    694442            // find out if our key is already used in the selection.
     
    697445
    698446            char delChar = ';';
    699             if (delimiter.length() > 0) {
     447            if (!delimiter.isEmpty()) {
    700448                delChar = delimiter.charAt(0);
    701449            }
     
    739487                lhm.put(DIFFERENT, new PresetListEntry(DIFFERENT));
    740488            }
    741             for (int i=0; i<value_array.length; i++) {
     489            for (int i = 0; i < value_array.length; i++) {
    742490                PresetListEntry e = new PresetListEntry(value_array[i]);
    743491                e.display_value = (locale_display_values == null)
    744                 ? (values_context == null ? tr(fixPresetString(display_array[i]))
     492                        ? (values_context == null ? tr(fixPresetString(display_array[i]))
    745493                        : trc(values_context, fixPresetString(display_array[i]))) : display_array[i];
    746494                if (short_descriptions_array != null) {
    747495                    e.short_description = locale_short_descriptions == null ? tr(fixPresetString(short_descriptions_array[i]))
    748                             : short_descriptions_array[i];
     496                            : fixPresetString(short_descriptions_array[i]);
    749497                }
    750498                lhm.put(value_array[i], e);
    751499            }
    752500
    753             list = new ConcatenatingJList(delimiter, lhm.values().toArray());
    754             PresetListCellRenderer renderer = new PresetListCellRenderer();
    755             list.setCellRenderer(renderer);
    756 
    757             if (usage.hasUniqueValue() && !usage.unused()) {
    758                 originalValue=usage.getFirst();
    759                 list.setSelectedItem(originalValue);
    760             }
    761             else if (def != null && !usage.hadKeys() || PROP_FILL_DEFAULT.get() || "force".equals(use_last_as_default)) {
    762                 originalValue=DIFFERENT;
    763                 list.setSelectedItem(def);
    764             }
    765             else if (usage.unused()) {
    766                 originalValue=null;
    767                 list.setSelectedItem(originalValue);
    768             }
    769             else {
    770                 originalValue=DIFFERENT;
    771                 list.setSelectedItem(originalValue);
    772             }
    773 
    774501            if (locale_text == null) {
    775                 if(text_context != null) {
     502                if (text_context != null) {
    776503                    locale_text = trc(text_context, fixPresetString(text));
    777504                } else {
     
    779506                }
    780507            }
    781             p.add(new JLabel(locale_text+":"), GBC.std().insets(0,0,10,0));
     508            p.add(new JLabel(locale_text + ":"), GBC.std().insets(0, 0, 10, 0));
     509
     510            addToPanelAnchor(p, def, display_array);
     511
     512            return true;
     513
     514        }
     515
     516        protected String getDisplayIfNull(String display) {
     517            return display;
     518        }
     519
     520        @Override
     521        public void addCommands(List<Tag> changedTags) {
     522            Object obj = getSelectedItem();
     523            String display = (obj == null) ? null : obj.toString();
     524            String value = null;
     525            if (display == null) {
     526                display = getDisplayIfNull(display);
     527            }
     528
     529            if (display != null) {
     530                for (String key : lhm.keySet()) {
     531                    String k = lhm.get(key).toString();
     532                    if (k != null && k.equals(display)) {
     533                        value = key;
     534                    }
     535                }
     536                if (value == null) {
     537                    value = display;
     538                }
     539            } else {
     540                value = "";
     541            }
     542            value = value.trim();
     543
     544            // no change if same as before
     545            if (originalValue == null) {
     546                if (value.length() == 0) {
     547                    return;
     548                }
     549            } else if (value.equals(originalValue.toString())) {
     550                return;
     551            }
     552
     553            if (delete_if_empty && value.length() == 0) {
     554                value = null;
     555            }
     556            if (!"false".equals(use_last_as_default)) {
     557                lastValue.put(key, value);
     558            }
     559            changedTags.add(new Tag(key, value));
     560        }
     561
     562        public void setShort_description(String s) {
     563            if (short_description_list == null) {
     564                short_description_list = new ArrayList<String>();
     565            }
     566            short_description_list.add(tr(s));
     567        }
     568
     569        @Override
     570        boolean requestFocusInWindow() {
     571            return component.requestFocusInWindow();
     572        }
     573
     574        protected ListCellRenderer getListCellRenderer() {
     575            return new ListCellRenderer() {
     576
     577                HtmlPanel lbl = new HtmlPanel();
     578                JComponent dummy = new JComponent() {
     579                };
     580
     581                public Component getListCellRendererComponent(
     582                        JList list,
     583                        Object value,
     584                        int index,
     585                        boolean isSelected,
     586                        boolean cellHasFocus) {
     587                    if (isSelected) {
     588                        lbl.setBackground(list.getSelectionBackground());
     589                        lbl.setForeground(list.getSelectionForeground());
     590                    } else {
     591                        lbl.setBackground(list.getBackground());
     592                        lbl.setForeground(list.getForeground());
     593                    }
     594
     595                    PresetListEntry item = (PresetListEntry) value;
     596                    String s = item.getListDisplay();
     597                    lbl.setText(s);
     598                    lbl.setEnabled(list.isEnabled());
     599                    // We do not want the editor to have the maximum height of all
     600                    // entries. Return a dummy with bogus height.
     601                    if (index == -1) {
     602                        dummy.setPreferredSize(new Dimension(lbl.getPreferredSize().width, 10));
     603                        return dummy;
     604                    }
     605                    return lbl;
     606                }
     607            };
     608        }
     609    }
     610
     611    public static class Combo extends ComboMultiSelect {
     612
     613        public boolean editable = true;
     614        protected JComboBox combo;
     615
     616        public Combo() {
     617            delimiter = ",";
     618        }
     619
     620        @Override
     621        protected void addToPanelAnchor(JPanel p, String def, String[] display_array) {
     622            if (!usage.unused()) {
     623                for (String s : usage.values) {
     624                    if (!lhm.containsKey(s)) {
     625                        lhm.put(s, new PresetListEntry(s));
     626                    }
     627                }
     628            }
     629            if (def != null && !lhm.containsKey(def)) {
     630                lhm.put(def, new PresetListEntry(def));
     631            }
     632            lhm.put("", new PresetListEntry(""));
     633
     634            combo = new JComboBox(lhm.values().toArray());
     635            component = combo;
     636            combo.setRenderer(getListCellRenderer());
     637            combo.setEditable(editable);
     638            combo.setMaximumRowCount(13);
     639            AutoCompletingTextField tf = new AutoCompletingTextField();
     640            initAutoCompletionField(tf, key);
     641            tf.getAutoCompletionList().add(Arrays.asList(display_array), AutoCompletionItemPritority.IS_IN_STANDARD);
     642            combo.setEditor(tf);
     643
     644            if (usage.hasUniqueValue()) {
     645                // all items have the same value (and there were no unset items)
     646                originalValue = lhm.get(usage.getFirst());
     647                combo.setSelectedItem(originalValue);
     648            } else if (def != null && usage.unused()) {
     649                // default is set and all items were unset
     650                if (!usage.hadKeys() || PROP_FILL_DEFAULT.get() || "force".equals(use_last_as_default)) {
     651                    // selected osm primitives are untagged or filling default feature is enabled
     652                    combo.setSelectedItem(def);
     653                } else {
     654                    // selected osm primitives are tagged and filling default feature is disabled
     655                    combo.setSelectedItem("");
     656                }
     657                originalValue = lhm.get(DIFFERENT);
     658            } else if (usage.unused()) {
     659                // all items were unset (and so is default)
     660                originalValue = lhm.get("");
     661                combo.setSelectedItem(originalValue);
     662            } else {
     663                originalValue = lhm.get(DIFFERENT);
     664                combo.setSelectedItem(originalValue);
     665            }
     666            p.add(combo, GBC.eol().fill(GBC.HORIZONTAL));
     667
     668        }
     669
     670        @Override
     671        protected Object getSelectedItem() {
     672            return combo.getSelectedItem();
     673
     674        }
     675
     676        @Override
     677        protected String getDisplayIfNull(String display) {
     678            if (combo.isEditable()) {
     679                return combo.getEditor().getItem().toString();
     680            } else {
     681                return display;
     682            }
     683
     684        }
     685    }
     686
     687    /**
     688     * Class that allows list values to be assigned and retrieved as a comma-delimited
     689     * string.
     690     */
     691    public static class ConcatenatingJList extends JList {
     692        private String delimiter;
     693        public ConcatenatingJList(String del, Object[] o) {
     694            super(o);
     695            delimiter = del;
     696        }
     697        public void setSelectedItem(Object o) {
     698            if (o == null) {
     699                clearSelection();
     700            } else {
     701                String s = o.toString();
     702                HashSet<String> parts = new HashSet<String>(Arrays.asList(s.split(delimiter)));
     703                ListModel lm = getModel();
     704                int[] intParts = new int[lm.getSize()];
     705                int j = 0;
     706                for (int i = 0; i < lm.getSize(); i++) {
     707                    if (parts.contains((((PresetListEntry)lm.getElementAt(i)).value))) {
     708                        intParts[j++]=i;
     709                    }
     710                }
     711                setSelectedIndices(Arrays.copyOf(intParts, j));
     712                // check if we have acutally managed to represent the full
     713                // value with our presets. if not, cop out; we will not offer
     714                // a selection list that threatens to ruin the value.
     715                setEnabled(s.equals(getSelectedItem()));
     716            }
     717        }
     718        public String getSelectedItem() {
     719            ListModel lm = getModel();
     720            int[] si = getSelectedIndices();
     721            StringBuilder builder = new StringBuilder();
     722            for (int i=0; i<si.length; i++) {
     723                if (i>0) {
     724                    builder.append(delimiter);
     725                }
     726                builder.append(((PresetListEntry)lm.getElementAt(si[i])).value);
     727            }
     728            return builder.toString();
     729        }
     730    }
     731
     732    public static class MultiSelect extends ComboMultiSelect {
     733
     734        public long rows = -1;
     735        protected ConcatenatingJList list;
     736
     737        @Override
     738        protected void addToPanelAnchor(JPanel p, String def, String[] display_array) {
     739            list = new ConcatenatingJList(delimiter, lhm.values().toArray());
     740            component = list;
     741            ListCellRenderer renderer = getListCellRenderer();
     742            list.setCellRenderer(renderer);
     743
     744            if (usage.hasUniqueValue() && !usage.unused()) {
     745                originalValue = usage.getFirst();
     746                list.setSelectedItem(originalValue);
     747            } else if (def != null && !usage.hadKeys() || PROP_FILL_DEFAULT.get() || "force".equals(use_last_as_default)) {
     748                originalValue = DIFFERENT;
     749                list.setSelectedItem(def);
     750            } else if (usage.unused()) {
     751                originalValue = null;
     752                list.setSelectedItem(originalValue);
     753            } else {
     754                originalValue = DIFFERENT;
     755                list.setSelectedItem(originalValue);
     756            }
     757
    782758            JScrollPane sp = new JScrollPane(list);
    783759            // if a number of rows has been specified in the preset,
    784760            // modify preferred height of scroll pane to match that row count.
    785             if (rows != -1)
    786             {
     761            if (rows != -1) {
    787762                double height = renderer.getListCellRendererComponent(list,
    788763                        new PresetListEntry("x"), 0, false, false).getPreferredSize().getHeight() * rows;
     
    790765            }
    791766            p.add(sp, GBC.eol().fill(GBC.HORIZONTAL));
    792             return true;
    793         }
    794 
    795         private static class PresetListCellRenderer implements ListCellRenderer {
    796 
    797             HtmlPanel lbl;
    798             JComponent dummy = new JComponent() {};
    799 
    800             public PresetListCellRenderer() {
    801                 lbl = new HtmlPanel();
    802             }
    803 
    804             public Component getListCellRendererComponent(
    805                     JList list,
    806                     Object value,
    807                     int index,
    808                     boolean isSelected,
    809                     boolean cellHasFocus)
    810             {
    811                 if (isSelected) {
    812                     lbl.setBackground(list.getSelectionBackground());
    813                     lbl.setForeground(list.getSelectionForeground());
    814                 } else {
    815                     lbl.setBackground(list.getBackground());
    816                     lbl.setForeground(list.getForeground());
    817                 }
    818 
    819                 PresetListEntry item = (PresetListEntry) value;
    820                 String s = item.getListDisplay();
    821                 lbl.setText(s);
    822                 lbl.setEnabled(list.isEnabled());
    823                 // We do not want the editor to have the maximum height of all
    824                 // entries. Return a dummy with bogus height.
    825                 if (index == -1) {
    826                     dummy.setPreferredSize(new Dimension(lbl.getPreferredSize().width, 10));
    827                     return dummy;
    828                 }
    829                 return lbl;
    830             }
    831         }
    832 
    833         @Override public void addCommands(List<Tag> changedTags) {
    834             Object obj = list.getSelectedItem();
    835             String display = (obj == null) ? null : obj.toString();
    836             String value = null;
    837 
    838             if (display != null)
    839             {
    840                 for (String key : lhm.keySet()) {
    841                     String k = lhm.get(key).toString();
    842                     if (k != null && k.equals(display)) {
    843                         value=key;
    844                     }
    845                 }
    846                 if (value == null) {
    847                     value = display;
    848                 }
    849             } else {
    850                 value = "";
    851             }
    852 
    853             // no change if same as before
    854             if (originalValue == null) {
    855                 if (value.length() == 0)
    856                     return;
    857             } else if (value.equals(originalValue.toString()))
    858                 return;
    859 
    860             if (delete_if_empty && value.length() == 0) {
    861                 value = null;
    862             }
    863             if (!"false".equals(use_last_as_default)) {
    864                 lastValue.put(key, value);
    865             }
    866             changedTags.add(new Tag(key, value));
    867         }
    868 
    869         public void setShort_description(String s) {
    870             if (short_description_list == null) {
    871                 short_description_list = new ArrayList<String>();
    872             }
    873             short_description_list.add(tr(s));
    874         }
    875 
    876         @Override boolean requestFocusInWindow() {return list.requestFocusInWindow();}
     767
     768
     769        }
     770
     771        @Override
     772        protected Object getSelectedItem() {
     773            return list.getSelectedItem();
     774        }
    877775    }
    878776
     
    909807
    910808    public static class Label extends Item {
     809
    911810        public String text;
    912811        public String text_context;
    913812        public String locale_text;
    914813
    915         @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
    916             if(locale_text == null) {
    917                 if(text_context != null) {
     814        @Override
     815        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
     816            if (locale_text == null) {
     817                if (text_context != null) {
    918818                    locale_text = trc(text_context, fixPresetString(text));
    919819                } else {
     
    924824            return false;
    925825        }
    926         @Override public void addCommands(List<Tag> changedTags) {}
     826
     827        @Override
     828        public void addCommands(List<Tag> changedTags) {
     829        }
    927830    }
    928831
    929832    public static class Link extends Item {
     833
    930834        public String href;
    931835        public String text;
     
    934838        public String locale_href;
    935839
    936         @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
    937             if(locale_text == null) {
    938                 if(text == null) {
     840        @Override
     841        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
     842            if (locale_text == null) {
     843                if (text == null) {
    939844                    locale_text = tr("More information about this feature");
    940                 } else if(text_context != null) {
     845                } else if (text_context != null) {
    941846                    locale_text = trc(text_context, fixPresetString(text));
    942847                } else {
     
    953858            return false;
    954859        }
    955         @Override public void addCommands(List<Tag> changedTags) {}
     860
     861        @Override
     862        public void addCommands(List<Tag> changedTags) {
     863        }
    956864    }
    957865
     
    1025933
    1026934    public static class Roles extends Item {
     935
    1027936        public List<Role> roles = new LinkedList<Role>();
    1028         @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
     937
     938        @Override
     939        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
    1029940            p.add(new JLabel(" "), GBC.eol()); // space
    1030             if(roles.size() > 0)
    1031             {
     941            if (roles.size() > 0) {
    1032942                JPanel proles = new JPanel(new GridBagLayout());
    1033                 proles.add(new JLabel(tr("Available roles")), GBC.std().insets(0,0,10,0));
    1034                 proles.add(new JLabel(tr("role")), GBC.std().insets(0,0,10,0));
    1035                 proles.add(new JLabel(tr("count")), GBC.std().insets(0,0,10,0));
     943                proles.add(new JLabel(tr("Available roles")), GBC.std().insets(0, 0, 10, 0));
     944                proles.add(new JLabel(tr("role")), GBC.std().insets(0, 0, 10, 0));
     945                proles.add(new JLabel(tr("count")), GBC.std().insets(0, 0, 10, 0));
    1036946                proles.add(new JLabel(tr("elements")), GBC.eol());
    1037947                for (Role i : roles) {
     
    1042952            return false;
    1043953        }
    1044         @Override public void addCommands(List<Tag> changedTags) {}
     954
     955        @Override
     956        public void addCommands(List<Tag> changedTags) {
     957        }
    1045958    }
    1046959
    1047960    public static class Optional extends Item {
     961
    1048962        // TODO: Draw a box around optional stuff
    1049         @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
     963        @Override
     964        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
    1050965            p.add(new JLabel(" "), GBC.eol()); // space
    1051966            p.add(new JLabel(tr("Optional Attributes:")), GBC.eol());
     
    1053968            return false;
    1054969        }
    1055         @Override public void addCommands(List<Tag> changedTags) {}
     970
     971        @Override
     972        public void addCommands(List<Tag> changedTags) {
     973        }
    1056974    }
    1057975
    1058976    public static class Space extends Item {
    1059         @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
     977
     978        @Override
     979        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
    1060980            p.add(new JLabel(" "), GBC.eol()); // space
    1061981            return false;
    1062982        }
    1063         @Override public void addCommands(List<Tag> changedTags) {}
     983
     984        @Override
     985        public void addCommands(List<Tag> changedTags) {
     986        }
    1064987    }
    1065988
    1066989    public static class Key extends Item {
     990
    1067991        public String key;
    1068992        public String value;
    1069993
    1070         @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) { return false; }
    1071         @Override public void addCommands(List<Tag> changedTags) {
    1072             changedTags.add(new Tag(key, value != null && !value.equals("") ? value : null));
     994        @Override
     995        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
     996            return false;
     997        }
     998
     999        @Override
     1000        public void addCommands(List<Tag> changedTags) {
     1001            changedTags.add(new Tag(key, value));
    10731002        }
    10741003    }
Note: See TracChangeset for help on using the changeset viewer.