Thank you sven for quick reply!
Actually what I am trying to do is to have two parts inside one container, the "search" panel and "result" panel. The grid is inside "result" panel.
I have two questions:
1. The grid resizing issue. Not able to resize if I have two panels inside one container. Please see the red comment in attached code.
2. The "search" panel contains dynaic fields, so its height is flexible. How can I make the "result" panel and grid fill out the rest of the "center" container?
Code:
public class Application implements EntryPoint
{
public void onModuleLoad()
{
Viewport viewport = new Viewport();
viewport.setLayout(new BorderLayout());
createNorth(viewport);
createWest(viewport);
createCenter(viewport);
RootPanel.get().add(viewport);
}
private void createNorth(Viewport viewport)
{
StringBuffer sb = new StringBuffer();
sb.append("<div id='app-locale'></div>");
sb.append("<div id='app-title'>My Application</div>");
HtmlContainer northPanel = new HtmlContainer(sb.toString());
northPanel.setStateful(false);
northPanel.setId("app-header");
northPanel.addStyleName("x-small-editor");
BorderLayoutData data = new BorderLayoutData(LayoutRegion.NORTH, 33);
data.setMargins(new Margins());
viewport.add(northPanel, data);
}
private void createWest(Viewport viewport)
{
BorderLayoutData data = new BorderLayoutData(LayoutRegion.WEST, 220, 150, 320);
data.setMargins(new Margins(5, 5, 5, 5));
data.setCollapsible(true);
ContentPanel westPanel = new ContentPanel();
viewport.add(westPanel, data);
}
private void createCenter(Viewport viewport)
{
ContentPanel centerPanel = new ContentPanel();
centerPanel.setBorders(false);
centerPanel.setHeaderVisible(false);
centerPanel.setLayout(new FitLayout());
centerPanel.add(createSearchPanel());
BorderLayoutData data = new BorderLayoutData(LayoutRegion.CENTER);
data.setMargins(new Margins(5, 5, 5, 0));
viewport.add(centerPanel, data);
}
private TabPanel createSearchPanel()
{
TabPanel tabPanel = new TabPanel();
tabPanel.setCloseContextMenu(true);
tabPanel.setBorderStyle(false);
tabPanel.setBodyBorder(false);
tabPanel.setTabScroll(true);
tabPanel.setAnimScroll(true);
TabItem item = new TabItem();
item.setText("Search Panel");
item.setLayout(new FitLayout());
tabPanel.add(item);
FormPanel searchPanel = new FormPanel();
searchPanel.setHeading("Search");
TextField<String> field = new TextField<String>();
field.setFieldLabel("Search Criteria");
searchPanel.add(field);
searchPanel.add(new Button("Search"));
ContentPanel resultPanel = new ContentPanel();
resultPanel.setHeading("Result");
resultPanel.setFrame(true);
resultPanel.setLayout(new FitLayout());
resultPanel.setScrollMode(Scroll.AUTO);
resultPanel.addButton(new Button("OK"));
resultPanel.add(createGrid());
LayoutContainer page = new LayoutContainer();
// what layout should I use here?
page.add(searchPanel);
page.add(resultPanel);
LayoutContainer pageContainer = new LayoutContainer(new FitLayout());
pageContainer.setScrollMode(Scroll.AUTO);
pageContainer.add(page);
item.add(pageContainer);
return tabPanel;
}
private Grid<ModelData> createGrid()
{
List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
columns.add(new ColumnConfig("field1", "Field1", 50));
columns.add(new ColumnConfig("field2", "Field2", 50));
columns.add(new ColumnConfig("field3", "Field3", 50));
columns.add(new ColumnConfig("field4", "Field4", 50));
columns.add(new ColumnConfig("field5", "Field5", 50));
Grid<ModelData> grid = new Grid<ModelData>(new ListStore<ModelData>(), new ColumnModel(columns));
grid.setHeight("100%");
grid.setBorders(true);
grid.getView().setForceFit(true);
return grid;
}
}