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
--- /dev/null
+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
--- /dev/null
+/**\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
--- /dev/null
+/**\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
--- /dev/null
+/**\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