/*
 * Apocalypse Laboratories
 * Open Source License
 *
 * Source code can be used for any purpose, as long as:
 *  - Compiled binaries are rebranded and trademarks are not
 *    visible by the end user at any time, except to give
 *    credit to Apocalypse Laboratories, such as by showing
 *    "Based on <product> by Apocalypse Laboratories" or a
 *    similar notice;
 *  - You do not use the code for evil;
 *  - Rebranded compiled applications have significant
 *    differences in functionality;
 *  - and you provide your modified source code for download,
 *    under the terms of the GNU LGPL v3 or a comparable
 *    license.
 *
 * Compiled binaries cannot be redistributed or mirrored,
 * unless:
 *  - You have written permission from Apocalypse Laboratories;
 *  - Downloads are not available from Apocalypse Laboratories,
 *    not even behind a paywall or other blocking mechanism;
 *  - or you have received a multi-computer license, in which
 *    case you should take measures to prevent unauthorized
 *    downloads, such as preventing download access from the
 *    Internet.
 */
package net.apocalypselabs.symat;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * This is a panel for scale settings.  It is shown in a JOptionPane.
 * @author Skylar
 */
public class GraphScale extends javax.swing.JPanel {

    /**
     * Creates new form GraphSettings
     */
    public GraphScale() {
        initComponents();
    }

    public GraphScale(int scale) {
        this();
        scaleSpinner.setValue(scale);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        scaleSpinner = new javax.swing.JSpinner();
        helpLbl = new javax.swing.JLabel();
        scaleLbl = new javax.swing.JLabel();

        scaleSpinner.setModel(new javax.swing.SpinnerNumberModel());
        scaleSpinner.setEditor(new javax.swing.JSpinner.NumberEditor(scaleSpinner, ""));
        scaleSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                scaleSpinnerStateChanged(evt);
            }
        });

        helpLbl.setText("Set detail level for graph (larger is finer):");

        scaleLbl.setText("1 tick = 1 x");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(helpLbl)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(scaleSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(scaleLbl, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(helpLbl)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(scaleSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(scaleLbl))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void scaleSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_scaleSpinnerStateChanged
        double scale = Graph.getScale((int) scaleSpinner.getValue());
        BigDecimal bd = new BigDecimal(scale);
        bd = bd.setScale(6, RoundingMode.HALF_UP);
        scaleLbl.setText("1 tick = " + String.valueOf(bd.doubleValue()) + " x");
    }//GEN-LAST:event_scaleSpinnerStateChanged

    /**
     * Get the chosen scale.
     *
     * @return the scale.
     */
    public int getScale() {
        return (int) scaleSpinner.getValue();
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel helpLbl;
    private javax.swing.JLabel scaleLbl;
    private javax.swing.JSpinner scaleSpinner;
    // End of variables declaration//GEN-END:variables
}
