/**
* CameraViewControl.java
*
* Copyright (c) 2013-2016, F(X)yz
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of F(X)yz, any associated website, nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL F(X)yz BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.fxyz3d.controls;
import javafx.beans.property.BooleanProperty;
import javafx.fxml.FXML;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.SubScene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import org.fxyz3d.scene.CameraView;
/**
* FXML Controller class
*
* @author Jason Pollastrini aka jdub1581
*/
public class CameraViewControl extends ControlBase<BooleanProperty>{
@FXML
private Label label;
@FXML
private CheckBox controlsEnabled;
@FXML
private VBox container;
private final CameraView view;
public CameraViewControl(BooleanProperty enabled, SubScene subScene, StackPane parentPane) {
super("/org/fxyz3d/controls/CameraViewControl.fxml", enabled);
this.view = new CameraView(subScene);
this.view.setFitWidth(200);
this.view.setFitHeight(150);
this.view.setSmooth(true);
this.controlsEnabled.selectedProperty().addListener(l->{
if(controlsEnabled.isSelected()){
view.setFirstPersonNavigationEabled(true);
}else if(!controlsEnabled.isSelected()){
view.setFirstPersonNavigationEabled(false);
}
});
container.getChildren().add(1, view);
final ComboBox<Pos> positions = new ComboBox<>();
positions.getItems().addAll(Pos.TOP_LEFT, Pos.TOP_RIGHT, Pos.BOTTOM_LEFT, Pos.BOTTOM_RIGHT);
positions.getSelectionModel().selectLast();
positions.valueProperty().addListener(l->{
switch(positions.getValue()){
case TOP_LEFT:
StackPane.setAlignment(CameraViewControl.this, Pos.TOP_LEFT);
break;
case TOP_RIGHT:
StackPane.setAlignment(CameraViewControl.this, Pos.TOP_RIGHT);
break;
case BOTTOM_LEFT:
StackPane.setAlignment(CameraViewControl.this, Pos.BOTTOM_LEFT);
break;
case BOTTOM_RIGHT:
StackPane.setAlignment(CameraViewControl.this, Pos.BOTTOM_RIGHT);
break;
}
});
positions.setPrefSize(USE_COMPUTED_SIZE, USE_PREF_SIZE);
container.getChildren().add(positions);
parentPane.getChildren().add(CameraViewControl.this);
enabled.addListener(l->{
if(enabled.getValue()){
view.startViewing();
}else{
}
});
StackPane.setMargin(CameraViewControl.this, new Insets(120));
}
}