Saturday, June 14, 2014

GWT: CellBrowser isn't displayed in a composite

Hi everyone. Please I need your help. I've created a CellBrowser with UiBinder that I populate from a database. The problem is that I can't display it using the InitWidget method. But if I attach it directely to the RootPanel (using the instruction: RootPanel.get().add(cellBrowser);), it gets displayed, but over the other coponents that are attached to the composite (it becomes a real mess :/ ). I've put it in a HTMLPanel but it doesn't work.

How can I attach it to the composite and get it displayed with the other widgets? (I've tried other panels, but it didn't work :/ ).

Here's my code:


The UiBinder file:

       <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
   
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
       
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:c='urn:import:com.google.gwt.user.cellview.client'>
       
<ui:style>
        #errors {
            color: red;
        }

        #success {
            color: green;
        }

        .arrondie {
            border: 1px solid black;
            -moz-border-radius: 7px;
            -webkit-border-radius: 7px;
            border-radius: 7px;
            background-color: #FFFFCC;
        }
       
</ui:style>

       
<g:HorizontalPanel>
       
<g:HTMLPanel>
               
<table align="center" id="arrondie">
                   
<tr>
                       
<td colspan="3" align="center">
                           
<div id="errors" align="center"></div>
                           
<br />
                           
<div id="success" align="center"></div>
                       
</td>
                   
</tr>
                   
<tr>
                       
<td>
                           
<g:Label text="Unit's family:" />
                       
</td>
                       
<td colspan="2">
                           
<g:TextBox width="15em" ui:field="familyName" />
                       
</td>
                   
</tr>
                   
<tr>
                       
<td>
                           
<g:Label text="Unit:" />
                       
</td>
                       
<td>
                           
<g:TextBox width="15em" ui:field="unitName" />
                       
</td>
                       
<td>
                           
<g:Button ui:field="addUnit" text="Add unit" />
                       
</td>
                   
</tr>
                   
<tr>
                       
<td colspan="3" align="center">
                           
<g:Button ui:field="submit" text="Submit" />
                       
</td>
                   
</tr>
               
</table>
               
</g:HTMLPanel>

               
<g:HTMLPanel>
                   
<c:CellBrowser defaultColumnWidth='300' ui:field='cellBrowser' />
               
</g:HTMLPanel>
           
</g:HorizontalPanel>
   
</ui:UiBinder>


The view:

  

  public class UniteViewImpl extends Composite implements UniteView {

       
private Presenter presenter;
       
private static UniteViewImplUiBinder uiBinder = GWT.create(UniteViewImplUiBinder.class);
       
private ListDataProvider<FamilleUniteProxy> dataProvider;

       
interface UniteViewImplUiBinder extends UiBinder<Widget, UniteViewImpl> {
       
}

       
@SuppressWarnings("deprecation")
       
public UniteViewImpl() {
            dataProvider
= new ListDataProvider<FamilleUniteProxy>(new ArrayList<FamilleUniteProxy>());
           
TreeViewModel model = new CustomTreeModel(dataProvider);
            cellBrowser
= new CellBrowser(model, null);
            cellBrowser
.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
            cellBrowser
.setHeight("200");
            cellBrowser
.setWidth("630");
           
RootPanel.get().add(cellBrowser); // If I delete this line, the cellBrowser is not displayed
            initWidget
(uiBinder.createAndBindUi(this));
       
}


       
@UiField
       
TextBox familyName;

 
       
@UiField
       
TextBox unitName;


       
@UiField
       
Button addUnit;


       
@UiField
       
Button submit;


       
@UiField(provided = true)
       
CellBrowser cellBrowser;


       
public UniteViewImpl(String firstName) {
            initWidget
(uiBinder.createAndBindUi(this));
       
}

       
@Override
       
public void setPresenter(Presenter presenter) {
           
this.presenter = presenter;
       
}
 

       
public void updateProvider(List<FamilleUniteProxy> familles) {
            dataProvider
.setList(familles);
            dataProvider
.refresh();
       
}

 
       
@UiFactory
       
public CellBrowser getCellBrowser() {
           
return cellBrowser;
       
}
   
}


The TreeViewModel class:

   

 class CustomTreeModel implements TreeViewModel {

       
private ListDataProvider<FamilleUniteProxy> dataProvider ;

       
public CustomTreeModel(ListDataProvider<FamilleUniteProxy> dataProvider) {
           
this.dataProvider = dataProvider;
       
}

       
public <T> NodeInfo<?> getNodeInfo(T value) {
           
if (value == null) {
               
Cell<FamilleUniteProxy> cell = new AbstractCell<FamilleUniteProxy>() {

                   
@Override
                   
public void render(Context context, FamilleUniteProxy value, SafeHtmlBuilder sb) {
                        sb
.appendEscaped(value.getIntituleFamilleUnite());
                   
}
               
};
               
return new DefaultNodeInfo<FamilleUniteProxy>(dataProvider, cell);

           
} else if (value instanceof FamilleUniteProxy) {
               
ListDataProvider<UniteProxy> dataProvider = new ListDataProvider<UniteProxy>(
                       
((FamilleUniteProxy) value).getUnites());
               
Cell<UniteProxy> cell = new AbstractCell<UniteProxy>() {

                   
@Override
                   
public void render(Context context, UniteProxy value, SafeHtmlBuilder sb) {
                       
if (value != null) {
                            sb
.appendEscaped(value.getIntituleUnite());
                       
}
                   
}
               
};
               
return new DefaultNodeInfo<UniteProxy>(dataProvider, cell);
           
}

           
return null;
       
}

       
public boolean isLeaf(Object value) {
           
if (value instanceof UniteProxy) {
               
return true;
           
}

           
return false;
       
}
   
}


I hope it's clear and thank you very much.

 

--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment