Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [ve-dev] Read/Write of complex LayoutManager values


Hi,

You can't extract constructor parms per-se if the property is implicit (i.e. we didn't parse it). If the constructor was actually in your generated code we would of parsed it. In that case you can look through the JavaAllocation (if it is of type ParseTreeAllocation). The parse tree is the same parse tree format you used to create the constructor in the first place when you set the constraint.

However if the setting is the result of calling a method (such as an implicit property of x.getX()) then there is no way to know how it was constructed.

Rich


Gerald Rosenberg <gerald@xxxxxxxxxx>
Sent by: ve-dev-bounces@xxxxxxxxxxx

06/07/2006 03:19 AM

Please respond to
Discussions people developing code for the Visual Editor project <ve-dev@xxxxxxxxxxx>

To
Discussions people developing code for the Visual Editor project <ve-dev@xxxxxxxxxxx>
cc
Subject
Re: [ve-dev] Read/Write of complex LayoutManager values





Rich -

Not sure my question was clear.  The form of enumeration is not really the point of my problem, but rather, once I do get a IJavaInstance (or something) representing a constraint object, how do I then get the constraint constructor parameter values.  Swing BoxLayout does retrieve the individual constraint objects, but merely types them.  I do not see an example of actually extracting constructor parameter values.

That is, given only the (prior generated) source:

jPanel
.add(jLabel, new CellConstraints(2, 2));
jPanel
.add(getJButton(), new CellConstraints(4, 2));

how do I subsquently read back just the int pair values 2, 2 and 4, 2?  Hopefully, the following routine will give a better picture of what I am trying to do -- just need to understand how to fill in the "???????".

Thanks,
Gerald


/**

* Retrieves a map of constraint values for some set of components present in a
* container managed by a FormLayout. Required to determine the existing constraint
* values as a precondition to computing revised constraints.
* <p>
* The set of components may be a subset of all components in the container.
* <p>
* The returned map must contain sufficient information to allow component/constraint
* tuples to be subsequently identified and revised with new constraint values.
* Example:
*
* <pre>
* Map workMap = getConstraintMap(children);
* workMap = shiftRightByOne(workMap);
* updateConstraintsFromMap(children, workMap);
* </pre>
*
* @param children
*            a List of components in a container.
*
* @return a Map containing component keys and corresponding cell addresses.
*
*/
public
Map getConstraintsMap(List children) {
ResourceSet rset = JavaEditDomainHelper.getResourceSet(policy.getEditDomain());
EReference sfConstraintConstraint = JavaInstantiation.getReference(rset, JFCConstants.SF_CONSTRAINT_CONSTRAINT);
EReference sfConstraintComponent = JavaInstantiation.getReference(rset, JFCConstants.SF_CONSTRAINT_COMPONENT);
EReference sfComponents = JavaInstantiation.getReference(rset, JFCConstants.SF_CONTAINER_COMPONENTS);

// formlayout is defined by a column/row grid
Point p = null; // for each grid cell, p.x is the column and p.y is the row
LinkedHashMap<IJavaInstance, Point> map = new LinkedHashMap<IJavaInstance, Point>();

Iterator childs = children.iterator();
while (childs.hasNext()) {
EObject constraintComponent = InverseMaintenanceAdapter.getIntermediateReference((EObject) getContainerBean(), sfComponents, sfConstraintComponent,(EObject) childs.next());

if (constraintComponent.eIsSet(sfConstraintComponent) && constraintComponent.eIsSet(sfConstraintConstraint)) {
// get the component
IJavaInstance constraintComponentAttributeValue = (IJavaInstance) constraintComponent.eGet(sfConstraintComponent);

// then get the constraint
IJavaInstance constraintConstraintAttributeValue = (IJavaInstance) constraintComponent.eGet(sfConstraintConstraint);

// given that constraintAttributeValue represents a constraint object in source of the form:
//        new CellConstraints(int col, int row)
// pull out the constructor parameter values
int col = ?????????(constraintConstraintAttributeValue, 0);    //  <<<< unknown part; get first parameter
int row = ?????????(constraintConstraintAttributeValue, 1);   //  <<<< unknown part; get second parameter
p = new Point(col, row);
map.put(constraintComponentAttributeValue, p);
}
}
return map;
}



At 10:47 AM 6/5/2006, you wrote:

Third question is you don't need to use the inverse maintenance adapter to get the constraints. The Panel's (the parent container) "components" feature points to an intermidiate object that contains both the constraint and the child. Take a look at ContainerProxyAdapter.addComponentWithConstraint() method and where it was called from. It is called with the intermediate object (called a ConstraintComponent). The constraint components are the true value of the "components" setting on the parent. From the constraint component there are two other settings, one is the constraint and the other is the child control.

The call in addComponentWithConstraint:


                     
if (constraintComponent.eIsSet(sfConstraintConstraint)) {
                              constraintAttributeValue = (IJavaInstance) constraintComponent.eGet(
sfConstraintConstraint);
                              constraintIsSet =
true;
                      }


is how you retrieve the constraint out of the constraint component. Do a search on where sfConstraintConstraint is is set to see how to get it.


PS:
sfContainerComponents is the feature for getting the cooresponding child out of the constraint component. _______________________________________________
ve-dev mailing list
ve-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/ve-dev


Back to the top