Ignore:
Timestamp:
2015-10-01T21:06:17+02:00 (9 years ago)
Author:
simon04
Message:

see #11916 - Search: allow to use MapCSS selectors

Location:
trunk/src/org/openstreetmap/josm/actions/search
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java

    r8811 r8812  
    249249        JCheckBox allElements = new JCheckBox(tr("all objects"), initialValues.allElements);
    250250        allElements.setToolTipText(tr("Also include incomplete and deleted objects in search."));
    251         final JCheckBox regexSearch   = new JCheckBox(tr("regular expression"), initialValues.regexSearch);
    252         final JCheckBox addOnToolbar  = new JCheckBox(tr("add toolbar button"), false);
     251        final JCheckBox regexSearch = new JCheckBox(tr("regular expression"), initialValues.regexSearch);
     252        final JCheckBox mapCSSSearch = new JCheckBox(tr("MapCSS selector"), initialValues.mapCSSSearch);
     253        final JCheckBox addOnToolbar = new JCheckBox(tr("add toolbar button"), false);
     254        final ButtonGroup bg2 = new ButtonGroup();
     255        bg2.add(regexSearch);
     256        bg2.add(mapCSSSearch);
    253257
    254258        JPanel top = new JPanel(new GridBagLayout());
     
    264268            left.add(allElements, GBC.eol());
    265269            left.add(regexSearch, GBC.eol());
     270            left.add(mapCSSSearch, GBC.eol());
    266271            left.add(addOnToolbar, GBC.eol());
    267272        }
     
    290295                        ss.caseSensitive = caseSensitive.isSelected();
    291296                        ss.regexSearch = regexSearch.isSelected();
     297                        ss.mapCSSSearch = mapCSSSearch.isSelected();
    292298                        SearchCompiler.compile(ss);
    293299                        super.buttonAction(buttonIndex, evt);
     
    321327        initialValues.allElements = allElements.isSelected();
    322328        initialValues.regexSearch = regexSearch.isSelected();
     329        initialValues.mapCSSSearch = mapCSSSearch.isSelected();
    323330
    324331        if (addOnToolbar.isSelected()) {
     
    589596        public boolean caseSensitive;
    590597        public boolean regexSearch;
     598        public boolean mapCSSSearch;
    591599        public boolean allElements;
    592600
     
    602610            caseSensitive = original.caseSensitive;
    603611            regexSearch = original.regexSearch;
     612            mapCSSSearch = original.mapCSSSearch;
    604613            allElements = original.allElements;
    605614        }
     
    612621            String rx = regexSearch ? ", " +
    613622                            /*regex search*/ trc("search", "RX") : "";
     623            String css = mapCSSSearch ? ", " +
     624                            /*MapCSS search*/ trc("search", "CSS") : "";
    614625            String all = allElements ? ", " +
    615626                            /*all elements*/ trc("search", "A") : "";
    616             return "\"" + text + "\" (" + cs + rx + all + ", " + mode + ")";
     627            return "\"" + text + "\" (" + cs + rx + css + all + ", " + mode + ")";
    617628        }
    618629
     
    624635            return o.caseSensitive == this.caseSensitive
    625636                    && o.regexSearch == this.regexSearch
     637                    && o.mapCSSSearch == this.mapCSSSearch
    626638                    && o.allElements == this.allElements
    627639                    && o.mode.equals(this.mode)
     
    655667                } else if (s.charAt(index) == 'A') {
    656668                    result.allElements = true;
     669                } else if (s.charAt(index) == 'M') {
     670                    result.mapCSSSearch = true;
    657671                } else if (s.charAt(index) == ' ') {
    658672                    break;
     
    685699                result.append('R');
    686700            }
     701            if (mapCSSSearch) {
     702                result.append('M');
     703            }
    687704            if (allElements) {
    688705                result.append('A');
  • trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java

    r8811 r8812  
    2828import org.openstreetmap.josm.data.osm.RelationMember;
    2929import org.openstreetmap.josm.data.osm.Way;
     30import org.openstreetmap.josm.gui.mappaint.Environment;
     31import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
     32import org.openstreetmap.josm.gui.mappaint.mapcss.Selector;
     33import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.MapCSSParser;
     34import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
    3035import org.openstreetmap.josm.tools.Geometry;
    3136import org.openstreetmap.josm.tools.Predicate;
     
    14241429     */
    14251430    public static Match compile(SearchAction.SearchSetting setting) throws ParseError {
     1431        if (setting.mapCSSSearch) {
     1432            return compileMapCSS(setting.text);
     1433        }
    14261434        return new SearchCompiler(setting.caseSensitive, setting.regexSearch,
    14271435                new PushbackTokenizer(
    14281436                        new PushbackReader(new StringReader(setting.text))))
    14291437                .parse();
     1438    }
     1439
     1440    static Match compileMapCSS(String mapCSS) throws ParseError {
     1441        try {
     1442            final Selector selector = new MapCSSParser(new StringReader(mapCSS)).selector();
     1443            return new Match() {
     1444                @Override
     1445                public boolean match(OsmPrimitive osm) {
     1446                    return selector.matches(new Environment(osm));
     1447                }
     1448            };
     1449        } catch (ParseException e) {
     1450            throw new ParseError(tr("Failed to parse MapCSS selector"), e);
     1451        }
    14301452    }
    14311453
Note: See TracChangeset for help on using the changeset viewer.