/*
*
*/
package xplayer.presenter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.jfoenix.controls.JFXButton;
import application.tools.InfoTool;
import customnodes.DJFilter;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.scene.control.MenuButton;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.TilePane;
import javafx.scene.paint.Color;
/**
* The Class XPlayerEqualizer.
*/
public class XPlayerEqualizer extends BorderPane {
@FXML
private TilePane tilePane;
@FXML
private HBox bottomHBox;
@FXML
private JFXButton resetFilters;
@FXML
private MenuButton effects;
//----------------------------------------------------
/** The logger for this class */
private final Logger logger = Logger.getLogger(getClass().getName());
/** The color. */
Color color = Color.BLUEVIOLET;
/** The pan filter. */
DJFilter panFilter;
/** The balance filter. */
DJFilter balanceFilter;
/** The amplitude filter. */
DJFilter amplitudeFilter;
/** The x player UI. */
XPlayerController xPlayerUI;
/** The filters. */
Filter[] filters = new Filter[32];
private final double[] PRESET_NORMAL = { 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 };
private final double[] PRESET_CLASSICAL = { 50, 50, 50, 50, 50, 50, 70, 70, 70, 76 };
private final double[] PRESET_CLUB = { 50, 50, 42, 34, 34, 34, 42, 50, 50, 50 };
private final double[] PRESET_DANCE = { 26, 34, 46, 50, 50, 66, 70, 70, 50, 50 };
private final double[] PRESET_FULLBASS = { 26, 26, 26, 36, 46, 62, 76, 78, 78, 78 };
private final double[] PRESET_FULLBASSTREBLE = { 34, 34, 50, 68, 62, 46, 28, 22, 18, 18 };
private final double[] PRESET_FULLTREBLE = { 78, 78, 78, 62, 42, 24, 8, 8, 8, 8 };
private final double[] PRESET_LAPTOP = { 38, 22, 36, 60, 58, 46, 38, 24, 16, 14 };
private final double[] PRESET_LIVE = { 66, 50, 40, 36, 34, 34, 40, 42, 42, 42 };
private final double[] PRESET_PARTY = { 32, 32, 50, 50, 50, 50, 50, 50, 32, 32 };
private final double[] PRESET_POP = { 56, 38, 32, 30, 38, 54, 56, 56, 54, 54 };
private final double[] PRESET_REGGAE = { 48, 48, 50, 66, 48, 34, 34, 48, 48, 48 };
private final double[] PRESET_ROCK = { 32, 38, 64, 72, 56, 40, 28, 24, 24, 24 };
private final double[] PRESET_TECHNO = { 30, 34, 48, 66, 64, 48, 30, 24, 24, 28 };
/** The filter buttons. */
//where 0.0 is equivalent to 0.50 for FilterButton
FilterButton[] filterButtons = new FilterButton[] { new FilterButton("Normal", PRESET_NORMAL), new FilterButton("Classical", PRESET_CLASSICAL),
new FilterButton("Club", PRESET_CLUB), new FilterButton("Dance", PRESET_DANCE), new FilterButton("FullBass", PRESET_FULLBASS),
new FilterButton("FullBassTreble", PRESET_FULLBASSTREBLE), new FilterButton("FullTreble", PRESET_FULLTREBLE),
new FilterButton("Laptop", PRESET_LAPTOP), new FilterButton("Live", PRESET_LIVE), new FilterButton("Party", PRESET_PARTY),
new FilterButton("Pop", PRESET_POP), new FilterButton("Reggae", PRESET_REGGAE), new FilterButton("Rock", PRESET_ROCK),
new FilterButton("Techno", PRESET_TECHNO) };
/**
* Constructor.
*
* @param xPlayerUI
* the x player UI
*/
public XPlayerEqualizer(XPlayerController xPlayerUI) {
//Vars
this.xPlayerUI = xPlayerUI;
color = xPlayerUI.getDiscColor();
// ----------------------------------FXMLLoader-------------------------------------
FXMLLoader loader = new FXMLLoader(getClass().getResource(InfoTool.FXMLS + "XPlayerEqualizer.fxml"));
loader.setController(this);
loader.setRoot(this);
// -------------Load the FXML-------------------------------
try {
loader.load();
} catch (IOException ex) {
logger.log(Level.WARNING, "", ex);
}
}
/**
* Called as soon as FXML file has been loaded
*/
@FXML
private void initialize() {
// TilePane
for (int counter = 0; counter < 32; counter++)
filters[counter] = new Filter(36, 36, counter);
tilePane.getChildren().addAll(filters);
//resetFilers
resetFilters.setOnAction(action -> {
//Balance
balanceFilter.setAngle(100, 200);
xPlayerUI.getxPlayer().setBalance((float) 0.0);
//Pan
panFilter.setAngle(100, 200);
xPlayerUI.getxPlayer().setPan(0.0);
//Reset the equalizer
for (int i = 0; i < 32; i++)
xPlayerUI.getxPlayerModel().getEqualizerArray()[i] = 0.0f;
xPlayerUI.getxPlayer().setEqualizer(xPlayerUI.getxPlayerModel().getEqualizerArray(), 32);
for (Filter filter : filters)
filter.resetToZero();
});
// Add all
effects.getItems().clear();
effects.getItems().addAll(filterButtons);
//-------------------------- Extra Filters--------------------------
// -- panFilter
panFilter = new DJFilter(2, 2, 36, 36, Color.GOLD);
panFilter.setOnMouseDragged(drag -> {
panFilter.onMouseDragged(drag);
xPlayerUI.getxPlayer().setPan(panFilter.getValue(200));
});
// --balanceFilter
balanceFilter = new DJFilter(40, 2, 36, 36, Color.GOLD);
balanceFilter.setOnMouseDragged(drag -> {
balanceFilter.onMouseDragged(drag);
xPlayerUI.getxPlayer().setBalance(balanceFilter.getValue(200));
});
bottomHBox.getChildren().addAll(panFilter, balanceFilter);
}
/**
* The Class Filter.
*/
public class Filter extends DJFilter {
/** The position. */
int position;
/**
* Constructor.
*
* @param width
* the width
* @param height
* the height
* @param position
* the position
*/
public Filter(int width, int height, int position) {
super(width, height, color);
this.position = position;
setPadding(new Insets(5, 5, 5, 5));
setOnMouseDragged(m -> {
//Draw the filter
super.onMouseDragged(m);
//Add the filter
xPlayerUI.getxPlayerModel().getEqualizerArray()[position] = getValue(200);
xPlayerUI.getxPlayer().setEqualizerKey(xPlayerUI.getxPlayerModel().getEqualizerArray()[position], position);
});
}
/** Reset to 0.0f */
public void resetToZero() {
setAngle(100, 200);
}
}
/**
* The Class FilterButton.
*/
public class FilterButton extends MenuItem {
/** The vars. */
double[] vars;
/**
* Instantiates a new filter button.
*
* @param text
* the text
* @param variables
* the variables
*/
public FilterButton(String text, double[] variables) {
vars = variables;
setText(text);
for (int i = 0; i < variables.length; i++)
variables[i] = variables[i] / 100.00 - 0.5;
// System.out.println(variables[0])
setOnAction(action -> {
// Pass the values to the array
for (int y = 0; y < 10; y++)
xPlayerUI.getxPlayerModel().getEqualizerArray()[y] = (float) vars[y];
// Set the filter
xPlayerUI.getxPlayer().setEqualizer(xPlayerUI.getxPlayerModel().getEqualizerArray(), 32);
// Change the angles on the filters
for (int i = 0; i < 10; i++)
filters[i].setAngle(xPlayerUI.getxPlayerModel().getEqualizerArray()[i], 200);
});
}
}
}