/*
* SetValueDialog.java - Copyright(c) 2014 Joe Pasqua
* Provided under the MIT License. See the LICENSE file for details.
* Created: Feb 16, 2014
*/
package org.noroomattheinn.visibletesla.dialogs;
import org.noroomattheinn.fxextensions.VTDialog;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Hyperlink;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.stage.Stage;
/**
* SetChargeDialog
*
* @author Joe Pasqua <joe at NoRoomAtTheInn dot org>
*/
public class SetChargeDialog extends VTDialog.Controller {
/*------------------------------------------------------------------------------
*
* Internal State
*
*----------------------------------------------------------------------------*/
private double finalValue;
private boolean cancelled;
/*------------------------------------------------------------------------------
*
* Internal State - UI Components
*
*----------------------------------------------------------------------------*/
@FXML private Button okButton;
@FXML private Button cancelButton;
@FXML private Slider chargeSlider;
@FXML private Label chargeLabel;
@FXML private Hyperlink stdLink;
@FXML private Hyperlink maxLink;
@FXML private CheckBox useCarSetpoint;
/*------------------------------------------------------------------------------
*
* UI Initialization and Action Handlers
*
*----------------------------------------------------------------------------*/
@FXML private void initialize() {
cancelled = true;
finalValue = -1;
bind(chargeSlider, chargeLabel);
useCarSetpoint.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
chargeSlider.setDisable(t1);
chargeLabel.setDisable(t1);
}
});
}
@FXML private void buttonHandler(ActionEvent event) {
Button b = (Button)event.getSource();
if (b == okButton) {
cancelled = false;
finalValue = Math.round(chargeSlider.getValue());
} else if (b == cancelButton) {
cancelled = true;
finalValue = -1;
}
dialogStage.close();
}
@FXML private void rangeLinkHandler(ActionEvent event) {
Hyperlink h = (Hyperlink)event.getSource();
chargeSlider.setValue((h == stdLink) ? 90 : 100);
}
/*==============================================================================
* ------- -------
* ------- Public Interface To This Class -------
* ------- -------
*============================================================================*/
public static SetChargeDialog show(Stage stage, Double initCharge) {
SetChargeDialog scd = VTDialog.<SetChargeDialog>load(
SetChargeDialog.class.getResource("SetChargeDialog.fxml"),
"Target Charge Level", stage);
scd.setInitialValues(initCharge);
scd.show();
return scd;
}
public double getValue() { return finalValue; }
public boolean cancelled() { return cancelled; }
public boolean useCarsValue() { return useCarSetpoint.isSelected(); }
/*------------------------------------------------------------------------------
*
* PRIVATE - Utility Methods
*
*----------------------------------------------------------------------------*/
public void setInitialValues(Double initCharge) {
if (initCharge != null && initCharge > 0) {
chargeSlider.setValue(initCharge);
this.useCarSetpoint.setSelected(false);
} else {
this.useCarSetpoint.setSelected(true);
}
}
private void bind(final Slider slider, final Label label) {
label.setText(Math.round(slider.getValue()) + "");
slider.valueProperty().addListener(new ChangeListener<Number>() {
@Override public void changed(ObservableValue<? extends Number> observableValue,
Number oldValue, Number newValue) {
if (newValue == null) {
label.setText("...");
} else {
label.setText(String.valueOf(newValue.intValue()));
}
}
});
}
}