package org.gwtoolbox.sample.widget.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.*;
import org.gwtoolbox.commons.ui.client.ggrowl.GGrowl;
import org.gwtoolbox.ioc.core.client.annotation.*;
import org.gwtoolbox.widget.client.panel.layout.DockLayout;
import org.gwtoolbox.widget.client.panel.layout.PanelLayout;
import org.gwtoolbox.widget.client.panel.layout.SplitLayout;
import org.gwtoolbox.widget.client.panel.layout.tab.TabLayout;
import org.gwtoolbox.widget.client.panel.layout.tab.TabSpec;
import java.util.List;
/**
* @author Uri Boness
*/
@Component
@RootPanelBinding
public class MainPane extends ResizeComposite {
private Tree tree;
private TabLayout tabs;
private List<SampleGroup> groups;
public MainPane() {
DockLayout main = new DockLayout();
Label header = new Label("GWToolbox Widget Explorer");
header.setStylePrimaryName("MainHeader");
header.setSize("100%", "100%");
main.addNorth(header, 40);
SplitLayout split = new SplitLayout();
tree = new Tree();
tree.setAnimationEnabled(true);
tree.addSelectionHandler(new SelectionHandler<TreeItem>() {
public void onSelection(SelectionEvent<TreeItem> event) {
TreeItem item = event.getSelectedItem();
final SamplePanel sample = (SamplePanel) item.getUserObject();
if (sample == null) {
return;
}
sample.reset();
if (tabs.getTabIndex(sample.getName()) < 0) {
TabSpec ts = new TabSpec(sample.getName())
.setClosable(true)
.setText(sample.getName())
.setContent(sample.getContentWidget());
tabs.addTab(ts);
}
tabs.setSelectedTab(sample.getName());
}
});
PanelLayout treePanel = new PanelLayout("Navigation Bar");
treePanel.setContent(tree);
split.addWest(treePanel, 200);
tabs = new TabLayout();
split.add(tabs);
main.add(split);
GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
public void onUncaughtException(Throwable e) {
GWT.log("Uncaught exception in java land", e);
GGrowl.showMessage("An error occurred. Please contact your system administrator. ", e.toString(), 10000);
}
});
initWidget(main);
setStylePrimaryName("MainPane");
}
@Initializer
public void init() {
for (SampleGroup group : groups) {
initGroup(group);
}
}
protected void initGroup(SampleGroup group) {
HorizontalPanel itemContent = new HorizontalPanel();
itemContent.setStylePrimaryName("Content");
Image icon = group.getIcon();
itemContent.add(icon);
itemContent.setCellHorizontalAlignment(icon, HorizontalPanel.ALIGN_CENTER);
itemContent.setCellVerticalAlignment(icon, HorizontalPanel.ALIGN_MIDDLE);
Label gap = new Label();
itemContent.add(gap);
itemContent.setCellWidth(gap, "4px");
Label label = new Label(group.getName());
itemContent.add(label);
itemContent.setCellHorizontalAlignment(label, HorizontalPanel.ALIGN_LEFT);
itemContent.setCellVerticalAlignment(label, HorizontalPanel.ALIGN_MIDDLE);
TreeItem groupNode = new TreeItem(itemContent);
groupNode.setStylePrimaryName("GroupNode");
for (SamplePanel panel : group.getSamples()) {
TreeItem sampleNode = new TreeItem(panel.getName());
sampleNode.setUserObject(panel);
groupNode.addItem(sampleNode);
}
tree.addItem(groupNode);
// fixes the display of nodes (on firefox)
DOM.setStyleAttribute((Element) itemContent.getElement().getParentNode(), "display", "block");
}
//============================================== Setter/Getter =====================================================
@Inject(by = InjectionType.TYPE)
public void setSampleGroups(List<SampleGroup> groups) {
this.groups = groups;
}
}