package com.smartgwt.sample.showcase.client; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.user.client.Cookies; import com.google.gwt.user.client.History; import com.google.gwt.user.client.HistoryListener; import com.google.gwt.user.client.ui.RootPanel; import com.smartgwt.client.core.KeyIdentifier; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.TabBarControls; import com.smartgwt.client.types.VerticalAlignment; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.ImgButton; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.Window; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.events.ChangeEvent; import com.smartgwt.client.widgets.form.fields.events.ChangeHandler; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.Layout; import com.smartgwt.client.widgets.layout.LayoutSpacer; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.menu.Menu; import com.smartgwt.client.widgets.menu.MenuItem; import com.smartgwt.client.widgets.menu.MenuItemIfFunction; import com.smartgwt.client.widgets.menu.events.ClickHandler; import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent; import com.smartgwt.client.widgets.tab.Tab; import com.smartgwt.client.widgets.tab.TabSet; import com.smartgwt.client.widgets.tab.events.TabSelectedEvent; import com.smartgwt.client.widgets.tab.events.TabSelectedHandler; import com.smartgwt.client.widgets.toolbar.ToolStrip; import com.smartgwt.client.widgets.toolbar.ToolStripButton; import com.smartgwt.client.widgets.tree.Tree; import com.smartgwt.client.widgets.tree.TreeNode; import com.smartgwt.client.widgets.tree.events.LeafClickEvent; import com.smartgwt.client.widgets.tree.events.LeafClickHandler; import com.smartgwt.sample.showcase.client.data.CommandTreeNode; import com.smartgwt.sample.showcase.client.data.ExplorerTreeNode; import java.util.LinkedHashMap; public class Showcase implements EntryPoint, HistoryListener { private TabSet mainTabSet; private SideNavTree sideNav; private Menu contextMenu; public void onModuleLoad() { final String initToken = History.getToken(); //setup overall layout / viewport VLayout main = new VLayout() { @Override protected void onInit() { super.onInit(); if (initToken.length() != 0) { onHistoryChanged(initToken); } } }; ToolStrip topBar = new ToolStrip(); topBar.setHeight(33); topBar.setWidth100(); topBar.addSpacer(6); ImgButton sgwtHomeButton = new ImgButton(); sgwtHomeButton.setSrc("pieces/24/cube_green.png"); sgwtHomeButton.setWidth(24); sgwtHomeButton.setHeight(24); sgwtHomeButton.setPrompt("Smart GWT Project Page"); sgwtHomeButton.setHoverStyle("interactImageHover"); sgwtHomeButton.setShowRollOver(false); sgwtHomeButton.setShowDownIcon(false); sgwtHomeButton.setShowDown(false); sgwtHomeButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(ClickEvent event) { com.google.gwt.user.client.Window.open("http://code.google.com/p/smartgwt/", "sgwt", null); } }); topBar.addMember(sgwtHomeButton); topBar.addSpacer(6); Label title = new Label("Smart GWT Showcase"); title.setStyleName("sgwtTitle"); title.setWidth(300); topBar.addMember(title); topBar.addFill(); ToolStripButton devConsoleButton = new ToolStripButton(); devConsoleButton.setTitle("Developer Console"); devConsoleButton.setIcon("silk/bug.png"); devConsoleButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(ClickEvent event) { SC.showConsole(); } }); topBar.addButton(devConsoleButton); topBar.addSeparator(); ImgButton imgButton = new ImgButton(); imgButton.setWidth(18); imgButton.setHeight(18); imgButton.setSrc("silk/emoticon.png"); imgButton.setShowFocused(false); imgButton.setShowFocusedIcon(false); imgButton.setPrompt("I'm feeling lucky"); imgButton.setHoverWidth(110); imgButton.setHoverStyle("interactImageHover"); imgButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(ClickEvent event) { ExplorerTreeNode[] data = sideNav.getShowcaseData(); int size = data.length; for (int i = 0; i < 15; i++) { int sampleIndex = (int) (size * java.lang.Math.random()); ExplorerTreeNode sample = data[sampleIndex]; if (sample.getFactory() != null && !(sample instanceof CommandTreeNode)) { showSample(sample); break; } } } }); topBar.addMember(imgButton); topBar.addSpacer(6); main.addMember(topBar); main.setWidth100(); main.setHeight100(); main.setStyleName("tabSetContainer"); HLayout hLayout = new HLayout(); hLayout.setLayoutMargin(5); hLayout.setWidth100(); hLayout.setHeight100(); VLayout sideNavLayout = new VLayout(); sideNavLayout.setHeight100(); sideNavLayout.setWidth(185); sideNavLayout.setShowResizeBar(true); sideNav = new SideNavTree(); sideNav.addLeafClickHandler(new LeafClickHandler() { public void onLeafClick(LeafClickEvent event) { TreeNode node = event.getLeaf(); showSample(node); } }); sideNavLayout.addMember(sideNav); hLayout.addMember(sideNavLayout); mainTabSet = new TabSet(); Layout paneContainerProperties = new Layout(); paneContainerProperties.setLayoutMargin(0); paneContainerProperties.setLayoutTopMargin(1); mainTabSet.setPaneContainerProperties(paneContainerProperties); mainTabSet.setWidth100(); mainTabSet.setHeight100(); mainTabSet.addTabSelectedHandler(new TabSelectedHandler() { public void onTabSelected(TabSelectedEvent event) { Tab selectedTab = event.getTab(); String historyToken = selectedTab.getAttribute("historyToken"); if (historyToken != null) { History.newItem(historyToken, false); } else { History.newItem("main", false); } } }); LayoutSpacer layoutSpacer = new LayoutSpacer(); layoutSpacer.setWidth(5); SelectItem selectItem = new SelectItem(); selectItem.setHeight(21); selectItem.setWidth(130); LinkedHashMap<String, String> valueMap = new LinkedHashMap<String, String>(); valueMap.put("EnterpriseBlue", "Enterprise Blue"); valueMap.put("Enterprise", "Enterprise Gray"); valueMap.put("Graphite", "Graphite"); valueMap.put("Simplicity", "Simplicity"); selectItem.setValueMap(valueMap); final String skinCookieName = "skin_name_2_4"; String currentSkin = Cookies.getCookie(skinCookieName); if (currentSkin == null) { currentSkin = "Enterprise"; } selectItem.setDefaultValue(currentSkin); selectItem.setShowTitle(false); selectItem.addChangeHandler(new ChangeHandler() { public void onChange(ChangeEvent event) { Cookies.setCookie(skinCookieName, (String) event.getValue()); com.google.gwt.user.client.Window.Location.reload(); } }); DynamicForm form = new DynamicForm(); form.setPadding(0); form.setMargin(0); form.setCellPadding(1); form.setNumCols(1); form.setFields(selectItem); mainTabSet.setTabBarControls(TabBarControls.TAB_SCROLLER, TabBarControls.TAB_PICKER, layoutSpacer, form); contextMenu = createContextMenu(); Tab tab = new Tab(); tab.setTitle("Home  "); tab.setIcon("pieces/16/cube_green.png", 16); tab.setWidth(80); HLayout mainPanel = new HLayout(); mainPanel.setHeight100(); mainPanel.setWidth100(); TileView tileView = new TileView(mainPanel); mainPanel.addMember(tileView); tab.setPane(mainPanel); mainTabSet.addTab(tab); Canvas canvas = new Canvas(); canvas.setBackgroundImage("[SKIN]/shared/background.gif"); canvas.setWidth100(); canvas.setHeight100(); canvas.addChild(mainTabSet); hLayout.addMember(canvas); main.addMember(hLayout); if (SC.hasFirebug()) { Label label = new Label(); label.setWidth100(); label.setHeight(50); label.setValign(VerticalAlignment.CENTER); label.setAlign(Alignment.CENTER); label.setContents("Firebug can make the Showcase run slow. For the best performance, we suggest disabling Firebug for this site."); Window fbWindow = new Window(); fbWindow.setTitle("Firebug Detected"); fbWindow.setWidth100(); fbWindow.setHeight(80); fbWindow.addItem(label); fbWindow.setRedrawOnResize(true); main.addMember(fbWindow); } main.draw(); // Add history listener History.addHistoryListener(this); RootPanel p = RootPanel.get("loadingWrapper"); if (p != null) RootPanel.getBodyElement().removeChild(p.getElement()); } private Menu createContextMenu() { Menu menu = new Menu(); menu.setWidth(140); MenuItemIfFunction enableCondition = new MenuItemIfFunction() { public boolean execute(Canvas target, Menu menu, MenuItem item) { int selectedTab = mainTabSet.getSelectedTabNumber(); return selectedTab != 0; } }; MenuItem closeItem = new MenuItem("<u>C</u>lose"); closeItem.setEnableIfCondition(enableCondition); closeItem.setKeyTitle("Alt+C"); KeyIdentifier closeKey = new KeyIdentifier(); closeKey.setAltKey(true); closeKey.setKeyName("C"); closeItem.setKeys(closeKey); closeItem.addClickHandler(new ClickHandler() { public void onClick(MenuItemClickEvent event) { int selectedTab = mainTabSet.getSelectedTabNumber(); mainTabSet.removeTab(selectedTab); mainTabSet.selectTab(selectedTab - 1); } }); MenuItem closeAllButCurrent = new MenuItem("Close All But Current"); closeAllButCurrent.setEnableIfCondition(enableCondition); closeAllButCurrent.addClickHandler(new ClickHandler() { public void onClick(MenuItemClickEvent event) { int selected = mainTabSet.getSelectedTabNumber(); Tab[] tabs = mainTabSet.getTabs(); int[] tabsToRemove = new int[tabs.length - 2]; int cnt = 0; for (int i = 1; i < tabs.length; i++) { if (i != selected) { tabsToRemove[cnt] = i; cnt++; } } mainTabSet.removeTabs(tabsToRemove); } }); MenuItem closeAll = new MenuItem("Close All"); closeAll.setEnableIfCondition(enableCondition); closeAll.addClickHandler(new ClickHandler() { public void onClick(MenuItemClickEvent event) { Tab[] tabs = mainTabSet.getTabs(); int[] tabsToRemove = new int[tabs.length - 1]; for (int i = 1; i < tabs.length; i++) { tabsToRemove[i - 1] = i; } mainTabSet.removeTabs(tabsToRemove); mainTabSet.selectTab(0); } }); menu.setItems(closeItem, closeAllButCurrent, closeAll); return menu; } protected void showSample(TreeNode node) { boolean isExplorerTreeNode = node instanceof ExplorerTreeNode; if (node instanceof CommandTreeNode) { CommandTreeNode commandTreeNode = (CommandTreeNode) node; commandTreeNode.getCommand().execute(); } else if (isExplorerTreeNode) { ExplorerTreeNode explorerTreeNode = (ExplorerTreeNode) node; PanelFactory factory = explorerTreeNode.getFactory(); if (factory != null) { String panelID = factory.getID(); Tab tab = null; if (panelID != null) { String tabID = panelID + "_tab"; tab = mainTabSet.getTab(tabID); } if (tab == null) { Canvas panel = factory.create(); tab = new Tab(); tab.setID(factory.getID() + "_tab"); //store history token on tab so that when an already open is selected, one can retrieve the //history token and update the URL tab.setAttribute("historyToken", explorerTreeNode.getNodeID()); tab.setContextMenu(contextMenu); String sampleName = explorerTreeNode.getName(); String icon = explorerTreeNode.getIcon(); if (icon == null) { icon = "silk/plugin.png"; } String imgHTML = Canvas.imgHTML(icon, 16, 16); tab.setTitle("<span>" + imgHTML + " " + sampleName + "</span>"); tab.setPane(panel); tab.setCanClose(true); mainTabSet.addTab(tab); mainTabSet.selectTab(tab); } else { mainTabSet.selectTab(tab); } } } } public void onHistoryChanged(String historyToken) { if (historyToken == null || historyToken.equals("")) { mainTabSet.selectTab(0); } else { ExplorerTreeNode[] showcaseData = sideNav.getShowcaseData(); for (ExplorerTreeNode explorerTreeNode : showcaseData) { if (explorerTreeNode.getNodeID().equals(historyToken)) { showSample(explorerTreeNode); ListGridRecord selectedRecord = sideNav.getSelectedRecord(); if(selectedRecord != null) { sideNav.deselectRecord(selectedRecord); } sideNav.selectRecord(explorerTreeNode); Tree tree = sideNav.getData(); TreeNode categoryNode = tree.getParent(explorerTreeNode); while (categoryNode != null && !"/".equals(tree.getName(categoryNode))) { tree.openFolder(categoryNode); categoryNode = tree.getParent(categoryNode); } } } } } }