\r
import java.beans.PropertyChangeEvent;\r
import java.beans.PropertyChangeListener;\r
+import java.util.Iterator;\r
\r
import org.apache.log4j.Logger;\r
import org.eclipse.jface.action.IMenuManager;\r
import org.eclipse.jface.text.IDocument;\r
import org.eclipse.jface.text.source.Annotation;\r
import org.eclipse.jface.text.source.AnnotationModel;\r
+import org.eclipse.jface.text.source.IAnnotationModel;\r
import org.eclipse.jface.text.source.ISourceViewer;\r
import org.eclipse.jface.text.source.IVerticalRuler;\r
+import org.eclipse.jface.util.IPropertyChangeListener;\r
import org.eclipse.jface.window.Window;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.custom.StyledText;\r
import org.eclipse.ui.IEditorInput;\r
import org.eclipse.ui.IEditorSite;\r
import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.texteditor.IDocumentProvider;\r
import org.eclipse.ui.views.properties.IPropertySheetEntry;\r
import org.eclipse.ui.views.properties.IPropertySheetPage;\r
import org.eclipse.ui.views.properties.PropertySheetPage;\r
import org.eclipse.ui.views.properties.PropertySheetSorter;\r
\r
+import eu.etaxonomy.cdm.model.common.MarkerType;\r
+import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineDocumentProvider;\r
import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor;\r
import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation;\r
import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotationModel;\r
import eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput;\r
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
import eu.etaxonomy.taxeditor.store.CdmStore;\r
+import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
\r
/**\r
* @author p.ciardelli\r
*/\r
public BulkEditor() {\r
super(CdmStore.NewTransactionalConversation());\r
- \r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.editors.text.TextEditor#initializeEditor()\r
+ */\r
+ @Override\r
+ protected void initializeEditor() {\r
+ super.initializeEditor();\r
+ \r
/**\r
* see AbstractTextEditor javadoc for explanation of context menu ids\r
*/\r
setPersistenceService(new BulkEditorPersistenceService());\r
\r
setLineDisplayStrategy(new BulkEditorLineDisplay(this));\r
+ \r
+ setSourceViewerConfiguration(new BulkEditorViewerConfiguration(lineDisplayStrategy));\r
}\r
-\r
+ \r
/* (non-Javadoc)\r
* @see eu.etaxonomy.taxeditor.bulkeditor.ListEditor#createSourceViewer(org.eclipse.swt.widgets.Composite, org.eclipse.jface.text.source.IVerticalRuler, int)\r
*/\r
\r
BulkEditorSearchComposite searchBar = new BulkEditorSearchComposite(this, parent, SWT.NONE);\r
searchBar.getParent().setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));\r
+\r
+ if (isEditableMarkerTypes()) {\r
+ createMarkerEditing(parent);\r
+ }\r
\r
super.createPartControl(parent);\r
\r
// Set viewer composite to fill grid\r
for (Control control : parent.getChildren()) {\r
- if (control instanceof Composite && !(control instanceof BulkEditorSearchComposite)) {\r
+ if (control instanceof Composite && \r
+ !(control instanceof BulkEditorSearchComposite || control instanceof BulkEditorMarkerPreferenceComposite)) {\r
control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
}\r
}\r
}\r
\r
+ /**\r
+ * @param parent \r
+ * \r
+ */\r
+ private void createMarkerEditing(Composite parent) {\r
+ final BulkEditorMarkerPreferenceComposite markerPreferenceBar = \r
+ new BulkEditorMarkerPreferenceComposite((BulkEditorInput) getEditorInput(), parent, SWT.NONE);\r
+ PreferencesUtil.getPreferenceStore().addPropertyChangeListener(new IPropertyChangeListener() {\r
+ public void propertyChange(\r
+ org.eclipse.jface.util.PropertyChangeEvent event) {\r
+ if (event.getProperty().contains(PreferencesUtil.EDIT_MARKER_TYPE_PREFIX)) {\r
+ refreshLineDisplay();\r
+ }\r
+ }\r
+ });\r
+ }\r
+ \r
+ /**\r
+ * Can this input type edit any markers?\r
+ * \r
+ * @return\r
+ */\r
+ private boolean isEditableMarkerTypes() { \r
+ for (MarkerType markerType : VocabularyStore.getNonTechnicalMarkerTypes()) {\r
+ if (((BulkEditorInput) getEditorInput()).isMarkerTypeEditingEnabled(markerType)) {\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+ /**\r
+ * Refreshes text in all lines.\r
+ */\r
+ protected void refreshLineDisplay() {\r
+ IDocumentProvider provider = getDocumentProvider();\r
+ IEditorInput input = getEditorInput();\r
+ IAnnotationModel model = provider.getAnnotationModel(input);\r
+ Iterator iter = getDocumentProvider().getAnnotationModel(getEditorInput()).getAnnotationIterator();\r
+ while (iter.hasNext()) {\r
+ Object next = iter.next();\r
+ if (next instanceof LineAnnotation) {\r
+ LineAnnotation annotation = (LineAnnotation) next;\r
+ ((AnnotatedLineDocumentProvider) getDocumentProvider()).\r
+ updateLineFromAnnotation(getEditorInput(), annotation, lineDisplayStrategy.getText(annotation.getEntity()));\r
+ }\r
+ }\r
+ }\r
+\r
/* (non-Javadoc)\r
* @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#isEditable()\r
*/\r
* @param line\r
*/\r
public void toggleMergeCandidateAnnotation(int line) {\r
- // TODO merge this with duplicate code in SetMergeCandidateHandler\r
- \r
- // Set line as selection\r
- \r
- // call handler w handler service\r
\r
IDocument document = getSourceViewer().getDocument();\r
LineAnnotationModel model = \r