/* PageSelectionModelProvider.java created 2007-10-04 * */ package org.signalml.app.model.components; import javax.swing.AbstractSpinnerModel; /** PageSelectionModelProvider * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class PageSelectionModelProvider { private int maxPage; private int currentPage; private int currentLength; private StartPageSpinnerModel startPageSpinnerModel; private LengthSpinnerModel lengthSpinnerModel; public PageSelectionModelProvider(int maxPage, int currentPage, int currentLength) { this.maxPage = maxPage; this.currentPage = currentPage; this.currentLength = currentLength; startPageSpinnerModel = new StartPageSpinnerModel(); lengthSpinnerModel = new LengthSpinnerModel(); } public int getMaxPage() { return maxPage; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { startPageSpinnerModel.setValue(currentPage); } public int getCurrentLength() { return currentLength; } public void setCurrentLength(int currentLength) { lengthSpinnerModel.setValue(currentLength); } public StartPageSpinnerModel getStartPageSpinnerModel() { return startPageSpinnerModel; } public LengthSpinnerModel getLengthSpinnerModel() { return lengthSpinnerModel; } private class StartPageSpinnerModel extends AbstractSpinnerModel implements BoundedSpinnerModel { @Override public Object getNextValue() { return (currentPage < maxPage ? new Integer(currentPage+1) : null); } @Override public Object getPreviousValue() { return (currentPage > 1 ? new Integer(currentPage-1) : null); } @Override public Object getValue() { return new Integer(currentPage); } @Override public void setValue(Object value) throws IllegalArgumentException { int page = ((Integer) value).intValue(); if (page < 1 || page > maxPage) { throw new IllegalArgumentException(); } if (page != currentPage) { currentPage = page; fireStateChanged(); lengthSpinnerModel.update(); } } @Override public Comparable<? extends Number> getMaximum() { return new Integer(maxPage); } @Override public Comparable<? extends Number> getMinimum() { return new Integer(1); } } private class LengthSpinnerModel extends AbstractSpinnerModel implements BoundedSpinnerModel { @Override public Object getNextValue() { return (currentPage + currentLength - 1 < maxPage ? new Integer(currentLength+1) : null); } @Override public Object getPreviousValue() { return (currentLength > 1 ? new Integer(currentLength-1) : null); } @Override public Object getValue() { return new Integer(currentLength); } @Override public void setValue(Object value) { int length = ((Integer) value).intValue(); if (length < 1 || length > (maxPage+1-currentPage)) { throw new IllegalArgumentException(); } if (length != currentLength) { currentLength = length; fireStateChanged(); } } public void update() { if (currentLength > (maxPage+1-currentPage)) { setValue(new Integer(maxPage+1-currentPage)); } fireStateChanged(); } @Override public Comparable<? extends Number> getMaximum() { return new Integer(maxPage+1-currentPage); } @Override public Comparable<? extends Number> getMinimum() { return new Integer(1); } } }