/******************************************************************************* * Copyright (c) 2016 Weasis Team and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Nicolas Roduit - initial API and implementation *******************************************************************************/ package org.weasis.core.api.gui.util; import java.awt.Color; import javax.swing.JPanel; import javax.swing.SpinnerNumberModel; import javax.swing.UIManager; import javax.swing.border.TitledBorder; import org.weasis.core.api.Messages; import org.weasis.core.api.util.StringUtil; public abstract class SliderCineListener extends SliderChangeListener { public enum TIME { SECOND, MINUTE, HOUR } private final TIME time; private final SpinnerNumberModel speedModel; public SliderCineListener(ActionW action, int min, int max, int value, int speed, TIME time, double mouseSensivity) { this(action, min, max, value, speed, time); setMouseSensivity(mouseSensivity); } public SliderCineListener(ActionW action, int min, int max, int value, int speed, TIME time) { super(action, min, max, value); this.time = time; speedModel = new SpinnerNumberModel(speed, 1, 60, 1); speedModel.addChangeListener(e -> setSpeed((Integer) ((SpinnerNumberModel) e.getSource()).getValue())); } public abstract void start(); public abstract void stop(); public abstract boolean isCining(); public int getSpeed() { return (Integer) speedModel.getValue(); } @Override public void updateSliderProoperties(JSliderW slider) { JPanel panel = (JPanel) slider.getParent(); int rate = getCurrentCineRate(); StringBuilder buffer = new StringBuilder(Messages.getString("SliderCineListener.img")); //$NON-NLS-1$ buffer.append(StringUtil.COLON_AND_SPACE); buffer.append(getValueToDisplay()); if (slider.isdisplayValueInTitle() && panel != null && panel.getBorder() instanceof TitledBorder) { if (rate > 0) { buffer.append(" - "); //$NON-NLS-1$ buffer.append(Messages.getString("SliderCineListener.cine")); //$NON-NLS-1$ buffer.append(StringUtil.COLON_AND_SPACE); buffer.append(rate); if (TIME.SECOND.equals(time)) { buffer.append(Messages.getString("SliderCineListener.fps")); //$NON-NLS-1$ } else if (TIME.MINUTE.equals(time)) { buffer.append(Messages.getString("SliderCineListener.fpm")); //$NON-NLS-1$ } else if (TIME.HOUR.equals(time)) { buffer.append(Messages.getString("SliderCineListener.fph")); //$NON-NLS-1$ } } ((TitledBorder) panel.getBorder()).setTitleColor( rate > 0 && rate < (getSpeed() - 1) ? Color.red : UIManager.getColor("TitledBorder.titleColor")); //$NON-NLS-1$ ((TitledBorder) panel.getBorder()).setTitle(buffer.toString()); panel.repaint(); } else { slider.setToolTipText(buffer.toString()); } } public int getCurrentCineRate() { return 0; } public void setSpeed(int speed) { speedModel.setValue(speed); } public SpinnerNumberModel getSpeedModel() { return speedModel; } }