Ticket #14840: ticket14840_2.patch
| File ticket14840_2.patch, 12.2 KB (added by , 9 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()); 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)); 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"), 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") 344 361 ) { 345 362 @Override 346 363 protected void buttonAction(int buttonIndex, ActionEvent evt) { … … 399 416 return initialValues; 400 417 } 401 418 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")) 405 425 .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")) 410 427 .addKeyword("<i>key</i>:<i>valuefragment</i>", null, 411 428 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) 413 432 .addKeyword("<i>key</i>=<i>value</i>", null, tr("''key'' with exactly ''value''")) 414 433 .addKeyword("<i>key</i>=*", null, tr("''key'' with any value")) 415 434 .addKeyword("*=<i>value</i>", null, tr("''value'' in any key")) … … 417 436 .addKeyword("<i>key</i>><i>value</i>", null, tr("matches if ''key'' is greater than ''value'' (analogously, less than)")) 418 437 .addKeyword("\"key\"=\"value\"", "\"\"=\"\"", 419 438 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>)."), 421 440 "\"addr:street\""), 422 GBC.eol() );423 right.add(new SearchKeywordRow(hcbSearchString)441 GBC.eol().anchor(GBC.CENTER)); 442 hintPanel.add(new SearchKeywordRow(hcbSearchString) 424 443 .addTitle(tr("combinators")) 425 444 .addKeyword("<i>expr</i> <i>expr</i>", null, tr("logical and (both expressions have to be satisfied)")) 426 445 .addKeyword("<i>expr</i> | <i>expr</i>", "| ", tr("logical or (at least one expression has to be satisfied)")) … … 430 449 GBC.eol()); 431 450 432 451 if (Main.pref.getBoolean("expert", false)) { 433 right.add(new SearchKeywordRow(hcbSearchString)452 hintPanel.add(new SearchKeywordRow(hcbSearchString) 434 453 .addTitle(tr("objects")) 435 454 .addKeyword("type:node", "type:node ", tr("all nodes")) 436 455 .addKeyword("type:way", "type:way ", tr("all ways")) … … 438 457 .addKeyword("closed", "closed ", tr("all closed ways")) 439 458 .addKeyword("untagged", "untagged ", tr("object without useful tags")), 440 459 GBC.eol()); 441 right.add(new SearchKeywordRow(hcbSearchString)460 hintPanel.add(new SearchKeywordRow(hcbSearchString) 442 461 .addTitle(tr("metadata")) 443 462 .addKeyword("user:", "user:", tr("objects changed by user", "user:anonymous")) 444 463 .addKeyword("id:", "id:", tr("objects with given ID"), "id:0 (new objects)") … … 448 467 .addKeyword("timestamp:", "timestamp:", tr("objects with last modification timestamp within range"), "timestamp:2012/", 449 468 "timestamp:2008/2011-02-04T12"), 450 469 GBC.eol()); 451 right.add(new SearchKeywordRow(hcbSearchString)470 hintPanel.add(new SearchKeywordRow(hcbSearchString) 452 471 .addTitle(tr("properties")) 453 472 .addKeyword("nodes:<i>20-</i>", "nodes:", tr("ways with at least 20 nodes, or relations containing at least 20 nodes")) 454 473 .addKeyword("ways:<i>3-</i>", "ways:", tr("nodes with at least 3 referring ways, or relations containing at least 3 ways")) … … 457 476 .addKeyword("areasize:<i>-100</i>", "areasize:", tr("closed ways with an area of 100 m\u00b2")) 458 477 .addKeyword("waylength:<i>200-</i>", "waylength:", tr("ways with a length of 200 m or more")), 459 478 GBC.eol()); 460 right.add(new SearchKeywordRow(hcbSearchString)479 hintPanel.add(new SearchKeywordRow(hcbSearchString) 461 480 .addTitle(tr("state")) 462 481 .addKeyword("modified", "modified ", tr("all modified objects")) 463 482 .addKeyword("new", "new ", tr("all new objects")) … … 465 484 .addKeyword("incomplete", "incomplete ", tr("all incomplete objects")) 466 485 .addKeyword("deleted", "deleted ", tr("all deleted objects (checkbox <b>{0}</b> must be enabled)", tr("all objects"))), 467 486 GBC.eol()); 468 right.add(new SearchKeywordRow(hcbSearchString)487 hintPanel.add(new SearchKeywordRow(hcbSearchString) 469 488 .addTitle(tr("related objects")) 470 489 .addKeyword("child <i>expr</i>", "child ", tr("all children of objects matching the expression"), "child building") 471 490 .addKeyword("parent <i>expr</i>", "parent ", tr("all parents of objects matching the expression"), "parent bus_stop") … … 476 495 .addKeyword("nth%:<i>7</i>", "nth%:", 477 496 tr("every n-th member of relation and/or every n-th node of way"), "nth%:100 (child waterway)"), 478 497 GBC.eol()); 479 right.add(new SearchKeywordRow(hcbSearchString)498 hintPanel.add(new SearchKeywordRow(hcbSearchString) 480 499 .addTitle(tr("view")) 481 500 .addKeyword("inview", "inview ", tr("objects in current view")) 482 501 .addKeyword("allinview", "allinview ", tr("objects (and all its way nodes / relation members) in current view")) … … 485 504 tr("objects (and all its way nodes / relation members) in downloaded area")), 486 505 GBC.eol()); 487 506 } 507 508 return hintPanel; 488 509 } 489 510 490 511 /** … … 604 625 JOptionPane.WARNING_MESSAGE 605 626 ); 606 627 } 607 } else if (Main.map != null){628 } else { 608 629 Main.map.statusLine.setHelpText(tr("Found {0} matches", foundMatches)); 609 630 } 610 631 }
