[isidorus-cvs] r556 - in branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets: base values

lgiessmann at common-lisp.net lgiessmann at common-lisp.net
Mon Jul 4 15:29:45 UTC 2011


Author: lgiessmann
Date: Mon Jul  4 08:29:44 2011
New Revision: 556

Log:
gdl-frontend: Widgets: added the class GdlTextObject, derived from GdlVisibleObject

Added:
   branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlTextObject.java
   branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/DirectionValue.java
   branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/NormalNumUnitValue.java
   branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/TextAlignValue.java
   branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/TextDecorationValue.java
Modified:
   branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java
   branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java

Added: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlTextObject.java
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlTextObject.java	Mon Jul  4 08:29:44 2011	(r556)
@@ -0,0 +1,150 @@
+package us.isidor.gdl.anaToMia.Widgets.base;
+
+
+import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Occurrence;
+import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic;
+import us.isidor.gdl.anaToMia.Widgets.environment.ExecutionException;
+import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException;
+import us.isidor.gdl.anaToMia.Widgets.values.DirectionValue;
+import us.isidor.gdl.anaToMia.Widgets.values.NormalNumUnitValue;
+import us.isidor.gdl.anaToMia.Widgets.values.TextAlignValue;
+import us.isidor.gdl.anaToMia.Widgets.values.TextDecorationValue;
+
+public abstract class GdlTextObject extends GdlVisibleObject {
+	
+	// some constructors
+	protected GdlTextObject(){
+		super();
+	}
+	
+	
+	public GdlTextObject(Topic tmRepresentative) throws InvalidGdlSchemaException, ExecutionException{
+		super(tmRepresentative);
+	}
+	
+	
+	// returns a DirectionValue instance that represents the text direction of this element.
+	// If a styleClass is set, only the corresponding value of the scoped occurrence is returned
+	// or null.
+	public DirectionValue getDirection(String styleClass) throws InvalidGdlSchemaException {
+		Occurrence directionOcc = null;
+		if(styleClass != null){
+			directionOcc = super.getNoneOrOneScopedOccurrence(GdlPsis.OccurrenceType.gdlDirection, styleClass);
+		} else {
+			directionOcc = super.getNoneOrOneUnscopedOccurrence(GdlPsis.OccurrenceType.gdlDirection);
+		}
+
+		if(directionOcc == null && styleClass != null){
+			return null;
+		} else if(directionOcc == null) {
+			return DirectionValue.LTR;
+		} else {
+			try{
+				return DirectionValue.valueOf(directionOcc.getValue().toUpperCase());
+			}catch(IllegalArgumentException e){
+				throw new InvalidGdlSchemaException("The occurrence " + GdlPsis.OccurrenceType.gdlDirection + " must be set to one of \"ltr\" or \"rtl\", but is \"" + directionOcc.getValue() + "\"");
+			}
+		}
+	}
+	
+	
+	// returns a TextAlingvalue instance that represents the text-align of this element.
+	// If a styleClass is set, only the corresponding value of the scoped occurrence is returned
+	// or null.
+	public TextAlignValue getTextAlign(String styleClass) throws InvalidGdlSchemaException {
+		Occurrence textAlignOcc = null;
+		if(styleClass != null){
+			textAlignOcc = super.getNoneOrOneScopedOccurrence(GdlPsis.OccurrenceType.gdlDirection, styleClass);
+		} else {
+			textAlignOcc = super.getNoneOrOneUnscopedOccurrence(GdlPsis.OccurrenceType.gdlDirection);
+		}
+		
+		if(textAlignOcc == null && styleClass != null){
+			return null;
+		} else if(textAlignOcc == null) {
+			return TextAlignValue.LEFT;
+		} else {
+			try{
+				return TextAlignValue.valueOf(textAlignOcc.getValue().toUpperCase());
+			}catch(IllegalArgumentException e){
+				throw new InvalidGdlSchemaException("The occurrence " + GdlPsis.OccurrenceType.gdlTextAlign + " must be set to one of \"left\", \"right\", \"center\" or \"justify\", but is \"" + textAlignOcc.getValue() + "\"");
+			}
+		}
+	}
+	
+	
+	// returns a NormalNumUnitValue instance that represents the line-height of this element.
+	// If a styleClass is set, only the corresponding value of the scoped occurrence is returned
+	// or null.
+	public NormalNumUnitValue getLineHeight(String styleClass) throws InvalidGdlSchemaException {
+		Occurrence lineHeightOcc = null;
+		if(styleClass != null){
+			lineHeightOcc = super.getNoneOrOneScopedOccurrence(GdlPsis.OccurrenceType.gdlDirection, styleClass);
+		} else {
+			lineHeightOcc = super.getNoneOrOneUnscopedOccurrence(GdlPsis.OccurrenceType.gdlDirection);
+		}
+		
+		if(lineHeightOcc == null && styleClass != null){
+			return null;
+		} else if(lineHeightOcc == null) {
+			return new NormalNumUnitValue();
+		} else {
+			return new NormalNumUnitValue(lineHeightOcc.getValue());
+		}
+	}
+	
+	
+	// returns a TextDecoarionValue instance that represents the text-decoration of this element.
+	// If a styleClass is set, only the corresponding value of the scoped occurrence is returned
+	// or null.
+	public TextDecorationValue getGdlTextDecoration(String styleClass) throws InvalidGdlSchemaException {
+		Occurrence decorationOcc = null;
+		if(styleClass != null){
+			decorationOcc = super.getNoneOrOneScopedOccurrence(GdlPsis.OccurrenceType.gdlTextDecoration, styleClass);
+		} else {
+			decorationOcc = super.getNoneOrOneUnscopedOccurrence(GdlPsis.OccurrenceType.gdlTextDecoration);
+		}
+
+		if(decorationOcc == null && styleClass != null){
+			return null;
+		} else if(decorationOcc == null) {
+			return TextDecorationValue.NONE;
+		} else {
+			try{
+				return TextDecorationValue.valueOf(decorationOcc.getValue().toUpperCase());
+			}catch(IllegalArgumentException e){
+				throw new InvalidGdlSchemaException("The occurrence " + GdlPsis.OccurrenceType.gdlTextDecoration + " must be set to one of \"underline\", \"overline\", \"line-through\", \"blink\" or \"none\", but is \"" + decorationOcc.getValue() + "\"");
+			}
+		}
+	}
+	
+	
+	// calls the super class's setGdlStyle and additionally calls local statements
+	// to fulfill the style settings
+	@Override
+	protected void setGdlStyle() throws InvalidGdlSchemaException, ExecutionException{
+		super.setGdlStyle();
+		
+		// TODO: implement
+		
+		// direction [hover | active | focus]
+		// text-align [hover | active | focus]
+		// line-height [hover | active | focus]
+		// text-decoration [hover | active | focus]
+		// color [hover | active | focus]
+		// font-family [hover | active | focus]
+		// font-style [hover | active | focus]
+		// font-size [hover | active | focus]
+		// font-weight [hover | active | focus]
+		// letter-spacing [hover | active | focus]
+		// word-spacing [hover | active | focus]
+		
+		
+		// TODO: implement
+		// css pseudo class handlers => register additional handlers for this class ???
+	}
+	
+	
+	// shall return the objects textual value
+	public abstract String getText(); 
+}

Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java
==============================================================================
--- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java	Mon Jul  4 07:26:24 2011	(r555)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java	Mon Jul  4 08:29:44 2011	(r556)
@@ -33,6 +33,7 @@
 import com.google.gwt.event.dom.client.HasMouseOutHandlers;
 import com.google.gwt.event.dom.client.HasMouseOverHandlers;
 import com.google.gwt.event.dom.client.HasMouseUpHandlers;
+import com.google.gwt.event.dom.client.HasScrollHandlers;
 import com.google.gwt.event.dom.client.MouseDownEvent;
 import com.google.gwt.event.dom.client.MouseDownHandler;
 import com.google.gwt.event.dom.client.MouseOutEvent;
@@ -41,13 +42,15 @@
 import com.google.gwt.event.dom.client.MouseOverHandler;
 import com.google.gwt.event.dom.client.MouseUpEvent;
 import com.google.gwt.event.dom.client.MouseUpHandler;
+import com.google.gwt.event.dom.client.ScrollEvent;
+import com.google.gwt.event.dom.client.ScrollHandler;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.ui.AbsolutePanel;
 import com.google.gwt.user.client.ui.Composite;
 
 
-public abstract class GdlVisibleObject extends Composite implements GdlDescriptor, HasClickHandlers, HasMouseOutHandlers, HasMouseOverHandlers, HasFocusHandlers, HasMouseDownHandlers, HasMouseUpHandlers, HasBlurHandlers{
+public abstract class GdlVisibleObject extends Composite implements GdlDescriptor, HasClickHandlers, HasMouseOutHandlers, HasMouseOverHandlers, HasFocusHandlers, HasMouseDownHandlers, HasMouseUpHandlers, HasBlurHandlers, HasScrollHandlers{
 	protected AbsolutePanel mainPanel = new AbsolutePanel();
 	protected Topic tmRepresentative = null;
 	protected TopicMap tm = null;
@@ -59,7 +62,8 @@
 	protected boolean isHovered = false;
 
 
-	private GdlVisibleObject() {
+	// some constructors
+	protected GdlVisibleObject() {
 		initWidget(this.mainPanel);
 	}
 
@@ -81,7 +85,7 @@
 
 
 	// a helper method that returns all occurrences of the type bound to the passed PSI
-	private JsArray<Occurrence> getOccurrences(String occurrenceType){
+	protected JsArray<Occurrence> getOccurrences(String occurrenceType){
 		Topic occType = tm.getTopicBySubjectIdentifier(tm.createLocator(occurrenceType));
 		if(occType == null) return null;
 		else return tmRepresentative.getOccurrences(occType);
@@ -91,7 +95,7 @@
 	// a helper method that returns one occurrence of the type bound to the passed PSI.
 	// If more than one occurrence is available an InvalidGdlSchemaException is thrown.
 	// If nor occurrence is available the return value is null
-	private Occurrence getNoneOrOneUnscopedOccurrence(String occurrenceType) throws InvalidGdlSchemaException{
+	protected Occurrence getNoneOrOneUnscopedOccurrence(String occurrenceType) throws InvalidGdlSchemaException{
 		JsArray<Occurrence> occs = getOccurrences(occurrenceType);
 		ArrayList<Occurrence> unscopedOccs = new ArrayList<Occurrence>();
 		for(int i = 0; i != occs.length(); ++i){
@@ -110,7 +114,7 @@
 
 	// a helper method that returns one occurrence of the type bound to the passed PSI and scoped
 	// by the theme bound to the passed PSI. If no such occurrence exist, the default value is null
-	private Occurrence getNoneOrOneScopedOccurrence(String occurrenceType, String theme) throws InvalidGdlSchemaException{
+	protected Occurrence getNoneOrOneScopedOccurrence(String occurrenceType, String theme) throws InvalidGdlSchemaException{
 		Topic themeTopic = tm.getTopicBySubjectIdentifier(tm.createLocator(theme));
 		if(themeTopic == null){
 			return null;
@@ -1390,7 +1394,7 @@
 
 
 	// sets all GDL styles that are defined by the topic map representative
-	public void setGdlStyle() throws InvalidGdlSchemaException, ExecutionException {
+	protected void setGdlStyle() throws InvalidGdlSchemaException, ExecutionException {
 		this.setDisplay(this.getDisplay());
 		this.setZindex(this.getZindex());
 		this.setFloat(this.getFloat());
@@ -1485,6 +1489,13 @@
 	}
 	
 	
+	// registers a scroll handler on this element
+	@Override
+	public HandlerRegistration addScrollHandler(ScrollHandler handler) {
+		return this.addDomHandler(handler, ScrollEvent.getType());
+	}
+	
+	
 	// registers a mouse down handler on this element
 	@Override
 	public HandlerRegistration addMouseUpHandler(MouseUpHandler handler) {

Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java
==============================================================================
--- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java	Mon Jul  4 07:26:24 2011	(r555)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java	Mon Jul  4 08:29:44 2011	(r556)
@@ -100,7 +100,11 @@
 			bgcFocus.addTheme(gdlFocus);
 			
 			
-			GdlVisibleObject tmp = new GdlVisibleObject(tmpRepresentative){};
+			GdlTextObject tmp = new GdlTextObject(tmpRepresentative){
+				@Override
+				public String getText() {
+					return "tmp";
+				}};
 			this.mainPanel.add(tmp);
 		}catch(Exception e){
 			e.printStackTrace();

Added: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/DirectionValue.java
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/DirectionValue.java	Mon Jul  4 08:29:44 2011	(r556)
@@ -0,0 +1,11 @@
+package us.isidor.gdl.anaToMia.Widgets.values;
+
+public enum DirectionValue implements CssValue {
+	LTR,
+	RTL;
+	
+	
+	public String getCssValue(){
+		return this.toString().toLowerCase();
+	}
+}

Added: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/NormalNumUnitValue.java
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/NormalNumUnitValue.java	Mon Jul  4 08:29:44 2011	(r556)
@@ -0,0 +1,46 @@
+package us.isidor.gdl.anaToMia.Widgets.values;
+
+import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException;
+
+public class NormalNumUnitValue extends NumUnitValue{
+	public NormalNumUnitValue(){
+		super.unit = null; // if unit is null, the default value is normal
+		super.value = 0f;
+	}
+	
+	
+	public NormalNumUnitValue(String value) throws InvalidGdlSchemaException{
+		String upperString = value.trim().toUpperCase();
+		if(upperString.equals("NORMAL")){
+			super.unit = null; // if unit is null, the default value is normal
+			super.value = 0f;
+		}else if(upperString.endsWith("PX")){
+			this.value = makeFloat(upperString, 2);
+			this.unit = CssUnit.PIXEL;
+		}else if (upperString.endsWith("PT")){
+			this.value = makeFloat(upperString, 2);
+			this.unit = CssUnit.POINT;
+		} else if(upperString.endsWith("%")){
+			this.value = makeFloat(upperString, 1);
+			this.unit = CssUnit.PERCENTAGE;
+		} else {
+			throw new InvalidGdlSchemaException("normal numeric values supported by the GDL containing a unit definition must be of the form <numeric-value>(pt|px|%)|normal, but found: " + value);
+		}
+	}
+	
+	
+	@Override
+	public String getCssValue() {
+		if(super.unit == null){
+			return "normal";
+		} else {
+			return super.getCssValue();
+		}
+	}
+	
+	
+	// this method returns true, if the value must be treated as "auto"
+	public boolean isNormal(){
+		return super.unit == null;
+	}
+}
\ No newline at end of file

Added: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/TextAlignValue.java
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/TextAlignValue.java	Mon Jul  4 08:29:44 2011	(r556)
@@ -0,0 +1,14 @@
+package us.isidor.gdl.anaToMia.Widgets.values;
+
+public enum TextAlignValue implements CssValue{
+	LEFT, 
+	RIGHT,
+	CENTER, 
+	JUSTIFY;
+
+	
+	@Override
+	public String getCssValue() {
+		return this.toString().toLowerCase();
+	}
+}

Added: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/TextDecorationValue.java
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/TextDecorationValue.java	Mon Jul  4 08:29:44 2011	(r556)
@@ -0,0 +1,15 @@
+package us.isidor.gdl.anaToMia.Widgets.values;
+
+public enum TextDecorationValue implements CssValue {
+	UNDERLINE,
+	OVERLINE,
+	LINE_THROUGH,
+	BLINK,
+	NONE;
+
+	
+	@Override
+	public String getCssValue() {
+		return this.toString().toLowerCase().replace("_", "-");
+	}	
+}




More information about the Isidorus-cvs mailing list