From 378024c3b0ab102fbb82ff8c08e210de36e50934 Mon Sep 17 00:00:00 2001 From: gered Date: Sun, 29 Nov 2015 23:46:50 -0500 Subject: [PATCH] use gradle for building, reorg src/res dirs, add Sidekick lib source just some "standardization" (debatable i guess) to the source directory layout and resources directory. removal of the dependancy on Sidekick-1.2 jar is mainly because Xunkar does not have the source for this particular version of the library and the current version on Github does not have some of the stuff that we need for for this version (not even in an updated form, looks like he did a fair bit of cleaning out of stuff he no longer needed). i would rather _not_ depend on jars where no source / future support is possible so i included decompiled sources for this library so future bugfixing and modification is a bit easier moving forward. can decide if we want to move to the latest version of Sidekick at a later time. --- .gitignore | 3 + build.gradle | 13 ++ lib/Sidekick-1.2.jar | Bin 38960 -> 0 bytes .../java/org}/fenix/llanfair/Actions.java | 0 .../java/org}/fenix/llanfair/Counters.java | 0 .../java/org}/fenix/llanfair/Language.java | 0 .../java/org}/fenix/llanfair/Llanfair.java | 46 ++--- .../java/org}/fenix/llanfair/MenuItem.java | 0 .../main/java/org}/fenix/llanfair/Run.java | 0 .../java/org}/fenix/llanfair/Segment.java | 9 +- .../main/java/org}/fenix/llanfair/Time.java | 0 .../org}/fenix/llanfair/config/Accuracy.java | 0 .../org}/fenix/llanfair/config/Compare.java | 0 .../org}/fenix/llanfair/config/Merge.java | 0 .../org}/fenix/llanfair/config/Settings.java | 0 .../org}/fenix/llanfair/dialog/EditRun.java | 0 .../fenix/llanfair/dialog/EditSettings.java | 0 .../fenix/llanfair/dialog/LlanfairDialog.java | 0 .../fenix/llanfair/dialog/SettingsTab.java | 0 .../fenix/llanfair/dialog/TabComponents.java | 0 .../fenix/llanfair/dialog/TabGeneral.java | 0 .../fenix/llanfair/dialog/TabHistory.java | 0 .../fenix/llanfair/dialog/TabHotkeys.java | 0 .../org}/fenix/llanfair/dialog/TabLook.java | 0 .../org}/fenix/llanfair/extern/WSplit.java | 0 .../java/org}/fenix/llanfair/gui/Core.java | 0 .../java/org}/fenix/llanfair/gui/Footer.java | 0 .../java/org}/fenix/llanfair/gui/Graph.java | 0 .../java/org}/fenix/llanfair/gui/History.java | 0 .../java/org}/fenix/llanfair/gui/RunPane.java | 0 src/main/java/org/fenix/utils/Images.java | 48 +++++ src/main/java/org/fenix/utils/MixedPair.java | 16 ++ src/main/java/org/fenix/utils/Resources.java | 96 +++++++++ .../org/fenix/utils/TableModelSupport.java | 77 +++++++ .../org/fenix/utils/about/AboutDialog.java | 90 ++++++++ .../org/fenix/utils/config/Configuration.java | 192 ++++++++++++++++++ .../org/fenix/utils/gui/BorderlessFrame.java | 180 ++++++++++++++++ src/main/java/org/fenix/utils/gui/GBC.java | 73 +++++++ .../java/org/fenix/utils/gui/HyperLabel.java | 74 +++++++ .../org/fenix/utils/gui/LinkedCheckBox.java | 109 ++++++++++ .../fenix/utils/locale/LocaleDelegate.java | 52 +++++ .../org/fenix/utils/locale/LocaleEvent.java | 29 +++ .../fenix/utils/locale/LocaleListener.java | 12 ++ {res => src/main/resources}/digitalism.ttf | Bin {res => src/main/resources}/img/ARROW_DOWN | Bin {res => src/main/resources}/img/ARROW_UP | Bin {res => src/main/resources}/img/Llanfair | Bin {res => src/main/resources}/img/MINUS | Bin {res => src/main/resources}/img/PLUS | Bin {res => src/main/resources}/img/REVERT | Bin {res => src/main/resources}/img/de | Bin {res => src/main/resources}/img/donate | Bin {res => src/main/resources}/img/en | Bin {res => src/main/resources}/img/fr | Bin {res => src/main/resources}/img/jmi/ABOUT.png | Bin {res => src/main/resources}/img/jmi/EDIT.png | Bin {res => src/main/resources}/img/jmi/EXIT.png | Bin .../main/resources}/img/jmi/IMPORT.png | Bin {res => src/main/resources}/img/jmi/LOCK.png | Bin {res => src/main/resources}/img/jmi/NEW.png | Bin {res => src/main/resources}/img/jmi/OPEN.png | Bin .../main/resources}/img/jmi/OPEN_RECENT.png | Bin {res => src/main/resources}/img/jmi/RESET.png | Bin .../resources}/img/jmi/RESIZE_DEFAULT.png | Bin .../resources}/img/jmi/RESIZE_PREFERRED.png | Bin {res => src/main/resources}/img/jmi/SAVE.png | Bin .../main/resources}/img/jmi/SAVE_AS.png | Bin .../main/resources}/img/jmi/SETTINGS.png | Bin .../main/resources}/img/jmi/UNLOCK.png | Bin {res => src/main/resources}/img/nl | Bin {res => src/main/resources}/img/sv | Bin .../main/resources}/language.properties | 0 .../main/resources}/language_de.properties | 0 .../main/resources}/language_fr.properties | 0 .../main/resources}/language_nl.properties | 0 .../main/resources}/language_sv.properties | 0 .../main/resources}/llanfair.properties | 0 77 files changed, 1086 insertions(+), 33 deletions(-) create mode 100644 build.gradle delete mode 100644 lib/Sidekick-1.2.jar rename {org => src/main/java/org}/fenix/llanfair/Actions.java (100%) rename {org => src/main/java/org}/fenix/llanfair/Counters.java (100%) rename {org => src/main/java/org}/fenix/llanfair/Language.java (100%) rename {org => src/main/java/org}/fenix/llanfair/Llanfair.java (93%) rename {org => src/main/java/org}/fenix/llanfair/MenuItem.java (100%) rename {org => src/main/java/org}/fenix/llanfair/Run.java (100%) rename {org => src/main/java/org}/fenix/llanfair/Segment.java (96%) rename {org => src/main/java/org}/fenix/llanfair/Time.java (100%) rename {org => src/main/java/org}/fenix/llanfair/config/Accuracy.java (100%) rename {org => src/main/java/org}/fenix/llanfair/config/Compare.java (100%) rename {org => src/main/java/org}/fenix/llanfair/config/Merge.java (100%) rename {org => src/main/java/org}/fenix/llanfair/config/Settings.java (100%) rename {org => src/main/java/org}/fenix/llanfair/dialog/EditRun.java (100%) rename {org => src/main/java/org}/fenix/llanfair/dialog/EditSettings.java (100%) rename {org => src/main/java/org}/fenix/llanfair/dialog/LlanfairDialog.java (100%) rename {org => src/main/java/org}/fenix/llanfair/dialog/SettingsTab.java (100%) rename {org => src/main/java/org}/fenix/llanfair/dialog/TabComponents.java (100%) rename {org => src/main/java/org}/fenix/llanfair/dialog/TabGeneral.java (100%) rename {org => src/main/java/org}/fenix/llanfair/dialog/TabHistory.java (100%) rename {org => src/main/java/org}/fenix/llanfair/dialog/TabHotkeys.java (100%) rename {org => src/main/java/org}/fenix/llanfair/dialog/TabLook.java (100%) rename {org => src/main/java/org}/fenix/llanfair/extern/WSplit.java (100%) rename {org => src/main/java/org}/fenix/llanfair/gui/Core.java (100%) rename {org => src/main/java/org}/fenix/llanfair/gui/Footer.java (100%) rename {org => src/main/java/org}/fenix/llanfair/gui/Graph.java (100%) rename {org => src/main/java/org}/fenix/llanfair/gui/History.java (100%) rename {org => src/main/java/org}/fenix/llanfair/gui/RunPane.java (100%) create mode 100644 src/main/java/org/fenix/utils/Images.java create mode 100644 src/main/java/org/fenix/utils/MixedPair.java create mode 100644 src/main/java/org/fenix/utils/Resources.java create mode 100644 src/main/java/org/fenix/utils/TableModelSupport.java create mode 100644 src/main/java/org/fenix/utils/about/AboutDialog.java create mode 100644 src/main/java/org/fenix/utils/config/Configuration.java create mode 100644 src/main/java/org/fenix/utils/gui/BorderlessFrame.java create mode 100644 src/main/java/org/fenix/utils/gui/GBC.java create mode 100644 src/main/java/org/fenix/utils/gui/HyperLabel.java create mode 100644 src/main/java/org/fenix/utils/gui/LinkedCheckBox.java create mode 100644 src/main/java/org/fenix/utils/locale/LocaleDelegate.java create mode 100644 src/main/java/org/fenix/utils/locale/LocaleEvent.java create mode 100644 src/main/java/org/fenix/utils/locale/LocaleListener.java rename {res => src/main/resources}/digitalism.ttf (100%) rename {res => src/main/resources}/img/ARROW_DOWN (100%) rename {res => src/main/resources}/img/ARROW_UP (100%) rename {res => src/main/resources}/img/Llanfair (100%) rename {res => src/main/resources}/img/MINUS (100%) rename {res => src/main/resources}/img/PLUS (100%) rename {res => src/main/resources}/img/REVERT (100%) rename {res => src/main/resources}/img/de (100%) rename {res => src/main/resources}/img/donate (100%) rename {res => src/main/resources}/img/en (100%) rename {res => src/main/resources}/img/fr (100%) rename {res => src/main/resources}/img/jmi/ABOUT.png (100%) rename {res => src/main/resources}/img/jmi/EDIT.png (100%) rename {res => src/main/resources}/img/jmi/EXIT.png (100%) rename {res => src/main/resources}/img/jmi/IMPORT.png (100%) rename {res => src/main/resources}/img/jmi/LOCK.png (100%) rename {res => src/main/resources}/img/jmi/NEW.png (100%) rename {res => src/main/resources}/img/jmi/OPEN.png (100%) rename {res => src/main/resources}/img/jmi/OPEN_RECENT.png (100%) rename {res => src/main/resources}/img/jmi/RESET.png (100%) rename {res => src/main/resources}/img/jmi/RESIZE_DEFAULT.png (100%) rename {res => src/main/resources}/img/jmi/RESIZE_PREFERRED.png (100%) rename {res => src/main/resources}/img/jmi/SAVE.png (100%) rename {res => src/main/resources}/img/jmi/SAVE_AS.png (100%) rename {res => src/main/resources}/img/jmi/SETTINGS.png (100%) rename {res => src/main/resources}/img/jmi/UNLOCK.png (100%) rename {res => src/main/resources}/img/nl (100%) rename {res => src/main/resources}/img/sv (100%) rename {res => src/main/resources}/language.properties (100%) rename {res => src/main/resources}/language_de.properties (100%) rename {res => src/main/resources}/language_fr.properties (100%) rename {res => src/main/resources}/language_nl.properties (100%) rename {res => src/main/resources}/language_sv.properties (100%) rename {res => src/main/resources}/llanfair.properties (100%) diff --git a/.gitignore b/.gitignore index bdf2506..eeb656b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,13 @@ .DS_Store .idea/ .settings/ +.gradle/ target/ out/ +build/ .project .classpath *.iml *.ipr *.iws +/llanfair.xml \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..3d4f2c3 --- /dev/null +++ b/build.gradle @@ -0,0 +1,13 @@ +apply plugin: 'java' + +sourceCompatibility = 1.7 +targetCompatibility = 1.7 + +repositories { + mavenCentral() +} + +dependencies { + compile fileTree(dir: 'lib', include: ['*.jar']) +} + diff --git a/lib/Sidekick-1.2.jar b/lib/Sidekick-1.2.jar deleted file mode 100644 index bea995f66588a2a0289c6596da8acf54b51953d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38960 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 0 ) { String locale = args[0]; LocaleDelegate.setDefault( new Locale( locale ) ); - RESOURCES = new Resources( "res" ); + RESOURCES = new Resources(); dumpLocalization(); System.exit( 0 ); } diff --git a/org/fenix/llanfair/MenuItem.java b/src/main/java/org/fenix/llanfair/MenuItem.java similarity index 100% rename from org/fenix/llanfair/MenuItem.java rename to src/main/java/org/fenix/llanfair/MenuItem.java diff --git a/org/fenix/llanfair/Run.java b/src/main/java/org/fenix/llanfair/Run.java similarity index 100% rename from org/fenix/llanfair/Run.java rename to src/main/java/org/fenix/llanfair/Run.java diff --git a/org/fenix/llanfair/Segment.java b/src/main/java/org/fenix/llanfair/Segment.java similarity index 96% rename from org/fenix/llanfair/Segment.java rename to src/main/java/org/fenix/llanfair/Segment.java index 7b6e070..aa9760c 100644 --- a/org/fenix/llanfair/Segment.java +++ b/src/main/java/org/fenix/llanfair/Segment.java @@ -1,13 +1,12 @@ package org.fenix.llanfair; +import org.fenix.llanfair.config.Settings; +import org.fenix.utils.Images; + +import javax.swing.*; import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; -import javax.swing.Icon; -import org.fenix.llanfair.Language; -import org.fenix.llanfair.config.Settings; - -import org.fenix.utils.Images; /** * Represents a portion of a run. As such, a segment is associated to a diff --git a/org/fenix/llanfair/Time.java b/src/main/java/org/fenix/llanfair/Time.java similarity index 100% rename from org/fenix/llanfair/Time.java rename to src/main/java/org/fenix/llanfair/Time.java diff --git a/org/fenix/llanfair/config/Accuracy.java b/src/main/java/org/fenix/llanfair/config/Accuracy.java similarity index 100% rename from org/fenix/llanfair/config/Accuracy.java rename to src/main/java/org/fenix/llanfair/config/Accuracy.java diff --git a/org/fenix/llanfair/config/Compare.java b/src/main/java/org/fenix/llanfair/config/Compare.java similarity index 100% rename from org/fenix/llanfair/config/Compare.java rename to src/main/java/org/fenix/llanfair/config/Compare.java diff --git a/org/fenix/llanfair/config/Merge.java b/src/main/java/org/fenix/llanfair/config/Merge.java similarity index 100% rename from org/fenix/llanfair/config/Merge.java rename to src/main/java/org/fenix/llanfair/config/Merge.java diff --git a/org/fenix/llanfair/config/Settings.java b/src/main/java/org/fenix/llanfair/config/Settings.java similarity index 100% rename from org/fenix/llanfair/config/Settings.java rename to src/main/java/org/fenix/llanfair/config/Settings.java diff --git a/org/fenix/llanfair/dialog/EditRun.java b/src/main/java/org/fenix/llanfair/dialog/EditRun.java similarity index 100% rename from org/fenix/llanfair/dialog/EditRun.java rename to src/main/java/org/fenix/llanfair/dialog/EditRun.java diff --git a/org/fenix/llanfair/dialog/EditSettings.java b/src/main/java/org/fenix/llanfair/dialog/EditSettings.java similarity index 100% rename from org/fenix/llanfair/dialog/EditSettings.java rename to src/main/java/org/fenix/llanfair/dialog/EditSettings.java diff --git a/org/fenix/llanfair/dialog/LlanfairDialog.java b/src/main/java/org/fenix/llanfair/dialog/LlanfairDialog.java similarity index 100% rename from org/fenix/llanfair/dialog/LlanfairDialog.java rename to src/main/java/org/fenix/llanfair/dialog/LlanfairDialog.java diff --git a/org/fenix/llanfair/dialog/SettingsTab.java b/src/main/java/org/fenix/llanfair/dialog/SettingsTab.java similarity index 100% rename from org/fenix/llanfair/dialog/SettingsTab.java rename to src/main/java/org/fenix/llanfair/dialog/SettingsTab.java diff --git a/org/fenix/llanfair/dialog/TabComponents.java b/src/main/java/org/fenix/llanfair/dialog/TabComponents.java similarity index 100% rename from org/fenix/llanfair/dialog/TabComponents.java rename to src/main/java/org/fenix/llanfair/dialog/TabComponents.java diff --git a/org/fenix/llanfair/dialog/TabGeneral.java b/src/main/java/org/fenix/llanfair/dialog/TabGeneral.java similarity index 100% rename from org/fenix/llanfair/dialog/TabGeneral.java rename to src/main/java/org/fenix/llanfair/dialog/TabGeneral.java diff --git a/org/fenix/llanfair/dialog/TabHistory.java b/src/main/java/org/fenix/llanfair/dialog/TabHistory.java similarity index 100% rename from org/fenix/llanfair/dialog/TabHistory.java rename to src/main/java/org/fenix/llanfair/dialog/TabHistory.java diff --git a/org/fenix/llanfair/dialog/TabHotkeys.java b/src/main/java/org/fenix/llanfair/dialog/TabHotkeys.java similarity index 100% rename from org/fenix/llanfair/dialog/TabHotkeys.java rename to src/main/java/org/fenix/llanfair/dialog/TabHotkeys.java diff --git a/org/fenix/llanfair/dialog/TabLook.java b/src/main/java/org/fenix/llanfair/dialog/TabLook.java similarity index 100% rename from org/fenix/llanfair/dialog/TabLook.java rename to src/main/java/org/fenix/llanfair/dialog/TabLook.java diff --git a/org/fenix/llanfair/extern/WSplit.java b/src/main/java/org/fenix/llanfair/extern/WSplit.java similarity index 100% rename from org/fenix/llanfair/extern/WSplit.java rename to src/main/java/org/fenix/llanfair/extern/WSplit.java diff --git a/org/fenix/llanfair/gui/Core.java b/src/main/java/org/fenix/llanfair/gui/Core.java similarity index 100% rename from org/fenix/llanfair/gui/Core.java rename to src/main/java/org/fenix/llanfair/gui/Core.java diff --git a/org/fenix/llanfair/gui/Footer.java b/src/main/java/org/fenix/llanfair/gui/Footer.java similarity index 100% rename from org/fenix/llanfair/gui/Footer.java rename to src/main/java/org/fenix/llanfair/gui/Footer.java diff --git a/org/fenix/llanfair/gui/Graph.java b/src/main/java/org/fenix/llanfair/gui/Graph.java similarity index 100% rename from org/fenix/llanfair/gui/Graph.java rename to src/main/java/org/fenix/llanfair/gui/Graph.java diff --git a/org/fenix/llanfair/gui/History.java b/src/main/java/org/fenix/llanfair/gui/History.java similarity index 100% rename from org/fenix/llanfair/gui/History.java rename to src/main/java/org/fenix/llanfair/gui/History.java diff --git a/org/fenix/llanfair/gui/RunPane.java b/src/main/java/org/fenix/llanfair/gui/RunPane.java similarity index 100% rename from org/fenix/llanfair/gui/RunPane.java rename to src/main/java/org/fenix/llanfair/gui/RunPane.java diff --git a/src/main/java/org/fenix/utils/Images.java b/src/main/java/org/fenix/utils/Images.java new file mode 100644 index 0000000..2d6d360 --- /dev/null +++ b/src/main/java/org/fenix/utils/Images.java @@ -0,0 +1,48 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils; + +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; + +public class Images { + public Images() { + } + + public static Icon rescale(Icon icon, int size) { + if(icon == null) { + throw new NullPointerException("Icon is null"); + } else if(size <= 0) { + throw new IllegalArgumentException("Illegal size: " + size); + } else { + int height = icon.getIconHeight(); + int width = icon.getIconWidth(); + double scale; + BufferedImage buffer; + if(height > width) { + scale = (double)size / (double)height; + buffer = new BufferedImage((int)((double)width * scale), size, 2); + } else { + scale = (double)size / (double)width; + buffer = new BufferedImage(size, (int)((double)height * scale), 2); + } + + Graphics2D g2 = buffer.createGraphics(); + if(scale < 1.0D) { + g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); + } else { + g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); + } + + g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + g2.scale(scale, scale); + icon.paintIcon((Component)null, g2, 0, 0); + g2.dispose(); + return new ImageIcon(buffer); + } + } +} diff --git a/src/main/java/org/fenix/utils/MixedPair.java b/src/main/java/org/fenix/utils/MixedPair.java new file mode 100644 index 0000000..9789a5e --- /dev/null +++ b/src/main/java/org/fenix/utils/MixedPair.java @@ -0,0 +1,16 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils; + +public class MixedPair { + public F first; + public S second; + + public MixedPair(F first, S second) { + this.first = first; + this.second = second; + } +} diff --git a/src/main/java/org/fenix/utils/Resources.java b/src/main/java/org/fenix/utils/Resources.java new file mode 100644 index 0000000..3cd3e95 --- /dev/null +++ b/src/main/java/org/fenix/utils/Resources.java @@ -0,0 +1,96 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils; + +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.io.InputStream; +import java.net.URL; +import java.text.MessageFormat; +import java.util.Locale; +import java.util.ResourceBundle; + +public class Resources { + private String path; + private ResourceBundle language; + private MessageFormat formatter; + + public Resources() { + this.path = ""; + this.formatter = new MessageFormat(""); + this.defaultLocaleChanged(); + } + + public Resources(String path) { + if(path != null && !path.equals("")) { + if (!path.endsWith("/")) + path += "/"; + + this.path = path; + this.formatter = new MessageFormat(""); + this.defaultLocaleChanged(); + } else { + throw new NullPointerException("Unspecified resource path"); + } + } + + public String getString(String key) { + return !this.language.keySet().contains(key)?null:this.language.getString(key); + } + + public String getString(String key, Object[] parameters) { + String string = this.getString(key); + this.formatter.applyPattern(string); + return this.formatter.format(parameters); + } + + public Icon getIcon(String path) { + String fullPath = this.path + "img/" + path; + URL url = ClassLoader.getSystemResource(fullPath); + + try { + return new ImageIcon(ImageIO.read(url)); + } catch (Exception var5) { + throw new IllegalArgumentException("Cannot load: " + fullPath); + } + } + + public Image getImage(String path) { + String fullPath = this.path + "img/" + path; + URL url = ClassLoader.getSystemResource(fullPath); + + try { + return Toolkit.getDefaultToolkit().createImage(url); + } catch (Exception var5) { + throw new IllegalArgumentException("Cannot load: " + fullPath); + } + } + + public InputStream getStream(String path) { + return ClassLoader.getSystemResourceAsStream(this.path + path); + } + + public ResourceBundle getBundle(String path) { + return ResourceBundle.getBundle(this.path + path); + } + + public final void defaultLocaleChanged() { + String baseName; + if (this.path.equals("")) + baseName = "language"; + else + baseName = this.path + "language"; + + try { + this.language = ResourceBundle.getBundle(baseName); + } catch (Exception var2) { + this.language = ResourceBundle.getBundle(baseName, Locale.ENGLISH); + } + + this.formatter.setLocale(Locale.getDefault()); + } +} diff --git a/src/main/java/org/fenix/utils/TableModelSupport.java b/src/main/java/org/fenix/utils/TableModelSupport.java new file mode 100644 index 0000000..7ac1389 --- /dev/null +++ b/src/main/java/org/fenix/utils/TableModelSupport.java @@ -0,0 +1,77 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils; + +import javax.swing.event.EventListenerList; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.table.TableModel; + +public class TableModelSupport { + private TableModel source; + private EventListenerList listeners; + + public TableModelSupport(TableModel source) { + if(source == null) { + throw new NullPointerException("Source TableModel is null"); + } else { + this.source = source; + this.listeners = new EventListenerList(); + } + } + + public TableModel getSource() { + return this.source; + } + + public void addTableModelListener(TableModelListener listener) { + if(listener == null) { + throw new NullPointerException("TableModelListener is null"); + } else { + this.listeners.add(TableModelListener.class, listener); + } + } + + public void removeTableModelListener(TableModelListener listener) { + this.listeners.remove(TableModelListener.class, listener); + } + + public void fireTableDataChanged() { + this.fire(new TableModelEvent(this.source, 0, this.source.getRowCount() - 1)); + } + + public void fireTableStructureChanged() { + this.fire(new TableModelEvent(this.source, -1)); + } + + public void fireTableRowsInserted(int firstRow, int lastRow) { + this.fire(new TableModelEvent(this.source, firstRow, lastRow, -1, 1)); + } + + public void fireTableRowsUpdated(int firstRow, int lastRow) { + this.fire(new TableModelEvent(this.source, firstRow, lastRow, -1, 0)); + } + + public void fireTableRowsDeleted(int firstRow, int lastRow) { + this.fire(new TableModelEvent(this.source, firstRow, lastRow, -1, -1)); + } + + public void fireTableCellUpdated(int row, int col) { + this.fire(new TableModelEvent(this.source, row, row, col, 0)); + } + + private void fire(TableModelEvent event) { + TableModelListener[] tableListeners = (TableModelListener[])this.listeners.getListeners(TableModelListener.class); + TableModelListener[] arr$ = tableListeners; + int len$ = tableListeners.length; + + for(int i$ = 0; i$ < len$; ++i$) { + TableModelListener listener = arr$[i$]; + listener.tableChanged(event); + } + + } +} diff --git a/src/main/java/org/fenix/utils/about/AboutDialog.java b/src/main/java/org/fenix/utils/about/AboutDialog.java new file mode 100644 index 0000000..36b0fc6 --- /dev/null +++ b/src/main/java/org/fenix/utils/about/AboutDialog.java @@ -0,0 +1,90 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils.about; + +import org.fenix.utils.gui.GBC; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.net.URL; + +public class AboutDialog extends JDialog implements ActionListener { + private JLabel icon = new JLabel(); + private JLabel message; + private HyperLabel website; + private HyperLabel donate; + private JButton okButton; + + public AboutDialog(Window owner, String title) { + super(owner, title); + this.icon.setIcon((Icon)UIManager.get("OptionPane.informationIcon")); + this.okButton = new JButton("OK"); + this.okButton.addActionListener(this); + this.donate = null; + this.website = null; + this.message = null; + this.setResizable(false); + } + + public void display() { + this.setLayout(new GridBagLayout()); + this.add(this.icon, GBC.grid(0, 0).insets(20, 20).anchor(19)); + if(this.message != null) { + this.add(this.message, GBC.grid(1, 0).insets(10, 0, 0, 15)); + } + + if(this.website != null || this.donate != null) { + this.add(new JLabel(), GBC.grid(0, 1, 2, 1).insets(5, 0)); + } + + if(this.website != null) { + this.add(this.website, GBC.grid(0, 2, 2, 1).insets(5, 0).anchor(10)); + } + + if(this.donate != null) { + this.add(this.donate, GBC.grid(0, 3, 2, 1).insets(5, 0).anchor(10)); + } + + this.add(this.okButton, GBC.grid(0, 4, 2, 1).insets(10, 0)); + this.pack(); + this.setLocationRelativeTo(this.getOwner()); + this.setVisible(true); + } + + public void setMessage(String message) { + this.message = new JLabel(message); + } + + public void setDonateLink(URL url, Icon icon) { + if(url == null) { + throw new NullPointerException("Donate URL is null"); + } else { + this.donate = new HyperLabel(url, icon); + } + } + + public void setWebsite(URL url) { + this.setWebsite(url, (String)null); + } + + public void setWebsite(URL url, String text) { + if(url == null) { + throw new NullPointerException("Website URL is null"); + } else { + if(text == null || text.equals("")) { + text = url.toString(); + } + + this.website = new HyperLabel(url, text); + } + } + + public void actionPerformed(ActionEvent event) { + this.dispose(); + } +} diff --git a/src/main/java/org/fenix/utils/config/Configuration.java b/src/main/java/org/fenix/utils/config/Configuration.java new file mode 100644 index 0000000..ef1a98a --- /dev/null +++ b/src/main/java/org/fenix/utils/config/Configuration.java @@ -0,0 +1,192 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils.config; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.xml.DomDriver; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +public class Configuration implements Serializable { + private static final long serialVersionUID = 1001L; + private transient File path; + private Map> values; + private transient PropertyChangeSupport pcSupport; + + public Configuration() { + this.values = new HashMap<>(); + this.pcSupport = new PropertyChangeSupport(this); + } + + private Configuration(File path) { + this(); + this.setPath(path); + } + + public static Configuration newInstance(File path) { + return path.exists()?deserialize(path):new Configuration(path); + } + + public boolean isEmpty() { + return this.values.isEmpty(); + } + + public File getPath() { + return this.path; + } + + public final void setPath(File path) { + if(path == null) { + throw new NullPointerException("Null path"); + } else if(path.isDirectory()) { + throw new IllegalArgumentException("Path is a directory"); + } else { + File parent = path.getAbsoluteFile().getParentFile(); + if(parent.canRead() && parent.canWrite()) { + this.path = path; + } else { + throw new IllegalArgumentException("Denied: " + parent); + } + } + } + + @SuppressWarnings("unchecked") + public T get(String section, String key) { + if(!this.values.containsKey(section)) { + return null; + } else { + if(section == null) { + section = ""; + } + + Map subMap = this.values.get(section); + return !subMap.containsKey(key)?null:(T)subMap.get(key); + } + } + + public T get(String key) { + if(key != null && key.contains(".")) { + String[] split = key.split("\\."); + return this.get(split[0], split[1]); + } else { + return this.get("", key); + } + } + + public void put(String section, String key, Object value) { + if(key != null && !key.equals("")) { + if(section == null) { + section = ""; + } + + Map subMap = this.values.get(section); + if(subMap == null) { + subMap = new HashMap<>(); + this.values.put(section, subMap); + } + + Object old = subMap.get(key); + subMap.put(key, value); + this.pcSupport.firePropertyChange(section + "." + key, old, value); + } else { + throw new NullPointerException("Null key"); + } + } + + public void put(String key, Object value) { + if(key != null && key.contains(".")) { + String[] split = key.split("\\."); + this.put(split[0], split[1], value); + } else { + this.put("", key, value); + } + + } + + public void remove(String section, String key) { + if(section == null) { + section = ""; + } + + if(this.values.containsKey(section)) { + ((Map)this.values.get(section)).remove(key); + } + + } + + public void remove(String key) { + this.remove("", key); + } + + public boolean contains(String section, String key) { + if(section == null) { + section = ""; + } + + return !this.values.containsKey(section)?false:this.values.get(section).containsKey(key); + } + + public boolean contains(String key) { + if(key != null && key.contains(".")) { + String[] split = key.split("\\."); + return this.contains(split[0], split[1]); + } else { + return this.contains("", key); + } + } + + public void addPropertyChangeListener(PropertyChangeListener listener) { + if(listener == null) { + throw new NullPointerException("Null listener"); + } else { + this.pcSupport.addPropertyChangeListener(listener); + } + } + + public void removePropertyChangeListener(PropertyChangeListener pcl) { + this.pcSupport.removePropertyChangeListener(pcl); + } + + public void serialize() { + XStream xstream = new XStream(new DomDriver()); + String xmlOutput = xstream.toXML(this); + FileWriter stream = null; + + try { + stream = new FileWriter(this.path); + stream.write(xmlOutput); + } catch (Exception var12) { + throw new IllegalStateException("I/O Error for: " + this.path); + } finally { + try { + stream.close(); + } catch (Exception var11) { + ; + } + + } + + } + + private static Configuration deserialize(File path) { + XStream xstream = new XStream(new DomDriver()); + Configuration input = (Configuration)xstream.fromXML(path); + input.setPath(path); + return input; + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + in.defaultReadObject(); + this.pcSupport = new PropertyChangeSupport(this); + } +} diff --git a/src/main/java/org/fenix/utils/gui/BorderlessFrame.java b/src/main/java/org/fenix/utils/gui/BorderlessFrame.java new file mode 100644 index 0000000..ac07899 --- /dev/null +++ b/src/main/java/org/fenix/utils/gui/BorderlessFrame.java @@ -0,0 +1,180 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils.gui; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; + +public class BorderlessFrame extends JFrame implements MouseListener, MouseMotionListener { + private int snapSize; + private int startMouseX; + private int startMouseY; + private int startFrameX; + private int startFrameY; + private int startHeight; + private int startWidth; + private boolean doDrag; + private boolean doResize; + + public BorderlessFrame(String title) { + this(); + this.setTitle(title); + } + + public BorderlessFrame() { + this.doDrag = false; + this.doResize = false; + this.snapSize = 10; + this.setUndecorated(true); + this.addMouseListener(this); + this.addMouseMotionListener(this); + } + + public int getSnapSize() { + return this.snapSize; + } + + public void setSnapSize(int snapSize) { + if(snapSize < 0) { + throw new IllegalArgumentException("Illegal snap: " + snapSize); + } else { + this.snapSize = snapSize; + } + } + + public void mousePressed(MouseEvent event) { + if(this.getCursor().getType() != 0) { + this.doResize = true; + this.startFrameX = this.getX(); + this.startFrameY = this.getY(); + this.startHeight = this.getHeight(); + this.startWidth = this.getWidth(); + } else { + this.doDrag = true; + this.startMouseX = event.getX(); + this.startMouseY = event.getY(); + } + + } + + public void mouseDragged(MouseEvent event) { + if(SwingUtilities.isLeftMouseButton(event)) { + int type; + int width; + if(this.doDrag) { + type = this.getX() + event.getX() - this.startMouseX; + width = this.getY() + event.getY() - this.startMouseY; + this.setLocation(type, width); + } + + if(this.doResize) { + type = this.getCursor().getType(); + width = this.getWidth(); + int height = this.getHeight(); + int frameX = this.startFrameX; + int frameY = this.startFrameY; + if(type == 5) { + width = event.getXOnScreen() - this.startFrameX; + height = event.getYOnScreen() - this.startFrameY; + } else if(type == 11) { + width = event.getXOnScreen() - this.startFrameX; + } else if(type == 7) { + width = event.getXOnScreen() - this.startFrameX; + height = this.startFrameY + this.startHeight - event.getYOnScreen(); + frameY = event.getYOnScreen(); + } else if(type == 8) { + height = this.startFrameY + this.startHeight - event.getYOnScreen(); + frameY = event.getYOnScreen(); + } else if(type == 6) { + width = this.startFrameX + this.startWidth - event.getXOnScreen(); + height = this.startFrameY + this.startHeight - event.getYOnScreen(); + frameY = event.getYOnScreen(); + frameX = event.getXOnScreen(); + } else if(type == 10) { + width = this.startFrameX + this.startWidth - event.getXOnScreen(); + frameX = event.getXOnScreen(); + } else if(type == 4) { + width = this.startFrameX + this.startWidth - event.getXOnScreen(); + height = event.getYOnScreen() - this.startFrameY; + frameX = event.getXOnScreen(); + } else if(type == 9) { + height = event.getYOnScreen() - this.startFrameY; + } + + Dimension minSize = this.getMinimumSize(); + if(width > minSize.width && height > minSize.height) { + this.setSize(width, height); + this.setLocation(frameX, frameY); + } else if(width > minSize.width) { + this.setSize(width, minSize.height); + this.setLocation(frameX, this.getY()); + } else if(height > minSize.height) { + this.setSize(minSize.width, height); + this.setLocation(this.getX(), frameY); + } + } + + } + } + + public void mouseMoved(MouseEvent event) { + int farSnapX = this.getX() + this.getWidth() - this.snapSize; + int farSnapY = this.getY() + this.getHeight() - this.snapSize; + int lowSnapX = this.getX() + this.snapSize; + int lowSnapY = this.getY() + this.snapSize; + int mouseX = event.getXOnScreen(); + int mouseY = event.getYOnScreen(); + if(mouseX > farSnapX) { + if(mouseY > farSnapY) { + this.changeCursor(5); + } else if(mouseY < lowSnapY) { + this.changeCursor(7); + } else { + this.changeCursor(11); + } + } else if(mouseX < lowSnapX) { + if(mouseY < lowSnapY) { + this.changeCursor(6); + } else if(mouseY > farSnapY) { + this.changeCursor(4); + } else { + this.changeCursor(10); + } + } else if(mouseY > farSnapY) { + this.changeCursor(9); + } else if(mouseY < lowSnapY) { + this.changeCursor(8); + } else { + this.changeCursor(0); + } + + } + + public void mouseReleased(MouseEvent event) { + this.doDrag = false; + this.doResize = false; + } + + public void mouseClicked(MouseEvent event) { + } + + public void mouseEntered(MouseEvent event) { + } + + public void mouseExited(MouseEvent event) { + } + + private void changeCursor(int cursorType) { + int type = this.getCursor().getType(); + if(cursorType != type) { + this.setCursor(Cursor.getPredefinedCursor(cursorType)); + } + + } +} diff --git a/src/main/java/org/fenix/utils/gui/GBC.java b/src/main/java/org/fenix/utils/gui/GBC.java new file mode 100644 index 0000000..da98e47 --- /dev/null +++ b/src/main/java/org/fenix/utils/gui/GBC.java @@ -0,0 +1,73 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils.gui; + +import java.awt.GridBagConstraints; +import java.awt.Insets; + +public class GBC extends GridBagConstraints { + public static final int LS = 21; + public static final int LE = 22; + public static final int PS = 19; + public static final int PE = 20; + public static final int BL = 512; + public static final int BT = 768; + public static final int FLS = 23; + public static final int FLE = 24; + public static final int LLS = 25; + public static final int LLE = 26; + public static final int H = 2; + public static final int V = 3; + public static final int C = 10; + public static final int B = 1; + + public GBC() { + } + + public static GBC grid(int x, int y, int w, int h) { + GBC gbc = new GBC(); + gbc.gridx = x; + gbc.gridy = y; + gbc.gridwidth = w; + gbc.gridheight = h; + return gbc; + } + + public static GBC grid(int x, int y) { + return grid(x, y, 1, 1); + } + + public GBC weight(double x, double y) { + this.weightx = x; + this.weighty = y; + return this; + } + + public GBC anchor(int anchor) { + this.anchor = anchor; + return this; + } + + public GBC fill(int fill) { + this.fill = fill; + return this; + } + + public GBC insets(int top, int left, int bottom, int right) { + this.insets = new Insets(top, left, bottom, right); + return this; + } + + public GBC insets(int y, int x) { + return this.insets(y, x, y, x); + } + + public GBC padding(int x, int y) { + this.ipadx = x; + this.ipady = y; + return this; + } +} diff --git a/src/main/java/org/fenix/utils/gui/HyperLabel.java b/src/main/java/org/fenix/utils/gui/HyperLabel.java new file mode 100644 index 0000000..7f38163 --- /dev/null +++ b/src/main/java/org/fenix/utils/gui/HyperLabel.java @@ -0,0 +1,74 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils.about; + +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Desktop; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JLabel; + +public class HyperLabel extends JLabel implements MouseListener { + private URI href; + + public HyperLabel(URL url, String text) { + super(text); + if(url == null) { + throw new NullPointerException("URL is null"); + } else { + this.decorate(); + + try { + this.href = url.toURI(); + } catch (URISyntaxException var4) { + throw new IllegalStateException(url.toString()); + } + + this.addMouseListener(this); + } + } + + public HyperLabel(URL url, Icon icon) { + this(url, (String)null); + this.setIcon(icon); + } + + public void mouseClicked(MouseEvent event) { + try { + Desktop.getDesktop().browse(this.href); + } catch (IOException var3) { + throw new IllegalStateException(var3.getLocalizedMessage()); + } + } + + public void mouseEntered(MouseEvent event) { + } + + public void mouseExited(MouseEvent event) { + } + + public void mousePressed(MouseEvent event) { + } + + public void mouseReleased(MouseEvent event) { + } + + private void decorate() { + this.setForeground(Color.BLUE); + this.setCursor(Cursor.getPredefinedCursor(12)); + if(this.getText() != null) { + this.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLUE)); + } + + } +} diff --git a/src/main/java/org/fenix/utils/gui/LinkedCheckBox.java b/src/main/java/org/fenix/utils/gui/LinkedCheckBox.java new file mode 100644 index 0000000..b511d39 --- /dev/null +++ b/src/main/java/org/fenix/utils/gui/LinkedCheckBox.java @@ -0,0 +1,109 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils.gui; + +import org.fenix.utils.MixedPair; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class LinkedCheckBox extends JCheckBox implements ItemListener { + private boolean purgesSelectState = true; + private List> constraints = new ArrayList(); + private List> sideEffects = new ArrayList(); + + public LinkedCheckBox() { + this.addItemListener(this); + } + + public boolean purgesSelectState() { + return this.purgesSelectState; + } + + public void activates(JCheckBox box) { + if(box == null) { + throw new NullPointerException("Target CheckBox is null"); + } else { + this.sideEffects.add(new MixedPair(box, Boolean.TRUE)); + } + } + + public void deactivates(JCheckBox box) { + if(box == null) { + throw new NullPointerException("Target CheckBox is null"); + } else { + this.sideEffects.add(new MixedPair(box, Boolean.FALSE)); + } + } + + public void requires(JCheckBox box, boolean state) { + if(box == null) { + throw new NullPointerException("Required CheckBox is null"); + } else { + this.constraints.add(new MixedPair(box, Boolean.valueOf(state))); + box.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + LinkedCheckBox.this.checkConstraints(); + } + }); + box.addPropertyChangeListener("enabled", new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + LinkedCheckBox.this.checkConstraints(); + } + }); + this.checkConstraints(); + } + } + + public void setPurgesSelectState(boolean purgesSelectState) { + this.purgesSelectState = purgesSelectState; + } + + public void setEnabled(boolean b) { + super.setEnabled(b); + if(!b && this.purgesSelectState) { + this.setSelected(false); + } + + } + + public void itemStateChanged(ItemEvent event) { + boolean selected = this.isSelected(); + Iterator i$ = this.sideEffects.iterator(); + + while(true) { + while(i$.hasNext()) { + MixedPair pair = (MixedPair)i$.next(); + if(((Boolean)pair.second).booleanValue()) { + ((JCheckBox)pair.first).setSelected(selected); + } else { + ((JCheckBox)pair.first).setSelected(!selected && ((JCheckBox)pair.first).isSelected()); + } + } + + return; + } + } + + protected void checkConstraints() { + boolean enabled = true; + + MixedPair pair; + for(Iterator i$ = this.constraints.iterator(); i$.hasNext(); enabled &= ((JCheckBox)pair.first).isSelected() == ((Boolean)pair.second).booleanValue()) { + pair = (MixedPair)i$.next(); + } + + this.setEnabled(enabled); + } +} diff --git a/src/main/java/org/fenix/utils/locale/LocaleDelegate.java b/src/main/java/org/fenix/utils/locale/LocaleDelegate.java new file mode 100644 index 0000000..e156b4d --- /dev/null +++ b/src/main/java/org/fenix/utils/locale/LocaleDelegate.java @@ -0,0 +1,52 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils.locale; + +import javax.swing.event.EventListenerList; +import java.util.Locale; + +public class LocaleDelegate { + private static EventListenerList listeners = new EventListenerList(); + + public LocaleDelegate() { + } + + public static void setDefault(Locale locale) { + if(locale == null) { + throw new NullPointerException("Null locale"); + } else { + Locale old = Locale.getDefault(); + if(!old.equals(locale)) { + Locale.setDefault(locale); + fireLocalChanged(old, locale); + } + + } + } + + public static void addLocaleListener(LocaleListener listener) { + if(listener == null) { + throw new NullPointerException("Null listener"); + } else { + listeners.add(LocaleListener.class, listener); + } + } + + public static void removeLocaleListener(LocaleListener listener) { + listeners.remove(LocaleListener.class, listener); + } + + private static void fireLocalChanged(Locale oldLocale, Locale newLocale) { + LocaleListener[] arr$ = (LocaleListener[])listeners.getListeners(LocaleListener.class); + int len$ = arr$.length; + + for(int i$ = 0; i$ < len$; ++i$) { + LocaleListener ll = arr$[i$]; + ll.localeChanged(new LocaleEvent(oldLocale, newLocale)); + } + + } +} diff --git a/src/main/java/org/fenix/utils/locale/LocaleEvent.java b/src/main/java/org/fenix/utils/locale/LocaleEvent.java new file mode 100644 index 0000000..9d6b2de --- /dev/null +++ b/src/main/java/org/fenix/utils/locale/LocaleEvent.java @@ -0,0 +1,29 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils.locale; + +import java.awt.AWTEvent; +import java.util.Locale; + +public class LocaleEvent extends AWTEvent { + public static final int DEFAULT_UPDATE = 0; + private Locale oldLocale; + private Locale newLocale; + + public LocaleEvent(Locale old, Locale neu) { + super(Locale.class, 0); + this.oldLocale = old; + this.newLocale = neu; + } + + public Locale getOldLocale() { + return this.oldLocale; + } + + public Locale getNewLocale() { + return this.newLocale; + } +} diff --git a/src/main/java/org/fenix/utils/locale/LocaleListener.java b/src/main/java/org/fenix/utils/locale/LocaleListener.java new file mode 100644 index 0000000..2b7722d --- /dev/null +++ b/src/main/java/org/fenix/utils/locale/LocaleListener.java @@ -0,0 +1,12 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.fenix.utils.locale; + +import java.util.EventListener; + +public interface LocaleListener extends EventListener { + void localeChanged(LocaleEvent var1); +} diff --git a/res/digitalism.ttf b/src/main/resources/digitalism.ttf similarity index 100% rename from res/digitalism.ttf rename to src/main/resources/digitalism.ttf diff --git a/res/img/ARROW_DOWN b/src/main/resources/img/ARROW_DOWN similarity index 100% rename from res/img/ARROW_DOWN rename to src/main/resources/img/ARROW_DOWN diff --git a/res/img/ARROW_UP b/src/main/resources/img/ARROW_UP similarity index 100% rename from res/img/ARROW_UP rename to src/main/resources/img/ARROW_UP diff --git a/res/img/Llanfair b/src/main/resources/img/Llanfair similarity index 100% rename from res/img/Llanfair rename to src/main/resources/img/Llanfair diff --git a/res/img/MINUS b/src/main/resources/img/MINUS similarity index 100% rename from res/img/MINUS rename to src/main/resources/img/MINUS diff --git a/res/img/PLUS b/src/main/resources/img/PLUS similarity index 100% rename from res/img/PLUS rename to src/main/resources/img/PLUS diff --git a/res/img/REVERT b/src/main/resources/img/REVERT similarity index 100% rename from res/img/REVERT rename to src/main/resources/img/REVERT diff --git a/res/img/de b/src/main/resources/img/de similarity index 100% rename from res/img/de rename to src/main/resources/img/de diff --git a/res/img/donate b/src/main/resources/img/donate similarity index 100% rename from res/img/donate rename to src/main/resources/img/donate diff --git a/res/img/en b/src/main/resources/img/en similarity index 100% rename from res/img/en rename to src/main/resources/img/en diff --git a/res/img/fr b/src/main/resources/img/fr similarity index 100% rename from res/img/fr rename to src/main/resources/img/fr diff --git a/res/img/jmi/ABOUT.png b/src/main/resources/img/jmi/ABOUT.png similarity index 100% rename from res/img/jmi/ABOUT.png rename to src/main/resources/img/jmi/ABOUT.png diff --git a/res/img/jmi/EDIT.png b/src/main/resources/img/jmi/EDIT.png similarity index 100% rename from res/img/jmi/EDIT.png rename to src/main/resources/img/jmi/EDIT.png diff --git a/res/img/jmi/EXIT.png b/src/main/resources/img/jmi/EXIT.png similarity index 100% rename from res/img/jmi/EXIT.png rename to src/main/resources/img/jmi/EXIT.png diff --git a/res/img/jmi/IMPORT.png b/src/main/resources/img/jmi/IMPORT.png similarity index 100% rename from res/img/jmi/IMPORT.png rename to src/main/resources/img/jmi/IMPORT.png diff --git a/res/img/jmi/LOCK.png b/src/main/resources/img/jmi/LOCK.png similarity index 100% rename from res/img/jmi/LOCK.png rename to src/main/resources/img/jmi/LOCK.png diff --git a/res/img/jmi/NEW.png b/src/main/resources/img/jmi/NEW.png similarity index 100% rename from res/img/jmi/NEW.png rename to src/main/resources/img/jmi/NEW.png diff --git a/res/img/jmi/OPEN.png b/src/main/resources/img/jmi/OPEN.png similarity index 100% rename from res/img/jmi/OPEN.png rename to src/main/resources/img/jmi/OPEN.png diff --git a/res/img/jmi/OPEN_RECENT.png b/src/main/resources/img/jmi/OPEN_RECENT.png similarity index 100% rename from res/img/jmi/OPEN_RECENT.png rename to src/main/resources/img/jmi/OPEN_RECENT.png diff --git a/res/img/jmi/RESET.png b/src/main/resources/img/jmi/RESET.png similarity index 100% rename from res/img/jmi/RESET.png rename to src/main/resources/img/jmi/RESET.png diff --git a/res/img/jmi/RESIZE_DEFAULT.png b/src/main/resources/img/jmi/RESIZE_DEFAULT.png similarity index 100% rename from res/img/jmi/RESIZE_DEFAULT.png rename to src/main/resources/img/jmi/RESIZE_DEFAULT.png diff --git a/res/img/jmi/RESIZE_PREFERRED.png b/src/main/resources/img/jmi/RESIZE_PREFERRED.png similarity index 100% rename from res/img/jmi/RESIZE_PREFERRED.png rename to src/main/resources/img/jmi/RESIZE_PREFERRED.png diff --git a/res/img/jmi/SAVE.png b/src/main/resources/img/jmi/SAVE.png similarity index 100% rename from res/img/jmi/SAVE.png rename to src/main/resources/img/jmi/SAVE.png diff --git a/res/img/jmi/SAVE_AS.png b/src/main/resources/img/jmi/SAVE_AS.png similarity index 100% rename from res/img/jmi/SAVE_AS.png rename to src/main/resources/img/jmi/SAVE_AS.png diff --git a/res/img/jmi/SETTINGS.png b/src/main/resources/img/jmi/SETTINGS.png similarity index 100% rename from res/img/jmi/SETTINGS.png rename to src/main/resources/img/jmi/SETTINGS.png diff --git a/res/img/jmi/UNLOCK.png b/src/main/resources/img/jmi/UNLOCK.png similarity index 100% rename from res/img/jmi/UNLOCK.png rename to src/main/resources/img/jmi/UNLOCK.png diff --git a/res/img/nl b/src/main/resources/img/nl similarity index 100% rename from res/img/nl rename to src/main/resources/img/nl diff --git a/res/img/sv b/src/main/resources/img/sv similarity index 100% rename from res/img/sv rename to src/main/resources/img/sv diff --git a/res/language.properties b/src/main/resources/language.properties similarity index 100% rename from res/language.properties rename to src/main/resources/language.properties diff --git a/res/language_de.properties b/src/main/resources/language_de.properties similarity index 100% rename from res/language_de.properties rename to src/main/resources/language_de.properties diff --git a/res/language_fr.properties b/src/main/resources/language_fr.properties similarity index 100% rename from res/language_fr.properties rename to src/main/resources/language_fr.properties diff --git a/res/language_nl.properties b/src/main/resources/language_nl.properties similarity index 100% rename from res/language_nl.properties rename to src/main/resources/language_nl.properties diff --git a/res/language_sv.properties b/src/main/resources/language_sv.properties similarity index 100% rename from res/language_sv.properties rename to src/main/resources/language_sv.properties diff --git a/res/llanfair.properties b/src/main/resources/llanfair.properties similarity index 100% rename from res/llanfair.properties rename to src/main/resources/llanfair.properties