Merge branch 'master' of https://gitlab.dcs.aber.ac.uk/ncw/gp20
This commit is contained in:
commit
3cdaa7d442
23 changed files with 724 additions and 361 deletions
|
@ -17,6 +17,6 @@ module uk.ac.aber.cs22120.group20 {
|
||||||
|
|
||||||
exports uk.ac.aber.cs22120.group20.json to com.fasterxml.jackson.databind;
|
exports uk.ac.aber.cs22120.group20.json to com.fasterxml.jackson.databind;
|
||||||
exports uk.ac.aber.cs22120.group20.javafx to javafx.graphics, javafx.fxml;
|
exports uk.ac.aber.cs22120.group20.javafx to javafx.graphics, javafx.fxml;
|
||||||
exports uk.ac.aber.cs22120.group20.test to org.junit.jupiter;
|
exports uk.ac.aber.cs22120.group20.test to org.junit.jupiter, org.testfx;
|
||||||
// exports uk.ac.aber.cs22120.group20.test to junit;
|
// exports uk.ac.aber.cs22120.group20.test to junit;
|
||||||
}
|
}
|
|
@ -89,15 +89,15 @@ public class AddWordController extends SharedCodeController {
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
protected void addButtonClick(ActionEvent actionEvent) {
|
protected void addButtonClick(ActionEvent actionEvent) {
|
||||||
String trueWordType;
|
DictionaryEntry.wordTypeEnum trueWordType;
|
||||||
if (wordType.getValue() == "Masculine noun") {
|
if (wordType.getValue() == "Masculine noun") {
|
||||||
trueWordType = "nm";
|
trueWordType = DictionaryEntry.wordTypeEnum.nm;
|
||||||
} else if (wordType.getValue() == "Feminine noun") {
|
} else if (wordType.getValue() == "Feminine noun") {
|
||||||
trueWordType = "nf";
|
trueWordType = DictionaryEntry.wordTypeEnum.nf;
|
||||||
} else if (wordType.getValue() == "Verb") {
|
} else if (wordType.getValue() == "Verb") {
|
||||||
trueWordType = "verb";
|
trueWordType = DictionaryEntry.wordTypeEnum.verb;
|
||||||
} else {
|
} else {
|
||||||
trueWordType = "other";
|
trueWordType = DictionaryEntry.wordTypeEnum.other;
|
||||||
}
|
}
|
||||||
boolean entryFound = false;
|
boolean entryFound = false;
|
||||||
// test for one or more blank fields and if there is create the correct error dialogue box
|
// test for one or more blank fields and if there is create the correct error dialogue box
|
||||||
|
@ -140,6 +140,7 @@ public class AddWordController extends SharedCodeController {
|
||||||
dictionaryEntry.setPracticeWord(true);
|
dictionaryEntry.setPracticeWord(true);
|
||||||
Application.dictionary.contains(dictionaryEntry);
|
Application.dictionary.contains(dictionaryEntry);
|
||||||
Application.dictionary.add(dictionaryEntry);
|
Application.dictionary.add(dictionaryEntry);
|
||||||
|
Application.practiceList.add(dictionaryEntry);
|
||||||
|
|
||||||
|
|
||||||
//Resets values to blank for next word to be entered
|
//Resets values to blank for next word to be entered
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
/**
|
/**
|
||||||
* @(#) App.java 0,1 2020/04/07
|
* @(#) Application.java 0,2 2020/04/30
|
||||||
* <p>
|
* <p>
|
||||||
* Copyright (c) 2020 Aberystwyth University.
|
* Copyright (c) 2020 Aberystwyth University.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*/
|
*/
|
||||||
package uk.ac.aber.cs22120.group20.javafx;
|
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.FileChooser;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
||||||
|
@ -16,9 +13,7 @@ import uk.ac.aber.cs22120.group20.json.JsonProcessing;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.Scanner;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class that launches the Welsh Vocabulary tutor Application.
|
* A class that launches the Welsh Vocabulary tutor Application.
|
||||||
|
@ -31,89 +26,50 @@ import java.util.Scanner;
|
||||||
* @author Oscar Pocock [osp1]
|
* @author Oscar Pocock [osp1]
|
||||||
* @author Waylen Watts [ncw]
|
* @author Waylen Watts [ncw]
|
||||||
* @author Luke Wybar [law39]
|
* @author Luke Wybar [law39]
|
||||||
*
|
|
||||||
* @version 0.1 Initial development
|
* @version 0.1 Initial development
|
||||||
*/
|
*/
|
||||||
public class Application extends javafx.application.Application {
|
public class Application extends javafx.application.Application {
|
||||||
|
|
||||||
|
// Dictionary containing all the words.
|
||||||
private JsonProcessing jsonProcessing = new JsonProcessing();
|
|
||||||
private Scanner scanner = new Scanner(System.in);
|
|
||||||
|
|
||||||
public static LinkedList<DictionaryEntry> dictionary = new LinkedList<>();
|
public static LinkedList<DictionaryEntry> dictionary = new LinkedList<>();
|
||||||
public static LinkedList<DictionaryEntry> practiseList = new LinkedList<>();
|
|
||||||
|
// Practice list containing all the practice words.
|
||||||
|
public static LinkedList<DictionaryEntry> practiceList = new LinkedList<>();
|
||||||
|
|
||||||
|
// Json processor to import and export the json dictionary file.
|
||||||
|
private JsonProcessing jsonProcessing = new JsonProcessing();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @param stage
|
|
||||||
* @throws IOException
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void start(Stage stage) throws IOException {
|
|
||||||
Scene scene;
|
|
||||||
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);
|
|
||||||
for (DictionaryEntry entry : dictionary) {
|
|
||||||
if (entry.isPracticeWord()) {
|
|
||||||
practiseList.add(entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 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));
|
|
||||||
new ScreenSwitch(stage);
|
|
||||||
// scene = new Scene(loadFXML("dictionary"));
|
|
||||||
// stage.setScene(scene);
|
|
||||||
// stage.setOnCloseRequest(e -> {
|
|
||||||
// jsonProcessing.writeOutJson(jsonFileLocation, dictionary);
|
|
||||||
// Platform.exit();
|
|
||||||
// System.exit(0);
|
|
||||||
// });
|
|
||||||
// stage.show();
|
|
||||||
// ScreenSwitch.setScene(scene);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Please now use ScreenSwitch swap method with SceneEnum
|
|
||||||
* @param fxml
|
|
||||||
* @throws IOException
|
|
||||||
* @see ScreenSwitch
|
|
||||||
* @see ScreenSwitch.SceneEnum
|
|
||||||
*/
|
|
||||||
static void setRoot(String fxml) throws IOException {
|
|
||||||
ScreenSwitch.swap(ScreenSwitch.SceneEnum.dictionaryScene);
|
|
||||||
}
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// *
|
|
||||||
// * @param fxml
|
|
||||||
// * @return
|
|
||||||
// * @throws IOException
|
|
||||||
// */
|
|
||||||
// private static Parent loadFXML(String fxml) throws IOException {
|
|
||||||
//// FXMLLoader fxmlLoader = new FXMLLoader(Application.class.getResource(fxml + ".fxml"));
|
|
||||||
// FXMLLoader fxmlLoader = new FXMLLoader(new URL("file:src/main/resources/uk/ac/aber/cs22120/group20/" + fxml + ".fxml"));
|
|
||||||
// return fxmlLoader.load();
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param args
|
* @param args
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
launch();
|
launch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param stage
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void start(Stage stage) throws IOException {
|
||||||
|
|
||||||
|
// Prompts the user to load their dictionary json file.
|
||||||
|
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);
|
||||||
|
|
||||||
|
// Adds all words that are practice words to the practice list.
|
||||||
|
for (DictionaryEntry entry : dictionary) {
|
||||||
|
if (entry.isPracticeWord()) {
|
||||||
|
practiceList.add(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
new ScreenSwitch(stage);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -12,7 +12,6 @@ import javafx.collections.ObservableList;
|
||||||
import javafx.collections.transformation.FilteredList;
|
import javafx.collections.transformation.FilteredList;
|
||||||
import javafx.collections.transformation.SortedList;
|
import javafx.collections.transformation.SortedList;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.Initializable;
|
|
||||||
import javafx.scene.control.TableColumn;
|
import javafx.scene.control.TableColumn;
|
||||||
import javafx.scene.control.TableRow;
|
import javafx.scene.control.TableRow;
|
||||||
import javafx.scene.control.TableView;
|
import javafx.scene.control.TableView;
|
||||||
|
@ -21,13 +20,9 @@ import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import uk.ac.aber.cs22120.group20.javafx.Application;
|
|
||||||
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.ResourceBundle;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class that handles the keyboard and mouse input and interaction for the 'Dictionary Page' which is
|
* A class that handles the keyboard and mouse input and interaction for the 'Dictionary Page' which is
|
||||||
|
@ -69,7 +64,7 @@ public class DictionaryController extends SharedCodeController {
|
||||||
*/
|
*/
|
||||||
@FXML
|
@FXML
|
||||||
private void switchLangSort() {
|
private void switchLangSort() {
|
||||||
if (table.getSortOrder().contains(english)) {
|
if (isSortedByEnglish) {
|
||||||
if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) {
|
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"));
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
|
||||||
}
|
}
|
||||||
|
@ -78,8 +73,10 @@ public class DictionaryController extends SharedCodeController {
|
||||||
}
|
}
|
||||||
table.getSortOrder().clear();
|
table.getSortOrder().clear();
|
||||||
table.getSortOrder().add(welsh);
|
table.getSortOrder().add(welsh);
|
||||||
|
|
||||||
|
isSortedByEnglish = false;
|
||||||
}
|
}
|
||||||
else if (table.getSortOrder().contains(welsh)) {
|
else {
|
||||||
if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) {
|
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"));
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
|
||||||
}
|
}
|
||||||
|
@ -88,8 +85,10 @@ public class DictionaryController extends SharedCodeController {
|
||||||
}
|
}
|
||||||
table.getSortOrder().clear();
|
table.getSortOrder().clear();
|
||||||
table.getSortOrder().add(english);
|
table.getSortOrder().add(english);
|
||||||
|
isSortedByEnglish = true;
|
||||||
}
|
}
|
||||||
table.sort();
|
table.sort();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -160,16 +159,16 @@ public class DictionaryController extends SharedCodeController {
|
||||||
if (row.getItem().isPracticeWord()) {
|
if (row.getItem().isPracticeWord()) {
|
||||||
Application.dictionary.get(list.indexOf(row.getItem())).setPracticeWord(false);
|
Application.dictionary.get(list.indexOf(row.getItem())).setPracticeWord(false);
|
||||||
ArrayList<DictionaryEntry> toRemove = new ArrayList<DictionaryEntry>();
|
ArrayList<DictionaryEntry> toRemove = new ArrayList<DictionaryEntry>();
|
||||||
for (DictionaryEntry entry : Application.practiseList) {
|
for (DictionaryEntry entry : Application.practiceList) {
|
||||||
if (entry.equals(row.getItem())) {
|
if (entry.equals(row.getItem())) {
|
||||||
toRemove.add(entry);
|
toRemove.add(entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Application.practiseList.removeAll(toRemove);
|
Application.practiceList.removeAll(toRemove);
|
||||||
// row.getItem().setPracticeWord(false);
|
// row.getItem().setPracticeWord(false);
|
||||||
} else if (!row.getItem().isPracticeWord()) {
|
} else if (!row.getItem().isPracticeWord()) {
|
||||||
Application.dictionary.get(list.indexOf(row.getItem())).setPracticeWord(true);
|
Application.dictionary.get(list.indexOf(row.getItem())).setPracticeWord(true);
|
||||||
Application.practiseList.add(row.getItem());
|
Application.practiceList.add(row.getItem());
|
||||||
// row.getItem().setPracticeWord(true);
|
// row.getItem().setPracticeWord(true);
|
||||||
}
|
}
|
||||||
table.getSelectionModel().clearSelection();
|
table.getSelectionModel().clearSelection();
|
||||||
|
@ -179,9 +178,9 @@ public class DictionaryController extends SharedCodeController {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
welsh.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
|
welsh.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
|
||||||
if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nm")) {
|
if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals(DictionaryEntry.wordTypeEnum.nm)) {
|
||||||
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nm}");
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nm}");
|
||||||
} else if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nf")) {
|
} else if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals(DictionaryEntry.wordTypeEnum.nf)) {
|
||||||
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nf}");
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nf}");
|
||||||
} else {
|
} else {
|
||||||
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh());
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh());
|
||||||
|
@ -189,7 +188,7 @@ public class DictionaryController extends SharedCodeController {
|
||||||
});
|
});
|
||||||
|
|
||||||
english.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
|
english.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
|
||||||
if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("verb")) {
|
if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals(DictionaryEntry.wordTypeEnum.verb)) {
|
||||||
return new SimpleStringProperty("to " + dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
|
return new SimpleStringProperty("to " + dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
|
||||||
} else {
|
} else {
|
||||||
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
|
||||||
|
@ -215,7 +214,7 @@ public class DictionaryController extends SharedCodeController {
|
||||||
result = true; // Filter matches English
|
result = true; // Filter matches English
|
||||||
// } else if (dictionaryEntry.getWordType().toLowerCase().contains(lowerCaseSearchFilter)) {
|
// } else if (dictionaryEntry.getWordType().toLowerCase().contains(lowerCaseSearchFilter)) {
|
||||||
// result = true; // Filter matches Word Type
|
// result = true; // Filter matches Word Type
|
||||||
} else if (dictionaryEntry.getWordType().equals("verb") && ("to " + dictionaryEntry.getEnglish()).toLowerCase().contains(lowerCaseSearchFilter)) {
|
} else if (dictionaryEntry.getWordType().equals(DictionaryEntry.wordTypeEnum.verb) && ("to " + dictionaryEntry.getEnglish()).toLowerCase().contains(lowerCaseSearchFilter)) {
|
||||||
result = true; // Filter matches ['to' + a word] or [a word] if word is a verb
|
result = true; // Filter matches ['to' + a word] or [a word] if word is a verb
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -229,7 +228,12 @@ public class DictionaryController extends SharedCodeController {
|
||||||
// english.setCellValueFactory(new PropertyValueFactory<DictionaryEntry, String>("english"));
|
// english.setCellValueFactory(new PropertyValueFactory<DictionaryEntry, String>("english"));
|
||||||
|
|
||||||
table.setItems(sortedList);
|
table.setItems(sortedList);
|
||||||
table.getSortOrder().add(english);
|
|
||||||
|
if(isSortedByEnglish){
|
||||||
|
table.getSortOrder().add(english);
|
||||||
|
} else{
|
||||||
|
table.getSortOrder().add(welsh);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,10 +45,10 @@ public class FlashcardController extends SharedCodeController {
|
||||||
@FXML
|
@FXML
|
||||||
private Text wordType;
|
private Text wordType;
|
||||||
@FXML
|
@FXML
|
||||||
private Rectangle flashcard;
|
|
||||||
@FXML
|
|
||||||
private Text testWord;
|
private Text testWord;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ImageView flashcard;
|
||||||
@FXML
|
@FXML
|
||||||
private ImageView leftArrow;
|
private ImageView leftArrow;
|
||||||
@FXML
|
@FXML
|
||||||
|
@ -71,14 +71,19 @@ public class FlashcardController extends SharedCodeController {
|
||||||
flashcardIcon.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/flashcard-50.png"));
|
flashcardIcon.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/flashcard-50.png"));
|
||||||
flashcardsText.setFill(Color.BLACK);
|
flashcardsText.setFill(Color.BLACK);
|
||||||
|
|
||||||
testWord.setText(Application.practiseList.getFirst().getWelsh());
|
if(isSortedByEnglish){
|
||||||
wordType.setText("Welsh");
|
testWord.setText(Application.practiceList.getFirst().getEnglish());
|
||||||
|
wordType.setText("English");
|
||||||
|
} else{
|
||||||
|
testWord.setText(Application.practiceList.getFirst().getWelsh());
|
||||||
|
wordType.setText("Welsh");
|
||||||
|
}
|
||||||
|
|
||||||
updateCounter();
|
updateCounter();
|
||||||
card = flashcard;
|
card = flashcard;
|
||||||
|
flashcard.setImage(new Image("file:src/main/resources/assets/flashcard/Flashcard.png"));
|
||||||
leftArrow.setImage(new Image(getClass().getResourceAsStream("/assets/icons/black_icons/50px/left-50.png")));
|
leftArrow.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/left-50.png"));
|
||||||
rightArrow.setImage(new Image(getClass().getResourceAsStream("/assets/icons/black_icons/50px/right-50.png")));
|
rightArrow.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/right-50.png"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -103,8 +108,14 @@ public class FlashcardController extends SharedCodeController {
|
||||||
index--;
|
index--;
|
||||||
}
|
}
|
||||||
updateCounter();
|
updateCounter();
|
||||||
testWord.setText(Application.practiseList.get(index).getWelsh());
|
|
||||||
wordType.setText("Welsh");
|
if(isSortedByEnglish){
|
||||||
|
testWord.setText(Application.practiceList.get(index).getEnglish());
|
||||||
|
wordType.setText("English");
|
||||||
|
} else{
|
||||||
|
testWord.setText(Application.practiceList.get(index).getWelsh());
|
||||||
|
wordType.setText("Welsh");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -115,13 +126,19 @@ public class FlashcardController extends SharedCodeController {
|
||||||
@FXML
|
@FXML
|
||||||
private void handleNextCard() {
|
private void handleNextCard() {
|
||||||
// If statement to check the end of the practiceList hasn't been reached before moving to the next card.
|
// If statement to check the end of the practiceList hasn't been reached before moving to the next card.
|
||||||
if (index < Application.practiseList.size()-1) {
|
if (index < Application.practiceList.size()-1) {
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
updateCounter();
|
updateCounter();
|
||||||
|
|
||||||
testWord.setText(Application.practiseList.get(index).getWelsh());
|
if(isSortedByEnglish){
|
||||||
wordType.setText("Welsh");
|
testWord.setText(Application.practiceList.get(index).getEnglish());
|
||||||
|
wordType.setText("English");
|
||||||
|
} else{
|
||||||
|
testWord.setText(Application.practiceList.get(index).getWelsh());
|
||||||
|
wordType.setText("Welsh");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -130,7 +147,7 @@ public class FlashcardController extends SharedCodeController {
|
||||||
* @see DictionaryEntry
|
* @see DictionaryEntry
|
||||||
*/
|
*/
|
||||||
private void updateCounter() {
|
private void updateCounter() {
|
||||||
counter.setText((index + 1) + "/" + Application.practiseList.size());
|
counter.setText((index + 1) + "/" + Application.practiceList.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -157,10 +174,10 @@ public class FlashcardController extends SharedCodeController {
|
||||||
rotate.setOnFinished(event -> { // Once the transition is completed, update the text on the flashcard.
|
rotate.setOnFinished(event -> { // Once the transition is completed, update the text on the flashcard.
|
||||||
|
|
||||||
if (wordType.getText().equals("Welsh")) { // If the word currently on the flashcard is welsh, display the english translation.
|
if (wordType.getText().equals("Welsh")) { // If the word currently on the flashcard is welsh, display the english translation.
|
||||||
testWord.setText(Application.practiseList.get(index).getEnglish());
|
testWord.setText(Application.practiceList.get(index).getEnglish());
|
||||||
wordType.setText("English");
|
wordType.setText("English");
|
||||||
} else { // Else display the welsh translation.
|
} else { // Else display the welsh translation.
|
||||||
testWord.setText(Application.practiseList.get(index).getWelsh());
|
testWord.setText(Application.practiceList.get(index).getWelsh());
|
||||||
wordType.setText("Welsh");
|
wordType.setText("Welsh");
|
||||||
}
|
}
|
||||||
testWord.setVisible(true);
|
testWord.setVisible(true);
|
||||||
|
|
|
@ -8,6 +8,7 @@ package uk.ac.aber.cs22120.group20.javafx;
|
||||||
|
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.ComboBox;
|
import javafx.scene.control.ComboBox;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
|
@ -133,29 +134,57 @@ public class MatchTheMeaningController extends SharedCodeController {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public void checkAnswers(){
|
public void checkAnswers(){
|
||||||
|
ArrayList<DictionaryEntry> answers = new ArrayList<>();
|
||||||
ArrayList<String> listOfAnswers = new ArrayList<>();
|
ArrayList<String> listOfAnswers = new ArrayList<>();
|
||||||
|
|
||||||
|
answers.add(answer.get(Integer.parseInt(word1.getValue())-1));
|
||||||
|
answers.add(answer.get(Integer.parseInt(word2.getValue())-1));
|
||||||
|
answers.add(answer.get(Integer.parseInt(word3.getValue())-1));
|
||||||
|
answers.add(answer.get(Integer.parseInt(word4.getValue())-1));
|
||||||
|
|
||||||
if(isEnglish){
|
if(isEnglish){
|
||||||
listOfAnswers.add(RightWord1.getText());
|
|
||||||
listOfAnswers.add(RightWord2.getText());
|
|
||||||
listOfAnswers.add(RightWord3.getText());
|
|
||||||
listOfAnswers.add(RightWord4.getText());
|
|
||||||
}else {
|
|
||||||
listOfAnswers.add(LeftWord1.getText());
|
listOfAnswers.add(LeftWord1.getText());
|
||||||
listOfAnswers.add(LeftWord2.getText());
|
listOfAnswers.add(LeftWord2.getText());
|
||||||
listOfAnswers.add(LeftWord3.getText());
|
listOfAnswers.add(LeftWord3.getText());
|
||||||
listOfAnswers.add(LeftWord4.getText());
|
listOfAnswers.add(LeftWord4.getText());
|
||||||
|
|
||||||
|
|
||||||
|
}else {
|
||||||
|
listOfAnswers.add(RightWord1.getText());
|
||||||
|
listOfAnswers.add(RightWord2.getText());
|
||||||
|
listOfAnswers.add(RightWord3.getText());
|
||||||
|
listOfAnswers.add(RightWord4.getText());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Question.checkAnswer(answer,listOfAnswers,isEnglish);
|
if(checkForDuplicates(answers)){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Error");
|
||||||
|
alert.setHeaderText("Please check answers");
|
||||||
|
alert.setContentText("Please ensure you have selected answers for each test word, with no duplicates.");
|
||||||
|
alert.showAndWait();
|
||||||
|
}else {
|
||||||
|
|
||||||
|
Question.checkAnswer(answers, listOfAnswers, isEnglish);
|
||||||
|
|
||||||
|
|
||||||
answer.clear();
|
answer.clear();
|
||||||
AssessmentGenerator.goToNextQuestion();
|
AssessmentGenerator.goToNextQuestion();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
private boolean checkForDuplicates(ArrayList<DictionaryEntry> wordSet){
|
||||||
|
boolean result = false;
|
||||||
|
Set<DictionaryEntry> set = new HashSet<>(wordSet);
|
||||||
|
|
||||||
|
if(set.size() < wordSet.size()){
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@FXML
|
|
||||||
|
@FXML
|
||||||
private void initialize() {
|
private void initialize() {
|
||||||
setup();
|
setup();
|
||||||
currentPageIcon.setImage(new Image("file:src/main/resources/assets/icons/white_icons/50px/pass-fail-50.png"));
|
currentPageIcon.setImage(new Image("file:src/main/resources/assets/icons/white_icons/50px/pass-fail-50.png"));
|
||||||
|
@ -165,8 +194,8 @@ public class MatchTheMeaningController extends SharedCodeController {
|
||||||
studyText.setFill(Color.BLACK);
|
studyText.setFill(Color.BLACK);
|
||||||
|
|
||||||
setWords(answer,orderList);
|
setWords(answer,orderList);
|
||||||
CorrectAnswer.setText(Integer.toString(Question.correctAnswers));
|
CorrectAnswer.setText(Integer.toString(AssessmentGenerator.getTotalCorrectAnswers()));
|
||||||
WrongAnswer.setText(Integer.toString(Question.wrongAnswers));
|
WrongAnswer.setText(Integer.toString(AssessmentGenerator.getTotalAnswers()));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,20 +11,16 @@ import javafx.collections.FXCollections;
|
||||||
import javafx.collections.ObservableList;
|
import javafx.collections.ObservableList;
|
||||||
import javafx.collections.transformation.FilteredList;
|
import javafx.collections.transformation.FilteredList;
|
||||||
import javafx.collections.transformation.SortedList;
|
import javafx.collections.transformation.SortedList;
|
||||||
|
import javafx.css.converter.DurationConverter;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.Initializable;
|
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import uk.ac.aber.cs22120.group20.javafx.Application;
|
|
||||||
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.ResourceBundle;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class that handles the keyboard and mouse input and interaction for the 'Dictionary Page' which is
|
* A class that handles the keyboard and mouse input and interaction for the 'Dictionary Page' which is
|
||||||
|
@ -83,7 +79,7 @@ public class PracticeListController extends SharedCodeController{
|
||||||
langSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-lang-50.png"));
|
langSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-lang-50.png"));
|
||||||
|
|
||||||
// list.addAll(Application.dictionary);
|
// list.addAll(Application.dictionary);
|
||||||
list.addAll(Application.practiseList);
|
list.addAll(Application.practiceList);
|
||||||
// for (DictionaryEntry entry : Application.dictionary) {
|
// for (DictionaryEntry entry : Application.dictionary) {
|
||||||
// if (entry.isPracticeWord())
|
// if (entry.isPracticeWord())
|
||||||
// list.add(entry);
|
// list.add(entry);
|
||||||
|
@ -109,7 +105,7 @@ public class PracticeListController extends SharedCodeController{
|
||||||
result = true; // Filter matches English
|
result = true; // Filter matches English
|
||||||
// } else if (dictionaryEntry.getWordType().toLowerCase().contains(lowerCaseSearchFilter)) {
|
// } else if (dictionaryEntry.getWordType().toLowerCase().contains(lowerCaseSearchFilter)) {
|
||||||
// result = true; // Filter matches Word Type
|
// result = true; // Filter matches Word Type
|
||||||
} else if (dictionaryEntry.getWordType().equals("verb") && ("to " + dictionaryEntry.getEnglish()).toLowerCase().contains(lowerCaseSearchFilter)) {
|
} else if (dictionaryEntry.getWordType().equals(DictionaryEntry.wordTypeEnum.verb) && ("to " + dictionaryEntry.getEnglish()).toLowerCase().contains(lowerCaseSearchFilter)) {
|
||||||
result = true; // Filter matches ['to' + a word] or [a word] if word is a verb
|
result = true; // Filter matches ['to' + a word] or [a word] if word is a verb
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -150,13 +146,13 @@ public class PracticeListController extends SharedCodeController{
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList<DictionaryEntry> toRemove = new ArrayList<DictionaryEntry>();
|
ArrayList<DictionaryEntry> toRemove = new ArrayList<DictionaryEntry>();
|
||||||
for (DictionaryEntry entry : Application.practiseList) {
|
for (DictionaryEntry entry : Application.practiceList) {
|
||||||
if (entry.equals(row.getItem())) {
|
if (entry.equals(row.getItem())) {
|
||||||
toRemove.add(entry);
|
toRemove.add(entry);
|
||||||
list.remove(row.getItem());
|
list.remove(row.getItem());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Application.practiseList.removeAll(toRemove);
|
Application.practiceList.removeAll(toRemove);
|
||||||
table.getSelectionModel().clearSelection();
|
table.getSelectionModel().clearSelection();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -166,9 +162,9 @@ public class PracticeListController extends SharedCodeController{
|
||||||
|
|
||||||
welsh.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
|
welsh.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
|
||||||
|
|
||||||
if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nm")) {
|
if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals(DictionaryEntry.wordTypeEnum.nm)) {
|
||||||
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nm}");
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nm}");
|
||||||
} else if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nf")) {
|
} else if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals(DictionaryEntry.wordTypeEnum.nf)) {
|
||||||
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nf}");
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nf}");
|
||||||
} else {
|
} else {
|
||||||
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh());
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh());
|
||||||
|
@ -176,7 +172,7 @@ public class PracticeListController extends SharedCodeController{
|
||||||
});
|
});
|
||||||
|
|
||||||
english.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
|
english.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
|
||||||
if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("verb")) {
|
if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals(DictionaryEntry.wordTypeEnum.verb)) {
|
||||||
return new SimpleStringProperty("to " + dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
|
return new SimpleStringProperty("to " + dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
|
||||||
} else {
|
} else {
|
||||||
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
|
||||||
|
@ -184,12 +180,17 @@ public class PracticeListController extends SharedCodeController{
|
||||||
});
|
});
|
||||||
|
|
||||||
table.setItems(sortedList);
|
table.setItems(sortedList);
|
||||||
table.getSortOrder().add(english);
|
if(isSortedByEnglish){
|
||||||
|
table.getSortOrder().add(english);
|
||||||
|
} else{
|
||||||
|
table.getSortOrder().add(welsh);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void switchLangSort() {
|
private void switchLangSort() {
|
||||||
if (table.getSortOrder().contains(english)) {
|
if (isSortedByEnglish) {
|
||||||
if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) {
|
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"));
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
|
||||||
}
|
}
|
||||||
|
@ -198,8 +199,10 @@ public class PracticeListController extends SharedCodeController{
|
||||||
}
|
}
|
||||||
table.getSortOrder().clear();
|
table.getSortOrder().clear();
|
||||||
table.getSortOrder().add(welsh);
|
table.getSortOrder().add(welsh);
|
||||||
|
|
||||||
|
isSortedByEnglish = false;
|
||||||
}
|
}
|
||||||
else if (table.getSortOrder().contains(welsh)) {
|
else {
|
||||||
if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) {
|
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"));
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
|
||||||
}
|
}
|
||||||
|
@ -208,6 +211,8 @@ public class PracticeListController extends SharedCodeController{
|
||||||
}
|
}
|
||||||
table.getSortOrder().clear();
|
table.getSortOrder().clear();
|
||||||
table.getSortOrder().add(english);
|
table.getSortOrder().add(english);
|
||||||
|
|
||||||
|
isSortedByEnglish = true;
|
||||||
}
|
}
|
||||||
table.sort();
|
table.sort();
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
||||||
* @see AssessmentGenerator
|
* @see AssessmentGenerator
|
||||||
*/
|
*/
|
||||||
abstract public class SharedCodeController {
|
abstract public class SharedCodeController {
|
||||||
|
static boolean isSortedByEnglish = true;
|
||||||
static int sideBarWidth = 50;
|
static int sideBarWidth = 50;
|
||||||
|
|
||||||
// /////////////////// //
|
// /////////////////// //
|
||||||
|
@ -151,7 +151,7 @@ abstract public class SharedCodeController {
|
||||||
@FXML
|
@FXML
|
||||||
private void flashcardIconClick() {
|
private void flashcardIconClick() {
|
||||||
|
|
||||||
if(Application.practiseList.size() == 0) { // Check to see if there are any practice words before switching scene, throwing an alert notifying them that they can't switch scenes.
|
if(Application.practiceList.size() == 0) { // Check to see if there are any practice words before switching scene, throwing an alert notifying them that they can't switch scenes.
|
||||||
Alert alert = new Alert(Alert.AlertType.ERROR);
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
alert.setTitle("Error");
|
alert.setTitle("Error");
|
||||||
alert.setHeaderText("Unable to use Flashcard");
|
alert.setHeaderText("Unable to use Flashcard");
|
||||||
|
@ -170,7 +170,7 @@ abstract public class SharedCodeController {
|
||||||
*/
|
*/
|
||||||
@FXML
|
@FXML
|
||||||
private void studyIconClick() {
|
private void studyIconClick() {
|
||||||
AssessmentGenerator.generateAssessment(Application.practiseList);
|
AssessmentGenerator.generateAssessment(Application.practiceList);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -173,9 +173,9 @@ public class SixMeaningsController extends SharedCodeController {
|
||||||
|
|
||||||
setWords(allQuestions,orderList);
|
setWords(allQuestions,orderList);
|
||||||
|
|
||||||
correctAnswer.setText(Integer.toString(Question.correctAnswers));
|
correctAnswer.setText("Correct answers:" +Integer.toString(AssessmentGenerator.getTotalCorrectAnswers()));
|
||||||
|
|
||||||
wrongAnswer.setText(Integer.toString(Question.wrongAnswers));
|
wrongAnswer.setText("Total answers:" +Integer.toString(AssessmentGenerator.getTotalAnswers()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,8 +69,8 @@ public class TranslationController extends SharedCodeController{
|
||||||
|
|
||||||
submitButton.setImage(new Image ("file:src/main/resources/assets/icons/black_icons/50px/right-50.png"));
|
submitButton.setImage(new Image ("file:src/main/resources/assets/icons/black_icons/50px/right-50.png"));
|
||||||
|
|
||||||
correctGuesses.setText("Correct Guesses: " + Question.correctAnswers);
|
correctGuesses.setText("Correct answers: " + AssessmentGenerator.getTotalCorrectAnswers());
|
||||||
incorrectGuesses.setText("Incorrect Guesses: " + Question.wrongAnswers);
|
incorrectGuesses.setText("Total answers: " + AssessmentGenerator.getTotalAnswers());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,11 @@ import uk.ac.aber.cs22120.group20.javafx.DictionaryController;
|
||||||
public class DictionaryEntry {
|
public class DictionaryEntry {
|
||||||
private String english;
|
private String english;
|
||||||
private String welsh;
|
private String welsh;
|
||||||
private String wordType;
|
public enum wordTypeEnum {
|
||||||
|
nm, nf, verb, other
|
||||||
|
}
|
||||||
|
private wordTypeEnum wordType;
|
||||||
|
// private String wordType;
|
||||||
private Boolean practiceWord;
|
private Boolean practiceWord;
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,9 +50,10 @@ public class DictionaryEntry {
|
||||||
* @see Application
|
* @see Application
|
||||||
* @see DictionaryController
|
* @see DictionaryController
|
||||||
*/
|
*/
|
||||||
public DictionaryEntry(String english, String welsh, String wordType) {
|
public DictionaryEntry(String english, String welsh, wordTypeEnum wordType) {
|
||||||
this.english = english;
|
this.english = english;
|
||||||
this.welsh = welsh;
|
this.welsh = welsh;
|
||||||
|
// this.wordType = wordType;
|
||||||
this.wordType = wordType;
|
this.wordType = wordType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,15 +73,22 @@ public class DictionaryEntry {
|
||||||
this.welsh = welsh.trim();
|
this.welsh = welsh.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getWordType() {
|
public wordTypeEnum getWordType() {
|
||||||
return wordType;
|
return wordType;
|
||||||
}
|
}
|
||||||
|
// public word getWordType() {
|
||||||
|
// return wordType;
|
||||||
|
// }
|
||||||
|
|
||||||
public void setWordType(String wordType) {
|
public void setWordType(wordTypeEnum wordType) {
|
||||||
this.wordType = wordType.trim();
|
this.wordType = wordType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isPracticeWord() {
|
// public void setWordType(String wordType) {
|
||||||
|
// this.wordType = wordType;
|
||||||
|
// }
|
||||||
|
|
||||||
|
public Boolean isPracticeWord() {
|
||||||
return practiceWord;
|
return practiceWord;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,6 +99,8 @@ public class DictionaryEntry {
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object entry) {
|
public boolean equals(Object entry) {
|
||||||
DictionaryEntry otherEntry = (DictionaryEntry) entry;
|
DictionaryEntry otherEntry = (DictionaryEntry) entry;
|
||||||
return otherEntry.getEnglish().equals(this.getEnglish()) && otherEntry.getWelsh().equals(this.getWelsh()) && otherEntry.getWordType().equals(this.getWordType());
|
return otherEntry.getEnglish().equals(this.getEnglish()) &&
|
||||||
|
otherEntry.getWelsh().equals(this.getWelsh()) &&
|
||||||
|
otherEntry.getWordType().equals(this.getWordType());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import javafx.scene.control.ButtonType;
|
||||||
import uk.ac.aber.cs22120.group20.javafx.*;
|
import uk.ac.aber.cs22120.group20.javafx.*;
|
||||||
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,14 +15,30 @@ import java.util.*;
|
||||||
* Class that contains methods to create a randomised list of questions that will
|
* Class that contains methods to create a randomised list of questions that will
|
||||||
* contain a random distribution of question types.
|
* contain a random distribution of question types.
|
||||||
*
|
*
|
||||||
* @Author
|
* @author Brad Corbett [brc9]
|
||||||
* @Version
|
* @author Henry Dugmore [hjd3]
|
||||||
* @See
|
* @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 Question
|
||||||
|
* @See SixMeaningsQuestion
|
||||||
|
* @See TranslationQuestion
|
||||||
|
* @See MatchTheMeaningQuestion
|
||||||
|
* @See ScreenSwitch
|
||||||
|
* @See SixMeaningsController
|
||||||
|
* @See TranslationController
|
||||||
|
* @See MatchTheMeaningController
|
||||||
*/
|
*/
|
||||||
public class AssessmentGenerator {
|
public class AssessmentGenerator {
|
||||||
public static boolean isEnglish;
|
public static boolean isEnglish;
|
||||||
static LinkedList<Question> listOfAssessment = new LinkedList<>();
|
static LinkedList<Question> listOfAssessment = new LinkedList<>();
|
||||||
static int currentAssessment = 0;
|
static int currentAssessment = 0;
|
||||||
|
static int totalCorrectAnswers = 0;
|
||||||
|
static int totalAnswers = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method that will generate a randomized list of questions consisting of random distribution of questions
|
* Method that will generate a randomized list of questions consisting of random distribution of questions
|
||||||
|
@ -34,6 +51,8 @@ public class AssessmentGenerator {
|
||||||
LinkedList<Question> listOfAssessment = new LinkedList<>();
|
LinkedList<Question> listOfAssessment = new LinkedList<>();
|
||||||
Random rand = new Random();
|
Random rand = new Random();
|
||||||
|
|
||||||
|
reset();
|
||||||
|
|
||||||
//int wordToTranslatePlace;
|
//int wordToTranslatePlace;
|
||||||
|
|
||||||
if (practiseList.size()<5){
|
if (practiseList.size()<5){
|
||||||
|
@ -52,21 +71,20 @@ public class AssessmentGenerator {
|
||||||
case (0): //0 Means translation test.
|
case (0): //0 Means translation test.
|
||||||
//wordToTranslatePlace = rand.nextInt(Application.practiseList.size());
|
//wordToTranslatePlace = rand.nextInt(Application.practiseList.size());
|
||||||
//wordToTranslate = Application.practiseList.get(wordToTranslatePlace);
|
//wordToTranslate = Application.practiseList.get(wordToTranslatePlace);
|
||||||
if(!(listOfAssessment.getLast() == null) || (listOfAssessment.getLast() instanceof TranslationQuestion)){
|
if((listOfAssessment.isEmpty()) || !(listOfAssessment.getLast() instanceof TranslationQuestion)){
|
||||||
|
generatedAssessment = generateTranslationTest(practiseList);
|
||||||
|
}else {
|
||||||
numberToGenerate--;
|
numberToGenerate--;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
generatedAssessment = generateTranslationTest(practiseList);
|
|
||||||
break;
|
break;
|
||||||
case (1): //1 Means six meanings test.
|
case (1): //1 Means six meanings test.
|
||||||
//wordToTranslatePlace = rand.nextInt(Application.practiseList.size());
|
//wordToTranslatePlace = rand.nextInt(Application.practiseList.size());
|
||||||
//wordToTranslate = Application.practiseList.get(wordToTranslatePlace);
|
//wordToTranslate = Application.practiseList.get(wordToTranslatePlace);
|
||||||
if(!(listOfAssessment.getLast() == null) || (listOfAssessment.getLast() instanceof SixMeaningsQuestion)){
|
if(((listOfAssessment.isEmpty())) || !(listOfAssessment.getLast() instanceof SixMeaningsQuestion)){
|
||||||
|
generatedAssessment = generateSixMeanings(practiseList);
|
||||||
|
}else {
|
||||||
numberToGenerate--;
|
numberToGenerate--;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
generatedAssessment = generateSixMeanings(practiseList);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case (2): //2 Means match meanings test.
|
case (2): //2 Means match meanings test.
|
||||||
// LinkedList<DictionaryEntry> wordsToTranslate = new LinkedList<>();
|
// LinkedList<DictionaryEntry> wordsToTranslate = new LinkedList<>();
|
||||||
|
@ -75,15 +93,16 @@ public class AssessmentGenerator {
|
||||||
// wordsToTranslate.add(Application.practiseList.get(wordToTranslatePlace));
|
// wordsToTranslate.add(Application.practiseList.get(wordToTranslatePlace));
|
||||||
// wordsToTranslate.toArray();
|
// wordsToTranslate.toArray();
|
||||||
// }
|
// }
|
||||||
if(!(listOfAssessment.getLast() == null) || (listOfAssessment.getLast() instanceof MatchTheMeaningQuestion)){
|
if((listOfAssessment.isEmpty()) || !(listOfAssessment.getLast() instanceof MatchTheMeaningQuestion)){
|
||||||
|
generatedAssessment = generateMatchMeaning(practiseList);
|
||||||
|
}else {
|
||||||
numberToGenerate--;
|
numberToGenerate--;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
generatedAssessment = generateMatchMeaning(practiseList);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
listOfAssessment.add(generatedAssessment);
|
if(generatedAssessment != null) {
|
||||||
|
listOfAssessment.add(generatedAssessment);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
AssessmentGenerator.listOfAssessment = listOfAssessment;
|
AssessmentGenerator.listOfAssessment = listOfAssessment;
|
||||||
goToNextQuestion();
|
goToNextQuestion();
|
||||||
|
@ -150,7 +169,11 @@ public class AssessmentGenerator {
|
||||||
|
|
||||||
|
|
||||||
public static void goToNextQuestion() {
|
public static void goToNextQuestion() {
|
||||||
|
if (currentAssessment > 0){
|
||||||
|
Question.showFeedback();
|
||||||
|
}
|
||||||
if (currentAssessment < 10) {
|
if (currentAssessment < 10) {
|
||||||
|
|
||||||
Question currentQuestion = listOfAssessment.get(currentAssessment);
|
Question currentQuestion = listOfAssessment.get(currentAssessment);
|
||||||
|
|
||||||
if (currentQuestion instanceof MatchTheMeaningQuestion) {
|
if (currentQuestion instanceof MatchTheMeaningQuestion) {
|
||||||
|
@ -166,14 +189,14 @@ public class AssessmentGenerator {
|
||||||
System.err.print("The question has not been recognised");
|
System.err.print("The question has not been recognised");
|
||||||
System.err.println(currentQuestion);
|
System.err.println(currentQuestion);
|
||||||
}
|
}
|
||||||
|
|
||||||
currentAssessment++;
|
currentAssessment++;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("You scored: ")
|
sb.append("You got ")
|
||||||
.append(Question.correctAnswers).append("/")
|
.append(new DecimalFormat("#.##").format(((double)(totalCorrectAnswers*100) / (double)totalAnswers)))
|
||||||
.append(Question.correctAnswers + Question.wrongAnswers)
|
.append("%")
|
||||||
.append("\n Would you like to test yourself again?");
|
.append("\n Would you like to test yourself again?");
|
||||||
|
|
||||||
ButtonType yesBtn = new ButtonType("Yes");
|
ButtonType yesBtn = new ButtonType("Yes");
|
||||||
|
@ -192,15 +215,28 @@ public class AssessmentGenerator {
|
||||||
Optional<ButtonType> result = alert.showAndWait();
|
Optional<ButtonType> result = alert.showAndWait();
|
||||||
|
|
||||||
currentAssessment = 0;
|
currentAssessment = 0;
|
||||||
Question.resetScore();
|
|
||||||
|
|
||||||
|
reset();
|
||||||
if (result.isEmpty() || result.get() == noBtn) {
|
if (result.isEmpty() || result.get() == noBtn) {
|
||||||
ScreenSwitch.swap(ScreenSwitch.SceneEnum.dictionaryScene);
|
ScreenSwitch.swap(ScreenSwitch.SceneEnum.dictionaryScene);
|
||||||
} else {
|
} else {
|
||||||
generateAssessment(Application.practiseList);
|
generateAssessment(Application.practiceList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int getTotalCorrectAnswers() {
|
||||||
|
return totalCorrectAnswers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getTotalAnswers() {
|
||||||
|
return totalAnswers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void reset(){
|
||||||
|
totalCorrectAnswers = 0;
|
||||||
|
totalAnswers =0;
|
||||||
|
LinkedList<Question> listOfAssessment = new LinkedList<>();
|
||||||
|
currentAssessment = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,21 @@ import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class used to create a MatchTheMeaning Question.
|
||||||
|
* @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 Question
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
public class MatchTheMeaningQuestion extends Question {
|
public class MatchTheMeaningQuestion extends Question {
|
||||||
private ArrayList<DictionaryEntry> correctAnswer = new ArrayList<>();
|
private ArrayList<DictionaryEntry> correctAnswer = new ArrayList<>();
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
package uk.ac.aber.cs22120.group20.selfassessment;
|
package uk.ac.aber.cs22120.group20.selfassessment;
|
||||||
|
|
||||||
|
import javafx.scene.control.Alert;
|
||||||
|
import javafx.scene.control.Dialog;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -9,40 +12,100 @@ import java.util.ArrayList;
|
||||||
* Abstract class contains the basic information that all the shared information between the
|
* 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
|
* types of test questions including the questions’ correct answers and possible answers. All question
|
||||||
* classes will extend this class.
|
* classes will extend this class.
|
||||||
* @Author
|
* @author Brad Corbett [brc9]
|
||||||
* @Version
|
* @author Henry Dugmore [hjd3]
|
||||||
* @See
|
* @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 Question {
|
public class Question {
|
||||||
|
|
||||||
public static int correctAnswers = 0;
|
public static int correctAnswers = 0;
|
||||||
public static int wrongAnswers =0;
|
public static int wrongAnswers =0;
|
||||||
|
public static StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
/**
|
/** Function that checks the answers of
|
||||||
*
|
*
|
||||||
* @param listOfCorrectQuestions
|
* @param listOfCorrectQuestions List of the right answers to the question.
|
||||||
* @param listOfAnswers
|
* @param listOfAnswers List of the answers the user input.
|
||||||
* @param isEnglish
|
* @param isEnglish Boolean for if the test is English To Welsh or Welsh To English
|
||||||
*/
|
*/
|
||||||
public static void checkAnswer(ArrayList<DictionaryEntry> listOfCorrectQuestions, ArrayList<String>listOfAnswers, boolean isEnglish){
|
public static void checkAnswer(ArrayList<DictionaryEntry> listOfCorrectQuestions, ArrayList<String>listOfAnswers, boolean isEnglish){
|
||||||
|
|
||||||
if(isEnglish){
|
if(isEnglish){
|
||||||
for(int i=0; i<listOfCorrectQuestions.size();i++){
|
for(int i=0; i<listOfCorrectQuestions.size();i++){
|
||||||
|
|
||||||
|
sb
|
||||||
|
.append("'").append(listOfCorrectQuestions.get(i).getEnglish()).append("'")
|
||||||
|
.append(" is the English for ")
|
||||||
|
.append("'").append(listOfCorrectQuestions.get(i).getWelsh()).append("'")
|
||||||
|
.append(". ");
|
||||||
if(listOfCorrectQuestions.get(i).getWelsh().equals(listOfAnswers.get(i))){
|
if(listOfCorrectQuestions.get(i).getWelsh().equals(listOfAnswers.get(i))){
|
||||||
|
sb.append("Correct!");
|
||||||
correctAnswers++;
|
correctAnswers++;
|
||||||
}else wrongAnswers++;
|
}else{
|
||||||
|
sb.append("'").append(listOfAnswers.get(i)).append("'").append(" is incorrect.");
|
||||||
|
wrongAnswers++;
|
||||||
|
}
|
||||||
|
sb.append("\n");
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
for(int i=0; i<listOfCorrectQuestions.size();i++){
|
for(int i=0; i<listOfCorrectQuestions.size();i++){
|
||||||
|
sb
|
||||||
|
.append("'").append(listOfCorrectQuestions.get(i).getEnglish()).append("'")
|
||||||
|
.append(" is the English for ")
|
||||||
|
.append("'").append(listOfCorrectQuestions.get(i).getWelsh()).append("'")
|
||||||
|
.append(". ");
|
||||||
|
|
||||||
if(listOfCorrectQuestions.get(i).getEnglish().equals(listOfAnswers.get(i))){
|
if(listOfCorrectQuestions.get(i).getEnglish().equals(listOfAnswers.get(i))){
|
||||||
|
sb.append("Correct!");
|
||||||
correctAnswers++;
|
correctAnswers++;
|
||||||
}else wrongAnswers++;
|
}else{
|
||||||
|
sb.append("'").append(listOfAnswers.get(i)).append("'").append(" is incorrect.");
|
||||||
|
wrongAnswers++;
|
||||||
|
}
|
||||||
|
sb.append("\n");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void resetScore(){
|
|
||||||
correctAnswers = 0;
|
|
||||||
wrongAnswers =0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Function for giving user positive or negative feedback for when they answer a question during an assessment.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void showFeedback(){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
sb.append("You got ").append(correctAnswers).append(" out of ").append(correctAnswers+wrongAnswers).append("\n");
|
||||||
|
sb.append(Question.sb.toString());
|
||||||
|
|
||||||
|
alert.setTitle("You finished this part of the assessment!");
|
||||||
|
alert.setHeaderText("You finished this part of the assessment!");
|
||||||
|
Label label = new Label(sb.toString());
|
||||||
|
label.setWrapText(true);
|
||||||
|
alert.getDialogPane().setContent(label);
|
||||||
|
alert.showAndWait();
|
||||||
|
Question.sb = new StringBuilder();
|
||||||
|
|
||||||
|
AssessmentGenerator.totalCorrectAnswers += correctAnswers;
|
||||||
|
AssessmentGenerator.totalAnswers += (wrongAnswers + correctAnswers);
|
||||||
|
|
||||||
|
resetScore();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the score to 0 for the next test.
|
||||||
|
*/
|
||||||
|
private static void resetScore(){
|
||||||
|
correctAnswers = 0;
|
||||||
|
wrongAnswers =0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -7,6 +7,19 @@ import java.util.ArrayList;
|
||||||
import java.util.Dictionary;
|
import java.util.Dictionary;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
/**
|
||||||
|
* Class used to create a SixMeanings Question.
|
||||||
|
* @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 Question
|
||||||
|
*/
|
||||||
|
|
||||||
public class SixMeaningsQuestion extends Question{
|
public class SixMeaningsQuestion extends Question{
|
||||||
private DictionaryEntry correctAnswer;
|
private DictionaryEntry correctAnswer;
|
||||||
|
@ -17,6 +30,11 @@ public class SixMeaningsQuestion extends Question{
|
||||||
this.dictionary = dictionary;
|
this.dictionary = dictionary;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Function to retrieve the correct answer to a SixMeaningsQuestion.
|
||||||
|
*
|
||||||
|
* @return Retrieves the correct answer
|
||||||
|
*/
|
||||||
|
|
||||||
public ArrayList<DictionaryEntry> getCorrectAnswer() {
|
public ArrayList<DictionaryEntry> getCorrectAnswer() {
|
||||||
Random rand = new Random();
|
Random rand = new Random();
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,20 @@ import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class used to create a MatchTheMeaning Question.
|
||||||
|
* @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 Question
|
||||||
|
*/
|
||||||
|
|
||||||
public class TranslationQuestion extends Question {
|
public class TranslationQuestion extends Question {
|
||||||
private DictionaryEntry correctAnswer;
|
private DictionaryEntry correctAnswer;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,158 @@
|
||||||
|
package uk.ac.aber.cs22120.group20.test;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
||||||
|
import uk.ac.aber.cs22120.group20.selfassessment.AssessmentGenerator;
|
||||||
|
import uk.ac.aber.cs22120.group20.selfassessment.Question;
|
||||||
|
import uk.ac.aber.cs22120.group20.selfassessment.TranslationQuestion;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static uk.ac.aber.cs22120.group20.json.DictionaryEntry.wordTypeEnum.verb;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class that contains methods which will be used to test the Question class, and its methods.
|
||||||
|
* @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 Question
|
||||||
|
*/
|
||||||
|
|
||||||
|
class QuestionTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests that the correctAnswers variable increments when a user gets a right answer
|
||||||
|
* when doing either a Translation or SixMeanings test.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testCheckRightAnswerTranslationOrSixMeanings() {
|
||||||
|
ArrayList<DictionaryEntry> correctAnswerList = new ArrayList<>();
|
||||||
|
ArrayList<String> correctEntryList = new ArrayList<>();
|
||||||
|
DictionaryEntry wordToTest = new DictionaryEntry("english1", "welsh1",verb);
|
||||||
|
boolean isEnglish = true;
|
||||||
|
|
||||||
|
correctAnswerList.add(wordToTest);
|
||||||
|
correctEntryList.add(wordToTest.getWelsh());
|
||||||
|
|
||||||
|
Question question;
|
||||||
|
|
||||||
|
Question.checkAnswer(correctAnswerList, correctEntryList, isEnglish);
|
||||||
|
|
||||||
|
assertEquals(1, Question.correctAnswers);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests that the wrongAnswers variable increments when a user gets a wrong answer
|
||||||
|
* when doing either a Translation or SixMeanings test.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testCheckWrongAnswerTranslationOrSixMeanings() {
|
||||||
|
ArrayList<DictionaryEntry> correctAnswerList = new ArrayList<>();
|
||||||
|
ArrayList<String> correctEntryList = new ArrayList<>();
|
||||||
|
DictionaryEntry wordToTest = new DictionaryEntry("english1", "welsh1",verb);
|
||||||
|
boolean isEnglish = true;
|
||||||
|
|
||||||
|
correctAnswerList.add(wordToTest);
|
||||||
|
correctEntryList.add("incorrectValue");
|
||||||
|
|
||||||
|
Question question;
|
||||||
|
|
||||||
|
Question.resetScore();
|
||||||
|
|
||||||
|
Question.checkAnswer(correctAnswerList, correctEntryList, isEnglish);
|
||||||
|
|
||||||
|
assertEquals(1, Question.wrongAnswers);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests that the correctAnswers variable increments when a user gets a right answer
|
||||||
|
* when doing either a MatchTheMeaning test.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testCheckRightAnswerMatchMeaning(){
|
||||||
|
ArrayList<DictionaryEntry> correctAnswerList = new ArrayList<>();
|
||||||
|
ArrayList<String> correctEntryList = new ArrayList<>();
|
||||||
|
DictionaryEntry wordToTest1 = new DictionaryEntry("english1", "welsh1",verb);
|
||||||
|
DictionaryEntry wordToTest2 = new DictionaryEntry("english2", "welsh2",verb);
|
||||||
|
DictionaryEntry wordToTest3 = new DictionaryEntry("english3", "welsh3",verb);
|
||||||
|
DictionaryEntry wordToTest4 = new DictionaryEntry("english4", "welsh4",verb);
|
||||||
|
boolean isEnglish = true;
|
||||||
|
|
||||||
|
correctAnswerList.add(wordToTest1);
|
||||||
|
correctAnswerList.add(wordToTest2);
|
||||||
|
correctAnswerList.add(wordToTest3);
|
||||||
|
correctAnswerList.add(wordToTest4);
|
||||||
|
correctEntryList.add("welsh1");
|
||||||
|
correctEntryList.add("welsh2");
|
||||||
|
correctEntryList.add("welsh3");
|
||||||
|
correctEntryList.add("welsh4");
|
||||||
|
|
||||||
|
AssessmentGenerator.isEnglish = true;
|
||||||
|
|
||||||
|
Question.resetScore();
|
||||||
|
|
||||||
|
Question.checkAnswer(correctAnswerList, correctEntryList, isEnglish);
|
||||||
|
|
||||||
|
assertEquals(4, Question.correctAnswers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests that the wrongAnswers variable increments when a user gets a wrong answer
|
||||||
|
* when doing either a MatchTheMeaning test.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testCheckWrongAnswerMatchMeaning(){
|
||||||
|
ArrayList<DictionaryEntry> correctAnswerList = new ArrayList<>();
|
||||||
|
ArrayList<String> correctEntryList = new ArrayList<>();
|
||||||
|
DictionaryEntry wordToTest1 = new DictionaryEntry("english1", "welsh1",verb);
|
||||||
|
DictionaryEntry wordToTest2 = new DictionaryEntry("english2", "welsh2",verb);
|
||||||
|
DictionaryEntry wordToTest3 = new DictionaryEntry("english3", "welsh3",verb);
|
||||||
|
DictionaryEntry wordToTest4 = new DictionaryEntry("english4", "welsh4",verb);
|
||||||
|
|
||||||
|
|
||||||
|
correctAnswerList.add(wordToTest1);
|
||||||
|
correctAnswerList.add(wordToTest2);
|
||||||
|
correctAnswerList.add(wordToTest3);
|
||||||
|
correctAnswerList.add(wordToTest4);
|
||||||
|
correctEntryList.add("");
|
||||||
|
correctEntryList.add("");
|
||||||
|
correctEntryList.add("");
|
||||||
|
correctEntryList.add("");
|
||||||
|
|
||||||
|
boolean isEnglish = true;
|
||||||
|
|
||||||
|
Question.checkAnswer(correctAnswerList, correctEntryList, isEnglish);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
assertEquals(4, Question.wrongAnswers);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void resetScore() {
|
||||||
|
Question.wrongAnswers = 5;
|
||||||
|
Question.correctAnswers = 5;
|
||||||
|
Question.resetScore();
|
||||||
|
|
||||||
|
assertEquals(0, Question.correctAnswers);
|
||||||
|
assertEquals(0, Question.wrongAnswers);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?import javafx.geometry.*?>
|
<?import javafx.geometry.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
<?import javafx.scene.text.*?>
|
<?import javafx.scene.text.*?>
|
||||||
|
@ -124,11 +124,10 @@
|
||||||
<Insets top="25" right="25" bottom="10" left="25"/>
|
<Insets top="25" right="25" bottom="10" left="25"/>
|
||||||
</padding>
|
</padding>
|
||||||
<children>
|
<children>
|
||||||
<StackPane alignment="CENTER" onMouseClicked="#handleFlashcardClick" VBox.vgrow="NEVER" minWidth="350">
|
<StackPane alignment="CENTER" onMouseClicked="#handleFlashcardClick" minWidth="500">
|
||||||
<children>
|
<children>
|
||||||
<Rectangle fx:id="flashcard" width="550" height="360" fill="white" arcHeight="80" arcWidth="80"
|
<ImageView fx:id="flashcard" fitWidth="450" fitHeight="360"></ImageView>
|
||||||
stroke="black"/>
|
<Text textAlignment="CENTER" fx:id="testWord">
|
||||||
<Text textAlignment="CENTER" fx:id="testWord">
|
|
||||||
<font>
|
<font>
|
||||||
<Font size="55"/>
|
<Font size="55"/>
|
||||||
</font>
|
</font>
|
||||||
|
|
|
@ -5,78 +5,73 @@
|
||||||
<?import javafx.scene.control.Button?>
|
<?import javafx.scene.control.Button?>
|
||||||
<?import javafx.scene.control.ComboBox?>
|
<?import javafx.scene.control.ComboBox?>
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<?import javafx.scene.layout.Pane?>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<?import javafx.scene.layout.*?>
|
|
||||||
|
|
||||||
<?import javafx.scene.shape.Rectangle?>
|
|
||||||
<?import javafx.scene.image.ImageView?>
|
<?import javafx.scene.image.ImageView?>
|
||||||
<?import javafx.scene.text.Text?>
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
|
<?import javafx.scene.layout.BorderPane?>
|
||||||
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
<?import javafx.scene.layout.Pane?>
|
||||||
|
<?import javafx.scene.layout.StackPane?>
|
||||||
|
<?import javafx.scene.layout.VBox?>
|
||||||
|
<?import javafx.scene.shape.Rectangle?>
|
||||||
<?import javafx.scene.text.Font?>
|
<?import javafx.scene.text.Font?>
|
||||||
<BorderPane xmlns="http://javafx.com/javafx"
|
<?import javafx.scene.text.Text?>
|
||||||
xmlns:fx="http://javafx.com/fxml"
|
|
||||||
fx:controller="uk.ac.aber.cs22120.group20.javafx.MatchTheMeaningController"
|
<BorderPane fx:id="container" minHeight="550" minWidth="450" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="uk.ac.aber.cs22120.group20.javafx.MatchTheMeaningController">
|
||||||
fx:id="container"
|
|
||||||
minWidth="450"
|
|
||||||
minHeight="550"
|
|
||||||
>
|
|
||||||
|
|
||||||
|
|
||||||
<left>
|
<left>
|
||||||
|
|
||||||
<StackPane fx:id="outerBar">
|
<StackPane fx:id="outerBar">
|
||||||
<Rectangle fx:id="sideBar" fill="dimgray" height="${outerBar.height}" width="50"></Rectangle>
|
<Rectangle fx:id="sideBar" fill="dimgray" height="${outerBar.height}" width="50" />
|
||||||
|
|
||||||
<VBox spacing="300">
|
<VBox spacing="300">
|
||||||
|
|
||||||
<VBox alignment="TOP_CENTER" maxHeight="${outerBar.height}">
|
<VBox alignment="TOP_CENTER" maxHeight="${outerBar.height}">
|
||||||
<StackPane onMouseClicked="#dictionaryIconClick">
|
<StackPane onMouseClicked="#dictionaryIconClick">
|
||||||
<Rectangle fill="dimgray" height="60" width="${sideBar.width}"></Rectangle>
|
<Rectangle fill="dimgray" height="60" width="${sideBar.width}" />
|
||||||
<HBox alignment="CENTER_RIGHT">
|
<HBox alignment="CENTER_RIGHT">
|
||||||
<Text fx:id="dictionaryText" fill="white">
|
<Text fx:id="dictionaryText" fill="white">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25"></Font>
|
<Font name="System Bold" size="25" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
<ImageView fx:id="dictionaryIcon"></ImageView>
|
<ImageView fx:id="dictionaryIcon" />
|
||||||
</HBox>
|
</HBox>
|
||||||
</StackPane>
|
</StackPane>
|
||||||
|
|
||||||
<StackPane onMouseClicked="#practiceListIconClick">
|
<StackPane onMouseClicked="#practiceListIconClick">
|
||||||
<Rectangle fill="dimgray" height="60" width="${sideBar.width}"></Rectangle>
|
<Rectangle fill="dimgray" height="60" width="${sideBar.width}" />
|
||||||
<HBox alignment="CENTER_RIGHT">
|
<HBox alignment="CENTER_RIGHT">
|
||||||
<Text fx:id="practiceListTest" fill="white">
|
<Text fx:id="practiceListTest" fill="white">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25"></Font>
|
<Font name="System Bold" size="25" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
<ImageView fx:id="practiceListIcon"></ImageView>
|
<ImageView fx:id="practiceListIcon" />
|
||||||
</HBox>
|
</HBox>
|
||||||
</StackPane>
|
</StackPane>
|
||||||
|
|
||||||
<StackPane onMouseClicked="#flashcardIconClick">
|
<StackPane onMouseClicked="#flashcardIconClick">
|
||||||
<Rectangle fill="dimgray" height="60" width="${sideBar.width}"></Rectangle>
|
<Rectangle fill="dimgray" height="60" width="${sideBar.width}" />
|
||||||
<HBox alignment="CENTER_RIGHT">
|
<HBox alignment="CENTER_RIGHT">
|
||||||
<Text fx:id="flashcardsText" fill="white">
|
<Text fx:id="flashcardsText" fill="white">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25"></Font>
|
<Font name="System Bold" size="25" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
<ImageView fx:id="flashcardIcon"></ImageView>
|
<ImageView fx:id="flashcardIcon" />
|
||||||
</HBox>
|
</HBox>
|
||||||
</StackPane>
|
</StackPane>
|
||||||
|
|
||||||
<StackPane onMouseClicked="#studyIconClick">
|
<StackPane onMouseClicked="#studyIconClick">
|
||||||
<Rectangle fill="white" height="60" width="${sideBar.width}"></Rectangle>
|
<Rectangle fill="white" height="60" width="${sideBar.width}" />
|
||||||
<HBox alignment="CENTER_RIGHT">
|
<HBox alignment="CENTER_RIGHT">
|
||||||
<Text fx:id="studyText" fill="white">
|
<Text fx:id="studyText" fill="white">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25"></Font>
|
<Font name="System Bold" size="25" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
<ImageView fx:id="studyIcon"></ImageView>
|
<ImageView fx:id="studyIcon" />
|
||||||
</HBox>
|
</HBox>
|
||||||
</StackPane>
|
</StackPane>
|
||||||
|
|
||||||
|
@ -85,15 +80,15 @@
|
||||||
|
|
||||||
|
|
||||||
<StackPane alignment="BOTTOM_CENTER" onMouseClicked="#addWordIconClick">
|
<StackPane alignment="BOTTOM_CENTER" onMouseClicked="#addWordIconClick">
|
||||||
<Rectangle fill="dimgray" height="60" width="${sideBar.width}"></Rectangle>
|
<Rectangle fill="dimgray" height="60" width="${sideBar.width}" />
|
||||||
|
|
||||||
<HBox alignment="CENTER_RIGHT">
|
<HBox alignment="CENTER_RIGHT">
|
||||||
<Text fx:id="addDefinitionText" fill="white">
|
<Text fx:id="addDefinitionText" fill="white">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25"></Font>
|
<Font name="System Bold" size="25" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
<ImageView fx:id="addDefinitionIcon"></ImageView>
|
<ImageView fx:id="addDefinitionIcon" />
|
||||||
</HBox>
|
</HBox>
|
||||||
|
|
||||||
</StackPane>
|
</StackPane>
|
||||||
|
@ -105,18 +100,18 @@
|
||||||
|
|
||||||
<top>
|
<top>
|
||||||
<StackPane fx:id="topBar">
|
<StackPane fx:id="topBar">
|
||||||
<Rectangle fx:id="parentRectangle" fill="dimgray" width="${topBar.width}" height="50"></Rectangle>
|
<Rectangle fx:id="parentRectangle" fill="dimgray" height="50" width="${topBar.width}" />
|
||||||
<HBox alignment="CENTER_LEFT" prefWidth="${topBar.width}" spacing="7">
|
<HBox alignment="CENTER_LEFT" prefWidth="${topBar.width}" spacing="7">
|
||||||
<StackPane onMouseClicked="#expandMenuClick">
|
<StackPane onMouseClicked="#expandMenuClick">
|
||||||
<Rectangle fill="dimgray" width="55" height="50"></Rectangle>
|
<Rectangle fill="dimgray" height="50" width="55" />
|
||||||
<ImageView fx:id="expandMenuIcon"></ImageView>
|
<ImageView fx:id="expandMenuIcon" />
|
||||||
</StackPane>
|
</StackPane>
|
||||||
|
|
||||||
<ImageView fx:id="currentPageIcon"></ImageView>
|
<ImageView fx:id="currentPageIcon" />
|
||||||
|
|
||||||
<Text fx:id="currentPageText" fill="white">
|
<Text fx:id="currentPageText" fill="white">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25"></Font>
|
<Font name="System Bold" size="25" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
</HBox>
|
</HBox>
|
||||||
|
@ -124,10 +119,10 @@
|
||||||
</StackPane>
|
</StackPane>
|
||||||
</top>
|
</top>
|
||||||
<center>
|
<center>
|
||||||
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
|
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" BorderPane.alignment="CENTER">
|
||||||
<children>
|
<children>
|
||||||
<Button fx:id="ConfirmButton" layoutX="271.0" layoutY="321.0" mnemonicParsing="false" text="Confirm" onAction="#checkAnswers" />
|
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="400.0" prefWidth="600.0">
|
||||||
<Label layoutX="248.0" layoutY="356.0" text="Match the meaning" />
|
<Button fx:id="ConfirmButton" layoutX="271.0" layoutY="321.0" mnemonicParsing="false" onAction="#checkAnswers" text="Confirm" />
|
||||||
<ComboBox fx:id="word1" layoutX="448.0" layoutY="118.0" prefHeight="25.0" prefWidth="58.0" value="1">
|
<ComboBox fx:id="word1" layoutX="448.0" layoutY="118.0" prefHeight="25.0" prefWidth="58.0" value="1">
|
||||||
<items>
|
<items>
|
||||||
<FXCollections fx:factory="observableArrayList">
|
<FXCollections fx:factory="observableArrayList">
|
||||||
|
@ -168,27 +163,83 @@
|
||||||
</FXCollections>
|
</FXCollections>
|
||||||
</items>
|
</items>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
<Label fx:id="RightWord1" layoutX="343.0" layoutY="122.0" text="Welsh word#3" />
|
<Label fx:id="RightWord1" layoutX="319.0" layoutY="122.0" text="Welsh word#3">
|
||||||
<Label fx:id="RightWord2" layoutX="343.0" layoutY="157.0" text="Welsh word#2" />
|
<font>
|
||||||
<Label fx:id="RightWord3" layoutX="343.0" layoutY="192.0" text="Welsh word#1" />
|
<Font size="14.0" />
|
||||||
<Label fx:id="RightWord4" layoutX="343.0" layoutY="227.0" text="Welsh word#4" />
|
</font>
|
||||||
<Label fx:id="LeftWord1" layoutX="115.0" layoutY="122.0" text="English Word #1" />
|
</Label>
|
||||||
<Label fx:id="LeftWord2" layoutX="115.0" layoutY="157.0" text="English Word #2" />
|
<Label fx:id="RightWord2" layoutX="319.0" layoutY="157.0" text="Welsh word#2">
|
||||||
<Label fx:id="LeftWord3" layoutX="115.0" layoutY="192.0" text="English Word #3" />
|
<font>
|
||||||
<Label fx:id="LeftWord4" layoutX="115.0" layoutY="227.0" text="English Word #4" />
|
<Font size="14.0" />
|
||||||
<Label layoutX="105.0" layoutY="122.0" text="1." />
|
</font>
|
||||||
<Label layoutX="105.0" layoutY="157.0" text="2." />
|
</Label>
|
||||||
<Label layoutX="105.0" layoutY="192.0" text="3." />
|
<Label fx:id="RightWord3" layoutX="319.0" layoutY="192.0" text="Welsh word#1">
|
||||||
<Label layoutX="105.0" layoutY="227.0" text="4." />
|
<font>
|
||||||
<Label layoutX="367.0" layoutY="23.0" text="Correct answers:" />
|
<Font size="14.0" />
|
||||||
<Label layoutX="368.0" layoutY="53.0" text="Wrong answers:" />
|
</font></Label>
|
||||||
<Label fx:id="CorrectAnswer" layoutX="463.0" layoutY="23.0" text="0" />
|
<Label fx:id="RightWord4" layoutX="319.0" layoutY="227.0" text="Welsh word#4">
|
||||||
<Label fx:id="WrongAnswer" layoutX="463.0" layoutY="53.0" text="0" />
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label fx:id="LeftWord1" layoutX="122.0" layoutY="122.0" text="English Word #1">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label fx:id="LeftWord2" layoutX="122.0" layoutY="157.0" text="English Word #2">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label fx:id="LeftWord3" layoutX="122.0" layoutY="192.0" text="English Word #3">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label fx:id="LeftWord4" layoutX="122.0" layoutY="227.0" text="English Word #4">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label layoutX="105.0" layoutY="122.0" text="1.">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label layoutX="105.0" layoutY="157.0" text="2.">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label layoutX="105.0" layoutY="192.0" text="3.">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label layoutX="105.0" layoutY="227.0" text="4.">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label layoutX="334.0" layoutY="19.0" text="Correct answers:">
|
||||||
|
<font>
|
||||||
|
<Font size="17.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Label layoutX="328.0" layoutY="53.0" text="Total answers:">
|
||||||
|
<font>
|
||||||
|
<Font size="17.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="CorrectAnswer" layoutX="472.0" layoutY="19.0" text="0">
|
||||||
|
<font>
|
||||||
|
<Font size="17.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="WrongAnswer" layoutX="472.0" layoutY="53.0" text="0">
|
||||||
|
<font>
|
||||||
|
<Font size="17.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Text fill="#8d8d8d" layoutX="197.0" layoutY="379.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Match The Meaning">
|
||||||
|
<font>
|
||||||
|
<Font name="System Italic" size="24.0" />
|
||||||
|
</font>
|
||||||
|
</Text>
|
||||||
|
</AnchorPane>
|
||||||
</children>
|
</children>
|
||||||
</Pane>
|
</Pane>
|
||||||
|
|
||||||
</center>
|
</center>
|
||||||
</BorderPane>
|
</BorderPane>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<?import javafx.scene.layout.VBox?>
|
|
||||||
<?import javafx.scene.control.Label?>
|
|
||||||
<?import javafx.scene.control.Button?>
|
|
||||||
<?import javafx.geometry.Insets?>
|
|
||||||
|
|
||||||
<VBox alignment="CENTER" spacing="20.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="uk.ac.aber.cs22120.group20.javafx.PrimaryController">
|
|
||||||
<children>
|
|
||||||
<Label text="Primary View" />
|
|
||||||
<Button fx:id="primaryButton" text="Switch to Secondary View" onAction="#switchToSecondary"/>
|
|
||||||
</children>
|
|
||||||
<padding>
|
|
||||||
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
|
|
||||||
</padding>
|
|
||||||
</VBox>
|
|
|
@ -1,16 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<?import javafx.scene.layout.VBox?>
|
|
||||||
<?import javafx.scene.control.Label?>
|
|
||||||
<?import javafx.scene.control.Button?>
|
|
||||||
<?import javafx.geometry.Insets?>
|
|
||||||
|
|
||||||
<VBox alignment="CENTER" spacing="20.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="uk.ac.aber.cs22120.group20.javafx.SecondaryController">
|
|
||||||
<children>
|
|
||||||
<Label text="Secondary View" />
|
|
||||||
<Button fx:id="secondaryButton" text="Switch to Primary View" onAction="#switchToPrimary" />
|
|
||||||
</children>
|
|
||||||
<padding>
|
|
||||||
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
|
|
||||||
</padding>
|
|
||||||
</VBox>
|
|
|
@ -1,73 +1,73 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<?import javafx.scene.layout.*?>
|
|
||||||
<?import javafx.scene.shape.Rectangle?>
|
|
||||||
<?import javafx.scene.image.ImageView?>
|
|
||||||
<?import javafx.scene.text.Text?>
|
|
||||||
<?import javafx.scene.text.Font?>
|
|
||||||
<?import javafx.scene.control.TitledPane?>
|
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<BorderPane xmlns="http://javafx.com/javafx"
|
<?import javafx.scene.image.ImageView?>
|
||||||
xmlns:fx="http://javafx.com/fxml"
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
fx:controller="uk.ac.aber.cs22120.group20.javafx.SixMeaningsController"
|
<?import javafx.scene.layout.BorderPane?>
|
||||||
fx:id="container"
|
<?import javafx.scene.layout.HBox?>
|
||||||
minWidth="450"
|
<?import javafx.scene.layout.Pane?>
|
||||||
minHeight="550"
|
<?import javafx.scene.layout.StackPane?>
|
||||||
>
|
<?import javafx.scene.layout.VBox?>
|
||||||
|
<?import javafx.scene.shape.Rectangle?>
|
||||||
|
<?import javafx.scene.text.Font?>
|
||||||
|
<?import javafx.scene.text.Text?>
|
||||||
|
|
||||||
|
<BorderPane fx:id="container" minHeight="550" minWidth="450" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="uk.ac.aber.cs22120.group20.javafx.SixMeaningsController">
|
||||||
|
|
||||||
|
|
||||||
<left>
|
<left>
|
||||||
|
|
||||||
<StackPane fx:id="outerBar">
|
<StackPane fx:id="outerBar">
|
||||||
<Rectangle fx:id="sideBar" fill="dimgray" height="${outerBar.height}" width="50"></Rectangle>
|
<Rectangle fx:id="sideBar" fill="dimgray" height="${outerBar.height}" width="50" />
|
||||||
|
|
||||||
<VBox spacing="300">
|
<VBox spacing="300">
|
||||||
|
|
||||||
<VBox alignment="TOP_CENTER" maxHeight="${outerBar.height}">
|
<VBox alignment="TOP_CENTER" maxHeight="${outerBar.height}">
|
||||||
<StackPane onMouseClicked="#dictionaryIconClick">
|
<StackPane onMouseClicked="#dictionaryIconClick">
|
||||||
<Rectangle fill="dimgray" height="60" width="${sideBar.width}"></Rectangle>
|
<Rectangle fill="dimgray" height="60" width="${sideBar.width}" />
|
||||||
<HBox alignment="CENTER_RIGHT">
|
<HBox alignment="CENTER_RIGHT">
|
||||||
<Text fx:id="dictionaryText" fill="white">
|
<Text fx:id="dictionaryText" fill="white">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25"></Font>
|
<Font name="System Bold" size="25" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
<ImageView fx:id="dictionaryIcon"></ImageView>
|
<ImageView fx:id="dictionaryIcon" />
|
||||||
</HBox>
|
</HBox>
|
||||||
</StackPane>
|
</StackPane>
|
||||||
|
|
||||||
<StackPane onMouseClicked="#practiceListIconClick">
|
<StackPane onMouseClicked="#practiceListIconClick">
|
||||||
<Rectangle fill="dimgray" height="60" width="${sideBar.width}"></Rectangle>
|
<Rectangle fill="dimgray" height="60" width="${sideBar.width}" />
|
||||||
<HBox alignment="CENTER_RIGHT">
|
<HBox alignment="CENTER_RIGHT">
|
||||||
<Text fx:id="practiceListTest" fill="white">
|
<Text fx:id="practiceListTest" fill="white">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25"></Font>
|
<Font name="System Bold" size="25" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
<ImageView fx:id="practiceListIcon"></ImageView>
|
<ImageView fx:id="practiceListIcon" />
|
||||||
</HBox>
|
</HBox>
|
||||||
</StackPane>
|
</StackPane>
|
||||||
|
|
||||||
<StackPane onMouseClicked="#flashcardIconClick">
|
<StackPane onMouseClicked="#flashcardIconClick">
|
||||||
<Rectangle fill="dimgray" height="60" width="${sideBar.width}"></Rectangle>
|
<Rectangle fill="dimgray" height="60" width="${sideBar.width}" />
|
||||||
<HBox alignment="CENTER_RIGHT">
|
<HBox alignment="CENTER_RIGHT">
|
||||||
<Text fx:id="flashcardsText" fill="white">
|
<Text fx:id="flashcardsText" fill="white">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25"></Font>
|
<Font name="System Bold" size="25" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
<ImageView fx:id="flashcardIcon"></ImageView>
|
<ImageView fx:id="flashcardIcon" />
|
||||||
</HBox>
|
</HBox>
|
||||||
</StackPane>
|
</StackPane>
|
||||||
|
|
||||||
<StackPane onMouseClicked="#studyIconClick">
|
<StackPane onMouseClicked="#studyIconClick">
|
||||||
<Rectangle fill="white" height="60" width="${sideBar.width}"></Rectangle>
|
<Rectangle fill="white" height="60" width="${sideBar.width}" />
|
||||||
<HBox alignment="CENTER_RIGHT">
|
<HBox alignment="CENTER_RIGHT">
|
||||||
<Text fx:id="studyText" fill="white">
|
<Text fx:id="studyText" fill="white">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25"></Font>
|
<Font name="System Bold" size="25" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
<ImageView fx:id="studyIcon"></ImageView>
|
<ImageView fx:id="studyIcon" />
|
||||||
</HBox>
|
</HBox>
|
||||||
</StackPane>
|
</StackPane>
|
||||||
|
|
||||||
|
@ -76,15 +76,15 @@
|
||||||
|
|
||||||
|
|
||||||
<StackPane alignment="BOTTOM_CENTER" onMouseClicked="#addWordIconClick">
|
<StackPane alignment="BOTTOM_CENTER" onMouseClicked="#addWordIconClick">
|
||||||
<Rectangle fill="dimgray" height="60" width="${sideBar.width}"></Rectangle>
|
<Rectangle fill="dimgray" height="60" width="${sideBar.width}" />
|
||||||
|
|
||||||
<HBox alignment="CENTER_RIGHT">
|
<HBox alignment="CENTER_RIGHT">
|
||||||
<Text fx:id="addDefinitionText" fill="white">
|
<Text fx:id="addDefinitionText" fill="white">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25"></Font>
|
<Font name="System Bold" size="25" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
<ImageView fx:id="addDefinitionIcon"></ImageView>
|
<ImageView fx:id="addDefinitionIcon" />
|
||||||
</HBox>
|
</HBox>
|
||||||
|
|
||||||
</StackPane>
|
</StackPane>
|
||||||
|
@ -96,18 +96,18 @@
|
||||||
|
|
||||||
<top>
|
<top>
|
||||||
<StackPane fx:id="topBar">
|
<StackPane fx:id="topBar">
|
||||||
<Rectangle fx:id="parentRectangle" fill="dimgray" width="${topBar.width}" height="50"></Rectangle>
|
<Rectangle fx:id="parentRectangle" fill="dimgray" height="50" width="${topBar.width}" />
|
||||||
<HBox alignment="CENTER_LEFT" prefWidth="${topBar.width}" spacing="7">
|
<HBox alignment="CENTER_LEFT" prefWidth="${topBar.width}" spacing="7">
|
||||||
<StackPane onMouseClicked="#expandMenuClick">
|
<StackPane onMouseClicked="#expandMenuClick">
|
||||||
<Rectangle fill="dimgray" width="55" height="50"></Rectangle>
|
<Rectangle fill="dimgray" height="50" width="55" />
|
||||||
<ImageView fx:id="expandMenuIcon"></ImageView>
|
<ImageView fx:id="expandMenuIcon" />
|
||||||
</StackPane>
|
</StackPane>
|
||||||
|
|
||||||
<ImageView fx:id="currentPageIcon"></ImageView>
|
<ImageView fx:id="currentPageIcon" />
|
||||||
|
|
||||||
<Text fx:id="currentPageText" fill="white">
|
<Text fx:id="currentPageText" fill="white">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25"></Font>
|
<Font name="System Bold" size="25" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
</HBox>
|
</HBox>
|
||||||
|
@ -116,43 +116,65 @@
|
||||||
</top>
|
</top>
|
||||||
|
|
||||||
<center>
|
<center>
|
||||||
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0"
|
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
|
||||||
prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"
|
|
||||||
>
|
|
||||||
<children>
|
<children>
|
||||||
<TitledPane animated="false" prefHeight="400.0" prefWidth="600.0" text="Learn">
|
|
||||||
<content>
|
<AnchorPane layoutX="-8.0" prefHeight="400.0" prefWidth="600.0">
|
||||||
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0"/>
|
|
||||||
</content>
|
|
||||||
</TitledPane>
|
|
||||||
<AnchorPane prefHeight="400.0" prefWidth="600.0">
|
|
||||||
<children>
|
<children>
|
||||||
<Label fx:id="wordToTranslate" layoutX="228.0" layoutY="73.0" text="Welsh Word">
|
<Label fx:id="wordToTranslate" layoutX="228.0" layoutY="73.0" text="Welsh Word" textAlignment="CENTER">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="25.0"/>
|
<Font name="System Bold" size="25.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Text fx:id="possibleAnswer1" layoutX="61.0" layoutY="176.0" onMouseClicked="#answer1" strokeType="OUTSIDE" strokeWidth="0.0" text="English Word 1" textAlignment="CENTER">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Text>
|
||||||
|
<Text fx:id="possibleAnswer2" layoutX="260.0" layoutY="175.0" onMouseClicked="#answer2" strokeType="OUTSIDE" strokeWidth="0.0" text="English Word 2" textAlignment="CENTER">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Text>
|
||||||
|
<Text fx:id="possibleAnswer3" layoutX="472.0" layoutY="175.0" onMouseClicked="#answer3" strokeType="OUTSIDE" strokeWidth="0.0" text="English Word 3" textAlignment="CENTER">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Text>
|
||||||
|
<Text fx:id="possibleAnswer4" layoutX="61.0" layoutY="297.0" onMouseClicked="#answer4" strokeType="OUTSIDE" strokeWidth="0.0" text="English Word 4" textAlignment="CENTER">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Text>
|
||||||
|
<Text fx:id="possibleAnswer5" layoutX="260.0" layoutY="297.0" onMouseClicked="#answer5" strokeType="OUTSIDE" strokeWidth="0.0" text="English Word 5" textAlignment="CENTER">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Text>
|
||||||
|
<Text fx:id="possibleAnswer6" layoutX="472.0" layoutY="297.0" onMouseClicked="#answer6" strokeType="OUTSIDE" strokeWidth="0.0" text="English Word 6" textAlignment="CENTER">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font></Text>
|
||||||
|
<Text fx:id="wrongAnswer" layoutX="554.0" layoutY="69.0" strokeType="OUTSIDE" strokeWidth="0.0" text="0" wrappingWidth="22.46875">
|
||||||
|
<font>
|
||||||
|
<Font size="17.0" />
|
||||||
|
</font>
|
||||||
|
</Text>
|
||||||
|
<Label layoutX="405.0" layoutY="50.0" text="Incorrect answers:">
|
||||||
|
<font>
|
||||||
|
<Font size="17.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Text fx:id="correctAnswer" layoutX="554.0" layoutY="43.0" strokeType="OUTSIDE" strokeWidth="0.0" text="0">
|
||||||
|
<font>
|
||||||
|
<Font size="17.0" />
|
||||||
|
</font>
|
||||||
|
</Text>
|
||||||
|
<Label layoutX="411.0" layoutY="24.0" text="Correct answers:">
|
||||||
|
<font>
|
||||||
|
<Font size="17.0" />
|
||||||
</font>
|
</font>
|
||||||
</Label>
|
</Label>
|
||||||
<Text fx:id="possibleAnswer1" layoutX="61.0" layoutY="176.0" onMouseClicked="#answer1" strokeType="OUTSIDE"
|
|
||||||
strokeWidth="0.0" text="English Word 1"/>
|
|
||||||
<Text fx:id="possibleAnswer2" layoutX="260.0" layoutY="175.0" onMouseClicked="#answer2"
|
|
||||||
strokeType="OUTSIDE" strokeWidth="0.0" text="English Word 2"/>
|
|
||||||
<Text fx:id="possibleAnswer3" layoutX="472.0" layoutY="175.0" onMouseClicked="#answer3"
|
|
||||||
strokeType="OUTSIDE" strokeWidth="0.0" text="English Word 3"/>
|
|
||||||
<Text fx:id="possibleAnswer4" layoutX="61.0" layoutY="297.0" onMouseClicked="#answer4" strokeType="OUTSIDE"
|
|
||||||
strokeWidth="0.0" text="English Word 4"/>
|
|
||||||
<Text fx:id="possibleAnswer5" layoutX="260.0" layoutY="297.0" onMouseClicked="#answer5"
|
|
||||||
strokeType="OUTSIDE" strokeWidth="0.0" text="English Word 5"/>
|
|
||||||
<Text fx:id="possibleAnswer6" layoutX="472.0" layoutY="297.0" onMouseClicked="#answer6"
|
|
||||||
strokeType="OUTSIDE" strokeWidth="0.0" text="English Word 6"/>
|
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<Text fx:id="correctAnswer" layoutX="469.0" layoutY="51.0" strokeType="OUTSIDE" strokeWidth="0.0"
|
|
||||||
text="Correct Guesses: 0"/>
|
|
||||||
<Text fx:id="wrongAnswer" layoutX="469.0" layoutY="68.0" strokeType="OUTSIDE" strokeWidth="0.0"
|
|
||||||
text="Incorrect Guesses: 0"/>
|
|
||||||
<Text fill="#8d8d8d" layoutX="238.0" layoutY="360.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Six Meanings">
|
<Text fill="#8d8d8d" layoutX="238.0" layoutY="360.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Six Meanings">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Italic" size="22.0"/>
|
<Font name="System Italic" size="22.0" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
</children>
|
</children>
|
||||||
|
@ -160,8 +182,3 @@
|
||||||
</center>
|
</center>
|
||||||
|
|
||||||
</BorderPane>
|
</BorderPane>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<center>
|
<center>
|
||||||
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
|
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
|
||||||
<children>
|
<children>
|
||||||
<TitledPane animated="false" prefHeight="400.0" prefWidth="600.0" text="Learn">
|
|
||||||
<content>
|
|
||||||
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
|
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
|
||||||
<children>
|
<children>
|
||||||
<TextField fx:id="translationBox" layoutX="205.0" layoutY="199.0" prefHeight="45.0" prefWidth="188.0" promptText="Enter translation here" />
|
<TextField fx:id="translationBox" layoutX="205.0" layoutY="199.0" prefHeight="45.0" prefWidth="188.0" promptText="Enter translation here" />
|
||||||
|
@ -153,8 +153,6 @@
|
||||||
<ImageView fx:id="submitButton" fitHeight="46.0" fitWidth="69.0" layoutX="398.0" layoutY="199.0" onMouseClicked="#translateWord" pickOnBounds="true" preserveRatio="true" />
|
<ImageView fx:id="submitButton" fitHeight="46.0" fitWidth="69.0" layoutX="398.0" layoutY="199.0" onMouseClicked="#translateWord" pickOnBounds="true" preserveRatio="true" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
</content>
|
|
||||||
</TitledPane>
|
|
||||||
</children>
|
</children>
|
||||||
</Pane>
|
</Pane>
|
||||||
|
|
||||||
|
|
Reference in a new issue