eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/ContextMenu.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EditorDetailsPage.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EmptyEditorView.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EmptyTextViewerPrompt.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/GroupCompositeLabel.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFavoritesDraggable.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IParserFeedback.java -text
public static final String MISAPPLIEDNAME_FONT = "misappliedname_font";\r
public static final String DATASOURCE_FONT = "datasource_font";\r
public static final String CHOOSE_NAME_TEXT_FONT = "choose_name_text_font";\r
+ public static final String DEFAULT_PROMPT_FONT = "default_prompt_font";\r
\r
/* ***************************************************************************************\r
COLORS\r
new FontData[] { new FontData("Georgia", 10, SWT.NONE) });\r
fontRegistry.put(ITaxEditorConstants.CHOOSE_NAME_TEXT_FONT,\r
new FontData[] { new FontData("Arial", 12, SWT.BOLD) });\r
+ fontRegistry.put(ITaxEditorConstants.DEFAULT_PROMPT_FONT,\r
+ new FontData[] { new FontData("Georgia", 10, SWT.ITALIC) });\r
}\r
return fontRegistry;\r
}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.editor;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.text.DocumentEvent;\r
+import org.eclipse.jface.text.IDocument;\r
+import org.eclipse.jface.text.IDocumentListener;\r
+import org.eclipse.swt.custom.StyledText;\r
+import org.eclipse.swt.events.FocusEvent;\r
+import org.eclipse.swt.events.FocusListener;\r
+import org.eclipse.swt.graphics.Font;\r
+\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+\r
+/**\r
+ * This displays a message such as "Click here to start entering\r
+ * data" when <code>document</code> is empty.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 15.09.2008\r
+ * @version 1.0\r
+ */\r
+public class EmptyTextViewerPrompt implements IDocumentListener {\r
+ private static final Logger logger = Logger\r
+ .getLogger(EmptyTextViewerPrompt.class);\r
+ \r
+ private IDocument document;\r
+ private StyledText textControl;\r
+ private String prompt;\r
+ private FocusListener focusListener = null;\r
+\r
+ private Font textFont;\r
+ private Font promptFont = TaxEditorPlugin.getDefault()\r
+ .getFont(ITaxEditorConstants.DEFAULT_PROMPT_FONT);\r
+ \r
+ /**\r
+ * @param document\r
+ * @param textControl\r
+ */\r
+ public EmptyTextViewerPrompt(IDocument document, StyledText textControl, String prompt) {\r
+ this.document = document;\r
+ this.textControl = textControl;\r
+ this.prompt = prompt;\r
+ \r
+ this.textFont = textControl.getFont();\r
+ \r
+ documentChanged(null);\r
+ }\r
+ \r
+ /**\r
+ * Override <code>prompt</code>'s default font. \r
+ * \r
+ * @param font\r
+ */\r
+ public void setPromptFont(Font font) {\r
+ this.promptFont = font;\r
+ }\r
+ \r
+ /**\r
+ * Adds a focus listener to the <code>textControl</code>, which hides \r
+ * the <code>prompt</code> if the cursor is in the <code>textControl</code>, \r
+ * and shows it if the cursor is elsewhere. \r
+ */\r
+ private void createPrompt() {\r
+ document.set(prompt);\r
+\r
+ focusListener = new FocusListener() {\r
+\r
+ @Override\r
+ public void focusGained(FocusEvent e) {\r
+ if (document.get().equals(prompt)) {\r
+ textControl.setFont(textFont);\r
+ document.set("");\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void focusLost(FocusEvent e) {\r
+ if (document.getLength() == 0) {\r
+ textControl.setFont(promptFont);\r
+ document.set(prompt);\r
+ }\r
+ }\r
+ \r
+ };\r
+ textControl.addFocusListener(focusListener);\r
+ }\r
+ \r
+ /**\r
+ * Removes focus listener from <code>textControl</code>, turning off\r
+ * the showing of <code>prompt</code>.\r
+ */\r
+ private void removePrompt() {\r
+ if (focusListener != null) {\r
+ textControl.removeFocusListener(focusListener);\r
+ focusListener = null;\r
+ }\r
+ }\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.jface.text.IDocumentListener#documentAboutToBeChanged(org.eclipse.jface.text.DocumentEvent)\r
+ */\r
+ @Override\r
+ public void documentAboutToBeChanged(DocumentEvent event) {}\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.jface.text.IDocumentListener#documentChanged(org.eclipse.jface.text.DocumentEvent)\r
+ */\r
+ @Override\r
+ public void documentChanged(DocumentEvent event) {\r
+ \r
+ if (document.get().equals(prompt)) {\r
+ return;\r
+ }\r
+ \r
+ if (document.getLength() == 0) {\r
+ createPrompt();\r
+ } else {\r
+ removePrompt();\r
+ }\r
+ }\r
+}
\ No newline at end of file
*/\r
public Action CHANGE_TAXON_TO_SYNONYM_ACTION;\r
\r
+ private static final String EMPTY_NAME_PROMPT = "Click to add descriptive element text";\r
+\r
/**\r
* The constructor for a DescriptionElementComposite. Takes a parent Composite on which to\r
* create itself, and an IManagedForm for Composite life cycle methods, i.e.\r
setData(data);\r
transform(compositeType);\r
\r
+ createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
setFocus();\r
}\r
\r
public static final Image DESCRIPTION_LABEL_ICON = TaxEditorPlugin.getDefault()\r
.getImage(ITaxEditorConstants.BLACK_SQUARE_ICON); \r
\r
+ private static final String EMPTY_NAME_PROMPT = "Click to add description label";\r
+ \r
public DescriptionLabelComposite(Composite parent, IManagedForm managedForm, TaxonDescription taxonDescription) {\r
super(parent, managedForm);\r
\r
\r
setData(taxonDescription);\r
transform(null);\r
- \r
+\r
+ createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
setFocus();\r
}\r
\r
package eu.etaxonomy.taxeditor.editor.name;\r
\r
import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.Assert;\r
import org.eclipse.jface.text.TextViewer;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.graphics.Font;\r
import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
\r
import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
+import eu.etaxonomy.taxeditor.editor.EmptyTextViewerPrompt;\r
\r
/** \r
* Formats <code>GroupedComposite</code> with cosmetic and layout properties specific to the\r
\r
protected IManagedForm managedForm;\r
\r
+ /**\r
+ * @param parent\r
+ * @param managedForm\r
+ */\r
public EditorGroupedComposite(Composite parent, IManagedForm managedForm) {\r
super(parent);\r
\r
this.managedForm = managedForm;\r
}\r
\r
+ /**\r
+ * \r
+ */\r
protected void createLineWrapSupport() {\r
new LineWrapSupport(getTextViewer(), managedForm);\r
}\r
\r
+ /**\r
+ * Makes cosmetic changes to an <code>EditorGroupedComposite</code> appropriate\r
+ * to the object in its <code>data</code> field. For instance, if the <code>data</code>\r
+ * type changes, this method would be called to change the <code>Composite</code>'s \r
+ * appearance. \r
+ * \r
+ * @param transformation\r
+ */\r
abstract public void transform(String transformation);\r
\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.editor.name.GroupedComposite#createContent()\r
+ */\r
@Override\r
protected void createContent() {\r
setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
setDraggableControl(draggableLabel);\r
}\r
\r
+ /**\r
+ * @return\r
+ */\r
public TextViewer getTextViewer() {\r
return textViewer;\r
}\r
\r
+ /**\r
+ * @param textViewer\r
+ */\r
public void setTextViewer(TextViewer textViewer) {\r
this.textViewer = textViewer;\r
}\r
\r
+ /**\r
+ * @param icon\r
+ */\r
public void setIcon(Image icon) {\r
draggableLabel.setImage(icon);\r
}\r
\r
+ /**\r
+ * @return\r
+ */\r
public Label getDraggableLabel() {\r
return draggableLabel;\r
}\r
\r
+ /**\r
+ * @param indent\r
+ */\r
public void setIndent(int indent) {\r
layout.leftMargin = indent;\r
this.setLayout(layout);\r
} \r
\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.swt.widgets.Composite#setFocus()\r
+ */\r
public boolean setFocus() {\r
if (selectionWrapper != null) {\r
selectionWrapper.setSelection();\r
return super.setFocus();\r
}\r
\r
+ /**\r
+ * \r
+ */\r
protected void setSelection() {\r
managedForm.setInput(getData());\r
}\r
\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.swt.widgets.Control#setFont(org.eclipse.swt.graphics.Font)\r
+ */\r
public void setFont(Font font) {\r
getTextViewer().getTextWidget().setFont(font);\r
}\r
\r
+ /**\r
+ * @param selectionWrapper\r
+ */\r
public void setSelectionWrapper (ISelectionWrapper selectionWrapper) {\r
this.selectionWrapper = selectionWrapper;\r
}\r
\r
+ /**\r
+ * If <code>textViewer</code> has already been set, it will show a \r
+ * <code>prompt</code> along the lines of "Click here to start entering data" \r
+ * when empty.\r
+ * \r
+ * @param prompt\r
+ */\r
+ /**\r
+ * @param prompt\r
+ */\r
+ public void createEmptyViewerPrompt(String prompt) {\r
+ \r
+ Assert.isNotNull(getTextViewer());\r
+ \r
+ new EmptyTextViewerPrompt(getTextViewer().getDocument(), \r
+ getTextViewer().getTextWidget(), prompt);\r
+ }\r
\r
- \r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.swt.widgets.Control#getMenu()\r
+ */\r
public Menu getMenu () {\r
\r
Menu menu = draggableLabel.getMenu();\r
return menu;\r
}\r
\r
+ /**\r
+ * \r
+ */\r
public void createBorderSupport() {\r
CompositeBorderDecorator borderDecorator = new CompositeBorderDecorator(\r
this, managedForm);\r
}\r
}\r
\r
+ /**\r
+ * @param isDirty\r
+ */\r
protected void setDirty(boolean isDirty) {\r
managedForm.dirtyStateChanged();\r
}\r
\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.editor.name.GroupedComposite#dispose()\r
+ */\r
public void dispose () {\r
super.dispose();\r
setDirty(true);\r
}\r
\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.editor.name.GroupedComposite#setParent(org.eclipse.swt.widgets.Composite)\r
+ */\r
public boolean setParent(Composite parent) {\r
if (super.setParent(parent)) {\r
\r
import eu.etaxonomy.taxeditor.actions.ui.MoveTaxonDialogAction;\r
import eu.etaxonomy.taxeditor.actions.ui.RemoveBasionymCompositeAction;\r
import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
+import eu.etaxonomy.taxeditor.editor.EmptyTextViewerPrompt;\r
import eu.etaxonomy.taxeditor.editor.NameViewer;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
\r
*/\r
public static final String ADD_GROUP_BASIONYM = "add_group_basionym";\r
public static final String REMOVE_GROUP_BASIONYM = "remove_group_basionym";\r
-// public static final String CHANGE_TO_HETEROTYPIC_SYNONYM = "change_to_heterotypic_synonym";\r
-// public static final String CHANGE_TO_HOMOTYPIC_SYNONYM = "change_to_homotypic_synonym";\r
-// public static final String CHANGE_TO_ACCEPTED_TAXON = "change_to_accepted_taxon";\r
-// public static final String CHANGE_TO_MISAPPLIED_NAME = "change_to_misapplied_name";\r
\r
/**\r
* ************ MENU ACTIONS ************\r
*/\r
public Action CHANGE_TAXON_TO_SYNONYM_ACTION;\r
\r
+ private static final String EMPTY_NAME_PROMPT = "Click to add name";\r
+\r
/**\r
* The constructor for a DescriptionElementComposite. Takes a parent Composite on which to\r
* create itself, and an IManagedForm for Composite life cycle methods, i.e.\r
setData(data);\r
transform(compositeType);\r
\r
+ createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
setFocus();\r
}\r
\r