/*
* Copyright (c) 2011 PonySDK
* Owners:
* Luciano Broussal <luciano.broussal AT gmail.com>
* Mathieu Barbier <mathieu.barbier AT gmail.com>
* Nicolas Ciaravola <nicolas.ciaravola.pro AT gmail.com>
*
* WebSite:
* http://code.google.com/p/pony-sdk/
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.ponysdk.core.ui.list.paging;
import com.ponysdk.core.ui.basic.Element;
import com.ponysdk.core.ui.basic.PAnchor;
import com.ponysdk.core.ui.basic.PFlowPanel;
import com.ponysdk.core.ui.basic.PWidget;
import com.ponysdk.core.ui.basic.event.PClickEvent;
import com.ponysdk.core.ui.basic.event.PClickHandler;
import com.ponysdk.core.ui.eventbus.HandlerRegistration;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DefaultPagerView extends PFlowPanel implements PagerView, PClickHandler {
private final Map<Integer, PAnchor> items = new HashMap<>();
private final List<HandlerRegistration> registrations = new ArrayList<>();
private final PAnchor startMenuItem = Element.newPAnchor("<<");
private final PAnchor previousMenuItem = Element.newPAnchor("<");
private final PAnchor nextMenuItem = Element.newPAnchor(">");
private final PAnchor endMenuItem = Element.newPAnchor(">>");
private final List<PagerListener> pagerListeners = new ArrayList<>();
public DefaultPagerView() {
setVisible(false);
initUI();
}
private void initUI() {
addStyleName("pony-Page-Navigation");
startMenuItem.addClickHandler(this);
previousMenuItem.addClickHandler(this);
nextMenuItem.addClickHandler(this);
endMenuItem.addClickHandler(this);
add(startMenuItem);
add(previousMenuItem);
add(nextMenuItem);
add(endMenuItem);
}
@Override
public void addPageIndex(final int pageIndex) {
final PAnchor item = Element.newPAnchor(String.valueOf(pageIndex + 1));
item.setData(pageIndex);
// TODO Rework
insert(item, 2 + items.values().size());
registrations.add(item.addClickHandler(this));
items.put(pageIndex, item);
}
@Override
public void addPagerListener(final PagerListener pagerListener) {
pagerListeners.add(pagerListener);
}
@Override
public void clear() {
registrations.forEach(HandlerRegistration::removeHandler);
items.values().forEach(PWidget::removeFromParent);
registrations.clear();
items.clear();
}
@Override
public void setStart(final boolean enabled, final int pageIndex) {
startMenuItem.setEnabled(enabled);
startMenuItem.setData(pageIndex);
}
@Override
public void setEnd(final boolean enabled, final int pageIndex) {
endMenuItem.setEnabled(enabled);
endMenuItem.setData(pageIndex);
}
@Override
public void setPrevious(final boolean enabled, final int pageIndex) {
previousMenuItem.setEnabled(enabled);
previousMenuItem.setData(pageIndex);
}
@Override
public void setNext(final boolean enabled, final int pageIndex) {
nextMenuItem.setEnabled(enabled);
nextMenuItem.setData(pageIndex);
}
@Override
public void setSelectedPage(final int pageIndex) {
final PAnchor item = items.get(pageIndex);
item.setEnabled(false);
item.addStyleName("pony-Page-Navigation-selectedItem");
}
@Override
public void onClick(final PClickEvent event) {
final PAnchor source = (PAnchor) event.getSource();
final Integer pageIndex = (Integer) source.getData();
if (pageIndex != null) {
for (final PagerListener pagerListener : pagerListeners) {
pagerListener.onPageChange(pageIndex);
}
}
}
}