Added all classes for the program in src
- With the exception of the 6Meanings test.
20
src/Welsh Vocabulary Tutor/.idea/jarRepositories.xml
generated
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RemoteRepositoriesConfiguration">
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="central" />
|
||||||
|
<option name="name" value="Central Repository" />
|
||||||
|
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="central" />
|
||||||
|
<option name="name" value="Maven Central repository" />
|
||||||
|
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="jboss.community" />
|
||||||
|
<option name="name" value="JBoss Community repository" />
|
||||||
|
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||||
|
</remote-repository>
|
||||||
|
</component>
|
||||||
|
</project>
|
124
src/Welsh Vocabulary Tutor/.idea/uiDesigner.xml
generated
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Palette2">
|
||||||
|
<group name="Swing">
|
||||||
|
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="Button" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="RadioButton" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="CheckBox" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="Label" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||||
|
<preferred-size width="200" height="200" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||||
|
<preferred-size width="200" height="200" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||||
|
<preferred-size width="-1" height="20" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||||
|
</item>
|
||||||
|
</group>
|
||||||
|
</component>
|
||||||
|
</project>
|
281
src/Welsh Vocabulary Tutor/.idea/workspace.xml
generated
|
@ -1,217 +1,50 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="b436be74-9b31-4913-bf6e-41784cacd483" name="Default Changelist" comment="">
|
<list default="true" id="b436be74-9b31-4913-bf6e-41784cacd483" name="Default Changelist" comment="" />
|
||||||
<change beforePath="$PROJECT_DIR$/../../dev/20200331/top19/flashcardfx/hellofx/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../../dev/20200331/top19/flashcardfx/hellofx/.idea/misc.xml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/../../dev/20200331/top19/flashcardfx/hellofx/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../../dev/20200331/top19/flashcardfx/hellofx/.idea/workspace.xml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/encodings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/Welsh Vocabulary Tutor.iml" beforeDir="false" />
|
|
||||||
</list>
|
|
||||||
<ignored path="$PROJECT_DIR$/target/" />
|
|
||||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
</component>
|
</component>
|
||||||
<component name="FileEditorManager">
|
|
||||||
<leaf>
|
|
||||||
<file pinned="false" current-in-tab="true">
|
|
||||||
<entry file="file://$PROJECT_DIR$/src/main/java/uk/ac/aber/cs22120/group20/App.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="104">
|
|
||||||
<caret line="24" column="13" selection-start-line="24" selection-start-column="13" selection-end-line="24" selection-end-column="13" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/src/main/java/uk/ac/aber/cs22120/group20/SecondaryController.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="102">
|
|
||||||
<caret line="7" column="13" selection-start-line="7" selection-start-column="13" selection-end-line="7" selection-end-column="13" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/src/main/java/uk/ac/aber/cs22120/group20/PrimaryController.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="102">
|
|
||||||
<caret line="7" column="13" selection-start-line="7" selection-start-column="13" selection-end-line="7" selection-end-column="13" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
</leaf>
|
|
||||||
</component>
|
|
||||||
<component name="Git.Settings">
|
<component name="Git.Settings">
|
||||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../.." />
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../.." />
|
||||||
</component>
|
</component>
|
||||||
<component name="MavenImportPreferences">
|
|
||||||
<option name="importingSettings">
|
|
||||||
<MavenImportingSettings>
|
|
||||||
<option name="importAutomatically" value="true" />
|
|
||||||
</MavenImportingSettings>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
<component name="ProjectFrameBounds" extendedState="6">
|
|
||||||
<option name="x" value="-8" />
|
|
||||||
<option name="y" value="-8" />
|
|
||||||
<option name="width" value="1936" />
|
|
||||||
<option name="height" value="1056" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectId" id="1ZuzdvhY95vKxjmCaMLe5YQbnXd" />
|
<component name="ProjectId" id="1ZuzdvhY95vKxjmCaMLe5YQbnXd" />
|
||||||
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
||||||
<component name="ProjectView">
|
|
||||||
<navigator proportions="" version="1">
|
|
||||||
<foldersAlwaysOnTop value="true" />
|
|
||||||
</navigator>
|
|
||||||
<panes>
|
|
||||||
<pane id="PackagesPane" />
|
|
||||||
<pane id="Scope" />
|
|
||||||
<pane id="ProjectPane">
|
|
||||||
<subPane>
|
|
||||||
<expand>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name=".idea" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="java" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="java" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="group20" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="resources" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="resources" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="group20" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="target" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="target" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="classes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="target" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="classes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="uk" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="target" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="classes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="uk" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="ac" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="target" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="classes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="uk" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="ac" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="aber" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="target" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="classes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="uk" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="ac" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="aber" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="cs22120" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="Welsh Vocabulary Tutor" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="target" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="classes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="uk" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="ac" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="aber" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="cs22120" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="group20" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
</expand>
|
|
||||||
<select />
|
|
||||||
</subPane>
|
|
||||||
</pane>
|
|
||||||
</panes>
|
|
||||||
</component>
|
|
||||||
<component name="ProjectViewState">
|
<component name="ProjectViewState">
|
||||||
<option name="hideEmptyMiddlePackages" value="true" />
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
<option name="showExcludedFiles" value="true" />
|
|
||||||
<option name="showLibraryContents" value="true" />
|
<option name="showLibraryContents" value="true" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent">
|
<component name="PropertiesComponent">
|
||||||
|
<property name="Downloaded.Files.Path.Enabled" value="false" />
|
||||||
|
<property name="Repository.Attach.Annotations" value="false" />
|
||||||
|
<property name="Repository.Attach.JavaDocs" value="false" />
|
||||||
|
<property name="Repository.Attach.Sources" value="false" />
|
||||||
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
||||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||||
<property name="aspect.path.notification.shown" value="true" />
|
<property name="aspect.path.notification.shown" value="true" />
|
||||||
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1586203717298" />
|
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1586203717298" />
|
||||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/../../dev/20200331/brc9/translationTest/Welsh Vocabulary Tutor" />
|
<property name="last_opened_file_path" value="$PROJECT_DIR$/src/main/java/uk/ac/aber/cs22120/group20/javafx" />
|
||||||
<property name="project.structure.last.edited" value="Libraries" />
|
<property name="project.structure.last.edited" value="Libraries" />
|
||||||
<property name="project.structure.proportion" value="0.0" />
|
<property name="project.structure.proportion" value="0.0" />
|
||||||
<property name="project.structure.side.proportion" value="0.2" />
|
<property name="project.structure.side.proportion" value="0.2" />
|
||||||
</component>
|
</component>
|
||||||
<component name="RunDashboard">
|
<component name="RecentsManager">
|
||||||
<option name="ruleStates">
|
<key name="CopyFile.RECENT_KEYS">
|
||||||
<list>
|
<recent name="$PROJECT_DIR$/src/main/java/uk/ac/aber/cs22120/group20/javafx" />
|
||||||
<RuleState>
|
<recent name="$PROJECT_DIR$/src/main/java/uk/ac/aber/cs22120/group20/test" />
|
||||||
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
<recent name="$PROJECT_DIR$/src/main/resources/uk/ac/aber/cs22120/group20" />
|
||||||
</RuleState>
|
<recent name="$PROJECT_DIR$/src/main/resources" />
|
||||||
<RuleState>
|
<recent name="$PROJECT_DIR$/src/main/java/uk/ac/aber/cs22120/group20" />
|
||||||
<option name="name" value="StatusDashboardGroupingRule" />
|
</key>
|
||||||
</RuleState>
|
<key name="CopyClassDialog.RECENTS_KEY">
|
||||||
</list>
|
<recent name="uk.ac.aber.cs22120.group20.selfassessment" />
|
||||||
</option>
|
<recent name="uk.ac.aber.cs22120.group20" />
|
||||||
|
</key>
|
||||||
|
<key name="MoveFile.RECENT_KEYS">
|
||||||
|
<recent name="$PROJECT_DIR$/src/main/resources/uk/ac/aber/cs22120/group20" />
|
||||||
|
</key>
|
||||||
</component>
|
</component>
|
||||||
<component name="RunManager">
|
<component name="RunManager">
|
||||||
<configuration name="App" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
|
<configuration name="App" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
|
||||||
|
@ -219,7 +52,7 @@
|
||||||
<module name="Welsh Vocabulary Tutor" />
|
<module name="Welsh Vocabulary Tutor" />
|
||||||
<extension name="coverage">
|
<extension name="coverage">
|
||||||
<pattern>
|
<pattern>
|
||||||
<option name="PATTERN" value="uk.ac.aber.cs22120.group20.*" />
|
<option name="PATTERN" value="uk.ac.aber.cs22120.group20.javafx.*" />
|
||||||
<option name="ENABLED" value="true" />
|
<option name="ENABLED" value="true" />
|
||||||
</pattern>
|
</pattern>
|
||||||
</extension>
|
</extension>
|
||||||
|
@ -247,40 +80,18 @@
|
||||||
</task>
|
</task>
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="ToolWindowManager">
|
|
||||||
<frame x="-8" y="-8" width="1382" height="744" extended-state="6" />
|
|
||||||
<layout>
|
|
||||||
<window_info id="Image Layers" />
|
|
||||||
<window_info id="Designer" />
|
|
||||||
<window_info id="UI Designer" />
|
|
||||||
<window_info id="Capture Tool" />
|
|
||||||
<window_info id="Favorites" side_tool="true" />
|
|
||||||
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24962178" />
|
|
||||||
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
|
||||||
<window_info anchor="bottom" id="Version Control" />
|
|
||||||
<window_info anchor="bottom" id="Terminal" />
|
|
||||||
<window_info anchor="bottom" id="Event Log" side_tool="true" />
|
|
||||||
<window_info anchor="bottom" id="Message" order="0" />
|
|
||||||
<window_info anchor="bottom" id="Find" order="1" />
|
|
||||||
<window_info anchor="bottom" id="Run" order="2" />
|
|
||||||
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
|
|
||||||
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
|
|
||||||
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
|
|
||||||
<window_info anchor="bottom" id="TODO" order="6" />
|
|
||||||
<window_info anchor="right" id="Palette" />
|
|
||||||
<window_info anchor="right" id="Theme Preview" />
|
|
||||||
<window_info anchor="right" id="Maven" />
|
|
||||||
<window_info anchor="right" id="Capture Analysis" />
|
|
||||||
<window_info anchor="right" id="Palette	" />
|
|
||||||
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
|
|
||||||
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
|
|
||||||
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
|
|
||||||
</layout>
|
|
||||||
</component>
|
|
||||||
<component name="TypeScriptGeneratedFilesManager">
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
<option name="version" value="1" />
|
<option name="version" value="1" />
|
||||||
</component>
|
</component>
|
||||||
<component name="WindowStateProjectService">
|
<component name="WindowStateProjectService">
|
||||||
|
<state x="1575" y="211" width="528" height="491" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog" timestamp="1587977966327">
|
||||||
|
<screen x="1366" y="0" width="1920" height="1080" />
|
||||||
|
</state>
|
||||||
|
<state x="1575" y="211" width="528" height="491" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog/1366.0.1920.1080/0.312.1366.768@1366.0.1920.1080" timestamp="1587977966327" />
|
||||||
|
<state x="2103" y="218" width="428" height="476" key="FileChooserDialogImpl" timestamp="1587979807456">
|
||||||
|
<screen x="1366" y="0" width="1920" height="1080" />
|
||||||
|
</state>
|
||||||
|
<state x="2103" y="218" width="428" height="476" key="FileChooserDialogImpl/1366.0.1920.1080/0.312.1366.768@1366.0.1920.1080" timestamp="1587979807456" />
|
||||||
<state width="1878" height="282" key="GridCell.Tab.0.bottom" timestamp="1585703985278">
|
<state width="1878" height="282" key="GridCell.Tab.0.bottom" timestamp="1585703985278">
|
||||||
<screen x="0" y="0" width="1920" height="1040" />
|
<screen x="0" y="0" width="1920" height="1040" />
|
||||||
</state>
|
</state>
|
||||||
|
@ -297,32 +108,18 @@
|
||||||
<screen x="0" y="0" width="1920" height="1040" />
|
<screen x="0" y="0" width="1920" height="1040" />
|
||||||
</state>
|
</state>
|
||||||
<state width="1878" height="282" key="GridCell.Tab.0.right/0.0.1920.1040@0.0.1920.1040" timestamp="1585703985278" />
|
<state width="1878" height="282" key="GridCell.Tab.0.right/0.0.1920.1040@0.0.1920.1040" timestamp="1585703985278" />
|
||||||
<state x="441" y="95" key="SettingsEditor" timestamp="1585703966325">
|
<state x="1816" y="223" width="1028" height="837" key="SettingsEditor" timestamp="1587978445584">
|
||||||
<screen x="0" y="0" width="1920" height="1040" />
|
<screen x="1366" y="0" width="1920" height="1080" />
|
||||||
</state>
|
</state>
|
||||||
<state x="441" y="95" key="SettingsEditor/0.0.1920.1040@0.0.1920.1040" timestamp="1585703966325" />
|
<state x="441" y="95" key="SettingsEditor/0.0.1920.1040@0.0.1920.1040" timestamp="1585703966325" />
|
||||||
</component>
|
<state x="1816" y="223" width="1028" height="837" key="SettingsEditor/1366.0.1920.1080/0.312.1366.768@1366.0.1920.1080" timestamp="1587978445584" />
|
||||||
<component name="editorHistoryManager">
|
<state x="2057" y="632" width="540" height="200" key="com.intellij.jarRepository.RepositoryAttachDialog-DOWNLOAD" timestamp="1587978443885">
|
||||||
<entry file="file://$PROJECT_DIR$/src/main/java/uk/ac/aber/cs22120/group20/PrimaryController.java">
|
<screen x="1366" y="0" width="1920" height="1080" />
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="102">
|
|
||||||
<caret line="7" column="13" selection-start-line="7" selection-start-column="13" selection-end-line="7" selection-end-column="13" />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
<state x="2057" y="632" width="540" height="200" key="com.intellij.jarRepository.RepositoryAttachDialog-DOWNLOAD/1366.0.1920.1080/0.312.1366.768@1366.0.1920.1080" timestamp="1587978443885" />
|
||||||
</entry>
|
<state x="1511" y="225" width="672" height="678" key="search.everywhere.popup" timestamp="1587980070294">
|
||||||
<entry file="file://$PROJECT_DIR$/src/main/java/uk/ac/aber/cs22120/group20/SecondaryController.java">
|
<screen x="1366" y="0" width="1920" height="1080" />
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="102">
|
|
||||||
<caret line="7" column="13" selection-start-line="7" selection-start-column="13" selection-end-line="7" selection-end-column="13" />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
<state x="1511" y="225" width="672" height="678" key="search.everywhere.popup/1366.0.1920.1080/0.312.1366.768@1366.0.1920.1080" timestamp="1587980070294" />
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/src/main/java/uk/ac/aber/cs22120/group20/App.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="104">
|
|
||||||
<caret line="24" column="13" selection-start-line="24" selection-start-column="13" selection-end-line="24" selection-end-column="13" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
|
@ -1,48 +0,0 @@
|
||||||
package uk.ac.aber.cs22120.group20;
|
|
||||||
|
|
||||||
import javafx.application.Application;
|
|
||||||
import javafx.fxml.FXMLLoader;
|
|
||||||
import javafx.scene.Parent;
|
|
||||||
import javafx.scene.Scene;
|
|
||||||
import javafx.stage.Stage;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Launch class of the Welsh Vocabulary tutor Application
|
|
||||||
*
|
|
||||||
* @author Brad Corbett [brc9]
|
|
||||||
* @author Henry Dugmore [hjd3]
|
|
||||||
* @author Kain Bryan-Jones [kab74]
|
|
||||||
* @author Luke Wybar [law39]
|
|
||||||
* @author Marcin Jakob [maj83]
|
|
||||||
* @author Oscar Pocock [osp1]
|
|
||||||
* @author Tom Perry [top1]
|
|
||||||
* @author Waylen Watts [ncw]
|
|
||||||
*
|
|
||||||
* @version 0.1
|
|
||||||
*/
|
|
||||||
public class App extends Application {
|
|
||||||
private static Scene scene;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void start(Stage stage) throws IOException {
|
|
||||||
scene = new Scene(loadFXML("primary"));
|
|
||||||
stage.setScene(scene);
|
|
||||||
stage.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void setRoot(String fxml) throws IOException {
|
|
||||||
scene.setRoot(loadFXML(fxml));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Parent loadFXML(String fxml) throws IOException {
|
|
||||||
FXMLLoader fxmlLoader = new FXMLLoader(App.class.getResource(fxml + ".fxml"));
|
|
||||||
return fxmlLoader.load();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
launch();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
package uk.ac.aber.cs22120.group20.javafx;
|
||||||
|
|
||||||
|
import javafx.event.ActionEvent;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.control.Alert;
|
||||||
|
import javafx.scene.control.ComboBox;
|
||||||
|
import javafx.scene.control.TextField;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add Word Controller
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class AddWordController {
|
||||||
|
|
||||||
|
@FXML private TextField welsh;
|
||||||
|
@FXML private TextField english;
|
||||||
|
@FXML private ComboBox<String> wordType;
|
||||||
|
|
||||||
|
public TextField getWelsh() {
|
||||||
|
return welsh;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TextField getEnglish() {
|
||||||
|
return english;
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void initialize(){
|
||||||
|
|
||||||
|
wordType.getItems().addAll("Masculine noun", "Feminine noun", "Verb", "Other");
|
||||||
|
System.out.println("Test");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@FXML protected void addButtonClick (ActionEvent actionEvent){
|
||||||
|
boolean entryFound = false;
|
||||||
|
if (english.getText().equals("") || welsh.getText().equals("")|| wordType.getValue().equals("Type")){
|
||||||
|
Alert error = new Alert(Alert.AlertType.ERROR);
|
||||||
|
error.setTitle("Error");
|
||||||
|
error.setHeaderText("Entry Not Saved");
|
||||||
|
error.setContentText("One or more fields are blank");
|
||||||
|
|
||||||
|
error.showAndWait();
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
for (DictionaryEntry entry : App.dictionary){
|
||||||
|
entryFound = false;
|
||||||
|
DictionaryEntry newEntry = new DictionaryEntry(english.getText(),welsh.getText(),wordType.getValue(),false);
|
||||||
|
if(entry.equals(newEntry)){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Error");
|
||||||
|
alert.setHeaderText("Entry Not Saved");
|
||||||
|
alert.setContentText("This entry already exists");
|
||||||
|
|
||||||
|
alert.showAndWait();
|
||||||
|
entryFound = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!entryFound){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
||||||
|
alert.setTitle("Success");
|
||||||
|
alert.setHeaderText("Entry Saved");
|
||||||
|
alert.setContentText("Entry Added");
|
||||||
|
|
||||||
|
alert.showAndWait();
|
||||||
|
DictionaryEntry dictionaryEntry = new DictionaryEntry(english.getText(), welsh.getText(), wordType.getValue(), false);
|
||||||
|
App.dictionary.contains(dictionaryEntry);
|
||||||
|
App.dictionary.add(dictionaryEntry);
|
||||||
|
System.out.println(App.dictionary.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Override
|
||||||
|
// public boolean equals(Object obj) {
|
||||||
|
// DictionaryEntry otherObject = (DictionaryEntry) obj;
|
||||||
|
// return (this.getEnglish().equals(otherObject.getEnglish()) && this.getWelsh().equals(otherObject.getWelsh()));
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void switchToPrimary() throws IOException {
|
||||||
|
App.setRoot("Primary");
|
||||||
|
}
|
||||||
|
// add character methods for characters ch, dd, ff, ng, ll, ph, rh, th
|
||||||
|
public void addCharch(ActionEvent actionEvent) { welsh.appendText("ch"); }
|
||||||
|
public void addChardd(ActionEvent actionEvent) { welsh.appendText("dd"); }
|
||||||
|
public void addCharff(ActionEvent actionEvent) { welsh.appendText("ff"); }
|
||||||
|
public void addCharng(ActionEvent actionEvent) { welsh.appendText("ng"); }
|
||||||
|
public void addCharll(ActionEvent actionEvent) { welsh.appendText("ll"); }
|
||||||
|
public void addCharph(ActionEvent actionEvent) { welsh.appendText("ph"); }
|
||||||
|
public void addCharrh(ActionEvent actionEvent) { welsh.appendText("rh"); }
|
||||||
|
public void addCharth(ActionEvent actionEvent) { welsh.appendText("th"); }
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,106 @@
|
||||||
|
/**
|
||||||
|
* @(#) App.java 0,1 2020/04/07
|
||||||
|
* <p>
|
||||||
|
* Copyright (c) 2020 Aberystwyth University.
|
||||||
|
* All rights reserved.
|
||||||
|
*/
|
||||||
|
package uk.ac.aber.cs22120.group20.javafx;
|
||||||
|
|
||||||
|
import javafx.fxml.FXMLLoader;
|
||||||
|
import javafx.scene.Parent;
|
||||||
|
import javafx.scene.Scene;
|
||||||
|
import javafx.stage.FileChooser;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
||||||
|
import uk.ac.aber.cs22120.group20.json.JsonProcessing;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class that launches the Welsh Vocabulary tutor Application.
|
||||||
|
*
|
||||||
|
* @author Brad Corbett [brc9]
|
||||||
|
* @author Henry Dugmore [hjd3]
|
||||||
|
* @author Kain Bryan-Jones [kab74]
|
||||||
|
* @author Luke Wybar [law39]
|
||||||
|
* @author Marcin Jakob [maj83]
|
||||||
|
* @author Oscar Pocock [osp1]
|
||||||
|
* @author Tom Perry [top1]
|
||||||
|
* @author Waylen Watts [ncw]
|
||||||
|
*
|
||||||
|
* @version 0.1 Initial development
|
||||||
|
*/
|
||||||
|
public class Application extends javafx.application.Application {
|
||||||
|
private static Scene scene;
|
||||||
|
|
||||||
|
private JsonProcessing jsonProcessing = new JsonProcessing();
|
||||||
|
private Scanner scanner = new Scanner(System.in);
|
||||||
|
|
||||||
|
public static LinkedList<DictionaryEntry> dictionary = new LinkedList<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param stage
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void start(Stage stage) throws IOException {
|
||||||
|
File jsonFileLocation = null;
|
||||||
|
|
||||||
|
while(jsonFileLocation ==null) {
|
||||||
|
FileChooser fileChooser = new FileChooser();
|
||||||
|
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Json Files", "*.json"));
|
||||||
|
fileChooser.setTitle("Open Json File");
|
||||||
|
jsonFileLocation = fileChooser.showOpenDialog(stage);
|
||||||
|
}
|
||||||
|
|
||||||
|
final File jsonFileFinalLocation = jsonFileLocation;
|
||||||
|
dictionary = jsonProcessing.readInJson(jsonFileFinalLocation);
|
||||||
|
// dictionary.add(new DictionaryEntry("abbey", "abaty", "nm", false));
|
||||||
|
// dictionary.add(new DictionaryEntry("believe", "credu", "verb", true));
|
||||||
|
// dictionary.add(new DictionaryEntry("concert", "cyngerdd", "nm", false));
|
||||||
|
// dictionary.add(new DictionaryEntry("disease", "clefyd", "nm", true));
|
||||||
|
// dictionary.add(new DictionaryEntry("extremely", "dros ben", "other", false));
|
||||||
|
// dictionary.add(new DictionaryEntry("flu", "ffliw", "nm", false));
|
||||||
|
scene = new Scene(loadFXML("primary"));
|
||||||
|
stage.setScene(scene);
|
||||||
|
// stage.setOnCloseRequest(e -> {
|
||||||
|
// jsonProcessing.writeOutJson(jsonFileLocation, dictionary);
|
||||||
|
// Platform.exit();
|
||||||
|
// System.exit(0);
|
||||||
|
// });
|
||||||
|
stage.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param fxml
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
static void setRoot(String fxml) throws IOException {
|
||||||
|
scene.setRoot(loadFXML(fxml));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param fxml
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private static Parent loadFXML(String fxml) throws IOException {
|
||||||
|
FXMLLoader fxmlLoader = new FXMLLoader(Application.class.getResource(fxml + ".fxml"));
|
||||||
|
return fxmlLoader.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
launch();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,217 @@
|
||||||
|
/**
|
||||||
|
* @(#) DictionaryController.java 0,1 2020/04/07
|
||||||
|
* <p>
|
||||||
|
* Copyright (c) 2020 Aberystwyth University.
|
||||||
|
* All rights reserved.
|
||||||
|
*/
|
||||||
|
package uk.ac.aber.cs22120.group20.javafx;
|
||||||
|
|
||||||
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
|
import javafx.collections.transformation.FilteredList;
|
||||||
|
import javafx.collections.transformation.SortedList;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.fxml.Initializable;
|
||||||
|
import javafx.scene.control.TableColumn;
|
||||||
|
import javafx.scene.control.TableRow;
|
||||||
|
import javafx.scene.control.TableView;
|
||||||
|
import javafx.scene.control.TextField;
|
||||||
|
import javafx.scene.image.Image;
|
||||||
|
import javafx.scene.image.ImageView;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
import uk.ac.aber.cs22120.group20.javafx.Application;
|
||||||
|
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class that handles the keyboard and mouse input and interaction for the 'Dictionary Page' which is
|
||||||
|
* defined by 'dictionary.fxml'
|
||||||
|
*
|
||||||
|
* @author Brad Corbett [brc9]
|
||||||
|
* @author Henry Dugmore [hjd3]
|
||||||
|
* @author Kain Bryan-Jones [kab74]
|
||||||
|
* @author Luke Wybar [law39]
|
||||||
|
* @author Marcin Jakob [maj83]
|
||||||
|
* @author Oscar Pocock [osp1]
|
||||||
|
* @author Tom Perry [top1]
|
||||||
|
* @author Waylen Watts [ncw]
|
||||||
|
* @version 0.1 Initial development.
|
||||||
|
* @see DictionaryEntry
|
||||||
|
* @see Application
|
||||||
|
*/
|
||||||
|
public class DictionaryController implements Initializable {
|
||||||
|
public static Stage primaryStage = null;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ImageView alphaSort;
|
||||||
|
@FXML
|
||||||
|
private TextField searchBox;
|
||||||
|
@FXML
|
||||||
|
private TableView<DictionaryEntry> table;
|
||||||
|
@FXML
|
||||||
|
private TableColumn<DictionaryEntry, String> english = new TableColumn<>();
|
||||||
|
@FXML
|
||||||
|
private TableColumn<DictionaryEntry, String> welsh = new TableColumn<>();
|
||||||
|
|
||||||
|
public ObservableList<DictionaryEntry> list = FXCollections.observableArrayList();
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void switchLangSort() {
|
||||||
|
if (table.getSortOrder().contains(english)) {
|
||||||
|
if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) {
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
|
||||||
|
}
|
||||||
|
else if (welsh.getSortType().equals(TableColumn.SortType.DESCENDING)) {
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
|
||||||
|
}
|
||||||
|
table.getSortOrder().clear();
|
||||||
|
table.getSortOrder().add(welsh);
|
||||||
|
}
|
||||||
|
else if (table.getSortOrder().contains(welsh)) {
|
||||||
|
if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) {
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
|
||||||
|
}
|
||||||
|
else if (english.getSortType().equals(TableColumn.SortType.DESCENDING)) {
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
|
||||||
|
}
|
||||||
|
table.getSortOrder().clear();
|
||||||
|
table.getSortOrder().add(english);
|
||||||
|
}
|
||||||
|
table.sort();
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void switchAlphaSort() {
|
||||||
|
if (table.getSortOrder().contains(english)) {
|
||||||
|
if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) {
|
||||||
|
english.setSortType(TableColumn.SortType.DESCENDING);
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
|
||||||
|
} else {
|
||||||
|
english.setSortType(TableColumn.SortType.ASCENDING);
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
|
||||||
|
}
|
||||||
|
} else if (table.getSortOrder().contains(welsh)) {
|
||||||
|
if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) {
|
||||||
|
welsh.setSortType(TableColumn.SortType.DESCENDING);
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
|
||||||
|
} else {
|
||||||
|
welsh.setSortType(TableColumn.SortType.ASCENDING);
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Switches to the primary scene.
|
||||||
|
*
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
@FXML
|
||||||
|
private void switchToPracticeList() throws IOException {
|
||||||
|
Application.setRoot("practicelist");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the table of dictionary entries.
|
||||||
|
* <p>
|
||||||
|
* An observable list of DictionaryEntries is loaded from the Application class into a local instance of ObservableList.
|
||||||
|
* It also sets up Lambda expressions related to live searching functionality and the display of DictionaryEntries.
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* @param resourceBundle
|
||||||
|
* @see Application
|
||||||
|
* @see DictionaryEntry
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initialize(URL url, ResourceBundle resourceBundle) {
|
||||||
|
list.addAll(Application.dictionary);
|
||||||
|
|
||||||
|
table.setRowFactory(tv -> {
|
||||||
|
TableRow<DictionaryEntry> row = new TableRow<DictionaryEntry>() {
|
||||||
|
@Override
|
||||||
|
protected void updateItem(DictionaryEntry dictionaryEntry, boolean b) {
|
||||||
|
super.updateItem(dictionaryEntry, b);
|
||||||
|
if (!isEmpty()) {
|
||||||
|
if (dictionaryEntry.isPracticeWord()) {
|
||||||
|
setStyle("-fx-background-color: gray;");
|
||||||
|
} else {
|
||||||
|
setStyle(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
row.setOnMouseClicked(mouseEvent -> {
|
||||||
|
if (mouseEvent.getClickCount() == 1 && (!row.isEmpty())) {
|
||||||
|
if (row.getItem().isPracticeWord()) {
|
||||||
|
Application.dictionary.get(list.indexOf(row.getItem())).setPracticeWord(false);
|
||||||
|
// row.getItem().setPracticeWord(false);
|
||||||
|
} else if (!row.getItem().isPracticeWord()) {
|
||||||
|
Application.dictionary.get(list.indexOf(row.getItem())).setPracticeWord(true);
|
||||||
|
// row.getItem().setPracticeWord(true);
|
||||||
|
}
|
||||||
|
table.getSelectionModel().clearSelection();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
welsh.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
|
||||||
|
if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nm")) {
|
||||||
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nm}");
|
||||||
|
} else if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nf")) {
|
||||||
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nf}");
|
||||||
|
} else {
|
||||||
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
english.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
|
||||||
|
if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("verb")) {
|
||||||
|
return new SimpleStringProperty("to " + dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
|
||||||
|
} else {
|
||||||
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
FilteredList<DictionaryEntry> filteredList = new FilteredList<>(list, p -> true); // Wrap list in a FilteredList
|
||||||
|
|
||||||
|
searchBox.textProperty().addListener((observable, oldSearchTerm, newSearchTerm) -> {
|
||||||
|
filteredList.setPredicate(dictionaryEntry -> { // returns true on a filter match, false if no match
|
||||||
|
boolean result = false;
|
||||||
|
|
||||||
|
table.refresh(); // This fixes the table highlighting issue
|
||||||
|
|
||||||
|
if (newSearchTerm == null || newSearchTerm.isEmpty()) { // If filter text is empty, display all dictionary entries
|
||||||
|
result = true;
|
||||||
|
} else {
|
||||||
|
// need all same case for compare.
|
||||||
|
final String lowerCaseSearchFilter = newSearchTerm.toLowerCase();
|
||||||
|
if (dictionaryEntry.getWelsh().toLowerCase().contains(lowerCaseSearchFilter)) {
|
||||||
|
result = true; // Filter matches Welsh
|
||||||
|
} else if (dictionaryEntry.getEnglish().toLowerCase().contains(lowerCaseSearchFilter)) {
|
||||||
|
result = true; // Filter matches English
|
||||||
|
// } else if (dictionaryEntry.getWordType().toLowerCase().contains(lowerCaseSearchFilter)) {
|
||||||
|
// result = true; // Filter matches Word Type
|
||||||
|
} else if (dictionaryEntry.getWordType().equals("verb") && ("to " + dictionaryEntry.getEnglish()).toLowerCase().contains(lowerCaseSearchFilter)) {
|
||||||
|
result = true; // Filter matches ['to' + a word] or [a word] if word is a verb
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
SortedList<DictionaryEntry> sortedList = new SortedList<>(filteredList); //Wrap the filtered list in a SortedList
|
||||||
|
sortedList.comparatorProperty().bind(table.comparatorProperty()); //Bind the sorted list comparator to the table comparator
|
||||||
|
// welsh.setCellValueFactory(new PropertyValueFactory<DictionaryEntry, String>("welsh"));
|
||||||
|
// english.setCellValueFactory(new PropertyValueFactory<DictionaryEntry, String>("english"));
|
||||||
|
|
||||||
|
table.setItems(sortedList);
|
||||||
|
table.getSortOrder().add(english);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,223 @@
|
||||||
|
/**
|
||||||
|
* @(#) DictionaryController.java 0,1 2020/04/07
|
||||||
|
* <p>
|
||||||
|
* Copyright (c) 2020 Aberystwyth University.
|
||||||
|
* All rights reserved.
|
||||||
|
*/
|
||||||
|
package uk.ac.aber.cs22120.group20.javafx;
|
||||||
|
|
||||||
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
|
import javafx.collections.transformation.FilteredList;
|
||||||
|
import javafx.collections.transformation.SortedList;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.fxml.Initializable;
|
||||||
|
import javafx.scene.control.*;
|
||||||
|
import javafx.scene.image.Image;
|
||||||
|
import javafx.scene.image.ImageView;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
import uk.ac.aber.cs22120.group20.javafx.Application;
|
||||||
|
import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class that handles the keyboard and mouse input and interaction for the 'Dictionary Page' which is
|
||||||
|
* defined by 'dictionary.fxml'
|
||||||
|
*
|
||||||
|
* @author Brad Corbett [brc9]
|
||||||
|
* @author Henry Dugmore [hjd3]
|
||||||
|
* @author Kain Bryan-Jones [kab74]
|
||||||
|
* @author Luke Wybar [law39]
|
||||||
|
* @author Marcin Jakob [maj83]
|
||||||
|
* @author Oscar Pocock [osp1]
|
||||||
|
* @author Tom Perry [top1]
|
||||||
|
* @author Waylen Watts [ncw]
|
||||||
|
* @version 0.1 Initial development.
|
||||||
|
* @see DictionaryEntry
|
||||||
|
* @see Application
|
||||||
|
*/
|
||||||
|
public class PracticeListController implements Initializable {
|
||||||
|
public static Stage primaryStage = null;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ImageView alphaSort;
|
||||||
|
@FXML
|
||||||
|
private TextField searchBox;
|
||||||
|
@FXML
|
||||||
|
private TableView<DictionaryEntry> table;
|
||||||
|
@FXML
|
||||||
|
private TableColumn<DictionaryEntry, String> english = new TableColumn<>();
|
||||||
|
@FXML
|
||||||
|
private TableColumn<DictionaryEntry, String> welsh = new TableColumn<>();
|
||||||
|
|
||||||
|
public ObservableList<DictionaryEntry> list = FXCollections.observableArrayList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the table of dictionary entries.
|
||||||
|
* <p>
|
||||||
|
* An observable list of DictionaryEntries is loaded from the Application class into a local instance of ObservableList.
|
||||||
|
* It also sets up Lambda expressions related to live searching functionality and the display of DictionaryEntries.
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* @param resourceBundle
|
||||||
|
* @see Application
|
||||||
|
* @see DictionaryEntry
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initialize(URL url, ResourceBundle resourceBundle) {
|
||||||
|
// list.addAll(Application.dictionary);
|
||||||
|
for (DictionaryEntry entry : Application.dictionary) {
|
||||||
|
if (entry.isPracticeWord())
|
||||||
|
list.add(entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FilteredList<DictionaryEntry> filteredList = new FilteredList<>(list, p -> true); // Wrap list in a FilteredList
|
||||||
|
|
||||||
|
searchBox.textProperty().addListener((observable, oldSearchTerm, newSearchTerm) -> {
|
||||||
|
filteredList.setPredicate(dictionaryEntry -> { // returns true on a filter match, false if no match
|
||||||
|
boolean result = false;
|
||||||
|
|
||||||
|
table.refresh(); // This fixes the table highlighting issue
|
||||||
|
|
||||||
|
if (newSearchTerm == null || newSearchTerm.isEmpty()) { // If filter text is empty, display all dictionary entries
|
||||||
|
result = true;
|
||||||
|
} else {
|
||||||
|
// need all same case for compare.
|
||||||
|
final String lowerCaseSearchFilter = newSearchTerm.toLowerCase();
|
||||||
|
if (dictionaryEntry.getWelsh().toLowerCase().contains(lowerCaseSearchFilter)) {
|
||||||
|
result = true; // Filter matches Welsh
|
||||||
|
} else if (dictionaryEntry.getEnglish().toLowerCase().contains(lowerCaseSearchFilter)) {
|
||||||
|
result = true; // Filter matches English
|
||||||
|
// } else if (dictionaryEntry.getWordType().toLowerCase().contains(lowerCaseSearchFilter)) {
|
||||||
|
// result = true; // Filter matches Word Type
|
||||||
|
} else if (dictionaryEntry.getWordType().equals("verb") && ("to " + dictionaryEntry.getEnglish()).toLowerCase().contains(lowerCaseSearchFilter)) {
|
||||||
|
result = true; // Filter matches ['to' + a word] or [a word] if word is a verb
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
SortedList<DictionaryEntry> sortedList = new SortedList<>(filteredList); //Wrap the filtered list in a SortedList
|
||||||
|
sortedList.comparatorProperty().bind(table.comparatorProperty()); //Bind the sorted list comparator to the table comparator
|
||||||
|
// welsh.setCellValueFactory(new PropertyValueFactory<DictionaryEntry, String>("welsh"));
|
||||||
|
// english.setCellValueFactory(new PropertyValueFactory<DictionaryEntry, String>("english"));
|
||||||
|
|
||||||
|
table.setPlaceholder(new Label("No practice words found. Please try adding a practice word from the 'Dictionary' page."));
|
||||||
|
table.setRowFactory(tv -> {
|
||||||
|
TableRow<DictionaryEntry> row = new TableRow<DictionaryEntry>() {
|
||||||
|
@Override
|
||||||
|
protected void updateItem(DictionaryEntry dictionaryEntry, boolean b) {
|
||||||
|
super.updateItem(dictionaryEntry, b);
|
||||||
|
if (!isEmpty()) {
|
||||||
|
setStyle(" ");
|
||||||
|
// if (dictionaryEntry.isPracticeWord()) {
|
||||||
|
// setStyle("-fx-background-color: gray;");
|
||||||
|
// } else {
|
||||||
|
// setStyle(" ");
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
row.setOnMouseClicked(mouseEvent -> {
|
||||||
|
if (mouseEvent.getClickCount() == 1 && (!row.isEmpty())) {
|
||||||
|
for (DictionaryEntry entry : Application.dictionary) {
|
||||||
|
if (entry.equals(row.getItem())) {
|
||||||
|
entry.setPracticeWord(false);
|
||||||
|
list.remove(row.getItem());
|
||||||
|
table.refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
table.getSelectionModel().clearSelection();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
welsh.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
|
||||||
|
|
||||||
|
if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nm")) {
|
||||||
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nm}");
|
||||||
|
} else if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nf")) {
|
||||||
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nf}");
|
||||||
|
} else {
|
||||||
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
english.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> {
|
||||||
|
if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("verb")) {
|
||||||
|
return new SimpleStringProperty("to " + dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
|
||||||
|
} else {
|
||||||
|
return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getEnglish());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
table.setItems(sortedList);
|
||||||
|
table.getSortOrder().add(english);
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void switchLangSort() {
|
||||||
|
if (table.getSortOrder().contains(english)) {
|
||||||
|
if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) {
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
|
||||||
|
}
|
||||||
|
else if (welsh.getSortType().equals(TableColumn.SortType.DESCENDING)) {
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
|
||||||
|
}
|
||||||
|
table.getSortOrder().clear();
|
||||||
|
table.getSortOrder().add(welsh);
|
||||||
|
}
|
||||||
|
else if (table.getSortOrder().contains(welsh)) {
|
||||||
|
if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) {
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
|
||||||
|
}
|
||||||
|
else if (english.getSortType().equals(TableColumn.SortType.DESCENDING)) {
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
|
||||||
|
}
|
||||||
|
table.getSortOrder().clear();
|
||||||
|
table.getSortOrder().add(english);
|
||||||
|
}
|
||||||
|
table.sort();
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void switchAlphaSort() {
|
||||||
|
if (table.getSortOrder().contains(english)) {
|
||||||
|
if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) {
|
||||||
|
english.setSortType(TableColumn.SortType.DESCENDING);
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
|
||||||
|
} else {
|
||||||
|
english.setSortType(TableColumn.SortType.ASCENDING);
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
|
||||||
|
}
|
||||||
|
} else if (table.getSortOrder().contains(welsh)) {
|
||||||
|
if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) {
|
||||||
|
welsh.setSortType(TableColumn.SortType.DESCENDING);
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png"));
|
||||||
|
} else {
|
||||||
|
welsh.setSortType(TableColumn.SortType.ASCENDING);
|
||||||
|
alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Switches to the primary scene.
|
||||||
|
*
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
@FXML
|
||||||
|
private void switchToPrimary() throws IOException {
|
||||||
|
Application.setRoot("primary");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package uk.ac.aber.cs22120.group20;
|
package uk.ac.aber.cs22120.group20.javafx;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
|
@ -0,0 +1,20 @@
|
||||||
|
package uk.ac.aber.cs22120.group20.javafx;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class that contains all the scenes for the JavaFX user interface and will be responsible
|
||||||
|
* for initiating the transition to new ones.
|
||||||
|
* @Author
|
||||||
|
* @Version
|
||||||
|
* @See
|
||||||
|
*/
|
||||||
|
public class ScreenSwitch extends SharedCodeController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method that is responsible for the switching between
|
||||||
|
* JavaFX, with it taking the new scene’s name as a parameter.
|
||||||
|
*/
|
||||||
|
public void swap(SceneEnum newScene){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package uk.ac.aber.cs22120.group20;
|
package uk.ac.aber.cs22120.group20.javafx;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
|
@ -0,0 +1,12 @@
|
||||||
|
package uk.ac.aber.cs22120.group20.javafx;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract class that contains all the shared FXML elements between the
|
||||||
|
* different controller classes including the sliding menu and the test score counter, to reduce code
|
||||||
|
* duplication. This will be extended by all the controller classes.
|
||||||
|
* @Author
|
||||||
|
* @Version
|
||||||
|
* @See
|
||||||
|
*/
|
||||||
|
abstract public class SharedCodeController {
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
/**
|
||||||
|
* @(#) DictionaryEntry.java 0,1 2020/04/07
|
||||||
|
* <p>
|
||||||
|
* Copyright (c) 2020 Aberystwyth University.
|
||||||
|
* All rights reserved.
|
||||||
|
*/
|
||||||
|
package uk.ac.aber.cs22120.group20.json;
|
||||||
|
|
||||||
|
import uk.ac.aber.cs22120.group20.javafx.Application;
|
||||||
|
import uk.ac.aber.cs22120.group20.javafx.DictionaryController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class that demonstrates how a controller works.
|
||||||
|
*
|
||||||
|
* @author Brad Corbett [brc9]
|
||||||
|
* @author Henry Dugmore [hjd3]
|
||||||
|
* @author Kain Bryan-Jones [kab74]
|
||||||
|
* @author Luke Wybar [law39]
|
||||||
|
* @author Marcin Jakob [maj83]
|
||||||
|
* @author Oscar Pocock [osp1]
|
||||||
|
* @author Tom Perry [top1]
|
||||||
|
* @author Waylen Watts [ncw]
|
||||||
|
* @version 0.1 Initial development
|
||||||
|
* @see DictionaryController
|
||||||
|
*/
|
||||||
|
public class DictionaryEntry {
|
||||||
|
private String english;
|
||||||
|
private String welsh;
|
||||||
|
private String wordType;
|
||||||
|
private Boolean practiceWord;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance of a DictionaryEntry
|
||||||
|
*/
|
||||||
|
public DictionaryEntry() {
|
||||||
|
practiceWord = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates new instance of a DictionaryEntry
|
||||||
|
*
|
||||||
|
* @param english english translation of the word
|
||||||
|
* @param welsh welsh translation of the word
|
||||||
|
* @param wordType type of word
|
||||||
|
* @see Application
|
||||||
|
* @see DictionaryController
|
||||||
|
*/
|
||||||
|
public DictionaryEntry(String english, String welsh, String wordType) {
|
||||||
|
this.english = english;
|
||||||
|
this.welsh = welsh;
|
||||||
|
this.wordType = wordType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEnglish() {
|
||||||
|
return english;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnglish(String english) {
|
||||||
|
this.english = english;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWelsh() {
|
||||||
|
return welsh;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWelsh(String welsh) {
|
||||||
|
this.welsh = welsh;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWordType() {
|
||||||
|
return wordType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWordType(String wordType) {
|
||||||
|
this.wordType = wordType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean isPracticeWord() {
|
||||||
|
return practiceWord;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPracticeWord(Boolean practiceWord) {
|
||||||
|
this.practiceWord = practiceWord;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(DictionaryEntry entry) {
|
||||||
|
return entry.getEnglish().equals(this.getEnglish()) && entry.getWelsh().equals(this.getWelsh()) && entry.getWordType().equals(this.getWordType());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package uk.ac.aber.cs22120.group20.json;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
public class JsonProcessing {
|
||||||
|
|
||||||
|
public LinkedList<DictionaryEntry> readInJson(File file) {
|
||||||
|
LinkedList<DictionaryEntry> returnVal = new LinkedList<>();
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
|
||||||
|
try {
|
||||||
|
returnVal.addAll(Arrays.asList(objectMapper.readValue(file, DictionaryEntry[].class)));
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeOutJson(String directoryAndFile, LinkedList<DictionaryEntry> words) {
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
String JsonString = "";
|
||||||
|
|
||||||
|
try {
|
||||||
|
JsonString = objectMapper.writeValueAsString(words);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Files.writeString(Paths.get(directoryAndFile), JsonString);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
package uk.ac.aber.cs22120.group20.selfassessment;
|
||||||
|
|
||||||
|
import uk.ac.aber.cs22120.group20.json.WelshDictionary;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class that contains methods to create a randomised list of questions that will
|
||||||
|
* contain a random distribution of question types.
|
||||||
|
* @Author
|
||||||
|
* @Version
|
||||||
|
* @See
|
||||||
|
*/
|
||||||
|
public class AssessmentGenerator extends Question {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method that will generate a randomized list of questions consisting of random distribution of questions
|
||||||
|
* types, using the dictionary’s practice words as the parameter.
|
||||||
|
* @param wordList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public LinkedList<Question> generateAssessment(LinkedList<WelshDictionary> wordList){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method
|
||||||
|
* that will generate a list of questions that are the type ‘Match The Meanings’, using the dictionary's
|
||||||
|
* practice words as the parameter.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public LinkedList<Question> generateWordMatch(LinkedList<WelshDictionary>){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method
|
||||||
|
* that will generate a list of questions that are the type ‘6 Meanings’, using the dictionary's practice
|
||||||
|
* words as the parameter.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public LinkedList<Question> generateSixMeanings(LinkedList<WelshDictionar>){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method that
|
||||||
|
* will generate a list of questions that are the type ‘Translation’, using the dictionary's practice words as
|
||||||
|
* the parameter.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public LinkedList<Question> generateWordEnter(LinkedList<WelshDictionary>){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,198 @@
|
||||||
|
package uk.ac.aber.cs22120.group20.selfassessment;
|
||||||
|
/**
|
||||||
|
* @(#) MyController.java 0,1 2020/04/07
|
||||||
|
* <p>
|
||||||
|
* Copyright (c) 2020 Aberystwyth University.
|
||||||
|
* All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.fxml.Initializable;
|
||||||
|
import javafx.scene.control.ComboBox;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
|
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class that generate questions and check answers for match the meaning test.
|
||||||
|
*
|
||||||
|
* @author Brad Corbett [brc9]
|
||||||
|
* @author Henry Dugmore [hjd3]
|
||||||
|
* @author Kain Bryan-Jones [kab74]
|
||||||
|
* @author Luke Wybar [law39]
|
||||||
|
* @author Marcin Jakobik [maj83]
|
||||||
|
* @author Oscar Pocock [osp1]
|
||||||
|
* @author Tom Perry [top1]
|
||||||
|
* @author Waylen Watts [ncw]
|
||||||
|
* @version 0.1 Initial development
|
||||||
|
* @see Main
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
public class MatchTheMeaningQuestion implements Initializable {
|
||||||
|
|
||||||
|
private Random rand = new Random();
|
||||||
|
private LinkedList<DictionaryEntry> setOfQuestions=new LinkedList<>();
|
||||||
|
private ArrayList<Integer> orderList = new ArrayList<>(Arrays.asList(0,1,2,3));
|
||||||
|
private int corAns = 0;
|
||||||
|
private int wrongAns = 0;
|
||||||
|
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ComboBox<String> word1;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ComboBox<String> word2;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ComboBox<String> word3;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ComboBox<String> word4;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label EngWord1;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label EngWord2;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label EngWord3;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label EngWord4;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label WelshWord1;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label WelshWord2;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label WelshWord3;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label WelshWord4;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label CorrectAnswer;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label WrongAnswer;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pick randomly dictionary entry and add it to question list where are stored questions for this test.
|
||||||
|
*
|
||||||
|
* @param dictionary main list of dictionary entries with words.
|
||||||
|
*/
|
||||||
|
private void getQuestions(LinkedList<DictionaryEntry> dictionary){
|
||||||
|
|
||||||
|
boolean isDuplicate = false;
|
||||||
|
|
||||||
|
do{
|
||||||
|
int rand_q=rand.nextInt(dictionary.size()-1);
|
||||||
|
|
||||||
|
DictionaryEntry pickedQuestion = dictionary.get(rand_q);
|
||||||
|
|
||||||
|
//If size of list is greater than 1 check for duplicates...
|
||||||
|
if(setOfQuestions.size()>=1){
|
||||||
|
|
||||||
|
for (DictionaryEntry setOfQuestion : setOfQuestions) {
|
||||||
|
|
||||||
|
//If it is duplicate change isDuplicate to true and break
|
||||||
|
if (setOfQuestion.equals(pickedQuestion)) {
|
||||||
|
isDuplicate = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//If duplicate wasn't found add entry to the list
|
||||||
|
if(!isDuplicate){
|
||||||
|
setOfQuestions.add(pickedQuestion);
|
||||||
|
}
|
||||||
|
|
||||||
|
//... otherwise, add entry to the
|
||||||
|
}else{
|
||||||
|
setOfQuestions.add(pickedQuestion);
|
||||||
|
}
|
||||||
|
|
||||||
|
isDuplicate =false;
|
||||||
|
|
||||||
|
}while(setOfQuestions.size()<5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set chosen words from dictionary on the scene.
|
||||||
|
*
|
||||||
|
* @param questions list of dictionary entries chosen for this test.
|
||||||
|
* @param orderList list of integers to change way of displaying welsh words.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
private void setWords(LinkedList<DictionaryEntry> questions, ArrayList<Integer> orderList){
|
||||||
|
EngWord1.setText(questions.get(0).getEnglish());
|
||||||
|
EngWord2.setText(questions.get(1).getEnglish());
|
||||||
|
EngWord3.setText(questions.get(2).getEnglish());
|
||||||
|
EngWord4.setText(questions.get(3).getEnglish());
|
||||||
|
|
||||||
|
Collections.shuffle(orderList);
|
||||||
|
|
||||||
|
WelshWord1.setText(questions.get(orderList.get(0)).getWelsh());
|
||||||
|
WelshWord2.setText(questions.get(orderList.get(1)).getWelsh());
|
||||||
|
WelshWord3.setText(questions.get(orderList.get(2)).getWelsh());
|
||||||
|
WelshWord4.setText(questions.get(orderList.get(3)).getWelsh());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if answers from users are correct.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void checkAnswers(){
|
||||||
|
int w1 = Integer.parseInt(word1.getValue())-1;
|
||||||
|
int w2 = Integer.parseInt(word2.getValue())-1;
|
||||||
|
int w3 = Integer.parseInt(word3.getValue())-1;
|
||||||
|
int w4 = Integer.parseInt(word4.getValue())-1;
|
||||||
|
|
||||||
|
if(setOfQuestions.get(w1).getWelsh().equals(WelshWord1.getText())){
|
||||||
|
corAns++;
|
||||||
|
}else wrongAns++;
|
||||||
|
|
||||||
|
if(setOfQuestions.get(w2).getWelsh().equals(WelshWord2.getText())){
|
||||||
|
corAns++;
|
||||||
|
}else wrongAns++;
|
||||||
|
|
||||||
|
if(setOfQuestions.get(w3).getWelsh().equals(WelshWord3.getText())){
|
||||||
|
corAns++;
|
||||||
|
}else wrongAns++;
|
||||||
|
|
||||||
|
if(setOfQuestions.get(w4).getWelsh().equals(WelshWord4.getText())){
|
||||||
|
corAns++;
|
||||||
|
}else wrongAns++;
|
||||||
|
|
||||||
|
CorrectAnswer.setText(Integer.toString(corAns));
|
||||||
|
|
||||||
|
WrongAnswer.setText(Integer.toString(wrongAns));
|
||||||
|
|
||||||
|
setOfQuestions.clear();
|
||||||
|
this.prepare();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method responsible for preparing questions and scene.
|
||||||
|
*/
|
||||||
|
private void prepare(){
|
||||||
|
getQuestions(Main.dictionary);
|
||||||
|
setWords(setOfQuestions,orderList);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(URL url, ResourceBundle resourceBundle) {
|
||||||
|
|
||||||
|
this.prepare();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package uk.ac.aber.cs22120.group20.selfassessment;
|
||||||
|
|
||||||
|
import uk.ac.aber.cs22120.group20.json.WelshDictionary;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract class contains the basic information that all the shared information between the
|
||||||
|
* types of test questions including the questions’ correct answers and possible answers. All question
|
||||||
|
* classes will extend this class.
|
||||||
|
* @Author
|
||||||
|
* @Version
|
||||||
|
* @See
|
||||||
|
*/
|
||||||
|
public class Question {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for
|
||||||
|
* WordEnterQuestion that takes a WelshDictionary object that is being tested on as the parameter.
|
||||||
|
* @param correctAnswer
|
||||||
|
*/
|
||||||
|
public wordEnterQuestion(WelshDictionary correctAnswer){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,144 @@
|
||||||
|
package uk.ac.aber.cs22120.group20.selfassessment;
|
||||||
|
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.control.TextField;
|
||||||
|
import javafx.scene.image.Image;
|
||||||
|
import javafx.scene.image.ImageView;
|
||||||
|
import javafx.scene.text.Text;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controller for the translationTest fxml file.
|
||||||
|
*
|
||||||
|
* @author Brad Corbett brc9
|
||||||
|
* @version 0.9
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TranslationController {
|
||||||
|
ArrayList<DictionaryEntry> practiceList = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the words that have already been used, and are no longer to be generated.
|
||||||
|
*/
|
||||||
|
ArrayList<Integer> numbersUsed = new ArrayList<Integer>();
|
||||||
|
int correctGuessesInt = 0;
|
||||||
|
int incorrectGuessesInt = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the word that will be randomly chosen from the practiceList.
|
||||||
|
*/
|
||||||
|
int chosenWord = 0;
|
||||||
|
@FXML
|
||||||
|
private TextField translationBox;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Text typeOfTest;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Text wordToTranslate;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Text correctGuesses;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Text incorrectGuesses;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ImageView submitButton;
|
||||||
|
|
||||||
|
Random rand = new Random();
|
||||||
|
|
||||||
|
|
||||||
|
boolean englishOrWelsh = false; // False means English to Welsh, true means Welsh to English
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the test for the first time, filling the practice list with words from the dictionary,
|
||||||
|
* deciding if this test will be from English to Welsh or Welsh to English, and generating
|
||||||
|
* which is the first word the user will have to translate.
|
||||||
|
*/
|
||||||
|
@FXML
|
||||||
|
private void initialize(){
|
||||||
|
|
||||||
|
submitButton.setImage(new Image ("file:src/main/resources/assets/right-icon.png"));
|
||||||
|
|
||||||
|
for(DictionaryEntry entry : App.dictionary){
|
||||||
|
if(entry.isPracticeWord()){
|
||||||
|
practiceList.add(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
chosenWord = (rand.nextInt(practiceList.size()));
|
||||||
|
numbersUsed.add(chosenWord);
|
||||||
|
|
||||||
|
englishOrWelsh = rand.nextBoolean();
|
||||||
|
|
||||||
|
correctGuesses.setText("Correct Guesses: 0");
|
||||||
|
incorrectGuesses.setText("Incorrect Guesses: 0");
|
||||||
|
|
||||||
|
if(englishOrWelsh){
|
||||||
|
wordToTranslate.setText(practiceList.get(chosenWord).getEnglish());
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
wordToTranslate.setText(practiceList.get(chosenWord).getWelsh());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes the word that the user has entered as their attempt at translate, compares
|
||||||
|
* it to the correct translation, and depending on if it is correct or not, increment how many
|
||||||
|
* right or wrong answers they have so far. After checking if the user got it right,
|
||||||
|
* it will generate a new word for the user to translate, provided they have words left to translate.
|
||||||
|
*/
|
||||||
|
@FXML
|
||||||
|
void translateWord() {
|
||||||
|
|
||||||
|
|
||||||
|
if(englishOrWelsh) {
|
||||||
|
if (translationBox.getText().equals(practiceList.get(chosenWord).getWelsh())) {
|
||||||
|
correctGuessesInt++;
|
||||||
|
} else {
|
||||||
|
incorrectGuessesInt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (translationBox.getText().equals(practiceList.get(chosenWord).getEnglish())) {
|
||||||
|
correctGuessesInt++;
|
||||||
|
} else {
|
||||||
|
incorrectGuessesInt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
correctGuesses.setText("Correct Guesses: " + correctGuessesInt);
|
||||||
|
incorrectGuesses.setText("Incorrect Guesses: " + incorrectGuessesInt);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
do{
|
||||||
|
chosenWord = (rand.nextInt(practiceList.size()));
|
||||||
|
}while((numbersUsed.contains(chosenWord)) && numbersUsed.size() < practiceList.size());
|
||||||
|
|
||||||
|
numbersUsed.add(chosenWord);
|
||||||
|
|
||||||
|
if(numbersUsed.size() > practiceList.size()){
|
||||||
|
wordToTranslate.setText("Test Complete");
|
||||||
|
submitButton.setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(englishOrWelsh){
|
||||||
|
wordToTranslate.setText(practiceList.get(chosenWord).getEnglish());
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
wordToTranslate.setText(practiceList.get(chosenWord).getWelsh());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package uk.ac.aber.cs22120.group20.test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class that contains methods which will be used to test that the JSON package classes are
|
||||||
|
* correctly loading and saving to and from the JSON file.
|
||||||
|
* @Author
|
||||||
|
* @Version
|
||||||
|
* @See
|
||||||
|
*/
|
||||||
|
public class JSONTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JUnit test to check that the JSON file has been correctly loaded.
|
||||||
|
*/
|
||||||
|
@test public void testLoad(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JUnit test to check that any changes to the list of definitions are
|
||||||
|
* updated and saved to the JSON file accordingly.
|
||||||
|
*/
|
||||||
|
@test public void testSave(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
package uk.ac.aber.cs22120.group20.test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class that contains methods to test that the application class is correctly storing the full
|
||||||
|
* list of dictionary definitions.
|
||||||
|
* Furthermore, this class will also test that the elements such as the sliding menu and score counter are
|
||||||
|
* working as intended, along with testing that scenes are ending and transitioning correctly when
|
||||||
|
* applicable.
|
||||||
|
* @Author
|
||||||
|
* @Version
|
||||||
|
* @See
|
||||||
|
*/
|
||||||
|
public class JavaFXTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests to confirm that the dictionary definitions loaded match to an
|
||||||
|
* identical base set.
|
||||||
|
*/
|
||||||
|
@test public void testDefinition(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test to confirm that the user score counter correctly increases
|
||||||
|
* by increments on one.
|
||||||
|
*/
|
||||||
|
@test public void testScoreCounter(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A preset search test to confirm that words are being searched for
|
||||||
|
* correctly.
|
||||||
|
*/
|
||||||
|
@test public void testFindWord(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A test to check that a new word is correctly added and saved to
|
||||||
|
* the JSON file.
|
||||||
|
*/
|
||||||
|
@test public void testAddWord(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*A test to check that the JSON file is correctly updated when a
|
||||||
|
* word is removed.
|
||||||
|
*/
|
||||||
|
@test public void testRemoveWord(){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
package uk.ac.aber.cs22120.group20.test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class will test that the lists pulled in the self-assessment package are indeed
|
||||||
|
* random, while also pulling the matching data from the dictionary.
|
||||||
|
* @Author
|
||||||
|
* @Version
|
||||||
|
* @See
|
||||||
|
*/
|
||||||
|
public class SelfAssesmentTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test to confirm that the random number return is working
|
||||||
|
* correctly.
|
||||||
|
*/
|
||||||
|
@test
|
||||||
|
public void testRandomReturn(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test to check and confirm that the game types are
|
||||||
|
* either made available or are locked off depending on the number of practice list questions.
|
||||||
|
*/
|
||||||
|
@test
|
||||||
|
public void testAvailableSelfAssessment(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that will check that an input by a user is correctly checked
|
||||||
|
* to the correct answer.
|
||||||
|
*/
|
||||||
|
@test
|
||||||
|
public void testUserAnswer(){}
|
||||||
|
}
|
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 520 B |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 558 B |
After Width: | Height: | Size: 403 B |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 786 B |
After Width: | Height: | Size: 549 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 854 B |
After Width: | Height: | Size: 720 B |
After Width: | Height: | Size: 291 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 747 B |
After Width: | Height: | Size: 305 B |
After Width: | Height: | Size: 264 B |
After Width: | Height: | Size: 823 B |
After Width: | Height: | Size: 676 B |
After Width: | Height: | Size: 431 B |
After Width: | Height: | Size: 302 B |
After Width: | Height: | Size: 806 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 448 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 783 B |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 807 B |
After Width: | Height: | Size: 564 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 851 B |
After Width: | Height: | Size: 796 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 929 B |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 501 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 844 B |
After Width: | Height: | Size: 501 B |
After Width: | Height: | Size: 429 B |
After Width: | Height: | Size: 894 B |
After Width: | Height: | Size: 758 B |
After Width: | Height: | Size: 555 B |
After Width: | Height: | Size: 482 B |
After Width: | Height: | Size: 920 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 567 B |
|
@ -0,0 +1,65 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.scene.control.Button?>
|
||||||
|
<?import javafx.scene.control.ComboBox?>
|
||||||
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.control.TextField?>
|
||||||
|
<?import javafx.scene.layout.ColumnConstraints?>
|
||||||
|
<?import javafx.scene.layout.GridPane?>
|
||||||
|
<?import javafx.scene.layout.RowConstraints?>
|
||||||
|
|
||||||
|
<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="506.0" prefWidth="702.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="uk.ac.aber.cs22120.group20.javafx.AddWordController">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="84.33331298828125" minWidth="10.0" prefWidth="10.666646321614593" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="273.3333536783854" minWidth="10.0" prefWidth="273.3333536783854" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="87.3333740234375" minWidth="7.6666259765625" prefWidth="7.6666259765625" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints maxHeight="50.66668701171875" minHeight="10.0" prefHeight="50.66668701171875" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="46.33333333333332" minHeight="10.0" prefHeight="46.33333333333332" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="37.666646321614564" minHeight="10.0" prefHeight="37.666646321614564" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="34.3333740234375" minHeight="10.0" prefHeight="34.3333740234375" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="123.99998474121094" minHeight="10.0" prefHeight="76.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="110.0" minHeight="10.0" prefHeight="31.66668701171872" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="133.0" minHeight="10.0" prefHeight="28.999979654947936" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="129.33331298828125" minHeight="10.0" prefHeight="129.33331298828125" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<Label alignment="CENTER" prefHeight="17.0" prefWidth="105.0" text="English" GridPane.columnIndex="1" GridPane.rowIndex="2" />
|
||||||
|
<Label alignment="CENTER" prefHeight="17.0" prefWidth="105.0" text="Welsh" GridPane.columnIndex="5" GridPane.rowIndex="2" />
|
||||||
|
<ComboBox fx:id="wordType" prefHeight="25.0" prefWidth="275.0" promptText="Type" GridPane.columnIndex="3" GridPane.rowIndex="3" />
|
||||||
|
<Button mnemonicParsing="false" onAction="#addButtonClick" prefHeight="25.0" prefWidth="274.0" text="Add Word" GridPane.columnIndex="3" GridPane.rowIndex="4" />
|
||||||
|
<TextField fx:id="english" GridPane.columnIndex="1" GridPane.rowIndex="3" />
|
||||||
|
<TextField fx:id="welsh" GridPane.columnIndex="5" GridPane.rowIndex="3" />
|
||||||
|
<Button mnemonicParsing="false" onAction="#switchToPrimary" prefHeight="25.0" prefWidth="107.0" text="Switch Scene" GridPane.columnIndex="1" GridPane.rowIndex="5" />
|
||||||
|
<GridPane prefHeight="55.0" prefWidth="258.0" GridPane.columnIndex="3" GridPane.rowIndex="5">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharch" prefHeight="25.0" prefWidth="35.0" text="ch" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addChardd" prefHeight="25.0" prefWidth="34.0" text="dd" GridPane.columnIndex="1" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharff" prefHeight="25.0" prefWidth="34.0" text="ff" GridPane.columnIndex="2" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharng" prefHeight="25.0" prefWidth="34.0" text="ng" GridPane.columnIndex="3" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharll" prefHeight="25.0" prefWidth="34.0" text="ll" GridPane.columnIndex="4" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharph" prefHeight="25.0" prefWidth="34.0" text="ph" GridPane.columnIndex="5" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharrh" prefHeight="25.0" prefWidth="34.0" text="rh" GridPane.columnIndex="6" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharth" prefHeight="25.0" prefWidth="34.0" text="th" GridPane.columnIndex="7" />
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
|
@ -0,0 +1,80 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.Insets?>
|
||||||
|
<?import javafx.scene.control.Button?>
|
||||||
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.control.TableColumn?>
|
||||||
|
<?import javafx.scene.control.TableView?>
|
||||||
|
<?import javafx.scene.control.TextField?>
|
||||||
|
<?import javafx.scene.image.Image?>
|
||||||
|
<?import javafx.scene.image.ImageView?>
|
||||||
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
<?import javafx.scene.layout.VBox?>
|
||||||
|
<?import javafx.scene.text.Font?>
|
||||||
|
|
||||||
|
<VBox alignment="CENTER" prefHeight="512.0" prefWidth="432.0" 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.DictionaryController">
|
||||||
|
<children>
|
||||||
|
<HBox alignment="CENTER_LEFT" prefHeight="11.0" prefWidth="392.0" VBox.vgrow="NEVER">
|
||||||
|
<children>
|
||||||
|
<Label minWidth="-Infinity" text="Search:">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
<TextField fx:id="searchBox" prefHeight="26.0" prefWidth="519.0" HBox.hgrow="ALWAYS" />
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" fillHeight="false" prefHeight="14.0" prefWidth="392.0" VBox.vgrow="NEVER">
|
||||||
|
<children>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" prefHeight="100.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
|
||||||
|
<children>
|
||||||
|
<Label minWidth="-Infinity" text="English">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" prefHeight="100.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<ImageView fx:id="alphaSort" fitHeight="20.0" fitWidth="20.0" onMouseClicked="#switchAlphaSort" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../../../../../assets/icons/black_icons/50px/sort-alpha-up-50.png" />
|
||||||
|
</image>
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets right="5.0" />
|
||||||
|
</HBox.margin>
|
||||||
|
</ImageView>
|
||||||
|
<ImageView fitHeight="20.0" fitWidth="20.0" onMouseClicked="#switchLangSort" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../../../../../assets/icons/black_icons/50px/sort-lang-50.png" />
|
||||||
|
</image>
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets left="5.0" />
|
||||||
|
</HBox.margin>
|
||||||
|
</ImageView>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" prefHeight="100.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
|
||||||
|
<children>
|
||||||
|
<Label minWidth="-Infinity" text="Welsh">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<TableView fx:id="table" VBox.vgrow="ALWAYS">
|
||||||
|
<columns>
|
||||||
|
<TableColumn fx:id="english" prefWidth="196.0" text="English" />
|
||||||
|
<TableColumn fx:id="welsh" prefWidth="195.0" text="Welsh" />
|
||||||
|
</columns>
|
||||||
|
<columnResizePolicy>
|
||||||
|
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
|
||||||
|
</columnResizePolicy>
|
||||||
|
</TableView>
|
||||||
|
<Button fx:id="primaryButton" onAction="#switchToPracticeList" text="Switch to Practice List" />
|
||||||
|
</children>
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
|
||||||
|
</padding>
|
||||||
|
</VBox>
|
|
@ -0,0 +1,71 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import java.lang.String?>
|
||||||
|
<?import javafx.collections.FXCollections?>
|
||||||
|
<?import javafx.scene.control.Button?>
|
||||||
|
<?import javafx.scene.control.ComboBox?>
|
||||||
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.layout.Pane?>
|
||||||
|
|
||||||
|
<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" fx:controller="MyController">
|
||||||
|
<children>
|
||||||
|
<Button fx:id="ConfirmButton" layoutX="271.0" layoutY="321.0" mnemonicParsing="false" text="Confirm" onAction="#checkAnswers" />
|
||||||
|
<Label layoutX="248.0" layoutY="356.0" text="Match the meaning" />
|
||||||
|
<ComboBox fx:id="word1" layoutX="448.0" layoutY="118.0" prefHeight="25.0" prefWidth="58.0" value="1">
|
||||||
|
<items>
|
||||||
|
<FXCollections fx:factory="observableArrayList">
|
||||||
|
<String fx:value="1" />
|
||||||
|
<String fx:value="2" />
|
||||||
|
<String fx:value="3" />
|
||||||
|
<String fx:value="4" />
|
||||||
|
</FXCollections>
|
||||||
|
</items>
|
||||||
|
</ComboBox>
|
||||||
|
<ComboBox fx:id="word2" layoutX="448.0" layoutY="153.0" prefHeight="25.0" prefWidth="58.0" value="1">
|
||||||
|
<items>
|
||||||
|
<FXCollections fx:factory="observableArrayList">
|
||||||
|
<String fx:value="1" />
|
||||||
|
<String fx:value="2" />
|
||||||
|
<String fx:value="3" />
|
||||||
|
<String fx:value="4" />
|
||||||
|
</FXCollections>
|
||||||
|
</items>
|
||||||
|
</ComboBox>
|
||||||
|
<ComboBox fx:id="word3" layoutX="448.0" layoutY="188.0" prefHeight="25.0" prefWidth="58.0" value="1">
|
||||||
|
<items>
|
||||||
|
<FXCollections fx:factory="observableArrayList">
|
||||||
|
<String fx:value="1" />
|
||||||
|
<String fx:value="2" />
|
||||||
|
<String fx:value="3" />
|
||||||
|
<String fx:value="4" />
|
||||||
|
</FXCollections>
|
||||||
|
</items>
|
||||||
|
</ComboBox>
|
||||||
|
<ComboBox fx:id="word4" layoutX="448.0" layoutY="223.0" prefHeight="25.0" prefWidth="58.0" value="1">
|
||||||
|
<items>
|
||||||
|
<FXCollections fx:factory="observableArrayList">
|
||||||
|
<String fx:value="1" />
|
||||||
|
<String fx:value="2" />
|
||||||
|
<String fx:value="3" />
|
||||||
|
<String fx:value="4" />
|
||||||
|
</FXCollections>
|
||||||
|
</items>
|
||||||
|
</ComboBox>
|
||||||
|
<Label fx:id="WelshWord1" layoutX="343.0" layoutY="122.0" text="Welsh word#3" />
|
||||||
|
<Label fx:id="WelshWord2" layoutX="343.0" layoutY="157.0" text="Welsh word#2" />
|
||||||
|
<Label fx:id="WelshWord3" layoutX="343.0" layoutY="192.0" text="Welsh word#1" />
|
||||||
|
<Label fx:id="WelshWord4" layoutX="343.0" layoutY="227.0" text="Welsh word#4" />
|
||||||
|
<Label fx:id="EngWord1" layoutX="115.0" layoutY="122.0" text="English Word #1" />
|
||||||
|
<Label fx:id="EngWord2" layoutX="115.0" layoutY="157.0" text="English Word #2" />
|
||||||
|
<Label fx:id="EngWord3" layoutX="115.0" layoutY="192.0" text="English Word #3" />
|
||||||
|
<Label fx:id="EngWord4" layoutX="115.0" layoutY="227.0" text="English Word #4" />
|
||||||
|
<Label layoutX="105.0" layoutY="122.0" text="1." />
|
||||||
|
<Label layoutX="105.0" layoutY="157.0" text="2." />
|
||||||
|
<Label layoutX="105.0" layoutY="192.0" text="3." />
|
||||||
|
<Label layoutX="105.0" layoutY="227.0" text="4." />
|
||||||
|
<Label layoutX="367.0" layoutY="23.0" text="Correct answers:" />
|
||||||
|
<Label layoutX="368.0" layoutY="53.0" text="Wrong answers:" />
|
||||||
|
<Label fx:id="CorrectAnswer" layoutX="463.0" layoutY="23.0" text="0" />
|
||||||
|
<Label fx:id="WrongAnswer" layoutX="463.0" layoutY="53.0" text="0" />
|
||||||
|
</children>
|
||||||
|
</Pane>
|
|
@ -0,0 +1,80 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.Insets?>
|
||||||
|
<?import javafx.scene.control.Button?>
|
||||||
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.control.TableColumn?>
|
||||||
|
<?import javafx.scene.control.TableView?>
|
||||||
|
<?import javafx.scene.control.TextField?>
|
||||||
|
<?import javafx.scene.image.Image?>
|
||||||
|
<?import javafx.scene.image.ImageView?>
|
||||||
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
<?import javafx.scene.layout.VBox?>
|
||||||
|
<?import javafx.scene.text.Font?>
|
||||||
|
|
||||||
|
<VBox alignment="CENTER" prefHeight="512.0" prefWidth="432.0" 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.PracticeListController">
|
||||||
|
<children>
|
||||||
|
<HBox alignment="CENTER_LEFT" prefHeight="11.0" prefWidth="392.0" VBox.vgrow="NEVER">
|
||||||
|
<children>
|
||||||
|
<Label minWidth="-Infinity" text="Search:">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
<TextField fx:id="searchBox" prefHeight="26.0" prefWidth="519.0" HBox.hgrow="ALWAYS" />
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" fillHeight="false" prefHeight="14.0" prefWidth="392.0" VBox.vgrow="NEVER">
|
||||||
|
<children>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" prefHeight="100.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
|
||||||
|
<children>
|
||||||
|
<Label minWidth="-Infinity" text="English">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" prefHeight="100.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<ImageView fx:id="alphaSort" fitHeight="20.0" fitWidth="20.0" onMouseClicked="#switchAlphaSort" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../../../../../assets/icons/black_icons/50px/sort-alpha-up-50.png" />
|
||||||
|
</image>
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets right="5.0" />
|
||||||
|
</HBox.margin>
|
||||||
|
</ImageView>
|
||||||
|
<ImageView fitHeight="20.0" fitWidth="20.0" onMouseClicked="#switchLangSort" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../../../../../assets/icons/black_icons/50px/sort-lang-50.png" />
|
||||||
|
</image>
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets left="5.0" />
|
||||||
|
</HBox.margin>
|
||||||
|
</ImageView>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" prefHeight="100.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
|
||||||
|
<children>
|
||||||
|
<Label minWidth="-Infinity" text="Welsh">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<TableView fx:id="table" VBox.vgrow="ALWAYS">
|
||||||
|
<columns>
|
||||||
|
<TableColumn fx:id="english" prefWidth="196.0" text="English" />
|
||||||
|
<TableColumn fx:id="welsh" prefWidth="195.0" text="Welsh" />
|
||||||
|
</columns>
|
||||||
|
<columnResizePolicy>
|
||||||
|
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
|
||||||
|
</columnResizePolicy>
|
||||||
|
</TableView>
|
||||||
|
<Button fx:id="primaryButton" onAction="#switchToPrimary" text="Switch to Primary View" />
|
||||||
|
</children>
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
|
||||||
|
</padding>
|
||||||
|
</VBox>
|
|
@ -5,7 +5,7 @@
|
||||||
<?import javafx.scene.control.Button?>
|
<?import javafx.scene.control.Button?>
|
||||||
<?import javafx.geometry.Insets?>
|
<?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.PrimaryController">
|
<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>
|
<children>
|
||||||
<Label text="Primary View" />
|
<Label text="Primary View" />
|
||||||
<Button fx:id="primaryButton" text="Switch to Secondary View" onAction="#switchToSecondary"/>
|
<Button fx:id="primaryButton" text="Switch to Secondary View" onAction="#switchToSecondary"/>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<?import javafx.scene.control.Button?>
|
<?import javafx.scene.control.Button?>
|
||||||
<?import javafx.geometry.Insets?>
|
<?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.SecondaryController">
|
<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>
|
<children>
|
||||||
<Label text="Secondary View" />
|
<Label text="Secondary View" />
|
||||||
<Button fx:id="secondaryButton" text="Switch to Primary View" onAction="#switchToPrimary" />
|
<Button fx:id="secondaryButton" text="Switch to Primary View" onAction="#switchToPrimary" />
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.scene.control.TextField?>
|
||||||
|
<?import javafx.scene.control.TitledPane?>
|
||||||
|
<?import javafx.scene.image.ImageView?>
|
||||||
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
|
<?import javafx.scene.layout.Pane?>
|
||||||
|
<?import javafx.scene.text.Font?>
|
||||||
|
<?import javafx.scene.text.Text?>
|
||||||
|
|
||||||
|
<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" fx:controller="uk.ac.aber.cs22120.group20.javafx.PrimaryController">
|
||||||
|
<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">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="translationBox" layoutX="205.0" layoutY="199.0" prefHeight="45.0" prefWidth="188.0" promptText="Enter translation here" />
|
||||||
|
<Text fx:id="typeOfTest" fill="#8d8d8d" layoutX="246.0" layoutY="343.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Translation">
|
||||||
|
<font>
|
||||||
|
<Font name="System Italic" size="22.0" />
|
||||||
|
</font>
|
||||||
|
</Text>
|
||||||
|
<Text fx:id="wordToTranslate" layoutX="165.0" layoutY="147.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Word To Translate">
|
||||||
|
<font>
|
||||||
|
<Font size="33.0" />
|
||||||
|
</font>
|
||||||
|
</Text>
|
||||||
|
<Text fx:id="correctGuesses" layoutX="407.0" layoutY="20.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Correct Guesses: 0" wrappingWidth="227.18359375">
|
||||||
|
<font>
|
||||||
|
<Font size="17.0" />
|
||||||
|
</font>
|
||||||
|
</Text>
|
||||||
|
<Text fx:id="incorrectGuesses" layoutX="407.0" layoutY="43.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Incorrect Guesses: 0">
|
||||||
|
<font>
|
||||||
|
<Font size="17.0" />
|
||||||
|
</font>
|
||||||
|
</Text>
|
||||||
|
<ImageView fx:id="submitButton" fitHeight="46.0" fitWidth="69.0" layoutX="398.0" layoutY="199.0" onMouseClicked="#translateWord" pickOnBounds="true" preserveRatio="true" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</content>
|
||||||
|
</TitledPane>
|
||||||
|
</children>
|
||||||
|
</Pane>
|
|
@ -0,0 +1,65 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.scene.control.Button?>
|
||||||
|
<?import javafx.scene.control.ComboBox?>
|
||||||
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.control.TextField?>
|
||||||
|
<?import javafx.scene.layout.ColumnConstraints?>
|
||||||
|
<?import javafx.scene.layout.GridPane?>
|
||||||
|
<?import javafx.scene.layout.RowConstraints?>
|
||||||
|
|
||||||
|
<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="506.0" prefWidth="702.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="uk.ac.aber.cs22120.group20.javafx.AddWordController">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="84.33331298828125" minWidth="10.0" prefWidth="10.666646321614593" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="273.3333536783854" minWidth="10.0" prefWidth="273.3333536783854" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="87.3333740234375" minWidth="7.6666259765625" prefWidth="7.6666259765625" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints maxHeight="50.66668701171875" minHeight="10.0" prefHeight="50.66668701171875" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="46.33333333333332" minHeight="10.0" prefHeight="46.33333333333332" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="37.666646321614564" minHeight="10.0" prefHeight="37.666646321614564" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="34.3333740234375" minHeight="10.0" prefHeight="34.3333740234375" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="123.99998474121094" minHeight="10.0" prefHeight="76.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="110.0" minHeight="10.0" prefHeight="31.66668701171872" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="133.0" minHeight="10.0" prefHeight="28.999979654947936" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="129.33331298828125" minHeight="10.0" prefHeight="129.33331298828125" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<Label alignment="CENTER" prefHeight="17.0" prefWidth="105.0" text="English" GridPane.columnIndex="1" GridPane.rowIndex="2" />
|
||||||
|
<Label alignment="CENTER" prefHeight="17.0" prefWidth="105.0" text="Welsh" GridPane.columnIndex="5" GridPane.rowIndex="2" />
|
||||||
|
<ComboBox fx:id="wordType" prefHeight="25.0" prefWidth="275.0" promptText="Type" GridPane.columnIndex="3" GridPane.rowIndex="3" />
|
||||||
|
<Button mnemonicParsing="false" onAction="#addButtonClick" prefHeight="25.0" prefWidth="274.0" text="Add Word" GridPane.columnIndex="3" GridPane.rowIndex="4" />
|
||||||
|
<TextField fx:id="english" GridPane.columnIndex="1" GridPane.rowIndex="3" />
|
||||||
|
<TextField fx:id="welsh" GridPane.columnIndex="5" GridPane.rowIndex="3" />
|
||||||
|
<Button mnemonicParsing="false" onAction="#switchToPrimary" prefHeight="25.0" prefWidth="107.0" text="Switch Scene" GridPane.columnIndex="1" GridPane.rowIndex="5" />
|
||||||
|
<GridPane prefHeight="55.0" prefWidth="258.0" GridPane.columnIndex="3" GridPane.rowIndex="5">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharch" prefHeight="25.0" prefWidth="35.0" text="ch" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addChardd" prefHeight="25.0" prefWidth="34.0" text="dd" GridPane.columnIndex="1" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharff" prefHeight="25.0" prefWidth="34.0" text="ff" GridPane.columnIndex="2" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharng" prefHeight="25.0" prefWidth="34.0" text="ng" GridPane.columnIndex="3" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharll" prefHeight="25.0" prefWidth="34.0" text="ll" GridPane.columnIndex="4" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharph" prefHeight="25.0" prefWidth="34.0" text="ph" GridPane.columnIndex="5" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharrh" prefHeight="25.0" prefWidth="34.0" text="rh" GridPane.columnIndex="6" />
|
||||||
|
<Button minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#addCharth" prefHeight="25.0" prefWidth="34.0" text="th" GridPane.columnIndex="7" />
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
|
@ -0,0 +1,80 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.Insets?>
|
||||||
|
<?import javafx.scene.control.Button?>
|
||||||
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.control.TableColumn?>
|
||||||
|
<?import javafx.scene.control.TableView?>
|
||||||
|
<?import javafx.scene.control.TextField?>
|
||||||
|
<?import javafx.scene.image.Image?>
|
||||||
|
<?import javafx.scene.image.ImageView?>
|
||||||
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
<?import javafx.scene.layout.VBox?>
|
||||||
|
<?import javafx.scene.text.Font?>
|
||||||
|
|
||||||
|
<VBox alignment="CENTER" prefHeight="512.0" prefWidth="432.0" 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.DictionaryController">
|
||||||
|
<children>
|
||||||
|
<HBox alignment="CENTER_LEFT" prefHeight="11.0" prefWidth="392.0" VBox.vgrow="NEVER">
|
||||||
|
<children>
|
||||||
|
<Label minWidth="-Infinity" text="Search:">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
<TextField fx:id="searchBox" prefHeight="26.0" prefWidth="519.0" HBox.hgrow="ALWAYS" />
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" fillHeight="false" prefHeight="14.0" prefWidth="392.0" VBox.vgrow="NEVER">
|
||||||
|
<children>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" prefHeight="100.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
|
||||||
|
<children>
|
||||||
|
<Label minWidth="-Infinity" text="English">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" prefHeight="100.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<ImageView fx:id="alphaSort" fitHeight="20.0" fitWidth="20.0" onMouseClicked="#switchAlphaSort" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../../../../../assets/icons/black_icons/50px/sort-alpha-up-50.png" />
|
||||||
|
</image>
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets right="5.0" />
|
||||||
|
</HBox.margin>
|
||||||
|
</ImageView>
|
||||||
|
<ImageView fitHeight="20.0" fitWidth="20.0" onMouseClicked="#switchLangSort" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../../../../../assets/icons/black_icons/50px/sort-lang-50.png" />
|
||||||
|
</image>
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets left="5.0" />
|
||||||
|
</HBox.margin>
|
||||||
|
</ImageView>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" prefHeight="100.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
|
||||||
|
<children>
|
||||||
|
<Label minWidth="-Infinity" text="Welsh">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<TableView fx:id="table" VBox.vgrow="ALWAYS">
|
||||||
|
<columns>
|
||||||
|
<TableColumn fx:id="english" prefWidth="196.0" text="English" />
|
||||||
|
<TableColumn fx:id="welsh" prefWidth="195.0" text="Welsh" />
|
||||||
|
</columns>
|
||||||
|
<columnResizePolicy>
|
||||||
|
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
|
||||||
|
</columnResizePolicy>
|
||||||
|
</TableView>
|
||||||
|
<Button fx:id="primaryButton" onAction="#switchToPracticeList" text="Switch to Practice List" />
|
||||||
|
</children>
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
|
||||||
|
</padding>
|
||||||
|
</VBox>
|
|
@ -0,0 +1,80 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.Insets?>
|
||||||
|
<?import javafx.scene.control.Button?>
|
||||||
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.control.TableColumn?>
|
||||||
|
<?import javafx.scene.control.TableView?>
|
||||||
|
<?import javafx.scene.control.TextField?>
|
||||||
|
<?import javafx.scene.image.Image?>
|
||||||
|
<?import javafx.scene.image.ImageView?>
|
||||||
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
<?import javafx.scene.layout.VBox?>
|
||||||
|
<?import javafx.scene.text.Font?>
|
||||||
|
|
||||||
|
<VBox alignment="CENTER" prefHeight="512.0" prefWidth="432.0" 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.PracticeListController">
|
||||||
|
<children>
|
||||||
|
<HBox alignment="CENTER_LEFT" prefHeight="11.0" prefWidth="392.0" VBox.vgrow="NEVER">
|
||||||
|
<children>
|
||||||
|
<Label minWidth="-Infinity" text="Search:">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
<TextField fx:id="searchBox" prefHeight="26.0" prefWidth="519.0" HBox.hgrow="ALWAYS" />
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" fillHeight="false" prefHeight="14.0" prefWidth="392.0" VBox.vgrow="NEVER">
|
||||||
|
<children>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" prefHeight="100.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
|
||||||
|
<children>
|
||||||
|
<Label minWidth="-Infinity" text="English">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" prefHeight="100.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<ImageView fx:id="alphaSort" fitHeight="20.0" fitWidth="20.0" onMouseClicked="#switchAlphaSort" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../../../../../assets/icons/black_icons/50px/sort-alpha-up-50.png" />
|
||||||
|
</image>
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets right="5.0" />
|
||||||
|
</HBox.margin>
|
||||||
|
</ImageView>
|
||||||
|
<ImageView fitHeight="20.0" fitWidth="20.0" onMouseClicked="#switchLangSort" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../../../../../assets/icons/black_icons/50px/sort-lang-50.png" />
|
||||||
|
</image>
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets left="5.0" />
|
||||||
|
</HBox.margin>
|
||||||
|
</ImageView>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="BOTTOM_CENTER" prefHeight="100.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
|
||||||
|
<children>
|
||||||
|
<Label minWidth="-Infinity" text="Welsh">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<TableView fx:id="table" VBox.vgrow="ALWAYS">
|
||||||
|
<columns>
|
||||||
|
<TableColumn fx:id="english" prefWidth="196.0" text="English" />
|
||||||
|
<TableColumn fx:id="welsh" prefWidth="195.0" text="Welsh" />
|
||||||
|
</columns>
|
||||||
|
<columnResizePolicy>
|
||||||
|
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
|
||||||
|
</columnResizePolicy>
|
||||||
|
</TableView>
|
||||||
|
<Button fx:id="primaryButton" onAction="#switchToPrimary" text="Switch to Primary View" />
|
||||||
|
</children>
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
|
||||||
|
</padding>
|
||||||
|
</VBox>
|