Compare commits
26 Commits
Author | SHA1 | Date | |
---|---|---|---|
e4a316f62c | |||
eb127282ad | |||
5b46a0b58c | |||
6169a5e7cd | |||
f53055db7e | |||
8d759a724b | |||
f6778a320f | |||
607bcf8ace | |||
c5d6a2f276 | |||
0f0f962d8c | |||
0d46e818e1 | |||
05f6f7e664 | |||
8d49ce902e | |||
6d5e9409a5 | |||
bda73cf627 | |||
e13a187c71 | |||
e4dbbe0d55 | |||
f09258190a | |||
109bcf6e03 | |||
3853f70895 | |||
9b4bc3ada9 | |||
3bc571bacd | |||
729a4ee10e | |||
3f98dfa059 | |||
78791bb7e1 | |||
0124a5b1a4 |
30
.classpath
30
.classpath
@ -3,27 +3,27 @@
|
|||||||
<classpathentry kind="src" path="src"/>
|
<classpathentry kind="src" path="src"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.fx.ide.jdt.core.JAVAFX_CONTAINER"/>
|
<classpathentry kind="con" path="org.eclipse.fx.ide.jdt.core.JAVAFX_CONTAINER"/>
|
||||||
<classpathentry kind="lib" path="src/libraries/commons-io-2.5.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/google_apis/google-api-client-1.22.0.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/google_apis/google-api-services-drive-v3-rev68-1.22.0.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/google_apis/google-http-client-1.22.0.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/google_apis/google-http-client-jackson2-1.22.0.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/google_apis/google-oauth-client-1.22.0.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/google_apis/google-oauth-client-java6-1.22.0.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/google_apis/google-oauth-client-jetty-1.22.0.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/google_apis/javax.servlet-api-3.1.0.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/google_apis/jetty-6.1.25.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/google_apis/jetty-util-6.1.25.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/google_apis/jackson-core-2.8.8.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/commons-codec-1.10.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/minimal-json-0.9.4.jar"/>
|
<classpathentry kind="lib" path="src/libraries/minimal-json-0.9.4.jar"/>
|
||||||
<classpathentry kind="lib" path="src/libraries/commons-logging-api-1.1.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/commons-vfs2-2.1.1744488.2.jar"/>
|
<classpathentry kind="lib" path="src/libraries/commons-vfs2-2.1.1744488.2.jar"/>
|
||||||
<classpathentry kind="lib" path="src/libraries/flow-8.0.1.jar"/>
|
<classpathentry kind="lib" path="src/libraries/flow-8.0.1.jar"/>
|
||||||
<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="lib" path="src/libraries/commons-codec-1.11.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/commons-io-2.6.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/google_api_libraries/google-api-client-1.23.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/google_api_libraries/google-api-services-drive-v3-rev87-1.23.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/google_api_libraries/google-http-client-1.23.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/google_api_libraries/google-http-client-jackson2-1.23.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/google_api_libraries/google-oauth-client-1.23.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/google_api_libraries/google-oauth-client-java6-1.23.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/google_api_libraries/google-oauth-client-jetty-1.23.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/google_api_libraries/jackson-core-2.9.2.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/google_api_libraries/javax.servlet-api-4.0.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/google_api_libraries/jetty-6.1.26.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/google_api_libraries/jetty-util-6.1.26.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/commons-logging-1.1.1.jar"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
23
README.md
23
README.md
@ -1,18 +1,16 @@
|
|||||||
# 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
|
||||||
Simply download the cemu_UI.jar from [releases](https://github.com/Seil0/cemu_UI/releases), make sure you have the latest version of java 8 oracle jre/jdk installed, open the file. cemu_UI creats a new directory "C:\Users\USERNAME\Documents\cemu_UI", where the database, settings and covers are stored. **first start can take while!**
|
Simply download the cemu_UI.jar from [releases](https://github.com/Seil0/cemu_UI/releases), make sure you have the latest version of java 8 oracle jre/jdk installed and open the file. cemu_UI creats a new directory "C:\Users\USERNAME\Documents\cemu_UI", where the database, settings and covers are stored. **first start can take while!**
|
||||||
|
|
||||||
If you want to use the cloud sync function read the [wiki](https://github.com/Seil0/cemu_UI/wiki#cloud-savegame-syncronisation) carefully!
|
If you want to use the cloud sync function read the [wiki](https://github.com/Seil0/cemu_UI/wiki#cloud-savegame-syncronisation) carefully!
|
||||||
|
|
||||||
## building from source
|
|
||||||
1. read the [license](https://github.com/Seil0/cemu_UI/blob/master/LICENSE)
|
|
||||||
2. download/clone the git repository
|
|
||||||
3. make sure you have the latest versionj of java 8 oracle jdk installed
|
|
||||||
4. place the unzip repository into your workspace and start eclipse, project should now be there **or** import the project to your workspace
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
* launch Games
|
* launch Games
|
||||||
@ -22,7 +20,7 @@ If you want to use the cloud sync function read the [wiki](https://github.com/Se
|
|||||||
* automatic rom detection (only .rpx files with a app.xml)
|
* automatic rom detection (only .rpx files with a app.xml)
|
||||||
* customisable UI
|
* customisable UI
|
||||||
* [sync savegames via google drive](https://github.com/Seil0/cemu_UI/wiki)
|
* [sync savegames via google drive](https://github.com/Seil0/cemu_UI/wiki)
|
||||||
* [smmdb api](http://smmdb.ddns.net/api) integration
|
* [smmdb api](https://github.com/Tarnadas/smmdb) integration
|
||||||
|
|
||||||
## [planed Features](https://github.com/Seil0/cemu_UI/projects/1) (no ETA)
|
## [planed Features](https://github.com/Seil0/cemu_UI/projects/1) (no ETA)
|
||||||
|
|
||||||
@ -32,14 +30,9 @@ 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
|
### [building from source](https://github.com/Seil0/cemu_UI/wiki/Documantation)
|
||||||
* 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,3 @@
|
|||||||
/application/
|
/application/
|
||||||
/resources/
|
|
||||||
/cloudControllerInstances/
|
/cloudControllerInstances/
|
||||||
|
/datatypes/
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bin/application/Main$1$1.class
Normal file
BIN
bin/application/Main$1$1.class
Normal file
Binary file not shown.
BIN
bin/application/Main$1.class
Normal file
BIN
bin/application/Main$1.class
Normal file
Binary file not shown.
BIN
bin/application/Main$2$1.class
Normal file
BIN
bin/application/Main$2$1.class
Normal file
Binary file not shown.
BIN
bin/application/Main$2.class
Normal file
BIN
bin/application/Main$2.class
Normal file
Binary file not shown.
BIN
bin/application/Main$3.class
Normal file
BIN
bin/application/Main$3.class
Normal file
Binary file not shown.
Binary file not shown.
@ -16,9 +16,9 @@
|
|||||||
<?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.141" 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="mainScrollPane" fitToWidth="true" layoutY="38.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
||||||
<content>
|
<content>
|
||||||
<AnchorPane fx:id="gamesAnchorPane">
|
<AnchorPane fx:id="gamesAnchorPane">
|
||||||
<padding>
|
<padding>
|
||||||
@ -60,31 +60,38 @@
|
|||||||
</JFXButton>
|
</JFXButton>
|
||||||
</children>
|
</children>
|
||||||
</VBox>
|
</VBox>
|
||||||
<!-- space between settings sections 35px, between sections elements (label + element) 20px, between label and element 3px(or more) -->
|
<ScrollPane fx:id="settingsScrollPane" style="-fx-background: 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" 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">
|
<content>
|
||||||
<children>
|
<!-- space between settings sections 35px, between sections elements (label + element) 20px, between label and element 3px(or more) -->
|
||||||
<Label layoutX="22.0" layoutY="59.0" text="Cemu Directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="59.0" />
|
<AnchorPane fx:id="settingsAnchorPane" prefHeight="562.0" prefWidth="511.0" style="-fx-background-color: white;">
|
||||||
<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" />
|
<children>
|
||||||
<JFXTextField fx:id="romTextField" layoutX="18.0" layoutY="159.0" maxWidth="305.0" minWidth="305.0" onAction="#romTextFieldAction" prefHeight="32.0" prefWidth="305.0" promptText="rom directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="151.0" />
|
<Label fx:id="cemuDirectoryLbl" layoutX="10.0" layoutY="39.0" text="Cemu Directory" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="39.0" />
|
||||||
<JFXButton fx:id="romTFBtn" layoutX="337.0" layoutY="159.0" onAction="#romTFBtnAction" prefHeight="32.0" prefWidth="108.0" text="choose directory" AnchorPane.leftAnchor="333.0" AnchorPane.topAnchor="151.0" />
|
<JFXTextField fx:id="cemuTextField" layoutX="10.0" layoutY="59.0" maxWidth="305.0" minWidth="305.0" onAction="#cemuTextFieldAction" prefHeight="32.0" prefWidth="305.0" promptText="cemu directory" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="59.0" />
|
||||||
<JFXButton fx:id="cemuTFBtn" layoutX="333.0" layoutY="79.0" onAction="#cemuTFBtnAction" prefHeight="32.0" prefWidth="108.0" text="choose directory" AnchorPane.leftAnchor="333.0" AnchorPane.topAnchor="79.0" />
|
<JFXTextField fx:id="romTextField" layoutX="10.0" layoutY="131.0" maxWidth="305.0" minWidth="305.0" onAction="#romTextFieldAction" prefHeight="32.0" prefWidth="305.0" promptText="rom directory" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="131.0" />
|
||||||
<JFXColorPicker fx:id="colorPicker" layoutX="22.0" layoutY="235.0" onAction="#colorPickerAction" AnchorPane.leftAnchor="16.0" AnchorPane.topAnchor="227.0" />
|
<JFXButton fx:id="romTFBtn" layoutX="329.0" layoutY="131.0" onAction="#romTFBtnAction" prefHeight="32.0" text="choose directory" AnchorPane.leftAnchor="329.0" AnchorPane.topAnchor="131.0" />
|
||||||
<JFXToggleButton fx:id="fullscreenToggleBtn" layoutX="14.0" layoutY="391.0" onAction="#fullscreenToggleBtnAction" text="start game in fullscreen" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="390.0" />
|
<JFXButton fx:id="cemuTFBtn" layoutX="329.0" layoutY="59.0" onAction="#cemuTFBtnAction" prefHeight="32.0" text="choose directory" AnchorPane.leftAnchor="329.0" AnchorPane.topAnchor="59.0" />
|
||||||
<Label layoutX="22.0" layoutY="135.0" text="Rom Directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="131.0" />
|
<JFXColorPicker fx:id="colorPicker" layoutX="12.0" layoutY="207.0" onAction="#colorPickerAction" AnchorPane.leftAnchor="12.0" AnchorPane.topAnchor="207.0" />
|
||||||
<Label layoutX="22.0" layoutY="211.0" text="main Color" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="203.0" />
|
<JFXToggleButton fx:id="fullscreenToggleBtn" layoutX="16.0" layoutY="488.0" onAction="#fullscreenToggleBtnAction" text="start game in fullscreen" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="488.0" />
|
||||||
<Label layoutX="14.0" layoutY="371.0" text="Cemu Settings" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="350.0">
|
<Label fx:id="romDirectoryLbl" layoutX="10.0" layoutY="111.0" text="Rom Directory" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="111.0" />
|
||||||
<font>
|
<Label fx:id="mainColorLbl" layoutX="10.0" layoutY="183.0" text="main Color" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="183.0" />
|
||||||
<Font name="System Bold" size="14.0" />
|
<Label fx:id="cemuSettingsLbl" layoutX="16.0" layoutY="450.0" text="Cemu Settings" AnchorPane.leftAnchor="16.0" AnchorPane.topAnchor="465.0">
|
||||||
</font>
|
<font>
|
||||||
</Label>
|
<Font name="System Bold" size="14.0" />
|
||||||
<Label layoutX="22.0" layoutY="14.0" text="cemu_UI Settings" AnchorPane.leftAnchor="18.0" AnchorPane.topAnchor="14.0">
|
</font>
|
||||||
<font>
|
</Label>
|
||||||
<Font name="System Bold" size="14.0" />
|
<Label fx:id="cemu_UISettingsLbl" layoutX="22.0" layoutY="14.0" text="cemu_UI Settings" AnchorPane.leftAnchor="18.0" AnchorPane.topAnchor="14.0">
|
||||||
</font>
|
<font>
|
||||||
</Label>
|
<Font name="System Bold" size="14.0" />
|
||||||
<JFXToggleButton fx:id="cloudSyncToggleBtn" layoutX="14.0" layoutY="264.0" onAction="#cloudSyncToggleBtnAction" text="cloud savegames (Google Drive)" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="267.0" />
|
</font>
|
||||||
</children>
|
</Label>
|
||||||
</AnchorPane>
|
<JFXToggleButton fx:id="cloudSyncToggleBtn" layoutX="10.0" layoutY="247.0" onAction="#cloudSyncToggleBtnAction" text="cloud savegames (Google Drive)" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="247.0" />
|
||||||
|
<Label fx:id="updateLbl" layoutX="10.0" layoutY="315.0" text="Updates" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="315.0" />
|
||||||
|
<JFXButton fx:id="updateBtn" layoutX="14.0" layoutY="335.0" onAction="#updateBtnAction" prefHeight="32.0" prefWidth="111.0" text="check now!" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="335.0" />
|
||||||
|
<JFXToggleButton fx:id="autoUpdateToggleBtn" layoutX="10.0" layoutY="372.0" onAction="#autoUpdateToggleBtnAction" text="check for updates on startup" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="372.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</content>
|
||||||
|
</ScrollPane>
|
||||||
<AnchorPane fx:id="smmdbAnchorPane" 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="smmdbAnchorPane" 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>
|
||||||
<JFXTreeTableView fx:id="courseTreeTable" layoutX="14.0" layoutY="14.0" prefHeight="537.0" prefWidth="405.0" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="14.0" />
|
<JFXTreeTableView fx:id="courseTreeTable" layoutX="14.0" layoutY="14.0" prefHeight="537.0" prefWidth="405.0" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="14.0" />
|
||||||
@ -105,13 +112,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.
BIN
bin/libraries/commons-codec-1.11.jar
Normal file
BIN
bin/libraries/commons-codec-1.11.jar
Normal file
Binary file not shown.
Binary file not shown.
BIN
bin/libraries/commons-io-2.6.jar
Normal file
BIN
bin/libraries/commons-io-2.6.jar
Normal file
Binary file not shown.
BIN
bin/libraries/commons-logging-1.1.1.jar
Normal file
BIN
bin/libraries/commons-logging-1.1.1.jar
Normal file
Binary file not shown.
Binary file not shown.
BIN
bin/libraries/google_api_libraries/google-api-client-1.23.0.jar
Normal file
BIN
bin/libraries/google_api_libraries/google-api-client-1.23.0.jar
Normal file
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.
BIN
bin/libraries/google_api_libraries/jackson-core-2.9.2.jar
Normal file
BIN
bin/libraries/google_api_libraries/jackson-core-2.9.2.jar
Normal file
Binary file not shown.
BIN
bin/libraries/google_api_libraries/javax.servlet-api-4.0.0.jar
Normal file
BIN
bin/libraries/google_api_libraries/javax.servlet-api-4.0.0.jar
Normal file
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;
|
||||||
@ -32,20 +40,26 @@ public class CloudController {
|
|||||||
private GoogleDriveController googleDriveController = new GoogleDriveController();
|
private GoogleDriveController googleDriveController = new GoogleDriveController();
|
||||||
private static final Logger LOGGER = LogManager.getLogger(CloudController.class.getName());
|
private static final Logger LOGGER = LogManager.getLogger(CloudController.class.getName());
|
||||||
|
|
||||||
void initializeConnection(String cloudService, String cemuDirectory) {
|
boolean initializeConnection(String cloudService, String cemuDirectory) {
|
||||||
|
boolean success = false;
|
||||||
LOGGER.info("sartting cloud initialisation ...");
|
LOGGER.info("sartting cloud initialisation ...");
|
||||||
|
|
||||||
if(cloudService.equals("GoogleDrive")) {
|
if(cloudService.equals("GoogleDrive")) {
|
||||||
LOGGER.info("selected service is Google Drive");
|
LOGGER.info("selected service is Google Drive");
|
||||||
try {
|
try {
|
||||||
googleDriveController.main(cemuDirectory);
|
googleDriveController.main(cemuDirectory);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOGGER.error("error while initialize connection", e);
|
LOGGER.error("error while initialize connection", e);
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
success = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cloudService.equals("Dropbox")) {
|
if(cloudService.equals("Dropbox")) {
|
||||||
LOGGER.info("selected service is Dropbox");
|
LOGGER.info("selected service is Dropbox");
|
||||||
}
|
}
|
||||||
LOGGER.info("cloud initialisation done!");
|
LOGGER.info("cloud initialisation done!");
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
void stratupCheck(String cloudService, String cemuDirectory) {
|
void stratupCheck(String cloudService, String cemuDirectory) {
|
||||||
|
@ -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,13 +69,14 @@ 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
|
||||||
|
|
||||||
@ -71,20 +84,18 @@ public class Main extends Application {
|
|||||||
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")){
|
||||||
@ -201,4 +287,9 @@ public class Main extends Application {
|
|||||||
LOGGER = LogManager.getLogger(Main.class.getName());
|
LOGGER = LogManager.getLogger(Main.class.getName());
|
||||||
launch(args);
|
launch(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stop() {
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
<?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.141" 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="mainScrollPane" fitToWidth="true" layoutY="38.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
||||||
<content>
|
<content>
|
||||||
<AnchorPane fx:id="gamesAnchorPane">
|
<AnchorPane fx:id="gamesAnchorPane">
|
||||||
<padding>
|
<padding>
|
||||||
@ -60,31 +60,38 @@
|
|||||||
</JFXButton>
|
</JFXButton>
|
||||||
</children>
|
</children>
|
||||||
</VBox>
|
</VBox>
|
||||||
<!-- space between settings sections 35px, between sections elements (label + element) 20px, between label and element 3px(or more) -->
|
<ScrollPane fx:id="settingsScrollPane" style="-fx-background: 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" 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">
|
<content>
|
||||||
<children>
|
<!-- space between settings sections 35px, between sections elements (label + element) 20px, between label and element 3px(or more) -->
|
||||||
<Label layoutX="22.0" layoutY="59.0" text="Cemu Directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="59.0" />
|
<AnchorPane fx:id="settingsAnchorPane" prefHeight="562.0" prefWidth="511.0" style="-fx-background-color: white;">
|
||||||
<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" />
|
<children>
|
||||||
<JFXTextField fx:id="romTextField" layoutX="18.0" layoutY="159.0" maxWidth="305.0" minWidth="305.0" onAction="#romTextFieldAction" prefHeight="32.0" prefWidth="305.0" promptText="rom directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="151.0" />
|
<Label fx:id="cemuDirectoryLbl" layoutX="10.0" layoutY="39.0" text="Cemu Directory" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="39.0" />
|
||||||
<JFXButton fx:id="romTFBtn" layoutX="337.0" layoutY="159.0" onAction="#romTFBtnAction" prefHeight="32.0" prefWidth="108.0" text="choose directory" AnchorPane.leftAnchor="333.0" AnchorPane.topAnchor="151.0" />
|
<JFXTextField fx:id="cemuTextField" layoutX="10.0" layoutY="59.0" maxWidth="305.0" minWidth="305.0" onAction="#cemuTextFieldAction" prefHeight="32.0" prefWidth="305.0" promptText="cemu directory" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="59.0" />
|
||||||
<JFXButton fx:id="cemuTFBtn" layoutX="333.0" layoutY="79.0" onAction="#cemuTFBtnAction" prefHeight="32.0" prefWidth="108.0" text="choose directory" AnchorPane.leftAnchor="333.0" AnchorPane.topAnchor="79.0" />
|
<JFXTextField fx:id="romTextField" layoutX="10.0" layoutY="131.0" maxWidth="305.0" minWidth="305.0" onAction="#romTextFieldAction" prefHeight="32.0" prefWidth="305.0" promptText="rom directory" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="131.0" />
|
||||||
<JFXColorPicker fx:id="colorPicker" layoutX="22.0" layoutY="235.0" onAction="#colorPickerAction" AnchorPane.leftAnchor="16.0" AnchorPane.topAnchor="227.0" />
|
<JFXButton fx:id="romTFBtn" layoutX="329.0" layoutY="131.0" onAction="#romTFBtnAction" prefHeight="32.0" text="choose directory" AnchorPane.leftAnchor="329.0" AnchorPane.topAnchor="131.0" />
|
||||||
<JFXToggleButton fx:id="fullscreenToggleBtn" layoutX="14.0" layoutY="391.0" onAction="#fullscreenToggleBtnAction" text="start game in fullscreen" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="390.0" />
|
<JFXButton fx:id="cemuTFBtn" layoutX="329.0" layoutY="59.0" onAction="#cemuTFBtnAction" prefHeight="32.0" text="choose directory" AnchorPane.leftAnchor="329.0" AnchorPane.topAnchor="59.0" />
|
||||||
<Label layoutX="22.0" layoutY="135.0" text="Rom Directory" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="131.0" />
|
<JFXColorPicker fx:id="colorPicker" layoutX="12.0" layoutY="207.0" onAction="#colorPickerAction" AnchorPane.leftAnchor="12.0" AnchorPane.topAnchor="207.0" />
|
||||||
<Label layoutX="22.0" layoutY="211.0" text="main Color" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="203.0" />
|
<JFXToggleButton fx:id="fullscreenToggleBtn" layoutX="16.0" layoutY="488.0" onAction="#fullscreenToggleBtnAction" text="start game in fullscreen" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="488.0" />
|
||||||
<Label layoutX="14.0" layoutY="371.0" text="Cemu Settings" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="350.0">
|
<Label fx:id="romDirectoryLbl" layoutX="10.0" layoutY="111.0" text="Rom Directory" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="111.0" />
|
||||||
<font>
|
<Label fx:id="mainColorLbl" layoutX="10.0" layoutY="183.0" text="main Color" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="183.0" />
|
||||||
<Font name="System Bold" size="14.0" />
|
<Label fx:id="cemuSettingsLbl" layoutX="16.0" layoutY="450.0" text="Cemu Settings" AnchorPane.leftAnchor="16.0" AnchorPane.topAnchor="465.0">
|
||||||
</font>
|
<font>
|
||||||
</Label>
|
<Font name="System Bold" size="14.0" />
|
||||||
<Label layoutX="22.0" layoutY="14.0" text="cemu_UI Settings" AnchorPane.leftAnchor="18.0" AnchorPane.topAnchor="14.0">
|
</font>
|
||||||
<font>
|
</Label>
|
||||||
<Font name="System Bold" size="14.0" />
|
<Label fx:id="cemu_UISettingsLbl" layoutX="22.0" layoutY="14.0" text="cemu_UI Settings" AnchorPane.leftAnchor="18.0" AnchorPane.topAnchor="14.0">
|
||||||
</font>
|
<font>
|
||||||
</Label>
|
<Font name="System Bold" size="14.0" />
|
||||||
<JFXToggleButton fx:id="cloudSyncToggleBtn" layoutX="14.0" layoutY="264.0" onAction="#cloudSyncToggleBtnAction" text="cloud savegames (Google Drive)" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="267.0" />
|
</font>
|
||||||
</children>
|
</Label>
|
||||||
</AnchorPane>
|
<JFXToggleButton fx:id="cloudSyncToggleBtn" layoutX="10.0" layoutY="247.0" onAction="#cloudSyncToggleBtnAction" text="cloud savegames (Google Drive)" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="247.0" />
|
||||||
|
<Label fx:id="updateLbl" layoutX="10.0" layoutY="315.0" text="Updates" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="315.0" />
|
||||||
|
<JFXButton fx:id="updateBtn" layoutX="14.0" layoutY="335.0" onAction="#updateBtnAction" prefHeight="32.0" prefWidth="111.0" text="check now!" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="335.0" />
|
||||||
|
<JFXToggleButton fx:id="autoUpdateToggleBtn" layoutX="10.0" layoutY="372.0" onAction="#autoUpdateToggleBtnAction" text="check for updates on startup" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="372.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</content>
|
||||||
|
</ScrollPane>
|
||||||
<AnchorPane fx:id="smmdbAnchorPane" 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="smmdbAnchorPane" 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>
|
||||||
<JFXTreeTableView fx:id="courseTreeTable" layoutX="14.0" layoutY="14.0" prefHeight="537.0" prefWidth="405.0" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="14.0" />
|
<JFXTreeTableView fx:id="courseTreeTable" layoutX="14.0" layoutY="14.0" prefHeight="537.0" prefWidth="405.0" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="14.0" />
|
||||||
@ -105,13 +112,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;
|
||||||
@ -120,6 +128,9 @@ public class MainWindowController {
|
|||||||
@FXML
|
@FXML
|
||||||
private JFXButton romTFBtn;
|
private JFXButton romTFBtn;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private JFXButton updateBtn;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private JFXButton smmdbDownloadBtn;
|
private JFXButton smmdbDownloadBtn;
|
||||||
|
|
||||||
@ -147,11 +158,20 @@ public class MainWindowController {
|
|||||||
@FXML
|
@FXML
|
||||||
private JFXColorPicker colorPicker;
|
private JFXColorPicker colorPicker;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private JFXToggleButton cloudSyncToggleBtn;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private JFXToggleButton autoUpdateToggleBtn;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private JFXToggleButton fullscreenToggleBtn;
|
private JFXToggleButton fullscreenToggleBtn;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private JFXToggleButton cloudSyncToggleBtn;
|
private AnchorPane mainAnchorPane;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private AnchorPane gamesAnchorPane;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private AnchorPane settingsAnchorPane;
|
private AnchorPane settingsAnchorPane;
|
||||||
@ -160,10 +180,10 @@ public class MainWindowController {
|
|||||||
private AnchorPane smmdbAnchorPane;
|
private AnchorPane smmdbAnchorPane;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private AnchorPane gamesAnchorPane;
|
private ScrollPane mainScrollPane;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private ScrollPane scrollPaneMain;
|
private ScrollPane settingsScrollPane;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private ScrollPane smmdbScrollPane;
|
private ScrollPane smmdbScrollPane;
|
||||||
@ -180,6 +200,24 @@ public class MainWindowController {
|
|||||||
@FXML
|
@FXML
|
||||||
private Label helpLabel;
|
private Label helpLabel;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label cemu_UISettingsLbl;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label cemuDirectoryLbl;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label romDirectoryLbl;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label mainColorLbl;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label updateLbl;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label cemuSettingsLbl;
|
||||||
|
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private JFXTreeTableView<CourseTableDataType> courseTreeTable = new JFXTreeTableView<CourseTableDataType>();
|
private JFXTreeTableView<CourseTableDataType> courseTreeTable = new JFXTreeTableView<CourseTableDataType>();
|
||||||
@ -218,14 +256,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 = "047";
|
||||||
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 +307,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 +342,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();
|
||||||
@ -319,7 +369,7 @@ public class MainWindowController {
|
|||||||
menuTrue = true;
|
menuTrue = true;
|
||||||
}
|
}
|
||||||
if (settingsTrue) {
|
if (settingsTrue) {
|
||||||
settingsAnchorPane.setVisible(false);
|
settingsScrollPane.setVisible(false);
|
||||||
// setPath(tfPath.getText());
|
// setPath(tfPath.getText());
|
||||||
saveSettings();
|
saveSettings();
|
||||||
settingsTrue = false;
|
settingsTrue = false;
|
||||||
@ -334,9 +384,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 +394,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 +402,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 +423,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 +442,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 +501,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 +597,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 +605,7 @@ public class MainWindowController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
LOGGER.info("initializing Actions done!");
|
LOGGER.info("initializing Actions done!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -611,11 +647,11 @@ public class MainWindowController {
|
|||||||
smmdbTrue = false;
|
smmdbTrue = false;
|
||||||
}
|
}
|
||||||
if (settingsTrue) {
|
if (settingsTrue) {
|
||||||
settingsAnchorPane.setVisible(false);
|
settingsScrollPane.setVisible(false);
|
||||||
settingsTrue = false;
|
settingsTrue = false;
|
||||||
saveSettings();
|
saveSettings();
|
||||||
} else {
|
} else {
|
||||||
settingsAnchorPane.setVisible(true);
|
settingsScrollPane.setVisible(true);
|
||||||
settingsTrue = true;
|
settingsTrue = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -683,8 +719,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,12 +737,21 @@ 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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
void updateBtnAction(ActionEvent event) {
|
||||||
|
// TODO implement and call update method
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
void autoUpdateToggleBtnAction(ActionEvent event) {
|
||||||
|
// TODO implement auto update function
|
||||||
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
void smmdbDownloadBtnAction(ActionEvent event){
|
void smmdbDownloadBtnAction(ActionEvent event){
|
||||||
String downloadUrl = "http://smmdb.ddns.net/api/downloadcourse?id=" + id + "&type=zip";
|
String downloadUrl = "http://smmdb.ddns.net/api/downloadcourse?id=" + id + "&type=zip";
|
||||||
@ -814,9 +858,15 @@ public class MainWindowController {
|
|||||||
cloudSync = true;
|
cloudSync = true;
|
||||||
//TODO rework for other cloud services
|
//TODO rework for other cloud services
|
||||||
cloudService = "GoogleDrive";
|
cloudService = "GoogleDrive";
|
||||||
main.cloudController.initializeConnection(getCloudService(), getCemuPath());
|
if (main.cloudController.initializeConnection(getCloudService(), getCemuPath())) {
|
||||||
main.cloudController.sync(getCloudService(), getCemuPath());
|
main.cloudController.sync(getCloudService(), getCemuPath());
|
||||||
saveSettings();
|
saveSettings();
|
||||||
|
} else {
|
||||||
|
cloudSyncToggleBtn.setSelected(false);
|
||||||
|
// TODO show error message
|
||||||
|
}
|
||||||
|
|
||||||
|
// saveSettings();
|
||||||
dialog.close();
|
dialog.close();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -958,101 +1008,143 @@ 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());
|
|
||||||
VBox.setLayoutY(getyPos());
|
|
||||||
VBox.getChildren().addAll(gameTitleLabel,gameBtn);
|
|
||||||
gameTitleLabel.setMaxWidth(200);
|
|
||||||
gameTitleLabel.setPadding(new Insets(0,0,0,8));
|
|
||||||
gameTitleLabel.setFont(Font.font("System", FontWeight.BOLD, 14));
|
|
||||||
imageView.setImage(coverImage);
|
|
||||||
imageView.setFitHeight(300);
|
|
||||||
imageView.setFitWidth(200);
|
|
||||||
gameBtn.setGraphic(imageView);
|
|
||||||
gameBtn.setContextMenu(gameContextMenu);
|
|
||||||
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>() {
|
|
||||||
@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()
|
UIROMDataType uiROMElement = new UIROMDataType(VBox, gameTitleLabel, gameBtn, imageView, titleID, romPath);
|
||||||
for(int i=0; i<games.size(); i++){
|
|
||||||
if(games.get(i).getButton() == event.getSource()){
|
|
||||||
selectedUIDataIndex = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gameExecutePath = romPath;
|
uiROMElement.getLabel().setText(title);
|
||||||
selectedGameTitleID = titleID;
|
uiROMElement.getLabel().setMaxWidth(200);
|
||||||
selectedGameTitle = title;
|
uiROMElement.getLabel().setPadding(new Insets(0,0,0,8));
|
||||||
|
uiROMElement.getLabel().setFont(Font.font("System", FontWeight.BOLD, 14));
|
||||||
|
|
||||||
//underling selected Label
|
// i think we can do this locally and remove the imageView from the data type since it's used as graphic
|
||||||
lastGameLabel.setStyle("-fx-underline: false;");
|
uiROMElement.getImageView().setImage(coverImage);
|
||||||
games.get(selectedUIDataIndex).getLabel().setStyle("-fx-underline: true;");
|
uiROMElement.getImageView().setFitHeight(300);
|
||||||
lastGameLabel = games.get(selectedUIDataIndex).getLabel();
|
uiROMElement.getImageView().setFitWidth(200);
|
||||||
|
|
||||||
//setting last played
|
uiROMElement.getButton().setGraphic(uiROMElement.getImageView());
|
||||||
if(dbController.getLastPlayed(titleID).equals("") || dbController.getLastPlayed(titleID).equals(null)){
|
uiROMElement.getButton().setContextMenu(gameContextMenu);
|
||||||
lastTimePlayedBtn.setText("Last played, never");
|
uiROMElement.getButton().setStyle("-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.8), 10, 0, 0, 3); ");
|
||||||
totalPlaytimeBtn.setText(dbController.getTotalPlaytime(titleID)+ " min");
|
uiROMElement.getButton().addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
|
||||||
}else{
|
@Override
|
||||||
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int today = Integer.parseInt(dtf.format(LocalDate.now()).replaceAll("-", ""));
|
gameExecutePath = romPath;
|
||||||
int yesterday = Integer.parseInt(dtf.format(LocalDate.now().minusDays(1)).replaceAll("-", ""));
|
selectedGameTitleID = titleID;
|
||||||
int lastday = Integer.parseInt(dbController.getLastPlayed(titleID).replaceAll("-", ""));
|
selectedGameTitle = title;
|
||||||
|
|
||||||
if(today == lastday){
|
// underlining selected Label
|
||||||
lastTimePlayedBtn.setText("Last played, today");
|
lastGameLabel.setStyle("-fx-underline: false;");
|
||||||
}else if(yesterday == lastday){
|
games.get(selectedUIDataIndex).getLabel().setStyle("-fx-underline: true;");
|
||||||
lastTimePlayedBtn.setText("Last played, yesterday");
|
lastGameLabel = games.get(selectedUIDataIndex).getLabel();
|
||||||
}else{
|
|
||||||
lastTimePlayedBtn.setText("Last played, "+dbController.getLastPlayed(titleID));
|
|
||||||
}
|
|
||||||
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) {
|
// setting last played, if lastPlayed is empty game was never played before, else set correct date
|
||||||
playBtnSlideIn();
|
if (dbController.getLastPlayed(titleID).equals("") || dbController.getLastPlayed(titleID).equals(null)) {
|
||||||
}
|
lastTimePlayedBtn.setText("Last played, never");
|
||||||
if (menuTrue) {
|
totalPlaytimeBtn.setText(dbController.getTotalPlaytime(titleID) + " min");
|
||||||
|
} else {
|
||||||
|
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
|
|
||||||
|
int today = Integer.parseInt(dtf.format(LocalDate.now()).replaceAll("-", ""));
|
||||||
|
int yesterday = Integer.parseInt(dtf.format(LocalDate.now().minusDays(1)).replaceAll("-", ""));
|
||||||
|
int lastPlayedDay = Integer.parseInt(dbController.getLastPlayed(titleID).replaceAll("-", ""));
|
||||||
|
|
||||||
|
if (lastPlayedDay == today) {
|
||||||
|
lastTimePlayedBtn.setText("Last played, today");
|
||||||
|
} else if (lastPlayedDay == yesterday) {
|
||||||
|
lastTimePlayedBtn.setText("Last played, yesterday");
|
||||||
|
} else {
|
||||||
|
lastTimePlayedBtn.setText("Last played, " + dbController.getLastPlayed(titleID));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// setting total playtime, if total playtime > 60 minutes, format is "x hours x minutes" (x h x 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;
|
||||||
|
totalPlaytimeBtn.setText(hoursPlayed + " h " + minutesPlayed + " min");
|
||||||
|
} else {
|
||||||
|
totalPlaytimeBtn.setText(dbController.getTotalPlaytime(titleID) + " min");
|
||||||
|
}
|
||||||
|
|
||||||
|
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() {
|
||||||
|
double width;
|
||||||
|
|
||||||
|
if (mainAnchorPane.getWidth() < 10) {
|
||||||
|
width = mainAnchorPane.getPrefWidth();
|
||||||
|
} else {
|
||||||
|
width = mainAnchorPane.getWidth();
|
||||||
|
}
|
||||||
|
playBtn.setLayoutX((width/2)-50);
|
||||||
|
totalPlaytimeBtn.setLayoutX((width/2)-50-20.5-100);
|
||||||
|
lastTimePlayedBtn.setLayoutX((width/2)+50+20.5);
|
||||||
|
}
|
||||||
|
|
||||||
private void addCourseDescription(SmmdbApiDataType course) {
|
private void addCourseDescription(SmmdbApiDataType course) {
|
||||||
String courseTheme;
|
String courseTheme;
|
||||||
String gameStyle;
|
String gameStyle;
|
||||||
@ -1173,19 +1265,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 +1289,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);
|
||||||
@ -1222,6 +1320,7 @@ public class MainWindowController {
|
|||||||
playBtn.setStyle("-fx-text-fill: WHITE; -fx-font-family: Roboto Medium;");
|
playBtn.setStyle("-fx-text-fill: WHITE; -fx-font-family: Roboto Medium;");
|
||||||
cemuTFBtn.setStyle(btnStyleWhite);
|
cemuTFBtn.setStyle(btnStyleWhite);
|
||||||
romTFBtn.setStyle(btnStyleWhite);
|
romTFBtn.setStyle(btnStyleWhite);
|
||||||
|
updateBtn.setStyle(btnStyleWhite);
|
||||||
smmdbDownloadBtn.setStyle(btnStyleWhite);
|
smmdbDownloadBtn.setStyle(btnStyleWhite);
|
||||||
playBtn.setStyle(btnStyleWhite);
|
playBtn.setStyle(btnStyleWhite);
|
||||||
|
|
||||||
@ -1243,6 +1342,7 @@ public class MainWindowController {
|
|||||||
playBtn.setStyle("-fx-text-fill: BLACK; -fx-font-family: Roboto Medium;");
|
playBtn.setStyle("-fx-text-fill: BLACK; -fx-font-family: Roboto Medium;");
|
||||||
cemuTFBtn.setStyle(btnStyleBlack);
|
cemuTFBtn.setStyle(btnStyleBlack);
|
||||||
romTFBtn.setStyle(btnStyleBlack);
|
romTFBtn.setStyle(btnStyleBlack);
|
||||||
|
updateBtn.setStyle(btnStyleBlack);
|
||||||
smmdbDownloadBtn.setStyle(btnStyleBlack);
|
smmdbDownloadBtn.setStyle(btnStyleBlack);
|
||||||
playBtn.setStyle(btnStyleBlack);
|
playBtn.setStyle(btnStyleBlack);
|
||||||
|
|
||||||
@ -1275,6 +1375,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 +1454,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 +1559,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 +1682,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;
|
||||||
@ -35,7 +56,7 @@ import com.google.api.services.drive.model.FileList;
|
|||||||
public class GoogleDriveController {
|
public class GoogleDriveController {
|
||||||
|
|
||||||
Drive service;
|
Drive service;
|
||||||
private String cemuDirectory;
|
private String saveDirectory;
|
||||||
private String folderID;
|
private String folderID;
|
||||||
private ArrayList<java.io.File> localSavegames = new ArrayList<>();
|
private ArrayList<java.io.File> localSavegames = new ArrayList<>();
|
||||||
private ArrayList<File> cloudSavegames = new ArrayList<>();
|
private ArrayList<File> cloudSavegames = new ArrayList<>();
|
||||||
@ -43,7 +64,7 @@ public class GoogleDriveController {
|
|||||||
private ArrayList<String> cloudSavegamesName = new ArrayList<>();
|
private ArrayList<String> cloudSavegamesName = new ArrayList<>();
|
||||||
private static final Logger LOGGER = LogManager.getLogger(GoogleDriveController.class.getName());
|
private static final Logger LOGGER = LogManager.getLogger(GoogleDriveController.class.getName());
|
||||||
|
|
||||||
private final String APPLICATION_NAME ="cemu_Ui Drive API Controller";
|
private final String APPLICATION_NAME ="cemu_Ui Drive API Controller"; //TODO add Google
|
||||||
|
|
||||||
//Directory to store user credentials for this application
|
//Directory to store user credentials for this application
|
||||||
private final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".credentials/cemu_UI_credential");
|
private final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".credentials/cemu_UI_credential");
|
||||||
@ -83,10 +104,10 @@ public class GoogleDriveController {
|
|||||||
InputStream in = getClass().getClassLoader().getResourceAsStream("resources/client_secret.json");
|
InputStream in = getClass().getClassLoader().getResourceAsStream("resources/client_secret.json");
|
||||||
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
|
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
|
||||||
|
|
||||||
|
//FIXME Linux fails to open a new browser window, application crashes, maybe a kde only bug
|
||||||
// Build flow and trigger user authorization request.
|
// Build flow and trigger user authorization request.
|
||||||
GoogleAuthorizationCodeFlow flow =
|
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
|
||||||
new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
|
.setDataStoreFactory(DATA_STORE_FACTORY)
|
||||||
.setDataStoreFactory(DATA_STORE_FACTORY)
|
|
||||||
.setAccessType("offline")
|
.setAccessType("offline")
|
||||||
.build();
|
.build();
|
||||||
Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
|
Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
|
||||||
@ -108,8 +129,18 @@ public class GoogleDriveController {
|
|||||||
|
|
||||||
|
|
||||||
public void main(String cemuDirectory) throws IOException {
|
public void main(String cemuDirectory) throws IOException {
|
||||||
|
java.io.File dir = new java.io.File(cemuDirectory + "/mlc01/usr/save");
|
||||||
|
|
||||||
service = getDriveService();
|
service = getDriveService();
|
||||||
this.cemuDirectory = cemuDirectory;
|
|
||||||
|
// cemu >= 1.11 uses /mlc01/usr/save/... instead of /mlc01/emulatorSave/...
|
||||||
|
if (dir.exists()) {
|
||||||
|
LOGGER.info("using new save path");
|
||||||
|
saveDirectory = cemuDirectory + "/mlc01/usr/save";
|
||||||
|
} else {
|
||||||
|
LOGGER.info("using old save path");
|
||||||
|
saveDirectory = cemuDirectory + "/mlc01/emulatorSave";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sync(String cemuDirectory) throws IOException {
|
public void sync(String cemuDirectory) throws IOException {
|
||||||
@ -188,7 +219,7 @@ public class GoogleDriveController {
|
|||||||
|
|
||||||
//reading all local savegames
|
//reading all local savegames
|
||||||
private void getLocalSavegames() throws IOException {
|
private void getLocalSavegames() throws IOException {
|
||||||
java.io.File dir = new java.io.File(cemuDirectory+"/mlc01/emulatorSave");
|
java.io.File dir = new java.io.File(saveDirectory);
|
||||||
String[] extensions = new String[] { "dat","sav","bin" };
|
String[] extensions = new String[] { "dat","sav","bin" };
|
||||||
localSavegames.removeAll(localSavegames);
|
localSavegames.removeAll(localSavegames);
|
||||||
localSavegamesName.removeAll(localSavegamesName);
|
localSavegamesName.removeAll(localSavegamesName);
|
||||||
@ -242,17 +273,17 @@ public class GoogleDriveController {
|
|||||||
//download a file from the cloud to the local savegames folder
|
//download a file from the cloud to the local savegames folder
|
||||||
private void downloadFile(File downloadFile) throws IOException{
|
private void downloadFile(File downloadFile) throws IOException{
|
||||||
LOGGER.info("downloading "+downloadFile.getName()+" ...");
|
LOGGER.info("downloading "+downloadFile.getName()+" ...");
|
||||||
java.io.File directory = new java.io.File(cemuDirectory+"/mlc01/emulatorSave/"+ downloadFile.getName().substring(0,8));
|
java.io.File directory = new java.io.File(saveDirectory + "/" + downloadFile.getName().substring(0,8));
|
||||||
String file = downloadFile.getName().substring(9,downloadFile.getName().length());
|
String file = downloadFile.getName().substring(9,downloadFile.getName().length());
|
||||||
if(!directory.exists()) {
|
if(!directory.exists()) {
|
||||||
LOGGER.info("dir dosent exist");
|
LOGGER.info("dir dosent exist");
|
||||||
directory.mkdir();
|
directory.mkdir();
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputStream outputStream = new FileOutputStream(directory +"/"+ file);
|
OutputStream outputStream = new FileOutputStream(directory +"/"+ file);
|
||||||
service.files().get(downloadFile.getId()).executeMediaAndDownloadTo(outputStream);
|
service.files().get(downloadFile.getId()).executeMediaAndDownloadTo(outputStream);
|
||||||
outputStream.close();
|
outputStream.close();
|
||||||
LOGGER.info("download successfull, File ID: " + file); //TODO add FileID
|
LOGGER.info("download successfull, File ID: " + file); //TODO add FileID
|
||||||
}
|
}
|
||||||
|
|
||||||
//update a file in the cloud, by deleting the old one and uploading an new with the same id
|
//update a file in the cloud, by deleting the old one and uploading an new with the same id
|
||||||
|
@ -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;
|
||||||
@ -17,6 +35,9 @@ public class CourseTableDataType extends RecursiveTreeObject<CourseTableDataType
|
|||||||
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.
BIN
src/libraries/commons-codec-1.11.jar
Normal file
BIN
src/libraries/commons-codec-1.11.jar
Normal file
Binary file not shown.
Binary file not shown.
BIN
src/libraries/commons-io-2.6.jar
Normal file
BIN
src/libraries/commons-io-2.6.jar
Normal file
Binary file not shown.
BIN
src/libraries/commons-logging-1.1.1.jar
Normal file
BIN
src/libraries/commons-logging-1.1.1.jar
Normal file
Binary file not shown.
Binary file not shown.
BIN
src/libraries/google_api_libraries/google-api-client-1.23.0.jar
Normal file
BIN
src/libraries/google_api_libraries/google-api-client-1.23.0.jar
Normal file
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.
BIN
src/libraries/google_api_libraries/jackson-core-2.9.2.jar
Normal file
BIN
src/libraries/google_api_libraries/jackson-core-2.9.2.jar
Normal file
Binary file not shown.
BIN
src/libraries/google_api_libraries/javax.servlet-api-4.0.0.jar
Normal file
BIN
src/libraries/google_api_libraries/javax.servlet-api-4.0.0.jar
Normal file
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.
Reference in New Issue
Block a user