package com.smartgwt.sample.showcase.client.portal; import com.google.gwt.core.client.GWT; import com.smartgwt.client.bean.BeanFactory; import com.smartgwt.client.data.DSCallback; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.Record; import com.smartgwt.client.tools.EditPane; import com.smartgwt.client.tools.ListPalette; import com.smartgwt.client.tools.PaletteNode; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.SelectionStyle; import com.smartgwt.client.types.Visibility; import com.smartgwt.client.util.JSOHelper; import com.smartgwt.client.widgets.Button; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.LayoutSpacer; import com.smartgwt.client.widgets.layout.PortalLayout; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.tab.Tab; import com.smartgwt.client.widgets.tab.TabSet; import com.google.gwt.core.client.EntryPoint; public class PortalDashboardSample implements EntryPoint { private ListGrid dashboardsList; private TabSet selector; private EditPane editPane; private HLayout editToolbar; private Record currentRecord; private PaletteNode initialPortalPaletteNode; private static boolean enabledReflection = false; public interface MetaFactory extends BeanFactory.MetaFactory { BeanFactory
getCanvasBeanFactory(); BeanFactory
getPortalGridBeanFactory(); } private static void enableReflection() { if (!enabledReflection) { GWT.create(MetaFactory.class); GWT.create(PortalGrid.MetaFactory.class); enabledReflection = true; } } @Override public void onModuleLoad() { enableReflection(); // Palette Node used to create a default portal PortalLayout defaults = new PortalLayout(); defaults.setWidth100(); defaults.setHeight100(); defaults.setCanResizePortlets(true); initialPortalPaletteNode = new PaletteNode(); initialPortalPaletteNode.setType("PortalLayout"); initialPortalPaletteNode.setCanvasDefaults(defaults); ListPalette palette = createPalette(); dashboardsList = createDashboardsList(); HLayout dashboardsToolbar = createDashboardsToolbar(); VLayout dashboardsPane = new VLayout(); dashboardsPane.setMembers(dashboardsList, dashboardsToolbar); selector = new TabSet(); Tab tab = new Tab("Dashboards"); tab.setPane(dashboardsPane); selector.addTab(tab); tab = new Tab("Palette"); tab.setPane(palette); tab.setDisabled(true); selector.addTab(tab); editPane = new EditPane(); editPane.setBorder("1px solid black"); editPane.setVisibility(Visibility.HIDDEN); JSOHelper.setAttribute(editPane.getConfig(), "editMode", false); // Make the new editPane the default Edit Context for the palette, // to support double-clicking on components in the palette to create them palette.setDefaultEditContext(editPane); editPane.setDefaultPalette(palette); // Add a PortalLayout to the editPane editPane.addFromPaletteNode(initialPortalPaletteNode); editToolbar = createEditToolbar(); VLayout rightPane = new VLayout(); rightPane.setMembers(editPane, editToolbar); // Layout for the example HLayout layout = new HLayout(); layout.setWidth("100%"); layout.setHeight("100%"); layout.setMembersMargin(20); layout.setMembers(selector, rightPane); layout.draw(); } private ListGrid createDashboardsList() { ListGrid grid = new ListGrid(); grid.setDataSource(DataSource.get("dashboards")); grid.setAutoFetchData(true); grid.setSelectionType(SelectionStyle.SINGLE); grid.setSortField("description"); // Allow edit of portal description grid.setCanEdit(true); // And removal of dashboards grid.setCanRemoveRecords(true); grid.setFields(new ListGridField("description")); return grid; } private HLayout createDashboardsToolbar() { final PortalDashboardSample dashboard = this; Button viewButton = new Button("View"); viewButton.setAutoFit(true); viewButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { dashboard.clearCurrentDashboard(); dashboard.viewDashboard(); } }); Button editButton = new Button("Edit"); editButton.setAutoFit(true); editButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { dashboard.clearCurrentDashboard(); dashboard.editDashboard(); } }); Button newButton = new Button("New"); newButton.setAutoFit(true); newButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { dashboard.newDashboard(); } }); Button cloneButton = new Button("Clone"); cloneButton.setAutoFit(true); cloneButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { dashboard.cloneDashboard(); } }); HLayout toolbar = new HLayout(); toolbar.setHeight(30); toolbar.setMembersMargin(10); toolbar.setDefaultLayoutAlign(Alignment.CENTER); toolbar.addMembers(new LayoutSpacer(), viewButton, editButton, newButton, cloneButton); return toolbar; } private static ListPalette createPalette() { // The ListPalette contains components available // for use, with default settings. ListPalette palette = new ListPalette(); palette.setFields(new ListGridField("title", "Component")); palette.setData(new PaletteNode[] { createPaletteNode("Animals", "animals"), createPaletteNode("Supply Categories", "supplyCategory"), createPaletteNode("Supply Items", "supplyItem") }); return palette; } private static PaletteNode createPaletteNode(String title, String dataSource) { ListGrid defaults = new ListGrid(); defaults.setDataSource(DataSource.get(dataSource)); defaults.setAutoFetchData(true); defaults.setShowFilterEditor(true); PaletteNode node = new PaletteNode(); node.setType("com.smartgwt.sample.showcase.client.portal.PortalGrid"); node.setTitle(title); node.setCanvasDefaults(defaults); return node; } private HLayout createEditToolbar() { final PortalDashboardSample dashboard = this; Button saveButton = new Button("Save"); saveButton.setAutoFit(true); saveButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { dashboard.saveDashboard(); } }); Button discardButton = new Button("Discard changes"); discardButton.setAutoFit(true); discardButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { dashboard.refreshDashboard(); } }); HLayout toolbar = new HLayout(); toolbar.setHeight(30); toolbar.setMembersMargin(10); toolbar.setDefaultLayoutAlign(Alignment.CENTER); toolbar.setVisibility(Visibility.HIDDEN); toolbar.addMembers(new LayoutSpacer(), saveButton, discardButton); return toolbar; } private void clearCurrentDashboard() { editPane.destroyAll(); editPane.hide(); editToolbar.hide(); } private void editDashboard() { ListGridRecord record = dashboardsList.getSelectedRecord(); if (record != null) { editPane.addPaletteNodesFromXML(record.getAttribute("layout")); editPane.show(); editToolbar.show(); showPalette(); } currentRecord = record; } private void viewDashboard() { ListGridRecord record = dashboardsList.getSelectedRecord(); if (record != null) { editPane.addPaletteNodesFromXML(record.getAttribute("layout")); editPane.show(); editToolbar.hide(); hidePalette(); } currentRecord = record; } private void newDashboard() { clearCurrentDashboard(); currentRecord = null; // Add a PortalLayout to the editPane editPane.addFromPaletteNode(initialPortalPaletteNode); editPane.show(); editToolbar.show(); showPalette(); saveDashboard(); } private void cloneDashboard() { ListGridRecord record = dashboardsList.getSelectedRecord(); if (record != null) { cloneRecord(record); } } private void showPalette() { selector.enableTab(1); selector.selectTab(1); } private void hidePalette() { selector.disableTab(1); } private void refreshDashboard() { clearCurrentDashboard(); editDashboard(); } private void saveDashboard() { String editNodes = editPane.serializeAllEditNodes(); if (currentRecord != null) { currentRecord.setAttribute("layout", editNodes); dashboardsList.updateData(currentRecord); } else { ListGridRecord newRecord = new ListGridRecord(); newRecord.setAttribute("description", "New dashboard"); newRecord.setAttribute("layout", editNodes); dashboardsList.addData(newRecord, new DSCallback() { public void execute(DSResponse dsResponse, Object data, DSRequest dsRequest) { Record[] records = dsResponse.getData(); if (records != null) { dashboardsList.selectSingleRecord(records[0]); currentRecord = records[0]; } } }); } } private void cloneRecord(ListGridRecord record) { ListGridRecord newRecord = new ListGridRecord(); newRecord.setAttribute("description", record.getAttribute("description")); newRecord.setAttribute("layout", record.getAttribute("layout")); dashboardsList.addData(newRecord); } }