wordType;
+
+ public TextField getWelsh() {
+ return welsh;
+ }
+
+ public TextField getEnglish() {
+ return english;
+ }
+
+ @FXML
+ private void initialize(){
+
+ wordType.getItems().addAll("Masculine noun", "Feminine noun", "Verb", "Other");
+ System.out.println("Test");
+
+ }
+
+
+ @FXML protected void addButtonClick (ActionEvent actionEvent){
+ boolean entryFound = false;
+ if (english.getText().equals("") || welsh.getText().equals("")|| wordType.getValue().equals("Type")){
+ Alert error = new Alert(Alert.AlertType.ERROR);
+ error.setTitle("Error");
+ error.setHeaderText("Entry Not Saved");
+ error.setContentText("One or more fields are blank");
+
+ error.showAndWait();
+ }
+
+ else {
+ for (DictionaryEntry entry : App.dictionary){
+ entryFound = false;
+ DictionaryEntry newEntry = new DictionaryEntry(english.getText(),welsh.getText(),wordType.getValue(),false);
+ if(entry.equals(newEntry)){
+ Alert alert = new Alert(Alert.AlertType.ERROR);
+ alert.setTitle("Error");
+ alert.setHeaderText("Entry Not Saved");
+ alert.setContentText("This entry already exists");
+
+ alert.showAndWait();
+ entryFound = true;
+ break;
+ }
+ else{
+ continue;
+ }
+ }
+ if(!entryFound){
+ Alert alert = new Alert(Alert.AlertType.INFORMATION);
+ alert.setTitle("Success");
+ alert.setHeaderText("Entry Saved");
+ alert.setContentText("Entry Added");
+
+ alert.showAndWait();
+ DictionaryEntry dictionaryEntry = new DictionaryEntry(english.getText(), welsh.getText(), wordType.getValue(), false);
+ App.dictionary.contains(dictionaryEntry);
+ App.dictionary.add(dictionaryEntry);
+ System.out.println(App.dictionary.toString());
+ }
+ }
+
+
+ }
+
+// @Override
+// public boolean equals(Object obj) {
+// DictionaryEntry otherObject = (DictionaryEntry) obj;
+// return (this.getEnglish().equals(otherObject.getEnglish()) && this.getWelsh().equals(otherObject.getWelsh()));
+// }
+
+
+ @FXML
+ private void switchToPrimary() throws IOException {
+ App.setRoot("Primary");
+ }
+// add character methods for characters ch, dd, ff, ng, ll, ph, rh, th
+ public void addCharch(ActionEvent actionEvent) { welsh.appendText("ch"); }
+ public void addChardd(ActionEvent actionEvent) { welsh.appendText("dd"); }
+ public void addCharff(ActionEvent actionEvent) { welsh.appendText("ff"); }
+ public void addCharng(ActionEvent actionEvent) { welsh.appendText("ng"); }
+ public void addCharll(ActionEvent actionEvent) { welsh.appendText("ll"); }
+ public void addCharph(ActionEvent actionEvent) { welsh.appendText("ph"); }
+ public void addCharrh(ActionEvent actionEvent) { welsh.appendText("rh"); }
+ public void addCharth(ActionEvent actionEvent) { welsh.appendText("th"); }
+
+}
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/Application.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/Application.java
new file mode 100644
index 0000000..c718ed2
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/Application.java
@@ -0,0 +1,106 @@
+/**
+ * @(#) App.java 0,1 2020/04/07
+ *
+ * Copyright (c) 2020 Aberystwyth University.
+ * All rights reserved.
+ */
+package uk.ac.aber.cs22120.group20.javafx;
+
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.FileChooser;
+import javafx.stage.Stage;
+import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
+import uk.ac.aber.cs22120.group20.json.JsonProcessing;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.Scanner;
+
+/**
+ * A class that launches the Welsh Vocabulary tutor Application.
+ *
+ * @author Brad Corbett [brc9]
+ * @author Henry Dugmore [hjd3]
+ * @author Kain Bryan-Jones [kab74]
+ * @author Luke Wybar [law39]
+ * @author Marcin Jakob [maj83]
+ * @author Oscar Pocock [osp1]
+ * @author Tom Perry [top1]
+ * @author Waylen Watts [ncw]
+ *
+ * @version 0.1 Initial development
+ */
+public class Application extends javafx.application.Application {
+ private static Scene scene;
+
+ private JsonProcessing jsonProcessing = new JsonProcessing();
+ private Scanner scanner = new Scanner(System.in);
+
+ public static LinkedList dictionary = new LinkedList<>();
+
+ /**
+ *
+ * @param stage
+ * @throws IOException
+ */
+ @Override
+ public void start(Stage stage) throws IOException {
+ File jsonFileLocation = null;
+
+ while(jsonFileLocation ==null) {
+ FileChooser fileChooser = new FileChooser();
+ fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Json Files", "*.json"));
+ fileChooser.setTitle("Open Json File");
+ jsonFileLocation = fileChooser.showOpenDialog(stage);
+ }
+
+ final File jsonFileFinalLocation = jsonFileLocation;
+ dictionary = jsonProcessing.readInJson(jsonFileFinalLocation);
+// dictionary.add(new DictionaryEntry("abbey", "abaty", "nm", false));
+// dictionary.add(new DictionaryEntry("believe", "credu", "verb", true));
+// dictionary.add(new DictionaryEntry("concert", "cyngerdd", "nm", false));
+// dictionary.add(new DictionaryEntry("disease", "clefyd", "nm", true));
+// dictionary.add(new DictionaryEntry("extremely", "dros ben", "other", false));
+// dictionary.add(new DictionaryEntry("flu", "ffliw", "nm", false));
+ scene = new Scene(loadFXML("primary"));
+ stage.setScene(scene);
+// stage.setOnCloseRequest(e -> {
+// jsonProcessing.writeOutJson(jsonFileLocation, dictionary);
+// Platform.exit();
+// System.exit(0);
+// });
+ stage.show();
+ }
+
+ /**
+ *
+ * @param fxml
+ * @throws IOException
+ */
+ static void setRoot(String fxml) throws IOException {
+ scene.setRoot(loadFXML(fxml));
+ }
+
+ /**
+ *
+ * @param fxml
+ * @return
+ * @throws IOException
+ */
+ private static Parent loadFXML(String fxml) throws IOException {
+ FXMLLoader fxmlLoader = new FXMLLoader(Application.class.getResource(fxml + ".fxml"));
+ return fxmlLoader.load();
+ }
+
+ /**
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+ launch();
+ }
+
+}
\ No newline at end of file
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/DictionaryController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/DictionaryController.java
new file mode 100644
index 0000000..aceadf5
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/DictionaryController.java
@@ -0,0 +1,217 @@
+/**
+ * @(#) DictionaryController.java 0,1 2020/04/07
+ *
+ * Copyright (c) 2020 Aberystwyth University.
+ * All rights reserved.
+ */
+package uk.ac.aber.cs22120.group20.javafx;
+
+import javafx.beans.property.SimpleStringProperty;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.collections.transformation.FilteredList;
+import javafx.collections.transformation.SortedList;
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableRow;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TextField;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.stage.Stage;
+import uk.ac.aber.cs22120.group20.javafx.Application;
+import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ResourceBundle;
+
+/**
+ * A class that handles the keyboard and mouse input and interaction for the 'Dictionary Page' which is
+ * defined by 'dictionary.fxml'
+ *
+ * @author Brad Corbett [brc9]
+ * @author Henry Dugmore [hjd3]
+ * @author Kain Bryan-Jones [kab74]
+ * @author Luke Wybar [law39]
+ * @author Marcin Jakob [maj83]
+ * @author Oscar Pocock [osp1]
+ * @author Tom Perry [top1]
+ * @author Waylen Watts [ncw]
+ * @version 0.1 Initial development.
+ * @see DictionaryEntry
+ * @see Application
+ */
+public class DictionaryController implements Initializable {
+ public static Stage primaryStage = null;
+
+ @FXML
+ private ImageView alphaSort;
+ @FXML
+ private TextField searchBox;
+ @FXML
+ private TableView table;
+ @FXML
+ private TableColumn english = new TableColumn<>();
+ @FXML
+ private TableColumn welsh = new TableColumn<>();
+
+ public ObservableList list = FXCollections.observableArrayList();
+
+ @FXML
+ private void switchLangSort() {
+ if (table.getSortOrder().contains(english)) {
+ if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) {
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
+ }
+ else if (welsh.getSortType().equals(TableColumn.SortType.DESCENDING)) {
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
+ }
+ table.getSortOrder().clear();
+ table.getSortOrder().add(welsh);
+ }
+ else if (table.getSortOrder().contains(welsh)) {
+ if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) {
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
+ }
+ else if (english.getSortType().equals(TableColumn.SortType.DESCENDING)) {
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
+ }
+ table.getSortOrder().clear();
+ table.getSortOrder().add(english);
+ }
+ table.sort();
+ }
+
+ @FXML
+ private void switchAlphaSort() {
+ if (table.getSortOrder().contains(english)) {
+ if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) {
+ english.setSortType(TableColumn.SortType.DESCENDING);
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
+ } else {
+ english.setSortType(TableColumn.SortType.ASCENDING);
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
+ }
+ } else if (table.getSortOrder().contains(welsh)) {
+ if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) {
+ welsh.setSortType(TableColumn.SortType.DESCENDING);
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
+ } else {
+ welsh.setSortType(TableColumn.SortType.ASCENDING);
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
+ }
+ }
+ }
+
+ /**
+ * Switches to the primary scene.
+ *
+ * @throws IOException
+ */
+ @FXML
+ private void switchToPracticeList() throws IOException {
+ Application.setRoot("practicelist");
+ }
+
+ /**
+ * Initializes the table of dictionary entries.
+ *
+ * An observable list of DictionaryEntries is loaded from the Application class into a local instance of ObservableList.
+ * It also sets up Lambda expressions related to live searching functionality and the display of DictionaryEntries.
+ *
+ * @param url
+ * @param resourceBundle
+ * @see Application
+ * @see DictionaryEntry
+ */
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+ list.addAll(Application.dictionary);
+
+ table.setRowFactory(tv -> {
+ TableRow row = new TableRow() {
+ @Override
+ protected void updateItem(DictionaryEntry dictionaryEntry, boolean b) {
+ super.updateItem(dictionaryEntry, b);
+ if (!isEmpty()) {
+ if (dictionaryEntry.isPracticeWord()) {
+ setStyle("-fx-background-color: gray;");
+ } else {
+ setStyle(" ");
+ }
+ }
+ }
+ };
+ row.setOnMouseClicked(mouseEvent -> {
+ if (mouseEvent.getClickCount() == 1 && (!row.isEmpty())) {
+ if (row.getItem().isPracticeWord()) {
+ Application.dictionary.get(list.indexOf(row.getItem())).setPracticeWord(false);
+// row.getItem().setPracticeWord(false);
+ } else if (!row.getItem().isPracticeWord()) {
+ Application.dictionary.get(list.indexOf(row.getItem())).setPracticeWord(true);
+// row.getItem().setPracticeWord(true);
+ }
+ table.getSelectionModel().clearSelection();
+ }
+ });
+ return row;
+ }
+ );
+ welsh.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
+ if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nm")) {
+ return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nm}");
+ } else if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nf")) {
+ return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nf}");
+ } else {
+ return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh());
+ }
+ });
+
+ english.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
+ if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("verb")) {
+ return new SimpleStringProperty("to " + dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
+ } else {
+ return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
+ }
+ });
+
+ FilteredList filteredList = new FilteredList<>(list, p -> true); // Wrap list in a FilteredList
+
+ searchBox.textProperty().addListener((observable, oldSearchTerm, newSearchTerm) -> {
+ filteredList.setPredicate(dictionaryEntry -> { // returns true on a filter match, false if no match
+ boolean result = false;
+
+ table.refresh(); // This fixes the table highlighting issue
+
+ if (newSearchTerm == null || newSearchTerm.isEmpty()) { // If filter text is empty, display all dictionary entries
+ result = true;
+ } else {
+ // need all same case for compare.
+ final String lowerCaseSearchFilter = newSearchTerm.toLowerCase();
+ if (dictionaryEntry.getWelsh().toLowerCase().contains(lowerCaseSearchFilter)) {
+ result = true; // Filter matches Welsh
+ } else if (dictionaryEntry.getEnglish().toLowerCase().contains(lowerCaseSearchFilter)) {
+ result = true; // Filter matches English
+// } else if (dictionaryEntry.getWordType().toLowerCase().contains(lowerCaseSearchFilter)) {
+// result = true; // Filter matches Word Type
+ } else if (dictionaryEntry.getWordType().equals("verb") && ("to " + dictionaryEntry.getEnglish()).toLowerCase().contains(lowerCaseSearchFilter)) {
+ result = true; // Filter matches ['to' + a word] or [a word] if word is a verb
+ }
+ }
+ return result;
+ });
+ });
+
+ SortedList sortedList = new SortedList<>(filteredList); //Wrap the filtered list in a SortedList
+ sortedList.comparatorProperty().bind(table.comparatorProperty()); //Bind the sorted list comparator to the table comparator
+// welsh.setCellValueFactory(new PropertyValueFactory("welsh"));
+// english.setCellValueFactory(new PropertyValueFactory("english"));
+
+ table.setItems(sortedList);
+ table.getSortOrder().add(english);
+ }
+
+}
+
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/PracticeListController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/PracticeListController.java
new file mode 100644
index 0000000..a52ed11
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/PracticeListController.java
@@ -0,0 +1,223 @@
+/**
+ * @(#) DictionaryController.java 0,1 2020/04/07
+ *
+ * Copyright (c) 2020 Aberystwyth University.
+ * All rights reserved.
+ */
+package uk.ac.aber.cs22120.group20.javafx;
+
+import javafx.beans.property.SimpleStringProperty;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.collections.transformation.FilteredList;
+import javafx.collections.transformation.SortedList;
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.*;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.stage.Stage;
+import uk.ac.aber.cs22120.group20.javafx.Application;
+import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ResourceBundle;
+
+/**
+ * A class that handles the keyboard and mouse input and interaction for the 'Dictionary Page' which is
+ * defined by 'dictionary.fxml'
+ *
+ * @author Brad Corbett [brc9]
+ * @author Henry Dugmore [hjd3]
+ * @author Kain Bryan-Jones [kab74]
+ * @author Luke Wybar [law39]
+ * @author Marcin Jakob [maj83]
+ * @author Oscar Pocock [osp1]
+ * @author Tom Perry [top1]
+ * @author Waylen Watts [ncw]
+ * @version 0.1 Initial development.
+ * @see DictionaryEntry
+ * @see Application
+ */
+public class PracticeListController implements Initializable {
+ public static Stage primaryStage = null;
+
+ @FXML
+ private ImageView alphaSort;
+ @FXML
+ private TextField searchBox;
+ @FXML
+ private TableView table;
+ @FXML
+ private TableColumn english = new TableColumn<>();
+ @FXML
+ private TableColumn welsh = new TableColumn<>();
+
+ public ObservableList list = FXCollections.observableArrayList();
+
+ /**
+ * Initializes the table of dictionary entries.
+ *
+ * An observable list of DictionaryEntries is loaded from the Application class into a local instance of ObservableList.
+ * It also sets up Lambda expressions related to live searching functionality and the display of DictionaryEntries.
+ *
+ * @param url
+ * @param resourceBundle
+ * @see Application
+ * @see DictionaryEntry
+ */
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+// list.addAll(Application.dictionary);
+ for (DictionaryEntry entry : Application.dictionary) {
+ if (entry.isPracticeWord())
+ list.add(entry);
+ }
+
+
+ FilteredList filteredList = new FilteredList<>(list, p -> true); // Wrap list in a FilteredList
+
+ searchBox.textProperty().addListener((observable, oldSearchTerm, newSearchTerm) -> {
+ filteredList.setPredicate(dictionaryEntry -> { // returns true on a filter match, false if no match
+ boolean result = false;
+
+ table.refresh(); // This fixes the table highlighting issue
+
+ if (newSearchTerm == null || newSearchTerm.isEmpty()) { // If filter text is empty, display all dictionary entries
+ result = true;
+ } else {
+ // need all same case for compare.
+ final String lowerCaseSearchFilter = newSearchTerm.toLowerCase();
+ if (dictionaryEntry.getWelsh().toLowerCase().contains(lowerCaseSearchFilter)) {
+ result = true; // Filter matches Welsh
+ } else if (dictionaryEntry.getEnglish().toLowerCase().contains(lowerCaseSearchFilter)) {
+ result = true; // Filter matches English
+// } else if (dictionaryEntry.getWordType().toLowerCase().contains(lowerCaseSearchFilter)) {
+// result = true; // Filter matches Word Type
+ } else if (dictionaryEntry.getWordType().equals("verb") && ("to " + dictionaryEntry.getEnglish()).toLowerCase().contains(lowerCaseSearchFilter)) {
+ result = true; // Filter matches ['to' + a word] or [a word] if word is a verb
+ }
+ }
+ return result;
+ });
+ });
+
+ SortedList sortedList = new SortedList<>(filteredList); //Wrap the filtered list in a SortedList
+ sortedList.comparatorProperty().bind(table.comparatorProperty()); //Bind the sorted list comparator to the table comparator
+// welsh.setCellValueFactory(new PropertyValueFactory("welsh"));
+// english.setCellValueFactory(new PropertyValueFactory("english"));
+
+ table.setPlaceholder(new Label("No practice words found. Please try adding a practice word from the 'Dictionary' page."));
+ table.setRowFactory(tv -> {
+ TableRow row = new TableRow() {
+ @Override
+ protected void updateItem(DictionaryEntry dictionaryEntry, boolean b) {
+ super.updateItem(dictionaryEntry, b);
+ if (!isEmpty()) {
+ setStyle(" ");
+// if (dictionaryEntry.isPracticeWord()) {
+// setStyle("-fx-background-color: gray;");
+// } else {
+// setStyle(" ");
+// }
+ }
+ }
+ };
+ row.setOnMouseClicked(mouseEvent -> {
+ if (mouseEvent.getClickCount() == 1 && (!row.isEmpty())) {
+ for (DictionaryEntry entry : Application.dictionary) {
+ if (entry.equals(row.getItem())) {
+ entry.setPracticeWord(false);
+ list.remove(row.getItem());
+ table.refresh();
+ }
+ }
+ table.getSelectionModel().clearSelection();
+ }
+ });
+ return row;
+ }
+ );
+
+ welsh.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
+
+ if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nm")) {
+ return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nm}");
+ } else if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nf")) {
+ return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nf}");
+ } else {
+ return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh());
+ }
+ });
+
+ english.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
+ if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("verb")) {
+ return new SimpleStringProperty("to " + dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
+ } else {
+ return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
+ }
+ });
+
+ table.setItems(sortedList);
+ table.getSortOrder().add(english);
+ }
+
+ @FXML
+ private void switchLangSort() {
+ if (table.getSortOrder().contains(english)) {
+ if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) {
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
+ }
+ else if (welsh.getSortType().equals(TableColumn.SortType.DESCENDING)) {
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
+ }
+ table.getSortOrder().clear();
+ table.getSortOrder().add(welsh);
+ }
+ else if (table.getSortOrder().contains(welsh)) {
+ if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) {
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
+ }
+ else if (english.getSortType().equals(TableColumn.SortType.DESCENDING)) {
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
+ }
+ table.getSortOrder().clear();
+ table.getSortOrder().add(english);
+ }
+ table.sort();
+ }
+
+ @FXML
+ private void switchAlphaSort() {
+ if (table.getSortOrder().contains(english)) {
+ if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) {
+ english.setSortType(TableColumn.SortType.DESCENDING);
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
+ } else {
+ english.setSortType(TableColumn.SortType.ASCENDING);
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
+ }
+ } else if (table.getSortOrder().contains(welsh)) {
+ if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) {
+ welsh.setSortType(TableColumn.SortType.DESCENDING);
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
+ } else {
+ welsh.setSortType(TableColumn.SortType.ASCENDING);
+ alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
+ }
+ }
+ }
+
+ /**
+ * Switches to the primary scene.
+ *
+ * @throws IOException
+ */
+ @FXML
+ private void switchToPrimary() throws IOException {
+ Application.setRoot("primary");
+ }
+
+}
+
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/PrimaryController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/PrimaryController.java
similarity index 84%
rename from src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/PrimaryController.java
rename to src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/PrimaryController.java
index b1929a6..7c4c68a 100644
--- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/PrimaryController.java
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/PrimaryController.java
@@ -1,4 +1,4 @@
-package uk.ac.aber.cs22120.group20;
+package uk.ac.aber.cs22120.group20.javafx;
import java.io.IOException;
import javafx.fxml.FXML;
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/ScreenSwitch.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/ScreenSwitch.java
new file mode 100644
index 0000000..5b78e25
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/ScreenSwitch.java
@@ -0,0 +1,20 @@
+package uk.ac.aber.cs22120.group20.javafx;
+
+/**
+ * Class that contains all the scenes for the JavaFX user interface and will be responsible
+ * for initiating the transition to new ones.
+ * @Author
+ * @Version
+ * @See
+ */
+public class ScreenSwitch extends SharedCodeController {
+
+ /**
+ * Method that is responsible for the switching between
+ * JavaFX, with it taking the new scene’s name as a parameter.
+ */
+ public void swap(SceneEnum newScene){
+
+ }
+
+}
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/SecondaryController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/SecondaryController.java
similarity index 84%
rename from src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/SecondaryController.java
rename to src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/SecondaryController.java
index 94eb1ac..7be9a5b 100644
--- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/SecondaryController.java
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/SecondaryController.java
@@ -1,4 +1,4 @@
-package uk.ac.aber.cs22120.group20;
+package uk.ac.aber.cs22120.group20.javafx;
import java.io.IOException;
import javafx.fxml.FXML;
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/SharedCodeController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/SharedCodeController.java
new file mode 100644
index 0000000..bd071cf
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/SharedCodeController.java
@@ -0,0 +1,12 @@
+package uk.ac.aber.cs22120.group20.javafx;
+
+/**
+ * Abstract class that contains all the shared FXML elements between the
+ * different controller classes including the sliding menu and the test score counter, to reduce code
+ * duplication. This will be extended by all the controller classes.
+ * @Author
+ * @Version
+ * @See
+ */
+abstract public class SharedCodeController {
+}
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/json/DictionaryEntry.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/json/DictionaryEntry.java
new file mode 100644
index 0000000..cf31597
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/json/DictionaryEntry.java
@@ -0,0 +1,90 @@
+/**
+ * @(#) DictionaryEntry.java 0,1 2020/04/07
+ *
+ * Copyright (c) 2020 Aberystwyth University.
+ * All rights reserved.
+ */
+package uk.ac.aber.cs22120.group20.json;
+
+import uk.ac.aber.cs22120.group20.javafx.Application;
+import uk.ac.aber.cs22120.group20.javafx.DictionaryController;
+
+/**
+ * A class that demonstrates how a controller works.
+ *
+ * @author Brad Corbett [brc9]
+ * @author Henry Dugmore [hjd3]
+ * @author Kain Bryan-Jones [kab74]
+ * @author Luke Wybar [law39]
+ * @author Marcin Jakob [maj83]
+ * @author Oscar Pocock [osp1]
+ * @author Tom Perry [top1]
+ * @author Waylen Watts [ncw]
+ * @version 0.1 Initial development
+ * @see DictionaryController
+ */
+public class DictionaryEntry {
+ private String english;
+ private String welsh;
+ private String wordType;
+ private Boolean practiceWord;
+
+
+ /**
+ * Creates a new instance of a DictionaryEntry
+ */
+ public DictionaryEntry() {
+ practiceWord = false;
+ }
+
+ /**
+ * Creates new instance of a DictionaryEntry
+ *
+ * @param english english translation of the word
+ * @param welsh welsh translation of the word
+ * @param wordType type of word
+ * @see Application
+ * @see DictionaryController
+ */
+ public DictionaryEntry(String english, String welsh, String wordType) {
+ this.english = english;
+ this.welsh = welsh;
+ this.wordType = wordType;
+ }
+
+ public String getEnglish() {
+ return english;
+ }
+
+ public void setEnglish(String english) {
+ this.english = english;
+ }
+
+ public String getWelsh() {
+ return welsh;
+ }
+
+ public void setWelsh(String welsh) {
+ this.welsh = welsh;
+ }
+
+ public String getWordType() {
+ return wordType;
+ }
+
+ public void setWordType(String wordType) {
+ this.wordType = wordType;
+ }
+
+ public Boolean isPracticeWord() {
+ return practiceWord;
+ }
+
+ public void setPracticeWord(Boolean practiceWord) {
+ this.practiceWord = practiceWord;
+ }
+
+ public boolean equals(DictionaryEntry entry) {
+ return entry.getEnglish().equals(this.getEnglish()) && entry.getWelsh().equals(this.getWelsh()) && entry.getWordType().equals(this.getWordType());
+ }
+}
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/json/JsonProcessing.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/json/JsonProcessing.java
new file mode 100644
index 0000000..3ce1728
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/json/JsonProcessing.java
@@ -0,0 +1,45 @@
+package uk.ac.aber.cs22120.group20.json;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.LinkedList;
+
+public class JsonProcessing {
+
+ public LinkedList readInJson(File file) {
+ LinkedList returnVal = new LinkedList<>();
+ ObjectMapper objectMapper = new ObjectMapper();
+
+ try {
+ returnVal.addAll(Arrays.asList(objectMapper.readValue(file, DictionaryEntry[].class)));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return returnVal;
+ }
+
+ public void writeOutJson(String directoryAndFile, LinkedList words) {
+ ObjectMapper objectMapper = new ObjectMapper();
+ String JsonString = "";
+
+ try {
+ JsonString = objectMapper.writeValueAsString(words);
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ Files.writeString(Paths.get(directoryAndFile), JsonString);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+}
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/AssessmentGenerator.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/AssessmentGenerator.java
new file mode 100644
index 0000000..61b9ecc
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/AssessmentGenerator.java
@@ -0,0 +1,57 @@
+package uk.ac.aber.cs22120.group20.selfassessment;
+
+import uk.ac.aber.cs22120.group20.json.WelshDictionary;
+
+import java.util.LinkedList;
+
+/**
+ * Class that contains methods to create a randomised list of questions that will
+ * contain a random distribution of question types.
+ * @Author
+ * @Version
+ * @See
+ */
+public class AssessmentGenerator extends Question {
+
+ /**
+ * Method that will generate a randomized list of questions consisting of random distribution of questions
+ * types, using the dictionary’s practice words as the parameter.
+ * @param wordList
+ * @return
+ */
+ public LinkedList generateAssessment(LinkedList wordList){
+
+ }
+
+ /**
+ * Method
+ * that will generate a list of questions that are the type ‘Match The Meanings’, using the dictionary's
+ * practice words as the parameter.
+ * @return
+ */
+ public LinkedList generateWordMatch(LinkedList){
+
+ }
+
+ /**
+ * Method
+ * that will generate a list of questions that are the type ‘6 Meanings’, using the dictionary's practice
+ * words as the parameter.
+ * @return
+ */
+ public LinkedList generateSixMeanings(LinkedList){
+
+ }
+
+ /**
+ * Method that
+ * will generate a list of questions that are the type ‘Translation’, using the dictionary's practice words as
+ * the parameter.
+ * @return
+ */
+ public LinkedList generateWordEnter(LinkedList){
+
+ }
+
+
+}
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningQuestion.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningQuestion.java
new file mode 100644
index 0000000..ffa7b9d
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningQuestion.java
@@ -0,0 +1,198 @@
+package uk.ac.aber.cs22120.group20.selfassessment;
+/**
+ * @(#) MyController.java 0,1 2020/04/07
+ *
+ * Copyright (c) 2020 Aberystwyth University.
+ * All rights reserved.
+ */
+
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.ComboBox;
+import javafx.scene.control.Label;
+
+import java.net.URL;
+import java.util.*;
+
+/**
+ * A class that generate questions and check answers for match the meaning test.
+ *
+ * @author Brad Corbett [brc9]
+ * @author Henry Dugmore [hjd3]
+ * @author Kain Bryan-Jones [kab74]
+ * @author Luke Wybar [law39]
+ * @author Marcin Jakobik [maj83]
+ * @author Oscar Pocock [osp1]
+ * @author Tom Perry [top1]
+ * @author Waylen Watts [ncw]
+ * @version 0.1 Initial development
+ * @see Main
+ */
+
+
+public class MatchTheMeaningQuestion implements Initializable {
+
+ private Random rand = new Random();
+ private LinkedList setOfQuestions=new LinkedList<>();
+ private ArrayList orderList = new ArrayList<>(Arrays.asList(0,1,2,3));
+ private int corAns = 0;
+ private int wrongAns = 0;
+
+
+ @FXML
+ private ComboBox word1;
+
+ @FXML
+ private ComboBox word2;
+
+ @FXML
+ private ComboBox word3;
+
+ @FXML
+ private ComboBox word4;
+
+ @FXML
+ private Label EngWord1;
+
+ @FXML
+ private Label EngWord2;
+
+ @FXML
+ private Label EngWord3;
+
+ @FXML
+ private Label EngWord4;
+
+ @FXML
+ private Label WelshWord1;
+
+ @FXML
+ private Label WelshWord2;
+
+ @FXML
+ private Label WelshWord3;
+
+ @FXML
+ private Label WelshWord4;
+
+ @FXML
+ private Label CorrectAnswer;
+
+ @FXML
+ private Label WrongAnswer;
+
+
+ /**
+ * Pick randomly dictionary entry and add it to question list where are stored questions for this test.
+ *
+ * @param dictionary main list of dictionary entries with words.
+ */
+ private void getQuestions(LinkedList dictionary){
+
+ boolean isDuplicate = false;
+
+ do{
+ int rand_q=rand.nextInt(dictionary.size()-1);
+
+ DictionaryEntry pickedQuestion = dictionary.get(rand_q);
+
+ //If size of list is greater than 1 check for duplicates...
+ if(setOfQuestions.size()>=1){
+
+ for (DictionaryEntry setOfQuestion : setOfQuestions) {
+
+ //If it is duplicate change isDuplicate to true and break
+ if (setOfQuestion.equals(pickedQuestion)) {
+ isDuplicate = true;
+ break;
+ }
+
+ }
+
+ //If duplicate wasn't found add entry to the list
+ if(!isDuplicate){
+ setOfQuestions.add(pickedQuestion);
+ }
+
+ //... otherwise, add entry to the
+ }else{
+ setOfQuestions.add(pickedQuestion);
+ }
+
+ isDuplicate =false;
+
+ }while(setOfQuestions.size()<5);
+ }
+
+ /**
+ * Set chosen words from dictionary on the scene.
+ *
+ * @param questions list of dictionary entries chosen for this test.
+ * @param orderList list of integers to change way of displaying welsh words.
+ */
+
+
+ private void setWords(LinkedList questions, ArrayList orderList){
+ EngWord1.setText(questions.get(0).getEnglish());
+ EngWord2.setText(questions.get(1).getEnglish());
+ EngWord3.setText(questions.get(2).getEnglish());
+ EngWord4.setText(questions.get(3).getEnglish());
+
+ Collections.shuffle(orderList);
+
+ WelshWord1.setText(questions.get(orderList.get(0)).getWelsh());
+ WelshWord2.setText(questions.get(orderList.get(1)).getWelsh());
+ WelshWord3.setText(questions.get(orderList.get(2)).getWelsh());
+ WelshWord4.setText(questions.get(orderList.get(3)).getWelsh());
+ }
+
+ /**
+ * Check if answers from users are correct.
+ */
+
+ public void checkAnswers(){
+ int w1 = Integer.parseInt(word1.getValue())-1;
+ int w2 = Integer.parseInt(word2.getValue())-1;
+ int w3 = Integer.parseInt(word3.getValue())-1;
+ int w4 = Integer.parseInt(word4.getValue())-1;
+
+ if(setOfQuestions.get(w1).getWelsh().equals(WelshWord1.getText())){
+ corAns++;
+ }else wrongAns++;
+
+ if(setOfQuestions.get(w2).getWelsh().equals(WelshWord2.getText())){
+ corAns++;
+ }else wrongAns++;
+
+ if(setOfQuestions.get(w3).getWelsh().equals(WelshWord3.getText())){
+ corAns++;
+ }else wrongAns++;
+
+ if(setOfQuestions.get(w4).getWelsh().equals(WelshWord4.getText())){
+ corAns++;
+ }else wrongAns++;
+
+ CorrectAnswer.setText(Integer.toString(corAns));
+
+ WrongAnswer.setText(Integer.toString(wrongAns));
+
+ setOfQuestions.clear();
+ this.prepare();
+
+ }
+
+ /**
+ * Method responsible for preparing questions and scene.
+ */
+ private void prepare(){
+ getQuestions(Main.dictionary);
+ setWords(setOfQuestions,orderList);
+ }
+
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+
+ this.prepare();
+
+ }
+}
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/Question.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/Question.java
new file mode 100644
index 0000000..0380d6e
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/Question.java
@@ -0,0 +1,24 @@
+package uk.ac.aber.cs22120.group20.selfassessment;
+
+import uk.ac.aber.cs22120.group20.json.WelshDictionary;
+
+/**
+ * Abstract class contains the basic information that all the shared information between the
+ * types of test questions including the questions’ correct answers and possible answers. All question
+ * classes will extend this class.
+ * @Author
+ * @Version
+ * @See
+ */
+public class Question {
+
+ /**
+ * Constructor for
+ * WordEnterQuestion that takes a WelshDictionary object that is being tested on as the parameter.
+ * @param correctAnswer
+ */
+ public wordEnterQuestion(WelshDictionary correctAnswer){
+
+ }
+
+}
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/TranslationController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/TranslationController.java
new file mode 100644
index 0000000..99fb81f
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/TranslationController.java
@@ -0,0 +1,144 @@
+package uk.ac.aber.cs22120.group20.selfassessment;
+
+import javafx.fxml.FXML;
+import javafx.scene.control.TextField;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.text.Text;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+
+/**
+ * Controller for the translationTest fxml file.
+ *
+ * @author Brad Corbett brc9
+ * @version 0.9
+ *
+ */
+public class TranslationController {
+ ArrayList practiceList = new ArrayList<>();
+
+
+ /**
+ * Represents the words that have already been used, and are no longer to be generated.
+ */
+ ArrayList numbersUsed = new ArrayList();
+ int correctGuessesInt = 0;
+ int incorrectGuessesInt = 0;
+
+ /**
+ * Represents the word that will be randomly chosen from the practiceList.
+ */
+ int chosenWord = 0;
+ @FXML
+ private TextField translationBox;
+
+ @FXML
+ private Text typeOfTest;
+
+ @FXML
+ private Text wordToTranslate;
+
+ @FXML
+ private Text correctGuesses;
+
+ @FXML
+ private Text incorrectGuesses;
+
+ @FXML
+ private ImageView submitButton;
+
+ Random rand = new Random();
+
+
+ boolean englishOrWelsh = false; // False means English to Welsh, true means Welsh to English
+
+
+ /**
+ * Loads the test for the first time, filling the practice list with words from the dictionary,
+ * deciding if this test will be from English to Welsh or Welsh to English, and generating
+ * which is the first word the user will have to translate.
+ */
+ @FXML
+ private void initialize(){
+
+ submitButton.setImage(new Image ("file:src/main/resources/assets/right-icon.png"));
+
+ for(DictionaryEntry entry : App.dictionary){
+ if(entry.isPracticeWord()){
+ practiceList.add(entry);
+ }
+ }
+
+
+ chosenWord = (rand.nextInt(practiceList.size()));
+ numbersUsed.add(chosenWord);
+
+ englishOrWelsh = rand.nextBoolean();
+
+ correctGuesses.setText("Correct Guesses: 0");
+ incorrectGuesses.setText("Incorrect Guesses: 0");
+
+ if(englishOrWelsh){
+ wordToTranslate.setText(practiceList.get(chosenWord).getEnglish());
+ }
+ else{
+ wordToTranslate.setText(practiceList.get(chosenWord).getWelsh());
+ }
+ }
+
+
+ /**
+ * Takes the word that the user has entered as their attempt at translate, compares
+ * it to the correct translation, and depending on if it is correct or not, increment how many
+ * right or wrong answers they have so far. After checking if the user got it right,
+ * it will generate a new word for the user to translate, provided they have words left to translate.
+ */
+ @FXML
+ void translateWord() {
+
+
+ if(englishOrWelsh) {
+ if (translationBox.getText().equals(practiceList.get(chosenWord).getWelsh())) {
+ correctGuessesInt++;
+ } else {
+ incorrectGuessesInt++;
+ }
+ }
+ else{
+ if (translationBox.getText().equals(practiceList.get(chosenWord).getEnglish())) {
+ correctGuessesInt++;
+ } else {
+ incorrectGuessesInt++;
+ }
+ }
+
+
+ correctGuesses.setText("Correct Guesses: " + correctGuessesInt);
+ incorrectGuesses.setText("Incorrect Guesses: " + incorrectGuessesInt);
+
+
+
+
+
+ do{
+ chosenWord = (rand.nextInt(practiceList.size()));
+ }while((numbersUsed.contains(chosenWord)) && numbersUsed.size() < practiceList.size());
+
+ numbersUsed.add(chosenWord);
+
+ if(numbersUsed.size() > practiceList.size()){
+ wordToTranslate.setText("Test Complete");
+ submitButton.setVisible(false);
+ }
+
+ if(englishOrWelsh){
+ wordToTranslate.setText(practiceList.get(chosenWord).getEnglish());
+ }
+ else{
+ wordToTranslate.setText(practiceList.get(chosenWord).getWelsh());
+ }
+ }
+}
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/JSONTest.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/JSONTest.java
new file mode 100644
index 0000000..5317909
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/JSONTest.java
@@ -0,0 +1,28 @@
+package uk.ac.aber.cs22120.group20.test;
+
+/**
+ * Class that contains methods which will be used to test that the JSON package classes are
+ * correctly loading and saving to and from the JSON file.
+ * @Author
+ * @Version
+ * @See
+ */
+public class JSONTest {
+
+ /**
+ * JUnit test to check that the JSON file has been correctly loaded.
+ */
+ @test public void testLoad(){
+
+ }
+
+ /**
+ * JUnit test to check that any changes to the list of definitions are
+ * updated and saved to the JSON file accordingly.
+ */
+ @test public void testSave(){
+
+ }
+
+
+}
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/JavaFXTest.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/JavaFXTest.java
new file mode 100644
index 0000000..bfcb8a1
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/JavaFXTest.java
@@ -0,0 +1,54 @@
+package uk.ac.aber.cs22120.group20.test;
+
+/**
+ * Class that contains methods to test that the application class is correctly storing the full
+ * list of dictionary definitions.
+ * Furthermore, this class will also test that the elements such as the sliding menu and score counter are
+ * working as intended, along with testing that scenes are ending and transitioning correctly when
+ * applicable.
+ * @Author
+ * @Version
+ * @See
+ */
+public class JavaFXTest {
+
+ /**
+ * Tests to confirm that the dictionary definitions loaded match to an
+ * identical base set.
+ */
+ @test public void testDefinition(){
+
+ }
+
+ /**
+ * Test to confirm that the user score counter correctly increases
+ * by increments on one.
+ */
+ @test public void testScoreCounter(){
+
+ }
+
+ /**
+ * A preset search test to confirm that words are being searched for
+ * correctly.
+ */
+ @test public void testFindWord(){
+
+ }
+
+ /**
+ * A test to check that a new word is correctly added and saved to
+ * the JSON file.
+ */
+ @test public void testAddWord(){
+
+ }
+
+ /**
+ *A test to check that the JSON file is correctly updated when a
+ * word is removed.
+ */
+ @test public void testRemoveWord(){
+
+ }
+}
diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/SelfAssesmentTest.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/SelfAssesmentTest.java
new file mode 100644
index 0000000..2c77981
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/SelfAssesmentTest.java
@@ -0,0 +1,36 @@
+package uk.ac.aber.cs22120.group20.test;
+
+/**
+ * This class will test that the lists pulled in the self-assessment package are indeed
+ * random, while also pulling the matching data from the dictionary.
+ * @Author
+ * @Version
+ * @See
+ */
+public class SelfAssesmentTest {
+
+ /**
+ * Test to confirm that the random number return is working
+ * correctly.
+ */
+ @test
+ public void testRandomReturn(){
+
+ }
+
+ /**
+ * Test to check and confirm that the game types are
+ * either made available or are locked off depending on the number of practice list questions.
+ */
+ @test
+ public void testAvailableSelfAssessment(){
+
+ }
+
+ /**
+ * Test that will check that an input by a user is correctly checked
+ * to the correct answer.
+ */
+ @test
+ public void testUserAnswer(){}
+}
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/add-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/add-100.png
new file mode 100644
index 0000000..573d9c4
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/add-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/checkmark-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/checkmark-100.png
new file mode 100644
index 0000000..8da1f05
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/checkmark-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/flashcard-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/flashcard-100.png
new file mode 100644
index 0000000..2ffa928
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/flashcard-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/info-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/info-100.png
new file mode 100644
index 0000000..d50775d
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/info-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/left-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/left-100.png
new file mode 100644
index 0000000..2f709c4
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/left-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/menu-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/menu-100.png
new file mode 100644
index 0000000..a8e3441
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/menu-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/pass-fail-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/pass-fail-100.png
new file mode 100644
index 0000000..a2e5c49
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/pass-fail-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/rating-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/rating-100.png
new file mode 100644
index 0000000..d9f29b3
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/rating-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/read-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/read-100.png
new file mode 100644
index 0000000..30a0d48
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/read-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/right-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/right-100.png
new file mode 100644
index 0000000..29f1dea
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/right-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/search-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/search-100.png
new file mode 100644
index 0000000..ea2b8f3
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/search-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/sort-alpha-up-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/sort-alpha-up-100.png
new file mode 100644
index 0000000..b3520ea
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/sort-alpha-up-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/sort-alpha-up-reversed-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/sort-alpha-up-reversed-100.png
new file mode 100644
index 0000000..3727c2a
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/sort-alpha-up-reversed-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/sort-lang-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/sort-lang-100.png
new file mode 100644
index 0000000..14efe51
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/sort-lang-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/upload-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/upload-100.png
new file mode 100644
index 0000000..bc712af
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/100px/upload-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/add-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/add-50.png
new file mode 100644
index 0000000..8c08d4e
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/add-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/checkmark-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/checkmark-50.png
new file mode 100644
index 0000000..385b813
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/checkmark-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/flashcard-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/flashcard-50.png
new file mode 100644
index 0000000..1f154a3
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/flashcard-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/info-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/info-50.png
new file mode 100644
index 0000000..9423376
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/info-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/left-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/left-50.png
new file mode 100644
index 0000000..e0812e9
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/left-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/menu-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/menu-50.png
new file mode 100644
index 0000000..84032a1
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/menu-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/pass-fail-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/pass-fail-50.png
new file mode 100644
index 0000000..76cf680
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/pass-fail-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/rating-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/rating-50.png
new file mode 100644
index 0000000..0aa64b8
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/rating-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/read-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/read-50.png
new file mode 100644
index 0000000..ac2e1af
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/read-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/right-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/right-50.png
new file mode 100644
index 0000000..51fbe5d
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/right-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/search-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/search-50.png
new file mode 100644
index 0000000..eb4d71e
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/search-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png
new file mode 100644
index 0000000..e618bb9
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png
new file mode 100644
index 0000000..d00ae5e
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/sort-lang-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/sort-lang-50.png
new file mode 100644
index 0000000..5af104e
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/sort-lang-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/upload-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/upload-50.png
new file mode 100644
index 0000000..4f56812
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/black_icons/50px/upload-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/add-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/add-100.png
new file mode 100644
index 0000000..6f84bed
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/add-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/checkmark-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/checkmark-100.png
new file mode 100644
index 0000000..4d59944
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/checkmark-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/flashcard-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/flashcard-100.png
new file mode 100644
index 0000000..1b8dd83
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/flashcard-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/info-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/info-100.png
new file mode 100644
index 0000000..3289a46
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/info-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/left-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/left-100.png
new file mode 100644
index 0000000..567e93c
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/left-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/menu-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/menu-100.png
new file mode 100644
index 0000000..f69373b
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/menu-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/pass-fail-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/pass-fail-100.png
new file mode 100644
index 0000000..ffafc0b
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/pass-fail-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/rating-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/rating-100.png
new file mode 100644
index 0000000..6dbb4ca
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/rating-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/read-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/read-100.png
new file mode 100644
index 0000000..4427f99
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/read-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/right-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/right-100.png
new file mode 100644
index 0000000..738a722
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/right-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/search-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/search-100.png
new file mode 100644
index 0000000..ae16e70
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/search-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/sort-alpha-up-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/sort-alpha-up-100.png
new file mode 100644
index 0000000..e6b1b71
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/sort-alpha-up-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/sort-alpha-up-reversed-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/sort-alpha-up-reversed-100.png
new file mode 100644
index 0000000..f090f86
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/sort-alpha-up-reversed-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/sort-lang-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/sort-lang-100.png
new file mode 100644
index 0000000..9f58324
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/sort-lang-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/upload-100.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/upload-100.png
new file mode 100644
index 0000000..cc95603
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/100px/upload-100.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/add-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/add-50.png
new file mode 100644
index 0000000..5351d3d
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/add-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/checkmark-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/checkmark-50.png
new file mode 100644
index 0000000..6c50d5e
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/checkmark-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/flashcard-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/flashcard-50.png
new file mode 100644
index 0000000..f7bb717
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/flashcard-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/info-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/info-50.png
new file mode 100644
index 0000000..d4aec60
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/info-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/left-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/left-50.png
new file mode 100644
index 0000000..6aac298
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/left-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/menu-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/menu-50.png
new file mode 100644
index 0000000..197e864
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/menu-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/pass-fail-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/pass-fail-50.png
new file mode 100644
index 0000000..0432050
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/pass-fail-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/rating-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/rating-50.png
new file mode 100644
index 0000000..aaa0a28
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/rating-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/read-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/read-50.png
new file mode 100644
index 0000000..4be8c37
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/read-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/right-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/right-50.png
new file mode 100644
index 0000000..16d2770
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/right-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/search-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/search-50.png
new file mode 100644
index 0000000..de073eb
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/search-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/sort-alpha-up-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/sort-alpha-up-50.png
new file mode 100644
index 0000000..eee3af2
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/sort-alpha-up-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/sort-alpha-up-reversed-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/sort-alpha-up-reversed-50.png
new file mode 100644
index 0000000..0ccc2f4
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/sort-alpha-up-reversed-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/sort-lang-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/sort-lang-50.png
new file mode 100644
index 0000000..7be4c9b
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/sort-lang-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/upload-50.png b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/upload-50.png
new file mode 100644
index 0000000..de066f7
Binary files /dev/null and b/src/Welsh Vocabulary Tutor/src/main/resources/assets/icons/white_icons/50px/upload-50.png differ
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/addword.fxml b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/addword.fxml
new file mode 100644
index 0000000..5da57b9
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/addword.fxml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/dictionary.fxml b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/dictionary.fxml
new file mode 100644
index 0000000..0b33364
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/dictionary.fxml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/matchthemeaning.fxml b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/matchthemeaning.fxml
new file mode 100644
index 0000000..3f454aa
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/matchthemeaning.fxml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/practicelist.fxml b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/practicelist.fxml
new file mode 100644
index 0000000..74e37e3
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/practicelist.fxml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/primary.fxml b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/primary.fxml
index e2ba159..8c716fe 100644
--- a/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/primary.fxml
+++ b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/primary.fxml
@@ -5,7 +5,7 @@
-
+
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/secondary.fxml b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/secondary.fxml
index 3e1a950..561ddf0 100644
--- a/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/secondary.fxml
+++ b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/secondary.fxml
@@ -5,7 +5,7 @@
-
+
diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/translation.fxml b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/translation.fxml
new file mode 100644
index 0000000..7210bb1
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/translation.fxml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Welsh Vocabulary Tutor/target/classes/uk/ac/aber/cs22120/group20/addWord.fxml b/src/Welsh Vocabulary Tutor/target/classes/uk/ac/aber/cs22120/group20/addWord.fxml
new file mode 100644
index 0000000..5da57b9
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/target/classes/uk/ac/aber/cs22120/group20/addWord.fxml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Welsh Vocabulary Tutor/target/classes/uk/ac/aber/cs22120/group20/dictionary.fxml b/src/Welsh Vocabulary Tutor/target/classes/uk/ac/aber/cs22120/group20/dictionary.fxml
new file mode 100644
index 0000000..b4c8210
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/target/classes/uk/ac/aber/cs22120/group20/dictionary.fxml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Welsh Vocabulary Tutor/target/classes/uk/ac/aber/cs22120/group20/practicelist.fxml b/src/Welsh Vocabulary Tutor/target/classes/uk/ac/aber/cs22120/group20/practicelist.fxml
new file mode 100644
index 0000000..3616d5c
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/target/classes/uk/ac/aber/cs22120/group20/practicelist.fxml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+