From dde8eb937556043d0cf2d48e12fa1d8e53417a63 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Tue, 22 Aug 2017 18:34:43 +0200
Subject: [PATCH] #128 - Add language chooser to settings --> restart after
 change needs to implemented

---
 .../budgetmaster/logic/Settings.java          |  17 ++++-
 .../logic/utils/LanguageType.java             |  35 ++++++++++
 .../budgetmaster/logic/utils/Strings.java     |   5 ++
 .../budgetmaster/resources/_de.properties     |   9 ++-
 .../budgetmaster/resources/flags/english.png  | Bin 0 -> 18427 bytes
 .../budgetmaster/resources/flags/german.png   | Bin 0 -> 7881 bytes
 .../budgetmaster/ui/cells/LanguageCell.java   |  63 ++++++++++++++++++
 .../ui/controller/Controller.java             |  19 ++++--
 .../ui/controller/SettingsController.java     |  49 +++++++++++++-
 .../ui/controller/SplashScreenController.java |   8 ++-
 .../budgetmaster/ui/fxml/SettingsTab.fxml     |  14 +++-
 .../budgetmasterserver/main/_de.properties    |   2 +-
 12 files changed, 207 insertions(+), 14 deletions(-)
 create mode 100644 src/de/deadlocker8/budgetmaster/logic/utils/LanguageType.java
 create mode 100644 src/de/deadlocker8/budgetmaster/resources/flags/english.png
 create mode 100644 src/de/deadlocker8/budgetmaster/resources/flags/german.png
 create mode 100644 src/de/deadlocker8/budgetmaster/ui/cells/LanguageCell.java

diff --git a/src/de/deadlocker8/budgetmaster/logic/Settings.java b/src/de/deadlocker8/budgetmaster/logic/Settings.java
index 0a633663e..29da9144f 100644
--- a/src/de/deadlocker8/budgetmaster/logic/Settings.java
+++ b/src/de/deadlocker8/budgetmaster/logic/Settings.java
@@ -2,6 +2,8 @@ package de.deadlocker8.budgetmaster.logic;
 
 import java.util.ArrayList;
 
+import de.deadlocker8.budgetmaster.logic.utils.LanguageType;
+
 public class Settings
 {
 	private String clientSecret;
@@ -10,6 +12,7 @@ public class Settings
 	private String currency;
 	private boolean restActivated;
 	private ArrayList<String> trustedHosts;
+	private LanguageType language;
 	
 	public Settings()
 	{
@@ -74,8 +77,18 @@ public class Settings
 	public void setTrustedHosts(ArrayList<String> trustedHosts)
 	{
 		this.trustedHosts = trustedHosts;
-	}
+	}	
 	
+	public LanguageType getLanguage()
+	{
+		return language;
+	}
+
+	public void setLanguage(LanguageType language)
+	{
+		this.language = language;
+	}
+
 	public boolean isComplete()
 	{
 		if(url == null)
@@ -91,6 +104,6 @@ public class Settings
 	@Override
 	public String toString()
 	{
-		return "Settings [clientSecret=" + clientSecret + ", url=" + url + ", secret=" + secret + ", currency=" + currency + ", restActivated=" + restActivated + ", trustedHosts=" + trustedHosts + "]";
+		return "Settings [clientSecret=" + clientSecret + ", url=" + url + ", secret=" + secret + ", currency=" + currency + ", restActivated=" + restActivated + ", trustedHosts=" + trustedHosts + ", language=" + language + "]";
 	}
 }
\ No newline at end of file
diff --git a/src/de/deadlocker8/budgetmaster/logic/utils/LanguageType.java b/src/de/deadlocker8/budgetmaster/logic/utils/LanguageType.java
new file mode 100644
index 000000000..f9ed0a080
--- /dev/null
+++ b/src/de/deadlocker8/budgetmaster/logic/utils/LanguageType.java
@@ -0,0 +1,35 @@
+package de.deadlocker8.budgetmaster.logic.utils;
+
+import java.util.Locale;
+
+public enum LanguageType
+{
+	GERMAN("Deutsch", Locale.GERMAN, "german"),
+	ENGLISH("English", Locale.ENGLISH, "english");
+	
+	private String name;
+	private Locale locale;
+	private String iconName;
+	
+	private LanguageType(String name, Locale locale, String iconName)
+	{
+		this.name = name;
+		this.locale = locale;
+		this.iconName = iconName;
+	}
+	
+	public String getName()
+	{
+		return name;
+	}
+	
+	public Locale getLocale()
+	{
+		return locale;
+	}
+
+	public String getIconName()
+	{
+		return iconName;
+	}
+}
\ No newline at end of file
diff --git a/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java b/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java
index 545c847ae..6e38376d8 100644
--- a/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java
+++ b/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java
@@ -8,6 +8,7 @@ public class Strings
     public static final String VERSION_NAME = "version.name";
     public static final String VERSION_DATE = "version.date";
     public static final String AUTHOR = "author";
+    public static final String CREDITS = "credits";
     public static final String FOLDER = "folder";    
     
     //TITLE
@@ -128,6 +129,10 @@ public class Strings
     public static final String INFO_HEADER_TEXT_WELCOME = "info.header.text.welcome";
     public static final String INFO_TEXT_WELCOME_FIRST_START = "info.text.welcome.first.start";
     public static final String INFO_TEXT_WELCOME_COMPATIBILITY = "info.text.welcome.compatibility";
+    public static final String INFO_TITLE_LANGUAGE_CHANGED = "info.title.language.changed";
+    public static final String INFO_TEXT_LANGUAGE_CHANGED = "info.text.language.changed";
+    public static final String INFO_TEXT_LANGUAGE_CHANGED_RESTART_NOW = "info.text.language.changed.restart.now";
+    public static final String INFO_TEXT_LANGUAGE_CHANGED_RESTART_LATER = "info.text.language.changed.restart.later";
         
     //WARNING
     public static final String WARNING_ENDDATE_BEFORE_STARTDATE = "warning.enddate.before.startdate";
diff --git a/src/de/deadlocker8/budgetmaster/resources/_de.properties b/src/de/deadlocker8/budgetmaster/resources/_de.properties
index 99ffe43b1..952572464 100644
--- a/src/de/deadlocker8/budgetmaster/resources/_de.properties
+++ b/src/de/deadlocker8/budgetmaster/resources/_de.properties
@@ -1,9 +1,10 @@
 # DEFAULT
 app.name=BudgetMaster
-version.code=6
+version.code=7
 version.name=1.4.0_alpha
 version.date=12.08.17
 author=Robert Goldmann
+credits=L�nderflaggen von Freepik auf https://www.flaticon.com
 
 folder=Deadlocker/BudgetMaster
 
@@ -127,6 +128,11 @@ info.header.text.welcome=Willkommen beim BudgetMaster
 info.text.welcome.first.start=Dies scheint dein erster Besuch zu sein, da noch keine Einstellungen existieren.\nDamit es losgehen kann, �berlege dir ein Passwort und trage es in das Passwortfeld ein.\n\n(Hinweis: Das Passwort kann sp�ter jederzeit ge�ndert werden.)\n "
 info.text.welcome.compatibility=Deine Einstellungsdatei ist veraltet und muss aktualisert werden.\nSeit Version v1.3.0 wird ein Passwort ben�tigt, um BudgetMaster zu entsperren. Damit es losgehen kann, �berlege dir ein Passwort und trage es in das Passwortfeld ein.\n\n(Hinweis: Das Passwort kann sp�ter jederzeit ge�ndert werden.)\n "
 
+info.title.language.changed=Neustarten
+info.text.language.changed=�nderungen der Sprache werden erst nach einem Neustart des Programms wirksam.
+info.text.language.changed.restart.now=Jetzt neustarten
+info.text.language.changed.restart.later=Sp�ter neustarten
+
 # WARNING
 warning.enddate.before.startdate=Das Enddatum darf zeitlich nicht vor dem Startdatum liegen.
 warning.empty.width.in.pixels=Bitte gib eine Breite in Pixeln an.
@@ -250,6 +256,7 @@ settingstab.label.rest.activated=aktiviert
 settingstab.label.rest.deactivated=deaktiviert
 settingstab.label.trusted.hosts=Vertrauensw�rdige Hosts:
 settingstab.label.trusted.hosts.info=(ein Host pro Zeile)
+settingstab.label.language=Sprache:
 settingstab.label.database=Datenbank:
 settingstab.button.database.export=Exportieren
 settingstab.button.database.import=Importieren
diff --git a/src/de/deadlocker8/budgetmaster/resources/flags/english.png b/src/de/deadlocker8/budgetmaster/resources/flags/english.png
new file mode 100644
index 0000000000000000000000000000000000000000..56268bc43902937b857b586498cf5059a7926f36
GIT binary patch
literal 18427
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
Gp$Pz*Q!GmW

literal 0
HcmV?d00001

diff --git a/src/de/deadlocker8/budgetmaster/resources/flags/german.png b/src/de/deadlocker8/budgetmaster/resources/flags/german.png
new file mode 100644
index 0000000000000000000000000000000000000000..2644cdb785a2ef8eb806b0ae25bcc03c1160ae52
GIT binary patch
literal 7881
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
T-YaBaU|{fc^>bP0l+XkKXD1!e

literal 0
HcmV?d00001

diff --git a/src/de/deadlocker8/budgetmaster/ui/cells/LanguageCell.java b/src/de/deadlocker8/budgetmaster/ui/cells/LanguageCell.java
new file mode 100644
index 000000000..d7da4df94
--- /dev/null
+++ b/src/de/deadlocker8/budgetmaster/ui/cells/LanguageCell.java
@@ -0,0 +1,63 @@
+package de.deadlocker8.budgetmaster.ui.cells;
+
+import de.deadlocker8.budgetmaster.logic.utils.LanguageType;
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.control.Label;
+import javafx.scene.control.ListCell;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.layout.HBox;
+
+public class LanguageCell extends ListCell<LanguageType>
+{		
+	private final double HEIGHT = 20.0;
+	private boolean useBorder;
+	
+	public LanguageCell(boolean useBorder)
+	{
+		this.useBorder = useBorder;
+	}
+	
+	@Override
+	protected void updateItem(LanguageType item, boolean empty)
+	{
+		super.updateItem(item, empty);
+
+		if(!empty)
+		{		
+			HBox hbox = new HBox();
+			
+			Image image = new Image("de/deadlocker8/budgetmaster/resources/flags/" + item.getIconName() + ".png");
+			ImageView imageView = new ImageView(image);
+			imageView.setFitWidth(HEIGHT);
+			imageView.setFitHeight(HEIGHT);
+			hbox.getChildren().add(imageView);			
+			
+			Label labelName = new Label(item.getName());
+			labelName.setPrefHeight(HEIGHT);
+			labelName.setStyle("-fx-font-weight: bold; -fx-font-size: 14; -fx-text-fill: #212121");
+			labelName.setAlignment(Pos.CENTER);
+			hbox.getChildren().add(labelName);
+			HBox.setMargin(labelName, new Insets(0, 0, 0, 20));
+			
+			hbox.setPadding(new Insets(0));
+			if(useBorder)
+			{
+				setStyle("-fx-background: transparent; -fx-border-color: #545454; -fx-border-width: 0 0 1 0");
+			}
+			else
+			{
+				setStyle("-fx-background: transparent;");
+			}
+			setGraphic(hbox);	
+			setAlignment(Pos.CENTER);
+		}
+		else
+		{
+			setStyle("-fx-background: transparent");
+			setText(null);
+			setGraphic(null);
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java b/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java
index f87742a17..2d960d0a2 100644
--- a/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java
+++ b/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java
@@ -328,12 +328,19 @@ public class Controller
 
 	public void about()
 	{
-		AlertGenerator.showAboutAlert(Localization.getString(Strings.APP_NAME),
-									Localization.getString(Strings.VERSION_NAME),
-									Localization.getString(Strings.VERSION_CODE),
-									Localization.getString(Strings.VERSION_DATE),
-									Localization.getString(Strings.AUTHOR),
-									icon, stage, null, false);
+		ArrayList<String> creditLines = new ArrayList<>();
+		creditLines.add(Localization.getString(Strings.CREDITS));
+				
+		AlertGenerator.showAboutAlertWithCredits(Localization.getString(Strings.APP_NAME),
+												Localization.getString(Strings.VERSION_NAME),
+												Localization.getString(Strings.VERSION_CODE),
+												Localization.getString(Strings.VERSION_DATE),
+												Localization.getString(Strings.AUTHOR),
+												creditLines,
+												icon, 
+												stage, 
+												null, 
+												false);
 	}	
 	
 	public void refresh(FilterSettings newFilterSettings)
diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java b/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java
index 5d8dc9535..506a7f648 100644
--- a/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java
@@ -11,7 +11,9 @@ import de.deadlocker8.budgetmaster.logic.serverconnection.ServerConnection;
 import de.deadlocker8.budgetmaster.logic.utils.Colors;
 import de.deadlocker8.budgetmaster.logic.utils.FileHelper;
 import de.deadlocker8.budgetmaster.logic.utils.Helpers;
+import de.deadlocker8.budgetmaster.logic.utils.LanguageType;
 import de.deadlocker8.budgetmaster.logic.utils.Strings;
+import de.deadlocker8.budgetmaster.ui.cells.LanguageCell;
 import de.deadlocker8.budgetmasterserver.logic.database.Database;
 import javafx.application.Platform;
 import javafx.fxml.FXML;
@@ -20,6 +22,7 @@ import javafx.scene.control.Alert.AlertType;
 import javafx.scene.control.Button;
 import javafx.scene.control.ButtonBar.ButtonData;
 import javafx.scene.control.ButtonType;
+import javafx.scene.control.ComboBox;
 import javafx.scene.control.Label;
 import javafx.scene.control.RadioButton;
 import javafx.scene.control.TextArea;
@@ -56,8 +59,10 @@ public class SettingsController
 	@FXML private RadioButton radioButtonRestActivated;
 	@FXML private RadioButton radioButtonRestDeactivated;
 	@FXML private TextArea textAreaTrustedHosts;
+	@FXML private ComboBox<LanguageType> comboBoxLanguage;
 
 	private Controller controller;
+	private LanguageType previousLanguage;
 
 	public void init(Controller controller)
 	{
@@ -66,6 +71,15 @@ public class SettingsController
 		textFieldClientSecret.setText("******");
 		radioButtonRestDeactivated.setSelected(true);
 		
+		comboBoxLanguage.setCellFactory((view) -> {
+			return new LanguageCell(true);
+		});		
+		
+		comboBoxLanguage.getItems().addAll(LanguageType.values());		
+		comboBoxLanguage.setButtonCell(new LanguageCell(false));
+		comboBoxLanguage.setValue(LanguageType.GERMAN);
+		previousLanguage = LanguageType.GERMAN;
+		
 		if(controller.getSettings().isComplete())
 		{
 			textFieldURL.setText(controller.getSettings().getUrl());
@@ -80,8 +94,15 @@ public class SettingsController
 				radioButtonRestDeactivated.setSelected(true);
 			}
 			setTextAreaTrustedHosts(controller.getSettings().getTrustedHosts());
+			
+			if(controller.getSettings().getLanguage() != null)
+			{
+				LanguageType language = controller.getSettings().getLanguage();
+				comboBoxLanguage.setValue(language);
+				previousLanguage = language;
+			}
 		}
-
+		
 		anchorPaneMain.setStyle("-fx-background-color: " + ConvertTo.toRGBHexWithoutOpacity(Colors.BACKGROUND));
 		labelClientSecret.setStyle("-fx-text-fill: " + ConvertTo.toRGBHexWithoutOpacity(Colors.TEXT));
 		labelSecret.setStyle("-fx-text-fill: " + ConvertTo.toRGBHexWithoutOpacity(Colors.TEXT));
@@ -206,6 +227,7 @@ public class SettingsController
 			controller.getSettings().setCurrency(currency);
 			controller.getSettings().setRestActivated(radioButtonRestActivated.isSelected());
 			controller.getSettings().setTrustedHosts(trustedHosts);
+			controller.getSettings().setLanguage(comboBoxLanguage.getValue());
 		}
 		else
 		{
@@ -232,6 +254,7 @@ public class SettingsController
 			settings.setCurrency(currency);
 			settings.setRestActivated(radioButtonRestActivated.isSelected());
 			settings.setTrustedHosts(trustedHosts);
+			settings.setLanguage(comboBoxLanguage.getValue());
 			controller.setSettings(settings);
 		}
 
@@ -257,6 +280,30 @@ public class SettingsController
 
 		controller.refresh(controller.getFilterSettings());
 		controller.showNotification(Localization.getString(Strings.NOTIFICATION_SETTINGS_SAVE));
+		
+		if(controller.getSettings().getLanguage() != previousLanguage)
+		{
+			Alert alert = new Alert(AlertType.INFORMATION);
+			alert.setTitle(Localization.getString(Strings.INFO_TITLE_LANGUAGE_CHANGED));
+			alert.setHeaderText("");
+			alert.setContentText(Localization.getString(Strings.INFO_TEXT_LANGUAGE_CHANGED));			
+			Stage dialogStage = (Stage)alert.getDialogPane().getScene().getWindow();
+			dialogStage.getIcons().add(controller.getIcon());					
+			
+			ButtonType buttonTypeOne = new ButtonType(Localization.getString(Strings.INFO_TEXT_LANGUAGE_CHANGED_RESTART_NOW));
+			ButtonType buttonTypeTwo = new ButtonType(Localization.getString(Strings.INFO_TEXT_LANGUAGE_CHANGED_RESTART_LATER));							
+			alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeTwo);
+			
+			Optional<ButtonType> result = alert.showAndWait();						
+			if (result.get() == buttonTypeOne)
+			{
+				//TODO restart programm
+			}
+			else
+			{
+				alert.close();
+			}
+		}
 	}
 
 	public void exportDB()
diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java b/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java
index 8fe0b2739..65bea18bd 100644
--- a/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java
@@ -62,6 +62,12 @@ public class SplashScreenController
 		});
 		
 		settings = FileHelper.loadSettings();
+		//load correct language
+		if(settings.getLanguage() != null)
+		{
+			Localization.loadLanguage(settings.getLanguage().getLocale());
+		}
+		
 		if(settings == null)
 		{	
 			settings = new Settings();
@@ -172,7 +178,7 @@ public class SplashScreenController
 			Parent root = (Parent)fxmlLoader.load();
 			Stage newStage = new Stage();
 			newStage.setTitle(Localization.getString(Strings.APP_NAME));
-			newStage.setScene(new Scene(root, 650, 650));
+			newStage.setScene(new Scene(root, 650, 675));
 			newStage.getIcons().add(icon);			
 			newStage.setResizable(true);
 			newStage.setMinHeight(650);
diff --git a/src/de/deadlocker8/budgetmaster/ui/fxml/SettingsTab.fxml b/src/de/deadlocker8/budgetmaster/ui/fxml/SettingsTab.fxml
index 96f3f6aed..209c927ab 100644
--- a/src/de/deadlocker8/budgetmaster/ui/fxml/SettingsTab.fxml
+++ b/src/de/deadlocker8/budgetmaster/ui/fxml/SettingsTab.fxml
@@ -2,6 +2,7 @@
 
 <?import javafx.geometry.Insets?>
 <?import javafx.scene.control.Button?>
+<?import javafx.scene.control.ComboBox?>
 <?import javafx.scene.control.Label?>
 <?import javafx.scene.control.RadioButton?>
 <?import javafx.scene.control.TextArea?>
@@ -53,7 +54,7 @@
                               <Font name="System Bold" size="16.0" />
                            </font>
                            <VBox.margin>
-                              <Insets top="-5.0" />
+                              <Insets top="-7.0" />
                            </VBox.margin>
                         </Label>
                         <Label fx:id="labelSecret1111" alignment="CENTER" contentDisplay="CENTER" maxHeight="-Infinity" text="%settingstab.label.trusted.hosts.info" textAlignment="CENTER" wrapText="true" VBox.vgrow="ALWAYS">
@@ -64,7 +65,7 @@
                               <Insets top="-20.0" />
                            </VBox.margin>
                         </Label>
-                        <Label fx:id="labelSecret1112" alignment="CENTER_RIGHT" contentDisplay="RIGHT" maxHeight="-Infinity" prefWidth="158.0" text="%settingstab.label.database" textAlignment="RIGHT" wrapText="true">
+                        <Label fx:id="labelSecret1112" alignment="CENTER_RIGHT" contentDisplay="RIGHT" maxHeight="-Infinity" prefWidth="158.0" text="%settingstab.label.language" textAlignment="RIGHT" wrapText="true">
                            <font>
                               <Font name="System Bold" size="16.0" />
                            </font>
@@ -72,6 +73,14 @@
                               <Insets top="35.0" />
                            </VBox.margin>
                         </Label>
+                        <Label fx:id="labelSecret11122" alignment="CENTER_RIGHT" contentDisplay="RIGHT" maxHeight="-Infinity" prefWidth="158.0" text="%settingstab.label.database" textAlignment="RIGHT" wrapText="true">
+                           <font>
+                              <Font name="System Bold" size="16.0" />
+                           </font>
+                           <VBox.margin>
+                              <Insets />
+                           </VBox.margin>
+                        </Label>
                         <Label fx:id="labelSecret11121" alignment="CENTER_RIGHT" contentDisplay="RIGHT" maxHeight="-Infinity" prefWidth="158.0" textAlignment="RIGHT" wrapText="true">
                            <font>
                               <Font name="System Bold" size="16.0" />
@@ -113,6 +122,7 @@
                            <VBox.margin>
                               <Insets />
                            </VBox.margin></TextArea>
+                        <ComboBox fx:id="comboBoxLanguage" maxWidth="1.7976931348623157E308" />
                         <HBox alignment="CENTER_LEFT" prefHeight="11.0" prefWidth="539.0" spacing="30.0">
                            <children>
                               <Button fx:id="buttonExportDB" mnemonicParsing="false" onAction="#exportDB" text="%settingstab.button.database.export">
diff --git a/src/de/deadlocker8/budgetmasterserver/main/_de.properties b/src/de/deadlocker8/budgetmasterserver/main/_de.properties
index 9eb890aca..dd7db603a 100644
--- a/src/de/deadlocker8/budgetmasterserver/main/_de.properties
+++ b/src/de/deadlocker8/budgetmasterserver/main/_de.properties
@@ -1,5 +1,5 @@
 app.name=BudgetMasterServer
-version.code=6
+version.code=7
 version.name=1.4.0_alpha
 version.date=12.08.17
 author=Robert Goldmann
\ No newline at end of file
-- 
GitLab