/* * Copyright 2014 cruxframework.org. * * 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 org.cruxframework.crux.smartfaces.client.pager; import org.cruxframework.crux.core.client.dataprovider.pager.AbstractPager; import org.cruxframework.crux.core.client.dataprovider.pager.PageEvent; import org.cruxframework.crux.core.client.event.SelectEvent; import org.cruxframework.crux.core.client.event.SelectHandler; import org.cruxframework.crux.smartfaces.client.button.Button; /** * Base implementation for navigation-buttons-based pager * @author Thiago da Rosa de Bustamante */ public abstract class NavigationButtonsPager<T> extends AbstractPager<T> { private static final String STYLE_FIRST_BUTTON = "firstButton"; private static final String STYLE_LAST_BUTTON = "lastButton"; private static final String STYLE_NEXT_BUTTON = "nextButton"; private static final String STYLE_PREVIOUS_BUTTON = "previousButton"; private Button firstButton; private Button lastButton; private Button nextButton; private Button previousButton; /** * Creates the "first page" navigation button * @return */ protected Button createFirstPageButton() { final NavigationButtonsPager<T> pager = this; Button panel = createNavigationButton(STYLE_FIRST_BUTTON, new SelectHandler() { public void onSelect(SelectEvent event) { if(isEnabled()) { PageEvent pageEvent = PageEvent.fire(pager, 1); if(!pageEvent.isCanceled()) { firstPage(); } } } } ); this.firstButton = panel; return panel; } /** * Creates the "last page" navigation button * @return */ protected Button createLastPageButton() { final NavigationButtonsPager<T> pager = this; Button label = createNavigationButton(STYLE_LAST_BUTTON, new SelectHandler() { public void onSelect(SelectEvent event) { if(isEnabled()) { PageEvent pageEvent = PageEvent.fire(pager, getPageCount()); if(!pageEvent.isCanceled()) { lastPage(); } } } } ); this.lastButton = label; return label; } /** * Creates the "next page" navigation button * @return */ protected Button createNextButton() { final NavigationButtonsPager<T> pager = this; Button panel = createNavigationButton(STYLE_NEXT_BUTTON, new SelectHandler() { public void onSelect(SelectEvent event) { if(isEnabled()) { PageEvent pageEvent = PageEvent.fire(pager, getCurrentPage() + 1); if(!pageEvent.isCanceled()) { if(hasNextPage()) { nextPage(); } } } } } ); this.nextButton = panel; nextButton.setText(" "); return panel; } /** * Creates the "previous page" navigation button * @return */ protected Button createPreviousButton() { final NavigationButtonsPager<T> pager = this; Button panel = createNavigationButton(STYLE_PREVIOUS_BUTTON, new SelectHandler() { public void onSelect(SelectEvent event) { if(isEnabled()) { PageEvent pageEvent = PageEvent.fire(pager, getCurrentPage() - 1); if(!pageEvent.isCanceled()) { if(getCurrentPage() > 1) { previousPage(); } } } } } ); this.previousButton = panel; return panel; } @Override protected void onUpdate() { if(this.previousButton != null) { if(!hasPreviousPage() || !isEnabled()) { this.previousButton.addStyleDependentName(DISABLED); } else { this.previousButton.removeStyleDependentName(DISABLED); } } if(this.nextButton != null) { if(!hasNextPage() || !isEnabled()) { this.nextButton.addStyleDependentName(DISABLED); } else { this.nextButton.removeStyleDependentName(DISABLED); } } if(this.firstButton != null) { if(!hasPreviousPage() || !isEnabled()) { this.firstButton.addStyleDependentName(DISABLED); } else { this.firstButton.removeStyleDependentName(DISABLED); } } if(this.lastButton != null) { if(!hasNextPage() || !isEnabled()) { this.lastButton.addStyleDependentName(DISABLED); } else { this.lastButton.removeStyleDependentName(DISABLED); } } } @Override protected void setInteractionEnabled(boolean enabled) { super.setInteractionEnabled(enabled); previousButton.setEnabled(enabled); nextButton.setEnabled(enabled); firstButton.setEnabled(enabled); lastButton.setEnabled(enabled); } /** * Creates a generic navigation button * @param styleName * @param selectHandler * @return */ private Button createNavigationButton(String styleName, SelectHandler selectHandler) { Button button = new Button(); button.addStyleName(styleName); button.addSelectHandler(selectHandler); return button; } }