* Added 1/8" jack

* Release 4.20

* Merge traces and wires into "Wiring" layer

* Add shabang to run.sh

* Added gray theme

* Prevent the donation label from wrapping into several lines

* Use Backspace key to delete selection in Mac OS

* Upgrade xstream to fix java 16 compatibility

* Add exec to run.sh
This commit is contained in:
Bane Stojkovic
2022-02-16 23:41:47 +01:00
committed by GitHub
parent feaa48fed5
commit d245a6305f
48 changed files with 303 additions and 355 deletions
+1 -1
View File
@@ -8,7 +8,7 @@
<classpathentry kind="lib" path="lib/jettison-1.0.1.jar"/> <classpathentry kind="lib" path="lib/jettison-1.0.1.jar"/>
<classpathentry kind="lib" path="lib/java-http-proxy.jar"/> <classpathentry kind="lib" path="lib/java-http-proxy.jar"/>
<classpathentry kind="lib" path="lib/AppleJavaExtensions.jar"/> <classpathentry kind="lib" path="lib/AppleJavaExtensions.jar"/>
<classpathentry kind="lib" path="lib/xstream-1.4.3.jar"/> <classpathentry kind="lib" path="lib/xstream-1.4.19.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -50,7 +50,7 @@ public interface IDIYComponent<T> extends Serializable, Cloneable {
public static final int CHASSIS = 1; public static final int CHASSIS = 1;
public static final int BOARD = 2; public static final int BOARD = 2;
public static final int TRACE = 3; public static final int WIRING = 3;
public static final int COMPONENT = 4; public static final int COMPONENT = 4;
public static final int TEXT = 5; public static final int TEXT = 5;
@@ -98,6 +98,7 @@ import org.diylc.utils.Constants;
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver; import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.security.AnyTypePermission;
/** /**
* The main presenter class, contains core app logic and drawing routines. * The main presenter class, contains core app logic and drawing routines.
@@ -143,6 +144,7 @@ public class Presenter implements IPlugInPort {
if (resource != null) { if (resource != null) {
BufferedInputStream in = new BufferedInputStream(resource.openStream()); BufferedInputStream in = new BufferedInputStream(resource.openStream());
XStream xStream = new XStream(new DomDriver()); XStream xStream = new XStream(new DomDriver());
xStream.addPermission(AnyTypePermission.ANY);
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<Version> allVersions = (List<Version>) xStream.fromXML(in); List<Version> allVersions = (List<Version>) xStream.fromXML(in);
CURRENT_VERSION = allVersions.get(allVersions.size() - 1).getVersionNumber(); CURRENT_VERSION = allVersions.get(allVersions.size() - 1).getVersionNumber();
@@ -2593,6 +2595,7 @@ public class Presenter implements IPlugInPort {
try { try {
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("variants.xml")); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("variants.xml"));
XStream xStream = new XStream(new DomDriver()); XStream xStream = new XStream(new DomDriver());
xStream.addPermission(AnyTypePermission.ANY);
xStream.toXML(defaultVariantMap, out); xStream.toXML(defaultVariantMap, out);
out.close(); out.close();
// no more user variants // no more user variants
@@ -2615,6 +2618,7 @@ public class Presenter implements IPlugInPort {
if (resource != null) { if (resource != null) {
BufferedInputStream in = new BufferedInputStream(resource.openStream()); BufferedInputStream in = new BufferedInputStream(resource.openStream());
XStream xStream = new XStream(new DomDriver()); XStream xStream = new XStream(new DomDriver());
xStream.addPermission(AnyTypePermission.ANY);
Map<String, List<Template>> defaults = (Map<String, List<Template>>) xStream.fromXML(in); Map<String, List<Template>> defaults = (Map<String, List<Template>>) xStream.fromXML(in);
in.close(); in.close();
@@ -2654,6 +2658,7 @@ public class Presenter implements IPlugInPort {
if (resource != null) { if (resource != null) {
BufferedInputStream in = new BufferedInputStream(resource.openStream()); BufferedInputStream in = new BufferedInputStream(resource.openStream());
XStream xStream = new XStream(new DomDriver()); XStream xStream = new XStream(new DomDriver());
xStream.addPermission(AnyTypePermission.ANY);
Map<String, List<IDIYComponent<?>>> defaults = (Map<String, List<IDIYComponent<?>>>) xStream.fromXML(in); Map<String, List<IDIYComponent<?>>> defaults = (Map<String, List<IDIYComponent<?>>>) xStream.fromXML(in);
in.close(); in.close();
@@ -2937,6 +2942,7 @@ public class Presenter implements IPlugInPort {
try { try {
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("blocks.xml")); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("blocks.xml"));
XStream xStream = new XStream(new DomDriver()); XStream xStream = new XStream(new DomDriver());
xStream.addPermission(AnyTypePermission.ANY);
xStream.toXML(defaultBlockMap, out); xStream.toXML(defaultBlockMap, out);
out.close(); out.close();
// no more user variants // no more user variants
@@ -3015,6 +3021,7 @@ public class Presenter implements IPlugInPort {
LOG.debug(String.format("importVariants(%s)", fileName)); LOG.debug(String.format("importVariants(%s)", fileName));
BufferedInputStream in = new BufferedInputStream(new FileInputStream(fileName)); BufferedInputStream in = new BufferedInputStream(new FileInputStream(fileName));
XStream xStream = new XStream(new DomDriver()); XStream xStream = new XStream(new DomDriver());
xStream.addPermission(AnyTypePermission.ANY);
VariantPackage pkg; VariantPackage pkg;
@@ -3064,6 +3071,7 @@ public class Presenter implements IPlugInPort {
LOG.debug(String.format("importBlocks(%s)", fileName)); LOG.debug(String.format("importBlocks(%s)", fileName));
BufferedInputStream in = new BufferedInputStream(new FileInputStream(fileName)); BufferedInputStream in = new BufferedInputStream(new FileInputStream(fileName));
XStream xStream = new XStream(new DomDriver()); XStream xStream = new XStream(new DomDriver());
xStream.addPermission(AnyTypePermission.ANY);
BuildingBlockPackage pkg; BuildingBlockPackage pkg;
@@ -3605,5 +3605,37 @@
</changes> </changes>
<url>https://github.com/bancika/diy-layout-creator/releases</url> <url>https://github.com/bancika/diy-layout-creator/releases</url>
</org.diylc.appframework.update.Version> </org.diylc.appframework.update.Version>
<org.diylc.appframework.update.Version>
<versionNumber>
<major>4</major>
<minor>21</minor>
<build>0</build>
</versionNumber>
<releaseDate>2022-02-16 00:00:00.000 CET</releaseDate>
<name></name>
<changes>
<org.diylc.appframework.update.Change>
<changeType>BUG_FIX</changeType>
<description>Fixed compatibility issues with Java version 16 and above</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Added 'Gray' theme</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>IMPROVEMENT</changeType>
<description>Add shabang to run.sh for *nix systems</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>IMPROVEMENT</changeType>
<description>Prevent the donation label from wrapping into several lines</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>IMPROVEMENT</changeType>
<description>Use Backspace key to delete selection in Mac OS</description>
</org.diylc.appframework.update.Change>
</changes>
<url>https://github.com/bancika/diy-layout-creator/releases</url>
</org.diylc.appframework.update.Version>
</a> </a>
</java.util.Arrays_-ArrayList> </java.util.Arrays_-ArrayList>
@@ -58,6 +58,7 @@ import org.xml.sax.SAXException;
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver; import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.mapper.MapperWrapper; import com.thoughtworks.xstream.mapper.MapperWrapper;
import com.thoughtworks.xstream.security.AnyTypePermission;
public class ProjectFileManager { public class ProjectFileManager {
@@ -97,7 +98,8 @@ public class ProjectFileManager {
} }
}; };
configure(xStream); configure(xStream);
this.xStreamOld = new XStream(new DomDriver()); this.xStreamOld = new XStream(new DomDriver());
this.xStreamOld.addPermission(AnyTypePermission.ANY);
xStreamOld.autodetectAnnotations(true); xStreamOld.autodetectAnnotations(true);
this.messageDispatcher = messageDispatcher; this.messageDispatcher = messageDispatcher;
} }
@@ -126,6 +128,7 @@ public class ProjectFileManager {
xStream.addImmutableType(org.diylc.core.measures.Power.class); xStream.addImmutableType(org.diylc.core.measures.Power.class);
xStream.addImmutableType(org.diylc.core.measures.Inductance.class); xStream.addImmutableType(org.diylc.core.measures.Inductance.class);
xStream.addImmutableType(org.diylc.core.measures.Size.class); xStream.addImmutableType(org.diylc.core.measures.Size.class);
xStream.addPermission(AnyTypePermission.ANY);
} }
public void startNewFile() { public void startNewFile() {
@@ -12,6 +12,7 @@ import org.diylc.presenter.Presenter;
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver; import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.security.AnyTypePermission;
public class VersionReader { public class VersionReader {
public static void main(String[] args) { public static void main(String[] args) {
@@ -20,6 +21,7 @@ public class VersionReader {
if (resource != null) { if (resource != null) {
BufferedInputStream in = new BufferedInputStream(resource.openStream()); BufferedInputStream in = new BufferedInputStream(resource.openStream());
XStream xStream = new XStream(new DomDriver()); XStream xStream = new XStream(new DomDriver());
xStream.addPermission(AnyTypePermission.ANY);
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<Version> allVersions = (List<Version>) xStream.fromXML(in); List<Version> allVersions = (List<Version>) xStream.fromXML(in);
Version latest = allVersions.get(allVersions.size() - 1); Version latest = allVersions.get(allVersions.size() - 1);
+1 -1
View File
@@ -7,8 +7,8 @@
<classpathentry kind="lib" path="lib/jep-2.4.1.jar"/> <classpathentry kind="lib" path="lib/jep-2.4.1.jar"/>
<classpathentry kind="lib" path="lib/poi-3.5-FINAL-20090928.jar"/> <classpathentry kind="lib" path="lib/poi-3.5-FINAL-20090928.jar"/>
<classpathentry kind="lib" path="lib/svgSalamander-1.1.2.4.jar"/> <classpathentry kind="lib" path="lib/svgSalamander-1.1.2.4.jar"/>
<classpathentry kind="lib" path="lib/xstream-1.4.19.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/diylc-core"/> <classpathentry combineaccessrules="false" kind="src" path="/diylc-core"/>
<classpathentry kind="lib" path="lib/xstream-1.4.3.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/> <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -38,7 +38,7 @@ import org.diylc.core.measures.SizeUnit;
@ComponentDescriptor(name = "Copper Trace", author = "Branislav Stojkovic", category = "Connectivity", @ComponentDescriptor(name = "Copper Trace", author = "Branislav Stojkovic", category = "Connectivity",
creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "Trace", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "Trace",
description = "Straight copper trace", zOrder = IDIYComponent.TRACE, bomPolicy = BomPolicy.NEVER_SHOW, description = "Straight copper trace", zOrder = IDIYComponent.WIRING, bomPolicy = BomPolicy.NEVER_SHOW,
autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB", autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB",
transformer = SimpleComponentTransformer.class) transformer = SimpleComponentTransformer.class)
public class CopperTrace extends AbstractLeadedComponent<Void> { public class CopperTrace extends AbstractLeadedComponent<Void> {
@@ -38,7 +38,7 @@ import org.diylc.core.measures.SizeUnit;
@ComponentDescriptor(name = "Curved Trace", author = "Branislav Stojkovic", category = "Connectivity", @ComponentDescriptor(name = "Curved Trace", author = "Branislav Stojkovic", category = "Connectivity",
instanceNamePrefix = "Trace", description = "Curved copper trace with two control points", instanceNamePrefix = "Trace", description = "Curved copper trace with two control points",
zOrder = IDIYComponent.TRACE, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, zOrder = IDIYComponent.WIRING, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false,
keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB", transformer = SimpleComponentTransformer.class, keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB", transformer = SimpleComponentTransformer.class,
enableCache = true) enableCache = true)
public class CurvedTrace extends AbstractCurvedComponent<Void> { public class CurvedTrace extends AbstractCurvedComponent<Void> {
@@ -46,7 +46,7 @@ import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Eyelet", category = "Connectivity", author = "Branislav Stojkovic", @ComponentDescriptor(name = "Eyelet", category = "Connectivity", author = "Branislav Stojkovic",
description = "Eyelet or turret terminal", instanceNamePrefix = "Eyelet", description = "Eyelet or turret terminal", instanceNamePrefix = "Eyelet",
zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.SHOW_ONLY_TYPE_NAME, autoEdit = false, zOrder = IDIYComponent.WIRING + 0.1, bomPolicy = BomPolicy.SHOW_ONLY_TYPE_NAME, autoEdit = false,
keywordPolicy = KeywordPolicy.SHOW_TYPE_NAME, transformer = SimpleComponentTransformer.class, keywordPolicy = KeywordPolicy.SHOW_TYPE_NAME, transformer = SimpleComponentTransformer.class,
enableCache = true) enableCache = true)
public class Eyelet extends AbstractComponent<String> { public class Eyelet extends AbstractComponent<String> {
@@ -42,7 +42,7 @@ import org.diylc.core.measures.Size;
import org.diylc.core.measures.SizeUnit; import org.diylc.core.measures.SizeUnit;
@ComponentDescriptor(name = "Ground Fill", author = "Branislav Stojkovic", category = "Connectivity", @ComponentDescriptor(name = "Ground Fill", author = "Branislav Stojkovic", category = "Connectivity",
instanceNamePrefix = "GF", description = "Polygonal ground fill area", zOrder = IDIYComponent.TRACE, instanceNamePrefix = "GF", description = "Polygonal ground fill area", zOrder = IDIYComponent.WIRING,
bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, transformer = SimpleComponentTransformer.class) bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, transformer = SimpleComponentTransformer.class)
public class GroundFill extends AbstractComponent<Void> { public class GroundFill extends AbstractComponent<Void> {
@@ -39,7 +39,7 @@ import org.diylc.core.annotations.EditableProperty;
import org.diylc.utils.Constants; import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Hookup Wire", author = "Branislav Stojkovic", category = "Connectivity", @ComponentDescriptor(name = "Hookup Wire", author = "Branislav Stojkovic", category = "Connectivity",
instanceNamePrefix = "W", description = "Flexible wire with two control points", zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "W", description = "Flexible wire with two control points", zOrder = IDIYComponent.WIRING,
flexibleZOrder = true, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, flexibleZOrder = true, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false,
transformer = SimpleComponentTransformer.class, enableCache = true) transformer = SimpleComponentTransformer.class, enableCache = true)
public class HookupWire extends AbstractCurvedComponent<Void> implements IContinuity { public class HookupWire extends AbstractCurvedComponent<Void> implements IContinuity {
@@ -41,7 +41,7 @@ import org.diylc.core.measures.Size;
@ComponentDescriptor(name = "Jumper", author = "Branislav Stojkovic", category = "Connectivity", @ComponentDescriptor(name = "Jumper", author = "Branislav Stojkovic", category = "Connectivity",
creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "J", description = "", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "J", description = "",
zOrder = IDIYComponent.COMPONENT, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, zOrder = IDIYComponent.WIRING, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false,
transformer = SimpleComponentTransformer.class) transformer = SimpleComponentTransformer.class)
public class Jumper extends AbstractLeadedComponent<Void> implements IContinuity { public class Jumper extends AbstractLeadedComponent<Void> implements IContinuity {
@@ -43,7 +43,7 @@ import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Solder Pad", category = "Connectivity", author = "Branislav Stojkovic", @ComponentDescriptor(name = "Solder Pad", category = "Connectivity", author = "Branislav Stojkovic",
description = "Copper solder pad, round or square", instanceNamePrefix = "Pad", description = "Copper solder pad, round or square", instanceNamePrefix = "Pad",
zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, zOrder = IDIYComponent.WIRING + 0.1, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false,
keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB", transformer = SimpleComponentTransformer.class, enableCache = true) keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB", transformer = SimpleComponentTransformer.class, enableCache = true)
public class SolderPad extends AbstractComponent<Void> { public class SolderPad extends AbstractComponent<Void> {
@@ -44,7 +44,7 @@ import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Turret Lug", category = "Connectivity", author = "Branislav Stojkovic", @ComponentDescriptor(name = "Turret Lug", category = "Connectivity", author = "Branislav Stojkovic",
description = "Turret terminal lug", instanceNamePrefix = "Turret", description = "Turret terminal lug", instanceNamePrefix = "Turret",
zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.SHOW_ONLY_TYPE_NAME, autoEdit = false, zOrder = IDIYComponent.WIRING + 0.1, bomPolicy = BomPolicy.SHOW_ONLY_TYPE_NAME, autoEdit = false,
keywordPolicy = KeywordPolicy.SHOW_TYPE_NAME, transformer = SimpleComponentTransformer.class, keywordPolicy = KeywordPolicy.SHOW_TYPE_NAME, transformer = SimpleComponentTransformer.class,
enableCache = true) enableCache = true)
public class Turret extends AbstractComponent<String> { public class Turret extends AbstractComponent<String> {
@@ -46,7 +46,7 @@ import org.diylc.core.annotations.EditableProperty;
import org.diylc.utils.Constants; import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Twisted Leads", author = "Branislav Stojkovic", category = "Connectivity", @ComponentDescriptor(name = "Twisted Leads", author = "Branislav Stojkovic", category = "Connectivity",
instanceNamePrefix = "W", description = "A pair of flexible leads twisted tighly together", zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "W", description = "A pair of flexible leads twisted tighly together", zOrder = IDIYComponent.WIRING,
flexibleZOrder = true, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, flexibleZOrder = true, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false,
transformer = SimpleComponentTransformer.class, enableCache = true) transformer = SimpleComponentTransformer.class, enableCache = true)
public class TwistedWire extends AbstractCurvedComponent<Void> implements IContinuity { public class TwistedWire extends AbstractCurvedComponent<Void> implements IContinuity {
@@ -45,7 +45,7 @@ import org.diylc.core.annotations.ComponentDescriptor;
import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.EditableProperty;
@ComponentDescriptor(name = "PCB Text", author = "Branislav Stojkovic", category = "Misc", @ComponentDescriptor(name = "PCB Text", author = "Branislav Stojkovic", category = "Misc",
description = "Mirrored text for PCB artwork", instanceNamePrefix = "L", zOrder = IDIYComponent.TRACE, description = "Mirrored text for PCB artwork", instanceNamePrefix = "L", zOrder = IDIYComponent.WIRING,
flexibleZOrder = false, bomPolicy = BomPolicy.NEVER_SHOW, transformer = TextTransformer.class) flexibleZOrder = false, bomPolicy = BomPolicy.NEVER_SHOW, transformer = TextTransformer.class)
public class PCBText extends AbstractComponent<Void> { public class PCBText extends AbstractComponent<Void> {
+2 -2
View File
@@ -17,10 +17,10 @@
<classpathentry kind="lib" path="lib/gestures-wrapper-0.2.jar"/> <classpathentry kind="lib" path="lib/gestures-wrapper-0.2.jar"/>
<classpathentry kind="lib" path="lib/jar-loader.jar"/> <classpathentry kind="lib" path="lib/jar-loader.jar"/>
<classpathentry kind="lib" path="lib/svgSalamander-1.1.2.4.jar"/> <classpathentry kind="lib" path="lib/svgSalamander-1.1.2.4.jar"/>
<classpathentry kind="lib" path="library/main.jar"/> <classpathentry kind="lib" path="lib/xstream-1.4.19.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/diylc-core"/> <classpathentry combineaccessrules="false" kind="src" path="/diylc-core"/>
<classpathentry kind="lib" path="lib/xstream-1.4.3.jar"/>
<classpathentry kind="lib" path="lib/java-http-proxy.jar"/> <classpathentry kind="lib" path="lib/java-http-proxy.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="library/main.jar"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>
+3 -1
View File
@@ -9,8 +9,10 @@
</listAttribute> </listAttribute>
<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/> <stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;sourceLookupDirector&gt;&#13;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;Library&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;DIYLC&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;diylc-core&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;diylc-library&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;default/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.default&quot;/&gt;&#13;&#10;&lt;/sourceContainers&gt;&#13;&#10;&lt;/sourceLookupDirector&gt;&#13;&#10;"/> <stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;sourceLookupDirector&gt;&#13;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;Library&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;DIYLC&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;diylc-core&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;diylc-library&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;default/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.default&quot;/&gt;&#13;&#10;&lt;/sourceContainers&gt;&#13;&#10;&lt;/sourceLookupDirector&gt;&#13;&#10;"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk-16.0.1"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.diylc.DIYLCStarter"/> <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.diylc.DIYLCStarter"/>
<stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="diylc-swing"/> <stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="diylc-swing"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="diylc-swing"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="diylc-swing"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms512m -Xmx2048m -javaagent:lib/jar-loader.jar -Dorg.diylc.storeDict=true -Dorg.diylc.enableTests=true -Dorg.diylc.scriptRun=true -Ddorg.diylc.debugContinuityAreas=true -Ddorg.diylc.debugComponentAreas=true -Ddorg.diylc.WriteStaticVariants=true -Dorg.diylc.WriteStaticBlocks=true"/> <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms512m -Xmx2048m -javaagent:lib/jar-loader.jar -Dorg.diylc.storeDict=true -Dorg.diylc.enableTests=true -Dorg.diylc.scriptRun=true -Ddorg.diylc.debugContinuityAreas=true -Ddorg.diylc.debugComponentAreas=true -Ddorg.diylc.WriteStaticVariants=true -Dorg.diylc.WriteStaticBlocks=true &#13;&#10;--add-opens java.base/java.util=ALL-UNNAMED&#13;&#10;--add-opens java.base/java.lang=ALL-UNNAMED&#13;&#10;--add-opens java.base/java.text=ALL-UNNAMED&#13;&#10;--add-opens java.desktop/java.awt=ALL-UNNAMED"/>
</launchConfiguration> </launchConfiguration>
+6 -1
View File
@@ -10,7 +10,7 @@
<property name="jar.dir" value="${build.dir}/jar" /> <property name="jar.dir" value="${build.dir}/jar" />
<property name="report.dir" value="${build.dir}/junitreport" /> <property name="report.dir" value="${build.dir}/junitreport" />
<property name="main.class" value="org.diylc.DIYLCStarter" /> <property name="main.class" value="org.diylc.DIYLCStarter" />
<property name="diylc.version" value="4.20.0" /> <property name="diylc.version" value="4.21.0" />
<property name="osx.jre8.path" value="jre\osx\jdk8u275-b01-jre\Contents\Home\" /> <property name="osx.jre8.path" value="jre\osx\jdk8u275-b01-jre\Contents\Home\" />
@@ -116,6 +116,11 @@
<option value="-Dcom.apple.smallTabs=true"/> <option value="-Dcom.apple.smallTabs=true"/>
<option value="-Xdock:name=DIY Layout Creator"/> <option value="-Xdock:name=DIY Layout Creator"/>
<option value="-Xdock:icon=Contents/Resources/diylc.icns"/> <option value="-Xdock:icon=Contents/Resources/diylc.icns"/>
<option value="--add-opens java.base/java.util=ALL-UNNAMED"/>
<option value="--add-opens java.base/java.lang=ALL-UNNAMED"/>
<option value="--add-opens java.base/java.text=ALL-UNNAMED"/>
<option value="--add-opens java.desktop/java.awt=ALL-UNNAMED"/>
</bundleapp> </bundleapp>
<zip destfile="${build.dir}/diylc-${diylc.version}-osx.zip"> <zip destfile="${build.dir}/diylc-${diylc.version}-osx.zip">
<zipfileset filemode="755" dir="${build.dir}/DIYLC.app" prefix="DIYLC.app" /> <zipfileset filemode="755" dir="${build.dir}/DIYLC.app" prefix="DIYLC.app" />
-147
View File
@@ -1,147 +0,0 @@
<project name="diylc-swing" basedir="." default="universal" xmlns:fx="javafx:com.sun.javafx.tools.ant">
<property name="src.dir" value="src" />
<property name="lib.dir" value="${basedir}/lib" />
<property name="build.dir" value="${basedir}/build" />
<property name="jar.dir" value="${build.dir}/jar" />
<property name="report.dir" value="${build.dir}/junitreport" />
<property name="main.class" value="org.diylc.DIYLCStarter" />
<property name="diylc.version" value="4.1.0" />
<property name="classes.dir" value="${build.dir}/temp/${ant.project.name}/classes" />
<property name="test.classes.dir" value="${build.dir}/temp/${ant.project.name}/test.classes" />
<target name="clean">
<delete dir="${build.dir}" />
</target>
<!--change src dir-->
<target name="compile">
<ant antfile="../diylc-library/build.xml" target="jar" inheritAll="false" />
<mkdir dir="${classes.dir}" />
<echo>Compile with JDK ${java.runtime.version}</echo>
<javac compiler="modern" encoding="8859_1" srcdir="${src.dir}" destdir="${classes.dir}" classpathref="class.path" includeantruntime="false">
<compilerarg value="-proc:none" />
</javac>
</target>
<target name="resource.copy">
<copy todir="${classes.dir}">
<fileset dir="${src.dir}">
<exclude name="**/*.java" />
</fileset>
</copy>
</target>
<target name="lib.copy">
<copy todir="${jar.dir}/lib" overwrite="true">
<fileset dir="${basedir}/lib">
<exclude name="**/*dll" />
</fileset>
</copy>
<copy todir="${jar.dir}/library" overwrite="true">
<fileset dir="${basedir}/library">
<exclude name="**/*dll" />
</fileset>
</copy>
<copy todir="${jar.dir}" overwrite="true">
<fileset dir="${basedir}/lib/" includes="**/*.dll" />
</copy>
</target>
<path id="class.path">
<fileset dir="${basedir}">
<include name="lib/**/*.jar" />
<include name="library/**/*.jar" />
</fileset>
</path>
<manifestclasspath jarfile="${ant.project.name}.jar" property="manifest.class.path">
<classpath refid="class.path" />
</manifestclasspath>
<target name="jar" depends="clean, lib.copy, resource.copy, compile">
<jar destfile="${jar.dir}/diylc.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Built-By" value="${user.name}" />
<attribute name="Main-Class" value="${main.class}" />
<attribute name="Class-Path" value="${manifest.class.path}" />
<attribute name="SplashScreen-Image" value="splash.png" />
</manifest>
<zipfileset dir="." includes="config.properties" />
</jar>
</target>
<target name="universal" depends="clean, lib.copy, resource.copy, compile">
<zip destfile="${build.dir}/diylc-${diylc.version}.zip">
<zipfileset dir="${jar.dir}" includes="diylc.jar" />
<zipfileset dir="${jar.dir}/lib" prefix="lib" />
<zipfileset dir="${jar.dir}/library/" prefix="library" />
<zipfileset dir="templates" prefix="templates" />
<zipfileset dir="themes" prefix="themes" />
<zipfileset dir="fonts" prefix="fonts" />
<zipfileset dir="." includes="splash.png" />
<zipfileset dir="." includes="run.sh" />
<zipfileset dir="." includes="diylc.l4j.ini" />
<zipfileset dir="." includes="diylc.exe" />
<zipfileset dir="icons" includes="*.png" prefix="icons" />
</zip>
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath=".:${JAVA_HOME}/lib/ant-javafx.jar"/>
<fx:application id="diylc" name="DIY Layout Creator" mainClass="${main.class}"/>
<fx:resources id="diylcRes">
<fx:fileset dir="${jar.dir}" includes="diylc.jar"/>
<fx:fileset dir="${jar.dir}/lib" includes="*.jar"/>
<fx:fileset dir="${jar.dir}/library" includes="*.jar"/>
<fx:fileset dir="templates" includes="*.xml" />
<fx:fileset dir="themes" includes="*.xml" />
<fx:fileset dir="fonts" includes="*.xml" />
<fx:fileset dir="." includes="splash.png" />
<fx:fileset dir="icons" includes="*.png" />
</fx:resources>
<fx:jar destfile="${jar.dir}/diylc.jar">
<!-- Details about application -->
<fx:application refid="diylc"/>
<!-- <fx:resources refid="diylcRes"/> -->
<fileset dir="${classes.dir}"/>
<!-- Customize jar manifest (optional) -->
<manifest>
<attribute name="Implementation-Vendor" value="bancika"/>
<attribute name="Implementation-Version" value="4.1.0"/>
</manifest>
</fx:jar>
<fx:deploy width="640" height="480"
outdir="${build.dir}" embedJNLP="false"
outfile="diylc" nativeBundles="all">
<fx:application refId="diylc"/>
<fx:resources refid="diylcRes"/>
<fx:info title="DIY Layout Creator"
vendor="bancika"/>
</fx:deploy>
</target>
<target name="full" depends="universal" />
<target name="javadoc">
<javadoc access="public" author="true" classpathref="class.path" destdir="doc" nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" notree="false" source="1.6" splitindex="true" use="true" version="true">
<fileset dir="${src.dir}">
<exclude name="**\.svn\**" />
<include name="**/*.java" />
</fileset>
</javadoc>
</target>
</project>
+2
View File
@@ -50,6 +50,7 @@ G-D-S JFET
G-D-S MOSFET G-D-S MOSFET
G-S-D JFET G-S-D JFET
G-S-D MOSFET G-S-D MOSFET
Gray
Import Netlist Import Netlist
Italiano Italiano
Lin Lin
@@ -82,6 +83,7 @@ SPST
Srpski Srpski
Tick Width Tick Width
Ticks Ticks
Wiring
Xnor Xnor
Xor Xor
cm cm
+1 -1
View File
@@ -16,7 +16,7 @@
<libelement value="jar://$MODULE_DIR$/lib/orsonpdf-1.8.jar!/" /> <libelement value="jar://$MODULE_DIR$/lib/orsonpdf-1.8.jar!/" />
<libelement value="jar://$MODULE_DIR$/lib/gestures-wrapper-0.2.jar!/" /> <libelement value="jar://$MODULE_DIR$/lib/gestures-wrapper-0.2.jar!/" />
<libelement value="jar://$MODULE_DIR$/lib/jar-loader.jar!/" /> <libelement value="jar://$MODULE_DIR$/lib/jar-loader.jar!/" />
<libelement value="jar://$MODULE_DIR$/lib/xstream-1.4.3.jar!/" /> <libelement value="jar://$MODULE_DIR$/lib/xstream-1.4.19.jar!/" />
<libelement value="jar://$MODULE_DIR$/lib/java-http-proxy.jar!/" /> <libelement value="jar://$MODULE_DIR$/lib/java-http-proxy.jar!/" />
<src_description expected_position="0"> <src_description expected_position="0">
<src_folder value="file://$MODULE_DIR$/src" expected_position="0" /> <src_folder value="file://$MODULE_DIR$/src" expected_position="0" />
+1 -1
View File
@@ -1 +1 @@
-Xms512m -Xmx1024m -Dorg.diylc.scriptRun=true -Dfile.encoding=UTF-8 -Xms512m -Xmx1024m -Dorg.diylc.scriptRun=true -Dfile.encoding=UTF-8 --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED
+1 -1
View File
@@ -46,4 +46,4 @@ echo SNAP_USER_DATA
echo $SNAP_USER_DATA echo $SNAP_USER_DATA
echo ============================================= echo =============================================
java -Xms512m -Xmx2048m -Dorg.diylc.scriptRun=true -Duser.dir=$SNAP_USER_DATA -Dfile.encoding=UTF-8 -cp $SNAP/diylc.jar:lib org.diylc.DIYLCStarter java -Xms512m -Xmx2048m -Dorg.diylc.scriptRun=true -Duser.dir=$SNAP_USER_DATA -Dfile.encoding=UTF-8 -cp $SNAP/diylc.jar:lib --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED org.diylc.DIYLCStarter
@@ -37,6 +37,18 @@
<update_contact>nbenitezl_AT_gmail.com</update_contact> <update_contact>nbenitezl_AT_gmail.com</update_contact>
<content_rating type="oars-1.1"/> <content_rating type="oars-1.1"/>
<releases> <releases>
<release version="4.21.0" date="2022-02-16">
<description>
<ul>
<li>[Bug Fix] Fixed compatibility issues with Java version 16 and above</li>
<li>[New Feature] Added 'Gray' theme</li>
<li>[Improvement] Add shabang to run.sh for *nix systems</li>
<li>[Improvement] Prevent the donation label from wrapping into several lines</li>
<li>[Improvement] Use Backspace key to delete selection in Mac OS</li>
</ul>
</description>
<url>https://github.com/bancika/diy-layout-creator/releases/tag/v4.21.0</url>
</release>
<release version="4.20.0" date="2021-09-12"> <release version="4.20.0" date="2021-09-12">
<description> <description>
<ul> <ul>
+4
View File
@@ -31,5 +31,9 @@
<opt>-Dorg.diylc.scriptRun=true</opt> <opt>-Dorg.diylc.scriptRun=true</opt>
<opt>-Dfile.encoding=UTF-8</opt> <opt>-Dfile.encoding=UTF-8</opt>
<opt>-javaagent:lib/jar-loader.jar</opt> <opt>-javaagent:lib/jar-loader.jar</opt>
<opt>--add-opens java.base/java.util=ALL-UNNAMED</opt>
<opt>--add-opens java.base/java.lang=ALL-UNNAMED</opt>
<opt>--add-opens java.base/java.text=ALL-UNNAMED</opt>
<opt>--add-opens java.desktop/java.awt=ALL-UNNAMED</opt>
</jre> </jre>
</launch4jConfig> </launch4jConfig>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2 -1
View File
@@ -1 +1,2 @@
java -Xms512m -Xmx2048m -javaagent:lib/jar-loader.jar -Dorg.diylc.scriptRun=true -Dfile.encoding=UTF-8 -cp diylc.jar:lib org.diylc.DIYLCStarter #!/bin/bash
exec java -Xms512m -Xmx2048m -javaagent:lib/jar-loader.jar -Dorg.diylc.scriptRun=true -Dfile.encoding=UTF-8 -cp diylc.jar:lib --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED org.diylc.DIYLCStarter "$@"
+165 -181
View File
@@ -18,13 +18,8 @@
package org.diylc; package org.diylc;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.net.URL; import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
@@ -63,201 +58,190 @@ import ca.cgjennings.jvm.JarLoader;
*/ */
public class DIYLCStarter { public class DIYLCStarter {
private static final Logger LOG = Logger.getLogger(DIYLCStarter.class); private static final Logger LOG = Logger.getLogger(DIYLCStarter.class);
private static final String SCRIPT_RUN = "org.diylc.scriptRun"; private static final String SCRIPT_RUN = "org.diylc.scriptRun";
/** /**
* @param args * @param args
* @throws InvalidActivityException * @throws InvalidActivityException
*/ */
public static void main(String[] args) { public static void main(String[] args) {
try { try {
runDIYLC(args); runDIYLC(args);
} catch (Throwable t) { } catch (Throwable t) {
LOG.error("Major error while starting DIYLC", t); LOG.error("Major error while starting DIYLC", t);
System.out.println("Major error while starting DIYLC"); System.out.println("Major error while starting DIYLC");
t.printStackTrace(System.out); t.printStackTrace(System.out);
} }
} }
public static void runDIYLC(String[] args) {
// Initialize splash screen
DIYLCSplash splash = null;
Exception splashException = null;
try { public static void runDIYLC(String[] args) {
splash = new DIYLCSplash(); // Initialize splash screen
} catch (Exception e) { DIYLCSplash splash = null;
System.out.println("Splash screen could not be initialized: " + e.getMessage()); Exception splashException = null;
splashException = e;
}
URL url = DIYLCStarter.class.getResource("log4j.properties"); try {
Properties properties = new Properties(); splash = new DIYLCSplash();
try { } catch (Exception e) {
properties.load(url.openStream()); System.out.println("Splash screen could not be initialized: " + e.getMessage());
PropertyConfigurator.configure(properties); splashException = e;
} catch (Exception e) { }
LOG.error("Could not initialize log4j configuration", e);
}
initializeConfiguration();
// disable HIGHLIGHT_CONTINUITY_AREA config, keep it transient URL url = DIYLCStarter.class.getResource("log4j.properties");
ConfigurationManager.getInstance().writeValue(IPlugInPort.HIGHLIGHT_CONTINUITY_AREA, false); Properties properties = new Properties();
try {
LOG.info("JarLoader strategy: " + JarLoader.getStrategy()); properties.load(url.openStream());
PropertyConfigurator.configure(properties);
} catch (Exception e) {
LOG.error("Could not initialize log4j configuration", e);
}
LOG.info("Loading languages..."); initializeConfiguration();
LangUtil.configure(); // disable HIGHLIGHT_CONTINUITY_AREA config, keep it transient
ConfigurationManager.getInstance().writeValue(IPlugInPort.HIGHLIGHT_CONTINUITY_AREA, false);
LOG.debug("Java version: " + System.getProperty("java.runtime.version") + " by " LOG.info("JarLoader strategy: " + JarLoader.getStrategy());
+ System.getProperty("java.vm.vendor"));
LOG.debug("Java home: " + System.getProperty("java.home"));
LOG.debug("OS: " + System.getProperty("os.name") + " " + System.getProperty("os.version"));
LOG.info("Starting DIYLC with working directory " + System.getProperty("user.dir")); LOG.info("Loading languages...");
LOG.info("Configuration dump start.");
// log configuration
Field[] fields = IPlugInPort.class.getFields();
for (Field f : fields) {
if (f.getType() != String.class || !f.getName().toUpperCase().equals(f.getName()))
continue;
try {
String key = (String) f.get(null);
Object configValue = ConfigurationManager.getInstance().readObject(key, null);
if (configValue != null && (configValue.getClass() == Boolean.class || configValue.getClass() == String.class)) {
LOG.info(key + " = " + configValue);
}
} catch (Exception e) {
LOG.info("Error logging for field: " + f.getName());
}
}
LOG.info("Configuration dump end.");
try { LangUtil.configure();
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
LOG.error("Could not set Look&Feel", e);
}
Thread fontThread = new Thread(new Runnable() { LOG.debug("Java version: " + System.getProperty("java.runtime.version") + " by "
+ System.getProperty("java.vm.vendor"));
LOG.debug("Java home: " + System.getProperty("java.home"));
LOG.debug("OS: " + System.getProperty("os.name") + " " + System.getProperty("os.version"));
@Override LOG.info("Starting DIYLC with working directory " + System.getProperty("user.dir"));
public void run() {
try {
FontOptimizer.run(ConfigurationManager.getInstance());
} catch (Exception e) {
LOG.error("Could not ", e);
}
}
});
fontThread.setPriority(Thread.MIN_PRIORITY);
fontThread.start();
String val = System.getProperty(SCRIPT_RUN); LOG.info("Configuration dump start.");
if (!"true".equals(val)) { // log configuration
LOG.info("Detected no scriptRun setting!"); Field[] fields = IPlugInPort.class.getFields();
int response = JOptionPane.showConfirmDialog(splash, for (Field f : fields) {
"It is not recommended to run DIYLC by clicking on the diylc.jar file.\n" if (f.getType() != String.class || !f.getName().toUpperCase().equals(f.getName()))
+ "Please use diylc.exe on Windows or run.sh on OSX/Linux to ensure the best\n" continue;
+ "performance and reliability. Do you want to continue?", try {
"DIYLC", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); String key = (String) f.get(null);
if (response != JOptionPane.YES_OPTION) { Object configValue = ConfigurationManager.getInstance().readObject(key, null);
System.exit(0); if (configValue != null
} && (configValue.getClass() == Boolean.class || configValue.getClass() == String.class)) {
} LOG.info(key + " = " + configValue);
}
LOG.info("Creating the main frame..."); } catch (Exception e) {
LOG.info("Error logging for field: " + f.getName());
}
}
LOG.info("Configuration dump end.");
MainFrame mainFrame = new MainFrame(); try {
Presenter presenter = mainFrame.getPresenter(); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
LOG.info("Main frame created."); LOG.error("Could not set Look&Feel", e);
// mainFrame.setLocationRelativeTo(null); }
if (splash == null) { Thread fontThread = new Thread(new Runnable() {
LOG.warn("Splash screen could not be initialized", splashException);
} else {
LOG.info("Hiding splash screen...");
splash.setVisible(false);
splash.dispose();
LOG.info("Done hiding splash screen.");
}
mainFrame.setVisible(true); @Override
public void run() {
try {
FontOptimizer.run(ConfigurationManager.getInstance());
} catch (Exception e) {
LOG.error("Could not ", e);
}
}
});
fontThread.setPriority(Thread.MIN_PRIORITY);
fontThread.start();
// assign open file handler for Mac String val = System.getProperty(SCRIPT_RUN);
if (Utils.isMac()) { if (!"true".equals(val)) {
LOG.info("Setting up open file handler for Mac..."); LOG.info("Detected no scriptRun setting!");
SwingUtilities.invokeLater(() -> { int response = JOptionPane.showConfirmDialog(splash,
Application.getApplication().setOpenFileHandler((AppEvent.OpenFilesEvent ofe) -> { "It is not recommended to run DIYLC by clicking on the diylc.jar file.\n"
List<File> files = ofe.getFiles(); + "Please use diylc.exe on Windows or run.sh on OSX/Linux to ensure the best\n"
if (files != null && files.size() > 0) { + "performance and reliability. Do you want to continue?",
String filePath = files.get(0).getAbsolutePath(); "DIYLC", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (presenter.allowFileAction()) { if (response != JOptionPane.YES_OPTION) {
presenter.loadProjectFromFile(filePath); System.exit(0);
} }
} }
LOG.info("Finished setting up open file handler for Mac.");
});
});
}
if (args.length > 0) { LOG.info("Creating the main frame...");
presenter.loadProjectFromFile(args[0]);
} else {
boolean showTemplates =
ConfigurationManager.getInstance().readBoolean(TemplateDialog.SHOW_TEMPLATES_KEY, false);
if (showTemplates) {
TemplateDialog templateDialog = new TemplateDialog(mainFrame, mainFrame.getPresenter());
if (!templateDialog.getFiles().isEmpty()) {
templateDialog.setVisible(true);
}
}
}
properties = new Properties(); MainFrame mainFrame = new MainFrame();
try { Presenter presenter = mainFrame.getPresenter();
LOG.info("Injecting default properties.");
URL resource = Presenter.class.getResource("config.properties");
if (resource != null) {
properties.load(resource.openStream());
PropertyInjector.injectProperties(properties);
}
} catch (Exception e) {
LOG.error("Could not read config.properties file", e);
}
if (ConfigurationManager.getInstance().isFileWithErrors()) LOG.info("Main frame created.");
mainFrame.showMessage("<html>" // mainFrame.setLocationRelativeTo(null);
+ "There was an error reading the configuration file and it was replaced by a default configuration.<br>"
+ "The backup file is created and placed in user directory under '.diylc' sub-directory with '~' at the end.<br>"
+ "This can happen when running two versions of DIYLC on the same machine at the same time.<br>"
+ "Replace the main 'config.xml' file with the backup when running the latest version of DIYLC."
+ "</html>", "Warning", IView.WARNING_MESSAGE);
}
private static void initializeConfiguration() { if (splash == null) {
// migrate config file from old folder path to the new one LOG.warn("Splash screen could not be initialized", splashException);
Path oldPath = Paths.get(Utils.getUserDataDirectory(".diylc") + "config.xml"); } else {
Path newPath = Paths.get(Utils.getUserDataDirectory("diylc") + "config.xml"); LOG.info("Hiding splash screen...");
try { splash.setVisible(false);
if (oldPath.toFile().exists() && !newPath.toFile().exists()) { splash.dispose();
LOG.info("Copying config file to the new directory"); LOG.info("Done hiding splash screen.");
Files.copy(oldPath, newPath, StandardCopyOption.REPLACE_EXISTING); }
}
} catch (IOException e) { mainFrame.setVisible(true);
LOG.error("Failed to copy config file to the new directory", e);
} // assign open file handler for Mac
if (Utils.isMac()) {
// initialize LOG.info("Setting up open file handler for Mac...");
ConfigurationManager configurationManager = ConfigurationManager.getInstance(); SwingUtilities.invokeLater(() -> {
XStream xStream = configurationManager.getSerializer(); Application.getApplication().setOpenFileHandler((AppEvent.OpenFilesEvent ofe) -> {
ProjectFileManager.configure(xStream); List<File> files = ofe.getFiles();
configurationManager.initialize("diylc"); if (files != null && files.size() > 0) {
} String filePath = files.get(0).getAbsolutePath();
if (presenter.allowFileAction()) {
presenter.loadProjectFromFile(filePath);
}
}
LOG.info("Finished setting up open file handler for Mac.");
});
});
}
if (args.length > 0) {
presenter.loadProjectFromFile(args[0]);
} else {
boolean showTemplates = ConfigurationManager.getInstance().readBoolean(TemplateDialog.SHOW_TEMPLATES_KEY,
false);
if (showTemplates) {
TemplateDialog templateDialog = new TemplateDialog(mainFrame, mainFrame.getPresenter());
if (!templateDialog.getFiles().isEmpty()) {
templateDialog.setVisible(true);
}
}
}
properties = new Properties();
try {
LOG.info("Injecting default properties.");
URL resource = Presenter.class.getResource("config.properties");
if (resource != null) {
properties.load(resource.openStream());
PropertyInjector.injectProperties(properties);
}
} catch (Exception e) {
LOG.error("Could not read config.properties file", e);
}
if (ConfigurationManager.getInstance().isFileWithErrors())
mainFrame.showMessage("<html>"
+ "There was an error reading the configuration file and it was replaced by a default configuration.<br>"
+ "The backup file is created and placed in user directory under '.diylc' sub-directory with '~' at the end.<br>"
+ "This can happen when running two versions of DIYLC on the same machine at the same time.<br>"
+ "Replace the main 'config.xml' file with the backup when running the latest version of DIYLC."
+ "</html>", "Warning", IView.WARNING_MESSAGE);
}
private static void initializeConfiguration() {
// initialize
ConfigurationManager configurationManager = ConfigurationManager.getInstance();
XStream xStream = configurationManager.getSerializer();
ProjectFileManager.configure(xStream);
configurationManager.initialize(".diylc");
}
} }
@@ -46,6 +46,7 @@ import javax.swing.JLabel;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileFilter;
import org.diylc.appframework.miscutils.Utils;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.appframework.miscutils.ConfigurationManager;
@@ -1512,7 +1513,11 @@ public class ActionFactory {
super(); super();
this.plugInPort = plugInPort; this.plugInPort = plugInPort;
putValue(AbstractAction.NAME, "Delete Selection"); putValue(AbstractAction.NAME, "Delete Selection");
putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); if (Utils.isMac()) {
putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0));
} else {
putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
}
putValue(AbstractAction.SMALL_ICON, IconLoader.Delete.getIcon()); putValue(AbstractAction.SMALL_ICON, IconLoader.Delete.getIcon());
} }
@@ -26,9 +26,12 @@ import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent; import java.awt.event.ComponentEvent;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.font.TextAttribute;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JLabel; import javax.swing.JLabel;
@@ -67,8 +70,8 @@ public class ActionBarPlugin implements IPlugIn {
private ConfigToolbar configToolbar; private ConfigToolbar configToolbar;
private JLabel donateLabel; private JLabel donateLabel;
private static final String DONATE_HTML = "<html><u>" + LangUtil.translate("Enjoying DIYLC? Click here to buy me a coffee :)") + "</u></html>"; private static final String DONATE_HTML = LangUtil.translate("Enjoying DIYLC? Click here to buy me a coffee :)");
private static final String DONATE_HTML_SHORT = "<html><u>" + LangUtil.translate("Donate") + "</u></html>"; private static final String DONATE_HTML_SHORT = LangUtil.translate("Donate");
public ActionBarPlugin(ISwingUI swingUI) { public ActionBarPlugin(ISwingUI swingUI) {
this.swingUI = swingUI; this.swingUI = swingUI;
@@ -114,6 +117,9 @@ public class ActionBarPlugin implements IPlugIn {
public JLabel getDonateLabel() { public JLabel getDonateLabel() {
if (donateLabel == null) { if (donateLabel == null) {
donateLabel = new JLabel(DONATE_HTML); donateLabel = new JLabel(DONATE_HTML);
// Map<TextAttribute, Integer> fontAttributes = new HashMap<TextAttribute, Integer>();
// fontAttributes.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
// donateLabel.setFont(donateLabel.getFont().deriveFont(fontAttributes));
donateLabel.setForeground(Color.blue); donateLabel.setForeground(Color.blue);
donateLabel.setIcon(IconLoader.Donate.getIcon()); donateLabel.setIcon(IconLoader.Donate.getIcon());
donateLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); donateLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
@@ -125,7 +131,7 @@ public class ActionBarPlugin implements IPlugIn {
rootPane.addComponentListener(new ComponentAdapter() { rootPane.addComponentListener(new ComponentAdapter() {
@Override @Override
public void componentResized(ComponentEvent e) { public void componentResized(ComponentEvent e) {
if (rootPane.getWidth() < 920) { if (rootPane.getWidth() < 940) {
if (!DONATE_HTML_SHORT.equals(donateLabel.getText())) if (!DONATE_HTML_SHORT.equals(donateLabel.getText()))
donateLabel.setText(DONATE_HTML_SHORT); donateLabel.setText(DONATE_HTML_SHORT);
} else { } else {
@@ -43,6 +43,7 @@ import org.diylc.utils.ResourceLoader;
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver; import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.security.AnyTypePermission;
/** /**
* Controls configuration menu. * Controls configuration menu.
@@ -168,6 +169,7 @@ public class ConfigPlugin implements IPlugIn {
File[] themeFiles = ResourceLoader.getFiles("themes"); File[] themeFiles = ResourceLoader.getFiles("themes");
if (themeFiles != null && themeFiles.length > 0) { if (themeFiles != null && themeFiles.length > 0) {
XStream xStream = new XStream(new DomDriver()); XStream xStream = new XStream(new DomDriver());
xStream.addPermission(AnyTypePermission.ANY);
swingUI.injectSubmenu(THEME_MENU, IconLoader.Pens.getIcon(), CONFIG_MENU); swingUI.injectSubmenu(THEME_MENU, IconLoader.Pens.getIcon(), CONFIG_MENU);
for (File file : themeFiles) { for (File file : themeFiles) {
if (file.getName().toLowerCase().endsWith(".xml")) { if (file.getName().toLowerCase().endsWith(".xml")) {
@@ -123,7 +123,7 @@ public class LayersMenuPlugin implements IPlugIn {
} }
static enum Layer { static enum Layer {
CHASSIS("Chassis", IDIYComponent.CHASSIS), BOARD("Board", IDIYComponent.BOARD), TRACE("Trace", IDIYComponent.TRACE), COMPONENT( CHASSIS("Chassis", IDIYComponent.CHASSIS), BOARD("Board", IDIYComponent.BOARD), WIRING("Wiring", IDIYComponent.WIRING), COMPONENT(
"Component", IDIYComponent.COMPONENT), TEXT("Text", IDIYComponent.TEXT); "Component", IDIYComponent.COMPONENT), TEXT("Text", IDIYComponent.TEXT);
String title; String title;
+27
View File
@@ -0,0 +1,27 @@
<org.diylc.core.Theme>
<name>Gray</name>
<bgColor>
<red>170</red>
<green>170</green>
<blue>170</blue>
<alpha>255</alpha>
</bgColor>
<gridColor>
<red>150</red>
<green>150</green>
<blue>150</blue>
<alpha>255</alpha>
</gridColor>
<dotColor>
<red>100</red>
<green>100</green>
<blue>100</blue>
<alpha>255</alpha>
</dotColor>
<outlineColor>
<red>0</red>
<green>0</green>
<blue>0</blue>
<alpha>255</alpha>
</outlineColor>
</org.diylc.core.Theme>