import java.beans.PropertyChangeListener;\r
\r
import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.ExecutionException;\r
-import org.eclipse.core.commands.operations.IOperationHistory;\r
import org.eclipse.core.commands.operations.IUndoContext;\r
import org.eclipse.core.commands.operations.IUndoableOperation;\r
import org.eclipse.core.runtime.Assert;\r
-import org.eclipse.core.runtime.IStatus;\r
import org.eclipse.jface.action.Action;\r
-import org.eclipse.swt.events.DisposeEvent;\r
-import org.eclipse.swt.events.DisposeListener;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.StyledText;\r
import org.eclipse.swt.events.FocusAdapter;\r
import org.eclipse.swt.events.FocusEvent;\r
+import org.eclipse.swt.events.KeyAdapter;\r
+import org.eclipse.swt.events.KeyEvent;\r
+import org.eclipse.swt.graphics.Color;\r
import org.eclipse.swt.graphics.Font;\r
import org.eclipse.swt.graphics.Image;\r
import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Label;\r
import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.widgets.TableWrapData;\r
+import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
import org.eclipse.ui.views.properties.IPropertySource;\r
\r
import eu.etaxonomy.cdm.model.name.BotanicalName;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.controller.EditorController;\r
import eu.etaxonomy.taxeditor.controller.GlobalController;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupedComposite;\r
+import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
+import eu.etaxonomy.taxeditor.editor.GroupedComposite;\r
import eu.etaxonomy.taxeditor.editor.LineBreakListener;\r
import eu.etaxonomy.taxeditor.editor.ParseListener;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
import eu.etaxonomy.taxeditor.propertysheet.name.ZoologicalNamePropertySource;\r
\r
/**\r
- * Formats an <code>EditorGroupedComposite</code> to display <code>TaxonNameBase</code> elements\r
+ * Formats an <code>GroupedComposite</code> to display <code>TaxonNameBase</code> elements\r
* in a <code>NameViewer</code>.\r
* \r
* @author p.ciardelli\r
* @created 02.06.2008\r
* @version 1.0\r
*/\r
-public abstract class NameComposite extends EditorGroupedComposite {\r
+public abstract class NameComposite extends GroupedComposite {\r
private static final Logger logger = Logger.getLogger(NameComposite.class);\r
\r
/**\r
public static final String HOMOTYPIC_SYNONYM = "homotypic_name_composite";\r
public static final String HETEROTYPIC_SYNONYM = "heterotypic_name_composite";\r
public static final String MISAPPLIED_NAME = "misappliedname_name_composite";\r
+ public static final String CONCEPTRELATION = "concept_name_comcposite";\r
\r
/**\r
* ************ INDENTATIONS ************\r
public static final int ACCEPTED_INDENT = 0;\r
public static final int SYNONYM_INDENT = 15;\r
public static final int MISAPPLIEDNAME_INDENT = 15;\r
+ public static final int CONCEPT_INDENT = 15;\r
\r
/**\r
* ************ FONTS ************\r
.getFont(ITaxEditorConstants.SYNONYM_FONT);\r
public static final Font MISAPPLIEDNAME_FONT = TaxEditorPlugin.getDefault()\r
.getFont(ITaxEditorConstants.MISAPPLIEDNAME_FONT);\r
+ public static final Font CONCEPT_FONT = TaxEditorPlugin.getDefault()\r
+ .getFont(ITaxEditorConstants.CONCEPT_FONT);\r
\r
/**\r
* ************ ICONS ************\r
ITaxEditorConstants.HETEROTYPIC_SYN_ORIGINAL_ICON);\r
public static final Image MISAPPLIEDNAME_ICON = TaxEditorPlugin\r
.getDefault().getImage(ITaxEditorConstants.MISAPPLIED_NAME_ICON);\r
+ public static final Image CONCEPT_ICON = TaxEditorPlugin\r
+ .getDefault().getImage(ITaxEditorConstants.CONCEPT_ICON);\r
public static final Image AUTONYM_ICON = TaxEditorPlugin.getDefault()\r
.getImage(ITaxEditorConstants.AUTONYM_ICON);\r
public static final Image BASIONYM_ICON = TaxEditorPlugin.getDefault()\r
\r
protected boolean isParsing;\r
\r
- private NameViewer nameViewer;\r
+ protected NameViewer nameViewer;\r
\r
/**\r
* The constructor for a DescriptionElementComposite. Takes a parent Composite on which to\r
createBorderSupport();\r
createLineWrapSupport();\r
\r
- setData(taxonBase);\r
-\r
+ setDraggableControl(nameViewer.getRulerControl());\r
+ \r
createParser();\r
createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
setFocus();\r
createNameListener(taxonBase.getName());\r
}\r
\r
+ protected void createContent() {\r
+ setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+ TableWrapLayout layout = new TableWrapLayout();\r
+ layout.leftMargin = 0;\r
+ layout.topMargin = 0;\r
+ layout.bottomMargin = 0;\r
+ layout.verticalSpacing = 0;\r
+ setLayout(layout);\r
+ \r
+ Color groupBackgroundColor = TaxEditorPlugin.getDefault().\r
+ getColor(ITaxEditorConstants.GROUP_GRAY_BKG_COLOR);\r
+ setBackground(groupBackgroundColor);\r
+ }\r
+ \r
protected String getEmptyTextPrompt() {\r
return EMPTY_NAME_PROMPT;\r
}\r
((NameViewer) getTextViewer()).setCursorToEOL();\r
\r
TaxonNameBase name = taxonBase.getName();\r
- if (name != null) {\r
- \r
- boolean hasProblem = name.getHasProblem();\r
- ((NameViewer) getTextViewer()).setShowError(name);\r
+ if (name != null) { \r
+ calculateErrors();\r
}\r
}\r
}\r
\r
// Let others know the parser is active\r
isParsing = true;\r
- \r
- // Get the name from the composite's data field\r
- TaxonBase taxonBase = (TaxonBase) getData();\r
- NonViralName nonViralName = (NonViralName) taxonBase.getName();\r
- \r
+ \r
// Parse the name and paint the text field w any errors\r
- if (nonViralName != null) {\r
- CdmParserController.parseFullReference(nonViralName, text);\r
- ((NameViewer) getTextViewer()).setShowError(nonViralName);\r
+ if (getName() != null) {\r
+ CdmParserController.parseFullReference((NonViralName) getName(), text);\r
}\r
\r
// Any entry of text means the taxon has been changed\r
\r
// Manually refresh the property sheet to reflect changes\r
setSelection();\r
+ \r
+ // Show any errors in the name viewer\r
+ calculateErrors();\r
}\r
});\r
}\r
isUseParser = false;\r
}\r
\r
+ protected abstract TaxonNameBase getName();\r
+ \r
+ protected void calculateErrors() {\r
+ \r
+ nameViewer.clearErrors();\r
+ \r
+ nameViewer.setShowParsingError(getName());\r
+ \r
+ }\r
+ \r
private NameViewer createNameViewer() {\r
-// nameViewer = new NameViewer(this);\r
+ \r
+ nameViewer = new NameViewer(this);\r
+ \r
+ StyledText styledText = nameViewer.getTextWidget();\r
// nameViewer.setLineBreakListener(new LineBreakListener() {\r
\r
- setTextViewer(new NameViewer(this));\r
- getTextViewer().addLineBreakListener(new LineBreakListener() {\r
+ setTextViewer(nameViewer);\r
+ \r
+ nameViewer.addLineBreakListener(new LineBreakListener() {\r
\r
@Override\r
public void handleSplitText(String text) {\r
-\r
+ \r
// Create a synonym in a new homotypic group using text as name\r
IUndoContext undoContext = EditorController.getUndoContext(taxon);\r
IUndoableOperation operation = new CreateSynonymInNewGroupOperation\r
("new heterotypic synonym", undoContext, taxon, text); //$NON-NLS-1$\r
+// setOperation(new CreateSynonymInNewGroupOperation\r
\r
GlobalController.executeOperation(operation);\r
- \r
// getTextViewer().removeLineBreakListener(this);\r
}\r
\r
});\r
\r
- getTextViewer().getTextWidget().addFocusListener(new FocusAdapter() {\r
+// styledText.addKeyListener(new KeyAdapter(){\r
+//\r
+// @Override\r
+// public void keyReleased(KeyEvent e) {\r
+// if (operation != null) {\r
+// GlobalController.executeOperation(operation);\r
+// operation = null;\r
+// }\r
+// }\r
+// \r
+// });\r
+ \r
+ styledText.addFocusListener(new FocusAdapter() {\r
public void focusGained(FocusEvent e) {\r
setFocus();\r
}\r
});\r
-\r
- getTextViewer().getTextWidget().addDisposeListener(new DisposeListener() {\r
-\r
- @Override\r
- public void widgetDisposed(DisposeEvent e) {\r
- logger.warn("disposing text widget");\r
- }\r
- });\r
\r
// createLineWrapSupport(nameViewer);\r
-\r
- getTextViewer().getTextWidget().setBackground(TaxEditorPlugin.getDefault().\r
- getColor(ITaxEditorConstants.GROUP_GRAY_BKG_COLOR)); \r
+ \r
\r
- return (NameViewer) getTextViewer();\r
+ return nameViewer;\r
}\r
\r
+// IUndoableOperation operation;\r
+\r
+ private Label nonEditableInfo;\r
+ \r
+// protected void setOperation(IUndoableOperation operation) {\r
+// this.operation = operation;\r
+// }\r
+\r
public void setText(String text) {\r
Assert.isNotNull(getTextViewer(), \r
"Cannot set text for a TextViewer that has not yet been initialized.");\r
getTextViewer().getDocument().set(text);\r
}\r
\r
+ public void setNonEditableInfo(String info) {\r
+ if (nonEditableInfo == null) {\r
+ nonEditableInfo = new Label(this, SWT.WRAP);\r
+ nonEditableInfo.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP));\r
+ } else {\r
+ info = nonEditableInfo.getText() + ", " + info;\r
+ }\r
+ nonEditableInfo.setText(info.toUpperCase());\r
+ }\r
+ \r
public NameViewer getTextViewer() {\r
return this.nameViewer;\r
}\r
this.nameViewer = textViewer;\r
}\r
\r
+ public void createBorderSupport() {\r
+ super.createBorderSupport();\r
+ if (nameViewer != null) {\r
+ borderDecorator.setBorderedComposite(nameViewer.getTextWidget());\r
+ }\r
+ }\r
+ \r
+ public void setIcon(Image icon) {\r
+ if (nameViewer != null) {\r
+ nameViewer.setIcon(icon);\r
+ }\r
+ }\r
+ \r
protected IPropertySource getPropertySourceByName(TaxonNameBase name) {\r
if (name == null) {\r
return null;\r
\r
return null;\r
}\r
+ \r
+ protected ContextMenu createContextMenu() {\r
+ if (nameViewer != null) {\r
+ ContextMenu contextMenu = new ContextMenu(nameViewer.getRulerControl());\r
+ nameViewer.getTextWidget().setMenu(contextMenu.getMenu());\r
+ return contextMenu;\r
+ } else {\r
+ logger.warn("Can't create menu because nameViewer has not been initalized.");\r
+ return null;\r
+ }\r
+ }\r
}
\ No newline at end of file