[ 
https://issues.apache.org/jira/browse/TOBAGO-733?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12660318#action_12660318
 ] 

Volker Weber commented on TOBAGO-733:
-------------------------------------

Hi Michael,

I'm not sure if i got it correct:
in case of standalone app you want this layout:

*****************************************
* MenuBar                                                              *
*****************************************
* Logo  * Header                                                    *
*           *                                                                 *
*****************************************
* Menu * Content                                                   *
*           *                                                                 *
*           *                                                                 *
*****************************************
* Footer                                                                   *
*****************************************

and in case of portlet this one:

*****************************************
* MenuBar                                                              *
*****************************************
*  Content                                                               *
*                                                                             *
*                                                                             *
*****************************************
* Footer                                                                  *
*****************************************

so i suggest the following tobago layout: 

<tc:page>
  <f:facet name="layout">
    <tc:gridlayout rows="fixed;<heightOfLogo>px;1*;fixed" />
  </f:facet>   

  <%-- first row: menubar --%>
  <tc:menubar .../> (or include the menubar )

  <%-- second row: header --%>  
  <tc:panel rendered="<notPortlet>">  
    <f:facet name="layout">
      <tc:gridlayout columns="<widhtOfLogo>px;1*" />
    </f:facet>   
    ...
  </tc:panel>

  <%-- third row: content --%>  
  <tc:panel>  
    <f:facet name="layout">
      <tc:gridlayout columns="<widhtOfMenu>px;1*" />
    </f:facet>   
    <tc:panel rendered="<notPortlet>">
      <%-- include the menu --%>
    </tc:panel>
    <tc:panel>
      <%-- include the content --%>
    </tc:panel>
  </tc:panel>

  <%-- forth row: footer --%>
    <tc:panel>
      <%-- include the footer --%>
    </tc:panel>
  
</tc:page>







> 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
>         Attachments: tobago-core-1.0.20.jar, UICell.java, UIGridLayout.java
>
>   Original Estimate: 2h
>  Remaining Estimate: 2h
>
> 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