Support for more dynamic layouts by evaluation of the rendered attribute in 
UICell an UIGridLayout
--------------------------------------------------------------------------------------------------

                 Key: TOBAGO-733
                 URL: https://issues.apache.org/jira/browse/TOBAGO-733
             Project: MyFaces Tobago
          Issue Type: Improvement
          Components: Core
    Affects Versions: 1.0.20, 1.0.21, 1.1.0
         Environment: Windows XP Professional
Apache Tomcat 6.0.18
Java6 Update 10
MyFaces 1.2.5
Tomahawk 12-1.1.8
Tobago 1.0.20
            Reporter: Michael Bauer
            Priority: Minor


Some child components of the grid layout might change their rendered state 
during user interaction, for example if the user decides to not display a menu 
component or an information box etc. In that case the layout should dynamically 
devide the given space using appropriate row-/colspans. To achieve this, two 
changes would be necessary:

1. Using UICell in a grid layout with dynamic spans:
Let a managed bean support the dynamic layout by calculating the actual cell 
spans. Add value bindings to UICell's spanX- and spanY-attributes like this for 
example:

  public Integer getSpanX() {
          ValueBinding spanBinding = getValueBinding( ATTR_SPAN_X );
          if(spanBinding != null)
          {
                  Object obj = spanBinding.getValue( getFacesContext() );
              if(obj != null && obj instanceof Integer)
              {
                  Integer integer = (Integer) obj;
                  return integer;
              }
          }
          return spanX;
  }

2. Calculating layout in UIGridLayout depending on the rendered state of the 
child components (UICells in this case)
If the child would be a cell and the cell would have a (changing!) value 
binding for the rendered attribute, the cell and it's contents would not be 
rendered - which is OK; However, the place taken by the not rendered cell will 
not be filled by the other components, hence leaving an empty space in the 
layout...
Checking if a child is rendered before evaluating the grid layout fixes this.
The necessary changes would have to be made in method "private List<Row> 
createRows() {" for example like this:

          boolean childRendered = component.isRendered();
          if(childRendered)
          {
                rows.get(r).addControl(component, spanX);
                rows.get(r).fill(c + 1, c + spanX, component.isRendered());
          }

With that, a child component with the attribute rendered set to false will be 
ignored in the layout.

The second change would need for a dynamic span-evaluation of the other 
components in the same row as suggested in the first change.


Regards,
Michael

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to