Author: lgiessmann Date: Fri Jul 15 00:55:20 2011 New Revision: 623
Log: gdl-frontend: Widgets: implemented GDL positioning in GdlUnit
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlUnit.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlView.java
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlUnit.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlUnit.java Fri Jul 15 00:24:45 2011 (r622) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlUnit.java Fri Jul 15 00:55:20 2011 (r623) @@ -28,6 +28,7 @@ import com.google.gwt.user.client.ui.Widget; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Occurrence; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; +import us.isidor.gdl.anaToMia.Widgets.base.GdlPosition; import us.isidor.gdl.anaToMia.Widgets.base.GdlPsis; import us.isidor.gdl.anaToMia.Widgets.base.GdlVisibleObject; import us.isidor.gdl.anaToMia.Widgets.base.IGdlContainer; @@ -35,6 +36,7 @@ import us.isidor.gdl.anaToMia.Widgets.environment.ActiveStyleHandler; import us.isidor.gdl.anaToMia.Widgets.environment.ExecutionException; import us.isidor.gdl.anaToMia.Widgets.environment.FocusStyleHandler; +import us.isidor.gdl.anaToMia.Widgets.environment.GdlInstantiator; import us.isidor.gdl.anaToMia.Widgets.environment.HoverStyleHandler; import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException; import us.isidor.gdl.anaToMia.Widgets.environment.Pair; @@ -70,7 +72,6 @@ // creates a unit element or returns the one, if there is a unit element // in the subElements array private void createUnit() throws InvalidGdlSchemaException, ExecutionException{ - // this object is able to own only one sub-element UnitWidget unit = new UnitWidget(); ActiveStyleHandler asHandler = new ActiveStyleHandler(this); FocusStyleHandler fsHandler = new FocusStyleHandler(this); @@ -86,6 +87,16 @@ unit.addBlurHandler(fsHandler); super.addToContainerPanel(unit); this.setGdlStyle(unit); + + // set the actual content of a unit + ArrayList<Topic> objectsContained = this.contains(); + Topic currentTopic = this.getStartElement(objectsContained); + Topic lastTopic = super.getTmRepresentative(); + while(currentTopic != null){ + unit.append(lastTopic, currentTopic); + lastTopic = currentTopic; + currentTopic = TmHelper.getNextContainee(currentTopic, objectsContained); + } } @@ -1253,8 +1264,9 @@ @Override + @Deprecated public GdlVisibleObject append(Topic ancestor, Topic current) throws InvalidGdlSchemaException, ExecutionException { - // TODO: implement + // do nothing this method has no effect on the mainpanle return null; } @@ -1264,7 +1276,15 @@ @Override public ArrayList<Topic> contains() throws InvalidGdlSchemaException { return TmHelper.topicContains(this.tmRepresentative); - } + } + + + // Searches the topic that represents the first item that is placed within this view instance + // i.e. such an item must not have an association that is bound to it via a role of the type + // gdl:ancestor. + protected Topic getStartElement(ArrayList<Topic> containees) throws InvalidGdlSchemaException { + return TmHelper.getFirstContainee(super.getTmRepresentative(), containees); + } // wraps a fieldset with a legend item that represent a group-element @@ -1272,9 +1292,16 @@ private AbsolutePanel basePanel = new AbsolutePanel(); private Element fieldset = DOM.createFieldSet(); private Element legend = DOM.createLegend(); + private ArrayList<Widget> subElements = new ArrayList<Widget>(); + private Topic tmRepresentative = null; + + + private UnitWidget() {} - public UnitWidget(){ + public UnitWidget(Topic tmRepresentative) throws ExecutionException{ + if(tmRepresentative == null) throw new ExecutionException("tmRepresentative must be set"); + this.tmRepresentative = tmRepresentative; initWidget(this.basePanel); this.fieldset.appendChild(this.legend); this.basePanel.getElement().appendChild(this.fieldset); @@ -1282,7 +1309,12 @@ DOM.setStyleAttribute(this.legend, "display", "none"); DOM.setStyleAttribute(this.legend, "marginLeft", "1em"); DOM.setStyleAttribute(this.legend, "marginRight", "1em"); - } + } + + + public Topic getTmRepresentative(){ + return this.tmRepresentative; + } // some css style setters @@ -1494,8 +1526,34 @@ } - public void insert(GdlVisibleObject widget){ - // TODO: implement, change signature => positioning + // appends a new element in form of a topic to this unit-widget + public GdlVisibleObject append(Topic ancestor, Topic current) throws ExecutionException, InvalidGdlSchemaException { + if(ancestor == null || current == null) throw new ExecutionException("to append "" + TmHelper.getAnyIdOfTopic(current) + "" on "" + TmHelper.getAnyIdOfTopic(ancestor) + "" both topics must be present"); + GdlPosition position = new GdlPosition(TmHelper.getPositionOf(ancestor, current)); + + GdlVisibleObject newObj = GdlInstantiator.instantiate(current); + GdlVisibleObject oldObj = null; + for (Widget widget : this.subElements){ + if(((GdlVisibleObject)widget).getTmRepresentative().equals(ancestor)){ + oldObj = (GdlVisibleObject)widget; + break; + } + } + + this.subElements.add(newObj); + if(this.getTmRepresentative().equals(ancestor)){ + this.fieldset.appendChild(newObj.getElement()); + } + else{ + Element elemBefore = oldObj.getElement(); + Element elemAfter = DOM.getNextSibling(elemBefore); + // insert before seems to be a more accepted and stable + // way of inserting new child elements than insertAfter + if(elemAfter == null) this.fieldset.appendChild(newObj.getElement()); + else this.fieldset.insertBefore(newObj.getElement(), elemAfter); + } + position.setAttributes(newObj); + return newObj; }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlView.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlView.java Fri Jul 15 00:24:45 2011 (r622) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlView.java Fri Jul 15 00:55:20 2011 (r623) @@ -1,11 +1,8 @@ package us.isidor.gdl.anaToMia.Widgets.view;
import java.util.ArrayList; - import com.google.gwt.core.client.JsArray; import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Widget; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Name; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic;