001/*
002 * This file is part of McIDAS-V
003 *
004 * Copyright 2007-2015
005 * Space Science and Engineering Center (SSEC)
006 * University of Wisconsin - Madison
007 * 1225 W. Dayton Street, Madison, WI 53706, USA
008 * https://www.ssec.wisc.edu/mcidas
009 * 
010 * All Rights Reserved
011 * 
012 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
013 * some McIDAS-V source code is based on IDV and VisAD source code.  
014 * 
015 * McIDAS-V is free software; you can redistribute it and/or modify
016 * it under the terms of the GNU Lesser Public License as published by
017 * the Free Software Foundation; either version 3 of the License, or
018 * (at your option) any later version.
019 * 
020 * McIDAS-V is distributed in the hope that it will be useful,
021 * but WITHOUT ANY WARRANTY; without even the implied warranty of
022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
023 * GNU Lesser Public License for more details.
024 * 
025 * You should have received a copy of the GNU Lesser Public License
026 * along with this program.  If not, see http://www.gnu.org/licenses.
027 */
028
029package edu.wisc.ssec.mcidasv.startupmanager.options;
030
031import javax.swing.JComponent;
032import javax.swing.JLabel;
033import javax.swing.JPanel;
034import javax.swing.JSlider;
035import javax.swing.event.ChangeEvent;
036import javax.swing.event.ChangeListener;
037
038import ucar.unidata.util.GuiUtils;
039
040import edu.wisc.ssec.mcidasv.startupmanager.StartupManager;
041import edu.wisc.ssec.mcidasv.startupmanager.options.OptionMaster.OptionPlatform;
042import edu.wisc.ssec.mcidasv.startupmanager.options.OptionMaster.Type;
043import edu.wisc.ssec.mcidasv.startupmanager.options.OptionMaster.Visibility;
044
045public class SliderOption extends AbstractOption {
046    
047    private final int minValue = 10;
048    
049    private final int maxValue = 80;
050    
051    private final int total;
052    
053    private int sliderValue = minValue;
054    
055    public SliderOption(final String id, final String label, 
056            final String defaultValue, final OptionPlatform optionPlatform, 
057            Visibility optionVisibility) 
058    {
059        super(id, label, Type.SLIDER, optionPlatform, optionVisibility);
060        total = StartupManager.getInstance().getPlatform().getAvailableMemory();
061        setValue(defaultValue);
062    }
063    
064    private ChangeListener makeChangeListener(final JLabel sliderLabel) {
065        return new ChangeListener() {
066            public void stateChanged(ChangeEvent evt) {
067                JSlider src = (JSlider)evt.getSource();
068                int value = src.getValue();
069                sliderLabel.setText("Use "+value+"% ");
070                setValue(Integer.toString(value));
071            }
072        };
073    }
074    
075    public JPanel getComponent() {
076        JLabel sliderLabel = new JLabel("Use "+sliderValue+"% ");
077        JLabel postLabel = new JLabel(" of available memory ("+total+"mb)");
078        
079        ChangeListener listener = makeChangeListener(sliderLabel);
080        
081        JComponent[] sliderComps = GuiUtils.makeSliderPopup(minValue, maxValue+1, sliderValue, listener);
082        JSlider slider = (JSlider)sliderComps[1];
083        slider.setMinorTickSpacing(5);
084        slider.setMajorTickSpacing(10);
085        slider.setSnapToTicks(true);
086        slider.setExtent(1);
087        slider.setPaintTicks(true);
088        slider.setPaintLabels(true);
089        sliderComps[0].setToolTipText("Set maximum memory by percent");
090        
091        JPanel sliderPanel = GuiUtils.hbox(sliderLabel, sliderComps[0], postLabel);
092        return sliderPanel;
093    }
094    
095    public String getValue() {
096        return Integer.toString(sliderValue)+"P";
097    }
098    
099    public void setValue(final String newValue) {
100        int endIndex = newValue.length();
101        if (newValue.endsWith("P")) {
102            endIndex = endIndex - 1;
103        }
104        int test = Integer.parseInt(newValue.substring(0, endIndex));
105        if (test >= 0) {
106            sliderValue = test;
107        }
108    }
109    
110    public String toString() {
111        return String.format("[SliderOption@%x: optionId=%s, value=%s]", hashCode(), getOptionId(), getValue());
112    }
113}