Ticket #1839: preset-menu-sorting.patch

File preset-menu-sorting.patch, 3.4 KB (added by osm-stuff@…, 17 years ago)
  • src/org/openstreetmap/josm/tools/PresetTextComparator.java

     
     1package org.openstreetmap.josm.tools;
     2
     3import java.util.Comparator;
     4
     5import javax.swing.JMenuItem;
     6
     7public class PresetTextComparator implements Comparator {
     8        //TODO add error checking and stuff
     9        public int compare(Object arg0, Object arg1) {
     10                return ((JMenuItem)arg0).getText().compareTo(((JMenuItem)arg1).getText());
     11        }
     12
     13
     14}
  • src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java

     
    55
    66import java.awt.event.ActionEvent;
    77import java.awt.Component;
     8import java.util.ArrayList;
     9import java.util.Collections;
    810
    911import javax.swing.Action;
    1012import javax.swing.JMenu;
     
    1315import javax.swing.JSeparator;
    1416
    1517import org.openstreetmap.josm.gui.tagging.TaggingPreset;
     18import org.openstreetmap.josm.tools.PresetTextComparator;
    1619
    1720public class TaggingPresetMenu extends TaggingPreset {
    1821    public JMenu menu = null; // set by TaggingPresetPreferences
     
    4548            pm.show(co, co.getWidth()/2, co.getHeight()/2);
    4649        }
    4750    }
     51        /**
     52         * Sorts the menu items using the translated item text
     53         */
     54        public void sortMenu(){
     55                TaggingPresetMenu.sortMenu(this.menu);
     56        }
     57
     58        /**
     59         * Sorts the menu items using the translated item text
     60         */
     61        public static void sortMenu(JMenu menu){
     62                Component[] items = menu.getMenuComponents();
     63                PresetTextComparator comp = new PresetTextComparator();
     64                ArrayList<JMenuItem> sortarray = new ArrayList<JMenuItem>();
     65                int lastSeperator = 0;
     66                for (int i = 0; i < items.length; i++) {
     67                        Object item = items[i];
     68                        if (item instanceof JMenu){
     69                                sortMenu((JMenu)item);
     70                        }                       
     71                        if (item instanceof JMenuItem){
     72                                sortarray.add((JMenuItem)item);
     73                                if (i == items.length-1){
     74                                        Collections.sort(sortarray, comp);
     75                                        int pos = 0;
     76                                        for (JMenuItem menuItem : sortarray) {
     77                                                int oldPos;
     78                                                if(lastSeperator == 0){
     79                                                        oldPos=pos;
     80                                                }else {
     81                                                        oldPos = pos+lastSeperator+1;
     82                                                }
     83                                                menu.add(menuItem, oldPos);
     84                                                pos++;
     85                                        }
     86                                        sortarray = new ArrayList<JMenuItem>();
     87                                        lastSeperator = 0;
     88                                }
     89                        }else if (item instanceof JSeparator){
     90                                Collections.sort(sortarray, comp);
     91                                int pos = 0;
     92                                for (JMenuItem menuItem : sortarray) {
     93                                        int oldPos;
     94                                        if(lastSeperator == 0){
     95                                                oldPos=pos;
     96                                        }else {
     97                                                oldPos = pos+lastSeperator+1;
     98                                        }
     99                                        menu.add(menuItem, oldPos);
     100                                        pos++;
     101                                }
     102                                sortarray = new ArrayList<JMenuItem>();
     103                                lastSeperator = i;
     104                        }
     105                }
     106        }
    48107}
  • src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java

     
    149149                }
    150150            }
    151151        }
     152        TaggingPresetMenu.sortMenu(Main.main.menu.presetsMenu);
    152153    }
    153154}