package org.gcube.portlets.admin.vredefinition.client.view; import java.util.ArrayList; import java.util.List; import org.gcube.portlets.admin.vredefinition.client.AppController; import org.gcube.portlets.admin.vredefinition.client.event.ExternalResourceSelectionEvent; import org.gcube.portlets.admin.vredefinition.client.model.VREFunctionalityModel; import org.gcube.portlets.admin.vredefinition.shared.ExternalResourceModel; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.core.XTemplate; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.GridEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.store.GroupingStore; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.form.CheckBox; import com.extjs.gxt.ui.client.widget.grid.CellEditor; import com.extjs.gxt.ui.client.widget.grid.CheckColumnConfig; import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; import com.extjs.gxt.ui.client.widget.grid.ColumnModel; import com.extjs.gxt.ui.client.widget.grid.Grid; import com.extjs.gxt.ui.client.widget.grid.GroupingView; import com.extjs.gxt.ui.client.widget.grid.RowExpander; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.google.gwt.core.client.GWT; /** * * @author Massimiliano Assante ISTI-CNR * @version 0.2 Sep 2012 * */ public class ResourcesGrid { private List myResourcesList; private VREFunctionalityModel myFunc; public ResourcesGrid(VREFunctionalityModel func, List list) { myFunc = func; myResourcesList = list; } public ContentPanel getGrid() { ArrayList configs = new ArrayList(); XTemplate tpl = XTemplate.create("
Resource name: {name}
Description: {description}
"); RowExpander expander = new RowExpander(); expander.setTemplate(tpl); configs.add(expander); ColumnConfig column = new ColumnConfig(); column.setId("id"); column.setHeader("ID"); column.setWidth(50); column.setHidden(true); configs.add(column); column = new ColumnConfig(); column.setId("name"); column.setHeader("Name"); column.setWidth(100); configs.add(column); column = new ColumnConfig(); column.setId("description"); column.setHeader("Description"); column.setWidth(200); configs.add(column); column = new ColumnConfig(); column.setId("category"); column.setHeader("Type"); column.setHidden(true); column.setAlignment(HorizontalAlignment.CENTER); column.setWidth(30); configs.add(column); CheckColumnConfig checkColumn = new CheckColumnConfig("isSelected", "isSelected", 35) { @Override protected void onMouseDown(final GridEvent ge) { super.onMouseDown(ge); ExternalResourceModel bean = (ExternalResourceModel) ge.getModel(); //TODO: } }; checkColumn.setHeader("Select"); checkColumn.setAlignment(HorizontalAlignment.CENTER); CheckBox checkbox = new CheckBox(); CellEditor checkBoxEditor = new CellEditor(checkbox); checkColumn.setEditor(checkBoxEditor); configs.add(checkColumn); final ColumnModel cm = new ColumnModel(configs); /** * load the grid data */ final GroupingStore store = new GroupingStore(); store.groupBy("category"); //store.sort("isSelectable", SortDir.DESC); store.add(myResourcesList); Grid grid = new Grid(store, cm); GroupingView view = new GroupingView(); view.setShowGroupedColumn(false); view.setForceFit(true); grid.setView(view); grid.addPlugin(expander); grid.addPlugin(checkColumn); grid.setStyleAttribute("borderTop", "none"); grid.setAutoExpandColumn("name"); grid.setBorders(true); grid.setStripeRows(true); grid.getView().setForceFit(true); ContentPanel gridPanel = new ContentPanel(new FitLayout()); gridPanel.setHeaderVisible(false); gridPanel.add(grid); gridPanel.setHeight(400); gridPanel.addButton(new Button("Reset", new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { store.rejectChanges(); } })); gridPanel.addButton(new Button("Commit changes", new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { List resources = store.getModels(); store.commitChanges(); AppController.getAppController().getBus().fireEvent(new ExternalResourceSelectionEvent(myFunc, resources)); } })); return gridPanel; } }