Ticket #14840: ticket14840_2.patch

File ticket14840_2.patch, 12.2 KB (added by bafonins, 9 years ago)

Merged supplied patch with the latest release of JOSM.

  • src/org/openstreetmap/josm/actions/search/SearchAction.java

     
    2828import java.util.Set;
    2929import java.util.function.Predicate;
    3030
    31 import javax.swing.ButtonGroup;
    3231import javax.swing.JCheckBox;
    3332import javax.swing.JLabel;
    3433import javax.swing.JOptionPane;
     
    3635import javax.swing.JRadioButton;
    3736import javax.swing.text.BadLocationException;
    3837import javax.swing.text.JTextComponent;
     38import javax.swing.BorderFactory;
     39import javax.swing.ButtonGroup;
    3940
    4041import org.openstreetmap.josm.Main;
    4142import org.openstreetmap.josm.actions.ActionParameter;
     
    274275        final JCheckBox caseSensitive = new JCheckBox(tr("case sensitive"), initialValues.caseSensitive);
    275276        JCheckBox allElements = new JCheckBox(tr("all objects"), initialValues.allElements);
    276277        allElements.setToolTipText(tr("Also include incomplete and deleted objects in search."));
     278        JCheckBox addOnToolbar = new JCheckBox(tr("add toolbar button"), false);
     279
    277280        final JRadioButton standardSearch = new JRadioButton(tr("standard"), !initialValues.regexSearch && !initialValues.mapCSSSearch);
    278281        final JRadioButton regexSearch = new JRadioButton(tr("regular expression"), initialValues.regexSearch);
    279282        final JRadioButton mapCSSSearch = new JRadioButton(tr("MapCSS selector"), initialValues.mapCSSSearch);
    280         final JCheckBox addOnToolbar = new JCheckBox(tr("add toolbar button"), false);
    281283        final ButtonGroup bg2 = new ButtonGroup();
    282284        bg2.add(standardSearch);
    283285        bg2.add(regexSearch);
    284286        bg2.add(mapCSSSearch);
    285287
    286         JPanel top = new JPanel(new GridBagLayout());
    287         top.add(label, GBC.std().insets(0, 0, 5, 0));
    288         top.add(hcbSearchString, GBC.eol().fill(GBC.HORIZONTAL));
    289288        JPanel left = new JPanel(new GridBagLayout());
    290         left.add(replace, GBC.eol());
    291         left.add(add, GBC.eol());
    292         left.add(remove, GBC.eol());
    293         left.add(inSelection, GBC.eop());
    294         left.add(caseSensitive, GBC.eol());
    295         if (Main.pref.getBoolean("expert", false)) {
    296             left.add(allElements, GBC.eol());
    297             left.add(addOnToolbar, GBC.eop());
    298             left.add(standardSearch, GBC.eol());
    299             left.add(regexSearch, GBC.eol());
    300             left.add(mapCSSSearch, GBC.eol());
     289
     290        JPanel selectionSettings = new JPanel(new GridBagLayout());
     291        selectionSettings.setBorder(BorderFactory.createTitledBorder(tr("Selection settings")));
     292        selectionSettings.add(replace, GBC.eol());
     293        selectionSettings.add(add, GBC.eol());
     294        selectionSettings.add(remove, GBC.eol());
     295        selectionSettings.add(inSelection, GBC.eop());
     296
     297        JPanel additionalSettings = new JPanel(new GridBagLayout());
     298        additionalSettings.setBorder(BorderFactory.createTitledBorder(tr("Additional settings")));
     299        additionalSettings.add(caseSensitive, GBC.eol());
     300
     301        if (Main.pref.getBoolean("expert", false)){
     302            additionalSettings.add(allElements, GBC.eol());
     303            additionalSettings.add(addOnToolbar, GBC.eop());
     304
     305            JPanel searchOptions = new JPanel(new GridBagLayout());
     306            searchOptions.setBorder(BorderFactory.createTitledBorder(tr("Search Options")));
     307            searchOptions.add(standardSearch, GBC.eol());
     308            searchOptions.add(regexSearch, GBC.eol());
     309            searchOptions.add(mapCSSSearch, GBC.eol());
     310
     311            left.add(selectionSettings, GBC.eol().fill(GBC.BOTH));
     312            left.add(additionalSettings, GBC.eol().fill(GBC.BOTH));
     313            left.add(searchOptions, GBC.eol().fill(GBC.BOTH));
     314        }else{
     315            left.add(selectionSettings, GBC.eol().fill(GBC.BOTH));
     316            left.add(additionalSettings, GBC.eol().fill(GBC.BOTH));
    301317        }
    302318
    303         final JPanel right;
    304         right = new JPanel(new GridBagLayout());
    305         buildHints(right, hcbSearchString);
     319        final JPanel right = SearchAction.buildHintsSection(hcbSearchString);
     320        final JPanel top = new JPanel(new GridBagLayout());
     321        top.add(label, GBC.std().insets(0, 0, 5, 0));
     322        top.add(hcbSearchString, GBC.eol().fill(GBC.HORIZONTAL));
    306323
    307324        final JTextComponent editorComponent = hcbSearchString.getEditorComponent();
    308325        editorComponent.getDocument().addDocumentListener(new AbstractTextComponentValidator(editorComponent) {
     
    334351
    335352        final JPanel p = new JPanel(new GridBagLayout());
    336353        p.add(top, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 5, 5, 0));
    337         p.add(left, GBC.std().anchor(GBC.NORTH).insets(5, 10, 10, 0));
    338         p.add(right, GBC.eol());
     354        p.add(left, GBC.std().anchor(GBC.NORTH).insets(5, 10, 10, 0).fill(GBC.VERTICAL));
     355        p.add(right, GBC.eol().fill(GBC.BOTH).insets(0, 10, 0, 0));
     356
    339357        ExtendedDialog dialog = new ExtendedDialog(
    340358                Main.parent,
    341359                initialValues instanceof Filter ? tr("Filter") : tr("Search"),
    342                 initialValues instanceof Filter ? tr("Submit filter") : tr("Start Search"),
    343                 tr("Cancel")
     360                initialValues instanceof Filter ? tr("Submit filter") : tr("Start Search"), tr("Cancel")
    344361        ) {
    345362            @Override
    346363            protected void buttonAction(int buttonIndex, ActionEvent evt) {
     
    399416        return initialValues;
    400417    }
    401418
    402     private static void buildHints(JPanel right, HistoryComboBox hcbSearchString) {
    403         right.add(new SearchKeywordRow(hcbSearchString)
    404                 .addTitle(tr("basic examples"))
     419    private static JPanel buildHintsSection(HistoryComboBox hcbSearchString) {
     420        JPanel hintPanel = new JPanel(new GridBagLayout());
     421        hintPanel.setBorder(BorderFactory.createTitledBorder(tr("Search hints")));
     422
     423        hintPanel.add(new SearchKeywordRow(hcbSearchString)
     424                .addTitle(tr("basics"))
    405425                .addKeyword(tr("Baker Street"), null, tr("''Baker'' and ''Street'' in any key"))
    406                 .addKeyword(tr("\"Baker Street\""), "\"\"", tr("''Baker Street'' in any key")),
    407                 GBC.eol());
    408         right.add(new SearchKeywordRow(hcbSearchString)
    409                 .addTitle(tr("basics"))
     426                .addKeyword(tr("\"Baker Street\""), "\"\"", tr("''Baker Street'' in any key"))
    410427                .addKeyword("<i>key</i>:<i>valuefragment</i>", null,
    411428                        tr("''valuefragment'' anywhere in ''key''"), "name:str matches name=Bakerstreet")
    412                 .addKeyword("-<i>key</i>:<i>valuefragment</i>", null, tr("''valuefragment'' nowhere in ''key''"))
     429                .addKeyword("-<i>key</i>:<i>valuefragment</i>", null, tr("''valuefragment'' nowhere in ''key''")),
     430                GBC.eol());
     431        hintPanel.add(new SearchKeywordRow(hcbSearchString)
    413432                .addKeyword("<i>key</i>=<i>value</i>", null, tr("''key'' with exactly ''value''"))
    414433                .addKeyword("<i>key</i>=*", null, tr("''key'' with any value"))
    415434                .addKeyword("*=<i>value</i>", null, tr("''value'' in any key"))
     
    417436                .addKeyword("<i>key</i>><i>value</i>", null, tr("matches if ''key'' is greater than ''value'' (analogously, less than)"))
    418437                .addKeyword("\"key\"=\"value\"", "\"\"=\"\"",
    419438                        tr("to quote operators.<br>Within quoted strings the <b>\"</b> and <b>\\</b> characters need to be escaped " +
    420                            "by a preceding <b>\\</b> (e.g. <b>\\\"</b> and <b>\\\\</b>)."),
     439                                "by a preceding <b>\\</b> (e.g. <b>\\\"</b> and <b>\\\\</b>)."),
    421440                        "\"addr:street\""),
    422                 GBC.eol());
    423         right.add(new SearchKeywordRow(hcbSearchString)
     441                GBC.eol().anchor(GBC.CENTER));
     442        hintPanel.add(new SearchKeywordRow(hcbSearchString)
    424443                .addTitle(tr("combinators"))
    425444                .addKeyword("<i>expr</i> <i>expr</i>", null, tr("logical and (both expressions have to be satisfied)"))
    426445                .addKeyword("<i>expr</i> | <i>expr</i>", "| ", tr("logical or (at least one expression has to be satisfied)"))
     
    430449                GBC.eol());
    431450
    432451        if (Main.pref.getBoolean("expert", false)) {
    433             right.add(new SearchKeywordRow(hcbSearchString)
     452            hintPanel.add(new SearchKeywordRow(hcbSearchString)
    434453                .addTitle(tr("objects"))
    435454                .addKeyword("type:node", "type:node ", tr("all nodes"))
    436455                .addKeyword("type:way", "type:way ", tr("all ways"))
     
    438457                .addKeyword("closed", "closed ", tr("all closed ways"))
    439458                .addKeyword("untagged", "untagged ", tr("object without useful tags")),
    440459                GBC.eol());
    441             right.add(new SearchKeywordRow(hcbSearchString)
     460            hintPanel.add(new SearchKeywordRow(hcbSearchString)
    442461                .addTitle(tr("metadata"))
    443462                .addKeyword("user:", "user:", tr("objects changed by user", "user:anonymous"))
    444463                .addKeyword("id:", "id:", tr("objects with given ID"), "id:0 (new objects)")
     
    448467                .addKeyword("timestamp:", "timestamp:", tr("objects with last modification timestamp within range"), "timestamp:2012/",
    449468                        "timestamp:2008/2011-02-04T12"),
    450469                GBC.eol());
    451             right.add(new SearchKeywordRow(hcbSearchString)
     470            hintPanel.add(new SearchKeywordRow(hcbSearchString)
    452471                .addTitle(tr("properties"))
    453472                .addKeyword("nodes:<i>20-</i>", "nodes:", tr("ways with at least 20 nodes, or relations containing at least 20 nodes"))
    454473                .addKeyword("ways:<i>3-</i>", "ways:", tr("nodes with at least 3 referring ways, or relations containing at least 3 ways"))
     
    457476                .addKeyword("areasize:<i>-100</i>", "areasize:", tr("closed ways with an area of 100 m\u00b2"))
    458477                .addKeyword("waylength:<i>200-</i>", "waylength:", tr("ways with a length of 200 m or more")),
    459478                GBC.eol());
    460             right.add(new SearchKeywordRow(hcbSearchString)
     479            hintPanel.add(new SearchKeywordRow(hcbSearchString)
    461480                .addTitle(tr("state"))
    462481                .addKeyword("modified", "modified ", tr("all modified objects"))
    463482                .addKeyword("new", "new ", tr("all new objects"))
     
    465484                .addKeyword("incomplete", "incomplete ", tr("all incomplete objects"))
    466485                .addKeyword("deleted", "deleted ", tr("all deleted objects (checkbox <b>{0}</b> must be enabled)", tr("all objects"))),
    467486                GBC.eol());
    468             right.add(new SearchKeywordRow(hcbSearchString)
     487            hintPanel.add(new SearchKeywordRow(hcbSearchString)
    469488                .addTitle(tr("related objects"))
    470489                .addKeyword("child <i>expr</i>", "child ", tr("all children of objects matching the expression"), "child building")
    471490                .addKeyword("parent <i>expr</i>", "parent ", tr("all parents of objects matching the expression"), "parent bus_stop")
     
    476495                .addKeyword("nth%:<i>7</i>", "nth%:",
    477496                        tr("every n-th member of relation and/or every n-th node of way"), "nth%:100 (child waterway)"),
    478497                GBC.eol());
    479             right.add(new SearchKeywordRow(hcbSearchString)
     498            hintPanel.add(new SearchKeywordRow(hcbSearchString)
    480499                .addTitle(tr("view"))
    481500                .addKeyword("inview", "inview ", tr("objects in current view"))
    482501                .addKeyword("allinview", "allinview ", tr("objects (and all its way nodes / relation members) in current view"))
     
    485504                        tr("objects (and all its way nodes / relation members) in downloaded area")),
    486505                GBC.eol());
    487506        }
     507
     508        return hintPanel;
    488509    }
    489510
    490511    /**
     
    604625                            JOptionPane.WARNING_MESSAGE
    605626                    );
    606627                }
    607             } else if (Main.map != null) {
     628            } else {
    608629                Main.map.statusLine.setHelpText(tr("Found {0} matches", foundMatches));
    609630            }
    610631        }