/**
*
*/
package xplayer.visualizer.view;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import application.tools.InfoTool;
import javafx.animation.FadeTransition;
import javafx.animation.PauseTransition;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.input.KeyCode;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.util.Duration;
import xplayer.presenter.XPlayerController;
import xplayer.visualizer.model.VisualizerModel;
/**
*
* This class extends a StackPane which must have as a children a Visualizer
*
* @author GOXR3PLUS
*
*/
public class VisualizerStackController extends StackPane {
@FXML
private Button next;
@FXML
private Label visualizerTypeLabel;
@FXML
private Button previous;
// --------------------------------------
private FadeTransition fadeTransition;
/** The pause transition. */
private PauseTransition pauseTransition = new PauseTransition(Duration.millis(900));
/**
* Constructor
*/
public VisualizerStackController() {
// ----------------- FXMLLoader----------------------
FXMLLoader loader = new FXMLLoader(getClass().getResource(InfoTool.FXMLS + "VisualizerStackController.fxml"));
loader.setController(this);
loader.setRoot(this);
try {
loader.load();
} catch (IOException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "VisualizerStackController FXML can't be loaded!", ex);
}
}
/** Called as soon as the .fxml has been loaded */
@FXML
private void initialize() {
// fadeTranstion
fadeTransition = new FadeTransition(Duration.millis(1500), visualizerTypeLabel);
fadeTransition.setFromValue(1.0);
fadeTransition.setToValue(0.0);
visualizerTypeLabel.setOpacity(0);
// --- MouseListeners
addEventHandler(MouseEvent.MOUSE_MOVED, m -> {
pauseTransition.playFromStart();
previous.setVisible(true);
next.setVisible(true);
});
// PauseTransition
pauseTransition.setOnFinished(f -> {
if (!previous.isHover() && !next.isHover()) {
previous.setVisible(false);
next.setVisible(false);
}
});
pauseTransition.playFromStart();
}
/**
* Replays the fade effect to show the new type of visualizer
*
* @param text
*/
public void replayLabelEffect(String text) {
visualizerTypeLabel.setText(text);
fadeTransition.playFromStart();
}
XPlayerController xPlayerController;
/**
* Add the listeners to the Next and Previous Buttons
*
* @param xPlayerController1
*/
public void addListenersToButtons(XPlayerController xPlayerController1) {
this.xPlayerController = xPlayerController1;
// previous
previous.setOnAction(a -> previousSpectrumAnalyzer());
// next
next.setOnAction(a -> nextSpectrumAnalyzer());
// -- KeyListeners
setOnKeyReleased(key -> {
if (key.getCode() == KeyCode.RIGHT)
nextSpectrumAnalyzer();
else if (key.getCode() == KeyCode.LEFT)
previousSpectrumAnalyzer();
});
// --- Mouse Listeners
setOnMouseEntered(m -> {
if (!isFocused())
requestFocus();
});
// --- Mouse Scroll Listeners
setOnScroll(scroll -> {
//Delta Y
if (scroll.getDeltaY() > 0)
xPlayerController.adjustVolume(1);
else if (scroll.getDeltaY() < 0)
xPlayerController.adjustVolume(-1);
//Delta X
if (scroll.getDeltaX() < 0)
nextSpectrumAnalyzer();
else if (scroll.getDeltaX() > 0)
previousSpectrumAnalyzer();
if (scroll.getDeltaY() != 0)
replayLabelEffect("Vol: " + xPlayerController1.getVolume());
});
}
/**
* Goes to the next Spectrum Analyzer
*/
public void nextSpectrumAnalyzer() {
xPlayerController.getVisualizer().displayMode.set((xPlayerController.getVisualizer().displayMode.get() + 1 > VisualizerModel.DISPLAYMODE_MAXIMUM) ? 0
: xPlayerController.getVisualizer().displayMode.get() + 1);
}
/**
* Goes to the previous Spectrum Analyzer
*/
public void previousSpectrumAnalyzer() {
xPlayerController.getVisualizer().displayMode
.set(xPlayerController.getVisualizer().displayMode.get() - 1 >= 0 ? xPlayerController.getVisualizer().displayMode.get() - 1
: VisualizerModel.DISPLAYMODE_MAXIMUM);
}
}