Author: lgiessmann Date: Fri Jul 8 00:01:50 2011 New Revision: 579
Log: gdl-frontend: Widgets: implemented GdlList
Added: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/ListStylePositionValue.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/ListStyleTypeValue.java Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPsis.java 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/container/GdlList.java
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPsis.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPsis.java Thu Jul 7 09:29:24 2011 (r578) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPsis.java Fri Jul 8 00:01:50 2011 (r579) @@ -129,7 +129,7 @@ public final static String gdlFloat = gdl + "float"; public final static String gdlBackgroundColor = gdl + "background-color"; public final static String gdlOrdered = gdl + "ordered"; - public final static String gdlListstyleType = gdl + "list-style-type"; + public final static String gdlListStyleType = gdl + "list-style-type"; public final static String gdlListStylePosition = gdl + "list-style-position"; public final static String gdlPositionStyle = gdl + "position-style"; public final static String gdlNthValue = gdl + "nth-value";
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 Thu Jul 7 09:29:24 2011 (r578) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java Fri Jul 8 00:01:50 2011 (r579) @@ -914,7 +914,7 @@ return null; } else { return new NumUnitValue(paddingOcc.getValue()); - } + } }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlList.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlList.java Thu Jul 7 09:29:24 2011 (r578) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlList.java Fri Jul 8 00:01:50 2011 (r579) @@ -1,49 +1,289 @@ package us.isidor.gdl.anaToMia.Widgets.container;
+import java.util.ArrayList; import com.google.gwt.dom.client.Element; import com.google.gwt.user.client.DOM; - +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.dom.client.Node; +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Occurrence; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; +import us.isidor.gdl.anaToMia.Widgets.base.GdlPsis; import us.isidor.gdl.anaToMia.Widgets.base.GdlVisibleObject; -import us.isidor.gdl.anaToMia.Widgets.base.IGdlContainer; import us.isidor.gdl.anaToMia.Widgets.environment.ExecutionException; import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException; +import us.isidor.gdl.anaToMia.Widgets.environment.Pair; +import us.isidor.gdl.anaToMia.Widgets.values.ListStylePositionValue; +import us.isidor.gdl.anaToMia.Widgets.values.ListStyleTypeValue;
-public class GdlList extends GdlVisibleObject implements IGdlContainer{ - protected Element listElement = null; +public class GdlList extends GdlVisibleObject{ + // some constructors - protected GdlList(){ + protected GdlList() throws InvalidGdlSchemaException{ super(); + this.initList(this.getOrdered()); } public GdlList(Topic tmRepresentative) throws InvalidGdlSchemaException, ExecutionException{ super(tmRepresentative); + this.initList(this.getOrdered()); } - public void initList(boolean ordered){ - Element elem = DOM.createElement(ordered ? "ol" : "ul"); - super.addToContainerPanel(elem); + // sets the list Element to either ol or ul depending on the gdl:ordered property + public void initList(boolean ordered) throws InvalidGdlSchemaException { + // this object is able to own only one sub-element + super.subElements.add(new ListWidget(this.getOrdered())); } - public void createListItem(){ - + // returns the property of a gdl:ordered occurrence, otherwise the default value if no occurrence is set + public boolean getOrdered() throws InvalidGdlSchemaException{ + Occurrence orderedOcc = getNoneOrOneUnscopedOccurrence(GdlPsis.OccurrenceType.gdlOrdered); + + if(orderedOcc != null){ + String boolStr = orderedOcc.getValue().toUpperCase(); + if(boolStr.equals("TRUE")){ + return true; + } else if(boolStr.equals("FALSE")) { + return false; + } else { + throw new InvalidGdlSchemaException("The occurrence " + GdlPsis.OccurrenceType.gdlOrdered + " must be set to one of "true" or "false", but is "" + orderedOcc.getValue() + """); + } + } else { + return false; + } } - public boolean getOrdered(){ - // TODO: implement - return false; + // returns a ListStyleTypeValeu instance that describes this instance's list style type property + public ListStyleTypeValue getListStyleType() throws InvalidGdlSchemaException { + Occurrence typeOcc = getNoneOrOneUnscopedOccurrence(GdlPsis.OccurrenceType.gdlListStyleType); + + if(typeOcc != null){ + try{ + return ListStyleTypeValue.fromString(typeOcc.getValue()); + }catch(IllegalArgumentException e){ + String values = "deciaml, decimal-leading-zero, lower-greek, lower-roman, armenian, georgian, upper-roman, " + + "lower-alpha, upper-alpha, lower-latin, upper-latin, disc, circle, square or none"; + throw new InvalidGdlSchemaException("The occurrence " + GdlPsis.OccurrenceType.gdlListStyleType + " must be set to one of " + values + " , but is "" + typeOcc.getValue() + """); + } + } else if(this.getOrdered()){ + return ListStyleTypeValue.DECIMAL; + } else { + return ListStyleTypeValue.CIRCLE; + } }
+ + // returns a ListStylePositionValue instance that describes this instance's list style position property + public ListStylePositionValue getListStylePosition() throws InvalidGdlSchemaException { + Occurrence positionOcc = getNoneOrOneUnscopedOccurrence(GdlPsis.OccurrenceType.gdlListStylePosition);
+ if(positionOcc != null){ + try{ + return ListStylePositionValue.valueOf(positionOcc.getValue().toUpperCase()); + }catch(IllegalArgumentException e){ + throw new InvalidGdlSchemaException("The occurrence " + GdlPsis.OccurrenceType.gdlListStylePosition + " must be set to one of inside or outside, but is "" + positionOcc.getValue() + """); + } + } else{ + return ListStylePositionValue.OUTSIDE; + } + + } + + + // sets the css property ordered + @Deprecated + public void setOrdered(Widget widget, boolean value) throws InvalidGdlSchemaException, ExecutionException { + // do nothing this property has to be set in the initList mehtod + } + + + // sets the css property list-style-type + public void setListStyleType(Widget widget, ListStyleTypeValue value) throws InvalidGdlSchemaException, ExecutionException { + this.setCssProperty(widget, null, "list-style-type", value.getCssValue()); + } + + + // sets the css property list-style-position + public void setListStylePositionValue(Widget widget, ListStylePositionValue value) throws InvalidGdlSchemaException, ExecutionException { + this.setCssProperty(widget, null, "list-style-position", value.getCssValue()); + } + + + // calls the super applies the GdlStyle for every TextArea item of this instance + @Override + protected void setGdlStyle() throws InvalidGdlSchemaException, ExecutionException{ + if(this.subElements != null){ + for (Widget item : this.subElements) { + this.setGdlStyle(item); + } + } + } + + + // sets the css properties, by calling the super class's method and the local + // method, which sets some specific properties for the GdlList instance @Override - public void append(GdlVisibleObject ancestor, GdlVisibleObject descendant) - throws InvalidGdlSchemaException { - // TODO Auto-generated method stub + public void setGdlStyle(Widget widget) throws InvalidGdlSchemaException, ExecutionException { + super.setGdlStyle(widget); + + this.setListStylePositionValue(widget, this.getListStylePosition()); + this.setListStyleType(widget, this.getListStyleType()); + } + + + // inserts the passed item on the given index + public void append(GdlVisibleObject item, int position){ + if(this.subElements != null && this.subElements.size() != 0){ + ((ListWidget)this.subElements.get(0)).insertWidget(item, position); + } + } + + + // Wraps a ul an ol element as a widget based on a SimplePanel + protected class ListWidget extends Composite { + private SimplePanel basePanel = new SimplePanel(); + private Element listElement = null; + // note: index is not the actual index of the item in the array list, + // it is the user's passed index when inserting this element + private ArrayList<Pair<ListItem, Integer>> itemsAndIndexes = new ArrayList<Pair<ListItem, Integer>>(); + + public ListWidget(){ + this.listElement = DOM.createElement("ul"); + this.basePanel.getElement().insertFirst(this.listElement); + } + + public ListWidget(boolean ordered){ + if(ordered) this.listElement = DOM.createElement("ol"); + else this.listElement = DOM.createElement("ul"); + this.basePanel.getElement().insertFirst(this.listElement); + } + + + // inserts the passed list item as the last child to this list element + public void appendListItem(ListItem item){ + if(item == null) return; + item.appendToList(this.listElement); + } + + + // inserts the passed instance item to this list directly after the intance previous + public void appendListItem(ListItem item, ListItem previous){ + if(item == null) return; + item.appendToList(this.listElement, previous); + } + + + // inserts the passed widget directly before the first item that + // has a greater position index + public void insertWidget(Widget widget, int position){ + ListItem previosItem = this.getItemBeforeIndex(position); + ListItem item = new ListItem(this.listElement); + item.appendContentToListItem(widget.getElement()); + this.appendListItem(item, previosItem); + } + + + // returns the first item that has a smaller position index + public ListItem getItemBeforeIndex(int idx){ + Pair<ListItem, Integer> result = null; + for (Pair<ListItem, Integer> item : this.itemsAndIndexes) { + if(item.getSecond() < idx && (result == null || result.getSecond() < item.getSecond()))result = item; + } + + if(result != null) result.getFirst(); + return null; + } + + + // returns all ListItems + public ArrayList<ListItem> getItems(){ + ArrayList<ListItem> items = new ArrayList<GdlList.ListItem>(); + for (Pair<ListItem, Integer> pair : this.itemsAndIndexes) { + items.add(pair.getFirst()); + } + return items; + } + + + // returns the position index of the item, that was psecified when + // inserting the passed ListItem + public int indexOfItem(ListItem item){ + for (Pair<ListItem, Integer> pair : this.itemsAndIndexes) { + if(pair.getFirst().equals(item)) return pair.getSecond(); + } + + return -1; + } + } + + + // this class wrapps a list item, i.e. a div element within a li element + protected class ListItem{ + private Element liElement = null; + private Element divElement = null; + + public ListItem(){ + this.liElement = DOM.createElement("li"); + this.divElement = DOM.createElement("div"); + this.liElement.insertFirst(this.divElement); + } + + public ListItem(Element parentList){ + this(); + this.appendToList(parentList); + } + + // inserts the this instance into the passed list element, + // if this instance is not bound yet + public void appendToList(Element parentList){ + if(parentList != null && this.liElement.getParentNode() == null){ + Node lastChild = parentList.getLastChild(); + if(lastChild != null){ + parentList.insertAfter(this.liElement, lastChild); + } else { + parentList.insertFirst(this.liElement); + } + } + } + + + // inserts the this instance into the passed list element + // after the passed ListItem, if this instance is not bound yet + public void appendToList(Element parentList, ListItem previous){ + if(parentList == null) return; + + if(previous == null){ + this.appendToList(parentList); + }else{ + parentList.insertAfter(this.liElement, previous.liElement); + } + } + + + // removes this instance from the set list + public void removeFromList(){ + this.liElement.removeFromParent(); + } + + // appends the content element to the inner div item + public void appendContentToListItem(Element content){ + if(content != null){ + Node lastChild = this.divElement.getLastChild(); + if(lastChild != null){ + this.divElement.insertAfter(content, lastChild); + } else { + this.divElement.insertFirst(content); + } + } + } + + } }
Added: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/ListStylePositionValue.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/ListStylePositionValue.java Fri Jul 8 00:01:50 2011 (r579) @@ -0,0 +1,13 @@ +package us.isidor.gdl.anaToMia.Widgets.values; + +public enum ListStylePositionValue implements CssValue { + INSIDE, + OUTSIDE; + + + @Override + public String getCssValue() { + return this.toString().toLowerCase(); + } + +}
Added: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/ListStyleTypeValue.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/ListStyleTypeValue.java Fri Jul 8 00:01:50 2011 (r579) @@ -0,0 +1,47 @@ +package us.isidor.gdl.anaToMia.Widgets.values; + +public enum ListStyleTypeValue implements CssValue{ + DECIMAL, + DECIMAL_LEADING_ZERO, + LOWER_GREEK, + LOWER_ROMAN, + ARMENIAN, + GEORGIAN, + UPPER_ROMAN, + LOWER_ALPHA, + UPPER_ALPHA, + LOWER_LATIN, + UPPER_LATIN, + DISC, + CIRCLE, + SQUARE, + NONE; + + @Override + public String getCssValue() { + return this.toString().toLowerCase().replace("_", "-"); + } + + + public static ListStyleTypeValue fromString(String str) throws IllegalArgumentException{ + if(null == str) return null; + + String upperStr = str.toUpperCase(); + if(upperStr.equals("DECIMAL")) return DECIMAL; + else if(upperStr.equals("DECIMAL-LEADING-ZERO")) return DECIMAL_LEADING_ZERO; + else if(upperStr.equals("LOWER-GREEK")) return LOWER_GREEK; + else if(upperStr.equals("LOWER-ROMAN")) return LOWER_ROMAN; + else if(upperStr.equals("ARMENIAN")) return ARMENIAN; + else if(upperStr.equals("GEORGIAN")) return GEORGIAN; + else if(upperStr.equals("UPPER-ROMAN")) return UPPER_ROMAN; + else if(upperStr.equals("LOWER-ALPHA")) return LOWER_ALPHA; + else if(upperStr.equals("UPPER-ALPHA")) return UPPER_ALPHA; + else if(upperStr.equals("LOWER-LATIN")) return LOWER_LATIN; + else if(upperStr.equals("UPPER-LATIN")) return UPPER_LATIN; + else if(upperStr.equals("DISC")) return DISC; + else if(upperStr.equals("CIRCLE")) return CIRCLE; + else if(upperStr.equals("SQUARE")) return SQUARE; + else if(upperStr.equals("NONE")) return NONE; + else throw new IllegalArgumentException("the value " + str + "is not a FontWeightValue value"); + } +}