package org.ovirt.engine.ui.webadmin.widget.bookmark;
import org.ovirt.engine.core.common.businessentities.bookmarks;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
import org.ovirt.engine.ui.webadmin.gin.ClientGinjectorProvider;
import org.ovirt.engine.ui.webadmin.idhandler.ElementIdHandler;
import org.ovirt.engine.ui.webadmin.idhandler.WithElementId;
import org.ovirt.engine.ui.webadmin.uicommon.model.BookmarkModelProvider;
import org.ovirt.engine.ui.webadmin.widget.action.AbstractActionStackPanelItem;
import org.ovirt.engine.ui.webadmin.widget.action.SimpleActionPanel;
import org.ovirt.engine.ui.webadmin.widget.action.UiCommandButtonDefinition;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ScrollEvent;
import com.google.gwt.event.dom.client.ScrollHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.cellview.client.HasKeyboardPagingPolicy.KeyboardPagingPolicy;
import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.Range;
public class BookmarkList extends AbstractActionStackPanelItem<BookmarkModelProvider, bookmarks, CellList<bookmarks>> {
interface WidgetUiBinder extends UiBinder<Widget, BookmarkList> {
WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
}
interface ViewIdHandler extends ElementIdHandler<BookmarkList> {
ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
}
@UiField
ScrollPanel scrollPanel;
@WithElementId
SimpleActionPanel<bookmarks> actionPanel;
public BookmarkList(BookmarkModelProvider modelProvider) {
super(modelProvider);
initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
ViewIdHandler.idHandler.generateAndSetIds(this);
addActionButtons(modelProvider);
addScrollEventHandler(scrollPanel);
}
@Override
protected CellList<bookmarks> createDataDisplayWidget(BookmarkModelProvider modelProvider) {
ApplicationTemplates templates = ClientGinjectorProvider.instance().getApplicationTemplates();
CellList<bookmarks> display = new CellList<bookmarks>(new BookmarkListItemCell(templates));
display.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION);
display.setKeyboardPagingPolicy(KeyboardPagingPolicy.INCREASE_RANGE);
modelProvider.addDataDisplay(display);
return display;
}
@Override
protected SimpleActionPanel<bookmarks> createActionPanel(final BookmarkModelProvider modelProvider) {
actionPanel = new SimpleActionPanel<bookmarks>(modelProvider, modelProvider.getSelectionModel());
return actionPanel;
}
private void addActionButtons(final BookmarkModelProvider modelProvider) {
actionPanel.addActionButton(new UiCommandButtonDefinition<bookmarks>("New") {
@Override
protected UICommand resolveCommand() {
return modelProvider.getModel().getNewCommand();
}
});
actionPanel.addActionButton(new UiCommandButtonDefinition<bookmarks>("Edit") {
@Override
protected UICommand resolveCommand() {
return modelProvider.getModel().getEditCommand();
}
});
actionPanel.addActionButton(new UiCommandButtonDefinition<bookmarks>("Remove") {
@Override
protected UICommand resolveCommand() {
return modelProvider.getModel().getRemoveCommand();
}
});
}
void addScrollEventHandler(final ScrollPanel scrollPanel) {
scrollPanel.addScrollHandler(new ScrollHandler() {
@Override
public void onScroll(ScrollEvent event) {
int currentScrollPosition = scrollPanel.getVerticalScrollPosition();
int maxScrollPosition = scrollPanel.getMaximumVerticalScrollPosition();
if (currentScrollPosition >= maxScrollPosition) {
int pageSize = getDataDisplayWidget().getPageSize();
// Extend the visible range of data display widget
Range visibleRange = getDataDisplayWidget().getVisibleRange();
getDataDisplayWidget().setVisibleRange(
visibleRange.getStart(),
visibleRange.getLength() + pageSize);
}
}
});
}
}