@ -1,7 +1,7 @@
/ * *
* cemu_UI
*
* Copyright 2017 - 2018 < @Seil0 >
* Copyright 2017 - 2019 < @Seil0 >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
@ -18,6 +18,7 @@
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston ,
* MA 02110 - 1301 , USA .
* /
package com.cemu_UI.application ;
import java.awt.Graphics2D ;
@ -89,6 +90,7 @@ import javafx.scene.image.ImageView;
import javafx.scene.input.MouseButton ;
import javafx.scene.input.MouseEvent ;
import javafx.scene.layout.AnchorPane ;
import javafx.scene.layout.FlowPane ;
import javafx.scene.layout.HBox ;
import javafx.scene.layout.VBox ;
import javafx.scene.paint.Color ;
@ -140,6 +142,8 @@ public class MainWindowController {
@FXML private AnchorPane gamesAnchorPane ;
@FXML private AnchorPane settingsAnchorPane ;
@FXML private AnchorPane smmdbAnchorPane ;
@FXML private FlowPane gamesFlowPane ;
@FXML private ScrollPane mainScrollPane ;
@FXML private ScrollPane settingsScrollPane ;
@ -375,30 +379,19 @@ public class MainWindowController {
LOGGER . info ( "remove " + selectedGameTitle + "(" + selectedGameTitleID + ")" ) ;
String headingText = bundle . getString ( "removeHeadingText" ) + " \"" + selectedGameTitle + "\"" ;
String bodyText = bundle . getString ( "removeBodyText" ) + " " + selectedGameTitle + " ?" ;
EventHandler < ActionEvent > okayAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
try {
games . remove ( selectedUIDataIndex ) ; // remove game form games-list
dbController . removeGame ( selectedGameTitleID ) ; // remove game from database
refreshUIData ( ) ; // refresh all games at gamesAnchorPane (UI)
} catch ( Exception e ) {
LOGGER . error ( "error while removing ROM from database!" , e ) ;
}
}
} ;
EventHandler < ActionEvent > cancelAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
LOGGER . info ( "Action canceld by user!" ) ;
}
} ;
JFXOkayCancelAlert removeGameAlert = new JFXOkayCancelAlert ( headingText ,
bodyText , dialogBtnStyle , primaryStage ) ;
removeGameAlert . setOkayAction ( okayAction ) ;
removeGameAlert . setCancelAction ( cancelAction ) ;
removeGameAlert . setOkayAction ( e - > {
try {
games . remove ( selectedUIDataIndex ) ; // remove game form games-list
dbController . removeGame ( selectedGameTitleID ) ; // remove game from database
refreshUIData ( ) ; // refresh all games at gamesAnchorPane (UI)
} catch ( Exception ex ) {
LOGGER . error ( "error while removing ROM from database!" , ex ) ;
}
} ) ;
removeGameAlert . setCancelAction ( e - > LOGGER . info ( "Action canceld by user!" ) ) ;
removeGameAlert . showAndWait ( ) ;
} catch ( Exception e ) {
LOGGER . error ( "error while removing " + selectedGameTitle + "(" + selectedGameTitleID + ")" , e ) ;
@ -587,116 +580,88 @@ public class MainWindowController {
}
} ) ;
helpLbl . setOnMouseClicked ( new EventHandler < MouseEvent > ( ) {
@Override
public void handle ( MouseEvent mouseEvent ) {
if ( mouseEvent . getButton ( ) . equals ( MouseButton . PRIMARY ) ) {
Main . getMain ( ) . getHostServices ( ) . showDocument ( "https://git.mosad.xyz/Seil0/cemu_UI/issues/3" ) ;
}
helpLbl . setOnMouseClicked ( e - > {
if ( e . getButton ( ) . equals ( MouseButton . PRIMARY ) ) {
Main . getMain ( ) . getHostServices ( ) . showDocument ( "https://git.mosad.xyz/Seil0/cemu_UI/issues/3" ) ;
}
} ) ;
languageChoisBox . getSelectionModel ( ) . selectedIndexProperty ( ) . addListener ( new ChangeListener < Number > ( ) {
@Override
public void changed ( ObservableValue < ? extends Number > ov , Number value , Number new_value ) {
String language = languageChoisBox . getItems ( ) . get ( ( int ) new_value ) . toString ( ) ;
language = language . substring ( language . length ( ) - 6 , language . length ( ) - 1 ) ; // reading only en_US from
// English (en_US)
XMLController . setUsrLocal ( language ) ;
setUILanguage ( ) ;
xmlController . saveSettings ( ) ;
}
languageChoisBox . getSelectionModel ( ) . selectedIndexProperty ( ) . addListener ( ( e , oldValue , newValue ) - > {
String language = languageChoisBox . getItems ( ) . get ( ( int ) newValue ) . toString ( ) ;
language = language . substring ( language . length ( ) - 6 , language . length ( ) - 1 ) ; // reading only en_US from
// English (en_US)
XMLController . setUsrLocal ( language ) ;
setUILanguage ( ) ;
xmlController . saveSettings ( ) ;
} ) ;
branchChoisBox . getSelectionModel ( ) . selectedIndexProperty ( ) . addListener ( new ChangeListener < Number > ( ) {
@Override
public void changed ( ObservableValue < ? extends Number > ov , Number value , Number new_value ) {
if ( branchChoisBox . getItems ( ) . get ( ( int ) new_value ) . toString ( ) = = "beta" ) {
XMLController . setUseBeta ( true ) ;
} else {
XMLController . setUseBeta ( false ) ;
}
xmlController . saveSettings ( ) ;
branchChoisBox . getSelectionModel ( ) . selectedIndexProperty ( ) . addListener ( ( e , oldValue , newValue ) - > {
if ( branchChoisBox . getItems ( ) . get ( ( int ) newValue ) . toString ( ) = = "beta" ) {
XMLController . setUseBeta ( true ) ;
} else {
XMLController . setUseBeta ( false ) ;
}
xmlController . saveSettings ( ) ;
} ) ;
licensesLbl . setOnMouseClicked ( new EventHandler < MouseEvent > ( ) {
@Override
public void handle ( MouseEvent mouseEvent ) {
if ( mouseEvent . getButton ( ) . equals ( MouseButton . PRIMARY ) ) {
licensesLbl . setOnMouseClicked ( e - > {
if ( e . getButton ( ) . equals ( MouseButton . PRIMARY ) ) {
EventHandler < ActionEvent > okayAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
// do nothing
}
} ;
EventHandler < ActionEvent > cancelAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
String headingText = "cemu_UI" ;
String bodyText = "" ;
EventHandler < ActionEvent > cancelAction = cE - > {
String bodyText = "" ;
try {
BufferedReader licenseBR = new BufferedReader (
new InputStreamReader ( getClass ( ) . getResourceAsStream ( "/licenses/licenses_show.txt" ) ) ) ;
String currentLine ;
while ( ( currentLine = licenseBR . readLine ( ) ) ! = null ) {
bodyText = bodyText + currentLine + "\n" ;
}
licenseBR . close ( ) ;
} catch ( IOException e ) {
LOGGER . error ( "Cloud not read the license file!" , e ) ;
}
JFXTextAreaInfoDialog licenseDialog = new JFXTextAreaInfoDialog ( headingText , bodyText ,
dialogBtnStyle , 510 , 450 , main . getPane ( ) ) ;
licenseDialog . show ( ) ;
licenseDialog . getTextArea ( ) . setEditable ( false ) ;
try {
BufferedReader licenseBR = new BufferedReader (
new InputStreamReader ( getClass ( ) . getResourceAsStream ( "/licenses/licenses_show.txt" ) ) ) ;
String currentLine ;
while ( ( currentLine = licenseBR . readLine ( ) ) ! = null ) {
bodyText = bodyText + currentLine + "\n" ;
}
} ;
JFXOkayCancelAlert licenseOverviewAlert = new JFXOkayCancelAlert (
bundle . getString ( "licensesLblHeadingText" ) , bundle . getString ( "licensesLblBodyText" ) ,
dialogBtnStyle , primaryStage ) ;
licenseOverviewAlert . setOkayAction ( okayAction ) ;
licenseOverviewAlert . setCancelAction ( cancelAction ) ;
licenseOverviewAlert . setCancelText ( bundle . getString ( "showLicenses" ) ) ;
licenseOverviewAlert . showAndWait ( ) ;
}
}
licenseBR . close ( ) ;
} catch ( IOException ex ) {
LOGGER . error ( "Cloud not read the license file!" , ex ) ;
}
JFXTextAreaInfoDialog licenseDialog = new JFXTextAreaInfoDialog ( "cemu_UI" , "" ,
dialogBtnStyle , 510 , 450 , main . getPane ( ) ) ;
licenseDialog . getTextArea ( ) . setEditable ( false ) ;
licenseDialog . show ( ) ;
} ;
JFXOkayCancelAlert licenseOverviewAlert = new JFXOkayCancelAlert (
bundle . getString ( "licensesLblHeadingText" ) , bundle . getString ( "licensesLblBodyText" ) ,
dialogBtnStyle , primaryStage ) ;
licenseOverviewAlert . setOkayAction ( oE - > { } ) ;
licenseOverviewAlert . setCancelAction ( cancelAction ) ;
licenseOverviewAlert . setCancelText ( bundle . getString ( "showLicenses" ) ) ;
licenseOverviewAlert . showAndWait ( ) ;
}
} ) ;
cemuTextField . textProperty ( ) . addListener ( new ChangeListener < String > ( ) {
@Override
public void changed ( ObservableValue < ? extends String > observable , String oldValue , String newValue ) {
if ( new File ( newValue ) . exists ( ) ) {
XMLController . setCemuPath ( newValue ) ;
xmlController . saveSettings ( ) ;
} else {
String bodyText = newValue + ": No such file or directory" ;
JFXInfoAlert fileErrorDialog = new JFXInfoAlert ( "Waring!" , bodyText , dialogBtnStyle , primaryStage ) ;
fileErrorDialog . showAndWait ( ) ;
LOGGER . warn ( newValue + ": No such file or directory" ) ;
}
cemuTextField . textProperty ( ) . addListener ( ( e , oldValue , newValue ) - > {
if ( new File ( newValue ) . exists ( ) ) {
XMLController . setCemuPath ( newValue ) ;
xmlController . saveSettings ( ) ;
} else {
String bodyText = newValue + ": No such file or directory" ;
JFXInfoAlert fileErrorDialog = new JFXInfoAlert ( "Waring!" , bodyText , dialogBtnStyle , primaryStage ) ;
fileErrorDialog . showAndWait ( ) ;
LOGGER . warn ( newValue + ": No such file or directory" ) ;
}
} ) ;
romTextField . textProperty ( ) . addListener ( new ChangeListener < String > ( ) {
@Override
public void changed ( ObservableValue < ? extends String > observable , String oldValue , String newValue ) {
if ( new File ( newValue ) . exists ( ) ) {
XMLController . setRomDirectoryPath ( newValue ) ;
xmlController . saveSettings ( ) ;
reloadRoms ( ) ;
} else {
String bodyText = newValue + ": No such file or directory" ;
JFXInfoAlert fileErrorDialog = new JFXInfoAlert ( "Waring!" , bodyText , dialogBtnStyle , primaryStage ) ;
fileErrorDialog . showAndWait ( ) ;
LOGGER . warn ( newValue + ": No such file or directory" ) ;
}
romTextField . textProperty ( ) . addListener ( ( e , oldValue , newValue ) - > {
if ( new File ( newValue ) . exists ( ) ) {
XMLController . setRomDirectoryPath ( newValue ) ;
xmlController . saveSettings ( ) ;
reloadRoms ( ) ;
} else {
String bodyText = newValue + ": No such file or directory" ;
JFXInfoAlert fileErrorDialog = new JFXInfoAlert ( "Waring!" , bodyText , dialogBtnStyle , primaryStage ) ;
fileErrorDialog . showAndWait ( ) ;
LOGGER . warn ( newValue + ": No such file or directory" ) ;
}
} ) ;
@ -897,52 +862,44 @@ public class MainWindowController {
private void cloudSyncToggleBtnAction ( ) {
XMLController . setCloudSync ( ! XMLController . isCloudSync ( ) ) ;
if ( XMLController . isCloudSync ( ) ) {
EventHandler < ActionEvent > okayAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
//TODO rework for other cloud services
// CloudService service = CloudService.GoogleDrive;
XMLController . setCloudService ( CloudService . GoogleDrive ) ;
// start cloud sync in new thread
Thread thread = new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
if ( main . getCloudController ( ) . initializeConnection ( XMLController . getCloudService ( ) , XMLController . getCemuPath ( ) ) ) {
main . getCloudController ( ) . sync ( XMLController . getCloudService ( ) , XMLController . getCemuPath ( ) , XMLController . getDirCemuUIPath ( ) ) ;
xmlController . saveSettings ( ) ;
} else {
cloudSyncToggleBtn . setSelected ( false ) ;
// cloud sync init error dialog
JFXInfoAlert cloudSyncErrorDialog = new JFXInfoAlert (
bundle . getString ( "cloudSyncErrorHeadingText" ) ,
bundle . getString ( "cloudSyncErrorBodyText" ) , dialogBtnStyle , primaryStage ) ;
cloudSyncErrorDialog . showAndWait ( ) ;
}
if ( XMLController . isCloudSync ( ) ) {
EventHandler < ActionEvent > okayAction = e - > {
// TODO rework for other cloud services
// CloudService service = CloudService.GoogleDrive;
XMLController . setCloudService ( CloudService . GoogleDrive ) ;
// start cloud sync in new thread
Thread thread = new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
if ( main . getCloudController ( ) . initializeConnection ( XMLController . getCloudService ( ) ,
XMLController . getCemuPath ( ) ) ) {
main . getCloudController ( ) . sync ( XMLController . getCloudService ( ) , XMLController . getCemuPath ( ) ,
XMLController . getDirCemuUIPath ( ) ) ;
xmlController . saveSettings ( ) ;
} else {
cloudSyncToggleBtn . setSelected ( false ) ;
// cloud sync init error dialog
JFXInfoAlert cloudSyncErrorDialog = new JFXInfoAlert (
bundle . getString ( "cloudSyncErrorHeadingText" ) ,
bundle . getString ( "cloudSyncErrorBodyText" ) , dialogBtnStyle , primaryStage ) ;
cloudSyncErrorDialog . showAndWait ( ) ;
}
} ) ;
thread . start ( ) ;
}
} ;
EventHandler < ActionEvent > cancelAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
cloudSyncToggleBtn . setSelected ( false ) ;
}
} ;
}
} ) ;
thread . start ( ) ;
} ;
JFXOkayCancelAlert cloudSyncWarningAlert = new JFXOkayCancelAlert (
bundle . getString ( "cloudSyncWaringHeadingText" ) , bundle . getString ( "cloudSyncWaringHeadingText" ) ,
dialogBtnStyle , primaryStage ) ;
cloudSyncWarningAlert . setOkayAction ( okayAction ) ;
cloudSyncWarningAlert . setCancelAction ( cancelAction ) ;
cloudSyncWarningAlert . setCancelAction ( e - > cloudSyncToggleBtn . setSelected ( false ) ) ;
cloudSyncWarningAlert . showAndWait ( ) ;
}
}
}
@FXML
@ -1136,13 +1093,16 @@ public class MainWindowController {
xNextElement = 0 ;
// add all games to gamesAnchorPane (UI)
for ( UIROMDataType game : games ) {
generatePosition ( ) ;
game . setLayoutX ( xPos ) ;
game . setLayoutY ( yPos ) ;
gamesAnchorPane . getChildren ( ) . add ( game ) ;
}
// for (UIROMDataType game : games) {
// generatePosition();
//
// game.setLayoutX(xPos);
// game.setLayoutY(yPos);
// gamesAnchorPane.getChildren().add(game);
// }
// TODO
gamesFlowPane . getChildren ( ) . addAll ( games ) ;
}
// set the selected local strings to all needed elements