2017-06-28 23:54:27 -04:00
|
|
|
/* Copyright (c) 2017 Christopher Cromer
|
|
|
|
* Copyright (c) 2017 Carlos Faúndez
|
|
|
|
*
|
|
|
|
* This file is part of mt. It is subject to the license terms in the LICENSE file found in the top-level directory of this distribution.
|
|
|
|
* This file may not be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE file.
|
|
|
|
*/
|
|
|
|
|
2017-07-03 20:46:11 -04:00
|
|
|
package cl.cromer.mt;
|
2017-06-28 23:54:27 -04:00
|
|
|
|
2017-06-29 00:47:20 -04:00
|
|
|
import com.sun.javafx.scene.control.skin.TableHeaderRow;
|
2017-06-29 22:59:55 -04:00
|
|
|
import javafx.collections.FXCollections;
|
|
|
|
import javafx.collections.ObservableList;
|
2017-07-04 16:08:29 -04:00
|
|
|
import javafx.event.Event;
|
2017-06-28 23:54:27 -04:00
|
|
|
import javafx.fxml.FXML;
|
|
|
|
import javafx.fxml.FXMLLoader;
|
|
|
|
import javafx.scene.Scene;
|
|
|
|
import javafx.scene.control.MenuBar;
|
2017-06-29 22:59:55 -04:00
|
|
|
import javafx.scene.control.MenuItem;
|
2017-07-03 16:03:43 -04:00
|
|
|
import javafx.scene.control.TableColumn;
|
2017-06-28 23:54:27 -04:00
|
|
|
import javafx.scene.control.TableView;
|
2017-07-03 16:03:43 -04:00
|
|
|
import javafx.scene.control.cell.TextFieldTableCell;
|
2017-07-03 16:53:28 -04:00
|
|
|
import javafx.scene.image.Image;
|
2017-06-28 23:54:27 -04:00
|
|
|
import javafx.scene.layout.Priority;
|
|
|
|
import javafx.scene.layout.VBox;
|
2017-06-29 22:59:55 -04:00
|
|
|
import javafx.scene.paint.Color;
|
|
|
|
import javafx.scene.text.Font;
|
|
|
|
import javafx.scene.text.Text;
|
2017-07-04 16:08:29 -04:00
|
|
|
import javafx.stage.*;
|
2017-06-28 23:54:27 -04:00
|
|
|
import org.w3c.dom.Document;
|
|
|
|
|
|
|
|
import java.io.File;
|
2017-06-29 22:59:55 -04:00
|
|
|
import java.util.regex.Matcher;
|
|
|
|
import java.util.regex.Pattern;
|
2017-06-28 23:54:27 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Controlar las acciones cuando una opción es elegido en el menu.
|
|
|
|
*/
|
2017-07-03 16:03:43 -04:00
|
|
|
public class MenuController {
|
2017-06-28 23:54:27 -04:00
|
|
|
@FXML
|
|
|
|
private MenuBar menuBar;
|
2017-06-29 22:59:55 -04:00
|
|
|
@FXML
|
|
|
|
private MenuItem menuIndiv;
|
|
|
|
@FXML
|
|
|
|
private MenuItem menuLote;
|
|
|
|
|
2017-07-07 00:39:13 -04:00
|
|
|
private EstadosFinales estadosFinales;
|
|
|
|
|
2017-06-28 23:54:27 -04:00
|
|
|
/**
|
|
|
|
* Menu opción cargar transiciones
|
|
|
|
*
|
|
|
|
* @throws Exception La excepción
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
protected void cargarTransiciones() throws Exception {
|
|
|
|
Scene scene = menuBar.getScene();
|
2017-07-04 16:08:29 -04:00
|
|
|
Stage parentStage = (Stage) scene.getWindow();
|
2017-06-28 23:54:27 -04:00
|
|
|
FileChooser fileChooser = new FileChooser();
|
|
|
|
fileChooser.setTitle("Abrir archivo XML");
|
2017-07-04 07:08:36 -04:00
|
|
|
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Archivos XML (*.xml)", "*.xml"));
|
2017-07-04 16:08:29 -04:00
|
|
|
File archivo = fileChooser.showOpenDialog(parentStage);
|
2017-06-28 23:54:27 -04:00
|
|
|
LeerXML xml = new LeerXML();
|
|
|
|
Document documento = xml.leerArchivo(archivo);
|
|
|
|
if (documento != null) {
|
2017-07-04 23:34:45 -04:00
|
|
|
Maquina maquina = new Maquina(documento);
|
2017-06-29 22:59:55 -04:00
|
|
|
TableView temp = (TableView) scene.lookup("#tableView");
|
|
|
|
VBox contenido = (VBox) scene.lookup("#contenido");
|
|
|
|
if (temp != null) {
|
|
|
|
// Remover tabla anterior si existe
|
|
|
|
contenido.getChildren().remove(temp);
|
2017-06-28 23:54:27 -04:00
|
|
|
}
|
2017-06-29 22:59:55 -04:00
|
|
|
else {
|
|
|
|
Text text = new Text(0, 0, "TRANSICIONES CARGADAS");
|
|
|
|
text.setFill(Color.BLACK);
|
|
|
|
text.setFont(Font.font(java.awt.Font.SANS_SERIF, 25));
|
2017-07-07 00:39:13 -04:00
|
|
|
text.setId("cargada");
|
2017-06-29 22:59:55 -04:00
|
|
|
contenido.getChildren().add(text);
|
|
|
|
|
|
|
|
menuIndiv.setDisable(false);
|
|
|
|
menuLote.setDisable(false);
|
|
|
|
}
|
2017-07-07 00:39:13 -04:00
|
|
|
TableView<TablaData> tableView = FXMLLoader.load(getClass().getResource("/cl/cromer/mt/fxml/tabla.fxml"));
|
2017-06-29 22:59:55 -04:00
|
|
|
VBox.setVgrow(tableView, Priority.ALWAYS);
|
2017-06-29 00:47:20 -04:00
|
|
|
tableView.skinProperty().addListener((source, oldWidth, newWidth) -> {
|
|
|
|
final TableHeaderRow header = (TableHeaderRow) tableView.lookup("TableHeaderRow");
|
|
|
|
header.reorderingProperty().addListener((observable, oldValue, newValue) -> header.setReordering(false));
|
|
|
|
});
|
2017-06-29 22:59:55 -04:00
|
|
|
tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
|
|
|
|
|
2017-07-03 16:03:43 -04:00
|
|
|
ObservableList<TablaData> tablaData = FXCollections.observableArrayList();
|
2017-06-29 22:59:55 -04:00
|
|
|
Pattern pattern = Pattern.compile("(\\(.*\\)) = (\\(.*\\))");
|
|
|
|
for (int i = 0; i < maquina.getMaquina().getEstados().size(); i++) {
|
|
|
|
Matcher matcher = pattern.matcher(maquina.getMaquina().getEstados().get(i).toString());
|
|
|
|
while (matcher.find()) {
|
2017-07-03 16:03:43 -04:00
|
|
|
tablaData.add(new TablaData(matcher.group(1), matcher.group(2)));
|
2017-06-29 22:59:55 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
tableView.setEditable(true);
|
2017-07-03 16:03:43 -04:00
|
|
|
tableView.setItems(tablaData);
|
|
|
|
|
|
|
|
tableView.getColumns().get(0).setText("(qi,si)");
|
|
|
|
tableView.getColumns().get(1).setText("(qj,sj,movimiento)");
|
2017-06-29 22:59:55 -04:00
|
|
|
|
|
|
|
contenido.getChildren().add(tableView);
|
2017-07-04 16:08:29 -04:00
|
|
|
|
|
|
|
// Obtener los estados finales:
|
|
|
|
FXMLLoader fxmlLoader = new FXMLLoader();
|
2017-07-05 23:41:07 -04:00
|
|
|
fxmlLoader.setLocation(getClass().getResource("/cl/cromer/mt/fxml/estadosFinales.fxml"));
|
2017-07-04 16:08:29 -04:00
|
|
|
Scene nuevaScene = new Scene(fxmlLoader.load(), 250, 250);
|
2017-07-04 16:32:21 -04:00
|
|
|
estadosFinales = new EstadosFinales(maquina);
|
|
|
|
nuevaScene.setUserData(estadosFinales);
|
2017-07-05 23:41:07 -04:00
|
|
|
nuevaScene.getStylesheets().add("/cl/cromer/mt/css/mt.css");
|
2017-07-04 16:08:29 -04:00
|
|
|
Stage stage = new Stage();
|
|
|
|
stage.initModality(Modality.WINDOW_MODAL);
|
|
|
|
stage.initOwner(parentStage);
|
|
|
|
stage.setTitle("Elegir Estados Finales");
|
|
|
|
stage.setScene(nuevaScene);
|
|
|
|
stage.setMinHeight(250);
|
|
|
|
stage.setMinWidth(250);
|
|
|
|
stage.getIcons().add(new Image(getClass().getResourceAsStream("/cl/cromer/mt/images/icon.png")));
|
|
|
|
final EstadosFinalesController estadosFinalesController = fxmlLoader.getController();
|
|
|
|
stage.addEventHandler(WindowEvent.WINDOW_SHOWN, window -> estadosFinalesController.handleWindowShownEvent());
|
|
|
|
stage.initStyle(StageStyle.UTILITY);
|
|
|
|
stage.setOnCloseRequest(Event::consume);
|
|
|
|
stage.show();
|
|
|
|
}
|
|
|
|
else {
|
2017-07-07 00:39:13 -04:00
|
|
|
TableView tableView = (TableView) scene.lookup("#tableView");
|
|
|
|
VBox contenido = (VBox) scene.lookup("#contenido");
|
2017-07-04 16:08:29 -04:00
|
|
|
if (tableView != null) {
|
2017-07-07 00:39:13 -04:00
|
|
|
Text cargada = (Text) scene.lookup("#cargada");
|
|
|
|
contenido.getChildren().removeAll(tableView, cargada);
|
2017-07-04 16:08:29 -04:00
|
|
|
}
|
2017-07-04 07:08:36 -04:00
|
|
|
menuIndiv.setDisable(true);
|
|
|
|
menuLote.setDisable(true);
|
2017-07-07 00:39:13 -04:00
|
|
|
if (archivo != null) {
|
|
|
|
MT.mostrarMensaje("Error", "El archivo " + archivo.getName() + " no es un xml valido");
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
MT.mostrarMensaje("Aviso", "No se ha seleccionado archivo!");
|
|
|
|
}
|
2017-06-28 23:54:27 -04:00
|
|
|
}
|
|
|
|
}
|
2017-06-29 22:59:55 -04:00
|
|
|
|
|
|
|
/**
|
2017-07-03 13:22:01 -04:00
|
|
|
* Menu opción reconocimiento individual
|
2017-07-07 00:39:13 -04:00
|
|
|
*
|
|
|
|
* @throws Exception La excepción
|
2017-06-29 22:59:55 -04:00
|
|
|
*/
|
|
|
|
@FXML
|
2017-07-07 00:39:13 -04:00
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
protected void reconoceIndividual() throws Exception {
|
|
|
|
Scene parentScene = menuBar.getScene();
|
|
|
|
Stage parentStage = (Stage) parentScene.getWindow();
|
2017-06-29 22:59:55 -04:00
|
|
|
|
2017-07-07 00:39:13 -04:00
|
|
|
FXMLLoader fxmlLoader = new FXMLLoader();
|
|
|
|
fxmlLoader.setLocation(getClass().getResource("/cl/cromer/mt/fxml/individual.fxml"));
|
|
|
|
Scene scene = new Scene(fxmlLoader.load(), 640, 480);
|
|
|
|
scene.setUserData(estadosFinales);
|
|
|
|
scene.getStylesheets().add("/cl/cromer/mt/css/mt.css");
|
|
|
|
Stage stage = new Stage();
|
|
|
|
stage.initModality(Modality.WINDOW_MODAL);
|
|
|
|
stage.initOwner(parentStage);
|
|
|
|
stage.setTitle("Reconocimiento individual");
|
|
|
|
stage.setMinHeight(480);
|
|
|
|
stage.setMinWidth(640);
|
|
|
|
stage.setScene(scene);
|
|
|
|
stage.getIcons().add(new Image(getClass().getResourceAsStream("/cl/cromer/mt/images/icon.png")));
|
|
|
|
stage.show();
|
2017-06-29 22:59:55 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Menu opción reconocimiento lote
|
2017-07-03 21:27:34 -04:00
|
|
|
*
|
|
|
|
* @throws Exception La excepción
|
2017-06-29 22:59:55 -04:00
|
|
|
*/
|
|
|
|
@FXML
|
2017-07-03 16:03:43 -04:00
|
|
|
@SuppressWarnings("unchecked")
|
2017-07-03 13:22:01 -04:00
|
|
|
protected void reconoceLote() throws Exception {
|
|
|
|
Scene parentScene = menuBar.getScene();
|
|
|
|
Stage parentStage = (Stage) parentScene.getWindow();
|
|
|
|
|
|
|
|
FXMLLoader fxmlLoader = new FXMLLoader();
|
2017-07-05 23:41:07 -04:00
|
|
|
fxmlLoader.setLocation(getClass().getResource("/cl/cromer/mt/fxml/lote.fxml"));
|
2017-07-03 13:22:01 -04:00
|
|
|
Scene scene = new Scene(fxmlLoader.load(), 640, 480);
|
2017-07-04 16:32:21 -04:00
|
|
|
scene.setUserData(estadosFinales);
|
2017-07-05 23:41:07 -04:00
|
|
|
scene.getStylesheets().add("/cl/cromer/mt/css/mt.css");
|
2017-07-03 13:22:01 -04:00
|
|
|
Stage stage = new Stage();
|
|
|
|
stage.initModality(Modality.WINDOW_MODAL);
|
|
|
|
stage.initOwner(parentStage);
|
2017-07-07 00:39:13 -04:00
|
|
|
stage.setTitle("Reconocimiento por lote");
|
2017-07-03 16:03:43 -04:00
|
|
|
stage.setMinHeight(480);
|
|
|
|
stage.setMinWidth(640);
|
2017-07-03 13:22:01 -04:00
|
|
|
stage.setScene(scene);
|
2017-07-03 20:46:11 -04:00
|
|
|
stage.getIcons().add(new Image(getClass().getResourceAsStream("/cl/cromer/mt/images/icon.png")));
|
2017-07-03 13:22:01 -04:00
|
|
|
stage.show();
|
2017-07-03 16:03:43 -04:00
|
|
|
|
2017-07-05 23:41:07 -04:00
|
|
|
TableView<TablaData> tableView = FXMLLoader.load(getClass().getResource("/cl/cromer/mt/fxml/tabla.fxml"));
|
2017-07-03 16:03:43 -04:00
|
|
|
VBox.setVgrow(tableView, Priority.ALWAYS);
|
|
|
|
tableView.skinProperty().addListener((source, oldWidth, newWidth) -> {
|
|
|
|
final TableHeaderRow header = (TableHeaderRow) tableView.lookup("TableHeaderRow");
|
|
|
|
header.reorderingProperty().addListener((observable, oldValue, newValue) -> header.setReordering(false));
|
|
|
|
});
|
|
|
|
tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
|
|
|
|
|
2017-07-07 00:39:13 -04:00
|
|
|
tableView.setEditable(true);
|
2017-07-03 16:03:43 -04:00
|
|
|
TableColumn<TablaData, String> columna1 = (TableColumn<TablaData, String>) tableView.getColumns().get(0);
|
|
|
|
columna1.setCellFactory(TextFieldTableCell.forTableColumn());
|
2017-07-07 00:39:13 -04:00
|
|
|
columna1.setOnEditCommit(event -> {
|
|
|
|
event.getTableView().getItems().get(event.getTablePosition().getRow()).setPrimera(agregarGatos(event.getNewValue()));
|
|
|
|
event.getTableView().refresh();
|
|
|
|
});
|
2017-07-03 16:03:43 -04:00
|
|
|
|
|
|
|
tableView.getColumns().get(0).setText("Cadena");
|
|
|
|
tableView.getColumns().get(0).setEditable(true);
|
|
|
|
tableView.getColumns().get(1).setText("Aceptada/Rechazada");
|
|
|
|
tableView.getColumns().get(1).setEditable(false);
|
|
|
|
|
2017-07-04 23:34:45 -04:00
|
|
|
VBox contenido = (VBox) scene.lookup("#contenido");
|
2017-07-03 16:03:43 -04:00
|
|
|
contenido.getChildren().add(tableView);
|
2017-06-29 22:59:55 -04:00
|
|
|
}
|
2017-07-07 00:39:13 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Agregar un gato al inicio y al final de un string si no existen
|
|
|
|
*
|
|
|
|
* @param string El string a agregar los gatos
|
|
|
|
*
|
|
|
|
* @return String con gatos
|
|
|
|
*/
|
|
|
|
private String agregarGatos(String string) {
|
|
|
|
StringBuilder temp = new StringBuilder(string);
|
|
|
|
if (string.charAt(0) != '#') {
|
|
|
|
temp.insert(0, "#");
|
|
|
|
}
|
|
|
|
if (temp.charAt(temp.length() - 1) != '#') {
|
|
|
|
temp.insert(temp.length(), "#");
|
|
|
|
}
|
|
|
|
return temp.toString();
|
|
|
|
}
|
2017-06-28 23:54:27 -04:00
|
|
|
}
|