- rename IDirtyMarkableSelectionProvider to IDirtyMarkable
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / TextWithLabelElement.java
index 11bd12de6650ea47a89398bf1bf426134f9e99b3..d5f7b310542dc1212a42e43036f53a09078d8417 100644 (file)
@@ -17,7 +17,6 @@ import org.eclipse.ui.forms.widgets.TableWrapData;
 
 import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.taxeditor.preference.Resources;
-import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
 
 /**
  * <p>
@@ -33,11 +32,28 @@ public class TextWithLabelElement extends AbstractCdmFormElement implements Modi
     protected Text text;
     private Label label;
 
+    private final boolean isMultiLine;
+
     /** Constant <code>MAX_HEIGHT=0</code> */
     public static final int MAX_HEIGHT = 0;
     /** Constant <code>SINGLE=-1</code> */
     public static final int SINGLE = -1;
 
+    protected TextWithLabelElement(CdmFormFactory formFactory, ICdmFormElement parentElement, String labelString,
+            String initialText, Integer textHeight, int style) {
+        this(formFactory, parentElement, labelString, initialText, textHeight, null, false, style);
+    }
+
+    protected TextWithLabelElement(CdmFormFactory formFactory, ICdmFormElement parentElement, String labelString,
+            String initialText, Integer textHeight, boolean isMultiLine, int style) {
+        this(formFactory, parentElement, labelString, initialText, textHeight, null, isMultiLine, style);
+    }
+
+    protected TextWithLabelElement(CdmFormFactory formFactory, ICdmFormElement parentElement, String labelString,
+            String initialText, Integer textHeight, Integer textLimit, int style) {
+        this(formFactory, parentElement, labelString, initialText, textHeight, textLimit, false, style);
+    }
+
     /**
      * <p>
      * Constructor for TextWithLabelElement.
@@ -55,18 +71,26 @@ public class TextWithLabelElement extends AbstractCdmFormElement implements Modi
      *            a {@link java.lang.String} object.
      * @param textHeight
      *            a {@link java.lang.Integer} object.
+     *            @param textLimit max characters allowed to enter
      * @param style
      *            a int.
      * @wbp.parser.entryPoint
      */
     protected TextWithLabelElement(CdmFormFactory formFactory, ICdmFormElement parentElement, String labelString,
-            String initialText, Integer textHeight, int style) {
+            String initialText, Integer textHeight, Integer textLimit, boolean isMultiLine, int style) {
         super(formFactory, parentElement);
 
+        this.isMultiLine = isMultiLine;
+
         if (labelString != null) {
             label = formFactory.createLabel(getLayoutComposite(), CdmUtils.Nz(labelString), SWT.NULL);
             addControl(label);
-            label.setLayoutData(LayoutConstants.LEFT());
+            if(isMultiLine){
+                label.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+            }
+            else{
+                label.setLayoutData(LayoutConstants.LEFT());
+            }
         }
 
         int scrollStyle = textHeight == null ? SWT.NULL : (SWT.V_SCROLL | SWT.MULTI);
@@ -79,6 +103,7 @@ public class TextWithLabelElement extends AbstractCdmFormElement implements Modi
         }
 
         text = formFactory.createText(getLayoutComposite(), "", combinedStyle);
+        text.setTextLimit(textLimit!=null?textLimit:Text.LIMIT);
 
         addControl(text);
 
@@ -102,7 +127,13 @@ public class TextWithLabelElement extends AbstractCdmFormElement implements Modi
             });
         }
 
-        TableWrapData layoutData = LayoutConstants.FILL();
+        TableWrapData layoutData;
+        if(isMultiLine){
+            layoutData = LayoutConstants.FILL_HORIZONTALLY(2, 1);
+        }
+        else{
+            layoutData = LayoutConstants.FILL();
+        }
         if (textHeight != null && textHeight > 0) {
             (layoutData).heightHint = textHeight;
         }
@@ -153,6 +184,22 @@ public class TextWithLabelElement extends AbstractCdmFormElement implements Modi
     /** {@inheritDoc} */
     @Override
     public void modifyText(ModifyEvent e) {
+        if(e.widget==text && !isMultiLine){
+            Text text = (Text) e.widget;
+            boolean hasControlCharacters = false;
+            String textString = text.getText();
+            int stringLength = textString.length();
+            for (int i = 0; i < stringLength; i++) {
+                if (Character.isISOControl(textString.charAt(i))) {
+                    hasControlCharacters = true;
+                    break;
+                }
+            }
+            if(hasControlCharacters){
+                //remove control character such as line breaks etc.
+                setText(text.getText().replaceAll("\\p{C}", new Character((char)9608).toString()));
+            }
+        }
         firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
     }
 
@@ -164,6 +211,14 @@ public class TextWithLabelElement extends AbstractCdmFormElement implements Modi
         text.setForeground(getColor(symbolicName));
     }
 
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement#isEnabled()
+     */
+    @Override
+    public boolean isEnabled() {
+        return text.isEnabled();
+    }
+
     /** {@inheritDoc} */
     @Override
     public void setIrrelevant(boolean irrelevant) {
@@ -219,4 +274,5 @@ public class TextWithLabelElement extends AbstractCdmFormElement implements Modi
     public void setTextLimit(int limit) {
         text.setTextLimit(limit);
     }
+
 }