Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
0f0f962d8c | |||
0d46e818e1 | |||
05f6f7e664 | |||
8d49ce902e | |||
6d5e9409a5 | |||
bda73cf627 | |||
e13a187c71 | |||
e4dbbe0d55 | |||
f09258190a | |||
109bcf6e03 | |||
3853f70895 | |||
9b4bc3ada9 | |||
3bc571bacd | |||
729a4ee10e | |||
3f98dfa059 | |||
78791bb7e1 | |||
0124a5b1a4 |
@ -23,7 +23,7 @@
|
|||||||
<classpathentry kind="lib" path="src/libraries/zip4j-1.3.2.jar"/>
|
<classpathentry kind="lib" path="src/libraries/zip4j-1.3.2.jar"/>
|
||||||
<classpathentry kind="lib" path="src/libraries/log4j-api-2.8.2.jar"/>
|
<classpathentry kind="lib" path="src/libraries/log4j-api-2.8.2.jar"/>
|
||||||
<classpathentry kind="lib" path="src/libraries/log4j-core-2.8.2.jar"/>
|
<classpathentry kind="lib" path="src/libraries/log4j-core-2.8.2.jar"/>
|
||||||
<classpathentry kind="lib" path="src/libraries/jfoenix-1.8.0.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/sqlite-jdbc-3.20.0.jar"/>
|
<classpathentry kind="lib" path="src/libraries/sqlite-jdbc-3.20.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/jfoenix-1.9.1.jar"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
13
README.md
13
README.md
@ -1,5 +1,9 @@
|
|||||||
# cemu_UI
|
# cemu_UI
|
||||||
|
|
||||||
|

|
||||||
|
[](https://github.com/Seil0/cemu_UI/releases)
|
||||||
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
||||||
|
|
||||||
cemu_UI is a simple, material design graphical frontend for [cemu](http://cemu.info/), a Wii U emulator. Downloads can be found [here](https://github.com/Seil0/cemu_UI/releases).
|
cemu_UI is a simple, material design graphical frontend for [cemu](http://cemu.info/), a Wii U emulator. Downloads can be found [here](https://github.com/Seil0/cemu_UI/releases).
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
@ -32,14 +36,7 @@ If you want to use the cloud sync function read the [wiki](https://github.com/Se
|
|||||||
|
|
||||||
### If you have another idea, make a "new issue" with the `idea` lable
|
### If you have another idea, make a "new issue" with the `idea` lable
|
||||||
|
|
||||||
## FAQ
|
## [FAQ](https://github.com/Seil0/cemu_UI/wiki#faq)
|
||||||
|
|
||||||
* My game is not detected automaticaly
|
|
||||||
* You need to add it to the [games.db](https://github.com/Seil0/cemu_UI/blob/master/downloadContent/games.db) database or you add it to the [games.csv](https://github.com/Seil0/cemu_UI/blob/master/downloadContent/games.csv) table so everyone can use it.
|
|
||||||
* How can I update the games.db?
|
|
||||||
* Delete the games.db file in "C:\Users\USERNAME\Documents\cemu_UI" it will be downloaded again at the next start of cemu_UI.
|
|
||||||
* I have another question
|
|
||||||
* make a new issue and let me know
|
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
|
||||||
|
2
bin/.gitignore
vendored
2
bin/.gitignore
vendored
@ -1,3 +1 @@
|
|||||||
/application/
|
/application/
|
||||||
/resources/
|
|
||||||
/cloudControllerInstances/
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -16,7 +16,7 @@
|
|||||||
<?import javafx.scene.text.Font?>
|
<?import javafx.scene.text.Font?>
|
||||||
<?import javafx.scene.text.TextFlow?>
|
<?import javafx.scene.text.TextFlow?>
|
||||||
|
|
||||||
<AnchorPane prefHeight="600.0" prefWidth="892.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
|
<AnchorPane fx:id="mainAnchorPane" prefHeight="600.0" prefWidth="904.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
|
||||||
<children>
|
<children>
|
||||||
<ScrollPane fx:id="scrollPaneMain" fitToWidth="true" layoutY="38.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
<ScrollPane fx:id="scrollPaneMain" fitToWidth="true" layoutY="38.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
||||||
<content>
|
<content>
|
||||||
@ -61,7 +61,7 @@
|
|||||||
</children>
|
</children>
|
||||||
</VBox>
|
</VBox>
|
||||||
<!-- space between settings sections 35px, between sections elements (label + element) 20px, between label and element 3px(or more) -->
|
<!-- space between settings sections 35px, between sections elements (label + element) 20px, between label and element 3px(or more) -->
|
||||||
<AnchorPane fx:id="settingsAnchorPane" layoutX="38.0" layoutY="27.0" prefHeight="573.0" style="-fx-background-color: white;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="175.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
<AnchorPane fx:id="settingsAnchorPane" layoutX="38.0" layoutY="27.0" style="-fx-background-color: white;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="175.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
||||||
<children>
|
<children>
|
||||||
<Label layoutX="22.0" layoutY="59.0" text="Cemu Directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="59.0" />
|
<Label layoutX="22.0" layoutY="59.0" text="Cemu Directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="59.0" />
|
||||||
<JFXTextField fx:id="cemuTextField" layoutX="18.0" layoutY="83.0" maxWidth="305.0" minWidth="305.0" onAction="#cemuTextFieldAction" prefHeight="32.0" prefWidth="305.0" promptText="cemu directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="79.0" />
|
<JFXTextField fx:id="cemuTextField" layoutX="18.0" layoutY="83.0" maxWidth="305.0" minWidth="305.0" onAction="#cemuTextFieldAction" prefHeight="32.0" prefWidth="305.0" promptText="cemu directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="79.0" />
|
||||||
@ -105,13 +105,13 @@
|
|||||||
</font>
|
</font>
|
||||||
</Label>
|
</Label>
|
||||||
</children></AnchorPane>
|
</children></AnchorPane>
|
||||||
<JFXButton fx:id="playBtn" buttonType="RAISED" maxHeight="38.0" maxWidth="100.0" onAction="#playBtnAction" ripplerFill="#c92a2a" text="play" visible="false" AnchorPane.bottomAnchor="7.0" AnchorPane.leftAnchor="396.0" AnchorPane.rightAnchor="396.0" AnchorPane.topAnchor="555.0">
|
<JFXButton fx:id="playBtn" buttonType="RAISED" layoutX="396.0" maxHeight="28.0" minWidth="100.0" onAction="#playBtnAction" ripplerFill="#00aacc" text="play" textAlignment="CENTER" visible="false" AnchorPane.bottomAnchor="12.0">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="14.0" />
|
<Font name="System Bold" size="14.0" />
|
||||||
</font>
|
</font>
|
||||||
</JFXButton>
|
</JFXButton>
|
||||||
<JFXButton fx:id="totalPlaytimeBtn" buttonType="RAISED" maxHeight="32.0" minWidth="100.0" onAction="#totalPlaytimeBtnAction" prefHeight="32.0" style="-fx-background-color: #ffffff; -fx-button-type: RAISED; -fx-text-fill: BLACK;" visible="false" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="516.5" AnchorPane.topAnchor="558.0">
|
<JFXButton fx:id="totalPlaytimeBtn" buttonType="RAISED" layoutX="275.5" maxHeight="32.0" minWidth="100.0" onAction="#totalPlaytimeBtnAction" prefHeight="32.0" style="-fx-background-color: #ffffff; -fx-button-type: RAISED; -fx-text-fill: BLACK;" text="0 h 0 min" visible="false" AnchorPane.bottomAnchor="10.0">
|
||||||
</JFXButton>
|
</JFXButton>
|
||||||
<JFXButton fx:id="lastTimePlayedBtn" buttonType="RAISED" maxHeight="32.0" minWidth="100.0" onAction="#lastTimePlayedBtnAction" prefHeight="32.0" style="-fx-background-color: #ffffff; -fx-button-type: RAISED; -fx-text-fill: BLACK;" visible="false" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="516.5" AnchorPane.topAnchor="558.0" />
|
<JFXButton fx:id="lastTimePlayedBtn" buttonType="RAISED" layoutX="516.5" maxHeight="32.0" minWidth="100.0" onAction="#lastTimePlayedBtnAction" prefHeight="32.0" style="-fx-background-color: #ffffff; -fx-button-type: RAISED; -fx-text-fill: BLACK;" text="Last played, never" visible="false" AnchorPane.bottomAnchor="10.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -3,14 +3,22 @@
|
|||||||
*
|
*
|
||||||
* Copyright 2017 <@Seil0>
|
* Copyright 2017 <@Seil0>
|
||||||
*
|
*
|
||||||
* "THE CHOCOLATE-WARE LICENSE" (Revision 1):
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* As long as you retain this notice this software is licensed under the GNU GENERAL PUBLIC LICENSE Version 3,
|
* it under the terms of the GNU General Public License as published by
|
||||||
* with the following additions:
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
* If we meet some day, and you think this stuff is worth it,
|
* (at your option) any later version.
|
||||||
* you can buy me a chocolate in return. - @Seil0
|
|
||||||
* (license based in Beer-ware, see https://fedoraproject.org/wiki/Licensing/Beerware )
|
|
||||||
*
|
*
|
||||||
|
* 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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package application;
|
package application;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -3,14 +3,22 @@
|
|||||||
*
|
*
|
||||||
* Copyright 2017 <@Seil0>
|
* Copyright 2017 <@Seil0>
|
||||||
*
|
*
|
||||||
* "THE CHOCOLATE-WARE LICENSE" (Revision 1):
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* As long as you retain this notice this software is licensed under the GNU GENERAL PUBLIC LICENSE Version 3,
|
* it under the terms of the GNU General Public License as published by
|
||||||
* with the following additions:
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
* If we meet some day, and you think this stuff is worth it,
|
* (at your option) any later version.
|
||||||
* you can buy me a chocolate in return. - @Seil0
|
|
||||||
* (license based in Beer-ware, see https://fedoraproject.org/wiki/Licensing/Beerware )
|
|
||||||
*
|
*
|
||||||
|
* 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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package application;
|
package application;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -20,10 +28,14 @@ import java.net.URL;
|
|||||||
import java.nio.channels.Channels;
|
import java.nio.channels.Channels;
|
||||||
import java.nio.channels.ReadableByteChannel;
|
import java.nio.channels.ReadableByteChannel;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
|
import javafx.beans.value.ChangeListener;
|
||||||
|
import javafx.beans.value.ObservableValue;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.stage.DirectoryChooser;
|
import javafx.stage.DirectoryChooser;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
@ -57,34 +69,33 @@ public class Main extends Application {
|
|||||||
this.primaryStage = primaryStage;
|
this.primaryStage = primaryStage;
|
||||||
cloudController = new CloudController(this);
|
cloudController = new CloudController(this);
|
||||||
mainWindow();
|
mainWindow();
|
||||||
|
initActions();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void mainWindow(){
|
private void mainWindow(){
|
||||||
try {
|
try {
|
||||||
FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow.fxml"));
|
FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow.fxml"));
|
||||||
pane = loader.load();
|
pane = loader.load();
|
||||||
primaryStage.setResizable(false);
|
// primaryStage.setResizable(false);
|
||||||
primaryStage.setTitle("cemu_UI");
|
primaryStage.setTitle("cemu_UI");
|
||||||
// primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/resources/Homeflix_Icon_64x64.png"))); //adds application icon
|
// primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/resources/Homeflix_Icon_64x64.png"))); //adds application icon
|
||||||
|
|
||||||
mainWindowController = loader.getController(); //Link of FXMLController and controller class
|
mainWindowController = loader.getController(); //Link of FXMLController and controller class
|
||||||
mainWindowController.setMain(this); //call setMain
|
mainWindowController.setMain(this); //call setMain
|
||||||
|
|
||||||
//get os and the right paths
|
//get os and the right paths
|
||||||
if(System.getProperty("os.name").equals("Linux")){
|
if (System.getProperty("os.name").equals("Linux")) {
|
||||||
directory = new File(dirLinux);
|
directory = new File(dirLinux);
|
||||||
configFile = new File(dirLinux + "/config.xml");
|
configFile = new File(dirLinux + "/config.xml");
|
||||||
gamesDBFile = new File(dirLinux + "/games.db");
|
gamesDBFile = new File(dirLinux + "/games.db");
|
||||||
localDB = new File(dirLinux+"/localRoms.db");
|
localDB = new File(dirLinux+"/localRoms.db");
|
||||||
pictureCache= new File(dirLinux+"/picture_cache");
|
pictureCache= new File(dirLinux+"/picture_cache");
|
||||||
pane.setPrefWidth(904); //this could be a kde plasma specific issue
|
} else {
|
||||||
}else{
|
|
||||||
directory = new File(dirWin);
|
directory = new File(dirWin);
|
||||||
configFile = new File(dirWin + "/config.xml");
|
configFile = new File(dirWin + "/config.xml");
|
||||||
gamesDBFile = new File(dirWin + "/games.db");
|
gamesDBFile = new File(dirWin + "/games.db");
|
||||||
localDB = new File(dirWin+"/localRoms.db");
|
localDB = new File(dirWin+"/localRoms.db");
|
||||||
pictureCache= new File(dirWin+"/picture_cache");
|
pictureCache= new File(dirWin+"/picture_cache");
|
||||||
pane.setPrefWidth(892);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//startup checks
|
//startup checks
|
||||||
@ -101,27 +112,27 @@ public class Main extends Application {
|
|||||||
|
|
||||||
LOGGER.info("Directory: " + directory.exists());
|
LOGGER.info("Directory: " + directory.exists());
|
||||||
LOGGER.info("Configfile: " + configFile.exists());
|
LOGGER.info("Configfile: " + configFile.exists());
|
||||||
if(!directory.exists()){
|
if (!directory.exists()) {
|
||||||
LOGGER.info("creating cemu_UI directory");
|
LOGGER.info("creating cemu_UI directory");
|
||||||
directory.mkdir();
|
directory.mkdir();
|
||||||
pictureCache.mkdir();
|
pictureCache.mkdir();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!configFile.exists()){
|
if (!configFile.exists()) {
|
||||||
LOGGER.info("firststart, setting default values");
|
LOGGER.info("firststart, setting default values");
|
||||||
firstStart();
|
firstStart();
|
||||||
mainWindowController.setColor("00a8cc");
|
mainWindowController.setColor("00a8cc");
|
||||||
mainWindowController.setxPosHelper(0);
|
mainWindowController.setxPosHelper(0);
|
||||||
mainWindowController.saveSettings();
|
mainWindowController.saveSettings();
|
||||||
Runtime.getRuntime().exec("java -jar cemu_UI.jar"); //start again (preventing Bugs)
|
Runtime.getRuntime().exec("java -jar cemu_UI.jar"); //start again (preventing Bugs)
|
||||||
System.exit(0); //finishes itselfdownloading games.db...
|
System.exit(0); //finishes itself
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pictureCache.exists() != true){
|
if (pictureCache.exists() != true) {
|
||||||
pictureCache.mkdir();
|
pictureCache.mkdir();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gamesDBFile.exists() != true){
|
if (gamesDBFile.exists() != true) {
|
||||||
try {
|
try {
|
||||||
LOGGER.info("downloading games.db... ");
|
LOGGER.info("downloading games.db... ");
|
||||||
URL website = new URL(gamesDBdownloadURL);
|
URL website = new URL(gamesDBdownloadURL);
|
||||||
@ -137,14 +148,14 @@ public class Main extends Application {
|
|||||||
|
|
||||||
//loading settings and initialize UI, dbController.main() loads all databases
|
//loading settings and initialize UI, dbController.main() loads all databases
|
||||||
mainWindowController.loadSettings();
|
mainWindowController.loadSettings();
|
||||||
|
mainWindowController.initActions();
|
||||||
|
mainWindowController.initUI();
|
||||||
mainWindowController.dbController.main();
|
mainWindowController.dbController.main();
|
||||||
if(mainWindowController.isCloudSync()) {
|
if(mainWindowController.isCloudSync()) {
|
||||||
cloudController.initializeConnection(mainWindowController.getCloudService(), mainWindowController.getCemuPath());
|
cloudController.initializeConnection(mainWindowController.getCloudService(), mainWindowController.getCemuPath());
|
||||||
cloudController.stratupCheck(mainWindowController.getCloudService(), mainWindowController.getCemuPath());
|
cloudController.stratupCheck(mainWindowController.getCloudService(), mainWindowController.getCemuPath());
|
||||||
}
|
}
|
||||||
mainWindowController.addUIData();
|
mainWindowController.addUIData();
|
||||||
mainWindowController.initActions();
|
|
||||||
mainWindowController.initUI();
|
|
||||||
|
|
||||||
scene = new Scene(pane); //create new scene, append pane to scene
|
scene = new Scene(pane); //create new scene, append pane to scene
|
||||||
scene.getStylesheets().add(Main.class.getResource("MainWindows.css").toExternalForm());
|
scene.getStylesheets().add(Main.class.getResource("MainWindows.css").toExternalForm());
|
||||||
@ -162,7 +173,7 @@ public class Main extends Application {
|
|||||||
alert.setContentText("please select your cemu installation");
|
alert.setContentText("please select your cemu installation");
|
||||||
|
|
||||||
Optional<ButtonType> result = alert.showAndWait();
|
Optional<ButtonType> result = alert.showAndWait();
|
||||||
if (result.get() == ButtonType.OK){
|
if (result.get() == ButtonType.OK) {
|
||||||
DirectoryChooser directoryChooser = new DirectoryChooser();
|
DirectoryChooser directoryChooser = new DirectoryChooser();
|
||||||
File selectedDirectory = directoryChooser.showDialog(primaryStage);
|
File selectedDirectory = directoryChooser.showDialog(primaryStage);
|
||||||
mainWindowController.setCemuPath(selectedDirectory.getAbsolutePath());
|
mainWindowController.setCemuPath(selectedDirectory.getAbsolutePath());
|
||||||
@ -177,7 +188,7 @@ public class Main extends Application {
|
|||||||
alert2.setContentText("please select your rom directory");
|
alert2.setContentText("please select your rom directory");
|
||||||
|
|
||||||
Optional<ButtonType> result2 = alert2.showAndWait();
|
Optional<ButtonType> result2 = alert2.showAndWait();
|
||||||
if (result2.get() == ButtonType.OK){
|
if (result2.get() == ButtonType.OK) {
|
||||||
DirectoryChooser directoryChooser = new DirectoryChooser();
|
DirectoryChooser directoryChooser = new DirectoryChooser();
|
||||||
File selectedDirectory = directoryChooser.showDialog(primaryStage);
|
File selectedDirectory = directoryChooser.showDialog(primaryStage);
|
||||||
mainWindowController.setRomPath(selectedDirectory.getAbsolutePath());
|
mainWindowController.setRomPath(selectedDirectory.getAbsolutePath());
|
||||||
@ -187,6 +198,81 @@ public class Main extends Application {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initActions() {
|
||||||
|
final ChangeListener<Number> widthListener = new ChangeListener<Number>() {
|
||||||
|
|
||||||
|
final Timer timer = new Timer();
|
||||||
|
TimerTask saveTask = null; //task to execute save operation
|
||||||
|
final long delayTime = 500; //delay until the window size is saved, if the window is resized earlier it will be killed, default is 500ms
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void changed(ObservableValue<? extends Number> observable, Number oldValue, final Number newValue) {
|
||||||
|
int xPosHelperMax = (int) Math.floor((mainWindowController.getMainAnchorPane().getWidth() - 36) / 217);
|
||||||
|
|
||||||
|
mainWindowController.refreshplayBtnPosition();
|
||||||
|
|
||||||
|
//call only if there is enough space for a new row
|
||||||
|
if (mainWindowController.getOldXPosHelper() != xPosHelperMax) {
|
||||||
|
mainWindowController.refreshUIData();
|
||||||
|
}
|
||||||
|
|
||||||
|
//if saveTask is already running kill it
|
||||||
|
if (saveTask != null) saveTask.cancel();
|
||||||
|
|
||||||
|
saveTask = new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
mainWindowController.saveSettings();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
timer.schedule(saveTask, delayTime);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
final ChangeListener<Number> heightListener = new ChangeListener<Number>() {
|
||||||
|
|
||||||
|
final Timer timer = new Timer();
|
||||||
|
TimerTask saveTask = null; //task to execute save operation
|
||||||
|
final long delayTime = 500; //delay until the window size is saved, if the window is resized earlier it will be killed, default is 500ms
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void changed(ObservableValue<? extends Number> observable, Number oldValue, final Number newValue) {
|
||||||
|
|
||||||
|
if (saveTask != null) saveTask.cancel();
|
||||||
|
|
||||||
|
saveTask = new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
mainWindowController.saveSettings();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
timer.schedule(saveTask, delayTime);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
final ChangeListener<Boolean> maximizeListener = new ChangeListener<Boolean>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
|
||||||
|
primaryStage.setMaximized(false);
|
||||||
|
|
||||||
|
Alert alert = new Alert(AlertType.WARNING);
|
||||||
|
alert.setTitle("edit");
|
||||||
|
alert.setHeaderText("cemu_UI");
|
||||||
|
alert.setContentText("maximized Window is not supporte!");
|
||||||
|
alert.initOwner(primaryStage);
|
||||||
|
alert.showAndWait();
|
||||||
|
|
||||||
|
LOGGER.warn("maximized Window is not supported");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//add listener to primaryStage
|
||||||
|
primaryStage.widthProperty().addListener(widthListener);
|
||||||
|
primaryStage.heightProperty().addListener(heightListener);
|
||||||
|
primaryStage.maximizedProperty().addListener(maximizeListener);
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
//delete old log file and create new
|
//delete old log file and create new
|
||||||
if(System.getProperty("os.name").equals("Linux")){
|
if(System.getProperty("os.name").equals("Linux")){
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
<?import javafx.scene.text.Font?>
|
<?import javafx.scene.text.Font?>
|
||||||
<?import javafx.scene.text.TextFlow?>
|
<?import javafx.scene.text.TextFlow?>
|
||||||
|
|
||||||
<AnchorPane prefHeight="600.0" prefWidth="892.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
|
<AnchorPane fx:id="mainAnchorPane" prefHeight="600.0" prefWidth="904.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
|
||||||
<children>
|
<children>
|
||||||
<ScrollPane fx:id="scrollPaneMain" fitToWidth="true" layoutY="38.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
<ScrollPane fx:id="scrollPaneMain" fitToWidth="true" layoutY="38.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
||||||
<content>
|
<content>
|
||||||
@ -61,7 +61,7 @@
|
|||||||
</children>
|
</children>
|
||||||
</VBox>
|
</VBox>
|
||||||
<!-- space between settings sections 35px, between sections elements (label + element) 20px, between label and element 3px(or more) -->
|
<!-- space between settings sections 35px, between sections elements (label + element) 20px, between label and element 3px(or more) -->
|
||||||
<AnchorPane fx:id="settingsAnchorPane" layoutX="38.0" layoutY="27.0" prefHeight="573.0" style="-fx-background-color: white;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="175.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
<AnchorPane fx:id="settingsAnchorPane" layoutX="38.0" layoutY="27.0" style="-fx-background-color: white;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="175.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
||||||
<children>
|
<children>
|
||||||
<Label layoutX="22.0" layoutY="59.0" text="Cemu Directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="59.0" />
|
<Label layoutX="22.0" layoutY="59.0" text="Cemu Directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="59.0" />
|
||||||
<JFXTextField fx:id="cemuTextField" layoutX="18.0" layoutY="83.0" maxWidth="305.0" minWidth="305.0" onAction="#cemuTextFieldAction" prefHeight="32.0" prefWidth="305.0" promptText="cemu directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="79.0" />
|
<JFXTextField fx:id="cemuTextField" layoutX="18.0" layoutY="83.0" maxWidth="305.0" minWidth="305.0" onAction="#cemuTextFieldAction" prefHeight="32.0" prefWidth="305.0" promptText="cemu directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="79.0" />
|
||||||
@ -105,13 +105,13 @@
|
|||||||
</font>
|
</font>
|
||||||
</Label>
|
</Label>
|
||||||
</children></AnchorPane>
|
</children></AnchorPane>
|
||||||
<JFXButton fx:id="playBtn" buttonType="RAISED" maxHeight="38.0" maxWidth="100.0" onAction="#playBtnAction" ripplerFill="#c92a2a" text="play" visible="false" AnchorPane.bottomAnchor="7.0" AnchorPane.leftAnchor="396.0" AnchorPane.rightAnchor="396.0" AnchorPane.topAnchor="555.0">
|
<JFXButton fx:id="playBtn" buttonType="RAISED" layoutX="396.0" maxHeight="28.0" minWidth="100.0" onAction="#playBtnAction" ripplerFill="#00aacc" text="play" textAlignment="CENTER" visible="false" AnchorPane.bottomAnchor="12.0">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="14.0" />
|
<Font name="System Bold" size="14.0" />
|
||||||
</font>
|
</font>
|
||||||
</JFXButton>
|
</JFXButton>
|
||||||
<JFXButton fx:id="totalPlaytimeBtn" buttonType="RAISED" maxHeight="32.0" minWidth="100.0" onAction="#totalPlaytimeBtnAction" prefHeight="32.0" style="-fx-background-color: #ffffff; -fx-button-type: RAISED; -fx-text-fill: BLACK;" visible="false" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="516.5" AnchorPane.topAnchor="558.0">
|
<JFXButton fx:id="totalPlaytimeBtn" buttonType="RAISED" layoutX="275.5" maxHeight="32.0" minWidth="100.0" onAction="#totalPlaytimeBtnAction" prefHeight="32.0" style="-fx-background-color: #ffffff; -fx-button-type: RAISED; -fx-text-fill: BLACK;" text="0 h 0 min" visible="false" AnchorPane.bottomAnchor="10.0">
|
||||||
</JFXButton>
|
</JFXButton>
|
||||||
<JFXButton fx:id="lastTimePlayedBtn" buttonType="RAISED" maxHeight="32.0" minWidth="100.0" onAction="#lastTimePlayedBtnAction" prefHeight="32.0" style="-fx-background-color: #ffffff; -fx-button-type: RAISED; -fx-text-fill: BLACK;" visible="false" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="516.5" AnchorPane.topAnchor="558.0" />
|
<JFXButton fx:id="lastTimePlayedBtn" buttonType="RAISED" layoutX="516.5" maxHeight="32.0" minWidth="100.0" onAction="#lastTimePlayedBtnAction" prefHeight="32.0" style="-fx-background-color: #ffffff; -fx-button-type: RAISED; -fx-text-fill: BLACK;" text="Last played, never" visible="false" AnchorPane.bottomAnchor="10.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
@ -3,14 +3,22 @@
|
|||||||
*
|
*
|
||||||
* Copyright 2017 <@Seil0>
|
* Copyright 2017 <@Seil0>
|
||||||
*
|
*
|
||||||
* "THE CHOCOLATE-WARE LICENSE" (Revision 1):
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* As long as you retain this notice this software is licensed under the GNU GENERAL PUBLIC LICENSE Version 3,
|
* it under the terms of the GNU General Public License as published by
|
||||||
* with the following additions:
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
* If we meet some day, and you think this stuff is worth it,
|
* (at your option) any later version.
|
||||||
* you can buy me a chocolate in return. - @Seil0
|
|
||||||
* (license based in Beer-ware, see https://fedoraproject.org/wiki/Licensing/Beerware )
|
|
||||||
*
|
*
|
||||||
|
* 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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package application;
|
package application;
|
||||||
|
|
||||||
import java.awt.Desktop;
|
import java.awt.Desktop;
|
||||||
@ -34,7 +42,6 @@ import java.time.format.DateTimeFormatter;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import javax.swing.ProgressMonitor;
|
import javax.swing.ProgressMonitor;
|
||||||
import javax.swing.ProgressMonitorInputStream;
|
import javax.swing.ProgressMonitorInputStream;
|
||||||
@ -162,6 +169,9 @@ public class MainWindowController {
|
|||||||
@FXML
|
@FXML
|
||||||
private AnchorPane gamesAnchorPane;
|
private AnchorPane gamesAnchorPane;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private AnchorPane mainAnchorPane;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private ScrollPane scrollPaneMain;
|
private ScrollPane scrollPaneMain;
|
||||||
|
|
||||||
@ -218,14 +228,17 @@ public class MainWindowController {
|
|||||||
private String selectedGameTitleID;
|
private String selectedGameTitleID;
|
||||||
private String selectedGameTitle;
|
private String selectedGameTitle;
|
||||||
private String id;
|
private String id;
|
||||||
private String version = "0.1.7";
|
private String version = "0.2.0";
|
||||||
private String buildNumber = "039";
|
private String buildNumber = "043";
|
||||||
private String versionName = "Throwback Galaxy";
|
private String versionName = "Puzzle Plank Galaxy";
|
||||||
private int xPos = -200;
|
private int xPos = -200;
|
||||||
private int yPos = 17;
|
private int yPos = 17;
|
||||||
private int xPosHelper;
|
private int xPosHelper;
|
||||||
|
private int oldXPosHelper;
|
||||||
private int selectedUIDataIndex;
|
private int selectedUIDataIndex;
|
||||||
private int selected;
|
private int selected;
|
||||||
|
private double windowWidth;
|
||||||
|
private double windowHeight;
|
||||||
private DirectoryChooser directoryChooser = new DirectoryChooser();
|
private DirectoryChooser directoryChooser = new DirectoryChooser();
|
||||||
private File dirWin = new File(System.getProperty("user.home") + "/Documents/cemu_UI");
|
private File dirWin = new File(System.getProperty("user.home") + "/Documents/cemu_UI");
|
||||||
private File dirLinux = new File(System.getProperty("user.home") + "/cemu_UI");
|
private File dirLinux = new File(System.getProperty("user.home") + "/cemu_UI");
|
||||||
@ -266,7 +279,14 @@ public class MainWindowController {
|
|||||||
smmdbApiQuery = new SmmdbApiQuery();
|
smmdbApiQuery = new SmmdbApiQuery();
|
||||||
}
|
}
|
||||||
|
|
||||||
void initUI(){
|
void initUI() {
|
||||||
|
LOGGER.info("initializing UI ...");
|
||||||
|
|
||||||
|
if (getWindowWidth() > 100 && getWindowHeight() > 100) {
|
||||||
|
mainAnchorPane.setPrefSize(getWindowWidth(), getWindowHeight());
|
||||||
|
}
|
||||||
|
refreshplayBtnPosition();
|
||||||
|
|
||||||
cemuTextField.setText(cemuPath);
|
cemuTextField.setText(cemuPath);
|
||||||
romTextField.setText(romPath);
|
romTextField.setText(romPath);
|
||||||
colorPicker.setValue(Color.valueOf(getColor()));
|
colorPicker.setValue(Color.valueOf(getColor()));
|
||||||
@ -294,20 +314,22 @@ public class MainWindowController {
|
|||||||
courseTreeTable.getColumns().add(starsColumn);
|
courseTreeTable.getColumns().add(starsColumn);
|
||||||
courseTreeTable.getColumns().add(idColumn);
|
courseTreeTable.getColumns().add(idColumn);
|
||||||
courseTreeTable.getColumns().get(3).setVisible(false); //hide idColumn (important)
|
courseTreeTable.getColumns().get(3).setVisible(false); //hide idColumn (important)
|
||||||
|
|
||||||
|
LOGGER.info("initializing UI done");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* initialize all actions not initialized by a own method
|
* initialize all actions not initialized by a own method
|
||||||
*/
|
*/
|
||||||
void initActions() {
|
void initActions() {
|
||||||
LOGGER.info("initializing Actions... ");
|
LOGGER.info("initializing Actions ...");
|
||||||
|
|
||||||
HamburgerBackArrowBasicTransition burgerTask = new HamburgerBackArrowBasicTransition(menuHam);
|
HamburgerBackArrowBasicTransition burgerTask = new HamburgerBackArrowBasicTransition(menuHam);
|
||||||
menuHam.addEventHandler(MouseEvent.MOUSE_PRESSED, (e)->{
|
menuHam.addEventHandler(MouseEvent.MOUSE_PRESSED, (e)->{
|
||||||
if (playTrue) {
|
if (playTrue) {
|
||||||
playBtnSlideOut();
|
playBtnSlideOut();
|
||||||
}
|
}
|
||||||
if (menuTrue){
|
if (menuTrue) {
|
||||||
sideMenuSlideOut();
|
sideMenuSlideOut();
|
||||||
burgerTask.setRate(-1.0);
|
burgerTask.setRate(-1.0);
|
||||||
burgerTask.play();
|
burgerTask.play();
|
||||||
@ -334,9 +356,9 @@ public class MainWindowController {
|
|||||||
edit.setOnAction(new EventHandler<ActionEvent>() {
|
edit.setOnAction(new EventHandler<ActionEvent>() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(ActionEvent event) {
|
public void handle(ActionEvent event) {
|
||||||
System.out.println("edit "+selectedGameTitleID);
|
LOGGER.info("edit "+selectedGameTitleID);
|
||||||
if(selectedGameTitleID == null){
|
if(selectedGameTitleID == null){
|
||||||
System.out.println("trying to edit null! null is not valid!");
|
LOGGER.warn("trying to edit null! null is not valid!");
|
||||||
Alert alert = new Alert(AlertType.WARNING);
|
Alert alert = new Alert(AlertType.WARNING);
|
||||||
alert.setTitle("edit");
|
alert.setTitle("edit");
|
||||||
alert.setHeaderText("cemu_UI");
|
alert.setHeaderText("cemu_UI");
|
||||||
@ -344,7 +366,7 @@ public class MainWindowController {
|
|||||||
alert.initOwner(main.primaryStage);
|
alert.initOwner(main.primaryStage);
|
||||||
alert.showAndWait();
|
alert.showAndWait();
|
||||||
}else{
|
}else{
|
||||||
System.out.println("show edit window TODO!"); //TODO show edit window
|
//TODO show edit window
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -352,9 +374,9 @@ public class MainWindowController {
|
|||||||
remove.setOnAction(new EventHandler<ActionEvent>() {
|
remove.setOnAction(new EventHandler<ActionEvent>() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(ActionEvent event) {
|
public void handle(ActionEvent event) {
|
||||||
System.out.println("remove "+selectedGameTitleID);
|
LOGGER.info("remove "+selectedGameTitleID);
|
||||||
if(selectedGameTitleID == null){
|
if(selectedGameTitleID == null){
|
||||||
System.out.println("trying to remove null! null is not valid!");
|
LOGGER.warn("trying to remove null! null is not valid!");
|
||||||
Alert alert = new Alert(AlertType.WARNING);
|
Alert alert = new Alert(AlertType.WARNING);
|
||||||
alert.setTitle("remove");
|
alert.setTitle("remove");
|
||||||
alert.setHeaderText("cemu_UI");
|
alert.setHeaderText("cemu_UI");
|
||||||
@ -373,28 +395,14 @@ public class MainWindowController {
|
|||||||
Optional<ButtonType> result = alert.showAndWait();
|
Optional<ButtonType> result = alert.showAndWait();
|
||||||
if (result.get() == ButtonType.OK){
|
if (result.get() == ButtonType.OK){
|
||||||
try {
|
try {
|
||||||
//remove all elements from gamesAnchorPane
|
//remove game from database
|
||||||
for(int i=0; i< games.size(); i++){
|
|
||||||
gamesAnchorPane.getChildren().remove(games.get(i).getVBox());
|
|
||||||
}
|
|
||||||
//remove game from database
|
|
||||||
games.remove(selectedUIDataIndex);
|
games.remove(selectedUIDataIndex);
|
||||||
dbController.removeRom(selectedGameTitleID);
|
dbController.removeRom(selectedGameTitleID);
|
||||||
//remove all games form gamesAnchorPane (UI)
|
|
||||||
gamesAnchorPane.getChildren().removeAll(gamesAnchorPane.getChildren());
|
//refresh all games at gamesAnchorPane (UI)
|
||||||
//reset position
|
refreshUIData();
|
||||||
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());
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
LOGGER.error("error!",e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -406,9 +414,9 @@ public class MainWindowController {
|
|||||||
public void handle(ActionEvent event) {
|
public void handle(ActionEvent event) {
|
||||||
String titleID = selectedGameTitleID;
|
String titleID = selectedGameTitleID;
|
||||||
String updatePath;
|
String updatePath;
|
||||||
System.out.println("update: "+selectedGameTitleID);
|
LOGGER.info("update: "+selectedGameTitleID);
|
||||||
if(selectedGameTitleID == null){
|
if(selectedGameTitleID == null){
|
||||||
LOGGER.error("trying to update null! null is not valid!");
|
LOGGER.warn("trying to update null! null is not valid!");
|
||||||
Alert alert = new Alert(AlertType.WARNING);
|
Alert alert = new Alert(AlertType.WARNING);
|
||||||
alert.setTitle("edit");
|
alert.setTitle("edit");
|
||||||
alert.setHeaderText("cemu_UI");
|
alert.setHeaderText("cemu_UI");
|
||||||
@ -465,7 +473,7 @@ public class MainWindowController {
|
|||||||
|
|
||||||
LOGGER.info("add DLC: "+selectedGameTitleID);
|
LOGGER.info("add DLC: "+selectedGameTitleID);
|
||||||
if(selectedGameTitleID == null){
|
if(selectedGameTitleID == null){
|
||||||
System.out.println("trying to add a dlc to null! null is not valid!");
|
LOGGER.warn("trying to add a dlc to null! null is not valid!");
|
||||||
Alert alert = new Alert(AlertType.WARNING);
|
Alert alert = new Alert(AlertType.WARNING);
|
||||||
alert.setTitle("add DLC");
|
alert.setTitle("add DLC");
|
||||||
alert.setHeaderText("cemu_UI");
|
alert.setHeaderText("cemu_UI");
|
||||||
@ -561,7 +569,6 @@ public class MainWindowController {
|
|||||||
@Override
|
@Override
|
||||||
public void handle(MouseEvent mouseEvent) {
|
public void handle(MouseEvent mouseEvent) {
|
||||||
if(mouseEvent.getButton().equals(MouseButton.PRIMARY)){
|
if(mouseEvent.getButton().equals(MouseButton.PRIMARY)){
|
||||||
System.out.println("I'll help you");
|
|
||||||
try {
|
try {
|
||||||
Desktop.getDesktop().browse(new URI("https://github.com/Seil0/cemu_UI/issues/3"));
|
Desktop.getDesktop().browse(new URI("https://github.com/Seil0/cemu_UI/issues/3"));
|
||||||
} catch (IOException | URISyntaxException e) {
|
} catch (IOException | URISyntaxException e) {
|
||||||
@ -570,6 +577,7 @@ public class MainWindowController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
LOGGER.info("initializing Actions done!");
|
LOGGER.info("initializing Actions done!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -683,8 +691,7 @@ public class MainWindowController {
|
|||||||
Runtime.getRuntime().exec("java -jar cemu_UI.jar"); //start again
|
Runtime.getRuntime().exec("java -jar cemu_UI.jar"); //start again
|
||||||
System.exit(0); //finishes itself
|
System.exit(0); //finishes itself
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.out.println("es ist ein Fehler aufgetreten");
|
LOGGER.error("an error occurred", e);
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -702,8 +709,7 @@ public class MainWindowController {
|
|||||||
Runtime.getRuntime().exec("java -jar cemu_UI.jar"); //start again
|
Runtime.getRuntime().exec("java -jar cemu_UI.jar"); //start again
|
||||||
System.exit(0); //finishes itself
|
System.exit(0); //finishes itself
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.out.println("es ist ein Fehler aufgetreten");
|
LOGGER.error("an error occurred", e);
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -958,101 +964,136 @@ public class MainWindowController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add game to the program and initialize all needed actions (start, time stamps, titleID)
|
* add game to games (ArrayList) and initialize all needed actions (start, time stamps, titleID)
|
||||||
* @param title : game title
|
* @param title : game title
|
||||||
* @param coverPath : path to cover (cache)
|
* @param coverPath : path to cover (cache)
|
||||||
* @param romPath : path to rom file (.rpx)
|
* @param romPath : path to ROM file (.rpx)
|
||||||
* @param titleID : rom ID
|
* @param titleID : ROM ID
|
||||||
*/
|
*/
|
||||||
void addGame(String title, String coverPath, String romPath, String titleID){
|
void addGame(String title, String coverPath, String romPath, String titleID){
|
||||||
ImageView imageView = new ImageView();
|
|
||||||
Label gameTitleLabel = new Label(title);
|
|
||||||
File coverFile = new File(coverPath);
|
|
||||||
VBox VBox = new VBox();
|
VBox VBox = new VBox();
|
||||||
|
Label gameTitleLabel = new Label();
|
||||||
JFXButton gameBtn = new JFXButton();
|
JFXButton gameBtn = new JFXButton();
|
||||||
Image coverImage = new Image(coverFile.toURI().toString());
|
ImageView imageView = new ImageView();
|
||||||
|
Image coverImage = new Image(new File(coverPath).toURI().toString());
|
||||||
|
|
||||||
generatePosition();
|
generatePosition();
|
||||||
LOGGER.info("add " + getxPos()); //TODO debug
|
|
||||||
VBox.setLayoutX(getxPos());
|
UIROMDataType uiROMElement = new UIROMDataType(VBox, gameTitleLabel, gameBtn, imageView, titleID, romPath);
|
||||||
VBox.setLayoutY(getyPos());
|
|
||||||
VBox.getChildren().addAll(gameTitleLabel,gameBtn);
|
uiROMElement.getLabel().setText(title);
|
||||||
gameTitleLabel.setMaxWidth(200);
|
uiROMElement.getLabel().setMaxWidth(200);
|
||||||
gameTitleLabel.setPadding(new Insets(0,0,0,8));
|
uiROMElement.getLabel().setPadding(new Insets(0,0,0,8));
|
||||||
gameTitleLabel.setFont(Font.font("System", FontWeight.BOLD, 14));
|
uiROMElement.getLabel().setFont(Font.font("System", FontWeight.BOLD, 14));
|
||||||
imageView.setImage(coverImage);
|
|
||||||
imageView.setFitHeight(300);
|
// i think we can do this locally and remove the imageView from the data type since it's used as graphic
|
||||||
imageView.setFitWidth(200);
|
uiROMElement.getImageView().setImage(coverImage);
|
||||||
gameBtn.setGraphic(imageView);
|
uiROMElement.getImageView().setFitHeight(300);
|
||||||
gameBtn.setContextMenu(gameContextMenu);
|
uiROMElement.getImageView().setFitWidth(200);
|
||||||
gameBtn.setStyle("-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.8), 10, 0, 0, 3); ");
|
|
||||||
gameBtn.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
|
uiROMElement.getButton().setGraphic(uiROMElement.getImageView());
|
||||||
@Override
|
uiROMElement.getButton().setContextMenu(gameContextMenu);
|
||||||
public void handle(MouseEvent event) {
|
uiROMElement.getButton().setStyle("-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.8), 10, 0, 0, 3); ");
|
||||||
LOGGER.info("selected: "+title+"; ID: "+titleID);
|
uiROMElement.getButton().addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
|
||||||
|
@Override
|
||||||
//getting the selected game index by comparing event.getSource() with games.get(i).getButton()
|
public void handle(MouseEvent event) {
|
||||||
for(int i=0; i<games.size(); i++){
|
LOGGER.info("selected: " + title + "; ID: " + titleID);
|
||||||
if(games.get(i).getButton() == event.getSource()){
|
// getting the selected game index by comparing event.getSource() with games.get(i).getButton()
|
||||||
selectedUIDataIndex = i;
|
for (int i = 0; i < games.size(); i++) {
|
||||||
}
|
if (games.get(i).getButton() == event.getSource()) {
|
||||||
}
|
selectedUIDataIndex = i;
|
||||||
|
}
|
||||||
gameExecutePath = romPath;
|
}
|
||||||
selectedGameTitleID = titleID;
|
|
||||||
selectedGameTitle = title;
|
gameExecutePath = romPath;
|
||||||
|
selectedGameTitleID = titleID;
|
||||||
//underling selected Label
|
selectedGameTitle = title;
|
||||||
lastGameLabel.setStyle("-fx-underline: false;");
|
|
||||||
games.get(selectedUIDataIndex).getLabel().setStyle("-fx-underline: true;");
|
// underlining selected Label
|
||||||
lastGameLabel = games.get(selectedUIDataIndex).getLabel();
|
lastGameLabel.setStyle("-fx-underline: false;");
|
||||||
|
games.get(selectedUIDataIndex).getLabel().setStyle("-fx-underline: true;");
|
||||||
//setting last played
|
lastGameLabel = games.get(selectedUIDataIndex).getLabel();
|
||||||
if(dbController.getLastPlayed(titleID).equals("") || dbController.getLastPlayed(titleID).equals(null)){
|
|
||||||
lastTimePlayedBtn.setText("Last played, never");
|
// setting last played, if lastPlayed is empty game was never played before, else set correct date
|
||||||
totalPlaytimeBtn.setText(dbController.getTotalPlaytime(titleID)+ " min");
|
if (dbController.getLastPlayed(titleID).equals("") || dbController.getLastPlayed(titleID).equals(null)) {
|
||||||
}else{
|
lastTimePlayedBtn.setText("Last played, never");
|
||||||
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
totalPlaytimeBtn.setText(dbController.getTotalPlaytime(titleID) + " min");
|
||||||
|
} else {
|
||||||
int today = Integer.parseInt(dtf.format(LocalDate.now()).replaceAll("-", ""));
|
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
int yesterday = Integer.parseInt(dtf.format(LocalDate.now().minusDays(1)).replaceAll("-", ""));
|
|
||||||
int lastday = Integer.parseInt(dbController.getLastPlayed(titleID).replaceAll("-", ""));
|
int today = Integer.parseInt(dtf.format(LocalDate.now()).replaceAll("-", ""));
|
||||||
|
int yesterday = Integer.parseInt(dtf.format(LocalDate.now().minusDays(1)).replaceAll("-", ""));
|
||||||
if(today == lastday){
|
int lastPlayedDay = Integer.parseInt(dbController.getLastPlayed(titleID).replaceAll("-", ""));
|
||||||
lastTimePlayedBtn.setText("Last played, today");
|
|
||||||
}else if(yesterday == lastday){
|
if (lastPlayedDay == today) {
|
||||||
lastTimePlayedBtn.setText("Last played, yesterday");
|
lastTimePlayedBtn.setText("Last played, today");
|
||||||
}else{
|
} else if (lastPlayedDay == yesterday) {
|
||||||
lastTimePlayedBtn.setText("Last played, "+dbController.getLastPlayed(titleID));
|
lastTimePlayedBtn.setText("Last played, yesterday");
|
||||||
}
|
} else {
|
||||||
if(Integer.parseInt(dbController.getTotalPlaytime(titleID)) > 60){
|
lastTimePlayedBtn.setText("Last played, " + dbController.getLastPlayed(titleID));
|
||||||
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{
|
// setting total playtime, if total playtime > 60 minutes, format is "x hours x minutes" (x h x min),
|
||||||
totalPlaytimeBtn.setText(dbController.getTotalPlaytime(titleID)+ " min");
|
// else only minutes are showed
|
||||||
}
|
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;
|
||||||
if (!playTrue) {
|
totalPlaytimeBtn.setText(hoursPlayed + " h " + minutesPlayed + " min");
|
||||||
playBtnSlideIn();
|
} else {
|
||||||
}
|
totalPlaytimeBtn.setText(dbController.getTotalPlaytime(titleID) + " min");
|
||||||
if (menuTrue) {
|
}
|
||||||
|
|
||||||
|
if (!playTrue) {
|
||||||
|
playBtnSlideIn();
|
||||||
|
}
|
||||||
|
if (menuTrue) {
|
||||||
sideMenuSlideOut();
|
sideMenuSlideOut();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
games.add(new UIROMDataType(VBox, gameTitleLabel, gameBtn, titleID, romPath));
|
|
||||||
|
uiROMElement.getVBox().setLayoutX(getxPos());
|
||||||
|
uiROMElement.getVBox().setLayoutY(getyPos());
|
||||||
|
uiROMElement.getVBox().getChildren().addAll(gameTitleLabel,gameBtn);
|
||||||
|
|
||||||
|
// add uiROMElement to games list
|
||||||
|
games.add(uiROMElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
//add all games to the UI (only called on startup)
|
//add all games saved in games(ArrayList) to gamesAnchorPane
|
||||||
void addUIData(){
|
void addUIData() {
|
||||||
for(int i=0; i<games.size(); i++){
|
for(int i=0; i<games.size(); i++){
|
||||||
gamesAnchorPane.getChildren().add(games.get(i).getVBox());
|
gamesAnchorPane.getChildren().add(games.get(i).getVBox());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void refreshplayBtnPosition() {
|
||||||
|
playBtn.setLayoutX((main.pane.getWidth()/2)-50);
|
||||||
|
totalPlaytimeBtn.setLayoutX((main.pane.getWidth()/2)-50-20.5-100);
|
||||||
|
lastTimePlayedBtn.setLayoutX((main.pane.getWidth()/2)+50+20.5);
|
||||||
|
}
|
||||||
|
|
||||||
private void addCourseDescription(SmmdbApiDataType course) {
|
private void addCourseDescription(SmmdbApiDataType course) {
|
||||||
String courseTheme;
|
String courseTheme;
|
||||||
String gameStyle;
|
String gameStyle;
|
||||||
@ -1173,19 +1214,23 @@ public class MainWindowController {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO Changelistener for resizing
|
|
||||||
/**
|
/**
|
||||||
* xPosHelper based on window width = -24(Windows)/-36(Linux)
|
* xPosHelper based on window width = -24(Windows)/-36(Linux)
|
||||||
* calculates how many games can be displayed in one row
|
* calculates how many games can be displayed in one row
|
||||||
*/
|
*/
|
||||||
private void generatePosition() {
|
private void generatePosition() {
|
||||||
int xPosHelperMax;
|
int xPosHelperMax;
|
||||||
if(System.getProperty("os.name").equals("Linux")){
|
|
||||||
xPosHelperMax = (int) Math.floor((main.pane.getPrefWidth() - 36) / 217);
|
//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
|
||||||
|
if (mainAnchorPane.getWidth() < 10) {
|
||||||
|
xPosHelperMax = (int) Math.floor((mainAnchorPane.getPrefWidth() - 36) / 217);
|
||||||
} else {
|
} else {
|
||||||
xPosHelperMax = (int) Math.floor((main.pane.getPrefWidth() - 24) / 217);
|
xPosHelperMax = (int) Math.floor((mainAnchorPane.getWidth() - 36) / 217);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(xPosHelper == xPosHelperMax){
|
if(xPosHelper == xPosHelperMax){
|
||||||
|
oldXPosHelper = xPosHelper;
|
||||||
xPos = 17;
|
xPos = 17;
|
||||||
yPos = yPos + 345;
|
yPos = yPos + 345;
|
||||||
xPosHelper = 1;
|
xPosHelper = 1;
|
||||||
@ -1193,7 +1238,9 @@ public class MainWindowController {
|
|||||||
xPos = xPos + 217;
|
xPos = xPos + 217;
|
||||||
xPosHelper++;
|
xPosHelper++;
|
||||||
}
|
}
|
||||||
// System.out.println("Breit: " + main.pane.getPrefWidth());
|
|
||||||
|
System.out.println("Breit: " + mainAnchorPane.getPrefWidth());
|
||||||
|
System.out.println("Breit2: " + mainAnchorPane.getWidth());
|
||||||
// System.out.println("xPosHelper: " + xPosHelper);
|
// System.out.println("xPosHelper: " + xPosHelper);
|
||||||
// System.out.println("yPos: " + yPos);
|
// System.out.println("yPos: " + yPos);
|
||||||
// System.out.println("xPos: " + xPos);
|
// System.out.println("xPos: " + xPos);
|
||||||
@ -1275,6 +1322,8 @@ public class MainWindowController {
|
|||||||
props.setProperty("cloudService", getCloudService());
|
props.setProperty("cloudService", getCloudService());
|
||||||
}
|
}
|
||||||
props.setProperty("folderID", main.cloudController.getFolderID(getCloudService()));
|
props.setProperty("folderID", main.cloudController.getFolderID(getCloudService()));
|
||||||
|
props.setProperty("windowWidth", String.valueOf(mainAnchorPane.getWidth()));
|
||||||
|
props.setProperty("windowHeight", String.valueOf(mainAnchorPane.getHeight()));
|
||||||
if(System.getProperty("os.name").equals("Linux")){
|
if(System.getProperty("os.name").equals("Linux")){
|
||||||
outputStream = new FileOutputStream(configFileLinux);
|
outputStream = new FileOutputStream(configFileLinux);
|
||||||
}else{
|
}else{
|
||||||
@ -1352,6 +1401,20 @@ public class MainWindowController {
|
|||||||
setCloudSync(false);
|
setCloudSync(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
inputStream.close();
|
inputStream.close();
|
||||||
LOGGER.info("loading settings done!");
|
LOGGER.info("loading settings done!");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@ -1443,7 +1506,7 @@ public class MainWindowController {
|
|||||||
* @return the main color in hexadecimal format
|
* @return the main color in hexadecimal format
|
||||||
*/
|
*/
|
||||||
private String hexToRgb() {
|
private String hexToRgb() {
|
||||||
System.out.println(getColor());
|
LOGGER.info(getColor());
|
||||||
int hex = Integer.parseInt(getColor().substring(0, 5), 16);
|
int hex = Integer.parseInt(getColor().substring(0, 5), 16);
|
||||||
|
|
||||||
int r = (hex & 0xFF0000) >> 16;
|
int r = (hex & 0xFF0000) >> 16;
|
||||||
@ -1566,4 +1629,32 @@ public class MainWindowController {
|
|||||||
this.playBtn = playBtn;
|
this.playBtn = playBtn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOldXPosHelper() {
|
||||||
|
return oldXPosHelper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOldXPosHelper(int oldXPosHelper) {
|
||||||
|
this.oldXPosHelper = oldXPosHelper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AnchorPane getMainAnchorPane() {
|
||||||
|
return mainAnchorPane;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,24 @@
|
|||||||
/**
|
/**
|
||||||
* smmdbapi query
|
* cemu_UI
|
||||||
* api query, return all courses as ArrayList
|
*
|
||||||
|
* Copyright 2017 <@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
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package application;
|
package application;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
@ -21,8 +38,7 @@ import datatypes.SmmdbApiDataType;
|
|||||||
|
|
||||||
public class SmmdbApiQuery {
|
public class SmmdbApiQuery {
|
||||||
|
|
||||||
//FIXME limit=70 as workaround for to long response, courseDataGz is to long
|
private String URL = "http://smmdb.ddns.net/api/getcourses?format=json";
|
||||||
private String URL = "http://smmdb.ddns.net/api/getcourses?format=json&limit=70";
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger(SmmdbApiQuery.class.getName());
|
private static final Logger LOGGER = LogManager.getLogger(SmmdbApiQuery.class.getName());
|
||||||
|
|
||||||
public SmmdbApiQuery() {
|
public SmmdbApiQuery() {
|
||||||
@ -43,8 +59,8 @@ public class SmmdbApiQuery {
|
|||||||
BufferedReader ina = new BufferedReader(new InputStreamReader(apiUrl.openStream()));
|
BufferedReader ina = new BufferedReader(new InputStreamReader(apiUrl.openStream()));
|
||||||
output = ina.readLine();
|
output = ina.readLine();
|
||||||
ina.close();
|
ina.close();
|
||||||
System.out.println(output);
|
|
||||||
LOGGER.info("response from " + URL + " was valid");
|
LOGGER.info("response from " + URL + " was valid");
|
||||||
|
LOGGER.info(output);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOGGER.error("error while making api request or reading response");
|
LOGGER.error("error while making api request or reading response");
|
||||||
LOGGER.error("response from " + URL + " was: " + output, e);
|
LOGGER.error("response from " + URL + " was: " + output, e);
|
||||||
|
@ -3,14 +3,22 @@
|
|||||||
*
|
*
|
||||||
* Copyright 2017 <@Seil0>
|
* Copyright 2017 <@Seil0>
|
||||||
*
|
*
|
||||||
* "THE CHOCOLATE-WARE LICENSE" (Revision 1):
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* As long as you retain this notice this software is licensed under the GNU GENERAL PUBLIC LICENSE Version 3,
|
* it under the terms of the GNU General Public License as published by
|
||||||
* with the following additions:
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
* If we meet some day, and you think this stuff is worth it,
|
* (at your option) any later version.
|
||||||
* you can buy me a chocolate in return. - @Seil0
|
|
||||||
* (license based in Beer-ware, see https://fedoraproject.org/wiki/Licensing/Beerware )
|
|
||||||
*
|
*
|
||||||
|
* 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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package application;
|
package application;
|
||||||
|
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
|
@ -3,13 +3,20 @@
|
|||||||
*
|
*
|
||||||
* Copyright 2017 <@Seil0>
|
* Copyright 2017 <@Seil0>
|
||||||
*
|
*
|
||||||
* "THE CHOCOLATE-WARE LICENSE" (Revision 1):
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* As long as you retain this notice this software is licensed under the GNU GENERAL PUBLIC LICENSE Version 3,
|
* it under the terms of the GNU General Public License as published by
|
||||||
* with the following additions:
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
* If we meet some day, and you think this stuff is worth it,
|
* (at your option) any later version.
|
||||||
* you can buy me a chocolate in return. - @Seil0
|
|
||||||
* (license based in Beer-ware, see https://fedoraproject.org/wiki/Licensing/Beerware )
|
|
||||||
*
|
*
|
||||||
|
* 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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package application;
|
package application;
|
||||||
|
@ -1,3 +1,24 @@
|
|||||||
|
/**
|
||||||
|
* cemu_UI
|
||||||
|
*
|
||||||
|
* Copyright 2017 <@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
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
package cloudControllerInstances;
|
package cloudControllerInstances;
|
||||||
|
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
|
@ -1,6 +1,24 @@
|
|||||||
/**
|
/**
|
||||||
* Datatype used in the TreeTableview for
|
* cemu_UI
|
||||||
|
*
|
||||||
|
* Copyright 2017 <@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
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package datatypes;
|
package datatypes;
|
||||||
|
|
||||||
import com.jfoenix.controls.datamodels.treetable.RecursiveTreeObject;
|
import com.jfoenix.controls.datamodels.treetable.RecursiveTreeObject;
|
||||||
@ -16,7 +34,10 @@ public class CourseTableDataType extends RecursiveTreeObject<CourseTableDataType
|
|||||||
public final StringProperty id;
|
public final StringProperty id;
|
||||||
public final IntegerProperty time;
|
public final IntegerProperty time;
|
||||||
public final IntegerProperty stars;
|
public final IntegerProperty stars;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data type used in the TreeTableview for
|
||||||
|
*/
|
||||||
public CourseTableDataType(String title, String id, int time, int stars) {
|
public CourseTableDataType(String title, String id, int time, int stars) {
|
||||||
this.title = new SimpleStringProperty(title);
|
this.title = new SimpleStringProperty(title);
|
||||||
this.id = new SimpleStringProperty(id);
|
this.id = new SimpleStringProperty(id);
|
||||||
|
@ -1,6 +1,24 @@
|
|||||||
/**
|
/**
|
||||||
* Datatype used for the smmdbapi query
|
* cemu_UI
|
||||||
|
*
|
||||||
|
* Copyright 2017 <@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
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package datatypes;
|
package datatypes;
|
||||||
|
|
||||||
import javafx.beans.property.IntegerProperty;
|
import javafx.beans.property.IntegerProperty;
|
||||||
@ -23,6 +41,9 @@ public class SmmdbApiDataType {
|
|||||||
private final StringProperty nintendoid = new SimpleStringProperty();
|
private final StringProperty nintendoid = new SimpleStringProperty();
|
||||||
private final StringProperty title = new SimpleStringProperty();
|
private final StringProperty title = new SimpleStringProperty();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data type used for the smmdbapi query
|
||||||
|
*/
|
||||||
public SmmdbApiDataType(final int courseTheme, final int gameStyle, final int difficulty, final int lastmodified,
|
public SmmdbApiDataType(final int courseTheme, final int gameStyle, final int difficulty, final int lastmodified,
|
||||||
final int uploaded, final int autoScroll, final int stars, final int time,
|
final int uploaded, final int autoScroll, final int stars, final int time,
|
||||||
final String owner, final String id, final String nintendoid, final String title) {
|
final String owner, final String id, final String nintendoid, final String title) {
|
||||||
|
@ -1,6 +1,24 @@
|
|||||||
/**
|
/**
|
||||||
* Datatype used for UI ROM elements
|
* cemu_UI
|
||||||
|
*
|
||||||
|
* Copyright 2017 <@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
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package datatypes;
|
package datatypes;
|
||||||
|
|
||||||
import com.jfoenix.controls.JFXButton;
|
import com.jfoenix.controls.JFXButton;
|
||||||
@ -9,6 +27,7 @@ import javafx.beans.property.SimpleObjectProperty;
|
|||||||
import javafx.beans.property.SimpleStringProperty;
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
import javafx.beans.property.StringProperty;
|
import javafx.beans.property.StringProperty;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.image.ImageView;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
|
|
||||||
public class UIROMDataType {
|
public class UIROMDataType {
|
||||||
@ -16,14 +35,20 @@ public class UIROMDataType {
|
|||||||
private final SimpleObjectProperty<VBox> vBox = new SimpleObjectProperty<>();
|
private final SimpleObjectProperty<VBox> vBox = new SimpleObjectProperty<>();
|
||||||
private final SimpleObjectProperty<Label> label = new SimpleObjectProperty<>();
|
private final SimpleObjectProperty<Label> label = new SimpleObjectProperty<>();
|
||||||
private final SimpleObjectProperty<JFXButton> button = new SimpleObjectProperty<>();
|
private final SimpleObjectProperty<JFXButton> button = new SimpleObjectProperty<>();
|
||||||
|
private final SimpleObjectProperty<ImageView> imageView = new SimpleObjectProperty<>();
|
||||||
private final StringProperty titleID = new SimpleStringProperty();
|
private final StringProperty titleID = new SimpleStringProperty();
|
||||||
private final StringProperty romPath = new SimpleStringProperty();
|
private final StringProperty romPath = new SimpleStringProperty();
|
||||||
|
|
||||||
public UIROMDataType (final VBox vBox, final Label label, final JFXButton button, final String titleID, final String romPath){
|
/**
|
||||||
|
* Data type used for UI ROM elements all uiROMElemts are of this data type
|
||||||
|
*/
|
||||||
|
public UIROMDataType (final VBox vBox, final Label label, final JFXButton button, final ImageView imageView, final String titleID, final String romPath){
|
||||||
this.vBox.set(vBox);
|
this.vBox.set(vBox);
|
||||||
this.label.set(label);
|
this.label.set(label);
|
||||||
this.button.set(button);
|
this.button.set(button);
|
||||||
|
this.imageView.set(imageView);
|
||||||
this.titleID.set(titleID);
|
this.titleID.set(titleID);
|
||||||
|
this.romPath.set(romPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SimpleObjectProperty<VBox> vBoxProperty(){
|
public SimpleObjectProperty<VBox> vBoxProperty(){
|
||||||
@ -38,6 +63,10 @@ public class UIROMDataType {
|
|||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SimpleObjectProperty<ImageView> imageViewProperty(){
|
||||||
|
return imageView;
|
||||||
|
}
|
||||||
|
|
||||||
public StringProperty titleIDProperty(){
|
public StringProperty titleIDProperty(){
|
||||||
return titleID;
|
return titleID;
|
||||||
}
|
}
|
||||||
@ -59,6 +88,10 @@ public class UIROMDataType {
|
|||||||
return buttonProperty().get();
|
return buttonProperty().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final ImageView getImageView() {
|
||||||
|
return imageViewProperty().get();
|
||||||
|
}
|
||||||
|
|
||||||
public final String getTitleID(){
|
public final String getTitleID(){
|
||||||
return titleIDProperty().get();
|
return titleIDProperty().get();
|
||||||
}
|
}
|
||||||
@ -80,6 +113,10 @@ public class UIROMDataType {
|
|||||||
buttonProperty().set(button);
|
buttonProperty().set(button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final void setImageView(ImageView imageView) {
|
||||||
|
imageViewProperty().set(imageView);
|
||||||
|
}
|
||||||
|
|
||||||
public final void setTitleID(String titleID){
|
public final void setTitleID(String titleID){
|
||||||
titleIDProperty().set(titleID);
|
titleIDProperty().set(titleID);
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Reference in New Issue
Block a user