package tk.captainsplexx.JavaFX.Windows;
import java.io.IOException;
import org.lwjgl.opengl.Display;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import javafx.util.Callback;
import tk.captainsplexx.Entity.Entity;
import tk.captainsplexx.Entity.Layer.EntityLayer;
import tk.captainsplexx.Game.Core;
import tk.captainsplexx.JavaFX.JavaFXHandler;
import tk.captainsplexx.JavaFX.TreeViewEntry;
import tk.captainsplexx.JavaFX.TreeViewUtils;
import tk.captainsplexx.JavaFX.CellFactories.JavaFXexplorer1TCF;
import tk.captainsplexx.JavaFX.CellFactories.JavaFXexplorerTCF;
import tk.captainsplexx.JavaFX.CellFactories.JavaFXlayerTCF;
import tk.captainsplexx.JavaFX.Controller.ToolsWindowController;
import tk.captainsplexx.Resource.EBX.Structure.EBXStructureFile;
public class ToolsWindow {
private Stage stage;
private FXMLLoader loader;
private ToolsWindowController controller;
private Scene scene;
private Parent parent;
private TreeItem<TreeViewEntry> unfilteredExplorer1Root = null;
private TreeItem<TreeViewEntry> filteredExplorer1Root = null;
public ToolsWindow() {
stage = new Stage();
try {
loader = new FXMLLoader(getClass().getResource("ToolsWindow.fxml"));
parent = loader.load();
controller = loader.getController();
} catch (IOException e) {
e.printStackTrace();
}
scene = new Scene(parent, 275, 700);
stage.setX(Display.getDesktopDisplayMode().getWidth()*0.01f);
stage.setY(Display.getDesktopDisplayMode().getHeight()/2-(scene.getHeight()/2));
stage.setTitle("Tools / Explorer");
stage.getIcons().add(JavaFXHandler.applicationIcon16);
stage.getIcons().add(JavaFXHandler.applicationIcon32);
stage.setScene(scene);
stage.hide();
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent e) {
e.consume();
}
});
controller.getExplorer().setCellFactory(new Callback<TreeView<TreeViewEntry>,TreeCell<TreeViewEntry>>(){
@Override
public TreeCell<TreeViewEntry> call(TreeView<TreeViewEntry> p) {
return new JavaFXexplorerTCF();
}
});
controller.getExplorer().setEditable(false);
controller.getExplorer().setPrefWidth(Display.getDesktopDisplayMode().getWidth());
controller.getExplorer().setPrefHeight(Display.getDesktopDisplayMode().getHeight()); //Back to top in TCF or what ?
controller.getExplorer1().setCellFactory(new Callback<TreeView<TreeViewEntry>,TreeCell<TreeViewEntry>>(){
@Override
public TreeCell<TreeViewEntry> call(TreeView<TreeViewEntry> p) {
return new JavaFXexplorer1TCF();
}
});
controller.getExplorer1().setEditable(false);
controller.getExplorer1().setPrefWidth(Display.getDesktopDisplayMode().getWidth());
controller.getExplorer1().setPrefHeight(Display.getDesktopDisplayMode().getHeight());
//controller.getLayer().getItems().addAll("Test","Testsss","Testtssst");
controller.getLayer().valueProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
System.err.println("Old: "+oldValue+" New: "+newValue);
}
});
controller.getVariationDatabase().valueProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
handleVariationDatabaseChange(newValue);
}
});
/*controller.getVariationDatabase().setOnMouseClicked(new EventHandler<Event>() {
@Override
public void handle(Event event) {
handleVariationDatabase(controller.getVariationDatabase().getValue());
}
});*/
controller.getLayerTreeView().setEditable(false);
controller.getLayerTreeView().setPrefWidth(Display.getDesktopDisplayMode().getWidth());
controller.getLayerTreeView().setPrefHeight(Display.getDesktopDisplayMode().getHeight()); //Back to top in TCF or what ?
controller.getLayerTreeView().setCellFactory(new Callback<TreeView<Entity>,TreeCell<Entity>>(){
@Override
public TreeCell<Entity> call(TreeView<Entity> p) {
return new JavaFXlayerTCF();
}
});
controller.getConsiderPitchBox().setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
CheckBox considerBox = controller.getConsiderPitchBox();
if (considerBox.isSelected()){
Core.getRender().getCamera().setConsiderPitch(true);
}else{
Core.getRender().getCamera().setConsiderPitch(false);
}
}
});
controller.getMouseSensitivity().valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> ov, Number old_val, Number new_val) {
double mouseSens = (double)new_val/500;
Core.getRender().getCamera().setMouseSensitivity((float)mouseSens);
}
});
}
private void handleVariationDatabaseChange(String newValue){
if (controller.getLayer().getValue()!=""&&controller.getLayer().getValue()!=null){
String currentLayerName = controller.getLayer().getValue().split(" ")[0];
String currentDatabaseName = controller.getVariationDatabase().getValue().split(" ")[0];
Core.getJavaFXHandler().getDialogBuilder().showAsk("Question", "Do you want to assign "+currentDatabaseName+" to the current layer ?", new Runnable() {
public void run() {
//Pressed YES
EntityLayer layer = Core.getGame().getEntityHandler().getEntityLayer(currentLayerName);
EBXStructureFile variationDB = Core.getGame().getResourceHandler().getMeshVariationDatabaseHandler().getDatabaseByName(currentDatabaseName);
if (layer==null||variationDB==null){
Core.getJavaFXHandler().getDialogBuilder().showError("ERROR", "Something went wrong!", null);
}else{
Core.runOnMainThread(new Runnable() {
@Override
public void run() {
Core.getGame().getEntityHandler().updateLayer(layer, variationDB);
}
});
}
}
}, new Runnable() {
//Pressed NO
@Override
public void run() {
Core.getJavaFXHandler().getDialogBuilder().showAsk("Question", "Do you want to DELETE "+currentDatabaseName+" then ?", new Runnable() {
@Override
public void run() {
//Pressed YES
Core.getGame().getResourceHandler().getMeshVariationDatabaseHandler().deleteDatabase(currentDatabaseName);
}
}, null);
}
});
}
}
public void setExplorer1(TreeItem<TreeViewEntry> root, String str){
if (root!=null){
unfilteredExplorer1Root = root;
}
filteredExplorer1Root = TreeViewUtils.filter(unfilteredExplorer1Root, str);
controller.getExplorer1().setRoot(filteredExplorer1Root);
}
public Stage getStage() {
return stage;
}
public FXMLLoader getLoader() {
return loader;
}
public ToolsWindowController getController() {
return controller;
}
public Scene getScene() {
return scene;
}
public Parent getParent() {
return parent;
}
}