added FilmDetailView
* implemented the PosterMode basics * added some new 48dp icons
| @ -1,43 +1,198 @@ | ||||
| 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 javafx.animation.FadeTransition; | ||||
| import javafx.fxml.FXML; | ||||
| import javafx.scene.control.Label; | ||||
| import javafx.scene.image.Image; | ||||
| import javafx.scene.image.ImageView; | ||||
| import javafx.scene.layout.AnchorPane; | ||||
| import javafx.scene.text.Text; | ||||
| import javafx.util.Duration; | ||||
| import kellerkinder.HomeFlix.controller.DBController; | ||||
| import kellerkinder.HomeFlix.controller.XMLController; | ||||
|  | ||||
| public class FilmDetailView { | ||||
| 	 | ||||
| 	@FXML private AnchorPane filmDVPane; | ||||
| 	 | ||||
| 	@FXML private Label lblTitle; | ||||
| 	@FXML private Label lblYear; | ||||
| 	@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 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; | ||||
| 	 | ||||
| 	public void initialize() { | ||||
| 		System.out.println("init nested controller"); | ||||
| 		filmDVPane.setStyle("-fx-background-color: rgba(89,89,89,0.9);"); | ||||
| 		btnWhishlist.setGraphic(new ImageView(new Image("icons/ic_play_arrow_black_18dp_1x.png"))); | ||||
| 	} | ||||
| 	private DBController dbController; | ||||
| 	private static final Logger LOGGER = LogManager.getLogger(FilmDetailView.class.getName()); | ||||
| 	private String currentStreamURL; | ||||
| 	 | ||||
| 	public void foo() { | ||||
| 		System.out.println("test"); | ||||
| 	public void initialize() { | ||||
| 		dbController = DBController.getInstance(); | ||||
| 		filmDVPane.setStyle("-fx-background-color: rgba(89,89,89,0.9);"); | ||||
| 	} | ||||
| 	 | ||||
| 	@FXML | ||||
| 	private void btnWhishlistAction() { | ||||
| 	private void btnWishlistAction() { | ||||
| 		 | ||||
| 	} | ||||
| 	 | ||||
| 	@FXML | ||||
| 	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 | ||||
| 	@FXML private FilmDetailView filmDetailViewController; | ||||
| 	 | ||||
| 	private static MainWindowController instance = null; | ||||
| 	private DBController dbController; | ||||
| 	private UpdateController updateController; | ||||
| 	private XMLController xmlController; | ||||
| @ -195,16 +196,26 @@ public class MainWindowController { | ||||
| 	private ObservableList<PosterModeElement> posterEmenents = FXCollections.observableArrayList(); | ||||
| 	private static ObservableList<SourceDataType> sourcesList = FXCollections.observableArrayList(); | ||||
| 	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 LocalDate lastValidCache = LocalDate.now().minusDays(30); // current date - 30 days is the last valid cache date | ||||
|  | ||||
| 	public MainWindowController() { | ||||
| 		// 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 | ||||
| 	public void initialize() { | ||||
| 		instance = this; | ||||
| 		xmlController = new XMLController(); | ||||
| 		dbController = DBController.getInstance(); | ||||
| 	} | ||||
| @ -226,7 +237,7 @@ public class MainWindowController { | ||||
| 		// load sources list in gui | ||||
| 		addSourceToTable(); | ||||
|  | ||||
| 		posterModeStartup(); // TODO testing DO NOT USE THIS!!	 | ||||
| //		posterModeStartup(); // TODO testing DO NOT USE THIS!!	 | ||||
| 	} | ||||
|  | ||||
| 	// Initialize general UI elements | ||||
| @ -254,11 +265,11 @@ public class MainWindowController { | ||||
| 		setLocalUI(); | ||||
| 		applyColor(); | ||||
| 		 | ||||
| 		BoxBlur boxBlur = new BoxBlur(); | ||||
| 		boxBlur.setWidth(9); | ||||
| 		boxBlur.setHeight(7); | ||||
| 		boxBlur.setIterations(3); | ||||
| 		posterModeFlowPane.setEffect(boxBlur); | ||||
| //		BoxBlur boxBlur = new BoxBlur(); | ||||
| //		boxBlur.setWidth(9); | ||||
| //		boxBlur.setHeight(7); | ||||
| //		boxBlur.setIterations(3); | ||||
| //		posterModeFlowPane.setEffect(boxBlur); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @ -491,7 +502,7 @@ public class MainWindowController { | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	 | ||||
| 	@FXML | ||||
| 	private void openfolderbtnclicked() { | ||||
| 		File dest = new File(getCurrentStreamUrl()).getParentFile(); | ||||
| @ -508,7 +519,6 @@ public class MainWindowController { | ||||
| 	@FXML | ||||
| 	private void returnBtnclicked() { | ||||
| 		filmsTreeTable.getSelectionModel().select(last); | ||||
| 		filmDetailViewController.foo(); // TODO | ||||
| 	} | ||||
|  | ||||
| 	@FXML | ||||
| @ -783,6 +793,9 @@ public class MainWindowController { | ||||
| 			languageChoisBox.getSelectionModel().select(0); | ||||
| 			break; | ||||
| 		} | ||||
| 		 | ||||
| 		filmDetailViewController.updateGUILocal(); | ||||
| 		 | ||||
| 		aboutBtn.setText(XMLController.getLocalBundle().getString("info")); | ||||
| 		settingsBtn.setText(XMLController.getLocalBundle().getString("settings")); | ||||
| 		searchTextField.setPromptText(XMLController.getLocalBundle().getString("tfSearch")); | ||||
| @ -818,8 +831,8 @@ public class MainWindowController { | ||||
| 		nameText[5] = new Text(XMLController.getLocalBundle().getString("episode") + ": "); | ||||
| 		nameText[6] = new Text(XMLController.getLocalBundle().getString("runtime") + ": "); | ||||
| 		nameText[7] = new Text(XMLController.getLocalBundle().getString("genre") + ": "); | ||||
| 		nameText[8] = new Text(XMLController.getLocalBundle().getString("director") + ": "); | ||||
| 		nameText[9] = new Text(XMLController.getLocalBundle().getString("writer") + ": "); | ||||
| 		nameText[8] = new Text(XMLController.getLocalBundle().getString("directors") + ": "); | ||||
| 		nameText[9] = new Text(XMLController.getLocalBundle().getString("writers") + ": "); | ||||
| 		nameText[10] = new Text(XMLController.getLocalBundle().getString("actors") + ": "); | ||||
| 		nameText[11] = new Text(XMLController.getLocalBundle().getString("plot") + ": "); | ||||
| 		nameText[12] = new Text(XMLController.getLocalBundle().getString("language") + ": "); | ||||
| @ -916,6 +929,7 @@ public class MainWindowController { | ||||
| 		executor.shutdown(); | ||||
|  | ||||
| 		// TODO show loading screen | ||||
| 		 | ||||
| 		// we might need this as otherwise it would load before all tasks are finished | ||||
| 		try { | ||||
| 			executor.awaitTermination(1, TimeUnit.MINUTES); | ||||
| @ -936,11 +950,41 @@ public class MainWindowController { | ||||
| 		posterEmenents.clear(); | ||||
| 		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().addAll(posterEmenents); // add all films/series as new GUIElements to the posterModeFlowPane | ||||
| 		 | ||||
| 		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 | ||||
|  | ||||
|  | ||||
| @ -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 | ||||
| 	 * @param streamUrl URL of the film | ||||
|  | ||||
| @ -2,16 +2,18 @@ | ||||
|  | ||||
| <?import com.jfoenix.controls.JFXButton?> | ||||
| <?import javafx.geometry.Insets?> | ||||
| <?import javafx.geometry.Rectangle2D?> | ||||
| <?import javafx.scene.control.Label?> | ||||
| <?import javafx.scene.image.Image?> | ||||
| <?import javafx.scene.image.ImageView?> | ||||
| <?import javafx.scene.layout.AnchorPane?> | ||||
| <?import javafx.scene.layout.HBox?> | ||||
| <?import javafx.scene.layout.VBox?> | ||||
| <?import javafx.scene.text.Font?> | ||||
| <?import javafx.scene.text.Text?> | ||||
| <?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> | ||||
|       <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> | ||||
| @ -20,7 +22,7 @@ | ||||
|                   <Font name="System Bold" size="24.0" /> | ||||
|                </font> | ||||
|             </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 size="24.0" /> | ||||
|                </font> | ||||
| @ -31,14 +33,31 @@ | ||||
|          <children> | ||||
|             <HBox alignment="CENTER_LEFT"> | ||||
|                <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> | ||||
|                <padding> | ||||
|                   <Insets right="20.0" /> | ||||
|                </padding> | ||||
|             </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="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;" /> | ||||
|             <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"> | ||||
|                <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> | ||||
|       </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"> | ||||
| @ -50,12 +69,152 @@ | ||||
|             </Text> | ||||
|          </children> | ||||
|       </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 url="@../icons/spider-man.jpg" /> | ||||
|          </image> | ||||
|       </ImageView> | ||||
|       <Label layoutX="29.0" layoutY="338.0" text="Crew:" textFill="#ecebed" /> | ||||
|       <JFXButton buttonType="RAISED" layoutX="1016.0" layoutY="514.0" prefWidth="100.0" style="-fx-background-color: #456789;" text="Play" /> | ||||
|       <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"> | ||||
|          <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> | ||||
| </AnchorPane> | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/icons/baseline_favorite_black_48dp.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 429 B | 
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/icons/baseline_favorite_border_black_48dp.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 652 B | 
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/icons/baseline_folder_black_48dp.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 194 B | 
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/icons/baseline_keyboard_arrow_down_black_48dp.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 223 B | 
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/icons/baseline_keyboard_arrow_down_white_48dp.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 224 B | 
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/icons/baseline_list_black_48dp.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 110 B | 
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/icons/baseline_play_arrow_black_48dp.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 199 B | 
| @ -43,8 +43,8 @@ season = Staffel | ||||
| episode = Episode | ||||
| runtime = Laufzeit | ||||
| genre = Gener | ||||
| director = Regisseur | ||||
| writer = Autor | ||||
| directors = Regisseur | ||||
| writers = Autoren | ||||
| actors = Schauspieler | ||||
| plot = Beschreibung | ||||
| language = Original Sprache | ||||
| @ -60,3 +60,7 @@ website = Webseite | ||||
| addSourceHeader = Neue Quelle hinzuf\u00FCgen | ||||
| addSourceBody = HomeFlix konnte keine Quelle finden. \nFüge eine loakels Verzeichniss oder eine Sreaming Datei als neue Quelle hinzu. | ||||
| cancelBtnText = Abbrechen | ||||
|  | ||||
| #DetailView | ||||
| crew = Haupt-Crew | ||||
| score = Benutzerbewertung | ||||
|  | ||||
| @ -41,10 +41,10 @@ rated = Rating | ||||
| released = published on | ||||
| season = Season | ||||
| episode = Episode | ||||
| runtime = Duration | ||||
| runtime = Runtime | ||||
| genre = Gener | ||||
| director = Director | ||||
| writer = Writer | ||||
| directors = Directors | ||||
| writers = Writers | ||||
| actors = Actors | ||||
| plot = Plot | ||||
| language = Language | ||||
| @ -60,3 +60,7 @@ website = Website | ||||
| 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. | ||||
| cancelBtnText = cancel | ||||
|  | ||||
| #DetailView | ||||
| crew = Featured Crew | ||||
| score = User Score | ||||
|  | ||||