Created class eu.etaxonomy.taxeditor.editor.EmptyTextViewerPrompt to display "Click...
authorp.ciardelli <p.ciardelli@localhost>
Mon, 15 Sep 2008 13:18:20 +0000 (13:18 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Mon, 15 Sep 2008 13:18:20 +0000 (13:18 +0000)
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ITaxEditorConstants.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxEditorPlugin.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EmptyTextViewerPrompt.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionElementComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionLabelComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/EditorGroupedComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/NameComposite.java

index e3ba982fde9b0c55f97874c25c76635d680734ee..670e2c05611e5caed4135923da2244cd298b2adc 100644 (file)
@@ -446,6 +446,7 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/Abstrac
 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
index 4be1a9f021286c7c61927ed0006d09ff8c79dab4..8ca7c431335b6c01d30109d8c9bfcc13a9f2b2da 100644 (file)
@@ -79,6 +79,7 @@ public class ITaxEditorConstants {
        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
index 0b4735b8b4be2665cad3f47f938303c68fa49b29..d3eed93b9a3a0a9f43bc93da6a82fb15503298f0 100644 (file)
@@ -416,6 +416,8 @@ public class TaxEditorPlugin extends AbstractUIPlugin {
                                        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
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EmptyTextViewerPrompt.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EmptyTextViewerPrompt.java
new file mode 100644 (file)
index 0000000..d6721db
--- /dev/null
@@ -0,0 +1,131 @@
+/**\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
index 556ac4a875a7ca160b1e49465bb4f772ece2e230..02e8314fdf7f80374c20a71b6ddcf91393ca58a3 100644 (file)
@@ -72,6 +72,8 @@ public class DescriptionElementComposite extends EditorGroupedComposite {
         */\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
@@ -92,6 +94,7 @@ public class DescriptionElementComposite extends EditorGroupedComposite {
                setData(data);\r
                transform(compositeType);\r
                \r
+               createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
                setFocus();\r
        }\r
 \r
index c1003afd3a2f8fe6086fc0d6b38c0260f26fae41..4d4e162a0ebdc728cea5f783ffcf5fa6645798c4 100644 (file)
@@ -54,6 +54,8 @@ public class DescriptionLabelComposite extends EditorGroupedComposite {
        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
@@ -63,7 +65,8 @@ public class DescriptionLabelComposite extends EditorGroupedComposite {
 \r
                setData(taxonDescription);\r
                transform(null);\r
-               \r
+\r
+               createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
                setFocus();\r
        }\r
 \r
index 350e42a87292236b193d43999d6d007a109fde7f..d4015264cb79a8aef2a3563345b9ea61a4083a95 100644 (file)
@@ -10,6 +10,7 @@
 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
@@ -23,6 +24,7 @@ import org.eclipse.ui.forms.widgets.TableWrapData;
 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
@@ -53,18 +55,36 @@ abstract public class EditorGroupedComposite extends GroupedComposite {
 \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
@@ -82,27 +102,45 @@ abstract public class EditorGroupedComposite extends GroupedComposite {
                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
@@ -111,20 +149,48 @@ abstract public class EditorGroupedComposite extends GroupedComposite {
                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
@@ -135,6 +201,9 @@ abstract public class EditorGroupedComposite extends GroupedComposite {
                return menu;\r
        }\r
        \r
+       /**\r
+        * \r
+        */\r
        public void createBorderSupport() {\r
                CompositeBorderDecorator borderDecorator = new CompositeBorderDecorator(\r
                                this, managedForm);\r
@@ -145,15 +214,24 @@ abstract public class EditorGroupedComposite extends GroupedComposite {
                }\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
index 1655ae2eccaf039880aa2f8ee73718b821de1f85..0da60e492e61d4a98a966e0d98acc221d0ccae7b 100644 (file)
@@ -39,6 +39,7 @@ import eu.etaxonomy.taxeditor.actions.ui.MoveCompositeToMisappliedCompositeActio
 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
@@ -111,16 +112,14 @@ public class NameComposite extends EditorGroupedComposite {
         */\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
@@ -140,6 +139,7 @@ public class NameComposite extends EditorGroupedComposite {
                setData(data);\r
                transform(compositeType);\r
                \r
+               createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
                setFocus();\r
        }\r
 \r