package com.soundlooper.gui.customComponent.timeselection;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.scene.control.SkinBase;
import javafx.scene.layout.BorderPane;
import com.soundlooper.exception.PlayerException;
import com.soundlooper.model.SoundLooperPlayer;
import com.soundlooper.model.mark.Mark;
import com.soundlooper.system.util.MessagingUtil;
public class TimeSelectionViewSkin extends SkinBase<TimeSelectionView> {
private static final int MARGIN_LEFT = 30;
private static final int MARGIN_RIGHT = MARGIN_LEFT;
private static final int MARGIN_TOP = 5;
BorderPane borderPane = new BorderPane();
TimeTextFieldView timeTextFieldBegin;
TimeTextFieldView timeTextFieldEnd;
protected TimeSelectionViewSkin(TimeSelectionView control) {
super(control);
borderPane.setFocusTraversable(false);
control.setFocusTraversable(false);
timeTextFieldBegin = new TimeTextFieldView() {
@Override
public void setNewTime(int newTime) {
try {
SoundLooperPlayer.getInstance().setLoopPointBegin(newTime);
} catch (PlayerException e) {
MessagingUtil.displayError("Impossible de d�placer le marqueur de d�but", e);
}
}
};
timeTextFieldEnd = new TimeTextFieldView() {
@Override
public void setNewTime(int newTime) {
try {
SoundLooperPlayer.getInstance().setLoopPointEnd(newTime);
} catch (PlayerException e) {
MessagingUtil.displayError("Impossible de d�placer le marqueur de fin", e);
}
}
};
// borderPane.setBackground(new Background(new BackgroundFill(Color.RED,
// CornerRadii.EMPTY, Insets.EMPTY)));
borderPane.setLeft(timeTextFieldBegin);
borderPane.setRight(timeTextFieldEnd);
this.getChildren().add(borderPane);
timeTextFieldBegin.timeProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number arg2) {
control.forceLayout();
}
});
timeTextFieldEnd.timeProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number arg2) {
control.forceLayout();
}
});
initBinding();
}
@Override
protected void layoutChildren(double contentX, double contentY, double contentWidth, double contentHeight) {
borderPane.resize(contentWidth, 35);
borderPane.setPadding(new Insets(MARGIN_TOP, MARGIN_RIGHT, 0, MARGIN_LEFT));
}
public void initBinding() {
SoundLooperPlayer soundLooperPlayer = getSkinnable().getSoundLooperPlayer();
Mark currentMark = soundLooperPlayer.getCurrentMark();
if (currentMark != null) {
timeTextFieldBegin.timeProperty().bind(currentMark.beginMillisecondProperty());
timeTextFieldEnd.timeProperty().bind(currentMark.endMillisecondProperty());
getSkinnable().forceLayout();
}
soundLooperPlayer.markProperty().addListener(new ChangeListener<Mark>() {
@Override
public void changed(ObservableValue<? extends Mark> observable, Mark oldMark, Mark newMark) {
// Unbind old mark
if (oldMark != null) {
timeTextFieldBegin.timeProperty().unbind();
timeTextFieldEnd.timeProperty().unbind();
}
// bind new mark
if (newMark != null) {
timeTextFieldBegin.timeProperty().bind(newMark.beginMillisecondProperty());
timeTextFieldEnd.timeProperty().bind(newMark.endMillisecondProperty());
}
}
});
}
}