diff --git a/diylc/diylc-core/.classpath b/diylc/diylc-core/.classpath index 764f3461..d10fce33 100644 --- a/diylc/diylc-core/.classpath +++ b/diylc/diylc-core/.classpath @@ -8,6 +8,7 @@ + diff --git a/diylc/diylc-core/lib/AppleJavaExtensions.jar b/diylc/diylc-core/lib/AppleJavaExtensions.jar new file mode 100644 index 00000000..6659a81c Binary files /dev/null and b/diylc/diylc-core/lib/AppleJavaExtensions.jar differ diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml index c6eb8369..3409fad4 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/update.xml +++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml @@ -3041,7 +3041,11 @@ 2020-04-20 00:00:00.000 CET - + + + IMPROVEMENT + Include themes and fonts in OSX app package + BUG_FIX Some boards (e.g. Breadboard) stop working at certain orientations diff --git a/diylc/diylc-core/src/org/diylc/utils/ResourceLoader.java b/diylc/diylc-core/src/org/diylc/utils/ResourceLoader.java new file mode 100644 index 00000000..16e72e48 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/utils/ResourceLoader.java @@ -0,0 +1,51 @@ +/* + * + * DIY Layout Creator (DIYLC). Copyright (c) 2009-2018 held jointly by the individual authors. + * + * This file is part of DIYLC. + * + * DIYLC 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. + * + * DIYLC 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 DIYLC. If not, see + * . + * + */ +package org.diylc.utils; + +import java.io.File; + +import org.apache.log4j.Logger; + +public class ResourceLoader { + + private static final Logger LOG = Logger.getLogger(ResourceLoader.class); + + public static File[] getFiles(String relativePath) { + String bundlePath; + try { + bundlePath = com.apple.eio.FileManager.getPathToApplicationBundle(); + LOG.debug("Detected OSX bundle path: " + bundlePath); + } catch (Exception e) { + bundlePath = null; // on non-OSX platforms + } + try { + String absolutePath; + if (bundlePath == null) + absolutePath = relativePath; + else + absolutePath = bundlePath + File.separator + "Contents" + File.separator + "Resources" + File.separator + relativePath; + LOG.debug("Looking for files in: " + absolutePath); + File absoluteFile = new File(absolutePath); + return absoluteFile.listFiles(); + } catch (Exception e) { + LOG.error("Error while looking for files in: " + relativePath, e); + return null; + } + } +} diff --git a/diylc/diylc-swing/build.xml b/diylc/diylc-swing/build.xml index 05441282..002b4b9f 100644 --- a/diylc/diylc-swing/build.xml +++ b/diylc/diylc-swing/build.xml @@ -125,6 +125,8 @@ + + @@ -165,7 +167,7 @@ - + diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 00df9cc1..3e0d2043 100644 Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index c49cee01..d982490a 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ diff --git a/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java b/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java index 5e4f23f2..887b3e82 100644 --- a/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java +++ b/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java @@ -38,6 +38,7 @@ import org.diylc.presenter.Presenter; import org.diylc.swing.gui.MainFrame; import org.diylc.swing.gui.TemplateDialog; import org.diylc.swingframework.FontChooserComboBox; +import org.diylc.utils.ResourceLoader; /** * Main class that runs DIYLC. @@ -97,23 +98,23 @@ public class DIYLCStarter { @Override public void run() { LOG.debug("Starting font pre-loading"); - - File dir = new File("fonts"); - File[] fonts = dir.listFiles(); + + File[] fonts = ResourceLoader.getFiles("fonts"); - for (int i = 0; i < fonts.length; i++) { - try { - LOG.info("Dynamically loading font: " + fonts[i].getName()); - Font customFont = Font.createFont(Font.TRUETYPE_FONT, new File(fonts[i].getAbsolutePath())).deriveFont(12f); - GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - // register the font - ge.registerFont(customFont); - } catch (IOException e) { - LOG.error("Could not load font", e); - } catch (FontFormatException e) { - LOG.error("Font format error", e); + if (fonts != null) + for (int i = 0; i < fonts.length; i++) { + try { + LOG.info("Dynamically loading font: " + fonts[i].getName()); + Font customFont = Font.createFont(Font.TRUETYPE_FONT, new File(fonts[i].getAbsolutePath())).deriveFont(12f); + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + // register the font + ge.registerFont(customFont); + } catch (IOException e) { + LOG.error("Could not load font", e); + } catch (FontFormatException e) { + LOG.error("Font format error", e); + } } - } FontChooserComboBox box = new FontChooserComboBox(); box.getPreferredSize(); diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java index 4ee311c5..6ff71325 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java @@ -31,6 +31,7 @@ import org.diylc.core.Theme; import org.diylc.images.IconLoader; import org.diylc.swing.ActionFactory; import org.diylc.swing.ISwingUI; +import org.diylc.utils.ResourceLoader; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; @@ -133,11 +134,11 @@ public class ConfigPlugin implements IPlugIn { ActionFactory.getInstance() .createConfigAction(plugInPort, "Sticky Points", IPlugInPort.STICKY_POINTS_KEY, true), CONFIG_MENU); - File themeDir = new File("themes"); - if (themeDir.exists()) { + File[] themeFiles = ResourceLoader.getFiles("themes"); + if (themeFiles != null && themeFiles.length > 0) { XStream xStream = new XStream(new DomDriver()); swingUI.injectSubmenu(THEME_MENU, IconLoader.Pens.getIcon(), CONFIG_MENU); - for (File file : themeDir.listFiles()) { + for (File file : themeFiles) { if (file.getName().toLowerCase().endsWith(".xml")) { try { InputStream in = new FileInputStream(file);