2017-04-06 12:00:36 +02:00
/ * *
* cemu_UI
*
* Copyright 2017 < @Seil0 >
*
2017-10-15 13:37:45 +02:00
* 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
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
2017-04-06 12:00:36 +02:00
*
2017-10-15 13:37:45 +02:00
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston ,
* MA 02110 - 1301 , USA .
2017-04-06 12:00:36 +02:00
* /
2017-10-15 13:37:45 +02:00
2017-11-13 16:44:39 +01:00
package com.cemu_UI.application ;
2017-03-23 13:44:21 +01:00
2017-07-16 00:13:43 +02:00
import java.awt.Desktop ;
2017-03-23 13:44:21 +01:00
import java.awt.Graphics2D ;
import java.awt.image.BufferedImage ;
2017-12-06 13:39:00 +01:00
import java.io.BufferedReader ;
2017-03-23 13:44:21 +01:00
import java.io.File ;
import java.io.FileInputStream ;
import java.io.FileOutputStream ;
import java.io.IOException ;
import java.io.InputStream ;
2017-12-06 13:39:00 +01:00
import java.io.InputStreamReader ;
2017-03-23 13:44:21 +01:00
import java.io.OutputStream ;
2017-03-28 17:40:01 +02:00
import java.math.BigInteger ;
2017-06-18 14:45:13 +02:00
import java.net.HttpURLConnection ;
2017-06-18 00:33:07 +02:00
import java.net.MalformedURLException ;
2017-07-16 00:13:43 +02:00
import java.net.URI ;
2017-06-18 00:33:07 +02:00
import java.net.URISyntaxException ;
import java.net.URL ;
2017-03-23 13:44:21 +01:00
import java.sql.SQLException ;
2017-03-23 16:17:38 +01:00
import java.time.LocalDate ;
import java.time.format.DateTimeFormatter ;
2017-06-18 13:01:04 +02:00
import java.util.ArrayList ;
2017-12-19 19:08:12 +01:00
import java.util.Locale ;
2017-03-23 13:44:21 +01:00
import java.util.Properties ;
2017-12-19 19:08:12 +01:00
import java.util.ResourceBundle ;
2017-12-06 13:39:00 +01:00
2017-03-23 13:44:21 +01:00
import javax.imageio.ImageIO ;
2017-06-18 14:45:13 +02:00
import javax.swing.ProgressMonitor ;
import javax.swing.ProgressMonitorInputStream ;
2017-03-23 13:44:21 +01:00
import org.apache.commons.io.FileUtils ;
2017-08-27 20:44:08 +02:00
import org.apache.logging.log4j.LogManager ;
import org.apache.logging.log4j.Logger ;
2017-12-06 13:39:00 +01:00
2017-11-14 12:02:39 +01:00
import com.cemu_UI.controller.SmmdbAPIController ;
2017-11-13 16:44:39 +01:00
import com.cemu_UI.controller.UpdateController ;
2017-12-12 11:19:33 +01:00
import com.cemu_UI.controller.DBController ;
2017-11-13 16:44:39 +01:00
import com.cemu_UI.datatypes.CourseTableDataType ;
import com.cemu_UI.datatypes.SmmdbApiDataType ;
import com.cemu_UI.datatypes.UIROMDataType ;
2017-11-15 15:58:23 +01:00
import com.cemu_UI.uiElements.JFXEditGameDialog ;
2017-11-13 16:44:39 +01:00
import com.cemu_UI.uiElements.JFXInfoDialog ;
import com.cemu_UI.uiElements.JFXOkayCancelDialog ;
2017-12-09 10:16:03 +01:00
import com.cemu_UI.uiElements.JFXTextAreaInfoDialog ;
2017-03-23 13:44:21 +01:00
import com.jfoenix.controls.JFXButton ;
import com.jfoenix.controls.JFXColorPicker ;
import com.jfoenix.controls.JFXHamburger ;
2017-11-27 10:57:16 +01:00
import com.jfoenix.controls.JFXSpinner ;
2017-03-23 13:44:21 +01:00
import com.jfoenix.controls.JFXTextField ;
import com.jfoenix.controls.JFXToggleButton ;
2017-06-16 16:23:03 +02:00
import com.jfoenix.controls.JFXTreeTableColumn ;
import com.jfoenix.controls.JFXTreeTableView ;
2017-03-23 13:44:21 +01:00
import com.jfoenix.transitions.hamburger.HamburgerBackArrowBasicTransition ;
2017-05-25 19:07:16 +02:00
2017-03-23 13:44:21 +01:00
import javafx.animation.TranslateTransition ;
2017-11-27 10:57:16 +01:00
import javafx.application.Platform ;
2017-06-16 16:23:03 +02:00
import javafx.beans.value.ChangeListener ;
import javafx.beans.value.ObservableValue ;
2017-04-06 12:00:36 +02:00
import javafx.collections.FXCollections ;
import javafx.collections.ObservableList ;
2017-03-23 13:44:21 +01:00
import javafx.event.ActionEvent ;
import javafx.event.EventHandler ;
import javafx.fxml.FXML ;
2017-03-26 14:21:19 +02:00
import javafx.geometry.Insets ;
2017-11-10 15:58:20 +01:00
import javafx.scene.control.ChoiceBox ;
2017-03-23 13:44:21 +01:00
import javafx.scene.control.ContextMenu ;
import javafx.scene.control.Label ;
import javafx.scene.control.MenuItem ;
import javafx.scene.control.ScrollPane ;
2017-06-16 16:23:03 +02:00
import javafx.scene.control.TreeItem ;
2017-03-23 13:44:21 +01:00
import javafx.scene.image.Image ;
import javafx.scene.image.ImageView ;
2017-07-16 00:13:43 +02:00
import javafx.scene.input.MouseButton ;
2017-03-23 13:44:21 +01:00
import javafx.scene.input.MouseEvent ;
import javafx.scene.layout.AnchorPane ;
import javafx.scene.layout.HBox ;
import javafx.scene.layout.VBox ;
import javafx.scene.paint.Color ;
2017-03-26 14:21:19 +02:00
import javafx.scene.paint.Paint ;
2017-03-23 13:44:21 +01:00
import javafx.scene.text.Font ;
import javafx.scene.text.FontWeight ;
2017-06-18 13:01:04 +02:00
import javafx.scene.text.Text ;
2017-06-18 00:33:07 +02:00
import javafx.scene.text.TextFlow ;
2017-03-23 13:44:21 +01:00
import javafx.stage.DirectoryChooser ;
import javafx.util.Duration ;
2017-08-26 00:13:09 +02:00
import net.lingala.zip4j.core.ZipFile ;
import net.lingala.zip4j.exception.ZipException ;
2017-03-23 13:44:21 +01:00
public class MainWindowController {
2017-11-24 21:40:02 +01:00
@FXML
private JFXButton aboutBtn ;
@FXML
private JFXButton settingsBtn ;
@FXML
private JFXButton addBtn ;
@FXML
private JFXButton reloadRomsBtn ;
@FXML
private JFXButton smmdbBtn ;
@FXML
private JFXButton cemuTFBtn ;
@FXML
private JFXButton romTFBtn ;
@FXML
private JFXButton updateBtn ;
@FXML
private JFXButton smmdbDownloadBtn ;
@FXML
private JFXButton playBtn ;
@FXML
private JFXButton lastTimePlayedBtn ;
@FXML
JFXButton totalPlaytimeBtn ;
@FXML
private JFXHamburger menuHam ;
@FXML
private JFXTextField cemuTextField ;
@FXML
private JFXTextField romTextField ;
2017-12-11 10:31:23 +01:00
@FXML
private JFXTextField courseSearchTextFiled ;
2018-01-19 01:14:01 +01:00
@FXML
private JFXTextField executeCommandTextFiled ;
2017-11-24 21:40:02 +01:00
@FXML
private TextFlow smmdbTextFlow ;
@FXML
private JFXColorPicker colorPicker ;
@FXML
private JFXToggleButton cloudSyncToggleBtn ;
@FXML
private JFXToggleButton autoUpdateToggleBtn ;
@FXML
private JFXToggleButton fullscreenToggleBtn ;
2017-12-18 09:58:32 +01:00
@FXML
private ChoiceBox < String > languageChoisBox ;
2017-11-24 21:40:02 +01:00
@FXML
private ChoiceBox < String > branchChoisBox ;
@FXML
private AnchorPane mainAnchorPane ;
@FXML
private AnchorPane gamesAnchorPane ;
@FXML
private AnchorPane settingsAnchorPane ;
@FXML
private AnchorPane smmdbAnchorPane ;
@FXML
private ScrollPane mainScrollPane ;
@FXML
private ScrollPane settingsScrollPane ;
@FXML
private ScrollPane smmdbScrollPane ;
2017-12-11 11:31:39 +01:00
@FXML
private ScrollPane smmdbImageViewScrollPane ;
2017-11-24 21:40:02 +01:00
@FXML
private VBox sideMenuVBox ;
@FXML
private HBox topHBox ;
2017-12-18 09:58:32 +01:00
@FXML
private HBox bottomHBox ;
2017-11-24 21:40:02 +01:00
@FXML
private ImageView smmdbImageView ;
@FXML
private Label helpLbl ;
@FXML
private Label cemu_UISettingsLbl ;
@FXML
private Label cemuDirectoryLbl ;
@FXML
private Label romDirectoryLbl ;
@FXML
private Label mainColorLbl ;
2017-12-18 09:58:32 +01:00
@FXML
private Label languageLbl ;
2017-11-24 21:40:02 +01:00
@FXML
private Label updateLbl ;
@FXML
private Label branchLbl ;
@FXML
private Label cemuSettingsLbl ;
@FXML
private Label licensesLbl ;
@FXML
private JFXTreeTableView < CourseTableDataType > courseTreeTable = new JFXTreeTableView < CourseTableDataType > ( ) ;
@FXML
TreeItem < CourseTableDataType > root = new TreeItem < > ( new CourseTableDataType ( " " , " " , 0 , 0 ) ) ;
@FXML
private JFXTreeTableColumn < CourseTableDataType , String > titleColumn = new JFXTreeTableColumn < > ( " title " ) ;
@FXML
private JFXTreeTableColumn < CourseTableDataType , String > idColumn = new JFXTreeTableColumn < > ( " id " ) ;
@FXML
private JFXTreeTableColumn < CourseTableDataType , Integer > starsColumn = new JFXTreeTableColumn < > ( " stars " ) ;
@FXML
private JFXTreeTableColumn < CourseTableDataType , Integer > timeColumn = new JFXTreeTableColumn < > ( " time " ) ;
Main main ;
2017-12-12 11:19:33 +01:00
DBController dbController ;
2017-11-24 21:40:02 +01:00
SmmdbAPIController smmdbAPIController ;
playGame playGame ;
private static MainWindowController MWC ;
private UpdateController updateController ;
private boolean menuTrue = false ;
private boolean settingsTrue = false ;
private boolean playTrue = false ;
private boolean smmdbTrue = false ;
private boolean autoUpdate = false ;
private boolean useBeta = false ;
private boolean fullscreen ;
private boolean cloudSync ;
private String cloudService = " " ; // set cloud provider (at the moment only GoogleDrive, Dropbox is planed)
private String cemuPath ;
2018-01-19 01:14:01 +01:00
private String romDirectoryPath ;
2017-11-24 21:40:02 +01:00
private String gameExecutePath ;
private String color ;
private String dialogBtnStyle ;
private String selectedGameTitleID ;
private String selectedGameTitle ;
private String id ;
2018-01-12 23:52:44 +01:00
private String version = " 0.3.0 " ;
2018-02-03 14:22:41 +01:00
private String buildNumber = " 075 " ;
2017-11-24 21:40:02 +01:00
private String versionName = " Puzzle Plank Galaxy " ;
private int xPos = - 200 ;
private int yPos = 17 ;
private int xPosHelper ;
private int oldXPosHelper ;
private int selectedUIDataIndex ;
private int selected ;
2017-12-12 23:52:54 +01:00
private long lastLocalSync ;
2017-11-24 21:40:55 +01:00
private double windowWidth ;
2017-11-24 21:40:02 +01:00
private double windowHeight ;
2017-03-23 13:44:21 +01:00
private DirectoryChooser directoryChooser = new DirectoryChooser ( ) ;
private File dirWin = new File ( System . getProperty ( " user.home " ) + " /Documents/cemu_UI " ) ;
private File dirLinux = new File ( System . getProperty ( " user.home " ) + " /cemu_UI " ) ;
2017-08-30 11:29:58 +02:00
private File configFileWin = new File ( dirWin + " /config.xml " ) ;
private File configFileLinux = new File ( dirLinux + " /config.xml " ) ;
2017-11-24 21:40:02 +01:00
private File pictureCacheWin = new File ( dirWin + " /picture_cache " ) ;
private File pictureCacheLinux = new File ( dirLinux + " /picture_cache " ) ;
2017-11-10 15:58:20 +01:00
private ObservableList < String > branches = FXCollections . observableArrayList ( " stable " , " beta " ) ;
2017-12-19 19:08:12 +01:00
private ObservableList < String > languages = FXCollections . observableArrayList ( " English (en_US) " , " Deutsch (de_DE) " ) ;
2017-11-24 21:40:02 +01:00
private ObservableList < String > smmIDs = FXCollections . observableArrayList ( " fe31b7f2 " , " 44fc5929 " ) ; // TODO add more IDs
2017-06-16 23:35:56 +02:00
private ObservableList < UIROMDataType > games = FXCollections . observableArrayList ( ) ;
2017-06-16 16:37:56 +02:00
ObservableList < SmmdbApiDataType > courses = FXCollections . observableArrayList ( ) ;
2017-12-11 10:31:23 +01:00
ObservableList < SmmdbApiDataType > filteredCourses = FXCollections . observableArrayList ( ) ;
2017-06-18 13:01:04 +02:00
ArrayList < Text > courseText = new ArrayList < Text > ( ) ;
ArrayList < Text > nameText = new ArrayList < Text > ( ) ;
2017-11-24 21:40:02 +01:00
Properties props = new Properties ( ) ;
Properties gameProps = new Properties ( ) ;
private static final Logger LOGGER = LogManager . getLogger ( MainWindowController . class . getName ( ) ) ;
private HamburgerBackArrowBasicTransition burgerTask ;
private MenuItem edit = new MenuItem ( " edit " ) ;
private MenuItem remove = new MenuItem ( " remove " ) ;
private MenuItem addUpdate = new MenuItem ( " update " ) ;
private MenuItem addDLC = new MenuItem ( " add DLC " ) ;
2017-11-20 11:32:14 +01:00
private ContextMenu gameContextMenu = new ContextMenu ( edit , remove , addUpdate , addDLC ) ;
2017-03-23 13:44:21 +01:00
private Label lastGameLabel = new Label ( ) ;
2017-11-24 21:40:02 +01:00
2017-11-13 16:44:39 +01:00
private ImageView add_circle_black = new ImageView ( new Image ( " icons/ic_add_circle_black_24dp_1x.png " ) ) ;
private ImageView info_black = new ImageView ( new Image ( " icons/ic_info_black_24dp_1x.png " ) ) ;
private ImageView settings_black = new ImageView ( new Image ( " icons/ic_settings_black_24dp_1x.png " ) ) ;
2017-11-24 21:40:02 +01:00
private ImageView cached_black = new ImageView ( new Image ( " icons/ic_cached_black_24dp_1x.png " ) ) ;
2017-11-13 16:44:39 +01:00
private ImageView smmdb_black = new ImageView ( new Image ( " icons/ic_get_app_black_24dp_1x.png " ) ) ;
private ImageView add_circle_white = new ImageView ( new Image ( " icons/ic_add_circle_white_24dp_1x.png " ) ) ;
private ImageView info_white = new ImageView ( new Image ( " icons/ic_info_white_24dp_1x.png " ) ) ;
private ImageView settings_white = new ImageView ( new Image ( " icons/ic_settings_white_24dp_1x.png " ) ) ;
private ImageView cached_white = new ImageView ( new Image ( " icons/ic_cached_white_24dp_1x.png " ) ) ;
private ImageView smmdb_white = new ImageView ( new Image ( " icons/ic_get_app_white_24dp_1x.png " ) ) ;
private Image close_black = new Image ( " icons/close_black_2048x2048.png " ) ;
2017-12-12 11:19:33 +01:00
2017-12-19 19:08:12 +01:00
// language support
private ResourceBundle bundle ;
private String language ;
private String editHeadingText ;
private String editBodyText ;
private String removeHeadingText ;
private String removeBodyText ;
private String addUpdateHeadingText ;
private String addUpdateBodyText ;
private String addDLCHeadingText ;
private String addDLCBodyText ;
private String licensesLblHeadingText ;
private String licensesLblBodyText ;
2017-12-19 22:18:22 +01:00
private String showLicenses ;
2017-12-19 19:08:12 +01:00
private String aboutBtnHeadingText ;
private String aboutBtnBodyText ;
private String cloudSyncWaringHeadingText ;
private String cloudSyncWaringBodyText ;
private String cloudSyncErrorHeadingText ;
private String cloudSyncErrorBodyText ;
2017-12-19 21:35:49 +01:00
private String addGameBtnHeadingText ;
private String addGameBtnBodyText ;
2017-12-19 19:08:12 +01:00
private String addBtnReturnErrorHeadingText ;
private String addBtnReturnErrorBodyText ;
2017-12-19 21:35:49 +01:00
private String lastPlayed ;
private String today ;
private String yesterday ;
2017-12-19 22:18:22 +01:00
private String never ;
2017-12-19 19:08:12 +01:00
private String playBtnPlay ;
private String playBtnUpdating ;
private String playBtnCopyingFiles ;
2017-12-19 21:35:49 +01:00
private String smmdbDownloadBtnLoading ;
private String smmdbDownloadBtnDownload ;
2017-12-19 19:08:12 +01:00
2017-12-12 11:19:33 +01:00
public void setMain ( Main m ) {
this . main = m ;
dbController = new DBController ( this ) ;
2017-11-14 12:02:39 +01:00
smmdbAPIController = new SmmdbAPIController ( ) ;
2017-03-23 13:44:21 +01:00
}
2017-11-27 10:57:16 +01:00
/ * *
* initialize the MainWindowController
* loadSettings , checkAutoUpdate , initUI and initActions
* /
void init ( ) {
loadSettings ( ) ;
checkAutoUpdate ( ) ;
initUI ( ) ;
initActions ( ) ;
}
/ * *
* initialize all variable UI parameters and elements
* /
private void initUI ( ) {
2017-10-14 15:42:13 +02:00
LOGGER . info ( " initializing UI ... " ) ;
2017-09-12 20:13:26 +02:00
if ( getWindowWidth ( ) > 100 & & getWindowHeight ( ) > 100 ) {
mainAnchorPane . setPrefSize ( getWindowWidth ( ) , getWindowHeight ( ) ) ;
}
2017-03-23 13:44:21 +01:00
cemuTextField . setText ( cemuPath ) ;
2018-01-19 01:14:01 +01:00
romTextField . setText ( romDirectoryPath ) ;
2017-03-23 13:44:21 +01:00
colorPicker . setValue ( Color . valueOf ( getColor ( ) ) ) ;
fullscreenToggleBtn . setSelected ( isFullscreen ( ) ) ;
2017-04-25 22:16:30 +02:00
cloudSyncToggleBtn . setSelected ( isCloudSync ( ) ) ;
2017-11-06 10:42:31 +01:00
autoUpdateToggleBtn . setSelected ( isAutoUpdate ( ) ) ;
2017-11-10 15:58:20 +01:00
branchChoisBox . setItems ( branches ) ;
2017-12-18 09:58:32 +01:00
languageChoisBox . setItems ( languages ) ;
bottomHBox . setPickOnBounds ( false ) ;
2017-11-10 15:58:20 +01:00
if ( isUseBeta ( ) ) {
branchChoisBox . getSelectionModel ( ) . select ( 1 ) ;
} else {
branchChoisBox . getSelectionModel ( ) . select ( 0 ) ;
}
2017-03-23 13:44:21 +01:00
applyColor ( ) ;
2017-06-16 16:23:03 +02:00
2017-11-24 17:07:53 +01:00
// initialize courseTable
2017-12-11 10:31:23 +01:00
titleColumn . setPrefWidth ( 185 ) ;
timeColumn . setPrefWidth ( 112 ) ;
starsColumn . setPrefWidth ( 90 ) ;
2017-06-16 16:23:03 +02:00
courseTreeTable . setRoot ( root ) ;
courseTreeTable . setShowRoot ( false ) ;
courseTreeTable . setEditable ( false ) ;
titleColumn . setCellValueFactory ( cellData - > cellData . getValue ( ) . getValue ( ) . title ) ;
2017-08-26 00:13:09 +02:00
idColumn . setCellValueFactory ( cellData - > cellData . getValue ( ) . getValue ( ) . id ) ;
2017-06-16 16:23:03 +02:00
starsColumn . setCellValueFactory ( cellData - > cellData . getValue ( ) . getValue ( ) . stars . asObject ( ) ) ;
2017-08-26 00:13:09 +02:00
timeColumn . setCellValueFactory ( cellData - > cellData . getValue ( ) . getValue ( ) . time . asObject ( ) ) ;
2017-06-16 16:23:03 +02:00
2017-08-27 18:21:56 +02:00
courseTreeTable . getColumns ( ) . add ( titleColumn ) ;
courseTreeTable . getColumns ( ) . add ( timeColumn ) ;
courseTreeTable . getColumns ( ) . add ( starsColumn ) ;
courseTreeTable . getColumns ( ) . add ( idColumn ) ;
2017-11-24 17:07:53 +01:00
courseTreeTable . getColumns ( ) . get ( 3 ) . setVisible ( false ) ; // the idColumn should not bee displayed
2017-10-14 15:42:13 +02:00
2017-12-19 19:08:12 +01:00
setUILanguage ( ) ;
2017-10-14 15:42:13 +02:00
LOGGER . info ( " initializing UI done " ) ;
2017-03-23 13:44:21 +01:00
}
2017-08-26 00:13:09 +02:00
/ * *
* initialize all actions not initialized by a own method
* /
2017-11-27 10:57:16 +01:00
private void initActions ( ) {
2017-09-12 19:45:39 +02:00
LOGGER . info ( " initializing Actions ... " ) ;
2017-03-23 13:44:21 +01:00
2017-11-15 21:21:52 +01:00
MWC = this ;
2017-10-30 18:28:58 +01:00
burgerTask = new HamburgerBackArrowBasicTransition ( menuHam ) ;
2017-03-23 13:44:21 +01:00
menuHam . addEventHandler ( MouseEvent . MOUSE_PRESSED , ( e ) - > {
2017-06-16 16:23:03 +02:00
if ( playTrue ) {
2017-03-23 13:44:21 +01:00
playBtnSlideOut ( ) ;
}
2017-10-13 21:15:51 +02:00
if ( menuTrue ) {
2017-03-23 13:44:21 +01:00
sideMenuSlideOut ( ) ;
burgerTask . setRate ( - 1 . 0 ) ;
burgerTask . play ( ) ;
menuTrue = false ;
2017-10-30 18:28:58 +01:00
} else {
2017-06-16 16:23:03 +02:00
sideMenuSlideIn ( ) ;
burgerTask . setRate ( 1 . 0 ) ;
burgerTask . play ( ) ;
menuTrue = true ;
2017-03-23 13:44:21 +01:00
}
2017-06-16 16:23:03 +02:00
if ( settingsTrue ) {
2017-10-24 22:41:56 +02:00
settingsScrollPane . setVisible ( false ) ;
2017-03-23 13:44:21 +01:00
saveSettings ( ) ;
settingsTrue = false ;
}
2017-06-16 16:23:03 +02:00
if ( smmdbTrue ) {
smmdbAnchorPane . setVisible ( false ) ;
smmdbTrue = false ;
}
2017-03-23 13:44:21 +01:00
} ) ;
edit . setOnAction ( new EventHandler < ActionEvent > ( ) {
2017-11-24 21:36:03 +01:00
@Override
public void handle ( ActionEvent event ) {
try {
LOGGER . info ( " edit " + selectedGameTitleID ) ;
String [ ] gameInfo = dbController . getGameInfo ( selectedGameTitleID ) ;
// new edit dialog
2017-12-19 21:35:49 +01:00
String headingText = editHeadingText + " \" " + selectedGameTitle + " \" " ;
JFXEditGameDialog editGameDialog = new JFXEditGameDialog ( headingText , editBodyText , dialogBtnStyle , 450 ,
2017-12-12 11:19:33 +01:00
300 , 1 , MWC , main . getPrimaryStage ( ) , main . getPane ( ) ) ;
2017-11-24 21:36:03 +01:00
editGameDialog . setTitle ( gameInfo [ 0 ] ) ;
editGameDialog . setCoverPath ( gameInfo [ 1 ] ) ;
editGameDialog . setRomPath ( gameInfo [ 2 ] ) ;
editGameDialog . setTitleID ( gameInfo [ 3 ] ) ;
editGameDialog . show ( ) ;
2017-11-24 17:07:53 +01:00
} catch ( Exception e ) {
LOGGER . warn ( " trying to edit " + selectedGameTitleID + " ,which is not a valid type! " , e ) ;
}
2017-11-24 21:36:03 +01:00
}
2017-03-23 13:44:21 +01:00
} ) ;
remove . setOnAction ( new EventHandler < ActionEvent > ( ) {
2017-06-29 14:52:58 +02:00
@Override
2017-11-24 21:36:03 +01:00
public void handle ( ActionEvent event ) {
try {
LOGGER . info ( " remove " + selectedGameTitle + " ( " + selectedGameTitleID + " ) " ) ;
2017-12-19 21:35:49 +01:00
String headingText = removeHeadingText + " \" " + selectedGameTitle + " \" " ;
String bodyText = removeBodyText + " " + selectedGameTitle + " ? " ;
2017-11-24 21:36:03 +01:00
EventHandler < ActionEvent > okayAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
try {
games . remove ( selectedUIDataIndex ) ; // remove game form games-list
2017-11-27 10:57:16 +01:00
dbController . removeGame ( selectedGameTitleID ) ; // remove game from database
2017-11-24 21:36:03 +01:00
refreshUIData ( ) ; // refresh all games at gamesAnchorPane (UI)
} catch ( Exception e ) {
LOGGER . error ( " error while removing ROM from database! " , e ) ;
}
2017-03-25 15:18:45 +01:00
}
2017-11-24 21:36:03 +01:00
} ;
EventHandler < ActionEvent > cancelAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
2017-12-12 11:19:33 +01:00
LOGGER . info ( " Action canceld by user! " ) ;
2017-11-24 21:36:03 +01:00
}
} ;
JFXOkayCancelDialog removeGameDialog = new JFXOkayCancelDialog ( headingText , bodyText ,
2017-12-19 21:35:49 +01:00
dialogBtnStyle , 350 , 170 , okayAction , cancelAction , main . getPane ( ) , bundle ) ;
2017-11-24 21:36:03 +01:00
removeGameDialog . show ( ) ;
} catch ( Exception e ) {
LOGGER . error ( " error while removing " + selectedGameTitle + " ( " + selectedGameTitleID + " ) " , e ) ;
}
2017-03-23 13:44:21 +01:00
}
} ) ;
2017-11-20 11:32:14 +01:00
addUpdate . setOnAction ( new EventHandler < ActionEvent > ( ) {
2017-11-24 21:36:03 +01:00
@Override
public void handle ( ActionEvent event ) {
try {
LOGGER . info ( " update: " + selectedGameTitleID ) ;
2017-12-19 21:35:49 +01:00
String headingText = addUpdateHeadingText + " \" " + selectedGameTitle + " \" " ;
2017-11-24 21:36:03 +01:00
EventHandler < ActionEvent > okayAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
DirectoryChooser directoryChooser = new DirectoryChooser ( ) ;
2017-12-12 11:19:33 +01:00
File selectedDirecroty = directoryChooser . showDialog ( main . getPrimaryStage ( ) ) ;
2017-11-24 21:36:03 +01:00
String updatePath = selectedDirecroty . getAbsolutePath ( ) ;
2017-11-24 17:07:53 +01:00
String [ ] parts = selectedGameTitleID . split ( " - " ) ; // split string into 2 parts at "-"
2017-11-24 21:36:03 +01:00
File srcDir = new File ( updatePath ) ;
2017-12-19 21:35:49 +01:00
File destDir = new File ( cemuPath + " /mlc01/usr/title/ " + parts [ 0 ] + " / " + parts [ 1 ] ) ;
2017-11-24 21:36:03 +01:00
// if directory doesn't exist create it
if ( destDir . exists ( ) ! = true ) {
destDir . mkdir ( ) ;
}
try {
LOGGER . info ( " copying the content of " + updatePath + " to " + destDir . toString ( ) ) ;
2017-12-19 21:35:49 +01:00
playBtn . setText ( playBtnUpdating ) ;
2017-11-24 21:36:03 +01:00
playBtn . setDisable ( true ) ;
2017-12-26 17:33:14 +01:00
FileUtils . copyDirectory ( srcDir , destDir ) ;
2017-12-19 21:35:49 +01:00
playBtn . setText ( playBtnPlay ) ;
2017-11-22 23:30:20 +01:00
playBtn . setDisable ( false ) ;
LOGGER . info ( " copying files done! " ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
2017-11-24 21:36:03 +01:00
}
} ;
EventHandler < ActionEvent > cancelAction = new EventHandler < ActionEvent > ( ) {
2017-11-22 23:30:20 +01:00
@Override
public void handle ( ActionEvent event ) {
2017-12-12 11:19:33 +01:00
LOGGER . info ( " Action canceld by user! " ) ;
2017-03-23 13:44:21 +01:00
}
2017-11-22 23:30:20 +01:00
} ;
2017-11-24 21:36:03 +01:00
2017-12-19 21:35:49 +01:00
JFXOkayCancelDialog updateGameDialog = new JFXOkayCancelDialog ( headingText , addUpdateBodyText ,
dialogBtnStyle , 350 , 170 , okayAction , cancelAction , main . getPane ( ) , bundle ) ;
2017-11-22 23:30:20 +01:00
updateGameDialog . show ( ) ;
2017-11-24 21:36:03 +01:00
} catch ( Exception e ) {
LOGGER . warn ( " trying to update " + selectedGameTitleID + " ,which is not a valid type! " , e ) ;
}
}
2017-03-23 13:44:21 +01:00
} ) ;
addDLC . setOnAction ( new EventHandler < ActionEvent > ( ) {
2017-11-24 21:36:03 +01:00
@Override
public void handle ( ActionEvent event ) {
try {
LOGGER . info ( " add DLC: " + selectedGameTitleID ) ;
2017-12-19 21:35:49 +01:00
String headingText = addDLCHeadingText + " \" " + selectedGameTitle + " \" " ;
2017-11-24 21:36:03 +01:00
EventHandler < ActionEvent > okayAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
DirectoryChooser directoryChooser = new DirectoryChooser ( ) ;
2017-12-12 11:19:33 +01:00
File selectedDirecroty = directoryChooser . showDialog ( main . getPrimaryStage ( ) ) ;
2017-11-24 21:36:03 +01:00
String dlcPath = selectedDirecroty . getAbsolutePath ( ) ;
String [ ] parts = selectedGameTitleID . split ( " - " ) ; // split string into 2 parts at "-"
File srcDir = new File ( dlcPath ) ;
2017-12-19 21:35:49 +01:00
File destDir = new File ( cemuPath + " /mlc01/usr/title/ " + parts [ 0 ] + " / " + parts [ 1 ] + " /aoc " ) ;
2017-11-24 21:36:03 +01:00
// if directory doesn't exist create it
if ( destDir . exists ( ) ! = true ) {
destDir . mkdir ( ) ;
}
try {
LOGGER . info ( " copying the content of " + dlcPath + " to " + destDir . toString ( ) ) ;
2017-12-19 21:35:49 +01:00
playBtn . setText ( playBtnCopyingFiles ) ;
2017-11-24 21:36:03 +01:00
playBtn . setDisable ( true ) ;
2017-12-26 17:33:14 +01:00
FileUtils . copyDirectory ( srcDir , destDir ) ;
2017-12-19 21:35:49 +01:00
playBtn . setText ( playBtnPlay ) ;
2017-11-24 21:36:03 +01:00
playBtn . setDisable ( false ) ;
LOGGER . info ( " copying files done! " ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
}
} ;
2017-11-22 23:30:20 +01:00
EventHandler < ActionEvent > cancelAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
2017-12-12 11:19:33 +01:00
LOGGER . info ( " Action canceld by user! " ) ;
2017-03-26 14:21:19 +02:00
}
2017-11-22 23:30:20 +01:00
} ;
2017-11-24 21:36:03 +01:00
2017-12-19 21:35:49 +01:00
JFXOkayCancelDialog addDLCDialog = new JFXOkayCancelDialog ( headingText , addDLCBodyText , dialogBtnStyle ,
350 , 170 , okayAction , cancelAction , main . getPane ( ) , bundle ) ;
2017-11-22 23:30:20 +01:00
addDLCDialog . show ( ) ;
2017-11-24 21:36:03 +01:00
} catch ( Exception e ) {
LOGGER . warn ( " trying to add a dlc to " + selectedGameTitleID + " ,which is not a valid type! " , e ) ;
}
}
2017-03-23 13:44:21 +01:00
} ) ;
gamesAnchorPane . addEventHandler ( MouseEvent . MOUSE_CLICKED , new EventHandler < MouseEvent > ( ) {
2017-11-24 21:36:03 +01:00
@Override
public void handle ( MouseEvent event ) {
if ( playTrue ) {
playBtnSlideOut ( ) ;
2017-03-23 13:44:21 +01:00
}
2017-11-24 21:36:03 +01:00
}
2017-03-23 13:44:21 +01:00
} ) ;
topHBox . addEventHandler ( MouseEvent . MOUSE_CLICKED , new EventHandler < MouseEvent > ( ) {
2017-11-24 21:36:03 +01:00
@Override
public void handle ( MouseEvent event ) {
if ( playTrue ) {
playBtnSlideOut ( ) ;
2017-03-23 13:44:21 +01:00
}
2017-11-24 21:36:03 +01:00
}
2017-03-23 13:44:21 +01:00
} ) ;
2017-06-16 16:23:03 +02:00
2017-12-11 10:31:23 +01:00
courseSearchTextFiled . textProperty ( ) . addListener ( new ChangeListener < String > ( ) {
@Override
public void changed ( ObservableValue < ? extends String > observable , String oldValue , String newValue ) {
filteredCourses . removeAll ( filteredCourses ) ;
root . getChildren ( ) . remove ( 0 , root . getChildren ( ) . size ( ) ) ;
for ( int i = 0 ; i < courses . size ( ) ; i + + ) {
if ( courses . get ( i ) . getTitle ( ) . toLowerCase ( )
. contains ( courseSearchTextFiled . getText ( ) . toLowerCase ( ) ) ) {
// add data from courses to filteredCourses where title contains search input
filteredCourses . add ( courses . get ( i ) ) ;
}
}
for ( int i = 0 ; i < filteredCourses . size ( ) ; i + + ) {
CourseTableDataType helpCourse = new CourseTableDataType ( filteredCourses . get ( i ) . getTitle ( ) ,
filteredCourses . get ( i ) . getId ( ) , filteredCourses . get ( i ) . getTime ( ) ,
filteredCourses . get ( i ) . getStars ( ) ) ;
root . getChildren ( ) . add ( new TreeItem < CourseTableDataType > ( helpCourse ) ) ; // add data to root-node
}
}
} ) ;
2017-11-24 17:07:53 +01:00
// Change-listener for TreeTable
2017-11-24 21:36:03 +01:00
courseTreeTable . getSelectionModel ( ) . selectedItemProperty ( ) . addListener ( new ChangeListener < Object > ( ) {
@Override
public void changed ( ObservableValue < ? > observable , Object oldVal , Object newVal ) {
selected = courseTreeTable . getSelectionModel ( ) . getSelectedIndex ( ) ; // get selected item
2017-08-26 00:13:09 +02:00
2017-11-24 21:36:03 +01:00
id = idColumn . getCellData ( selected ) ; // get name of selected item
for ( int i = 0 ; i < courses . size ( ) ; i + + ) {
if ( courses . get ( i ) . getId ( ) = = id ) {
try {
URL url = new URL ( " https://smmdb.ddns.net/courseimg/ " + id + " _full?v=1 " ) ;
2017-12-11 16:44:47 +01:00
Image sourceImage = new Image ( url . toURI ( ) . toString ( ) ) ;
2017-12-11 11:31:39 +01:00
2017-12-11 16:44:47 +01:00
// scale image to 142px
double scalefactor = 142 / sourceImage . getHeight ( ) ; // calculate scaling factor
int nWidth = ( int ) Math . rint ( scalefactor * sourceImage . getWidth ( ) ) ;
int nHeight = ( int ) Math . rint ( scalefactor * sourceImage . getHeight ( ) ) ;
Image scaledImage = new Image ( url . toURI ( ) . toString ( ) , nWidth , nHeight , false , true ) ; // generate a scaled image
2017-12-11 11:31:39 +01:00
2017-12-11 16:44:47 +01:00
smmdbImageView . setFitWidth ( scaledImage . getWidth ( ) ) ; // set ImageView width to the image width
smmdbImageView . setImage ( scaledImage ) ; // set imageview to image
2017-11-24 21:36:03 +01:00
} catch ( MalformedURLException | URISyntaxException e ) {
2017-12-11 16:44:47 +01:00
LOGGER . warn ( " There was either a problem or no image! " , e ) ;
2017-11-24 21:36:03 +01:00
smmdbImageView . setImage ( close_black ) ;
2017-06-16 23:35:56 +02:00
}
2017-11-24 21:36:03 +01:00
addCourseDescription ( courses . get ( i ) ) ;
}
2017-06-16 16:23:03 +02:00
}
2017-11-24 21:36:03 +01:00
}
} ) ;
2017-07-16 00:13:43 +02:00
2017-11-20 11:32:14 +01:00
helpLbl . setOnMouseClicked ( new EventHandler < MouseEvent > ( ) {
2017-11-24 21:36:03 +01:00
@Override
public void handle ( MouseEvent mouseEvent ) {
if ( mouseEvent . getButton ( ) . equals ( MouseButton . PRIMARY ) ) {
2017-12-11 16:44:47 +01:00
Thread thread = new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
try {
Desktop . getDesktop ( ) . browse ( new URI ( " https://github.com/Seil0/cemu_UI/issues/3 " ) ) ;
} catch ( IOException | URISyntaxException e ) {
e . printStackTrace ( ) ;
}
}
} ) ;
thread . start ( ) ;
2017-11-24 21:36:03 +01:00
}
}
2017-07-16 00:13:43 +02:00
} ) ;
2017-12-19 19:08:12 +01:00
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)
setLanguage ( language ) ;
setUILanguage ( ) ;
saveSettings ( ) ;
}
} ) ;
2017-11-24 21:36:03 +01:00
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 " ) {
2017-11-10 15:58:20 +01:00
setUseBeta ( true ) ;
} else {
setUseBeta ( false ) ;
}
2017-11-24 21:36:03 +01:00
saveSettings ( ) ;
}
} ) ;
2017-11-20 11:32:14 +01:00
licensesLbl . setOnMouseClicked ( new EventHandler < MouseEvent > ( ) {
@Override
public void handle ( MouseEvent mouseEvent ) {
if ( mouseEvent . getButton ( ) . equals ( MouseButton . PRIMARY ) ) {
2017-12-19 21:35:49 +01:00
2017-11-26 11:35:02 +01:00
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 ) {
2017-12-06 13:39:00 +01:00
String headingText = " cemu_UI " ;
String bodyText = " " ;
try {
BufferedReader licenseBR = new BufferedReader (
new InputStreamReader ( getClass ( ) . getResourceAsStream ( " /licenses/licenses_show.txt " ) ) ) ;
String currentLine ;
2017-12-11 17:07:20 +01:00
2017-12-06 13:39:00 +01:00
while ( ( currentLine = licenseBR . readLine ( ) ) ! = null ) {
bodyText = bodyText + currentLine + " \ n " ;
}
licenseBR . close ( ) ;
} catch ( IOException e ) {
LOGGER . error ( " Cloud not read the license file! " , e ) ;
}
2017-12-09 10:16:03 +01:00
JFXTextAreaInfoDialog licenseDialog = new JFXTextAreaInfoDialog ( headingText , bodyText ,
2017-12-12 11:19:33 +01:00
dialogBtnStyle , 510 , 450 , main . getPane ( ) ) ;
2017-12-06 13:39:00 +01:00
licenseDialog . show ( ) ;
2017-12-11 17:07:20 +01:00
licenseDialog . getTextArea ( ) . setEditable ( false ) ;
2017-11-26 11:35:02 +01:00
}
} ;
2017-12-19 21:35:49 +01:00
JFXOkayCancelDialog licenseOverviewDialog = new JFXOkayCancelDialog ( licensesLblHeadingText ,
licensesLblBodyText , dialogBtnStyle , 350 , 275 , okayAction , cancelAction , main . getPane ( ) ,
bundle ) ;
2017-12-19 22:18:22 +01:00
licenseOverviewDialog . setCancelText ( showLicenses ) ;
2017-12-19 21:35:49 +01:00
licenseOverviewDialog . show ( ) ;
2017-11-20 11:32:14 +01:00
}
}
} ) ;
2018-01-19 01:14:01 +01:00
cemuTextField . textProperty ( ) . addListener ( new ChangeListener < String > ( ) {
@Override
public void changed ( ObservableValue < ? extends String > observable , String oldValue , String newValue ) {
setCemuPath ( cemuTextField . getText ( ) ) ;
saveSettings ( ) ;
}
} ) ;
romTextField . textProperty ( ) . addListener ( new ChangeListener < String > ( ) {
@Override
public void changed ( ObservableValue < ? extends String > observable , String oldValue , String newValue ) {
setRomDirectoryPath ( romTextField . getText ( ) ) ;
saveSettings ( ) ;
}
} ) ;
2017-09-15 19:23:44 +02:00
2017-08-27 20:44:08 +02:00
LOGGER . info ( " initializing Actions done! " ) ;
2017-03-23 13:44:21 +01:00
}
2017-11-24 21:36:03 +01:00
@FXML
void detailsSlideoutBtnAction ( ActionEvent event ) {
playBtnSlideOut ( ) ;
}
2017-03-23 13:44:21 +01:00
@FXML
2017-11-24 21:36:03 +01:00
void aboutBtnAction ( ) {
2017-11-10 17:11:19 +01:00
String bodyText = " cemu_UI by @Seil0 \ nVersion: " + version + " ( " + buildNumber + " ) \" " + versionName + " \" \ n "
2017-12-19 21:35:49 +01:00
+ aboutBtnBodyText ;
JFXInfoDialog aboutDialog = new JFXInfoDialog ( aboutBtnHeadingText , bodyText , dialogBtnStyle , 350 , 200 , main . getPane ( ) ) ;
2017-11-10 17:11:19 +01:00
aboutDialog . show ( ) ;
2017-03-23 16:17:38 +01:00
}
2017-03-23 13:44:21 +01:00
2017-11-24 21:36:03 +01:00
@FXML
void settingsBtnAction ( ActionEvent event ) {
if ( smmdbTrue ) {
smmdbAnchorPane . setVisible ( false ) ;
smmdbTrue = false ;
}
if ( settingsTrue ) {
settingsScrollPane . setVisible ( false ) ;
settingsTrue = false ;
saveSettings ( ) ;
} else {
settingsScrollPane . setVisible ( true ) ;
settingsTrue = true ;
}
}
2017-03-23 13:44:21 +01:00
2017-11-24 21:36:03 +01:00
@FXML
void reloadRomsBtnAction ( ) throws IOException {
2018-01-31 17:01:47 +01:00
reloadRoms ( ) ;
2017-11-24 21:36:03 +01:00
}
2017-03-25 15:18:45 +01:00
2017-11-24 21:36:03 +01:00
@FXML
void smmdbBtnAction ( ) {
// show smmdbAnchorPane
if ( smmdbTrue ) {
smmdbAnchorPane . setVisible ( false ) ;
smmdbTrue = false ;
} else {
smmdbAnchorPane . setVisible ( true ) ;
smmdbTrue = true ;
2017-12-09 13:10:19 +01:00
// start query in new thread
Thread thread = new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
Platform . runLater ( ( ) - > {
2017-12-19 21:35:49 +01:00
smmdbDownloadBtn . setText ( smmdbDownloadBtnLoading ) ;
2017-12-09 13:10:19 +01:00
smmdbDownloadBtn . setDisable ( true ) ;
root . getChildren ( ) . remove ( 0 , root . getChildren ( ) . size ( ) ) ;
} ) ;
courses . removeAll ( courses ) ; // remove existing courses
courses . addAll ( smmdbAPIController . startQuery ( ) ) ; // start query
// add query response to courseTreeTable
for ( int i = 0 ; i < courses . size ( ) ; i + + ) {
CourseTableDataType helpCourse = new CourseTableDataType ( courses . get ( i ) . getTitle ( ) ,
courses . get ( i ) . getId ( ) , courses . get ( i ) . getTime ( ) , courses . get ( i ) . getStars ( ) ) ;
Platform . runLater ( ( ) - > {
root . getChildren ( ) . add ( new TreeItem < CourseTableDataType > ( helpCourse ) ) ; // add data to root-node
2017-12-19 21:35:49 +01:00
smmdbDownloadBtn . setText ( smmdbDownloadBtnDownload ) ;
2017-12-09 13:10:19 +01:00
smmdbDownloadBtn . setDisable ( false ) ;
} ) ;
}
}
} ) ;
thread . start ( ) ;
2017-11-24 21:36:03 +01:00
}
}
2017-03-25 15:18:45 +01:00
2017-11-24 21:36:03 +01:00
@FXML
void playBtnAction ( ActionEvent event ) throws InterruptedException , IOException {
dbController . setLastPlayed ( selectedGameTitleID ) ;
playGame = new playGame ( this , dbController ) ;
playGame . start ( ) ;
}
@FXML
void totalPlaytimeBtnAction ( ActionEvent event ) {
}
@FXML
void lastTimePlayedBtnAction ( ActionEvent event ) {
}
2017-03-23 13:44:21 +01:00
2017-11-24 21:36:03 +01:00
@FXML
void cemuTFBtnAction ( ActionEvent event ) {
2017-12-12 11:19:33 +01:00
File cemuDirectory = directoryChooser . showDialog ( main . getPrimaryStage ( ) ) ;
2017-11-24 21:36:03 +01:00
if ( cemuDirectory = = null ) {
LOGGER . info ( " No Directory selected " ) ;
} else {
setCemuPath ( cemuDirectory . getAbsolutePath ( ) ) ;
saveSettings ( ) ;
cemuTextField . setText ( getCemuPath ( ) ) ;
2017-03-23 13:44:21 +01:00
try {
2017-11-24 21:36:03 +01:00
Runtime . getRuntime ( ) . exec ( " java -jar cemu_UI.jar " ) ; // start again
System . exit ( 0 ) ; // finishes itself
2017-03-23 13:44:21 +01:00
} catch ( IOException e ) {
2017-09-15 19:23:44 +02:00
LOGGER . error ( " an error occurred " , e ) ;
2017-03-23 13:44:21 +01:00
}
2017-11-24 21:36:03 +01:00
}
}
2017-03-23 13:44:21 +01:00
2017-11-24 21:36:03 +01:00
@FXML
void romTFBtnAction ( ActionEvent event ) {
2017-12-12 11:19:33 +01:00
File romDirectory = directoryChooser . showDialog ( main . getPrimaryStage ( ) ) ;
2017-11-24 21:36:03 +01:00
if ( romDirectory = = null ) {
LOGGER . info ( " No Directory selected " ) ;
} else {
2018-01-19 01:14:01 +01:00
setRomDirectoryPath ( romDirectory . getAbsolutePath ( ) ) ;
2017-11-24 21:36:03 +01:00
saveSettings ( ) ;
cemuTextField . setText ( getCemuPath ( ) ) ;
2017-03-23 13:44:21 +01:00
try {
2017-11-24 21:36:03 +01:00
Runtime . getRuntime ( ) . exec ( " java -jar cemu_UI.jar " ) ; // start again
System . exit ( 0 ) ; // finishes itself
2017-03-23 13:44:21 +01:00
} catch ( IOException e ) {
2017-09-15 19:23:44 +02:00
LOGGER . error ( " an error occurred " , e ) ;
2017-03-23 13:44:21 +01:00
}
2017-11-24 21:36:03 +01:00
}
}
2017-03-23 13:44:21 +01:00
2017-11-24 21:36:03 +01:00
@FXML
void updateBtnAction ( ActionEvent event ) {
updateController = new UpdateController ( this , buildNumber , useBeta ) ;
2017-11-06 10:42:31 +01:00
Thread updateThread = new Thread ( updateController ) ;
updateThread . setName ( " Updater " ) ;
2017-11-24 21:36:03 +01:00
updateThread . start ( ) ;
2017-10-24 22:41:56 +02:00
}
2017-11-24 21:36:03 +01:00
@FXML
void autoUpdateToggleBtnAction ( ActionEvent event ) {
if ( isAutoUpdate ( ) ) {
setAutoUpdate ( false ) ;
} else {
setAutoUpdate ( true ) ;
}
saveSettings ( ) ;
}
2017-12-11 10:31:23 +01:00
@FXML
void courseSearchTextFiledAction ( ActionEvent event ) {
// not in use
}
2017-10-24 22:41:56 +02:00
2017-06-18 00:33:07 +02:00
@FXML
2017-11-24 21:36:03 +01:00
void smmdbDownloadBtnAction ( ActionEvent event ) {
2017-08-25 14:57:15 +02:00
String downloadUrl = " http://smmdb.ddns.net/api/downloadcourse?id= " + id + " &type=zip " ;
2017-11-24 17:07:53 +01:00
String downloadFileURL = getCemuPath ( ) + " / " + id + " .zip " ; // getCemuPath() + "/" + smmID + "/" + id + ".rar"
2017-07-16 00:13:43 +02:00
String outputFile = getCemuPath ( ) + " / " ;
2017-07-13 22:26:32 +02:00
2017-06-18 00:33:07 +02:00
try {
2017-12-09 13:10:19 +01:00
LOGGER . info ( " beginning download ... " ) ;
2017-06-18 14:45:13 +02:00
HttpURLConnection conn = ( HttpURLConnection ) new URL ( downloadUrl ) . openConnection ( ) ;
ProgressMonitorInputStream pmis = new ProgressMonitorInputStream ( null , " Downloading... " , conn . getInputStream ( ) ) ;
ProgressMonitor pm = pmis . getProgressMonitor ( ) ;
pm . setMillisToDecideToPopup ( 0 ) ;
pm . setMillisToPopup ( 0 ) ;
pm . setMinimum ( 0 ) ; // tell the progress bar that we start at the beginning of the stream
pm . setMaximum ( conn . getContentLength ( ) ) ; // tell the progress bar the total number of bytes we are going to read.
2017-11-24 17:07:53 +01:00
FileUtils . copyInputStreamToFile ( pmis , new File ( downloadFileURL ) ) ; // download file + "/mlc01/emulatorSave"
2017-07-16 00:13:43 +02:00
pmis . close ( ) ;
2017-08-30 11:29:58 +02:00
LOGGER . info ( " downloaded successfull " ) ;
2017-07-16 00:13:43 +02:00
File downloadFile = new File ( downloadFileURL ) ;
2017-08-26 00:13:09 +02:00
String source = downloadFileURL ;
String destination = null ;
2017-08-27 17:25:41 +02:00
int highestCourseNumber = 0 ;
String courseName = null ;
2017-08-26 00:13:09 +02:00
for ( int i = 0 ; i < smmIDs . size ( ) ; i + + ) {
2017-08-27 17:25:41 +02:00
File smmDirectory = new File ( outputFile + " mlc01/emulatorSave/ " + smmIDs . get ( i ) ) ;
if ( smmDirectory . exists ( ) ) {
2017-12-11 15:51:04 +01:00
LOGGER . info ( " found smm directory: " + smmDirectory . getAbsolutePath ( ) ) ;
2017-08-27 17:25:41 +02:00
File [ ] courses = smmDirectory . listFiles ( File : : isDirectory ) ;
2017-11-24 17:07:53 +01:00
// get all existing courses in smm directory, new name is highest number +1
2017-08-27 17:25:41 +02:00
for ( int j = 0 ; j < courses . length ; j + + ) {
int courseNumber = Integer . parseInt ( courses [ j ] . getName ( ) . substring ( 6 ) ) ;
if ( courseNumber > highestCourseNumber ) {
highestCourseNumber = courseNumber ;
}
2017-08-26 00:13:09 +02:00
}
2017-08-27 17:25:41 +02:00
String number = " 000 " + ( highestCourseNumber + 1 ) ;
courseName = " course " + number . substring ( number . length ( ) - 3 , number . length ( ) ) ;
2017-12-09 13:10:19 +01:00
File courseDirectory = new File ( outputFile + " mlc01/emulatorSave/ " + smmIDs . get ( i ) + " / " ) ;
2017-08-26 00:13:09 +02:00
destination = courseDirectory . getPath ( ) ;
2017-12-09 13:10:19 +01:00
}
2017-07-13 22:26:32 +02:00
}
2017-07-16 00:13:43 +02:00
2017-12-09 13:10:19 +01:00
if ( destination ! = null ) {
try {
ZipFile zipFile = new ZipFile ( source ) ;
zipFile . extractAll ( destination ) ;
// rename zip-file
File course = new File ( destination + " /course000 " ) ;
course . renameTo ( new File ( destination + " / " + courseName ) ) ;
LOGGER . info ( " Added new course: " + courseName + " , full path is: " + destination + " / " + courseName ) ;
} catch ( ZipException e ) {
LOGGER . error ( " an error occurred during unziping the file! " , e ) ;
}
2017-07-13 22:26:32 +02:00
}
2017-08-27 17:25:41 +02:00
2017-07-16 00:13:43 +02:00
downloadFile . delete ( ) ;
2017-06-18 14:45:13 +02:00
} catch ( IOException e ) {
2017-08-30 11:29:58 +02:00
LOGGER . error ( " something went wrong during downloading the course " , e ) ;
2017-06-18 00:33:07 +02:00
}
}
2017-11-24 21:36:03 +01:00
@FXML
void fullscreenToggleBtnAction ( ActionEvent event ) {
if ( fullscreen ) {
fullscreen = false ;
} else {
fullscreen = true ;
}
saveSettings ( ) ;
}
2017-04-17 00:58:49 +02:00
@FXML
2017-11-24 21:36:03 +01:00
void cloudSyncToggleBtnAction ( ActionEvent event ) {
2017-04-17 00:58:49 +02:00
if ( cloudSync ) {
cloudSync = false ;
} else {
2017-11-11 22:27:19 +01:00
EventHandler < ActionEvent > okayAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
cloudSync = true ;
//TODO rework for other cloud services
cloudService = " GoogleDrive " ;
2017-12-07 22:52:32 +01:00
// start cloud sync in new thread
Thread thread = new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
2017-12-12 11:19:33 +01:00
if ( main . getCloudController ( ) . initializeConnection ( getCloudService ( ) , getCemuPath ( ) ) ) {
2017-12-12 23:52:54 +01:00
main . getCloudController ( ) . sync ( getCloudService ( ) , getCemuPath ( ) , main . getDirectory ( ) . getPath ( ) ) ;
2017-12-07 22:52:32 +01:00
saveSettings ( ) ;
} else {
cloudSyncToggleBtn . setSelected ( false ) ;
//cloud sync init error dialog
2017-12-19 21:35:49 +01:00
JFXInfoDialog cloudSyncErrorDialog = new JFXInfoDialog ( cloudSyncErrorHeadingText ,
cloudSyncErrorBodyText , dialogBtnStyle , 450 , 170 , main . getPane ( ) ) ;
cloudSyncErrorDialog . show ( ) ;
2017-12-07 22:52:32 +01:00
}
}
} ) ;
thread . start ( ) ;
2017-11-11 22:27:19 +01:00
}
} ;
EventHandler < ActionEvent > cancelAction = new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
cloudSyncToggleBtn . setSelected ( false ) ;
}
} ;
2017-12-19 21:35:49 +01:00
JFXOkayCancelDialog cloudSyncWarningDialog = new JFXOkayCancelDialog ( cloudSyncWaringHeadingText ,
cloudSyncWaringBodyText , dialogBtnStyle , 419 , 140 , okayAction , cancelAction , main . getPane ( ) ,
bundle ) ;
cloudSyncWarningDialog . show ( ) ;
2017-04-17 00:58:49 +02:00
}
2017-03-23 13:44:21 +01:00
}
2017-11-24 21:36:03 +01:00
@FXML
void colorPickerAction ( ActionEvent event ) {
editColor ( colorPicker . getValue ( ) . toString ( ) ) ;
applyColor ( ) ;
}
2017-03-23 13:44:21 +01:00
2017-11-24 21:36:03 +01:00
@FXML
void addBtnAction ( ActionEvent event ) {
2017-12-19 21:35:49 +01:00
String headingText = addGameBtnHeadingText ;
String bodyText = addGameBtnBodyText ;
2017-11-24 21:36:03 +01:00
JFXEditGameDialog addGameDialog = new JFXEditGameDialog ( headingText , bodyText , dialogBtnStyle , 450 , 300 , 0 ,
2017-12-12 11:19:33 +01:00
this , main . getPrimaryStage ( ) , main . getPane ( ) ) ;
2017-11-15 15:58:23 +01:00
addGameDialog . show ( ) ;
2017-11-24 21:36:03 +01:00
}
2017-11-15 21:21:52 +01:00
/ * *
* process the returning data from the addGame dialog
* and add them to the database and the UI
* /
public void addBtnReturn ( String title , String coverPath , String romPath , String titleID ) {
2017-11-15 15:58:23 +01:00
/ * *
2017-11-04 17:04:21 +01:00
* if one parameter dosen ' t contain any value do not add the game
2017-10-31 14:11:17 +01:00
* else convert the cover to . png add copy it into the picture cache ,
2017-03-23 13:44:21 +01:00
* then add the rom to the local_roms database
* /
2017-10-31 14:11:17 +01:00
if ( romPath . length ( ) = = 0 | | coverPath . length ( ) = = 0 | | title . length ( ) = = 0 | | titleID . length ( ) = = 0 ) {
2017-08-30 11:29:58 +02:00
LOGGER . info ( " No parameter set! " ) ;
2017-11-06 10:00:10 +01:00
//addGame error dialog
2017-12-19 21:35:49 +01:00
JFXInfoDialog errorDialog = new JFXInfoDialog ( addBtnReturnErrorHeadingText , addBtnReturnErrorBodyText ,
dialogBtnStyle , 350 , 170 , main . getPane ( ) ) ;
errorDialog . show ( ) ;
2017-11-15 15:58:23 +01:00
2017-12-12 12:02:28 +01:00
} else {
File pictureCache ;
2017-11-15 15:58:23 +01:00
String coverName = new File ( coverPath ) . getName ( ) ;
2017-03-23 13:44:21 +01:00
try {
2017-10-30 17:52:45 +01:00
if ( System . getProperty ( " os.name " ) . equals ( " Linux " ) ) {
2017-11-13 16:44:39 +01:00
pictureCache = getPictureCacheLinux ( ) ;
2017-10-30 17:52:45 +01:00
} else {
2017-11-13 16:44:39 +01:00
pictureCache = getPictureCacheWin ( ) ;
2017-03-26 14:21:19 +02:00
}
2017-10-30 17:52:45 +01:00
BufferedImage originalImage = ImageIO . read ( new File ( coverPath ) ) ; //load cover
2017-03-26 14:21:19 +02:00
int type = originalImage . getType ( ) = = 0 ? BufferedImage . TYPE_INT_ARGB : originalImage . getType ( ) ;
BufferedImage resizeImagePNG = resizeImage ( originalImage , type , 400 , 600 ) ;
2017-12-12 19:19:01 +01:00
coverPath = pictureCache + " / " + coverName ;
2017-12-12 12:02:28 +01:00
ImageIO . write ( resizeImagePNG , " png " , new File ( coverPath ) ) ; //save image to pictureCache
2017-03-23 13:44:21 +01:00
} catch ( IOException e ) {
2017-10-30 17:52:45 +01:00
LOGGER . error ( " Ops something went wrong! Error while resizing cover. " , e ) ;
2017-03-23 13:44:21 +01:00
}
2017-11-24 21:36:03 +01:00
try {
2017-11-27 10:57:16 +01:00
dbController . addGame ( title , coverPath , romPath , titleID , " " , " " , " " , " 0 " ) ;
dbController . loadSingleGame ( titleID ) ;
2017-11-24 21:36:03 +01:00
if ( menuTrue ) {
2017-11-15 21:21:52 +01:00
sideMenuSlideOut ( ) ;
burgerTask . setRate ( - 1 . 0 ) ;
burgerTask . play ( ) ;
menuTrue = false ;
}
2017-10-30 18:28:58 +01:00
refreshUIData ( ) ;
2017-03-23 13:44:21 +01:00
} catch ( SQLException e ) {
2017-10-30 17:52:45 +01:00
LOGGER . error ( " Oops, something went wrong! Error while adding a game. " , e ) ;
2017-03-23 13:44:21 +01:00
}
}
}
2017-11-15 15:58:23 +01:00
2017-11-24 21:36:03 +01:00
public void editBtnReturn ( String title , String coverPath , String romPath , String titleID ) {
2017-11-15 21:21:52 +01:00
dbController . setGameInfo ( title , coverPath , romPath , titleID ) ;
games . remove ( selectedUIDataIndex ) ;
2017-11-27 10:57:16 +01:00
dbController . loadSingleGame ( titleID ) ;
2017-11-15 21:21:52 +01:00
refreshUIData ( ) ;
2017-11-24 21:36:03 +01:00
2017-11-15 21:21:52 +01:00
LOGGER . info ( " successfully edited " + titleID + " , new name is \" " + title + " \" " ) ;
2017-11-24 21:36:03 +01:00
}
2017-11-15 21:21:52 +01:00
2017-05-25 19:07:16 +02:00
/ * *
2017-10-15 13:37:45 +02:00
* add game to games ( ArrayList ) and initialize all needed actions ( start , time stamps , titleID )
2017-05-25 19:07:16 +02:00
* @param title : game title
* @param coverPath : path to cover ( cache )
2017-10-15 13:37:45 +02:00
* @param romPath : path to ROM file ( . rpx )
2017-11-27 10:57:16 +01:00
* @param titleID : game ID
2017-05-25 19:07:16 +02:00
* /
2017-11-13 16:44:39 +01:00
public void addGame ( String title , String coverPath , String romPath , String titleID ) {
2017-03-23 13:44:21 +01:00
VBox VBox = new VBox ( ) ;
2017-10-15 13:37:45 +02:00
Label gameTitleLabel = new Label ( ) ;
2017-03-23 13:44:21 +01:00
JFXButton gameBtn = new JFXButton ( ) ;
2017-10-15 13:37:45 +02:00
ImageView imageView = new ImageView ( ) ;
Image coverImage = new Image ( new File ( coverPath ) . toURI ( ) . toString ( ) ) ;
2017-03-23 13:44:21 +01:00
generatePosition ( ) ;
2017-10-24 21:06:25 +02:00
2017-10-15 13:37:45 +02:00
UIROMDataType uiROMElement = new UIROMDataType ( VBox , gameTitleLabel , gameBtn , imageView , titleID , romPath ) ;
uiROMElement . getLabel ( ) . setText ( title ) ;
uiROMElement . getLabel ( ) . setMaxWidth ( 200 ) ;
uiROMElement . getLabel ( ) . setPadding ( new Insets ( 0 , 0 , 0 , 8 ) ) ;
uiROMElement . getLabel ( ) . setFont ( Font . font ( " System " , FontWeight . BOLD , 14 ) ) ;
// i think we can do this locally and remove the imageView from the data type since it's used as graphic
uiROMElement . getImageView ( ) . setImage ( coverImage ) ;
uiROMElement . getImageView ( ) . setFitHeight ( 300 ) ;
uiROMElement . getImageView ( ) . setFitWidth ( 200 ) ;
uiROMElement . getButton ( ) . setGraphic ( uiROMElement . getImageView ( ) ) ;
uiROMElement . getButton ( ) . setContextMenu ( gameContextMenu ) ;
uiROMElement . getButton ( ) . setStyle ( " -fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.8), 10, 0, 0, 3); " ) ;
uiROMElement . getButton ( ) . addEventHandler ( MouseEvent . MOUSE_CLICKED , new EventHandler < MouseEvent > ( ) {
@Override
public void handle ( MouseEvent event ) {
LOGGER . info ( " selected: " + title + " ; ID: " + titleID ) ;
// getting the selected game index by comparing event.getSource() with games.get(i).getButton()
for ( int i = 0 ; i < games . size ( ) ; i + + ) {
if ( games . get ( i ) . getButton ( ) = = event . getSource ( ) ) {
selectedUIDataIndex = i ;
}
}
gameExecutePath = romPath ;
selectedGameTitleID = titleID ;
selectedGameTitle = title ;
// underlining selected Label
lastGameLabel . setStyle ( " -fx-underline: false; " ) ;
games . get ( selectedUIDataIndex ) . getLabel ( ) . setStyle ( " -fx-underline: true; " ) ;
lastGameLabel = games . get ( selectedUIDataIndex ) . getLabel ( ) ;
// setting last played, if lastPlayed is empty game was never played before, else set correct date
if ( dbController . getLastPlayed ( titleID ) . equals ( " " ) | | dbController . getLastPlayed ( titleID ) . equals ( null ) ) {
2017-12-19 22:18:22 +01:00
lastTimePlayedBtn . setText ( lastPlayed + never ) ;
2017-10-15 13:37:45 +02:00
totalPlaytimeBtn . setText ( dbController . getTotalPlaytime ( titleID ) + " min " ) ;
} else {
DateTimeFormatter dtf = DateTimeFormatter . ofPattern ( " yyyy-MM-dd " ) ;
2017-12-19 21:35:49 +01:00
int tToday = Integer . parseInt ( dtf . format ( LocalDate . now ( ) ) . replaceAll ( " - " , " " ) ) ;
int tYesterday = Integer . parseInt ( dtf . format ( LocalDate . now ( ) . minusDays ( 1 ) ) . replaceAll ( " - " , " " ) ) ;
int tLastPlayedDay = Integer . parseInt ( dbController . getLastPlayed ( titleID ) . replaceAll ( " - " , " " ) ) ;
2017-10-15 13:37:45 +02:00
2017-12-19 21:35:49 +01:00
if ( tLastPlayedDay = = tToday ) {
lastTimePlayedBtn . setText ( lastPlayed + today ) ;
} else if ( tLastPlayedDay = = tYesterday ) {
lastTimePlayedBtn . setText ( lastPlayed + yesterday ) ;
2017-10-15 13:37:45 +02:00
} else {
2017-12-19 21:35:49 +01:00
lastTimePlayedBtn . setText ( lastPlayed + dbController . getLastPlayed ( titleID ) ) ;
2017-10-15 13:37:45 +02:00
}
}
2017-11-24 17:07:53 +01:00
/ * *
* setting total playtime , if total playtime > 60 minutes , format is " x hours x
* minutes " (x h x min), else only minutes are showed
* /
2017-10-15 13:37:45 +02:00
if ( Integer . parseInt ( dbController . getTotalPlaytime ( titleID ) ) > 60 ) {
int hoursPlayed = ( int ) Math . floor ( Integer . parseInt ( dbController . getTotalPlaytime ( titleID ) ) / 60 ) ;
int minutesPlayed = Integer . parseInt ( dbController . getTotalPlaytime ( titleID ) ) - 60 * hoursPlayed ;
totalPlaytimeBtn . setText ( hoursPlayed + " h " + minutesPlayed + " min " ) ;
} else {
totalPlaytimeBtn . setText ( dbController . getTotalPlaytime ( titleID ) + " min " ) ;
}
if ( ! playTrue ) {
playBtnSlideIn ( ) ;
}
if ( menuTrue ) {
sideMenuSlideOut ( ) ;
2017-10-30 18:28:58 +01:00
burgerTask . setRate ( - 1 . 0 ) ;
burgerTask . play ( ) ;
menuTrue = false ;
2017-10-15 13:37:45 +02:00
}
}
} ) ;
uiROMElement . getVBox ( ) . setLayoutX ( getxPos ( ) ) ;
uiROMElement . getVBox ( ) . setLayoutY ( getyPos ( ) ) ;
uiROMElement . getVBox ( ) . getChildren ( ) . addAll ( gameTitleLabel , gameBtn ) ;
// add uiROMElement to games list
games . add ( uiROMElement ) ;
2017-04-06 12:00:36 +02:00
}
2018-01-31 17:01:47 +01:00
public void reloadRoms ( ) {
JFXSpinner spinner = new JFXSpinner ( ) ;
spinner . setPrefSize ( 30 , 30 ) ;
AnchorPane . setTopAnchor ( spinner , ( main . getPane ( ) . getPrefHeight ( ) - spinner . getPrefHeight ( ) ) / 2 ) ;
AnchorPane . setLeftAnchor ( spinner , ( main . getPane ( ) . getPrefWidth ( ) - spinner . getPrefWidth ( ) ) / 2 ) ;
Thread thread = new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
Platform . runLater ( ( ) - > {
//remove all games form gamesAnchorPane
gamesAnchorPane . getChildren ( ) . removeAll ( gamesAnchorPane . getChildren ( ) ) ;
main . getPane ( ) . getChildren ( ) . add ( spinner ) ; // add spinner to pane
} ) ;
dbController . loadRomDirectory ( getRomDirectoryPath ( ) ) ; // reload the ROM directory
games . removeAll ( games ) ; // remove all games from the mwc game list
dbController . loadAllGames ( ) ; // load all games from the database to the mwc
Platform . runLater ( ( ) - > {
refreshUIData ( ) ; // refresh the list of games displayed on screen
main . getPane ( ) . getChildren ( ) . remove ( spinner ) ;
} ) ;
}
} ) ;
thread . start ( ) ;
}
2017-11-24 21:36:03 +01:00
// add all games saved in games(ArrayList) to gamesAnchorPane
void addUIData ( ) {
for ( int i = 0 ; i < games . size ( ) ; i + + ) {
gamesAnchorPane . getChildren ( ) . add ( games . get ( i ) . getVBox ( ) ) ;
}
}
2017-06-18 13:01:04 +02:00
2017-09-12 19:45:39 +02:00
//remove all games from gamesAnchorPane and add them afterwards
void refreshUIData ( ) {
//remove all games form gamesAnchorPane
gamesAnchorPane . getChildren ( ) . removeAll ( gamesAnchorPane . getChildren ( ) ) ;
//reset position
xPos = - 200 ;
yPos = 17 ;
xPosHelper = 0 ;
//add all games to gamesAnchorPane (UI)
for ( int i = 0 ; i < games . size ( ) ; i + + ) {
generatePosition ( ) ;
games . get ( i ) . getVBox ( ) . setLayoutX ( getxPos ( ) ) ;
games . get ( i ) . getVBox ( ) . setLayoutY ( getyPos ( ) ) ;
gamesAnchorPane . getChildren ( ) . add ( games . get ( i ) . getVBox ( ) ) ;
}
}
2017-12-19 19:08:12 +01:00
void setUILanguage ( ) {
switch ( getLanguage ( ) ) {
case " en_US " :
bundle = ResourceBundle . getBundle ( " locals.cemu_UI-Local " , Locale . US ) ; //us_English
languageChoisBox . getSelectionModel ( ) . select ( 0 ) ;
break ;
case " de_DE " :
bundle = ResourceBundle . getBundle ( " locals.cemu_UI-Local " , Locale . GERMAN ) ; //German
languageChoisBox . getSelectionModel ( ) . select ( 1 ) ;
break ;
default :
bundle = ResourceBundle . getBundle ( " locals.cemu_UI-Local " , Locale . US ) ; //default local
languageChoisBox . getSelectionModel ( ) . select ( 0 ) ;
break ;
}
// Buttons
aboutBtn . setText ( bundle . getString ( " aboutBtn " ) ) ;
settingsBtn . setText ( bundle . getString ( " settingsBtn " ) ) ;
addBtn . setText ( bundle . getString ( " addBtn " ) ) ;
reloadRomsBtn . setText ( bundle . getString ( " reloadRomsBtn " ) ) ;
smmdbBtn . setText ( bundle . getString ( " smmdbBtn " ) ) ;
cemuTFBtn . setText ( bundle . getString ( " cemuTFBtn " ) ) ;
romTFBtn . setText ( bundle . getString ( " romTFBtn " ) ) ;
updateBtn . setText ( bundle . getString ( " updateBtnCheckNow " ) ) ;
smmdbDownloadBtn . setText ( bundle . getString ( " smmdbDownloadBtn " ) ) ;
playBtn . setText ( bundle . getString ( " playBtn " ) ) ;
2017-12-19 22:18:22 +01:00
cloudSyncToggleBtn . setText ( bundle . getString ( " cloudSyncToggleBtn " ) ) ;
autoUpdateToggleBtn . setText ( bundle . getString ( " autoUpdateToggleBtn " ) ) ;
2017-12-21 11:02:54 +01:00
fullscreenToggleBtn . setText ( bundle . getString ( " fullscreenToggleBtn " ) ) ;
2017-12-19 19:08:12 +01:00
// Labels
cemu_UISettingsLbl . setText ( bundle . getString ( " cemu_UISettingsLbl " ) ) ;
cemuDirectoryLbl . setText ( bundle . getString ( " cemuDirectoryLbl " ) ) ;
romDirectoryLbl . setText ( bundle . getString ( " romDirectoryLbl " ) ) ;
mainColorLbl . setText ( bundle . getString ( " mainColorLbl " ) ) ;
languageLbl . setText ( bundle . getString ( " languageLbl " ) ) ;
updateLbl . setText ( bundle . getString ( " updateLbl " ) ) ;
branchLbl . setText ( bundle . getString ( " branchLbl " ) ) ;
cemuSettingsLbl . setText ( bundle . getString ( " cemuSettingsLbl " ) ) ;
licensesLbl . setText ( bundle . getString ( " licensesLbl " ) ) ;
// Columns
titleColumn . setText ( bundle . getString ( " titleColumn " ) ) ;
idColumn . setText ( bundle . getString ( " idColumn " ) ) ;
starsColumn . setText ( bundle . getString ( " starsColumn " ) ) ;
timeColumn . setText ( bundle . getString ( " timeColumn " ) ) ;
// Strings
editHeadingText = bundle . getString ( " editHeadingText " ) ;
editBodyText = bundle . getString ( " editBodyText " ) ;
removeHeadingText = bundle . getString ( " removeHeadingText " ) ;
removeBodyText = bundle . getString ( " removeBodyText " ) ;
addUpdateHeadingText = bundle . getString ( " addUpdateHeadingText " ) ;
addUpdateBodyText = bundle . getString ( " addUpdateBodyText " ) ;
addDLCHeadingText = bundle . getString ( " addDLCHeadingText " ) ;
addDLCBodyText = bundle . getString ( " addDLCBodyText " ) ;
licensesLblHeadingText = bundle . getString ( " licensesLblHeadingText " ) ;
licensesLblBodyText = bundle . getString ( " licensesLblBodyText " ) ;
2017-12-19 22:18:22 +01:00
showLicenses = bundle . getString ( " showLicenses " ) ;
2017-12-19 19:08:12 +01:00
aboutBtnHeadingText = bundle . getString ( " aboutBtnHeadingText " ) ;
aboutBtnBodyText = bundle . getString ( " aboutBtnBodyText " ) ;
cloudSyncWaringHeadingText = bundle . getString ( " cloudSyncWaringHeadingText " ) ;
cloudSyncWaringBodyText = bundle . getString ( " cloudSyncWaringBodyText " ) ;
cloudSyncErrorHeadingText = bundle . getString ( " cloudSyncErrorHeadingText " ) ;
cloudSyncErrorBodyText = bundle . getString ( " cloudSyncErrorBodyText " ) ;
2017-12-19 21:35:49 +01:00
addGameBtnHeadingText = bundle . getString ( " addGameBtnHeadingText " ) ;
addGameBtnBodyText = bundle . getString ( " addGameBtnBodyText " ) ;
2017-12-19 19:08:12 +01:00
addBtnReturnErrorHeadingText = bundle . getString ( " addBtnReturnErrorHeadingText " ) ;
addBtnReturnErrorBodyText = bundle . getString ( " addBtnReturnErrorBodyText " ) ;
2017-12-19 21:35:49 +01:00
lastPlayed = bundle . getString ( " lastPlayed " ) ;
today = bundle . getString ( " today " ) ;
yesterday = bundle . getString ( " yesterday " ) ;
2017-12-19 22:18:22 +01:00
never = bundle . getString ( " never " ) ;
2017-12-19 19:08:12 +01:00
playBtnPlay = bundle . getString ( " playBtnPlay " ) ;
playBtnUpdating = bundle . getString ( " playBtnUpdating " ) ;
playBtnCopyingFiles = bundle . getString ( " playBtnCopyingFiles " ) ;
2017-12-19 21:35:49 +01:00
smmdbDownloadBtnLoading = bundle . getString ( " smmdbDownloadBtnLoading " ) ;
smmdbDownloadBtnDownload = bundle . getString ( " smmdbDownloadBtnDownload " ) ;
2017-12-19 19:08:12 +01:00
}
2017-11-24 21:36:03 +01:00
2017-11-27 10:57:16 +01:00
private void checkAutoUpdate ( ) {
2017-11-24 21:36:03 +01:00
if ( isAutoUpdate ( ) ) {
try {
LOGGER . info ( " AutoUpdate: looking for updates on startup ... " ) ;
updateController = new UpdateController ( this , buildNumber , useBeta ) ;
Thread updateThread = new Thread ( updateController ) ;
updateThread . setName ( " Updater " ) ;
updateThread . start ( ) ;
updateThread . join ( ) ;
} catch ( InterruptedException e ) {
e . printStackTrace ( ) ;
}
}
}
2017-11-06 10:42:31 +01:00
2017-11-24 21:36:03 +01:00
private void addCourseDescription ( SmmdbApiDataType course ) {
String courseTheme ;
String gameStyle ;
String difficulty ;
String autoscroll ;
smmdbTextFlow . getChildren ( ) . remove ( 0 , smmdbTextFlow . getChildren ( ) . size ( ) ) ;
nameText . clear ( ) ;
courseText . clear ( ) ;
switch ( course . getCourseTheme ( ) ) {
2017-06-18 13:01:04 +02:00
case 0 :
2017-08-26 00:13:09 +02:00
courseTheme = " Ground " ;
2017-06-18 13:01:04 +02:00
break ;
case 1 :
2017-08-26 00:13:09 +02:00
courseTheme = " Underground " ;
2017-06-18 13:01:04 +02:00
break ;
case 2 :
2017-08-26 00:13:09 +02:00
courseTheme = " Castle " ;
break ;
case 3 :
courseTheme = " Airship " ;
break ;
case 4 :
courseTheme = " Underwater " ;
break ;
case 5 :
courseTheme = " Ghost House " ;
2017-06-18 13:01:04 +02:00
break ;
default :
2017-08-26 00:13:09 +02:00
courseTheme = " notset " ;
2017-06-18 13:01:04 +02:00
break ;
}
2017-11-24 21:36:03 +01:00
switch ( course . getGameStyle ( ) ) {
2017-06-18 13:01:04 +02:00
case 0 :
2017-08-26 00:13:09 +02:00
gameStyle = " SMB " ;
2017-06-18 13:01:04 +02:00
break ;
case 1 :
2017-08-26 00:13:09 +02:00
gameStyle = " SMB3 " ;
2017-06-18 13:01:04 +02:00
break ;
case 2 :
2017-08-26 00:13:09 +02:00
gameStyle = " SMW " ;
2017-06-18 13:01:04 +02:00
break ;
case 3 :
2017-08-26 00:13:09 +02:00
gameStyle = " NSMBU " ;
2017-06-18 13:01:04 +02:00
break ;
default :
2017-08-26 00:13:09 +02:00
gameStyle = " notset " ;
2017-06-18 13:01:04 +02:00
break ;
}
2017-11-24 21:36:03 +01:00
switch ( course . getDifficulty ( ) ) {
2017-06-18 13:01:04 +02:00
case 0 :
difficulty = " Easy " ;
break ;
case 1 :
difficulty = " Normal " ;
break ;
case 2 :
difficulty = " Expert " ;
break ;
case 3 :
difficulty = " Super Expert " ;
break ;
case 4 :
difficulty = " Mixed " ;
break ;
default :
difficulty = " notset " ;
break ;
}
2017-11-24 21:36:03 +01:00
switch ( course . getAutoScroll ( ) ) {
2017-08-26 00:13:09 +02:00
case 0 :
autoscroll = " disabled " ;
break ;
case 1 :
autoscroll = " slow " ;
break ;
case 2 :
autoscroll = " medium " ;
break ;
case 3 :
autoscroll = " fast " ;
break ;
default :
autoscroll = " notset " ;
break ;
}
2017-11-24 21:36:03 +01:00
nameText . add ( 0 , new Text ( " title " + " : " ) ) ;
nameText . add ( 1 , new Text ( " owner " + " : " ) ) ;
nameText . add ( 2 , new Text ( " Course-Theme " + " : " ) ) ;
nameText . add ( 3 , new Text ( " Game-Style " + " : " ) ) ;
nameText . add ( 4 , new Text ( " difficulty " + " : " ) ) ;
nameText . add ( 5 , new Text ( " Auto-Scroll " + " : " ) ) ;
nameText . add ( 6 , new Text ( " Time " + " : " ) ) ;
nameText . add ( 7 , new Text ( " lastmodified " + " : " ) ) ;
nameText . add ( 8 , new Text ( " uploaded " + " : " ) ) ;
nameText . add ( 9 , new Text ( " nintendoid " + " : " ) ) ;
courseText . add ( 0 , new Text ( course . getTitle ( ) + " \ n " ) ) ;
courseText . add ( 1 , new Text ( course . getOwner ( ) + " \ n " ) ) ;
courseText . add ( 2 , new Text ( courseTheme + " \ n " ) ) ;
courseText . add ( 3 , new Text ( gameStyle + " \ n " ) ) ;
courseText . add ( 4 , new Text ( difficulty + " \ n " ) ) ;
courseText . add ( 5 , new Text ( autoscroll + " \ n " ) ) ;
courseText . add ( 6 , new Text ( course . getTime ( ) + " \ n " ) ) ;
courseText . add ( 7 , new Text ( new java . util . Date ( ( long ) course . getLastmodified ( ) * 1000 ) + " \ n " ) ) ;
courseText . add ( 8 , new Text ( new java . util . Date ( ( long ) course . getUploaded ( ) * 1000 ) + " \ n " ) ) ;
courseText . add ( 9 , new Text ( course . getNintendoid ( ) + " \ n " ) ) ;
for ( int i = 0 ; i < nameText . size ( ) ; i + + ) {
nameText . get ( i ) . setFont ( Font . font ( " System " , FontWeight . BOLD , 14 ) ) ;
courseText . get ( i ) . setFont ( Font . font ( " System " , 14 ) ) ;
smmdbTextFlow . getChildren ( ) . addAll ( nameText . get ( i ) , courseText . get ( i ) ) ;
2017-06-18 13:01:04 +02:00
}
2017-11-24 21:36:03 +01:00
}
2017-03-23 13:44:21 +01:00
2017-08-26 00:13:09 +02:00
/ * *
* xPosHelper based on window width = - 24 ( Windows ) / - 36 ( Linux )
* calculates how many games can be displayed in one row
* /
2017-06-18 13:01:04 +02:00
private void generatePosition ( ) {
2017-10-14 15:42:13 +02:00
int xPosHelperMax ;
2017-10-30 17:52:45 +01:00
/ * * FIXME somehow the window width is set to 8 , if we can find a way to get always the real window with
* ( at the beginning we have to use prefWidth after resizing Width ) we can remove this
* /
2017-10-14 15:42:13 +02:00
if ( mainAnchorPane . getWidth ( ) < 10 ) {
xPosHelperMax = ( int ) Math . floor ( ( mainAnchorPane . getPrefWidth ( ) - 36 ) / 217 ) ;
} else {
xPosHelperMax = ( int ) Math . floor ( ( mainAnchorPane . getWidth ( ) - 36 ) / 217 ) ;
}
2017-08-11 20:01:43 +02:00
if ( xPosHelper = = xPosHelperMax ) {
2017-09-15 19:23:44 +02:00
oldXPosHelper = xPosHelper ;
2017-03-23 13:44:21 +01:00
xPos = 17 ;
yPos = yPos + 345 ;
xPosHelper = 1 ;
} else {
xPos = xPos + 217 ;
xPosHelper + + ;
}
2017-10-15 12:29:18 +02:00
2017-11-24 21:36:03 +01:00
// System.out.println("Breit: " + main.pane.getWidth());
// System.out.println("Breit2: " + mainAnchorPane.getWidth());
2017-08-11 20:01:43 +02:00
// System.out.println("xPosHelper: " + xPosHelper);
// System.out.println("yPos: " + yPos);
// System.out.println("xPos: " + xPos);
2017-03-23 13:44:21 +01:00
}
2017-06-18 13:01:04 +02:00
private void applyColor ( ) {
2017-03-28 17:40:01 +02:00
String boxStyle = " -fx-background-color: # " + getColor ( ) + " ; " ;
2017-03-23 13:44:21 +01:00
String btnStyleBlack = " -fx-button-type: RAISED; -fx-background-color: # " + getColor ( ) + " ; -fx-text-fill: BLACK; " ;
2017-03-28 17:40:01 +02:00
String btnStyleWhite = " -fx-button-type: RAISED; -fx-background-color: # " + getColor ( ) + " ; -fx-text-fill: WHITE; " ;
BigInteger icolor = new BigInteger ( getColor ( ) , 16 ) ;
BigInteger ccolor = new BigInteger ( " 78909cff " , 16 ) ;
2017-03-23 13:44:21 +01:00
2017-03-28 17:40:01 +02:00
sideMenuVBox . setStyle ( boxStyle ) ;
topHBox . setStyle ( boxStyle ) ;
2017-03-23 13:44:21 +01:00
cemuTextField . setFocusColor ( Color . valueOf ( getColor ( ) ) ) ;
romTextField . setFocusColor ( Color . valueOf ( getColor ( ) ) ) ;
2017-11-24 21:36:03 +01:00
if ( icolor . compareTo ( ccolor ) = = - 1 ) {
2017-08-01 20:11:17 +02:00
dialogBtnStyle = btnStyleWhite ;
2017-11-24 21:36:03 +01:00
2017-03-28 17:40:01 +02:00
aboutBtn . setStyle ( " -fx-text-fill: WHITE; " ) ;
settingsBtn . setStyle ( " -fx-text-fill: WHITE; " ) ;
addBtn . setStyle ( " -fx-text-fill: WHITE; " ) ;
reloadRomsBtn . setStyle ( " -fx-text-fill: WHITE; " ) ;
2017-05-25 19:07:16 +02:00
smmdbBtn . setStyle ( " -fx-text-fill: WHITE; " ) ;
2017-03-28 17:40:01 +02:00
playBtn . setStyle ( " -fx-text-fill: WHITE; -fx-font-family: Roboto Medium; " ) ;
cemuTFBtn . setStyle ( btnStyleWhite ) ;
romTFBtn . setStyle ( btnStyleWhite ) ;
2017-10-24 22:41:56 +02:00
updateBtn . setStyle ( btnStyleWhite ) ;
2017-06-18 00:33:07 +02:00
smmdbDownloadBtn . setStyle ( btnStyleWhite ) ;
2017-03-28 17:40:01 +02:00
playBtn . setStyle ( btnStyleWhite ) ;
2017-10-24 22:41:56 +02:00
2017-03-28 17:40:01 +02:00
aboutBtn . setGraphic ( info_white ) ;
settingsBtn . setGraphic ( settings_white ) ;
addBtn . setGraphic ( add_circle_white ) ;
reloadRomsBtn . setGraphic ( cached_white ) ;
2017-05-25 19:07:16 +02:00
smmdbBtn . setGraphic ( smmdb_white ) ;
2017-11-24 21:36:03 +01:00
2017-03-31 19:19:34 +02:00
menuHam . getStyleClass ( ) . add ( " jfx-hamburgerW " ) ;
2017-11-24 21:36:03 +01:00
} else {
2017-08-01 20:11:17 +02:00
dialogBtnStyle = btnStyleBlack ;
2017-11-24 21:36:03 +01:00
2017-03-28 17:40:01 +02:00
aboutBtn . setStyle ( " -fx-text-fill: BLACK; " ) ;
settingsBtn . setStyle ( " -fx-text-fill: BLACK; " ) ;
addBtn . setStyle ( " -fx-text-fill: BLACK; " ) ;
reloadRomsBtn . setStyle ( " -fx-text-fill: BLACK; " ) ;
2017-05-25 19:07:16 +02:00
smmdbBtn . setStyle ( " -fx-text-fill: BLACK; " ) ;
2017-03-28 17:40:01 +02:00
playBtn . setStyle ( " -fx-text-fill: BLACK; -fx-font-family: Roboto Medium; " ) ;
cemuTFBtn . setStyle ( btnStyleBlack ) ;
romTFBtn . setStyle ( btnStyleBlack ) ;
2017-10-24 22:41:56 +02:00
updateBtn . setStyle ( btnStyleBlack ) ;
2017-06-18 00:33:07 +02:00
smmdbDownloadBtn . setStyle ( btnStyleBlack ) ;
2017-03-28 17:40:01 +02:00
playBtn . setStyle ( btnStyleBlack ) ;
2017-11-24 21:36:03 +01:00
2017-03-28 17:40:01 +02:00
aboutBtn . setGraphic ( info_black ) ;
settingsBtn . setGraphic ( settings_black ) ;
addBtn . setGraphic ( add_circle_black ) ;
reloadRomsBtn . setGraphic ( cached_black ) ;
2017-05-25 19:07:16 +02:00
smmdbBtn . setGraphic ( smmdb_black ) ;
2017-11-24 21:36:03 +01:00
2017-03-31 19:19:34 +02:00
menuHam . getStyleClass ( ) . add ( " jfx-hamburgerB " ) ;
2017-03-28 17:40:01 +02:00
}
2017-11-24 21:36:03 +01:00
for ( int i = 0 ; i < games . size ( ) ; i + + ) {
2017-04-06 12:00:36 +02:00
games . get ( i ) . getButton ( ) . setRipplerFill ( Paint . valueOf ( getColor ( ) ) ) ;
2017-03-26 14:21:19 +02:00
}
2017-11-24 21:36:03 +01:00
}
2017-03-23 13:44:21 +01:00
2017-11-13 16:44:39 +01:00
public void saveSettings ( ) {
2017-09-12 15:04:21 +02:00
LOGGER . info ( " saving Settings ... " ) ;
2017-08-30 11:29:58 +02:00
OutputStream outputStream ; //new output-stream
try {
props . setProperty ( " cemuPath " , getCemuPath ( ) ) ;
2018-01-19 01:14:01 +01:00
props . setProperty ( " romPath " , getRomDirectoryPath ( ) ) ;
2017-08-30 11:29:58 +02:00
props . setProperty ( " color " , getColor ( ) ) ;
2017-12-19 19:08:12 +01:00
props . setProperty ( " language " , getLanguage ( ) ) ;
2017-08-30 11:29:58 +02:00
props . setProperty ( " fullscreen " , String . valueOf ( isFullscreen ( ) ) ) ;
2017-11-06 10:42:31 +01:00
props . setProperty ( " cloudSync " , String . valueOf ( isCloudSync ( ) ) ) ;
props . setProperty ( " autoUpdate " , String . valueOf ( isAutoUpdate ( ) ) ) ;
2017-11-10 15:58:20 +01:00
props . setProperty ( " useBeta " , String . valueOf ( isUseBeta ( ) ) ) ;
2017-08-30 11:29:58 +02:00
if ( getCloudService ( ) = = null ) {
props . setProperty ( " cloudService " , " " ) ;
} else {
props . setProperty ( " cloudService " , getCloudService ( ) ) ;
}
2017-12-13 00:07:20 +01:00
props . setProperty ( " folderID " , main . getCloudController ( ) . getFolderID ( getCloudService ( ) ) ) ;
2017-12-12 23:52:54 +01:00
props . setProperty ( " lastLocalSync " , String . valueOf ( getLastLocalSync ( ) ) ) ;
2017-09-12 20:13:26 +02:00
props . setProperty ( " windowWidth " , String . valueOf ( mainAnchorPane . getWidth ( ) ) ) ;
props . setProperty ( " windowHeight " , String . valueOf ( mainAnchorPane . getHeight ( ) ) ) ;
2017-08-30 11:29:58 +02:00
if ( System . getProperty ( " os.name " ) . equals ( " Linux " ) ) {
outputStream = new FileOutputStream ( configFileLinux ) ;
} else {
outputStream = new FileOutputStream ( configFileWin ) ;
2017-03-23 13:44:21 +01:00
}
2017-08-30 11:29:58 +02:00
props . storeToXML ( outputStream , " cemu_UI settings " ) ; //write new .xml
outputStream . close ( ) ;
LOGGER . info ( " saving Settings done! " ) ;
} catch ( IOException e ) {
LOGGER . error ( " an error occured " , e ) ;
}
2017-03-23 13:44:21 +01:00
}
2017-08-30 11:29:58 +02:00
/ * *
* loading saved settings from the config . xml file
* if a value is not present , default is used instead
* /
2017-11-27 10:57:16 +01:00
private void loadSettings ( ) {
2017-09-12 15:04:21 +02:00
LOGGER . info ( " loading settings ... " ) ;
2017-03-23 13:44:21 +01:00
InputStream inputStream ;
try {
if ( System . getProperty ( " os.name " ) . equals ( " Linux " ) ) {
2017-08-30 11:29:58 +02:00
inputStream = new FileInputStream ( configFileLinux ) ;
2017-03-23 13:44:21 +01:00
} else {
2017-08-30 11:29:58 +02:00
inputStream = new FileInputStream ( configFileWin ) ;
2017-03-23 13:44:21 +01:00
}
props . loadFromXML ( inputStream ) ; //new input-stream from .xml
2017-08-30 11:29:58 +02:00
try {
setCemuPath ( props . getProperty ( " cemuPath " ) ) ;
} catch ( Exception e ) {
LOGGER . error ( " cloud not load cemuPath " , e ) ;
setCemuPath ( " " ) ;
}
try {
2018-01-19 01:14:01 +01:00
setRomDirectoryPath ( props . getProperty ( " romPath " ) ) ;
2017-08-30 11:29:58 +02:00
} catch ( Exception e ) {
LOGGER . error ( " could not load romPath " , e ) ;
2018-01-19 01:14:01 +01:00
setRomDirectoryPath ( " " ) ;
}
2017-08-30 11:29:58 +02:00
try {
setColor ( props . getProperty ( " color " ) ) ;
} catch ( Exception e ) {
LOGGER . error ( " could not load color value, setting default instead " , e ) ;
setColor ( " 00a8cc " ) ;
}
2017-12-19 21:35:49 +01:00
if ( props . getProperty ( " language " ) = = null ) {
LOGGER . error ( " cloud not load language, setting default instead " ) ;
setLanguage ( " en_US " ) ;
} else {
2017-12-19 19:08:12 +01:00
setLanguage ( props . getProperty ( " language " ) ) ;
}
2017-08-30 11:29:58 +02:00
try {
setFullscreen ( Boolean . parseBoolean ( props . getProperty ( " fullscreen " ) ) ) ;
} catch ( Exception e ) {
LOGGER . error ( " could not load fullscreen, setting default instead " , e ) ;
setFullscreen ( false ) ;
}
try {
setCloudSync ( Boolean . parseBoolean ( props . getProperty ( " cloudSync " ) ) ) ;
} catch ( Exception e ) {
LOGGER . error ( " could not load cloudSync, setting default instead " , e ) ;
setCloudSync ( false ) ;
}
2017-11-06 10:42:31 +01:00
try {
setAutoUpdate ( Boolean . parseBoolean ( props . getProperty ( " autoUpdate " ) ) ) ;
} catch ( Exception e ) {
LOGGER . error ( " cloud not load autoUpdate " , e ) ;
setAutoUpdate ( false ) ;
}
2017-11-10 15:58:20 +01:00
try {
setUseBeta ( Boolean . parseBoolean ( props . getProperty ( " useBeta " ) ) ) ;
} catch ( Exception e ) {
LOGGER . error ( " cloud not load autoUpdate " , e ) ;
setUseBeta ( false ) ;
}
2017-11-06 10:42:31 +01:00
2017-08-30 11:29:58 +02:00
try {
setCloudService ( props . getProperty ( " cloudService " ) ) ;
} catch ( Exception e ) {
LOGGER . error ( " could not load cloudSync " , e ) ;
setCloudService ( " " ) ;
}
2017-12-13 00:07:20 +01:00
try {
main . getCloudController ( ) . setFolderID ( props . getProperty ( " folderID " ) , getCloudService ( ) ) ;
} catch ( Exception e ) {
LOGGER . error ( " could not load folderID, disable cloud sync. Please contact an developer " , e ) ;
setCloudSync ( false ) ;
}
2017-08-30 11:29:58 +02:00
try {
2017-12-12 23:52:54 +01:00
setLastLocalSync ( Long . parseLong ( props . getProperty ( " lastLocalSync " ) ) ) ;
2017-08-30 11:29:58 +02:00
} catch ( Exception e ) {
2017-12-12 23:52:54 +01:00
LOGGER . error ( " could not load lastSuccessSync, setting default instead " , e ) ;
setLastLocalSync ( 0 ) ;
2017-08-30 11:29:58 +02:00
}
2017-09-12 20:13:26 +02:00
try {
setWindowWidth ( Double . parseDouble ( props . getProperty ( " windowWidth " ) ) ) ;
} catch ( Exception e ) {
LOGGER . error ( " could not load windowWidth, setting default instead " , e ) ;
setWindowWidth ( 904 ) ;
}
try {
setWindowHeight ( Double . parseDouble ( props . getProperty ( " windowHeight " ) ) ) ;
} catch ( Exception e ) {
LOGGER . error ( " could not load windowHeight, setting default instead " , e ) ;
setWindowHeight ( 600 ) ;
}
2017-03-23 13:44:21 +01:00
inputStream . close ( ) ;
2017-08-27 20:44:08 +02:00
LOGGER . info ( " loading settings done! " ) ;
2017-03-23 13:44:21 +01:00
} catch ( IOException e ) {
2017-08-27 20:44:08 +02:00
LOGGER . error ( " an error occured " , e ) ;
2017-03-23 13:44:21 +01:00
}
}
private void sideMenuSlideIn ( ) {
sideMenuVBox . setVisible ( true ) ;
//slide in in 400ms
TranslateTransition translateTransition = new TranslateTransition ( Duration . millis ( 400 ) , sideMenuVBox ) ;
2017-03-31 19:19:34 +02:00
translateTransition . setFromX ( - 175 ) ;
2017-03-23 13:44:21 +01:00
translateTransition . setToX ( 0 ) ;
2017-11-28 13:55:07 +01:00
translateTransition . play ( ) ;
2017-03-23 13:44:21 +01:00
}
private void sideMenuSlideOut ( ) {
//slide out in 400ms
TranslateTransition translateTransition = new TranslateTransition ( Duration . millis ( 400 ) , sideMenuVBox ) ;
translateTransition . setFromX ( 0 ) ;
2017-03-31 19:19:34 +02:00
translateTransition . setToX ( - 175 ) ;
2017-11-28 13:55:07 +01:00
translateTransition . play ( ) ;
2017-03-23 13:44:21 +01:00
}
private void playBtnSlideIn ( ) {
2017-12-18 09:58:32 +01:00
bottomHBox . setVisible ( true ) ;
2017-03-23 13:44:21 +01:00
playTrue = true ;
2017-03-25 15:18:45 +01:00
2017-12-18 09:58:32 +01:00
TranslateTransition playBtnTransition = new TranslateTransition ( Duration . millis ( 300 ) , bottomHBox ) ;
2017-11-28 13:55:07 +01:00
playBtnTransition . setFromY ( 56 ) ;
2017-03-25 15:18:45 +01:00
playBtnTransition . setToY ( 0 ) ;
playBtnTransition . play ( ) ;
2017-03-23 13:44:21 +01:00
}
2017-11-15 22:00:28 +01:00
private void playBtnSlideOut ( ) {
2017-03-23 13:44:21 +01:00
playTrue = false ;
2017-12-18 09:58:32 +01:00
TranslateTransition playBtnTransition = new TranslateTransition ( Duration . millis ( 300 ) , bottomHBox ) ;
2017-03-25 15:18:45 +01:00
playBtnTransition . setFromY ( 0 ) ;
playBtnTransition . setToY ( 56 ) ;
playBtnTransition . play ( ) ;
2017-03-23 16:17:38 +01:00
}
2017-03-23 13:44:21 +01:00
private void editColor ( String input ) {
StringBuilder sb = new StringBuilder ( input ) ;
sb . delete ( 0 , 2 ) ;
this . color = sb . toString ( ) ;
saveSettings ( ) ;
}
2017-06-18 13:01:04 +02:00
@SuppressWarnings ( " unused " )
2017-08-26 00:13:09 +02:00
/ * *
* @return the main color in hexadecimal format
* /
2017-06-18 13:01:04 +02:00
private String hexToRgb ( ) {
2017-09-15 19:23:44 +02:00
LOGGER . info ( getColor ( ) ) ;
2017-06-18 13:01:04 +02:00
int hex = Integer . parseInt ( getColor ( ) . substring ( 0 , 5 ) , 16 ) ;
int r = ( hex & 0xFF0000 ) > > 16 ;
int g = ( hex & 0xFF00 ) > > 8 ;
int b = ( hex & 0xFF ) ;
return r + " , " + g + " , " + b ;
}
2017-08-26 00:13:09 +02:00
/ * *
*
* @param originalImage original image which size is changed
* @param type type of the original image ( PNG , JPEG , . . . )
* @param imgWidth wanted width
* @param imgHeigth wanted height
* @return the rezised image
* /
2017-03-26 14:21:19 +02:00
private static BufferedImage resizeImage ( BufferedImage originalImage , int type , int imgWidth , int imgHeigth ) {
BufferedImage resizedImage = new BufferedImage ( imgWidth , imgHeigth , type ) ;
2017-03-23 13:44:21 +01:00
Graphics2D g = resizedImage . createGraphics ( ) ;
2017-03-26 14:21:19 +02:00
g . drawImage ( originalImage , 0 , 0 , imgWidth , imgHeigth , null ) ;
2017-03-23 13:44:21 +01:00
g . dispose ( ) ;
return resizedImage ;
}
public String getCemuPath ( ) {
return cemuPath ;
}
public void setCemuPath ( String cemuPath ) {
this . cemuPath = cemuPath ;
}
2018-01-19 01:14:01 +01:00
public String getRomDirectoryPath ( ) {
return romDirectoryPath ;
2017-03-23 13:44:21 +01:00
}
2018-01-19 01:14:01 +01:00
public void setRomDirectoryPath ( String romDirectoryPath ) {
this . romDirectoryPath = romDirectoryPath ;
2017-03-23 13:44:21 +01:00
}
2018-01-19 01:14:01 +01:00
2017-03-23 13:44:21 +01:00
public String getColor ( ) {
return color ;
}
public void setColor ( String color ) {
this . color = color ;
}
2017-11-13 16:44:39 +01:00
public File getPictureCacheLinux ( ) {
return pictureCacheLinux ;
}
public void setPictureCacheLinux ( File pictureCacheLinux ) {
this . pictureCacheLinux = pictureCacheLinux ;
}
public File getPictureCacheWin ( ) {
return pictureCacheWin ;
}
public void setPictureCacheWin ( File pictureCacheWin ) {
this . pictureCacheWin = pictureCacheWin ;
}
2017-03-23 13:44:21 +01:00
public int getxPos ( ) {
return xPos ;
}
public void setxPos ( int xPos ) {
this . xPos = xPos ;
}
public int getyPos ( ) {
return yPos ;
}
public void setyPos ( int yPos ) {
this . yPos = yPos ;
}
public int getxPosHelper ( ) {
return xPosHelper ;
}
public void setxPosHelper ( int xPosHelper ) {
this . xPosHelper = xPosHelper ;
}
2017-12-12 23:52:54 +01:00
public long getLastLocalSync ( ) {
return lastLocalSync ;
}
public void setLastLocalSync ( long lastLocalSync ) {
this . lastLocalSync = lastLocalSync ;
}
2017-03-23 13:44:21 +01:00
public boolean isFullscreen ( ) {
return fullscreen ;
}
public void setFullscreen ( boolean fullscreen ) {
this . fullscreen = fullscreen ;
}
2017-04-17 00:58:49 +02:00
public boolean isCloudSync ( ) {
return cloudSync ;
}
public void setCloudSync ( boolean cloudSync ) {
this . cloudSync = cloudSync ;
}
2017-11-06 10:42:31 +01:00
public boolean isAutoUpdate ( ) {
return autoUpdate ;
}
public void setAutoUpdate ( boolean autoUpdate ) {
this . autoUpdate = autoUpdate ;
}
2017-11-10 15:58:20 +01:00
public boolean isUseBeta ( ) {
return useBeta ;
}
public void setUseBeta ( boolean useBeta ) {
this . useBeta = useBeta ;
}
2017-03-28 17:40:01 +02:00
public String getGameExecutePath ( ) {
return gameExecutePath ;
}
public void setGameExecutePath ( String gameExecutePath ) {
this . gameExecutePath = gameExecutePath ;
}
public String getSelectedGameTitleID ( ) {
return selectedGameTitleID ;
}
public void setSelectedGameTitleID ( String selectedGameTitleID ) {
this . selectedGameTitleID = selectedGameTitleID ;
}
2017-04-17 00:58:49 +02:00
public String getCloudService ( ) {
return cloudService ;
}
public void setCloudService ( String cloudService ) {
this . cloudService = cloudService ;
}
2017-05-07 19:57:55 +02:00
public JFXButton getPlayBtn ( ) {
return playBtn ;
}
public void setPlayBtn ( JFXButton playBtn ) {
this . playBtn = playBtn ;
}
2017-09-12 20:13:26 +02:00
public double getWindowWidth ( ) {
return windowWidth ;
}
public void setWindowWidth ( double windowWidth ) {
this . windowWidth = windowWidth ;
}
public double getWindowHeight ( ) {
return windowHeight ;
}
public void setWindowHeight ( double windowHeight ) {
this . windowHeight = windowHeight ;
}
2017-09-15 19:23:44 +02:00
public int getOldXPosHelper ( ) {
return oldXPosHelper ;
}
public void setOldXPosHelper ( int oldXPosHelper ) {
this . oldXPosHelper = oldXPosHelper ;
}
2017-12-19 19:08:12 +01:00
public String getLanguage ( ) {
return language ;
}
public void setLanguage ( String language ) {
this . language = language ;
}
2017-12-19 21:35:49 +01:00
public ResourceBundle getBundle ( ) {
return bundle ;
}
public void setBundle ( ResourceBundle bundle ) {
this . bundle = bundle ;
}
2017-09-15 19:23:44 +02:00
public AnchorPane getMainAnchorPane ( ) {
return mainAnchorPane ;
}
2017-09-12 20:13:26 +02:00
2017-11-06 10:42:31 +01:00
public JFXButton getUpdateBtn ( ) {
return updateBtn ;
}
2017-03-23 13:44:21 +01:00
}