Ticket #14840: 14840-v4.patch
File 14840-v4.patch, 11.8 KB (added by , 8 years ago) |
---|
-
src/org/openstreetmap/josm/actions/search/SearchAction.java
28 28 import java.util.Set; 29 29 import java.util.function.Predicate; 30 30 31 import javax.swing.ButtonGroup;32 31 import javax.swing.JCheckBox; 33 32 import javax.swing.JLabel; 34 33 import javax.swing.JOptionPane; … … 36 35 import javax.swing.JRadioButton; 37 36 import javax.swing.text.BadLocationException; 38 37 import javax.swing.text.JTextComponent; 38 import javax.swing.BorderFactory; 39 import javax.swing.ButtonGroup; 39 40 40 41 import org.openstreetmap.josm.Main; 41 42 import org.openstreetmap.josm.actions.ActionParameter; … … 274 275 final JCheckBox caseSensitive = new JCheckBox(tr("case sensitive"), initialValues.caseSensitive); 275 276 JCheckBox allElements = new JCheckBox(tr("all objects"), initialValues.allElements); 276 277 allElements.setToolTipText(tr("Also include incomplete and deleted objects in search.")); 278 JCheckBox addOnToolbar = new JCheckBox(tr("add toolbar button"), false); 279 277 280 final JRadioButton standardSearch = new JRadioButton(tr("standard"), !initialValues.regexSearch && !initialValues.mapCSSSearch); 278 281 final JRadioButton regexSearch = new JRadioButton(tr("regular expression"), initialValues.regexSearch); 279 282 final JRadioButton mapCSSSearch = new JRadioButton(tr("MapCSS selector"), initialValues.mapCSSSearch); 280 final JCheckBox addOnToolbar = new JCheckBox(tr("add toolbar button"), false);281 283 final ButtonGroup bg2 = new ButtonGroup(); 282 284 bg2.add(standardSearch); 283 285 bg2.add(regexSearch); 284 286 bg2.add(mapCSSSearch); 285 287 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));289 288 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()); 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 295 301 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()); 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)); 301 317 } 302 318 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)); 306 323 307 324 final JTextComponent editorComponent = hcbSearchString.getEditorComponent(); 308 325 editorComponent.getDocument().addDocumentListener(new AbstractTextComponentValidator(editorComponent) { … … 334 351 335 352 final JPanel p = new JPanel(new GridBagLayout()); 336 353 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 339 357 ExtendedDialog dialog = new ExtendedDialog( 340 358 Main.parent, 341 359 initialValues instanceof Filter ? tr("Filter") : tr("Search"), … … 399 417 return initialValues; 400 418 } 401 419 402 private static void buildHints(JPanel right, HistoryComboBox hcbSearchString) { 403 right.add(new SearchKeywordRow(hcbSearchString) 404 .addTitle(tr("basic examples")) 420 private static JPanel buildHintsSection(HistoryComboBox hcbSearchString) { 421 JPanel hintPanel = new JPanel(new GridBagLayout()); 422 hintPanel.setBorder(BorderFactory.createTitledBorder(tr("Search hints"))); 423 424 hintPanel.add(new SearchKeywordRow(hcbSearchString) 425 .addTitle(tr("basics")) 405 426 .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")) 427 .addKeyword(tr("\"Baker Street\""), "\"\"", tr("''Baker Street'' in any key")) 410 428 .addKeyword("<i>key</i>:<i>valuefragment</i>", null, 411 429 tr("''valuefragment'' anywhere in ''key''"), "name:str matches name=Bakerstreet") 412 .addKeyword("-<i>key</i>:<i>valuefragment</i>", null, tr("''valuefragment'' nowhere in ''key''")) 430 .addKeyword("-<i>key</i>:<i>valuefragment</i>", null, tr("''valuefragment'' nowhere in ''key''")), 431 GBC.eol()); 432 hintPanel.add(new SearchKeywordRow(hcbSearchString) 413 433 .addKeyword("<i>key</i>=<i>value</i>", null, tr("''key'' with exactly ''value''")) 414 434 .addKeyword("<i>key</i>=*", null, tr("''key'' with any value")) 415 435 .addKeyword("*=<i>value</i>", null, tr("''value'' in any key")) … … 417 437 .addKeyword("<i>key</i>><i>value</i>", null, tr("matches if ''key'' is greater than ''value'' (analogously, less than)")) 418 438 .addKeyword("\"key\"=\"value\"", "\"\"=\"\"", 419 439 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>)."),440 "by a preceding <b>\\</b> (e.g. <b>\\\"</b> and <b>\\\\</b>)."), 421 441 "\"addr:street\""), 422 GBC.eol() );423 right.add(new SearchKeywordRow(hcbSearchString)442 GBC.eol().anchor(GBC.CENTER)); 443 hintPanel.add(new SearchKeywordRow(hcbSearchString) 424 444 .addTitle(tr("combinators")) 425 445 .addKeyword("<i>expr</i> <i>expr</i>", null, tr("logical and (both expressions have to be satisfied)")) 426 446 .addKeyword("<i>expr</i> | <i>expr</i>", "| ", tr("logical or (at least one expression has to be satisfied)")) … … 430 450 GBC.eol()); 431 451 432 452 if (Main.pref.getBoolean("expert", false)) { 433 right.add(new SearchKeywordRow(hcbSearchString)453 hintPanel.add(new SearchKeywordRow(hcbSearchString) 434 454 .addTitle(tr("objects")) 435 455 .addKeyword("type:node", "type:node ", tr("all nodes")) 436 456 .addKeyword("type:way", "type:way ", tr("all ways")) … … 438 458 .addKeyword("closed", "closed ", tr("all closed ways")) 439 459 .addKeyword("untagged", "untagged ", tr("object without useful tags")), 440 460 GBC.eol()); 441 right.add(new SearchKeywordRow(hcbSearchString)461 hintPanel.add(new SearchKeywordRow(hcbSearchString) 442 462 .addTitle(tr("metadata")) 443 463 .addKeyword("user:", "user:", tr("objects changed by user", "user:anonymous")) 444 464 .addKeyword("id:", "id:", tr("objects with given ID"), "id:0 (new objects)") … … 448 468 .addKeyword("timestamp:", "timestamp:", tr("objects with last modification timestamp within range"), "timestamp:2012/", 449 469 "timestamp:2008/2011-02-04T12"), 450 470 GBC.eol()); 451 right.add(new SearchKeywordRow(hcbSearchString)471 hintPanel.add(new SearchKeywordRow(hcbSearchString) 452 472 .addTitle(tr("properties")) 453 473 .addKeyword("nodes:<i>20-</i>", "nodes:", tr("ways with at least 20 nodes, or relations containing at least 20 nodes")) 454 474 .addKeyword("ways:<i>3-</i>", "ways:", tr("nodes with at least 3 referring ways, or relations containing at least 3 ways")) … … 457 477 .addKeyword("areasize:<i>-100</i>", "areasize:", tr("closed ways with an area of 100 m\u00b2")) 458 478 .addKeyword("waylength:<i>200-</i>", "waylength:", tr("ways with a length of 200 m or more")), 459 479 GBC.eol()); 460 right.add(new SearchKeywordRow(hcbSearchString)480 hintPanel.add(new SearchKeywordRow(hcbSearchString) 461 481 .addTitle(tr("state")) 462 482 .addKeyword("modified", "modified ", tr("all modified objects")) 463 483 .addKeyword("new", "new ", tr("all new objects")) … … 465 485 .addKeyword("incomplete", "incomplete ", tr("all incomplete objects")) 466 486 .addKeyword("deleted", "deleted ", tr("all deleted objects (checkbox <b>{0}</b> must be enabled)", tr("all objects"))), 467 487 GBC.eol()); 468 right.add(new SearchKeywordRow(hcbSearchString)488 hintPanel.add(new SearchKeywordRow(hcbSearchString) 469 489 .addTitle(tr("related objects")) 470 490 .addKeyword("child <i>expr</i>", "child ", tr("all children of objects matching the expression"), "child building") 471 491 .addKeyword("parent <i>expr</i>", "parent ", tr("all parents of objects matching the expression"), "parent bus_stop") … … 476 496 .addKeyword("nth%:<i>7</i>", "nth%:", 477 497 tr("every n-th member of relation and/or every n-th node of way"), "nth%:100 (child waterway)"), 478 498 GBC.eol()); 479 right.add(new SearchKeywordRow(hcbSearchString)499 hintPanel.add(new SearchKeywordRow(hcbSearchString) 480 500 .addTitle(tr("view")) 481 501 .addKeyword("inview", "inview ", tr("objects in current view")) 482 502 .addKeyword("allinview", "allinview ", tr("objects (and all its way nodes / relation members) in current view")) … … 485 505 tr("objects (and all its way nodes / relation members) in downloaded area")), 486 506 GBC.eol()); 487 507 } 508 509 return hintPanel; 488 510 } 489 511 490 512 /** … … 604 626 JOptionPane.WARNING_MESSAGE 605 627 ); 606 628 } 607 } else if (Main.map != null){629 } else { 608 630 Main.map.statusLine.setHelpText(tr("Found {0} matches", foundMatches)); 609 631 } 610 632 }