1 11 12 package org.eclipse.ui.views.markers.internal; 13 14 import java.util.Iterator ; 15 import java.util.List ; 16 17 import org.eclipse.jface.dialogs.IDialogConstants; 18 import org.eclipse.jface.viewers.CheckboxTableViewer; 19 import org.eclipse.jface.viewers.ISelection; 20 import org.eclipse.jface.viewers.ISelectionChangedListener; 21 import org.eclipse.jface.viewers.IStructuredContentProvider; 22 import org.eclipse.jface.viewers.IStructuredSelection; 23 import org.eclipse.jface.viewers.LabelProvider; 24 import org.eclipse.jface.viewers.SelectionChangedEvent; 25 import org.eclipse.jface.viewers.Viewer; 26 import org.eclipse.osgi.util.NLS; 27 import org.eclipse.swt.SWT; 28 import org.eclipse.swt.events.ModifyEvent; 29 import org.eclipse.swt.events.ModifyListener; 30 import org.eclipse.swt.events.SelectionAdapter; 31 import org.eclipse.swt.events.SelectionEvent; 32 import org.eclipse.swt.events.SelectionListener; 33 import org.eclipse.swt.events.TraverseEvent; 34 import org.eclipse.swt.events.TraverseListener; 35 import org.eclipse.swt.layout.FormAttachment; 36 import org.eclipse.swt.layout.FormData; 37 import org.eclipse.swt.layout.FormLayout; 38 import org.eclipse.swt.layout.GridData; 39 import org.eclipse.swt.layout.GridLayout; 40 import org.eclipse.swt.widgets.Button; 41 import org.eclipse.swt.widgets.Combo; 42 import org.eclipse.swt.widgets.Composite; 43 import org.eclipse.swt.widgets.Label; 44 import org.eclipse.swt.widgets.Shell; 45 import org.eclipse.swt.widgets.Text; 46 47 53 public class DialogProblemFilter extends DialogMarkerFilter { 54 55 private DescriptionGroup descriptionGroup; 56 57 private SeverityGroup severityGroup; 58 59 private Composite userFilterComposite; 60 61 private Label systemSettingsLabel; 62 63 private CheckboxTableViewer definedList; 64 65 private class DescriptionGroup { 66 private Label descriptionLabel; 67 68 private Combo combo; 69 70 private Text description; 71 72 private String contains = MarkerMessages.filtersDialog_contains; 73 74 private String doesNotContain = MarkerMessages.filtersDialog_doesNotContain; 75 76 81 public DescriptionGroup(Composite parent) { 82 83 Composite descriptionComposite = new Composite(parent, SWT.NONE); 84 descriptionComposite.setLayout(new GridLayout(2, false)); 85 descriptionComposite.setLayoutData(new GridData( 86 GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); 87 88 descriptionLabel = new Label(descriptionComposite, SWT.NONE); 89 descriptionLabel.setFont(parent.getFont()); 90 descriptionLabel 91 .setText(MarkerMessages.filtersDialog_descriptionLabel); 92 93 combo = new Combo(descriptionComposite, SWT.READ_ONLY); 94 combo.setFont(parent.getFont()); 95 combo.add(contains); 96 combo.add(doesNotContain); 97 combo.addSelectionListener(new SelectionAdapter() { 98 103 public void widgetSelected(SelectionEvent e) { 104 updateForSelection(); 105 } 106 }); 107 combo.addTraverseListener(new TraverseListener() { 110 public void keyTraversed(TraverseEvent e) { 111 if (e.detail == SWT.TRAVERSE_ESCAPE 112 || e.detail == SWT.TRAVERSE_RETURN) { 113 e.doit = false; 114 } 115 } 116 }); 117 118 description = new Text(descriptionComposite, SWT.SINGLE 119 | SWT.BORDER); 120 description.setFont(parent.getFont()); 121 GridData data = new GridData(GridData.FILL_HORIZONTAL); 122 data.horizontalSpan = 2; 123 124 description.setLayoutData(data); 125 description.addModifyListener(new ModifyListener() { 126 public void modifyText(ModifyEvent e) { 127 DialogProblemFilter.this.markDirty(); 128 } 129 }); 130 } 131 132 137 public boolean getContains() { 138 return combo.getSelectionIndex() == combo.indexOf(contains); 139 } 140 141 146 public void setContains(boolean value) { 147 if (value) { 148 combo.select(combo.indexOf(contains)); 149 } else { 150 combo.select(combo.indexOf(doesNotContain)); 151 } 152 } 153 154 159 public void setDescription(String text) { 160 if (text == null) { 161 description.setText(""); } else { 163 description.setText(text); 164 } 165 } 166 167 172 public String getDescription() { 173 return description.getText(); 174 } 175 176 182 public void updateEnablement(boolean enabled) { 183 descriptionLabel.setEnabled(enabled); 184 combo.setEnabled(enabled); 185 description.setEnabled(enabled); 186 } 187 } 188 189 private class SeverityGroup { 190 private Button enablementButton; 191 192 private Button errorButton; 193 194 private Button warningButton; 195 196 private Button infoButton; 197 198 203 public SeverityGroup(Composite parent) { 204 205 Composite severityComposite = new Composite(parent, SWT.NONE); 206 severityComposite.setLayout(new GridLayout(4, false)); 207 severityComposite.setLayoutData(new GridData( 208 GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); 209 210 SelectionListener listener = new SelectionAdapter() { 211 216 public void widgetSelected(SelectionEvent e) { 217 updateEnablement(true); 218 DialogProblemFilter.this.markDirty(); 219 } 220 }; 221 222 enablementButton = new Button(severityComposite, SWT.CHECK); 223 GridData data = new GridData(GridData.FILL_HORIZONTAL); 224 enablementButton.setLayoutData(data); 225 enablementButton.setFont(parent.getFont()); 226 enablementButton 227 .setText(MarkerMessages.filtersDialog_severityLabel); 228 enablementButton.addSelectionListener(listener); 229 230 errorButton = new Button(severityComposite, SWT.CHECK); 231 errorButton.setFont(parent.getFont()); 232 errorButton.setText(MarkerMessages.filtersDialog_severityError); 233 errorButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 234 errorButton.addSelectionListener(new SelectionAdapter() { 235 240 public void widgetSelected(SelectionEvent e) { 241 updateForSelection(); 242 } 243 }); 244 245 warningButton = new Button(severityComposite, SWT.CHECK); 246 warningButton.setFont(parent.getFont()); 247 warningButton.setText(MarkerMessages.filtersDialog_severityWarning); 248 warningButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 249 warningButton.addSelectionListener(new SelectionAdapter() { 250 255 public void widgetSelected(SelectionEvent e) { 256 updateForSelection(); 257 } 258 }); 259 260 infoButton = new Button(severityComposite, SWT.CHECK); 261 infoButton.setFont(parent.getFont()); 262 infoButton.setText(MarkerMessages.filtersDialog_severityInfo); 263 infoButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 264 infoButton.addSelectionListener(new SelectionAdapter() { 265 270 public void widgetSelected(SelectionEvent e) { 271 updateForSelection(); 272 } 273 }); 274 } 275 276 281 public boolean isSeveritySelected() { 282 return enablementButton.getSelection(); 283 } 284 285 290 public void setEnabled(boolean enabled) { 291 enablementButton.setSelection(enabled); 292 } 293 294 299 public boolean isErrorSelected() { 300 return errorButton.getSelection(); 301 } 302 303 308 public void setErrorSelected(boolean selected) { 309 errorButton.setSelection(selected); 310 } 311 312 317 public boolean isWarningSelected() { 318 return warningButton.getSelection(); 319 } 320 321 326 public void setWarningSelected(boolean selected) { 327 warningButton.setSelection(selected); 328 } 329 330 335 public boolean isInfoSelected() { 336 return infoButton.getSelection(); 337 } 338 339 344 public void setInfoSelected(boolean selected) { 345 infoButton.setSelection(selected); 346 } 347 348 353 public void updateEnablement(boolean enabled) { 354 355 boolean showingSeverity = isSeveritySelected(); 356 enablementButton.setEnabled(enabled); 357 errorButton.setEnabled(showingSeverity && enabled); 358 warningButton.setEnabled(showingSeverity && enabled); 359 infoButton.setEnabled(showingSeverity && enabled); 360 361 } 362 } 363 364 370 public DialogProblemFilter(Shell parentShell, ProblemFilter[] filters) { 371 super(parentShell, filters); 372 } 373 374 379 protected void createAttributesArea(Composite parent) { 380 Composite composite = new Composite(parent, SWT.NONE); 381 composite.setFont(parent.getFont()); 382 composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 383 GridLayout layout = new GridLayout(); 384 composite.setLayout(layout); 385 386 descriptionGroup = new DescriptionGroup(composite); 387 severityGroup = new SeverityGroup(composite); 388 } 389 390 395 protected void updateFilterFromUI(MarkerFilter filter) { 396 super.updateFilterFromUI(filter); 397 398 ProblemFilter problemFilter = (ProblemFilter) filter; 399 problemFilter.setContains(descriptionGroup.getContains()); 400 problemFilter.setDescription(descriptionGroup.getDescription().trim()); 401 402 problemFilter.setSelectBySeverity(severityGroup.isSeveritySelected()); 403 int severity = 0; 404 if (severityGroup.isErrorSelected()) { 405 severity = severity | ProblemFilter.SEVERITY_ERROR; 406 } 407 if (severityGroup.isWarningSelected()) { 408 severity = severity | ProblemFilter.SEVERITY_WARNING; 409 } 410 if (severityGroup.isInfoSelected()) { 411 severity = severity | ProblemFilter.SEVERITY_INFO; 412 } 413 problemFilter.setSeverity(severity); 414 415 } 416 417 422 protected void updateUIWithFilter(MarkerFilter filter) { 423 424 ProblemFilter problemFilter = (ProblemFilter) filter; 425 descriptionGroup.setContains(problemFilter.getContains()); 426 descriptionGroup.setDescription(problemFilter.getDescription()); 427 428 severityGroup.setEnabled(problemFilter.getSelectBySeverity()); 429 int severity = problemFilter.getSeverity(); 430 431 severityGroup 432 .setErrorSelected((severity & ProblemFilter.SEVERITY_ERROR) > 0); 433 severityGroup 434 .setWarningSelected((severity & ProblemFilter.SEVERITY_WARNING) > 0); 435 severityGroup 436 .setInfoSelected((severity & ProblemFilter.SEVERITY_INFO) > 0); 437 438 super.updateUIWithFilter(filter); 439 440 } 441 442 447 protected void updateEnabledState(boolean enabled) { 448 super.updateEnabledState(enabled); 449 descriptionGroup.updateEnablement(enabled); 450 severityGroup.updateEnablement(enabled); 451 } 452 453 458 protected void resetPressed() { 459 descriptionGroup.setContains(ProblemFilter.DEFAULT_CONTAINS); 460 descriptionGroup.setDescription(ProblemFilter.DEFAULT_DESCRIPTION); 461 462 severityGroup.setEnabled(ProblemFilter.DEFAULT_SELECT_BY_SEVERITY); 463 severityGroup 464 .setErrorSelected((ProblemFilter.DEFAULT_SEVERITY & ProblemFilter.SEVERITY_ERROR) > 0); 465 severityGroup 466 .setWarningSelected((ProblemFilter.DEFAULT_SEVERITY & ProblemFilter.SEVERITY_WARNING) > 0); 467 severityGroup 468 .setInfoSelected((ProblemFilter.DEFAULT_SEVERITY & ProblemFilter.SEVERITY_INFO) > 0); 469 470 super.resetPressed(); 471 } 472 473 protected MarkerFilter newFilter(String newName) { 474 return new ProblemFilter(newName); 475 } 476 477 482 void createFiltersArea(Composite dialogArea) { 483 484 if (MarkerSupportRegistry.getInstance().getRegisteredFilters().size() == 0) { 485 super.createFiltersArea(dialogArea); 486 return; 487 } 488 489 Composite mainComposite = new Composite(dialogArea, SWT.NONE); 490 mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, 491 true)); 492 493 mainComposite.setLayout(new FormLayout()); 494 495 Composite topComposite = new Composite(mainComposite, SWT.NONE); 496 FormData topData = new FormData(); 497 topData.top = new FormAttachment(0); 498 topData.left = new FormAttachment(0); 499 topData.right = new FormAttachment(100); 500 topData.bottom = new FormAttachment(50); 501 502 topComposite.setLayoutData(topData); 503 topComposite.setLayout(new GridLayout()); 504 505 createUserFiltersArea(topComposite); 506 507 Composite bottomComposite = new Composite(mainComposite, SWT.NONE); 508 FormData bottomData = new FormData(); 509 bottomData.top = new FormAttachment(50); 510 bottomData.left = new FormAttachment(0); 511 bottomData.right = new FormAttachment(100); 512 bottomData.bottom = new FormAttachment(100); 513 514 bottomComposite.setLayoutData(bottomData); 515 bottomComposite.setLayout(new GridLayout()); 516 517 createRegisteredFilters(bottomComposite); 518 createFilterSelectButtons(bottomComposite); 519 520 } 521 522 527 private void createRegisteredFilters(Composite bottomComposite) { 528 529 Composite listArea = new Composite(bottomComposite, SWT.NONE); 530 listArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 531 listArea.setLayout(new GridLayout()); 532 533 Label title = new Label(listArea, SWT.NONE); 534 title.setText(MarkerMessages.ProblemFilterDialog_System_Filters_Title); 535 definedList = CheckboxTableViewer.newCheckList(listArea, SWT.BORDER); 536 definedList.setContentProvider(new IStructuredContentProvider() { 537 542 public Object [] getElements(Object inputElement) { 543 return MarkerSupportRegistry.getInstance() 544 .getRegisteredFilters().toArray(); 545 } 546 547 552 public void dispose() { 553 } 555 556 562 public void inputChanged(Viewer viewer, Object oldInput, 563 Object newInput) { 564 } 566 }); 567 568 definedList.setLabelProvider(new LabelProvider() { 569 574 public String getText(Object element) { 575 return ((MarkerFilter) element).getName(); 576 } 577 }); 578 579 definedList 580 .addSelectionChangedListener(new ISelectionChangedListener() { 581 582 587 public void selectionChanged(SelectionChangedEvent event) { 588 589 ISelection selection = event.getSelection(); 590 if (selection instanceof IStructuredSelection) { 591 Object selected = ((IStructuredSelection) selection) 592 .getFirstElement(); 593 if (selected == null) { 594 systemSettingsLabel.setText(Util.EMPTY_STRING); 595 } else { 596 systemSettingsLabel 597 .setText(getSystemFilterString((ProblemFilter) selected)); 598 } 599 } else { 600 systemSettingsLabel.setText(Util.EMPTY_STRING); 601 } 602 showSystemLabel(true); 603 604 } 605 }); 606 607 Iterator definedFilters = MarkerSupportRegistry.getInstance() 608 .getRegisteredFilters().iterator(); 609 definedList.setInput(this); 610 while (definedFilters.hasNext()) { 611 MarkerFilter next = (MarkerFilter) definedFilters.next(); 612 definedList.setChecked(next, next.isEnabled()); 613 } 614 615 definedList.getControl().setLayoutData( 616 new GridData(SWT.FILL, SWT.FILL, true, true)); 617 618 } 619 620 626 protected String getSystemFilterString(ProblemFilter filter) { 627 StringBuffer filterBuffer = new StringBuffer (); 628 629 String scopeString = getScopeString(filter); 630 if (scopeString != null) { 631 filterBuffer.append(scopeString); 632 } 633 634 String descriptionString = getDescriptionString(filter); 635 if (descriptionString != null) { 636 filterBuffer.append(Util.TWO_LINE_FEED); 637 filterBuffer.append(descriptionString); 638 } 639 640 String severityString = getSeverityString(filter); 641 if (severityString != null) { 642 filterBuffer.append(Util.TWO_LINE_FEED); 643 filterBuffer.append(severityString); 644 } 645 646 String typesString = getProblemTypesString(filter); 647 filterBuffer.append(Util.TWO_LINE_FEED); 648 filterBuffer.append(typesString); 649 650 return filterBuffer.toString(); 651 } 652 653 659 private String getProblemTypesString(ProblemFilter filter) { 660 List types = filter.getSelectedTypes(); 661 if (types.size() == getRootEntries(filter).length) { 662 return MarkerMessages.ProblemFilterDialog_All_Problems; 663 } 664 StringBuffer typesBuffer = new StringBuffer (); 665 Iterator typesIterator = types.iterator(); 666 typesBuffer.append(MarkerMessages.ProblemFilterDialog_Selected_Types); 667 668 while (typesIterator.hasNext()) { 669 typesBuffer.append(Util.LINE_FEED_AND_TAB); 670 typesBuffer.append(((MarkerType) typesIterator.next()).getLabel()); 671 672 } 673 return typesBuffer.toString(); 674 } 675 676 683 private String getSeverityString(ProblemFilter filter) { 684 if (filter.getSelectBySeverity()) { 685 switch (filter.getSeverity()) { 686 case ProblemFilter.SEVERITY_INFO: 687 return MarkerMessages.ProblemFilterDialog_Info_Severity; 688 case ProblemFilter.SEVERITY_WARNING: 689 return MarkerMessages.ProblemFilterDialog_Warning_Severity; 690 case ProblemFilter.SEVERITY_ERROR: 691 return MarkerMessages.ProblemFilterDialog_Error_Severity; 692 default: 693 return null; 694 } 695 } 696 return null; 697 } 698 699 706 private String getDescriptionString(ProblemFilter filter) { 707 if (filter.getDescription().length() == 0) { 708 return null; 709 } 710 if (filter.getContains()) { 711 return NLS.bind( 712 MarkerMessages.ProblemFilterDialog_Contains_Description, 713 filter.getDescription()); 714 } 715 return NLS 716 .bind( 717 MarkerMessages.ProblemFilterDialog_Does_Not_Contain_Description, 718 filter.getDescription()); 719 720 } 721 722 728 private String getScopeString(ProblemFilter filter) { 729 730 switch (filter.onResource) { 731 case MarkerFilter.ON_ANY: 732 return MarkerMessages.ProblemFilterDialog_any; 733 case MarkerFilter.ON_ANY_IN_SAME_CONTAINER: 734 return MarkerMessages.ProblemFilterDialog_sameContainer; 735 case MarkerFilter.ON_SELECTED_AND_CHILDREN: 736 return MarkerMessages.ProblemFilterDialog_selectedAndChildren; 737 case MarkerFilter.ON_SELECTED_ONLY: 738 return MarkerMessages.ProblemFilterDialog_selected; 739 case MarkerFilter.ON_WORKING_SET: 740 return NLS.bind(MarkerMessages.ProblemFilterDialog_workingSet, 741 filter.getWorkingSet()); 742 743 default: 744 return null; 745 746 } 747 } 748 749 754 protected void setSelectedFilter(SelectionChangedEvent event) { 755 showSystemLabel(false); 756 super.setSelectedFilter(event); 757 } 758 759 764 protected void showSystemLabel(boolean systemLabelShowing) { 765 766 systemSettingsLabel.setVisible(systemLabelShowing); 767 userFilterComposite.setVisible(!systemLabelShowing); 768 userFilterComposite.getParent().layout(); 769 } 770 771 776 Composite createSelectedFilterArea(Composite composite) { 777 778 Composite wrapper = new Composite(composite, SWT.NONE); 779 FormLayout wrapperLayout = new FormLayout(); 780 wrapperLayout.marginHeight = 0; 781 wrapperLayout.marginWidth = 0; 782 wrapper.setLayout(wrapperLayout); 783 784 systemSettingsLabel = createSystemSettingsLabel(wrapper); 785 systemSettingsLabel.setVisible(false); 786 787 FormData systemData = new FormData(); 788 systemData.top = new FormAttachment(0, IDialogConstants.VERTICAL_MARGIN); 789 systemData.left = new FormAttachment(0, 790 IDialogConstants.HORIZONTAL_MARGIN); 791 systemData.right = new FormAttachment(100, -1 792 * IDialogConstants.HORIZONTAL_MARGIN); 793 systemData.bottom = new FormAttachment(100, -1 794 * IDialogConstants.VERTICAL_MARGIN); 795 796 systemSettingsLabel.setLayoutData(systemData); 797 798 userFilterComposite = super.createSelectedFilterArea(wrapper); 799 800 FormData userData = new FormData(); 801 userData.top = new FormAttachment(0); 802 userData.left = new FormAttachment(0); 803 userData.right = new FormAttachment(100); 804 userData.bottom = new FormAttachment(100); 805 806 userFilterComposite.setLayoutData(userData); 807 808 return wrapper; 809 } 810 811 817 private Label createSystemSettingsLabel(Composite wrapper) { 818 819 return new Label(wrapper, SWT.NONE); 820 } 821 822 827 protected void buttonPressed(int buttonId) { 828 if (definedList != null) { 829 if (buttonId == SELECT_ALL_FILTERS_ID) { 830 definedList.setAllChecked(true); 831 } else if (buttonId == DESELECT_ALL_FILTERS_ID) { 832 definedList.setAllChecked(false); 833 } 834 } 835 836 super.buttonPressed(buttonId); 837 } 838 839 844 protected void okPressed() { 845 846 Iterator registered = MarkerSupportRegistry.getInstance() 847 .getRegisteredFilters().iterator(); 848 while (registered.hasNext()) { 849 ProblemFilter next = (ProblemFilter) registered.next(); 850 next.setEnabled(definedList.getChecked(next)); 851 852 } 853 super.okPressed(); 854 } 855 } 856 | Popular Tags |