#782 Implement markers
authorp.ciardelli <p.ciardelli@localhost>
Thu, 27 Aug 2009 17:20:29 +0000 (17:20 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Thu, 27 Aug 2009 17:20:29 +0000 (17:20 +0000)
.gitattributes
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkerPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersPropertyDescriptor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/SelectMarkerTypeDialog.java [new file with mode: 0644]

index 47f2bb6c4d01e39c95de882ea88d4388e242edfd..9f61680b1e55621cb524faf780e1e2014e9bc661 100644 (file)
@@ -834,8 +834,12 @@ taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CompletionPr
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/DayValidator.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/EditorPropertySheetEntry.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ICdmBasePropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkerPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersPropertyDescriptor.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersPropertySource.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/PropertySheetUtil.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/SelectMarkerTypeDialog.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/SourceViewerConfig.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/TimePeriodPropertySource.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/YearValidator.java -text
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkerPropertySource.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkerPropertySource.java
new file mode 100644 (file)
index 0000000..2919d8d
--- /dev/null
@@ -0,0 +1,44 @@
+package eu.etaxonomy.taxeditor.propertysheet;\r
+\r
+import eu.etaxonomy.cdm.model.common.AnnotatableEntity;\r
+import eu.etaxonomy.cdm.model.common.Annotation;\r
+import eu.etaxonomy.cdm.model.common.Marker;\r
+\r
+public class MarkerPropertySource extends CollectionPropertySource {\r
+\r
+       private AnnotatableEntity annotatableEntity;\r
+\r
+       public MarkerPropertySource(AnnotatableEntity annotatableEntity) {\r
+               super(annotatableEntity.getMarkers());\r
+               \r
+               this.annotatableEntity = annotatableEntity;\r
+       }\r
+       \r
+       @Override\r
+       protected String getItemDisplayName(Object item) {\r
+               // No display names on individual annotations\r
+               return "";\r
+       }\r
+\r
+       @Override\r
+       public Object getPropertyValue(Object id) {\r
+               if (id instanceof Marker) {\r
+                       Marker marker = (Marker) id;\r
+                       String text = marker.getMarkerType().getLabel();\r
+                       text += " (" + marker.getFlag() + ")";\r
+                       return text;\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public void setPropertyValue(Object id, Object value) {\r
+               // Fields not editable in property sheet view\r
+       }\r
+\r
+       @Override\r
+       public String toString() {\r
+               // "Annotations" header has no value\r
+               return "";\r
+       }\r
+}
\ No newline at end of file
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersDialog.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersDialog.java
new file mode 100644 (file)
index 0000000..7a49ccc
--- /dev/null
@@ -0,0 +1,298 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.propertysheet;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.eclipse.jface.dialogs.IDialogConstants;\r
+import org.eclipse.jface.dialogs.TitleAreaDialog;\r
+import org.eclipse.jface.viewers.CheckboxTableViewer;\r
+import org.eclipse.jface.viewers.ISelectionChangedListener;\r
+import org.eclipse.jface.viewers.IStructuredContentProvider;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.jface.viewers.ITableLabelProvider;\r
+import org.eclipse.jface.viewers.LabelProvider;\r
+import org.eclipse.jface.viewers.SelectionChangedEvent;\r
+import org.eclipse.jface.viewers.Viewer;\r
+import org.eclipse.jface.window.Window;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
+import org.eclipse.swt.graphics.Image;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Shell;\r
+\r
+import eu.etaxonomy.cdm.model.common.AnnotatableEntity;\r
+import eu.etaxonomy.cdm.model.common.Marker;\r
+import eu.etaxonomy.cdm.model.common.MarkerType;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.description.LanguageDialog;\r
+import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class MarkersDialog extends TitleAreaDialog {\r
+\r
+       private AnnotatableEntity entity;\r
+       private Button addButton;\r
+       private CheckboxTableViewer tableViewer;\r
+       private Button removeButton;\r
+       private Set<Marker> markers = new HashSet<Marker>();\r
+       private Button okButton;\r
+\r
+       /**\r
+        * @param parentShell\r
+        * @param entity \r
+        */\r
+       public MarkersDialog(Shell parentShell, AnnotatableEntity entity) {\r
+               super(parentShell);\r
+\r
+               this.entity = entity;   \r
+               \r
+               for (Marker marker : entity.getMarkers()) {\r
+                       this.markers.add(marker);\r
+               }\r
+               \r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.window.Window#open()\r
+        */\r
+       @Override\r
+       public int open() {\r
+               return super.open();\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.dialogs.TitleAreaDialog#createContents(org.eclipse.swt.widgets.Composite)\r
+        */\r
+       @Override\r
+       protected Control createContents(Composite parent) {\r
+           Control contents = super.createContents(parent);\r
+                               \r
+               setTitle("Edit markers");\r
+               setMessage("Add or remove markers, and set their flags to true or false");\r
+\r
+               this.getShell().setText("Markers");\r
+               \r
+               return contents;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)\r
+        */\r
+       @Override\r
+       protected Control createDialogArea(Composite parent) {\r
+               Composite container = (Composite) super.createDialogArea(parent);\r
+               \r
+        // create composite\r
+        Composite composite = new Composite(container, SWT.NULL);\r
+        composite.setLayoutData(new GridData(GridData.FILL_BOTH));\r
+               \r
+               final GridLayout gridLayout = new GridLayout();\r
+               gridLayout.numColumns = 2;\r
+               composite.setLayout(gridLayout);\r
+       \r
+               tableViewer = CheckboxTableViewer.newCheckList(composite, SWT.NULL);\r
+               GridData tableLayoutData = new GridData(SWT.FILL, SWT.FILL, true, false);\r
+               tableLayoutData.heightHint = 300;\r
+               tableViewer.getTable().setLayoutData(tableLayoutData);\r
+               \r
+               tableViewer.setContentProvider(new MarkersContentProvider());\r
+               tableViewer.setLabelProvider(new MarkersLabelProvider());\r
+               \r
+               tableViewer.addSelectionChangedListener(new ISelectionChangedListener () {\r
+                       public void selectionChanged(SelectionChangedEvent event) {\r
+                               setRemovedEnabled(true);\r
+                       }\r
+               });\r
+                               \r
+               Composite buttonContainer = new Composite(composite, SWT.NULL);\r
+               GridData buttonContainerLayoutData = new GridData();\r
+               buttonContainerLayoutData.verticalAlignment = SWT.TOP;\r
+               buttonContainer.setLayoutData(buttonContainerLayoutData);\r
+               buttonContainer.setLayout(new GridLayout());\r
+               \r
+               addButton = new Button(buttonContainer, SWT.PUSH);\r
+               addButton.setText("Add ...");\r
+               addButton.addMouseListener(new MouseAdapter(){\r
+                       /* (non-Javadoc)\r
+                        * @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent)\r
+                        */\r
+                       @Override\r
+                       public void mouseUp(MouseEvent e) {\r
+                               createMarker();\r
+                       }                       \r
+               });\r
+\r
+               removeButton = new Button(buttonContainer, SWT.PUSH);\r
+               removeButton.setText("Remove");\r
+               removeButton.addMouseListener(new MouseAdapter() {\r
+                       /* (non-Javadoc)\r
+                        * @see org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events.MouseEvent)\r
+                        */\r
+                       @Override\r
+                       public void mouseUp(MouseEvent e) {\r
+                               removeSelectedMarker();\r
+                       }\r
+               });\r
+               setRemovedEnabled(false);\r
+                       \r
+               populateMarkers();\r
+               \r
+               return container;\r
+       }\r
+       \r
+       \r
+       /**\r
+        * \r
+        */\r
+       protected void createMarker() {\r
+               Set<MarkerType> markerTypes = VocabularyStore.getMarkerTypes();\r
+               \r
+               // Remove marker types that are already spoken for\r
+               for (Marker marker : markers) {\r
+                       markerTypes.remove(marker.getMarkerType());\r
+               }\r
+               \r
+        SelectMarkerTypeDialog dialog = new SelectMarkerTypeDialog(getShell(), markerTypes);\r
+               if (dialog.open() == Window.OK) {\r
+                       Set<MarkerType> selectedMarkerTypes = dialog.getMarkerTypes();\r
+                       if (selectedMarkerTypes != null) {\r
+                               for (MarkerType markerType : selectedMarkerTypes) {\r
+                                       markers.add(Marker.NewInstance(markerType, false));\r
+                               }\r
+                               tableViewer.refresh();\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       protected void removeSelectedMarker() {\r
+               Marker marker = getSelectedMarker();\r
+               if (marker != null) {\r
+                       markers.remove(marker);\r
+                       tableViewer.refresh();\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @return \r
+        * \r
+        */\r
+       private Marker getSelectedMarker() {\r
+               return (Marker) ((IStructuredSelection) tableViewer.getSelection()).getFirstElement();\r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       protected void setRemovedEnabled(boolean enabled) {\r
+               removeButton.setEnabled(enabled);               \r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       protected void toggleSelection() {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       private void populateMarkers() {\r
+               List<Marker> markerFlags = new ArrayList<Marker>(); \r
+               for (Marker marker : markers) {\r
+                       if (marker.getFlag()) {\r
+                               markerFlags.add(marker);\r
+                       }\r
+               }\r
+               tableViewer.setInput(markers);\r
+               tableViewer.setCheckedElements(markerFlags.toArray());\r
+       }\r
+\r
+\r
+       private class MarkersContentProvider implements IStructuredContentProvider{\r
+\r
+               public Object[] getElements(Object inputElement) {                      \r
+                       return ((Set<?>) inputElement).toArray();\r
+               }\r
+\r
+               public void dispose() {}\r
+\r
+               public void inputChanged(Viewer viewer, Object oldInput,\r
+                               Object newInput) {}\r
+               \r
+       };\r
+       \r
+       class MarkersLabelProvider extends LabelProvider implements ITableLabelProvider{\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)\r
+                */\r
+               public Image getColumnImage(Object element, int columnIndex) {\r
+                       return null;\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)\r
+                */\r
+               public String getColumnText(Object element, int columnIndex) {\r
+                       return ((Marker)element).getMarkerType().getLabel();\r
+               }\r
+       }\r
+       \r
+    protected void createButtonsForButtonBar(Composite parent) {\r
+        okButton = createButton(parent, IDialogConstants.OK_ID,\r
+                IDialogConstants.OK_LABEL, true);\r
+        createButton(parent, IDialogConstants.CANCEL_ID,\r
+                IDialogConstants.CANCEL_LABEL, false);\r
+    }\r
+    \r
+    /* (non-Javadoc)\r
+     * @see org.eclipse.jface.dialogs.Dialog#okPressed()\r
+     */\r
+    @Override\r
+    protected void okPressed() {\r
+       List<Marker> checkedMarkers = new ArrayList<Marker>();\r
+               for (Object element : tableViewer.getCheckedElements()){\r
+                       checkedMarkers.add((Marker)element);\r
+               }\r
+               Set<Marker> savedMarkers = entity.getMarkers();\r
+               for (Marker marker : markers) {\r
+\r
+                       // Set marker flags\r
+                       marker.setFlag(checkedMarkers.contains(marker));\r
+                       \r
+                       // Save any new markers\r
+                       if (!savedMarkers.contains(marker)) {\r
+                               entity.addMarker(marker);\r
+                       }\r
+               }\r
+               // Remove deleted markers from entity\r
+               Set<Marker> removeMarkers = new HashSet<Marker>();\r
+               for (Marker marker : savedMarkers) {\r
+                       if (!markers.contains(marker)) {\r
+                               removeMarkers.add(marker);\r
+                       }\r
+               }\r
+               for (Marker marker : removeMarkers) {\r
+                       entity.removeMarker(marker);\r
+               }\r
+       super.okPressed();\r
+    }\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersPropertyDescriptor.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersPropertyDescriptor.java
new file mode 100644 (file)
index 0000000..0fdf750
--- /dev/null
@@ -0,0 +1,52 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.propertysheet;\r
+\r
+import java.util.Set;\r
+\r
+import org.eclipse.jface.dialogs.Dialog;\r
+import org.eclipse.jface.viewers.CellEditor;\r
+import org.eclipse.jface.viewers.DialogCellEditor;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.ui.views.properties.PropertyDescriptor;\r
+\r
+import eu.etaxonomy.cdm.model.common.AnnotatableEntity;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class MarkersPropertyDescriptor extends PropertyDescriptor {\r
+       private AnnotatableEntity entity;\r
+       \r
+       public MarkersPropertyDescriptor(Object id, String displayName, AnnotatableEntity entity) {\r
+               super(id, displayName);\r
+               this.entity = entity;\r
+       }\r
+\r
+    public CellEditor createPropertyEditor(Composite parent) {\r
+        CellEditor editor = new DialogCellEditor(parent) {\r
+\r
+               protected MarkersDialog dialog;\r
+               \r
+                       @Override\r
+                       protected Object openDialogBox(\r
+                                       Control cellEditorWindow) {\r
+                       dialog = new MarkersDialog(cellEditorWindow.getShell(), entity);\r
+                       int returnCode = ((MarkersDialog) dialog).open();\r
+                               if (returnCode == Dialog.OK) {\r
+                                       return new MarkerPropertySource(entity);\r
+                               }\r
+                               return null;\r
+                       }\r
+               \r
+        };\r
+        if (getValidator() != null) {\r
+                       editor.setValidator(getValidator());\r
+               }\r
+        return editor;\r
+    }  \r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/SelectMarkerTypeDialog.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/SelectMarkerTypeDialog.java
new file mode 100644 (file)
index 0000000..7c56b92
--- /dev/null
@@ -0,0 +1,190 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.propertysheet;\r
+\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.Set;\r
+\r
+import org.eclipse.jface.dialogs.IDialogConstants;\r
+import org.eclipse.jface.dialogs.InputDialog;\r
+import org.eclipse.jface.viewers.DoubleClickEvent;\r
+import org.eclipse.jface.viewers.IDoubleClickListener;\r
+import org.eclipse.jface.viewers.ISelectionChangedListener;\r
+import org.eclipse.jface.viewers.IStructuredContentProvider;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.jface.viewers.LabelProvider;\r
+import org.eclipse.jface.viewers.ListViewer;\r
+import org.eclipse.jface.viewers.SelectionChangedEvent;\r
+import org.eclipse.jface.viewers.Viewer;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Shell;\r
+\r
+import eu.etaxonomy.cdm.model.common.MarkerType;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class SelectMarkerTypeDialog extends InputDialog {\r
+\r
+       private Set<MarkerType> markerTypes;\r
+       private ListViewer textViewer;\r
+       String message = "Choose a type for the new marker";\r
+       private Button okButton;\r
+       private Set<MarkerType> selectedMarkerTypes;\r
+\r
+       /**\r
+        * @param parentShell\r
+        * @param markerTypes \r
+        */\r
+       protected SelectMarkerTypeDialog(Shell shell, Set<MarkerType> markerTypes) {\r
+               super(shell, "Create a new marker", \r
+                               "Choose a type for the new marker", null, null);\r
+               \r
+               this.markerTypes = markerTypes;\r
+       }\r
+       \r
+    protected Control createDialogArea(Composite parent) {\r
+        // create composite\r
+               Composite composite = new Composite(parent, SWT.NONE);\r
+               GridLayout layout = new GridLayout();\r
+               layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);\r
+               layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);\r
+               layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);\r
+               layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);\r
+               composite.setLayout(layout);\r
+               composite.setLayoutData(new GridData(GridData.FILL_BOTH));\r
+               applyDialogFont(composite);\r
+        // create message\r
+        if (message != null) {\r
+            Label label = new Label(composite, SWT.WRAP);\r
+            label.setText(message);\r
+            GridData data = new GridData(GridData.GRAB_HORIZONTAL\r
+                    | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL\r
+                    | GridData.VERTICAL_ALIGN_CENTER);\r
+            data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);\r
+            label.setLayoutData(data);\r
+            label.setFont(parent.getFont());\r
+        }\r
+        textViewer = new ListViewer(composite);\r
+        textViewer.getList().setLayoutData(new GridData(GridData.GRAB_HORIZONTAL\r
+                | GridData.HORIZONTAL_ALIGN_FILL));\r
+        textViewer.setContentProvider(new ContentProvider());\r
+        textViewer.setLabelProvider(new LabelProvider() {\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)\r
+                */\r
+               @Override\r
+               public String getText(Object element) {\r
+                       return ((MarkerType) element).getLabel();\r
+               }\r
+        });\r
+        textViewer.setInput(markerTypes);\r
+        \r
+        textViewer.addSelectionChangedListener(new ISelectionChangedListener () {\r
+                       public void selectionChanged(SelectionChangedEvent event) {\r
+                               setOkEnabled(true);\r
+                       }\r
+               });\r
+        textViewer.addDoubleClickListener(new IDoubleClickListener() {\r
+                       public void doubleClick(DoubleClickEvent event) {\r
+                               setSelectedMarkerTypes();\r
+                               close();\r
+                       }\r
+        });\r
+\r
+        applyDialogFont(composite);\r
+        return composite;\r
+    }\r
+    \r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.dialogs.InputDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)\r
+        */\r
+       protected void createButtonsForButtonBar(Composite parent) {\r
+        // create OK and Cancel buttons by default\r
+        okButton = createButton(parent, IDialogConstants.OK_ID,\r
+                IDialogConstants.OK_LABEL, true);\r
+        okButton.addMouseListener(new MouseAdapter() {\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events.MouseEvent)\r
+                */\r
+               @Override\r
+               public void mouseUp(MouseEvent e) {\r
+                       close();\r
+               }\r
+        });\r
+        createButton(parent, IDialogConstants.CANCEL_ID,\r
+                IDialogConstants.CANCEL_LABEL, false);\r
+        setOkEnabled(false);\r
+    }\r
+    \r
+       /**\r
+        * @param enabled\r
+        */\r
+       protected void setOkEnabled(boolean enabled) {\r
+               okButton.setEnabled(enabled);\r
+       }\r
+           \r
+    /* (non-Javadoc)\r
+     * @see org.eclipse.jface.dialogs.Dialog#close()\r
+     */\r
+    @Override\r
+    public boolean close() {\r
+       setSelectedMarkerTypes();\r
+       return super.close();\r
+    }\r
+    \r
+       /**\r
+        * @return \r
+        * \r
+        */\r
+       private void setSelectedMarkerTypes() {\r
+               selectedMarkerTypes = new HashSet<MarkerType>();\r
+               \r
+               IStructuredSelection selection = (IStructuredSelection) textViewer.getSelection();\r
+               Iterator iterator = selection.iterator();\r
+               while (iterator.hasNext()) {\r
+                       selectedMarkerTypes.add((MarkerType) iterator.next());\r
+               }\r
+       }\r
+    \r
+    class ContentProvider implements IStructuredContentProvider {\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)\r
+                */\r
+               public Object[] getElements(Object inputElement) {\r
+                       return markerTypes.toArray();\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.jface.viewers.IContentProvider#dispose()\r
+                */\r
+               public void dispose() {}\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)\r
+                */\r
+               public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}\r
+       \r
+    }\r
+\r
+       /**\r
+        * @return \r
+        * \r
+        */\r
+       public Set<MarkerType> getMarkerTypes() {\r
+               return selectedMarkerTypes;\r
+       }\r
+}\r