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 ;
2017-07-07 02:27:21 -04:00
import javafx.scene.control.* ;
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-07-07 02:27:21 -04:00
import javafx.scene.image.ImageView ;
2017-06-28 23:54:27 -04:00
import javafx.scene.layout.Priority ;
2017-07-07 02:27:21 -04:00
import javafx.scene.layout.Region ;
2017-06-28 23:54:27 -04:00
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-07-07 02:49:18 -04:00
/ * *
* La barra del menu
* /
2017-06-28 23:54:27 -04:00
@FXML
private MenuBar menuBar ;
2017-07-07 02:49:18 -04:00
/ * *
* La opción del menu por individual
* /
2017-06-29 22:59:55 -04:00
@FXML
private MenuItem menuIndiv ;
2017-07-07 02:49:18 -04:00
/ * *
* La opción del enu por individual
* /
2017-06-29 22:59:55 -04:00
@FXML
private MenuItem menuLote ;
2017-07-07 02:49:18 -04:00
/ * *
* Los estados finales que se usa en lote y individual
* /
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-07-07 02:27:21 -04:00
ImageView imageView = ( ImageView ) scene . lookup ( " #logo " ) ;
if ( imageView ! = null ) {
VBox vbox = ( VBox ) imageView . getParent ( ) ;
vbox . getChildren ( ) . remove ( imageView ) ;
}
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 ( " ( \\ (.* \\ )) = ( \\ (.* \\ )) " ) ;
2017-07-07 02:49:18 -04:00
for ( int i = 0 ; i < maquina . getAutomata ( ) . getEstados ( ) . size ( ) ; i + + ) {
Matcher matcher = pattern . matcher ( maquina . getAutomata ( ) . getEstados ( ) . get ( i ) . toString ( ) ) ;
2017-06-29 22:59:55 -04:00
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
2017-07-07 02:27:21 -04:00
/ * *
* Click en acerca .
* /
@FXML
protected void menuAcerca ( ) {
ButtonType botonCerrar = new ButtonType ( " Cerrar " , ButtonBar . ButtonData . OK_DONE ) ;
Alert alert = new Alert ( Alert . AlertType . NONE , " Maquina de Turning " + MT . version + " \ n \ nConstruido por: \ n \ tChristopher Cromer \ n \ tCarlos Fáundez \ n \ nIngenier \ u00EDa Civil en Inform \ u00E1tica \ nUniversidad del B \ u00EDo B \ u00EDo " ) ;
alert . getDialogPane ( ) . getChildren ( ) . stream ( ) . filter ( node - > node instanceof Label ) . forEach ( node - > ( ( Label ) node ) . setMinHeight ( Region . USE_PREF_SIZE ) ) ;
alert . setGraphic ( null ) ;
alert . getDialogPane ( ) . getButtonTypes ( ) . add ( botonCerrar ) ;
Stage stage = ( Stage ) alert . getDialogPane ( ) . getScene ( ) . getWindow ( ) ;
stage . getIcons ( ) . add ( new Image ( getClass ( ) . getResourceAsStream ( " /cl/cromer/mt/images/icon.png " ) ) ) ;
alert . show ( ) ;
}
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
}