added FilmDetailView
* implemented the PosterMode basics * added some new 48dp icons
|
@ -1,43 +1,198 @@
|
||||||
package kellerkinder.HomeFlix.application;
|
package kellerkinder.HomeFlix.application;
|
||||||
|
|
||||||
|
import java.awt.Desktop;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import com.jfoenix.controls.JFXButton;
|
import com.jfoenix.controls.JFXButton;
|
||||||
|
|
||||||
|
import javafx.animation.FadeTransition;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
import javafx.scene.layout.AnchorPane;
|
import javafx.scene.layout.AnchorPane;
|
||||||
import javafx.scene.text.Text;
|
import javafx.scene.text.Text;
|
||||||
|
import javafx.util.Duration;
|
||||||
|
import kellerkinder.HomeFlix.controller.DBController;
|
||||||
|
import kellerkinder.HomeFlix.controller.XMLController;
|
||||||
|
|
||||||
public class FilmDetailView {
|
public class FilmDetailView {
|
||||||
|
|
||||||
@FXML private AnchorPane filmDVPane;
|
@FXML private AnchorPane filmDVPane;
|
||||||
|
|
||||||
@FXML private Label lblTitle;
|
@FXML private Label lblTitle;
|
||||||
@FXML private Label lblYear;
|
@FXML private Label lblYear;
|
||||||
@FXML private Label lblScore;
|
@FXML private Label lblScore;
|
||||||
|
|
||||||
@FXML private JFXButton btnWhishlist;
|
@FXML private Label lblCrew;
|
||||||
|
@FXML private Label lblDirectors;
|
||||||
|
@FXML private Label lblDirectorsInfo;
|
||||||
|
@FXML private Label lblWriters;
|
||||||
|
@FXML private Label lblWritersInfo;
|
||||||
|
@FXML private Label lblActors;
|
||||||
|
@FXML private Label lblActorsInfo;
|
||||||
|
|
||||||
|
@FXML private Label lblInfo;
|
||||||
|
@FXML private Label lblRuntimeInfo;
|
||||||
|
@FXML private Label lblRuntime;
|
||||||
|
@FXML private Label lblLanguageInfo;
|
||||||
|
@FXML private Label lblLanguage;
|
||||||
|
@FXML private Label lblRevenueInfo;
|
||||||
|
@FXML private Label lblRevenue;
|
||||||
|
@FXML private Label lblRatingInfo;
|
||||||
|
@FXML private Label lblRating;
|
||||||
|
|
||||||
|
@FXML private JFXButton btnWishlist;
|
||||||
@FXML private JFXButton btnFavourite;
|
@FXML private JFXButton btnFavourite;
|
||||||
|
@FXML private JFXButton btnHide;
|
||||||
|
@FXML private JFXButton btnPlay;
|
||||||
|
@FXML private JFXButton btnDirectory;
|
||||||
|
|
||||||
|
@FXML private ImageView wishListIcon;
|
||||||
|
@FXML private ImageView favoriteIcon;
|
||||||
|
@FXML private ImageView imgPoster;
|
||||||
|
|
||||||
@FXML private Text textPlot;
|
@FXML private Text textPlot;
|
||||||
|
|
||||||
public void initialize() {
|
private DBController dbController;
|
||||||
System.out.println("init nested controller");
|
private static final Logger LOGGER = LogManager.getLogger(FilmDetailView.class.getName());
|
||||||
filmDVPane.setStyle("-fx-background-color: rgba(89,89,89,0.9);");
|
private String currentStreamURL;
|
||||||
btnWhishlist.setGraphic(new ImageView(new Image("icons/ic_play_arrow_black_18dp_1x.png")));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void foo() {
|
public void initialize() {
|
||||||
System.out.println("test");
|
dbController = DBController.getInstance();
|
||||||
|
filmDVPane.setStyle("-fx-background-color: rgba(89,89,89,0.9);");
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void btnWhishlistAction() {
|
private void btnWishlistAction() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void btnFavouriteAction() {
|
private void btnFavouriteAction() {
|
||||||
|
dbController.toggleFavoriteState(currentStreamURL);
|
||||||
|
|
||||||
|
// update the favorite icon
|
||||||
|
if(dbController.getFavoriteState(currentStreamURL) == 1) {
|
||||||
|
favoriteIcon.setImage(new Image("icons/baseline_favorite_black_48dp.png"));
|
||||||
|
} else {
|
||||||
|
favoriteIcon.setImage(new Image("icons/baseline_favorite_border_black_48dp.png"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void btnHideAction() {
|
||||||
|
hidePane();
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void btnPlayAction() {
|
||||||
|
playFilm();
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void btnDirectoryAction() {
|
||||||
|
File dest = new File(currentStreamURL).getParentFile();
|
||||||
|
|
||||||
|
if (!System.getProperty("os.name").contains("Linux")) {
|
||||||
|
try {
|
||||||
|
Desktop.getDesktop().open(dest);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set the cached data of a stream to the FilmDetailView
|
||||||
|
* @param streamURL URL of the stream
|
||||||
|
*/
|
||||||
|
public void setFilm(String streamURL) {
|
||||||
|
currentStreamURL = streamURL;
|
||||||
|
String[] cacheInfo = dbController.readCache(streamURL); // get the cache data from the database
|
||||||
|
|
||||||
|
// add the cache data to the GUI
|
||||||
|
lblTitle.setText(cacheInfo[0]);
|
||||||
|
lblYear.setText("(" + cacheInfo[1] + ")");
|
||||||
|
lblScore.setText(XMLController.getLocalBundle().getString("score") + ": " + cacheInfo[15] + "%");
|
||||||
|
|
||||||
|
textPlot.setText(cacheInfo[11]);
|
||||||
|
|
||||||
|
lblDirectors.setText(cacheInfo[8]);
|
||||||
|
lblWriters.setText(cacheInfo[9]);
|
||||||
|
lblActors.setText(cacheInfo[10]);
|
||||||
|
|
||||||
|
lblRuntime.setText(cacheInfo[6]);
|
||||||
|
lblLanguage.setText(cacheInfo[12]);
|
||||||
|
lblRevenue.setText(cacheInfo[18]);
|
||||||
|
lblRating.setText(cacheInfo[2]);
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (new File(cacheInfo[20]).isFile()) {
|
||||||
|
imgPoster.setImage(new Image(new File(cacheInfo[20]).toURI().toString()));
|
||||||
|
} else {
|
||||||
|
imgPoster.setImage(new Image(cacheInfo[20]));
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
imgPoster.setImage(new Image("icons/Homeflix_Poster.png"));
|
||||||
|
LOGGER.error("No Poster found, useing default.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// set the favorite correct icon
|
||||||
|
if(dbController.getFavoriteState(streamURL) == 1) {
|
||||||
|
favoriteIcon.setImage(new Image("icons/baseline_favorite_black_48dp.png"));
|
||||||
|
} else {
|
||||||
|
favoriteIcon.setImage(new Image("icons/baseline_favorite_border_black_48dp.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* update the text of all static GUI elements of FilmDeatilView
|
||||||
|
*/
|
||||||
|
public void updateGUILocal() {
|
||||||
|
lblCrew.setText(XMLController.getLocalBundle().getString("crew"));
|
||||||
|
lblDirectorsInfo.setText(XMLController.getLocalBundle().getString("directors"));
|
||||||
|
lblWritersInfo.setText(XMLController.getLocalBundle().getString("writers"));
|
||||||
|
lblActorsInfo.setText(XMLController.getLocalBundle().getString("actors"));
|
||||||
|
|
||||||
|
lblInfo.setText(XMLController.getLocalBundle().getString("info"));
|
||||||
|
lblRuntimeInfo.setText(XMLController.getLocalBundle().getString("runtime"));
|
||||||
|
lblLanguageInfo.setText(XMLController.getLocalBundle().getString("language"));
|
||||||
|
lblRevenueInfo.setText(XMLController.getLocalBundle().getString("boxOffice"));
|
||||||
|
lblRatingInfo.setText(XMLController.getLocalBundle().getString("rated"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* show the FilmDVpane
|
||||||
|
*/
|
||||||
|
public void showPane() {
|
||||||
|
filmDVPane.setVisible(true);
|
||||||
|
FadeTransition fadeIn = new FadeTransition(Duration.millis(300), filmDVPane);
|
||||||
|
fadeIn.setFromValue(0.3);
|
||||||
|
fadeIn.setToValue(1.0);
|
||||||
|
fadeIn.play();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hide the FilmDVpane
|
||||||
|
*/
|
||||||
|
private void hidePane() {
|
||||||
|
FadeTransition fadeOut = new FadeTransition(Duration.millis(200), filmDVPane);
|
||||||
|
fadeOut.setFromValue(1.0);
|
||||||
|
fadeOut.setToValue(0.3);
|
||||||
|
fadeOut.play();
|
||||||
|
|
||||||
|
filmDVPane.setVisible(false);
|
||||||
|
|
||||||
|
MainWindowController.getInstance().disableBlur(); // disable blur
|
||||||
|
}
|
||||||
|
|
||||||
|
private void playFilm() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -168,6 +168,7 @@ public class MainWindowController {
|
||||||
// FilmDetailView
|
// FilmDetailView
|
||||||
@FXML private FilmDetailView filmDetailViewController;
|
@FXML private FilmDetailView filmDetailViewController;
|
||||||
|
|
||||||
|
private static MainWindowController instance = null;
|
||||||
private DBController dbController;
|
private DBController dbController;
|
||||||
private UpdateController updateController;
|
private UpdateController updateController;
|
||||||
private XMLController xmlController;
|
private XMLController xmlController;
|
||||||
|
@ -195,7 +196,7 @@ public class MainWindowController {
|
||||||
private ObservableList<PosterModeElement> posterEmenents = FXCollections.observableArrayList();
|
private ObservableList<PosterModeElement> posterEmenents = FXCollections.observableArrayList();
|
||||||
private static ObservableList<SourceDataType> sourcesList = FXCollections.observableArrayList();
|
private static ObservableList<SourceDataType> sourcesList = FXCollections.observableArrayList();
|
||||||
private MenuItem like = new MenuItem("like");
|
private MenuItem like = new MenuItem("like");
|
||||||
private MenuItem dislike = new MenuItem("dislike"); // TODO one option (like or dislike)
|
private MenuItem dislike = new MenuItem("dislike");
|
||||||
private ContextMenu menu = new ContextMenu(like, dislike);
|
private ContextMenu menu = new ContextMenu(like, dislike);
|
||||||
private LocalDate lastValidCache = LocalDate.now().minusDays(30); // current date - 30 days is the last valid cache date
|
private LocalDate lastValidCache = LocalDate.now().minusDays(30); // current date - 30 days is the last valid cache date
|
||||||
|
|
||||||
|
@ -203,8 +204,18 @@ public class MainWindowController {
|
||||||
// the constructor
|
// the constructor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static MainWindowController getInstance() {
|
||||||
|
if (instance == null) {
|
||||||
|
LOGGER.error("There was a fatal error: instance is null!");
|
||||||
|
instance = new MainWindowController();
|
||||||
|
}
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
|
instance = this;
|
||||||
xmlController = new XMLController();
|
xmlController = new XMLController();
|
||||||
dbController = DBController.getInstance();
|
dbController = DBController.getInstance();
|
||||||
}
|
}
|
||||||
|
@ -226,7 +237,7 @@ public class MainWindowController {
|
||||||
// load sources list in gui
|
// load sources list in gui
|
||||||
addSourceToTable();
|
addSourceToTable();
|
||||||
|
|
||||||
posterModeStartup(); // TODO testing DO NOT USE THIS!!
|
// posterModeStartup(); // TODO testing DO NOT USE THIS!!
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize general UI elements
|
// Initialize general UI elements
|
||||||
|
@ -254,11 +265,11 @@ public class MainWindowController {
|
||||||
setLocalUI();
|
setLocalUI();
|
||||||
applyColor();
|
applyColor();
|
||||||
|
|
||||||
BoxBlur boxBlur = new BoxBlur();
|
// BoxBlur boxBlur = new BoxBlur();
|
||||||
boxBlur.setWidth(9);
|
// boxBlur.setWidth(9);
|
||||||
boxBlur.setHeight(7);
|
// boxBlur.setHeight(7);
|
||||||
boxBlur.setIterations(3);
|
// boxBlur.setIterations(3);
|
||||||
posterModeFlowPane.setEffect(boxBlur);
|
// posterModeFlowPane.setEffect(boxBlur);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -508,7 +519,6 @@ public class MainWindowController {
|
||||||
@FXML
|
@FXML
|
||||||
private void returnBtnclicked() {
|
private void returnBtnclicked() {
|
||||||
filmsTreeTable.getSelectionModel().select(last);
|
filmsTreeTable.getSelectionModel().select(last);
|
||||||
filmDetailViewController.foo(); // TODO
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
|
@ -783,6 +793,9 @@ public class MainWindowController {
|
||||||
languageChoisBox.getSelectionModel().select(0);
|
languageChoisBox.getSelectionModel().select(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filmDetailViewController.updateGUILocal();
|
||||||
|
|
||||||
aboutBtn.setText(XMLController.getLocalBundle().getString("info"));
|
aboutBtn.setText(XMLController.getLocalBundle().getString("info"));
|
||||||
settingsBtn.setText(XMLController.getLocalBundle().getString("settings"));
|
settingsBtn.setText(XMLController.getLocalBundle().getString("settings"));
|
||||||
searchTextField.setPromptText(XMLController.getLocalBundle().getString("tfSearch"));
|
searchTextField.setPromptText(XMLController.getLocalBundle().getString("tfSearch"));
|
||||||
|
@ -818,8 +831,8 @@ public class MainWindowController {
|
||||||
nameText[5] = new Text(XMLController.getLocalBundle().getString("episode") + ": ");
|
nameText[5] = new Text(XMLController.getLocalBundle().getString("episode") + ": ");
|
||||||
nameText[6] = new Text(XMLController.getLocalBundle().getString("runtime") + ": ");
|
nameText[6] = new Text(XMLController.getLocalBundle().getString("runtime") + ": ");
|
||||||
nameText[7] = new Text(XMLController.getLocalBundle().getString("genre") + ": ");
|
nameText[7] = new Text(XMLController.getLocalBundle().getString("genre") + ": ");
|
||||||
nameText[8] = new Text(XMLController.getLocalBundle().getString("director") + ": ");
|
nameText[8] = new Text(XMLController.getLocalBundle().getString("directors") + ": ");
|
||||||
nameText[9] = new Text(XMLController.getLocalBundle().getString("writer") + ": ");
|
nameText[9] = new Text(XMLController.getLocalBundle().getString("writers") + ": ");
|
||||||
nameText[10] = new Text(XMLController.getLocalBundle().getString("actors") + ": ");
|
nameText[10] = new Text(XMLController.getLocalBundle().getString("actors") + ": ");
|
||||||
nameText[11] = new Text(XMLController.getLocalBundle().getString("plot") + ": ");
|
nameText[11] = new Text(XMLController.getLocalBundle().getString("plot") + ": ");
|
||||||
nameText[12] = new Text(XMLController.getLocalBundle().getString("language") + ": ");
|
nameText[12] = new Text(XMLController.getLocalBundle().getString("language") + ": ");
|
||||||
|
@ -916,6 +929,7 @@ public class MainWindowController {
|
||||||
executor.shutdown();
|
executor.shutdown();
|
||||||
|
|
||||||
// TODO show loading screen
|
// TODO show loading screen
|
||||||
|
|
||||||
// we might need this as otherwise it would load before all tasks are finished
|
// we might need this as otherwise it would load before all tasks are finished
|
||||||
try {
|
try {
|
||||||
executor.awaitTermination(1, TimeUnit.MINUTES);
|
executor.awaitTermination(1, TimeUnit.MINUTES);
|
||||||
|
@ -936,12 +950,42 @@ public class MainWindowController {
|
||||||
posterEmenents.clear();
|
posterEmenents.clear();
|
||||||
posterEmenents = dbController.getPosterElementsList(); // returns a list of all PosterElements stored in the database
|
posterEmenents = dbController.getPosterElementsList(); // returns a list of all PosterElements stored in the database
|
||||||
|
|
||||||
|
// add button onAction
|
||||||
|
for (PosterModeElement element : posterEmenents) {
|
||||||
|
element.getButton().addEventHandler(MouseEvent.MOUSE_CLICKED, (event) -> {
|
||||||
|
enableBlur(); // blur the FlowPane
|
||||||
|
|
||||||
|
// if the selected element is a file it's a film, else a series
|
||||||
|
if (new File(element.getStreamURL()).isFile()) {
|
||||||
|
filmDetailViewController.setFilm(element.getStreamURL());
|
||||||
|
filmDetailViewController.showPane();
|
||||||
|
} else {
|
||||||
|
filmDetailViewController.setFilm(element.getStreamURL());
|
||||||
|
filmDetailViewController.showPane();
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("selected: " + element.getStreamURL());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
posterModeFlowPane.getChildren().clear(); // remove all GUIElements from the posterModeFlowPane
|
posterModeFlowPane.getChildren().clear(); // remove all GUIElements from the posterModeFlowPane
|
||||||
posterModeFlowPane.getChildren().addAll(posterEmenents); // add all films/series as new GUIElements to the posterModeFlowPane
|
posterModeFlowPane.getChildren().addAll(posterEmenents); // add all films/series as new GUIElements to the posterModeFlowPane
|
||||||
|
|
||||||
System.out.println("added gui elements");
|
System.out.println("added gui elements");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void enableBlur() {
|
||||||
|
BoxBlur boxBlur = new BoxBlur();
|
||||||
|
boxBlur.setWidth(9);
|
||||||
|
boxBlur.setHeight(7);
|
||||||
|
boxBlur.setIterations(3);
|
||||||
|
posterModeFlowPane.setEffect(boxBlur);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disableBlur() {
|
||||||
|
posterModeFlowPane.setEffect(null);
|
||||||
|
}
|
||||||
|
|
||||||
// getter and setter
|
// getter and setter
|
||||||
|
|
||||||
public FilmTabelDataType getCurrentTableFilm() {
|
public FilmTabelDataType getCurrentTableFilm() {
|
||||||
|
|
|
@ -353,6 +353,50 @@ public class DBController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the favorite state for a stream
|
||||||
|
* @param streamURL URL of the stream
|
||||||
|
* @return 0 if it's not a favorite, else 1
|
||||||
|
*/
|
||||||
|
public int getFavoriteState(String streamURL) {
|
||||||
|
int favoriteState = 0;
|
||||||
|
PreparedStatement ps;
|
||||||
|
try {
|
||||||
|
ps = connection.prepareStatement("SELECT favorite FROM films WHERE streamUrl = ?");
|
||||||
|
ps.setString(1, streamURL);
|
||||||
|
ResultSet rs = ps.executeQuery();
|
||||||
|
|
||||||
|
while (rs.next()) {
|
||||||
|
favoriteState = rs.getInt("favorite");
|
||||||
|
}
|
||||||
|
|
||||||
|
rs.close();
|
||||||
|
ps.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error("Ups! an error occured!", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return favoriteState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void toggleFavoriteState(String streamURL) {
|
||||||
|
PreparedStatement ps;
|
||||||
|
try {
|
||||||
|
if (getFavoriteState(streamURL) == 0) {
|
||||||
|
ps = connection.prepareStatement("UPDATE films SET favorite = 1 WHERE streamUrl = ?");
|
||||||
|
} else {
|
||||||
|
ps = connection.prepareStatement("UPDATE films SET favorite = 0 WHERE streamUrl = ?");
|
||||||
|
}
|
||||||
|
|
||||||
|
ps.setString(1, streamURL);
|
||||||
|
ps.executeUpdate();
|
||||||
|
connection.commit();
|
||||||
|
ps.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error("Ups! an error occured!", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* update the database entry for the given film, favorite = 0
|
* update the database entry for the given film, favorite = 0
|
||||||
* @param streamUrl URL of the film
|
* @param streamUrl URL of the film
|
||||||
|
|
|
@ -2,16 +2,18 @@
|
||||||
|
|
||||||
<?import com.jfoenix.controls.JFXButton?>
|
<?import com.jfoenix.controls.JFXButton?>
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
|
<?import javafx.geometry.Rectangle2D?>
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<?import javafx.scene.image.Image?>
|
<?import javafx.scene.image.Image?>
|
||||||
<?import javafx.scene.image.ImageView?>
|
<?import javafx.scene.image.ImageView?>
|
||||||
<?import javafx.scene.layout.AnchorPane?>
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
<?import javafx.scene.layout.HBox?>
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
<?import javafx.scene.layout.VBox?>
|
||||||
<?import javafx.scene.text.Font?>
|
<?import javafx.scene.text.Font?>
|
||||||
<?import javafx.scene.text.Text?>
|
<?import javafx.scene.text.Text?>
|
||||||
<?import javafx.scene.text.TextFlow?>
|
<?import javafx.scene.text.TextFlow?>
|
||||||
|
|
||||||
<AnchorPane fx:id="filmDVPane" mouseTransparent="true" prefHeight="568.0" prefWidth="1130.0" style="-fx-background-color: #595959;" visible="false" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="kellerkinder.HomeFlix.application.FilmDetailView">
|
<AnchorPane fx:id="filmDVPane" prefHeight="568.0" prefWidth="1130.0" style="-fx-background-color: #595959;" visible="false" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="kellerkinder.HomeFlix.application.FilmDetailView">
|
||||||
<children>
|
<children>
|
||||||
<HBox layoutX="22.0" layoutY="21.0" prefWidth="808.0" spacing="10.0" AnchorPane.leftAnchor="22.0" AnchorPane.rightAnchor="300.0" AnchorPane.topAnchor="22.0">
|
<HBox layoutX="22.0" layoutY="21.0" prefWidth="808.0" spacing="10.0" AnchorPane.leftAnchor="22.0" AnchorPane.rightAnchor="300.0" AnchorPane.topAnchor="22.0">
|
||||||
<children>
|
<children>
|
||||||
|
@ -20,7 +22,7 @@
|
||||||
<Font name="System Bold" size="24.0" />
|
<Font name="System Bold" size="24.0" />
|
||||||
</font>
|
</font>
|
||||||
</Label>
|
</Label>
|
||||||
<Label fx:id="lblYear" maxHeight="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="29.0" prefWidth="71.0" text="(2018)" textFill="#ecebed">
|
<Label fx:id="lblYear" alignment="CENTER" maxHeight="-Infinity" minHeight="-Infinity" minWidth="71.0" prefHeight="29.0" text="(2018)" textFill="#ecebed">
|
||||||
<font>
|
<font>
|
||||||
<Font size="24.0" />
|
<Font size="24.0" />
|
||||||
</font>
|
</font>
|
||||||
|
@ -31,14 +33,31 @@
|
||||||
<children>
|
<children>
|
||||||
<HBox alignment="CENTER_LEFT">
|
<HBox alignment="CENTER_LEFT">
|
||||||
<children>
|
<children>
|
||||||
<Label fx:id="lblScore" text="Wertung: 80%" textFill="#ecebed" />
|
<Label fx:id="lblScore" text="Wertung: 80%" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font size="15.0" />
|
||||||
|
</font></Label>
|
||||||
</children>
|
</children>
|
||||||
<padding>
|
<padding>
|
||||||
<Insets right="20.0" />
|
<Insets right="20.0" />
|
||||||
</padding>
|
</padding>
|
||||||
</HBox>
|
</HBox>
|
||||||
<JFXButton fx:id="btnWhishlist" buttonType="RAISED" contentDisplay="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onAction="#btnWhishlistAction" prefHeight="40.0" prefWidth="40.0" style="-fx-background-color: #ffffff; -fx-background-radius: 40px;" />
|
<JFXButton fx:id="btnWishlist" buttonType="RAISED" contentDisplay="GRAPHIC_ONLY" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onAction="#btnWishlistAction" prefHeight="40.0" prefWidth="40.0" style="-fx-background-color: #ffffff; -fx-background-radius: 40px;" text="List">
|
||||||
<JFXButton fx:id="btnFavourite" buttonType="RAISED" contentDisplay="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onAction="#btnFavouriteAction" prefHeight="40.0" prefWidth="40.0" style="-fx-background-color: #ffffff; -fx-background-radius: 40px;" />
|
<graphic>
|
||||||
|
<ImageView fx:id="wishlistIcon" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../icons/baseline_list_black_48dp.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
</graphic></JFXButton>
|
||||||
|
<JFXButton fx:id="btnFavourite" buttonType="RAISED" contentDisplay="GRAPHIC_ONLY" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onAction="#btnFavouriteAction" prefHeight="40.0" prefWidth="40.0" style="-fx-background-color: #ffffff; -fx-background-radius: 40px;" text="Fav">
|
||||||
|
<graphic>
|
||||||
|
<ImageView fx:id="favoriteIcon" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../icons/baseline_favorite_border_black_48dp.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
</graphic></JFXButton>
|
||||||
</children>
|
</children>
|
||||||
</HBox>
|
</HBox>
|
||||||
<TextFlow layoutX="22.0" layoutY="150.0" lineSpacing="1.0" prefHeight="200.0" AnchorPane.leftAnchor="22.0" AnchorPane.rightAnchor="300.0" AnchorPane.topAnchor="130.0">
|
<TextFlow layoutX="22.0" layoutY="150.0" lineSpacing="1.0" prefHeight="200.0" AnchorPane.leftAnchor="22.0" AnchorPane.rightAnchor="300.0" AnchorPane.topAnchor="130.0">
|
||||||
|
@ -50,12 +69,152 @@
|
||||||
</Text>
|
</Text>
|
||||||
</children>
|
</children>
|
||||||
</TextFlow>
|
</TextFlow>
|
||||||
<ImageView fitHeight="400.0" fitWidth="267.0" layoutX="849.0" layoutY="14.0" pickOnBounds="true" preserveRatio="true" AnchorPane.rightAnchor="22.0" AnchorPane.topAnchor="22.0">
|
<Label fx:id="lblCrew" layoutX="31.0" layoutY="346.0" text="Haupt-Crew" textFill="#ecebed" AnchorPane.leftAnchor="22.0" AnchorPane.topAnchor="350.0">
|
||||||
|
<font>
|
||||||
|
<Font size="20.0" />
|
||||||
|
</font></Label>
|
||||||
|
<HBox layoutX="22.0" layoutY="372.0" spacing="30.0" AnchorPane.leftAnchor="22.0" AnchorPane.rightAnchor="300.0" AnchorPane.topAnchor="380.0">
|
||||||
|
<children>
|
||||||
|
<VBox spacing="3.0">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="lblDirectors" maxWidth="200.0" text="Rodney Rothman" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="15.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label fx:id="lblDirectorsInfo" text="Directors" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Label>
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
<VBox spacing="3.0">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="lblWriters" maxWidth="300.0" text="Rodney Rothman" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="15.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="lblWritersInfo" text="Writers" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
<VBox spacing="3.0">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="lblActors" maxWidth="300.0" text="Rodney Rothman" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="15.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="lblActorsInfo" text="Actors" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<Label fx:id="lblInfo" layoutX="22.0" layoutY="433.0" text="Info" textFill="#ecebed" AnchorPane.leftAnchor="22.0" AnchorPane.topAnchor="440.0">
|
||||||
|
<font>
|
||||||
|
<Font size="20.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<HBox layoutX="22.0" layoutY="464.0" spacing="30.0" AnchorPane.leftAnchor="22.0" AnchorPane.rightAnchor="300.0" AnchorPane.topAnchor="470.0">
|
||||||
|
<children>
|
||||||
|
<VBox spacing="3.0">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="lblRuntimeInfo" text="Runtime" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="15.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="lblRuntime" text="1h 52m" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
<VBox spacing="3.0">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="lblLanguageInfo" text="Original Language" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="15.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="lblLanguage" text="English" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
<VBox spacing="3.0">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="lblRevenueInfo" text="Revenue" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="15.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="lblRevenue" text="\$375,450,417.00" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
<VBox spacing="3.0">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="lblRatingInfo" text="Rating" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="15.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="lblRating" text="PG" textFill="#ecebed">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<JFXButton fx:id="btnHide" contentDisplay="GRAPHIC_ONLY" layoutX="537.0" layoutY="518.0" maxHeight="-Infinity" minWidth="-Infinity" onAction="#btnHideAction" prefHeight="32.0" style="-fx-background-color: transparent;" text="Hide" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="530.0" AnchorPane.rightAnchor="530.0">
|
||||||
|
<graphic>
|
||||||
|
<ImageView pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../icons/baseline_keyboard_arrow_down_white_48dp.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
</graphic>
|
||||||
|
</JFXButton>
|
||||||
|
<ImageView fx:id="imgPoster" fitHeight="400.0" fitWidth="267.0" layoutX="849.0" layoutY="14.0" pickOnBounds="true" preserveRatio="true" AnchorPane.rightAnchor="22.0" AnchorPane.topAnchor="22.0">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@../icons/spider-man.jpg" />
|
<Image url="@../icons/spider-man.jpg" />
|
||||||
</image>
|
</image>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
<Label layoutX="29.0" layoutY="338.0" text="Crew:" textFill="#ecebed" />
|
<JFXButton fx:id="btnPlay" buttonType="RAISED" contentDisplay="GRAPHIC_ONLY" layoutX="841.0" layoutY="448.0" maxHeight="-Infinity" onAction="#btnPlayAction" prefHeight="32.0" prefWidth="267.0" style="-fx-background-color: #ffffff;" text="Play" AnchorPane.rightAnchor="22.0" AnchorPane.topAnchor="448.0">
|
||||||
<JFXButton buttonType="RAISED" layoutX="1016.0" layoutY="514.0" prefWidth="100.0" style="-fx-background-color: #456789;" text="Play" />
|
<graphic>
|
||||||
|
<ImageView fitHeight="24.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../icons/baseline_play_arrow_black_48dp.png" />
|
||||||
|
</image>
|
||||||
|
<viewport>
|
||||||
|
<Rectangle2D />
|
||||||
|
</viewport>
|
||||||
|
</ImageView>
|
||||||
|
</graphic></JFXButton>
|
||||||
|
<JFXButton fx:id="btnDirectory" buttonType="RAISED" contentDisplay="GRAPHIC_ONLY" layoutX="841.0" layoutY="506.0" maxHeight="-Infinity" onAction="#btnDirectoryAction" prefHeight="32.0" prefWidth="267.0" style="-fx-background-color: #ffffff;" text="open Directory" AnchorPane.rightAnchor="22.0" AnchorPane.topAnchor="506.0">
|
||||||
|
<graphic>
|
||||||
|
<ImageView fitHeight="24.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../icons/baseline_folder_black_48dp.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
</graphic>
|
||||||
|
</JFXButton>
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
|
After Width: | Height: | Size: 429 B |
After Width: | Height: | Size: 652 B |
After Width: | Height: | Size: 194 B |
After Width: | Height: | Size: 223 B |
After Width: | Height: | Size: 224 B |
After Width: | Height: | Size: 110 B |
After Width: | Height: | Size: 199 B |
|
@ -43,8 +43,8 @@ season = Staffel
|
||||||
episode = Episode
|
episode = Episode
|
||||||
runtime = Laufzeit
|
runtime = Laufzeit
|
||||||
genre = Gener
|
genre = Gener
|
||||||
director = Regisseur
|
directors = Regisseur
|
||||||
writer = Autor
|
writers = Autoren
|
||||||
actors = Schauspieler
|
actors = Schauspieler
|
||||||
plot = Beschreibung
|
plot = Beschreibung
|
||||||
language = Original Sprache
|
language = Original Sprache
|
||||||
|
@ -60,3 +60,7 @@ website = Webseite
|
||||||
addSourceHeader = Neue Quelle hinzuf\u00FCgen
|
addSourceHeader = Neue Quelle hinzuf\u00FCgen
|
||||||
addSourceBody = HomeFlix konnte keine Quelle finden. \nFüge eine loakels Verzeichniss oder eine Sreaming Datei als neue Quelle hinzu.
|
addSourceBody = HomeFlix konnte keine Quelle finden. \nFüge eine loakels Verzeichniss oder eine Sreaming Datei als neue Quelle hinzu.
|
||||||
cancelBtnText = Abbrechen
|
cancelBtnText = Abbrechen
|
||||||
|
|
||||||
|
#DetailView
|
||||||
|
crew = Haupt-Crew
|
||||||
|
score = Benutzerbewertung
|
||||||
|
|
|
@ -41,10 +41,10 @@ rated = Rating
|
||||||
released = published on
|
released = published on
|
||||||
season = Season
|
season = Season
|
||||||
episode = Episode
|
episode = Episode
|
||||||
runtime = Duration
|
runtime = Runtime
|
||||||
genre = Gener
|
genre = Gener
|
||||||
director = Director
|
directors = Directors
|
||||||
writer = Writer
|
writers = Writers
|
||||||
actors = Actors
|
actors = Actors
|
||||||
plot = Plot
|
plot = Plot
|
||||||
language = Language
|
language = Language
|
||||||
|
@ -60,3 +60,7 @@ website = Website
|
||||||
addSourceHeader = add a new source
|
addSourceHeader = add a new source
|
||||||
addSourceBody = HomeFlix was not able to load a source. \nAdd a new local directory oa a streaming file as new source.
|
addSourceBody = HomeFlix was not able to load a source. \nAdd a new local directory oa a streaming file as new source.
|
||||||
cancelBtnText = cancel
|
cancelBtnText = cancel
|
||||||
|
|
||||||
|
#DetailView
|
||||||
|
crew = Featured Crew
|
||||||
|
score = User Score
|
||||||
|
|