Removed local translator in favor of github project by myself, and
changed away from Intellij's designer layout.
|
@ -1,5 +1,5 @@
|
||||||
# TengwarTranslator
|
# TengwarTranslator
|
||||||
![icon.png](/src/resources/icon.png "TengwarTranslator Icon")
|
![icon.png](/icon.png "TengwarTranslator Icon")
|
||||||
|
|
||||||
### About the Program
|
### About the Program
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ Java's Built-in *Swing* library is used to provide the cross-platform user inter
|
||||||
|
|
||||||
### Translation
|
### Translation
|
||||||
|
|
||||||
Since Tengwar is inherently a phonetic script, converting english to Tengwar would be almost impossible, and would require extremely advanced software to detect how individual words are pronounced. To avoid this, I created my [own Tengwar mode](/src/resources/EnglishOneToOneTengwarV2-1.pdf "English to Tengwar") which can be used to transcribe to and from English in a way that no information is lost in the transcription, as would be the case with normal Tengwar. I do this by including characters to represent every English letter, while still obeying the rules concerning placement of vowel diacritics and compound characters. The characters are shown below.
|
Since Tengwar is inherently a phonetic script, converting english to Tengwar would be almost impossible, and would require extremely advanced software to detect how individual words are pronounced. To avoid this, I created my [own Tengwar mode](/EnglishOneToOneTengwarV2-1.pdf "English to Tengwar") which can be used to transcribe to and from English in a way that no information is lost in the transcription, as would be the case with normal Tengwar. I do this by including characters to represent every English letter, while still obeying the rules concerning placement of vowel diacritics and compound characters. The characters are shown below.
|
||||||
|
|
||||||
![Tengwar](https://puu.sh/vtyfi/598ad704e1.png "Tengwar Characters")
|
![Tengwar](https://puu.sh/vtyfi/598ad704e1.png "Tengwar Characters")
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>com.github.andrewlalis</groupId>
|
||||||
|
<artifactId>TengwarTypewriter</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.6.1</version>
|
||||||
|
<configuration>
|
||||||
|
<source>1.8</source>
|
||||||
|
<target>1.8</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<version>3.0.0</version>
|
||||||
|
<configuration>
|
||||||
|
<descriptorRefs>
|
||||||
|
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||||
|
</descriptorRefs>
|
||||||
|
<archive>
|
||||||
|
<manifest>
|
||||||
|
<mainClass>net.agspace.Main</mainClass>
|
||||||
|
</manifest>
|
||||||
|
</archive>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>single</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>jitpack.io</id>
|
||||||
|
<url>https://jitpack.io</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.andrewlalis</groupId>
|
||||||
|
<artifactId>TengwarTranslatorLibrary</artifactId>
|
||||||
|
<version>1.3</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
|
@ -3,7 +3,6 @@ package net.agspace;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.awt.event.InputEvent;
|
import java.awt.event.InputEvent;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
|
|
||||||
|
@ -14,7 +13,7 @@ import java.awt.event.KeyEvent;
|
||||||
public class Main {
|
public class Main {
|
||||||
|
|
||||||
private static final String TITLE = "Tengwar Typewriter";
|
private static final String TITLE = "Tengwar Typewriter";
|
||||||
private static final String ICON_PATH = "resources/icon.png";
|
private static final String ICON_PATH = "icon.png";
|
||||||
|
|
||||||
public static void main(String[] args){
|
public static void main(String[] args){
|
||||||
JFrame f = new JFrame(TITLE);
|
JFrame f = new JFrame(TITLE);
|
|
@ -1,7 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="net.agspace.Window">
|
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="net.agspace.Window">
|
||||||
<grid id="27dc6" binding="mainPanel" custom-create="true" layout-manager="GridLayoutManager" row-count="1" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
<grid id="27dc6" binding="mainPanel" custom-create="true" layout-manager="GridBagLayout">
|
||||||
<margin top="0" left="0" bottom="0" right="0"/>
|
|
||||||
<constraints>
|
<constraints>
|
||||||
<xy x="20" y="20" width="786" height="461"/>
|
<xy x="20" y="20" width="786" height="461"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
|
@ -10,30 +9,34 @@
|
||||||
</properties>
|
</properties>
|
||||||
<border type="none"/>
|
<border type="none"/>
|
||||||
<children>
|
<children>
|
||||||
<grid id="7a294" binding="tengwarPanel" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
<grid id="7a294" binding="tengwarPanel" layout-manager="GridBagLayout">
|
||||||
<margin top="0" left="0" bottom="0" right="0"/>
|
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||||
|
<gridbag weightx="1.0" weighty="1.0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties/>
|
<properties/>
|
||||||
<border type="none"/>
|
<border type="none"/>
|
||||||
<children>
|
<children>
|
||||||
<grid id="9f3fe" binding="tengwarPanelTop" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
<grid id="9f3fe" binding="tengwarPanelTop" layout-manager="GridBagLayout">
|
||||||
<margin top="0" left="0" bottom="0" right="0"/>
|
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
||||||
<preferred-size width="-1" height="30"/>
|
<preferred-size width="-1" height="30"/>
|
||||||
</grid>
|
</grid>
|
||||||
|
<gridbag weightx="1.0" weighty="0.0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties/>
|
<properties>
|
||||||
|
<preferredSize width="54" height="30"/>
|
||||||
|
</properties>
|
||||||
<border type="none"/>
|
<border type="none"/>
|
||||||
<children>
|
<children>
|
||||||
<component id="3d5ee" class="javax.swing.JLabel" binding="tengwarPanelLabel">
|
<component id="3d5ee" class="javax.swing.JLabel" binding="tengwarPanelLabel">
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||||
|
<gridbag weightx="1.0" weighty="1.0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties>
|
<properties>
|
||||||
<font name="Tengwar Annatar" size="18" style="0"/>
|
<font name="Tengwar Annatar" size="18" style="0"/>
|
||||||
|
<labelFor value="952a"/>
|
||||||
<text value="1b$y6D"/>
|
<text value="1b$y6D"/>
|
||||||
</properties>
|
</properties>
|
||||||
</component>
|
</component>
|
||||||
|
@ -42,6 +45,7 @@
|
||||||
<scrollpane id="ad3c8">
|
<scrollpane id="ad3c8">
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||||
|
<gridbag weightx="1.0" weighty="1.0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties/>
|
<properties/>
|
||||||
<border type="none"/>
|
<border type="none"/>
|
||||||
|
@ -58,10 +62,10 @@
|
||||||
</scrollpane>
|
</scrollpane>
|
||||||
</children>
|
</children>
|
||||||
</grid>
|
</grid>
|
||||||
<grid id="5929f" binding="inputPanel" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
<grid id="5929f" binding="inputPanel" layout-manager="GridBagLayout">
|
||||||
<margin top="0" left="0" bottom="0" right="0"/>
|
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="0" column="2" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
<grid row="0" column="2" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||||
|
<gridbag weightx="1.0" weighty="1.0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties>
|
<properties>
|
||||||
<enabled value="true"/>
|
<enabled value="true"/>
|
||||||
|
@ -69,21 +73,28 @@
|
||||||
</properties>
|
</properties>
|
||||||
<border type="none"/>
|
<border type="none"/>
|
||||||
<children>
|
<children>
|
||||||
<grid id="f5158" binding="inputPanelTop" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
<grid id="f5158" binding="inputPanelTop" layout-manager="GridBagLayout">
|
||||||
<margin top="0" left="0" bottom="0" right="0"/>
|
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
||||||
<preferred-size width="-1" height="30"/>
|
<preferred-size width="-1" height="30"/>
|
||||||
</grid>
|
</grid>
|
||||||
|
<gridbag weightx="1.0" weighty="0.0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties/>
|
<properties>
|
||||||
|
<enabled value="true"/>
|
||||||
|
<font/>
|
||||||
|
<preferredSize width="56" height="30"/>
|
||||||
|
</properties>
|
||||||
<border type="none"/>
|
<border type="none"/>
|
||||||
<children>
|
<children>
|
||||||
<component id="32988" class="javax.swing.JLabel" binding="inputPanelLabel">
|
<component id="32988" class="javax.swing.JLabel" binding="inputPanelLabel">
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||||
|
<gridbag weightx="1.0" weighty="1.0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties>
|
<properties>
|
||||||
|
<font size="18" style="0"/>
|
||||||
|
<labelFor value="53965"/>
|
||||||
<text value="English"/>
|
<text value="English"/>
|
||||||
</properties>
|
</properties>
|
||||||
</component>
|
</component>
|
||||||
|
@ -92,6 +103,7 @@
|
||||||
<scrollpane id="36b2e">
|
<scrollpane id="36b2e">
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||||
|
<gridbag weightx="1.0" weighty="1.0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties/>
|
<properties/>
|
||||||
<border type="none"/>
|
<border type="none"/>
|
||||||
|
@ -108,10 +120,10 @@
|
||||||
</scrollpane>
|
</scrollpane>
|
||||||
</children>
|
</children>
|
||||||
</grid>
|
</grid>
|
||||||
<grid id="5da94" binding="translateButtonPanel" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
<grid id="5da94" binding="translateButtonPanel" layout-manager="GridBagLayout">
|
||||||
<margin top="30" left="0" bottom="0" right="0"/>
|
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="1" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
|
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="1" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
<gridbag top="50" left="0" bottom="0" right="0" weightx="0.0" weighty="1.0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties/>
|
<properties/>
|
||||||
<border type="none"/>
|
<border type="none"/>
|
||||||
|
@ -119,9 +131,10 @@
|
||||||
<component id="8f5c7" class="javax.swing.JButton" binding="toTengwarButton" custom-create="true">
|
<component id="8f5c7" class="javax.swing.JButton" binding="toTengwarButton" custom-create="true">
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="1" anchor="2" fill="1" indent="0" use-parent-layout="false"/>
|
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="1" anchor="2" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
<gridbag weightx="1.0" weighty="1.0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties>
|
<properties>
|
||||||
<icon value="resources/toTengwar.png"/>
|
<icon value="toTengwar.png"/>
|
||||||
<label value=""/>
|
<label value=""/>
|
||||||
<text value=""/>
|
<text value=""/>
|
||||||
<toolTipText value="Translate to tengwar"/>
|
<toolTipText value="Translate to tengwar"/>
|
||||||
|
@ -130,9 +143,10 @@
|
||||||
<component id="1097" class="javax.swing.JButton" binding="toEnglishButton" custom-create="true">
|
<component id="1097" class="javax.swing.JButton" binding="toEnglishButton" custom-create="true">
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="1" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
|
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="1" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
<gridbag weightx="1.0" weighty="1.0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties>
|
<properties>
|
||||||
<icon value="resources/toEnglish.png"/>
|
<icon value="toEnglish.png"/>
|
||||||
<label value=""/>
|
<label value=""/>
|
||||||
<text value=""/>
|
<text value=""/>
|
||||||
<toolTipText value="Translate to english"/>
|
<toolTipText value="Translate to english"/>
|
||||||
|
@ -141,9 +155,10 @@
|
||||||
<component id="59b28" class="javax.swing.JButton" binding="clearButton" custom-create="true">
|
<component id="59b28" class="javax.swing.JButton" binding="clearButton" custom-create="true">
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="1" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="1" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
<gridbag weightx="1.0" weighty="1.0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<properties>
|
<properties>
|
||||||
<icon value="resources/clear.png"/>
|
<icon value="clear.png"/>
|
||||||
<label value=""/>
|
<label value=""/>
|
||||||
<text value=""/>
|
<text value=""/>
|
||||||
</properties>
|
</properties>
|
|
@ -0,0 +1,408 @@
|
||||||
|
package net.agspace;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.DocumentEvent;
|
||||||
|
import javax.swing.event.DocumentListener;
|
||||||
|
import javax.swing.filechooser.FileFilter;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Window {
|
||||||
|
|
||||||
|
//List of files that can be imported.
|
||||||
|
private static final List<String> OPEN_FILE_EXTENSIONS = new ArrayList<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
OPEN_FILE_EXTENSIONS.add("txt");
|
||||||
|
}
|
||||||
|
|
||||||
|
private JPanel mainPanel;
|
||||||
|
private JPanel tengwarPanel;
|
||||||
|
private JPanel tengwarPanelTop;
|
||||||
|
private JLabel tengwarPanelLabel;
|
||||||
|
private JTextArea tengwarTextArea;
|
||||||
|
private JPanel inputPanel;
|
||||||
|
private JPanel inputPanelTop;
|
||||||
|
private JLabel inputPanelLabel;
|
||||||
|
private JTextArea inputTextArea;
|
||||||
|
private JPanel translateButtonPanel;
|
||||||
|
private JButton toTengwarButton;
|
||||||
|
private JButton toEnglishButton;
|
||||||
|
private JButton clearButton;
|
||||||
|
|
||||||
|
private boolean isLive = false;
|
||||||
|
|
||||||
|
Window() {
|
||||||
|
//Load the font into the system.
|
||||||
|
$$$setupUI$$$();
|
||||||
|
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
||||||
|
try {
|
||||||
|
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, this.getClass().getClassLoader().getResourceAsStream("tngan.ttf")));
|
||||||
|
} catch (FontFormatException e) {
|
||||||
|
System.err.println("Font format exception!");
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("IOException!");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Explicit translation from english to tengwar.
|
||||||
|
toTengwarButton.addActionListener(e -> tengwarTextArea.setText(Translator.translateToTengwar(inputTextArea.getText())));
|
||||||
|
|
||||||
|
//Clear both text areas.
|
||||||
|
clearButton.addActionListener(e -> {
|
||||||
|
tengwarTextArea.setText(null);
|
||||||
|
inputTextArea.setText(null);
|
||||||
|
});
|
||||||
|
|
||||||
|
//Translate tengwar to english.
|
||||||
|
toEnglishButton.addActionListener(e -> inputTextArea.setText(Translator.translateToEnglish(tengwarTextArea.getText())));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createUIComponents() {
|
||||||
|
mainPanel = new JPanel();
|
||||||
|
this.inputTextArea = new JTextArea();
|
||||||
|
inputTextArea.getDocument().addDocumentListener(new DocumentListener() {
|
||||||
|
@Override
|
||||||
|
public void insertUpdate(DocumentEvent e) {
|
||||||
|
onEnglishTextChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeUpdate(DocumentEvent e) {
|
||||||
|
onEnglishTextChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void changedUpdate(DocumentEvent e) {
|
||||||
|
onEnglishTextChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.tengwarTextArea = new JTextArea();
|
||||||
|
tengwarTextArea.getDocument().addDocumentListener(new DocumentListener() {
|
||||||
|
@Override
|
||||||
|
public void insertUpdate(DocumentEvent e) {
|
||||||
|
onTengwarTextChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeUpdate(DocumentEvent e) {
|
||||||
|
onTengwarTextChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void changedUpdate(DocumentEvent e) {
|
||||||
|
onTengwarTextChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.toTengwarButton = new JButton();
|
||||||
|
this.toEnglishButton = new JButton();
|
||||||
|
this.clearButton = new JButton();
|
||||||
|
this.inputTextArea.requestFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
JPanel getMainPanel() {
|
||||||
|
return this.mainPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the english text is changed, and live is selected, then update the tengwar text.
|
||||||
|
*/
|
||||||
|
private void onEnglishTextChanged() {
|
||||||
|
if (isLive && inputTextArea.hasFocus())
|
||||||
|
tengwarTextArea.setText(Translator.translateToTengwar(inputTextArea.getText()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If tengwar text is changed, and live is selected, then update the english text.
|
||||||
|
*/
|
||||||
|
private void onTengwarTextChanged() {
|
||||||
|
if (isLive && tengwarTextArea.hasFocus())
|
||||||
|
inputTextArea.setText(Translator.translateToEnglish(tengwarTextArea.getText()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle the live button and disable translate buttons if needed.
|
||||||
|
*
|
||||||
|
* @param e event generated by the check box.
|
||||||
|
*/
|
||||||
|
void onLiveToggled(ActionEvent e) {
|
||||||
|
if (((JCheckBoxMenuItem) e.getSource()).getState()) {
|
||||||
|
//Deactivate buttons, set live to true.
|
||||||
|
toTengwarButton.setEnabled(false);
|
||||||
|
toEnglishButton.setEnabled(false);
|
||||||
|
isLive = true;
|
||||||
|
} else {
|
||||||
|
//Activate buttons, set live to false.
|
||||||
|
toTengwarButton.setEnabled(true);
|
||||||
|
toEnglishButton.setEnabled(true);
|
||||||
|
isLive = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* What to do if the user clicks the 'import' button.
|
||||||
|
*/
|
||||||
|
void onImportClicked() {
|
||||||
|
JFileChooser fileChooser = new JFileChooser(System.getProperty("user.documents"));
|
||||||
|
fileChooser.setFileFilter(new FileFilter() {
|
||||||
|
@Override
|
||||||
|
public boolean accept(File f) {
|
||||||
|
if (f.isDirectory())
|
||||||
|
return true;
|
||||||
|
String extension = Utils.getExtension(f);
|
||||||
|
return extension != null && OPEN_FILE_EXTENSIONS.contains(extension.toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Plain text files.";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
int result = fileChooser.showOpenDialog(this.mainPanel);
|
||||||
|
if (result == JFileChooser.APPROVE_OPTION) {
|
||||||
|
try (BufferedReader br = new BufferedReader(new FileReader(fileChooser.getSelectedFile()))) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
String line = br.readLine();
|
||||||
|
while (line != null) {
|
||||||
|
sb.append(line);
|
||||||
|
sb.append(System.lineSeparator());
|
||||||
|
line = br.readLine();
|
||||||
|
}
|
||||||
|
inputTextArea.setText(sb.toString());
|
||||||
|
tengwarTextArea.setText(Translator.translateToTengwar(inputTextArea.getText()));
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* What to do when the user wants to save their document.
|
||||||
|
*/
|
||||||
|
void onSaveClicked() {
|
||||||
|
JFileChooser fileChooser = new JFileChooser(System.getProperty("user.documents"));
|
||||||
|
int result = fileChooser.showSaveDialog(this.mainPanel);
|
||||||
|
if (result == JFileChooser.APPROVE_OPTION) {
|
||||||
|
try (PrintStream ps = new PrintStream(fileChooser.getSelectedFile())) {
|
||||||
|
ps.println(tengwarTextArea.getText());
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to open the pdf in the browser.
|
||||||
|
*/
|
||||||
|
void onEnglishModeAboutClicked() {
|
||||||
|
if (Desktop.isDesktopSupported()) {
|
||||||
|
try {
|
||||||
|
Desktop.getDesktop().browse(new URI("https://github.com/andrewlalis/TengwarTranslator/blob/master/src/resources/EnglishOneToOneTengwarV2-1.pdf"));
|
||||||
|
} catch (URISyntaxException | IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to open Tengwar wikipedia page.
|
||||||
|
*/
|
||||||
|
void onTengwarAboutClicked() {
|
||||||
|
if (Desktop.isDesktopSupported()) {
|
||||||
|
try {
|
||||||
|
Desktop.getDesktop().browse(new URI("https://en.wikipedia.org/wiki/Tengwar"));
|
||||||
|
} catch (URISyntaxException | IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to open my github page.
|
||||||
|
*/
|
||||||
|
void onAboutMeClicked() {
|
||||||
|
if (Desktop.isDesktopSupported()) {
|
||||||
|
try {
|
||||||
|
Desktop.getDesktop().browse(new URI("https://github.com/andrewlalis"));
|
||||||
|
} catch (URISyntaxException | IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @noinspection ALL
|
||||||
|
*/
|
||||||
|
private Font $$$getFont$$$(String fontName, int style, int size, Font currentFont) {
|
||||||
|
if (currentFont == null) return null;
|
||||||
|
String resultName;
|
||||||
|
if (fontName == null) {
|
||||||
|
resultName = currentFont.getName();
|
||||||
|
} else {
|
||||||
|
Font testFont = new Font(fontName, Font.PLAIN, 10);
|
||||||
|
if (testFont.canDisplay('a') && testFont.canDisplay('1')) {
|
||||||
|
resultName = fontName;
|
||||||
|
} else {
|
||||||
|
resultName = currentFont.getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new Font(resultName, style >= 0 ? style : currentFont.getStyle(), size >= 0 ? size : currentFont.getSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method generated by IntelliJ IDEA GUI Designer
|
||||||
|
* >>> IMPORTANT!! <<<
|
||||||
|
* DO NOT edit this method OR call it in your code!
|
||||||
|
*
|
||||||
|
* @noinspection ALL
|
||||||
|
*/
|
||||||
|
private void $$$setupUI$$$() {
|
||||||
|
createUIComponents();
|
||||||
|
mainPanel.setLayout(new GridBagLayout());
|
||||||
|
mainPanel.setPreferredSize(new Dimension(720, 480));
|
||||||
|
tengwarPanel = new JPanel();
|
||||||
|
tengwarPanel.setLayout(new GridBagLayout());
|
||||||
|
GridBagConstraints gbc;
|
||||||
|
gbc = new GridBagConstraints();
|
||||||
|
gbc.gridx = 0;
|
||||||
|
gbc.gridy = 0;
|
||||||
|
gbc.weightx = 1.0;
|
||||||
|
gbc.weighty = 1.0;
|
||||||
|
gbc.fill = GridBagConstraints.BOTH;
|
||||||
|
mainPanel.add(tengwarPanel, gbc);
|
||||||
|
tengwarPanelTop = new JPanel();
|
||||||
|
tengwarPanelTop.setLayout(new GridBagLayout());
|
||||||
|
tengwarPanelTop.setPreferredSize(new Dimension(54, 30));
|
||||||
|
gbc = new GridBagConstraints();
|
||||||
|
gbc.gridx = 0;
|
||||||
|
gbc.gridy = 0;
|
||||||
|
gbc.weightx = 1.0;
|
||||||
|
gbc.fill = GridBagConstraints.BOTH;
|
||||||
|
tengwarPanel.add(tengwarPanelTop, gbc);
|
||||||
|
tengwarPanelLabel = new JLabel();
|
||||||
|
Font tengwarPanelLabelFont = this.$$$getFont$$$("Tengwar Annatar", Font.PLAIN, 18, tengwarPanelLabel.getFont());
|
||||||
|
if (tengwarPanelLabelFont != null) tengwarPanelLabel.setFont(tengwarPanelLabelFont);
|
||||||
|
tengwarPanelLabel.setText("1b$y6D");
|
||||||
|
gbc = new GridBagConstraints();
|
||||||
|
gbc.gridx = 0;
|
||||||
|
gbc.gridy = 0;
|
||||||
|
gbc.weightx = 1.0;
|
||||||
|
gbc.weighty = 1.0;
|
||||||
|
tengwarPanelTop.add(tengwarPanelLabel, gbc);
|
||||||
|
final JScrollPane scrollPane1 = new JScrollPane();
|
||||||
|
gbc = new GridBagConstraints();
|
||||||
|
gbc.gridx = 0;
|
||||||
|
gbc.gridy = 1;
|
||||||
|
gbc.weightx = 1.0;
|
||||||
|
gbc.weighty = 1.0;
|
||||||
|
gbc.fill = GridBagConstraints.BOTH;
|
||||||
|
tengwarPanel.add(scrollPane1, gbc);
|
||||||
|
Font tengwarTextAreaFont = this.$$$getFont$$$("Tengwar Annatar", Font.PLAIN, 16, tengwarTextArea.getFont());
|
||||||
|
if (tengwarTextAreaFont != null) tengwarTextArea.setFont(tengwarTextAreaFont);
|
||||||
|
tengwarTextArea.setLineWrap(true);
|
||||||
|
tengwarTextArea.setWrapStyleWord(true);
|
||||||
|
scrollPane1.setViewportView(tengwarTextArea);
|
||||||
|
inputPanel = new JPanel();
|
||||||
|
inputPanel.setLayout(new GridBagLayout());
|
||||||
|
inputPanel.setEnabled(true);
|
||||||
|
inputPanel.setVisible(true);
|
||||||
|
gbc = new GridBagConstraints();
|
||||||
|
gbc.gridx = 2;
|
||||||
|
gbc.gridy = 0;
|
||||||
|
gbc.weightx = 1.0;
|
||||||
|
gbc.weighty = 1.0;
|
||||||
|
gbc.fill = GridBagConstraints.BOTH;
|
||||||
|
mainPanel.add(inputPanel, gbc);
|
||||||
|
inputPanelTop = new JPanel();
|
||||||
|
inputPanelTop.setLayout(new GridBagLayout());
|
||||||
|
inputPanelTop.setEnabled(true);
|
||||||
|
Font inputPanelTopFont = this.$$$getFont$$$(null, -1, -1, inputPanelTop.getFont());
|
||||||
|
if (inputPanelTopFont != null) inputPanelTop.setFont(inputPanelTopFont);
|
||||||
|
inputPanelTop.setPreferredSize(new Dimension(56, 30));
|
||||||
|
gbc = new GridBagConstraints();
|
||||||
|
gbc.gridx = 0;
|
||||||
|
gbc.gridy = 0;
|
||||||
|
gbc.weightx = 1.0;
|
||||||
|
gbc.fill = GridBagConstraints.BOTH;
|
||||||
|
inputPanel.add(inputPanelTop, gbc);
|
||||||
|
inputPanelLabel = new JLabel();
|
||||||
|
Font inputPanelLabelFont = this.$$$getFont$$$(null, Font.PLAIN, 18, inputPanelLabel.getFont());
|
||||||
|
if (inputPanelLabelFont != null) inputPanelLabel.setFont(inputPanelLabelFont);
|
||||||
|
inputPanelLabel.setText("English");
|
||||||
|
gbc = new GridBagConstraints();
|
||||||
|
gbc.gridx = 0;
|
||||||
|
gbc.gridy = 0;
|
||||||
|
gbc.weightx = 1.0;
|
||||||
|
gbc.weighty = 1.0;
|
||||||
|
inputPanelTop.add(inputPanelLabel, gbc);
|
||||||
|
final JScrollPane scrollPane2 = new JScrollPane();
|
||||||
|
gbc = new GridBagConstraints();
|
||||||
|
gbc.gridx = 0;
|
||||||
|
gbc.gridy = 1;
|
||||||
|
gbc.weightx = 1.0;
|
||||||
|
gbc.weighty = 1.0;
|
||||||
|
gbc.fill = GridBagConstraints.BOTH;
|
||||||
|
inputPanel.add(scrollPane2, gbc);
|
||||||
|
inputTextArea.setEditable(true);
|
||||||
|
inputTextArea.setLineWrap(true);
|
||||||
|
inputTextArea.setWrapStyleWord(true);
|
||||||
|
scrollPane2.setViewportView(inputTextArea);
|
||||||
|
translateButtonPanel = new JPanel();
|
||||||
|
translateButtonPanel.setLayout(new GridBagLayout());
|
||||||
|
gbc = new GridBagConstraints();
|
||||||
|
gbc.gridx = 1;
|
||||||
|
gbc.gridy = 0;
|
||||||
|
gbc.weighty = 1.0;
|
||||||
|
gbc.anchor = GridBagConstraints.NORTH;
|
||||||
|
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||||
|
gbc.insets = new Insets(50, 0, 0, 0);
|
||||||
|
mainPanel.add(translateButtonPanel, gbc);
|
||||||
|
toTengwarButton.setIcon(new ImageIcon(getClass().getResource("/toTengwar.png")));
|
||||||
|
toTengwarButton.setLabel("");
|
||||||
|
toTengwarButton.setText("");
|
||||||
|
toTengwarButton.setToolTipText("Translate to tengwar");
|
||||||
|
gbc = new GridBagConstraints();
|
||||||
|
gbc.gridx = 0;
|
||||||
|
gbc.gridy = 0;
|
||||||
|
gbc.weightx = 1.0;
|
||||||
|
gbc.weighty = 1.0;
|
||||||
|
gbc.anchor = GridBagConstraints.SOUTH;
|
||||||
|
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||||
|
translateButtonPanel.add(toTengwarButton, gbc);
|
||||||
|
toEnglishButton.setIcon(new ImageIcon(getClass().getResource("/toEnglish.png")));
|
||||||
|
toEnglishButton.setLabel("");
|
||||||
|
toEnglishButton.setText("");
|
||||||
|
toEnglishButton.setToolTipText("Translate to english");
|
||||||
|
gbc = new GridBagConstraints();
|
||||||
|
gbc.gridx = 0;
|
||||||
|
gbc.gridy = 1;
|
||||||
|
gbc.weightx = 1.0;
|
||||||
|
gbc.weighty = 1.0;
|
||||||
|
gbc.anchor = GridBagConstraints.NORTH;
|
||||||
|
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||||
|
translateButtonPanel.add(toEnglishButton, gbc);
|
||||||
|
clearButton.setIcon(new ImageIcon(getClass().getResource("/clear.png")));
|
||||||
|
clearButton.setLabel("");
|
||||||
|
clearButton.setText("");
|
||||||
|
gbc = new GridBagConstraints();
|
||||||
|
gbc.gridx = 0;
|
||||||
|
gbc.gridy = 2;
|
||||||
|
gbc.weightx = 1.0;
|
||||||
|
gbc.weighty = 1.0;
|
||||||
|
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||||
|
translateButtonPanel.add(clearButton, gbc);
|
||||||
|
tengwarPanelLabel.setLabelFor(tengwarTextArea);
|
||||||
|
inputPanelLabel.setLabelFor(inputTextArea);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @noinspection ALL
|
||||||
|
*/
|
||||||
|
public JComponent $$$getRootComponent$$$() {
|
||||||
|
return mainPanel;
|
||||||
|
}
|
||||||
|
}
|
Before Width: | Height: | Size: 298 B After Width: | Height: | Size: 298 B |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 414 B After Width: | Height: | Size: 414 B |
Before Width: | Height: | Size: 426 B After Width: | Height: | Size: 426 B |
|
@ -1,236 +0,0 @@
|
||||||
package net.agspace;
|
|
||||||
|
|
||||||
import net.agspace.translate.Translator;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import javax.swing.event.DocumentEvent;
|
|
||||||
import javax.swing.event.DocumentListener;
|
|
||||||
import javax.swing.filechooser.FileFilter;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.*;
|
|
||||||
import java.io.*;
|
|
||||||
import java.net.URI;
|
|
||||||
import java.net.URISyntaxException;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
public class Window {
|
|
||||||
|
|
||||||
//List of files that can be imported.
|
|
||||||
private static final List<String> OPEN_FILE_EXTENSIONS = new ArrayList<>();
|
|
||||||
|
|
||||||
static {
|
|
||||||
OPEN_FILE_EXTENSIONS.add("txt");
|
|
||||||
}
|
|
||||||
|
|
||||||
private JPanel mainPanel;
|
|
||||||
private JPanel tengwarPanel;
|
|
||||||
private JPanel tengwarPanelTop;
|
|
||||||
private JLabel tengwarPanelLabel;
|
|
||||||
private JTextArea tengwarTextArea;
|
|
||||||
private JPanel inputPanel;
|
|
||||||
private JPanel inputPanelTop;
|
|
||||||
private JLabel inputPanelLabel;
|
|
||||||
private JTextArea inputTextArea;
|
|
||||||
private JPanel translateButtonPanel;
|
|
||||||
private JButton toTengwarButton;
|
|
||||||
private JButton toEnglishButton;
|
|
||||||
private JButton clearButton;
|
|
||||||
|
|
||||||
private boolean isLive = false;
|
|
||||||
|
|
||||||
Window() {
|
|
||||||
//Load the font into the system.
|
|
||||||
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
|
||||||
try {
|
|
||||||
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, this.getClass().getClassLoader().getResourceAsStream("resources/tngan.ttf")));
|
|
||||||
} catch (FontFormatException e) {
|
|
||||||
System.err.println("Font format exception!");
|
|
||||||
} catch (IOException e) {
|
|
||||||
System.err.println("IOException!");
|
|
||||||
}
|
|
||||||
|
|
||||||
//Explicit translation from english to tengwar.
|
|
||||||
toTengwarButton.addActionListener(e -> tengwarTextArea.setText(Translator.translateToTengwar(inputTextArea.getText())));
|
|
||||||
|
|
||||||
//Clear both text areas.
|
|
||||||
clearButton.addActionListener(e -> {
|
|
||||||
tengwarTextArea.setText(null);
|
|
||||||
inputTextArea.setText(null);
|
|
||||||
});
|
|
||||||
|
|
||||||
//Translate tengwar to english.
|
|
||||||
toEnglishButton.addActionListener(e -> inputTextArea.setText(Translator.translateToEnglish(tengwarTextArea.getText())));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createUIComponents() {
|
|
||||||
mainPanel = new JPanel();
|
|
||||||
this.inputTextArea = new JTextArea();
|
|
||||||
inputTextArea.getDocument().addDocumentListener(new DocumentListener() {
|
|
||||||
@Override
|
|
||||||
public void insertUpdate(DocumentEvent e) {
|
|
||||||
onEnglishTextChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeUpdate(DocumentEvent e) {
|
|
||||||
onEnglishTextChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void changedUpdate(DocumentEvent e) {
|
|
||||||
onEnglishTextChanged();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this.tengwarTextArea = new JTextArea();
|
|
||||||
tengwarTextArea.getDocument().addDocumentListener(new DocumentListener() {
|
|
||||||
@Override
|
|
||||||
public void insertUpdate(DocumentEvent e) {
|
|
||||||
onTengwarTextChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeUpdate(DocumentEvent e) {
|
|
||||||
onTengwarTextChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void changedUpdate(DocumentEvent e) {
|
|
||||||
onTengwarTextChanged();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this.toTengwarButton = new JButton();
|
|
||||||
this.toEnglishButton = new JButton();
|
|
||||||
this.clearButton = new JButton();
|
|
||||||
this.inputTextArea.requestFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
JPanel getMainPanel(){
|
|
||||||
return this.mainPanel;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If the english text is changed, and live is selected, then update the tengwar text.
|
|
||||||
*/
|
|
||||||
private void onEnglishTextChanged(){
|
|
||||||
if (isLive && inputTextArea.hasFocus())
|
|
||||||
tengwarTextArea.setText(Translator.translateToTengwar(inputTextArea.getText()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If tengwar text is changed, and live is selected, then update the english text.
|
|
||||||
*/
|
|
||||||
private void onTengwarTextChanged(){
|
|
||||||
if (isLive && tengwarTextArea.hasFocus())
|
|
||||||
inputTextArea.setText(Translator.translateToEnglish(tengwarTextArea.getText()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Toggle the live button and disable translate buttons if needed.
|
|
||||||
* @param e event generated by the check box.
|
|
||||||
*/
|
|
||||||
void onLiveToggled(ActionEvent e){
|
|
||||||
if (((JCheckBoxMenuItem) e.getSource()).getState()){
|
|
||||||
//Deactivate buttons, set live to true.
|
|
||||||
toTengwarButton.setEnabled(false);
|
|
||||||
toEnglishButton.setEnabled(false);
|
|
||||||
isLive = true;
|
|
||||||
} else {
|
|
||||||
//Activate buttons, set live to false.
|
|
||||||
toTengwarButton.setEnabled(true);
|
|
||||||
toEnglishButton.setEnabled(true);
|
|
||||||
isLive = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* What to do if the user clicks the 'import' button.
|
|
||||||
*/
|
|
||||||
void onImportClicked(){
|
|
||||||
JFileChooser fileChooser = new JFileChooser(System.getProperty("user.documents"));
|
|
||||||
fileChooser.setFileFilter(new FileFilter() {
|
|
||||||
@Override
|
|
||||||
public boolean accept(File f) {
|
|
||||||
if (f.isDirectory())
|
|
||||||
return true;
|
|
||||||
String extension = Utils.getExtension(f);
|
|
||||||
return extension != null && OPEN_FILE_EXTENSIONS.contains(extension.toLowerCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getDescription() {
|
|
||||||
return "Plain text files.";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
int result = fileChooser.showOpenDialog(this.mainPanel);
|
|
||||||
if (result == JFileChooser.APPROVE_OPTION){
|
|
||||||
try (BufferedReader br = new BufferedReader(new FileReader(fileChooser.getSelectedFile()))){
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
String line = br.readLine();
|
|
||||||
while (line != null){
|
|
||||||
sb.append(line);
|
|
||||||
sb.append(System.lineSeparator());
|
|
||||||
line = br.readLine();
|
|
||||||
}
|
|
||||||
inputTextArea.setText(sb.toString());
|
|
||||||
tengwarTextArea.setText(Translator.translateToTengwar(inputTextArea.getText()));
|
|
||||||
} catch (IOException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* What to do when the user wants to save their document.
|
|
||||||
*/
|
|
||||||
void onSaveClicked(){
|
|
||||||
JFileChooser fileChooser = new JFileChooser(System.getProperty("user.documents"));
|
|
||||||
int result = fileChooser.showSaveDialog(this.mainPanel);
|
|
||||||
if (result == JFileChooser.APPROVE_OPTION){
|
|
||||||
try (PrintStream ps = new PrintStream(fileChooser.getSelectedFile())){
|
|
||||||
ps.println(tengwarTextArea.getText());
|
|
||||||
} catch (IOException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to open the pdf in the browser.
|
|
||||||
*/
|
|
||||||
void onEnglishModeAboutClicked(){
|
|
||||||
if (Desktop.isDesktopSupported()){
|
|
||||||
try{
|
|
||||||
Desktop.getDesktop().browse(new URI("https://github.com/andrewlalis/TengwarTranslator/blob/master/src/resources/EnglishOneToOneTengwarV2-1.pdf"));
|
|
||||||
} catch (URISyntaxException | IOException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to open Tengwar wikipedia page.
|
|
||||||
*/
|
|
||||||
void onTengwarAboutClicked(){
|
|
||||||
if (Desktop.isDesktopSupported()){
|
|
||||||
try{
|
|
||||||
Desktop.getDesktop().browse(new URI("https://en.wikipedia.org/wiki/Tengwar"));
|
|
||||||
} catch (URISyntaxException | IOException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to open my github page.
|
|
||||||
*/
|
|
||||||
void onAboutMeClicked(){
|
|
||||||
if (Desktop.isDesktopSupported()){
|
|
||||||
try{
|
|
||||||
Desktop.getDesktop().browse(new URI("https://github.com/andrewlalis"));
|
|
||||||
} catch (URISyntaxException | IOException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|