Package de.sciss.eisenkraut.gui

Source Code of de.sciss.eisenkraut.gui.VolumeFader

/*
*  VolumeFader.java
*  Eisenkraut
*
*  Copyright (c) 2004-2014 Hanns Holger Rutz. All rights reserved.
*
*  This software is published under the GNU General Public License v3+
*
*
*  For further information, please contact Hanns Holger Rutz at
*  contact@sciss.de
*
*
*  Changelog:
*    10-Apr-08  created from ControlRoomFrame
*/
package de.sciss.eisenkraut.gui;

import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Dictionary;
import java.util.Enumeration;

import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import de.sciss.app.AbstractApplication;
import de.sciss.app.GraphicsHandler;
import de.sciss.eisenkraut.math.MathUtil;

/**
@author    Hanns Holger Rutz
@version  0.70, 10-Apr-08
*/
public class VolumeFader
extends JSlider
{
  protected boolean isZero = true;
 
  public VolumeFader()
  {
    super( SwingConstants.VERTICAL, -72, 18, 0 );

    final GraphicsHandler  gh;
    final Dictionary    dictVolume;
    final Font        fnt;
//    final Font        fntBold;
    final JLabel      lbZero;
    JLabel          lb, lbZeroTmp = null;

    putClientProperty( "JSlider.isFilled", Boolean.TRUE )// used by Metal-lnf
    dictVolume = createStandardLabels( 12 );
    setMinorTickSpacing( 3 );
    setMajorTickSpacing( 12 );
    gh  = AbstractApplication.getApplication().getGraphicsHandler();
    fnt = gh.getFont( GraphicsHandler.FONT_LABEL | GraphicsHandler.FONT_MINI );
//    fntBold = gh.getFont( GraphicsHandler.FONT_BOLDSYSTEM | GraphicsHandler.FONT_MINI );
    for( Enumeration en = dictVolume.elements(); en.hasMoreElements(); ) {
      lb = (JLabel) en.nextElement();
      if( lb.getText().equals( "-72" )) lb.setText( "-\u221E" );
      if( lb.getText().equals( "0" )) {
//        lb.setFont( fntBold );
        lbZeroTmp = lb;
        lb.setText( "0\u25C0" );
//      } else {
//        lb.setFont( fnt );
      }
      lb.setFont( fnt );
    }
    lbZero = lbZeroTmp;
    setLabelTable( dictVolume );
    setPaintTicks( true );
    setPaintLabels( true );
    setValue( 0 );
   
    addMouseListener( new MouseAdapter() {
//      private boolean alt = false;
     
      public void mouseClicked( MouseEvent e )
      {
//        alt = e.isAltDown();
        if( e.isAltDown() ) resetVolume();
      }
     
//      // required for motif-lnf!
//      public void mouseReleased( MouseEvent e )
//      {
//        if( alt && (getValue() == 0) ) {
//          System.out.println( "BANG!" );
//          resetVolume();
//        }
//      }
    });
    if( lbZero != null ) addChangeListener( new ChangeListener() {
      public void stateChanged( ChangeEvent e )
      {
        if( isZero ) {
          if( getValue() != 0 ) {
            isZero = false;
            lbZero.setText( "0" );
//            lbZero.setFont( fnt );
            repaint();
          }
        } else {
          if( getValue() == 0 ) {
            isZero = true;
//            lbZero.setText( "<HTML><U>0</U></HTML>" );
            lbZero.setText( "0\u25C0" );
//            lbZero.setFont( fntBold );
            repaint();
          }
        }
      }
    });
   
  }

  public void resetVolume()
  {
    setValue( 0 );
  }

  public float getVolumeDecibels()
  {
    final int db = getValue();
    return db == -72 ? Float.NEGATIVE_INFINITY : db;
  }
 
  public float getVolumeLinear()
  {
    final int db = getValue();
    return db == -72 ? 0f : (float) MathUtil.dBToLinear( db );
  }
 
  public void setVolumeDecibels( float db )
  {
    setValue( Math.max( -72, (int) (db + 0.5f) ));
  }

  public void setVolumeLinear( float linear )
  {
    final int db = linear == 0f ? -72 : Math.max( -72, Math.min( 18, (int) (MathUtil.linearToDB( linear ) + 0.5) ));
    setValue( db );
  }
}
TOP

Related Classes of de.sciss.eisenkraut.gui.VolumeFader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.