/* PagingEvent.java {{IS_NOTE Purpose: Description: History: Thu Aug 17 16:18:13 2006, Created by tomyeh }}IS_NOTE Copyright (C) 2006 Potix Corporation. All Rights Reserved. {{IS_RIGHT }}IS_RIGHT */ package org.zkoss.zul.event; import java.util.Map; import org.zkoss.zk.au.AuRequest; import org.zkoss.zk.au.AuRequests; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zul.ext.Pageable; import org.zkoss.zul.ext.Paginal; /** * Used to notify that a new page is selected by the user, or by * {@link Paginal} (such as {@link org.zkoss.zul.Paging}). * It is used for paging long content. * * @author tomyeh */ public class PagingEvent extends Event { private final Pageable _pgi; private final int _actpg; /** Converts an AU request to a render event. * @since 5.0.0 */ public static final PagingEvent getPagingEvent(AuRequest request) { final Component comp = request.getComponent(); final Map<String, Object> data = request.getData(); int pgi = AuRequests.getInt(data, "", 0); final Pageable pageable = (Pageable) comp; if (pgi < 0) pgi = 0; else { final int pgcnt = pageable.getPageCount(); if (pgi >= pgcnt) { pgi = pgcnt - 1; if (pgi < 0) pgi = 0; } } return new PagingEvent(request.getCommand(), comp, pgi); } /** Construct a paging event. * * @param target the target must be a paginal component, i.e., * implements {@link Pageable}. * @param actpg the active page */ public PagingEvent(String name, Component target, int actpg) { super(name, target); _pgi = (Pageable) target; _actpg = actpg; } /** Construct a paging event that the target is different * from the page controller. * * @param target the event target * @param pageable the paging controller. In other words, * it is usually {@link Paginal}. */ public PagingEvent(String name, Component target, Pageable pageable, int actpg) { super(name, target); _pgi = pageable; _actpg = actpg; } /** Returns the pageable controller. * @since 2.4.1 */ public Pageable getPageable() { return _pgi; } /** Returns the active page (starting from 0). * <p>It is the same as {@link #getPageable}'s {@link Pageable#getActivePage}. * * <p>To get the index of the first visible item, use<br/> * <code>{@link #getActivePage} * {@link Pageable#getPageSize}</code>. */ public int getActivePage() { return _actpg; } }