fulvius
23 Jan 2009, 2:32 AM
Problem: Need a severals TabPanels with scrollbar support and refresh when the browser window was resized.
My solution:
public class Main implements EntryPoint {
public void onModuleLoad() {
Viewport viewport = new Viewport();
RootPanel.get().add(viewport);
viewport.setLayout(new FitLayout());
TabPanel tabPanel = new TabPanel() {
@Override
protected void onResize(int width, int height) {
super.onResize(width, height);
for (TabItem t : this.getItems()) {
int h = t.getTabPanel().getHeight() - t.getHeader().getOffsetHeight() - 13;
for (Component c : t.getItems()) {
c.setHeight(h + "px");
}
}
}
};
viewport.setLayout(new FitLayout());
tabPanel.setStyleAttribute("border", "solid 1px yellow");
for (int i = 1; i <= 10; i++) {
final TabItem tabItem = new TabItem("<center>Tab " + i + " </center>");
tabItem.setStyleAttribute("border", "solid 1px red");
tabItem.setLayout(new FitLayout());
ContentPanel contentPanel = new ContentPanel() {
@Override
protected void onRender(Element parent, int pos) {
int h = tabItem.getTabPanel().getHeight() - tabItem.getHeader().getOffsetHeight() - 13;
this.setHeight(h);
super.onRender(parent, pos);
}
};
contentPanel.addText(generateDummyText());
contentPanel.setHeaderVisible(false);
contentPanel.setScrollMode(Scroll.AUTO);
tabItem.add(contentPanel);
tabItem.setClosable(true);
tabPanel.add(tabItem);
}
tabPanel.setAnimScroll(true);
tabPanel.setAutoWidth(true);
tabPanel.setTabScroll(true);
tabPanel.setMinTabWidth(115);
tabPanel.setResizeTabs(true);
tabPanel.setAutoHeight(true);
tabPanel.setScrollIncrement(301);
tabPanel.setScrollDuration(50);
viewport.add(tabPanel);
}
private String generateDummyText() {
int r = (int) (Math.random() * 5);
String result = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, "
+ "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "
+ "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris "
+ "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in "
+ "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla "
+ "pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa "
+ "qui officia deserunt mollit anim id est laborum. ";
for (int i = 0; i < r; i++) {
result += result;
}
return result;
}
}
Anybody have a more elegant solution? ~o)
My solution:
public class Main implements EntryPoint {
public void onModuleLoad() {
Viewport viewport = new Viewport();
RootPanel.get().add(viewport);
viewport.setLayout(new FitLayout());
TabPanel tabPanel = new TabPanel() {
@Override
protected void onResize(int width, int height) {
super.onResize(width, height);
for (TabItem t : this.getItems()) {
int h = t.getTabPanel().getHeight() - t.getHeader().getOffsetHeight() - 13;
for (Component c : t.getItems()) {
c.setHeight(h + "px");
}
}
}
};
viewport.setLayout(new FitLayout());
tabPanel.setStyleAttribute("border", "solid 1px yellow");
for (int i = 1; i <= 10; i++) {
final TabItem tabItem = new TabItem("<center>Tab " + i + " </center>");
tabItem.setStyleAttribute("border", "solid 1px red");
tabItem.setLayout(new FitLayout());
ContentPanel contentPanel = new ContentPanel() {
@Override
protected void onRender(Element parent, int pos) {
int h = tabItem.getTabPanel().getHeight() - tabItem.getHeader().getOffsetHeight() - 13;
this.setHeight(h);
super.onRender(parent, pos);
}
};
contentPanel.addText(generateDummyText());
contentPanel.setHeaderVisible(false);
contentPanel.setScrollMode(Scroll.AUTO);
tabItem.add(contentPanel);
tabItem.setClosable(true);
tabPanel.add(tabItem);
}
tabPanel.setAnimScroll(true);
tabPanel.setAutoWidth(true);
tabPanel.setTabScroll(true);
tabPanel.setMinTabWidth(115);
tabPanel.setResizeTabs(true);
tabPanel.setAutoHeight(true);
tabPanel.setScrollIncrement(301);
tabPanel.setScrollDuration(50);
viewport.add(tabPanel);
}
private String generateDummyText() {
int r = (int) (Math.random() * 5);
String result = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, "
+ "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "
+ "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris "
+ "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in "
+ "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla "
+ "pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa "
+ "qui officia deserunt mollit anim id est laborum. ";
for (int i = 0; i < r; i++) {
result += result;
}
return result;
}
}
Anybody have a more elegant solution? ~o)