workspace-explorer/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/AbstractItemsCellTable.java

217 lines
6.5 KiB
Java

package org.gcube.portlets.widgets.wsexplorer.client.view.grid;
import java.util.List;
import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController;
import org.gcube.portlets.widgets.wsexplorer.client.resources.CellTableResources;
import org.gcube.portlets.widgets.wsexplorer.client.view.SelectionItem;
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import com.github.gwtbootstrap.client.ui.CellTable;
import com.github.gwtbootstrap.client.ui.Pagination;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Style.BorderStyle;
import com.google.gwt.event.dom.client.ContextMenuEvent;
import com.google.gwt.event.dom.client.ContextMenuHandler;
import com.google.gwt.event.dom.client.DoubleClickEvent;
import com.google.gwt.event.dom.client.DoubleClickHandler;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.AbstractCellTable;
import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.MenuItem;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
import com.google.gwt.view.client.SingleSelectionModel;
/**
* The Class AbstractItemTable.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Feb 19, 2015
*/
public abstract class AbstractItemsCellTable implements SelectionItem{
protected CellTable<Item> cellTable;
protected ListDataProvider<Item> dataProvider = new ListDataProvider<Item>();
/**
* Inits the table.
*
* @param ItemTable
* the Item table
* @param pager
* the pager
* @param pagination
* the pagination
*/
public abstract void initTable(AbstractCellTable<Item> ItemTable, final SimplePager pager, final Pagination pagination);
/**
* Instantiates a new abstract Item table.
*
* @param showGroupId
* the show group id
*/
public AbstractItemsCellTable() {
cellTable = new CellTable<Item>(1, CellTableResources.INSTANCE);
cellTable.addStyleName("table-overflow");
cellTable.setStriped(true);
// cellTable.setBordered(true);
cellTable.setCondensed(true);
cellTable.setWidth("100%", true);
dataProvider.addDataDisplay(cellTable);
initTable(cellTable, null, null);
cellTable.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
final SingleSelectionModel<Item> ssm = new SingleSelectionModel<Item>();
cellTable.setSelectionModel(ssm);
ssm.addSelectionChangeHandler(new Handler() {
@Override
public void onSelectionChange(final SelectionChangeEvent event)
{
final Item selectedObject = ssm.getSelectedObject();
if(selectedObject!=null){
GWT.log("Clicked: "+selectedObject);
selectedItem(selectedObject);
}
}
});
cellTable.addDomHandler(new DoubleClickHandler() {
@Override
public void onDoubleClick(final DoubleClickEvent event) {
Item selected = ssm.getSelectedObject();
if (selected != null) {
GWT.log("Double Click: "+selected);
WorkspaceExplorerController.eventBus.fireEvent(new org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEvent(selected));
}
}
},
DoubleClickEvent.getType());
/*
cellTable.addCellPreviewHandler(new CellPreviewEvent.Handler<Item> () {
long lastClick=-1000;
@Override
public void onCellPreview(CellPreviewEvent<Item> event) {
long clictAt = System.currentTimeMillis();
GWT.log("clickAt: "+(clictAt));
GWT.log("lastClick: "+(lastClick));
if(event.getNativeEvent().getType().contains("click")){
GWT.log(""+(clictAt-lastClick));
if(clictAt-lastClick < 300) { // dblclick on 2 clicks detected within 300 ms
Window.alert("I am a double click crafted event!");
}
lastClick = System.currentTimeMillis();
}
}
}); */
addContextMenu();
}
private void addContextMenu(){
MenuBar options = new MenuBar(true);
ScheduledCommand command = new ScheduledCommand() {
@Override
public void execute() {
WorkspaceExplorerController.eventBus.fireEvent(new org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEvent(getSelectedItem()));
}
};
MenuItem openItem = new MenuItem("Open", command);
options.addItem(openItem);
final DialogBox menuWrapper = new DialogBox(true);
menuWrapper.getElement().getStyle().setBorderStyle(BorderStyle.NONE);
menuWrapper.getElement().getStyle().setZIndex(100000);
menuWrapper.add(options);
cellTable.sinkEvents(Event.ONCONTEXTMENU);
cellTable.addHandler(
new ContextMenuHandler() {
@Override
public void onContextMenu(ContextMenuEvent event) {
if(getSelectedItem().isFolder()){
event.preventDefault();
event.stopPropagation();
menuWrapper.setPopupPosition(event.getNativeEvent().getClientX(),event.getNativeEvent().getClientY());
menuWrapper.show();
}
}
}, ContextMenuEvent.getType()
);
}
/**
* Adds the Items.
*
* @param Items
* the Items
*/
public void addItems(List<Item> Items) {
dataProvider.getList().clear();
for (Item pckg : Items)
addItem(pckg);
cellTable.setPageSize(Items.size() + 1);
cellTable.redraw();
}
/**
* Adds the Item.
*
* @param pckg
* the pckg
*/
private void addItem(Item pckg) {
dataProvider.getList().add(pckg);
dataProvider.flush();
dataProvider.refresh();
}
/**
* Gets the cell tables.
*
* @return the cell tables
*/
public CellTable<Item> getCellTable() {
return cellTable;
}
/**
* Gets the data provider.
*
* @return the data provider
*/
public ListDataProvider<Item> getDataProvider() {
return dataProvider;
}
/**
* Sets the data provider.
*
* @param dataProvider
* the new data provider
*/
public void setDataProvider(ListDataProvider<Item> dataProvider) {
this.dataProvider = dataProvider;
}
}