/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package poe.level.fx; import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXDialog; import com.jfoenix.controls.JFXToggleButton; import com.jfoenix.controls.events.JFXDialogEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; import javafx.scene.control.TextInputDialog; import javafx.scene.image.ImageView; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.input.MouseEvent; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; import poe.level.data.Build; import poe.level.data.CharacterInfo; import poe.level.data.Util; import poe.level.fx.overlay.PlaceholderStageGameMode; import poe.level.fx.overlay.RecipeOverlay_Controller; import java.io.IOException; import java.net.URL; import java.util.Optional; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; /** * FXML Controller class * * @author Christos */ public class Main_Controller implements Initializable { private final Logger m_logger = Logger.getLogger(Main_Controller.class.getName()); @FXML private JFXButton selectBuild; @FXML private StackPane rootPane; @FXML private JFXToggleButton zones; @FXML private JFXToggleButton xp; @FXML private JFXToggleButton leveling; @FXML private ImageView buildIcon; @FXML private Pane dragPane; Main_Stage parent; private JFXDialog addBuildPopup; private JFXDialog editCharacterPopup; private Build buildLoaded; void hookStage(Main_Stage stage){ parent = stage; } class Delta { double x, y; } @Override public void initialize(URL url, ResourceBundle rb) { // TODO final Delta dragDelta = new Delta(); dragPane.setOnMousePressed(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent mouseEvent) { // record a delta distance for the drag and drop operation. dragDelta.x = parent.getX() - mouseEvent.getScreenX(); dragDelta.y = parent.getY() - mouseEvent.getScreenY(); } }); dragPane.setOnMouseDragged(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent mouseEvent) { parent.setX(mouseEvent.getScreenX() + dragDelta.x); parent.setY(mouseEvent.getScreenY() + dragDelta.y); } }); } @FXML private void startButton(){ if(Preferences_Controller.poe_log_dir == null || Preferences_Controller.poe_log_dir.equals("")){ Alert alert = new Alert(AlertType.ERROR); alert.setTitle("Directory not set"); alert.setContentText("Select the options button, and locate your Path of Exile installation folder!"); alert.initOwner(parent); alert.showAndWait(); }else{ if(!leveling.isSelected() && !xp.isSelected() && !zones.isSelected()){ Alert alert = new Alert(AlertType.ERROR); alert.setTitle("Select at least one of the 3 main options."); alert.setContentText("Select at least one of the 3 main options."); alert.initOwner(parent); alert.showAndWait(); }else{ if(leveling.isSelected() && buildLoaded!=null){ characterInfoPopup(); //buildLoaded.level = temp_alert(); }else if(leveling.isSelected() && buildLoaded == null){ Alert alert = new Alert(AlertType.ERROR); alert.setTitle("Build not set"); alert.setContentText("Select a build or create a new one in the Editor panel."); alert.initOwner(parent); alert.showAndWait(); }else{ if(xp.isSelected() || zones.isSelected()){ characterInfoPopup(); }else{ parent.start(zones.isSelected(), xp.isSelected(), leveling.isSelected()); } } } } } @FXML private void launchEditor(){ parent.editor(); } @FXML private void selectBuild(){ buildPopup(); } @FXML private void preferences(){ preferencesPopup(); } @FXML private void close(){ parent.closeApp(); } @FXML private void minimize(){ parent.setIconified(true); } private void preferencesPopup() { /* PlaceholderStageGameMode placeholder_stageGameMode = new PlaceholderStageGameMode(null); placeholder_stageGameMode.loadSettings(); Preferences_Controller.gameModeOn = true; //RecipeOverlay_Controller.gameModeOn = false; placeholder_stageGameMode.show();*/ FXMLLoader loader = new FXMLLoader(getClass().getResource("preferences.fxml")); AnchorPane con = null; try { con = (AnchorPane) loader.load(); } catch (IOException ex) { m_logger.log(Level.SEVERE, null, ex); } loader.<Preferences_Controller>getController().hook(this); addBuildPopup = new JFXDialog(rootPane, con, JFXDialog.DialogTransition.CENTER); addBuildPopup.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent event) { if (event.getCode() == KeyCode.ESCAPE) { closePrefPopup(); } } }); //addBuildPopup.getStylesheets().add(getClass().getResource("/styles/style.css").toExternalForm()); //controller.passDialog(mLoad); addBuildPopup.show(); addBuildPopup.setOnDialogOpened(new EventHandler<JFXDialogEvent>() { @Override public void handle(JFXDialogEvent event) { addBuildPopup.requestFocus(); } }); } private void characterInfoPopup() { FXMLLoader loader = new FXMLLoader(getClass().getResource("characterInfo.fxml")); AnchorPane con = null; try { con = (AnchorPane) loader.load(); } catch (IOException ex) { m_logger.log(Level.SEVERE, null, ex); } loader.<CharacterInfo_Controller>getController().hook(this); if(buildLoaded!=null) { loader.<CharacterInfo_Controller>getController().init(buildLoaded); } editCharacterPopup = new JFXDialog(rootPane, con, JFXDialog.DialogTransition.CENTER); //editCharacterPopup.getStylesheets().add(getClass().getResource("/styles/style.css").toExternalForm()); //controller.passDialog(mLoad); editCharacterPopup.show(); } private void buildPopup() { FXMLLoader loader = new FXMLLoader(getClass().getResource("SelectBuild_Popup.fxml")); try { AnchorPane con = loader.load(); loader.<SelectBuild_PopupController>getController().hook(this); addBuildPopup = new JFXDialog(rootPane, con, JFXDialog.DialogTransition.CENTER); addBuildPopup.getStylesheets().add(getClass().getResource("/styles/style.css").toExternalForm()); //controller.passDialog(mLoad); addBuildPopup.show(); } catch (IOException ex) { Logger.getLogger(MainApp_Controller.class.getName()).log(Level.SEVERE, null, ex); } } void closePopup(Build build){ buildLoaded = build; addBuildPopup.close(); decorateSelectButton(); } void closePrefPopup(){ addBuildPopup.close(); } void closeCharacterPopup(CharacterInfo charInfo){ if(xp.isSelected() || zones.isSelected()){ Main_Stage.playerLevel = charInfo.level; Main_Stage.characterName = charInfo.characterName; //Main_Stage.playerLevel = temp_alert(); } if(leveling.isSelected()){ Main_Stage.buildLoaded = buildLoaded; buildLoaded.setCharacterInfo(charInfo); POELevelFx.saveBuildsToMemory(); } editCharacterPopup.close(); m_logger.info("Starting with character info: " + charInfo); parent.start(zones.isSelected(), xp.isSelected(), leveling.isSelected()); } private void decorateSelectButton(){ //selectBuild.setGraphic(new ImageView(charToImage(buildLoaded.getClassName(),buildLoaded.getAsc()))); //ImageView graphic = (ImageView) selectBuild.getGraphic(); buildIcon.setImage(Util.charToImage(buildLoaded.getClassName(),buildLoaded.getAsc())); //graphic.setFitHeight(30); //graphic.setPreserveRatio(true); selectBuild.setText(buildLoaded.getName()); } StackPane getRootPane() { return rootPane; } }