package org.appwork.utils.swing; import javax.swing.SpinnerNumberModel; /** * A spinnermodel for filesizes. */ public class SpinnerFilesizeModel extends SpinnerNumberModel { private static final long serialVersionUID = 8892296746389046229L; public SpinnerFilesizeModel(int value, int minimum, int maximum) { super(value, minimum, maximum, 1); } @Override public Object getNextValue() { try { int step = getStep(); Integer ret = (Integer) super.getNextValue() / step; return ret * step; } catch (Exception e) { return null; } } private int getStep() { Integer value = (Integer) this.getValue(); int step; if (value < 10 * 1000) { step = 1000; } else { int base = (int) Math.pow(1000, (int) (Math.log(value) / Math.log(1000))); step = value / base; step = (int) (Math.log(step) / Math.log(10)); step = (int) Math.pow(10, step) / 10; step = Math.max(step * base, base / 10); } this.setStepSize(step); return step; } @Override public Object getPreviousValue() { try { int step = getStep(); Integer ret = (Integer) super.getPreviousValue() / step; return ret * step; } catch (Exception e) { return null; } } }