This repository has been archived on 2022-02-10. You can view files and clone it, but cannot push or open issues or pull requests.
morse-converter/src/de/marcelkapfer/c/morseconverter/Main.java

164 lines
6.6 KiB
Java
Executable File

package de.marcelkapfer.c.morseconverter;
/*
This is a Java application for converting writtenMorse and normal morse code.
Copyright (C) 2014-2015 Marcel Michael Kapfer
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Marcel Michael Kapfer
marcelmichaelkapfer@yahoo.co.nz
*/
import de.marcelkapfer.c.morseconverter.engine.DecodeNormalMorseManager;
import de.marcelkapfer.c.morseconverter.engine.DecodeWrittenMorseManager;
import de.marcelkapfer.c.morseconverter.engine.EncodeNormalMorseManager;
import de.marcelkapfer.c.morseconverter.engine.EncodeWrittenMorseManager;
import de.marcelkapfer.c.morseconverter.intelligentCodeRecognization.NormalMorseCodeRecognization;
import de.marcelkapfer.c.morseconverter.intelligentCodeRecognization.WrittenMorseCodeRecognization;
import de.marcelkapfer.c.morseconverter.update.Update;
import de.marcelkapfer.c.morseconverter.update.UpdateDialog;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.Element;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.util.ResourceBundle;
public class Main extends JFrame {
// Version numbers for update check
public static final int currentVersion = 191;
public static int latestVersion = currentVersion;
public static ResourceBundle resourceBundle = ResourceBundle.getBundle("de.marcelkapfer.c.morseconverter.text");
public JTabbedPane morseConverterPane;
private JPanel panel1;
private JTextArea inputAreaWrittenMorse;
private JTextArea outputAreaWrittenMorse;
private JTextArea inputAreaNormalMorse;
private JTextArea outputAreaNormalMorse;
private JButton updateDialogButton;
private JLabel updateAvailable;
private JTextPane aboutText;
// Contains mainly listeners
public Main() {
HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
HTMLDocument htmlDocument = (HTMLDocument) htmlEditorKit.createDefaultDocument();
Element element = htmlDocument.getDefaultRootElement();
try {
htmlDocument.setInnerHTML(element, resourceBundle.getString("about"));
} catch (BadLocationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
aboutText.setDocument(htmlDocument);
// Listener for the writtenMorse input field
inputAreaWrittenMorse.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
instantWrittenMorseConvert();
}
});
// Listener for the normal Morse input field
inputAreaNormalMorse.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
instantNormalMorseConvert();
}
});
// Trying to read a file from a server
latestVersion = Update.getLatestVersion("http://lab.marcel-kapfer.de/writtenmorse/desktop/version.txt", currentVersion);
if (currentVersion < latestVersion){
JOptionPane.showMessageDialog(null, resourceBundle.getString("updateAvailable"));
updateAvailable.setVisible(true);
updateDialogButton.setText(resourceBundle.getString("aboutUpdateAvailableButton"));
}
updateDialogButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateDialog();
}
});
}
// The holy main method
public static void main(String[] args){
// Tries to present the app in an native look
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e){
e.printStackTrace();
}
// Starting the application
JFrame main = new JFrame("Main");
main.setContentPane(new Main().morseConverterPane);
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Title
main.setTitle(resourceBundle.getString("title"));
main.pack();
// Window position and Size
main.setBounds(100, 100, 800, 400);
main.setIconImage(Toolkit.getDefaultToolkit().getImage(Main.class.getResource("/res/icon-xxxhdpi.png")));
// MAKE IT HAPPEN :D
main.setVisible(true);
System.out.print(System.lineSeparator());
}
// Method for converting writtenMorse
private void instantWrittenMorseConvert(){
// Gets the text from the input field
String input = inputAreaWrittenMorse.getText();
// checks if the code is a writtenMorse code
if(WrittenMorseCodeRecognization.isCode(input)) {
// converts the code into normal letters
outputAreaWrittenMorse.setText(EncodeWrittenMorseManager.getEncodedString(input));
} else {
// converts the code into writtenMorse
outputAreaWrittenMorse.setText(DecodeWrittenMorseManager.getDecodedString(input));
}
}
// Method for converting normal Morse
private void instantNormalMorseConvert(){
// Gets the text from the input field
String input = inputAreaNormalMorse.getText();
// checks if the code is a normal Morse code
if(NormalMorseCodeRecognization.isCode(input)){
// converts the code into normal letters
outputAreaNormalMorse.setText(EncodeNormalMorseManager.getEncodedString(input));
} else {
// converts the code into writtenMorse
outputAreaNormalMorse.setText(DecodeNormalMorseManager.getDecodedString(input));
}
}
private void updateDialog() {
UpdateDialog.main(null);
}
}