Compare commits

...

19 Commits

Author SHA1 Message Date
Branislav Stojkovic 8e20f61946 spring 2025-03-14 10:33:01 +01:00
Bane Stojkovic ad9a575dc6 Update install.iss (#888)
* Update install.iss

* Update update.xml
2025-03-10 10:44:12 +01:00
Bane Stojkovic def979adf8 Update update.xml 2025-03-09 21:26:31 +01:00
Bane Stojkovic bd172ec0fd Update .gitignore 2025-03-09 21:23:40 +01:00
Bane Stojkovic b8a2e3a727 Moving selected components with a mouse doesn't register file modification action and doesn't enable Undo action 2025-03-09 21:21:09 +01:00
Bane Stojkovic 7c7799ae37 release 5.0.0 2025-03-09 12:22:42 +01:00
Bane Stojkovic 7de1e7644d release 5.0.0 2025-03-08 22:53:38 +01:00
Bane Stojkovic cbbd6ad88f Fixed the issue with opening DIY files on Mac OS - updated the logic to use java.desktop 2025-03-08 22:42:22 +01:00
Bane Stojkovic 8f8c096dfb Fixed alignment issues of round elements (e.g. solder pads and holes) in exported Gerber files 2025-03-08 22:20:14 +01:00
Bane Stojkovic 53019ac600 fixes 2025-03-07 23:26:23 +01:00
Bane Stojkovic 8c82bef903 fix appimage 2025-03-07 23:08:57 +01:00
Bane Stojkovic dd6dd7daf8 fix appimage 2025-03-07 23:06:12 +01:00
Bane Stojkovic 5f20c1cd6e 4.41.1 patch 2025-03-07 20:45:03 +01:00
Branislav Stojkovic e7e9e889e1 appimage 2025-03-07 16:47:34 +01:00
Bane Stojkovic d460d0b1db Update appimage.xml 2025-03-07 15:58:02 +01:00
Bane Stojkovic b44ea41a1e Update diylc.sh 2025-03-07 15:26:11 +01:00
Bane Stojkovic 9199bd9655 Update diylc.sh (#886)
* Update diylc.sh

* Update appimage.xml (#887)
2025-03-07 15:18:23 +01:00
Bane Stojkovic 67728e60d6 Update update.xml 2025-03-07 12:51:17 +01:00
Bane Stojkovic 9006e9bbc5 Update GerberLayer.java
remove mirroring
2025-03-07 12:49:06 +01:00
57 changed files with 7375 additions and 4695 deletions
+1
View File
@@ -2,3 +2,4 @@
*.iml
*.eml
/.project
**/.DS_Store
+20 -20
View File
@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/>
<classpathentry kind="lib" path="lib/junit-4.7.jar"/>
<classpathentry kind="lib" path="lib/app-framework.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/AppleJavaExtensions.jar"/>
<classpathentry kind="lib" path="lib/xstream-1.4.19.jar"/>
<classpathentry kind="lib" path="lib/guava-31.1-jre.jar"/>
<classpathentry kind="lib" path="lib/gerber-writer-api-1.0.0.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="bin"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/>
<classpathentry kind="lib" path="lib/junit-4.7.jar"/>
<classpathentry kind="lib" path="lib/app-framework.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/AppleJavaExtensions.jar"/>
<classpathentry kind="lib" path="lib/xstream-1.4.19.jar"/>
<classpathentry kind="lib" path="lib/guava-31.1-jre.jar"/>
<classpathentry kind="lib" path="lib/gerber-writer-api-1.0.0.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="bin"/>
</classpath>
+100
View File
@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.diylc</groupId>
<artifactId>diylc-parent</artifactId>
<version>5.1.0</version>
</parent>
<artifactId>diylc-core</artifactId>
<!-- No need to specify version - it inherits from parent -->
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<!-- Common dependencies from Maven Central -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<exclusions>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.4.0-jre</version>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.10.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- Local dependencies from lib folder -->
<dependency>
<groupId>org.diylc.local</groupId>
<artifactId>app-framework</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.diylc.local</groupId>
<artifactId>gerber-writer-api-1.0.0</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.diylc.local</groupId>
<artifactId>java-http-proxy</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.1.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>6.1.3</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,91 @@
package org.diylc.config;
import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.core.IView;
import org.diylc.presenter.*;
import org.diylc.serialization.ProjectFileManager;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.diylc.appframework.simplemq.MessageDispatcher;
import org.diylc.common.EventType;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Primary;
@Configuration
public class DIYLCConfig {
@Primary
@Bean
public IConfigurationManager configurationManager() {
return ConfigurationManager.getInstance();
}
@Primary
@Bean
public MessageDispatcher<EventType> messageDispatcher() {
return new MessageDispatcher<>(true);
}
@Primary
@Bean
public DrawingService drawingService(
MessageDispatcher<EventType> messageDispatcher,
IConfigurationManager configManager) {
return new DrawingManager(messageDispatcher, configManager);
}
@Primary
@Bean
public ProjectFileService projectFileService(MessageDispatcher<EventType> messageDispatcher) {
return new ProjectFileManager(messageDispatcher);
}
@Primary
@Bean
public InstantiationService instantiationService() {
return new InstantiationManager();
}
@Primary
@Bean
public VariantService variantService(
IConfigurationManager configManager,
ProjectFileService projectFileService) {
return new VariantManager(configManager, projectFileService.getXStream());
}
@Bean
public BuildingBlockService buildingBlockService(
IConfigurationManager configManager,
ProjectFileService projectFileService,
InstantiationService instantiationService) {
return new BuildingBlockManager(configManager, projectFileService.getXStream(), instantiationService);
}
@Primary
@Bean
public Presenter presenter(
@Lazy
IView view,
IConfigurationManager configManager,
MessageDispatcher<EventType> messageDispatcher,
DrawingService drawingService,
ProjectFileService projectFileService,
InstantiationService instantiationService,
VariantService variantService,
BuildingBlockService buildingBlockService) {
return new Presenter(
view,
configManager,
messageDispatcher,
drawingService,
projectFileService,
instantiationService,
variantService,
buildingBlockService,
true
);
}
}
@@ -0,0 +1,96 @@
package org.diylc.config;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
import org.diylc.appframework.simplemq.MessageDispatcher;
import org.diylc.common.EventType;
import org.diylc.core.IView;
import org.diylc.presenter.*;
import org.diylc.serialization.ProjectFileManager;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DummyViewDIYLCConfig {
@Bean
public IConfigurationManager dummyViewConfigManager() {
return InMemoryConfigurationManager.getInstance();
}
@Bean
public MessageDispatcher<EventType> dummyViewMessageDispatcher() {
return new MessageDispatcher<>(true);
}
@Bean
public DrawingService dummyViewDrawingService(
@Qualifier("dummyViewMessageDispatcher")
MessageDispatcher<EventType> messageDispatcher,
@Qualifier("dummyViewConfigManager")
IConfigurationManager configManager) {
return new DrawingManager(messageDispatcher, configManager);
}
@Bean
public ProjectFileService dummyViewProjectFileService(MessageDispatcher<EventType> messageDispatcher) {
return new ProjectFileManager(messageDispatcher);
}
@Bean
public InstantiationService dummyViewInstantiationService() {
return new InstantiationManager();
}
@Bean
public VariantService dummyViewVariantService(
@Qualifier("dummyViewConfigManager")
IConfigurationManager configManager,
@Qualifier("dummyViewProjectFileService")
ProjectFileService projectFileService) {
return new VariantManager(configManager, projectFileService.getXStream());
}
@Bean
public BuildingBlockService dummyViewBuildingBlockService(
@Qualifier("dummyViewConfigManager")
IConfigurationManager configManager,
@Qualifier("dummyViewProjectFileService")
ProjectFileService projectFileService,
@Qualifier("dummyViewInstantiationService")
InstantiationService instantiationService) {
return new BuildingBlockManager(configManager, projectFileService.getXStream(), instantiationService);
}
@Bean
public Presenter dummyViewPresenter(
@Qualifier("dummyView")
IView view,
@Qualifier("dummyViewConfigManager")
IConfigurationManager configManager,
@Qualifier("dummyViewMessageDispatcher")
MessageDispatcher<EventType> messageDispatcher,
@Qualifier("dummyViewDrawingService")
DrawingService drawingService,
@Qualifier("dummyViewProjectFileService")
ProjectFileService projectFileService,
@Qualifier("dummyViewInstantiationService")
InstantiationService instantiationService,
@Qualifier("dummyViewVariantService")
VariantService variantService,
@Qualifier("dummyViewBuildingBlockService")
BuildingBlockService buildingBlockService) {
return new Presenter(
view,
configManager,
messageDispatcher,
drawingService,
projectFileService,
instantiationService,
variantService,
buildingBlockService,
false
);
}
}
@@ -0,0 +1,98 @@
package org.diylc.config;
import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
import org.diylc.appframework.simplemq.MessageDispatcher;
import org.diylc.common.EventType;
import org.diylc.core.IView;
import org.diylc.presenter.*;
import org.diylc.serialization.ProjectFileManager;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
@Configuration
public class ImportFileDIYLCConfig {
@Bean
public IConfigurationManager importFileConfigManager() {
return InMemoryConfigurationManager.getInstance();
}
@Bean
public MessageDispatcher<EventType> importFileMessageDispatcher() {
return new MessageDispatcher<>(true);
}
@Bean
public DrawingService importFileDrawingService(
@Qualifier("importFileMessageDispatcher")
MessageDispatcher<EventType> messageDispatcher,
@Qualifier("importFileConfigManager")
IConfigurationManager configManager) {
return new DrawingManager(messageDispatcher, configManager);
}
@Bean
public ProjectFileService importFileProjectFileService(MessageDispatcher<EventType> messageDispatcher) {
return new ProjectFileManager(messageDispatcher);
}
@Bean
public InstantiationService importFileInstantiationService() {
return new InstantiationManager();
}
@Bean
public VariantService importFileVariantService(
@Qualifier("importFileConfigManager")
IConfigurationManager configManager,
@Qualifier("importFileProjectFileService")
ProjectFileService projectFileService) {
return new VariantManager(configManager, projectFileService.getXStream());
}
@Bean
public BuildingBlockService importFileBuildingBlockService(
@Qualifier("importFileConfigManager")
IConfigurationManager configManager,
@Qualifier("importFileProjectFileService")
ProjectFileService projectFileService,
@Qualifier("importFileInstantiationService")
InstantiationService instantiationService) {
return new BuildingBlockManager(configManager, projectFileService.getXStream(), instantiationService);
}
@Bean
public Presenter importFilePresenter(
@Qualifier("importFileView")
IView view,
@Qualifier("importFileConfigManager")
IConfigurationManager configManager,
@Qualifier("importFileMessageDispatcher")
MessageDispatcher<EventType> messageDispatcher,
@Qualifier("importFileDrawingService")
DrawingService drawingService,
@Qualifier("importFileProjectFileService")
ProjectFileService projectFileService,
@Qualifier("importFileInstantiationService")
InstantiationService instantiationService,
@Qualifier("importFileVariantService")
VariantService variantService,
@Qualifier("importFileBuildingBlockService")
BuildingBlockService buildingBlockService) {
return new Presenter(
view,
configManager,
messageDispatcher,
drawingService,
projectFileService,
instantiationService,
variantService,
buildingBlockService,
false
);
}
}
@@ -0,0 +1,96 @@
package org.diylc.config;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
import org.diylc.appframework.simplemq.MessageDispatcher;
import org.diylc.common.EventType;
import org.diylc.core.IView;
import org.diylc.presenter.*;
import org.diylc.serialization.ProjectFileManager;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class LoadlineDIYLCConfig {
@Bean
public IConfigurationManager loadlineConfigManager() {
return InMemoryConfigurationManager.getInstance();
}
@Bean
public MessageDispatcher<EventType> loadlineMessageDispatcher() {
return new MessageDispatcher<>(true);
}
@Bean
public DrawingService loadlineDrawingService(
@Qualifier("loadlineMessageDispatcher")
MessageDispatcher<EventType> messageDispatcher,
@Qualifier("loadlineConfigManager")
IConfigurationManager configManager) {
return new DrawingManager(messageDispatcher, configManager);
}
@Bean
public ProjectFileService loadlineProjectFileService(MessageDispatcher<EventType> messageDispatcher) {
return new ProjectFileManager(messageDispatcher);
}
@Bean
public InstantiationService loadlineInstantiationService() {
return new InstantiationManager();
}
@Bean
public VariantService loadlineVariantService(
@Qualifier("loadlineConfigManager")
IConfigurationManager configManager,
@Qualifier("loadlineProjectFileService")
ProjectFileService projectFileService) {
return new VariantManager(configManager, projectFileService.getXStream());
}
@Bean
public BuildingBlockService loadlineBuildingBlockService(
@Qualifier("loadlineConfigManager")
IConfigurationManager configManager,
@Qualifier("loadlineProjectFileService")
ProjectFileService projectFileService,
@Qualifier("loadlineInstantiationService")
InstantiationService instantiationService) {
return new BuildingBlockManager(configManager, projectFileService.getXStream(), instantiationService);
}
@Bean
public Presenter loadlinePresenter(
@Qualifier("loadlineView")
IView view,
@Qualifier("loadlineConfigManager")
IConfigurationManager configManager,
@Qualifier("loadlineMessageDispatcher")
MessageDispatcher<EventType> messageDispatcher,
@Qualifier("loadlineDrawingService")
DrawingService drawingService,
@Qualifier("loadlineProjectFileService")
ProjectFileService projectFileService,
@Qualifier("loadlineInstantiationService")
InstantiationService instantiationService,
@Qualifier("loadlineVariantService")
VariantService variantService,
@Qualifier("loadlineBuildingBlockService")
BuildingBlockService buildingBlockService) {
return new Presenter(
view,
configManager,
messageDispatcher,
drawingService,
projectFileService,
instantiationService,
variantService,
buildingBlockService,
false
);
}
}
@@ -0,0 +1,20 @@
package org.diylc.common;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.EnumSet;
public abstract class AbstractPlugin implements IPlugIn {
protected IPlugInPort plugInPort;
@Override
public void connect(IPlugInPort plugInPort) {
this.plugInPort = plugInPort;
}
@Override
public abstract EnumSet<EventType> getSubscribedEventTypes();
@Override
public abstract void processMessage(EventType eventType, Object... params);
}
@@ -223,11 +223,12 @@ public class GerberG2DWrapper extends Graphics2D
if (Math.abs(c.getWidth() - c.getHeight()) < 0.1 && finalTx.getShearX() == 0
&& finalTx.getShearY() == 0
&& Math.abs(Math.abs(finalTx.getScaleX()) - Math.abs(finalTx.getScaleY())) < 0.0001) {
final double d = Math.abs(c.getWidth() * finalTx.getScaleX()) * SizeUnit.px.getFactor();
Circle circle = new Circle(d, entry.getValue().function, entry.getValue().negative);
dataLayer.addPad(circle, new Point(
(c.getX() * finalTx.getScaleX() + finalTx.getTranslateX()) * SizeUnit.px.getFactor()
- d / 2,
+ (entry.getKey().isMirrored() ? -1 : 1) * d / 2,
(c.getY() * finalTx.getScaleY() + finalTx.getTranslateY()) * SizeUnit.px.getFactor()
- d / 2));
} else {
@@ -8,11 +8,11 @@ public enum GerberLayer {
Outline("Profile,NP", "gko", "Edge-Cuts", false, false),
DrillNonPlated("NonPlated,1,2,NPTH", "drl", "NPTH", false, false),
DrillPlated("Plated,1,2,PTH", "drl", "PTH", false, false),
CopperBot("Copper,L1,Bot", "gbl", "B_Cu", false, true),
CopperBot("Copper,L1,Bot", "gbl", "B_Cu", false, false),
CopperTop("Copper,L1,Top", "gtl", "T_Cu", false, false),
SilkscreenBot("Legend,Bot", "gbo", "B_Silkscreen", false, true),
SilkscreenBot("Legend,Bot", "gbo", "B_Silkscreen", false, false),
SilkscreenTop("Legend,Top", "gto", "T_Silkscreen", false, false),
SolderMaskBot("Soldermask,Bot", "gbs", "B_Mask", true, true),
SolderMaskBot("Soldermask,Bot", "gbs", "B_Mask", true, false),
SolderMaskTop("Soldermask,Top", "gts", "T_Mask", true, false);
private String function;
@@ -42,7 +42,18 @@ import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.security.AnyTypePermission;
<<<<<<< Updated upstream:diylc/diylc-core/src/org/diylc/presenter/BuildingBlockManager.java
public class BuildingBlockManager {
=======
import org.diylc.common.BuildingBlockPackage;
import org.diylc.common.IBlockProcessor;
import org.diylc.common.IPlugInPort;
import org.diylc.common.IBlockProcessor.InvalidBlockException;
import org.diylc.core.IDIYComponent;
import org.diylc.serialization.ProjectFileManager;
public class BuildingBlockManager implements BuildingBlockService {
>>>>>>> Stashed changes:diylc/diylc-core/src/main/java/org/diylc/presenter/BuildingBlockManager.java
private static final String BLOCKS_FILE_NAME = "blocks.xml";
@@ -50,10 +61,10 @@ public class BuildingBlockManager {
private IConfigurationManager<?> configManager;
private XStream xStream;
private InstantiationManager instantiationManager;
private InstantiationService instantiationManager;
public BuildingBlockManager(IConfigurationManager<?> configManager, XStream xStream,
InstantiationManager instantiationManager) {
InstantiationService instantiationManager) {
super();
this.configManager = configManager;
this.xStream = xStream;
@@ -0,0 +1,21 @@
package org.diylc.presenter;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import org.diylc.common.IBlockProcessor;
import org.diylc.core.IDIYComponent;
public interface BuildingBlockService {
// Core block operations
void saveSelectionAsBlock(String blockName, Collection<IDIYComponent<?>> selectedComponents,
List<IDIYComponent<?>> allComponents);
List<IDIYComponent<?>> loadBlock(String blockName, List<IDIYComponent<?>> existingComponents)
throws IBlockProcessor.InvalidBlockException;
void deleteBlock(String blockName);
// Import/Export
void importDefaultBlocks();
int importBlocks(String fileName) throws IOException;
}
@@ -74,7 +74,7 @@ import org.diylc.utils.Constants;
*
* @author Branislav Stojkovic
*/
public class DrawingManager {
public class DrawingManager implements DrawingService {
private static final Logger LOG = Logger.getLogger(DrawingManager.class);
@@ -0,0 +1,52 @@
package org.diylc.presenter;
import java.awt.*;
import java.awt.geom.Area;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import org.diylc.common.DrawOption;
import org.diylc.common.IComponentFilter;
import org.diylc.common.PropertyWrapper;
import org.diylc.core.IDIYComponent;
import org.diylc.core.Project;
import org.diylc.core.Theme;
public interface DrawingService {
// Core drawing methods
List<IDIYComponent<?>> drawProject(Graphics2D g2d, Project project,
Set<DrawOption> drawOptions, IComponentFilter filter, Rectangle selectionRect,
Collection<IDIYComponent<?>> selectedComponents, Set<IDIYComponent<?>> lockedComponents,
Set<IDIYComponent<?>> groupedComponents, List<Point2D> controlPointSlot,
List<IDIYComponent<?>> componentSlot, boolean dragInProgress, Double externalZoom,
Double scaleFactor, Rectangle2D visibleRect);
// Component area handling
ComponentArea getComponentArea(IDIYComponent<?> component);
void clearComponentAreaMap();
List<IDIYComponent<?>> findComponentsAt(Point2D point, Project project);
void invalidateComponent(IDIYComponent<?> component);
// Continuity area handling
void clearContinuityArea();
List<ContinuityArea> getContinuityAreas();
List<Area> getContinuityAreaProximity(float threshold);
void findContinuityAreaAtPoint(Point2D point);
// Theme handling
Theme getTheme();
void setTheme(Theme theme);
// Zoom control
double getZoomLevel();
void setZoomLevel(double zoomLevel);
void fireZoomChanged();
// Canvas dimensions
Dimension getCanvasDimensions(Project project, Double zoomLevel,
boolean includeExtraSpace);
double getExtraSpace(Project project);
}
@@ -53,7 +53,7 @@ import org.diylc.core.measures.Size;
*
* @author Branislav Stojkovic
*/
public class InstantiationManager {
public class InstantiationManager implements InstantiationService{
private static final Logger LOG = Logger.getLogger(InstantiationManager.class);
@@ -0,0 +1,37 @@
package org.diylc.presenter;
import java.awt.geom.Point2D;
import java.util.List;
import org.diylc.clipboard.ComponentTransferable;
import org.diylc.common.ComponentType;
import org.diylc.core.IDIYComponent;
import org.diylc.core.Project;
import org.diylc.core.Template;
import org.diylc.core.measures.Size;
public interface InstantiationService {
// Component type slot management
ComponentType getComponentTypeSlot();
Template getTemplate();
String[] getModel();
List<IDIYComponent<?>> getComponentSlot();
void setComponentTypeSlot(ComponentType componentTypeSlot, Template template, String[] model,
Project currentProject, boolean forceInstantiate) throws Exception;
// Point-by-point creation
Point2D getFirstControlPoint();
Point2D getPotentialControlPoint();
void setPotentialControlPoint(Point2D potentialControlPoint);
void instatiatePointByPoint(Point2D scaledPoint, Project currentProject) throws Exception;
boolean updatePointByPoint(Point2D scaledPoint);
boolean updateSingleClick(Point2D point, boolean snapToGrid, Size gridSpacing);
// Component operations
void pasteComponents(ComponentTransferable componentTransferable, Point2D scaledPoint,
boolean snapToGrid, Size gridSpacing, boolean autoGroup, Project currentProject,
boolean assignNewNames);
String createUniqueName(ComponentType componentType, List<IDIYComponent<?>> components);
void fillWithDefaultProperties(Object object, Template template);
void loadComponentShapeFromTemplate(IDIYComponent<?> component, Template template);
void tryToRotateComponentSlot();
}
@@ -48,6 +48,7 @@ import java.util.function.Supplier;
import java.util.stream.Collectors;
import javax.swing.JOptionPane;
import org.apache.log4j.Logger;
import org.checkerframework.checker.units.qual.A;
import org.diylc.appframework.miscutils.IConfigListener;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.appframework.miscutils.JarScanner;
@@ -90,15 +91,27 @@ import org.diylc.test.DIYTest;
import org.diylc.test.Snapshot;
import org.diylc.utils.Constants;
import org.diylc.utils.ReflectionUtils;
<<<<<<< Updated upstream:diylc/diylc-core/src/org/diylc/presenter/Presenter.java
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.security.AnyTypePermission;
=======
import org.reflections.Reflections;
import org.reflections.util.ConfigurationBuilder;
import org.reflections.util.FilterBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import static org.reflections.scanners.Scanners.TypesAnnotated;
>>>>>>> Stashed changes:diylc/diylc-core/src/main/java/org/diylc/presenter/Presenter.java
/**
* The main presenter class, contains core app logic and drawing routines.
*
* @author Branislav Stojkovic
*/
@Component
public class Presenter implements IPlugInPort, IConfigListener {
private static final String REACHED_BOTTOM =
@@ -143,14 +156,10 @@ public class Presenter implements IPlugInPort, IConfigListener {
List<Version> allVersions = (List<Version>) xStream.fromXML(in);
CURRENT_VERSION = allVersions.get(allVersions.size() - 1).getVersionNumber();
LOG.info("Current DIYLC version: " + CURRENT_VERSION);
RECENT_VERSIONS = allVersions.subList(allVersions.size() - 10, allVersions.size());
Collections.sort(RECENT_VERSIONS, new Comparator<Version>() {
@Override
public int compare(Version o1, Version o2) {
return -o1.getVersionNumber().compareTo(o2.getVersionNumber());
}
});
RECENT_VERSIONS = allVersions.stream()
.sorted(Comparator.comparing(x -> ((Version)x).getVersionNumber()).reversed())
.limit(10)
.collect(Collectors.toList());
in.close();
}
} catch (Exception e) {
@@ -169,7 +178,7 @@ public class Presenter implements IPlugInPort, IConfigListener {
private Map<String, List<ComponentType>> componentTypes;
// Maps component class names to ComponentType objects.
private List<IPlugIn> plugIns;
private List<IPlugIn> plugIns = new ArrayList<>();
private Set<IDIYComponent<?>> selectedComponents;
// Maps components that have at least one dragged point to set of indices
@@ -179,11 +188,11 @@ public class Presenter implements IPlugInPort, IConfigListener {
// Utilities
// private Cloner cloner;
private DrawingManager drawingManager;
private ProjectFileManager projectFileManager;
private InstantiationManager instantiationManager;
private VariantManager variantManager;
private BuildingBlockManager buildingBlockManager;
private DrawingService drawingManager;
private ProjectFileService projectFileManager;
private InstantiationService instantiationManager;
private VariantService variantManager;
private BuildingBlockService buildingBlockManager;
private Rectangle selectionRect;
@@ -206,6 +215,7 @@ public class Presenter implements IPlugInPort, IConfigListener {
private DIYTest test = null;
<<<<<<< Updated upstream:diylc/diylc-core/src/org/diylc/presenter/Presenter.java
public Presenter(IView view, IConfigurationManager<?> configManager) {
this(view, configManager, false);
}
@@ -225,6 +235,28 @@ public class Presenter implements IPlugInPort, IConfigListener {
instantiationManager = new InstantiationManager();
variantManager = new VariantManager(configManager, projectFileManager.getXStream());
buildingBlockManager = new BuildingBlockManager(configManager, projectFileManager.getXStream(), instantiationManager);
=======
@Autowired
public Presenter(
@Lazy
IView view,
IConfigurationManager configManager,
MessageDispatcher<EventType> messageDispatcher,
DrawingService drawingService,
ProjectFileService projectFileService,
InstantiationService instantiationService,
VariantService variantService,
BuildingBlockService buildingBlockService,
boolean importVariantsAndBlocks) {
this.view = view;
this.configManager = configManager;
this.messageDispatcher = messageDispatcher;
this.drawingManager = drawingService;
this.projectFileManager = projectFileService;
this.instantiationManager = instantiationService;
this.variantManager = variantService;
this.buildingBlockManager = buildingBlockService;
>>>>>>> Stashed changes:diylc/diylc-core/src/main/java/org/diylc/presenter/Presenter.java
// lockedLayers = EnumSet.noneOf(ComponentLayer.class);
// visibleLayers = EnumSet.allOf(ComponentLayer.class);
@@ -1623,6 +1655,12 @@ public class Presenter implements IPlugInPort, IConfigListener {
}
// There is selection, so we need to finalize the drag&drop
// operation.
if (!preDragProject.equals(currentProject)) {
messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, preDragProject, currentProject, "Drag");
drawingManager.clearContinuityArea();
projectFileManager.notifyFileChange();
}
messageDispatcher.dispatchMessage(EventType.REPAINT);
dragInProgress = false;
}
@@ -0,0 +1,31 @@
package org.diylc.presenter;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import com.thoughtworks.xstream.XStream;
import org.diylc.core.Project;
import org.diylc.test.DIYTest;
public interface ProjectFileService {
// Project operations
void serializeProjectToFile(Project project, String fileName, boolean isBackup) throws IOException;
Project deserializeProjectFromFile(String fileName, List<String> warnings)
throws SAXException, IOException, ParserConfigurationException;
// Test operations
void serializeTestToFile(DIYTest test, String fileName) throws IOException;
DIYTest deserializeTestFromFile(String fileName)
throws SAXException, IOException, ParserConfigurationException;
// File status
void startNewFile();
void notifyFileChange();
String getCurrentFileName();
boolean isModified();
void fireFileStatusChanged();
// Serialization
XStream getXStream();
}
@@ -41,7 +41,7 @@ import org.diylc.core.Template;
import org.diylc.serialization.ProjectFileManager;
import com.thoughtworks.xstream.XStream;
public class VariantManager {
public class VariantManager implements VariantService {
private static final String VARIANTS_FILE_NAME = "variants.xml";
@@ -0,0 +1,16 @@
package org.diylc.presenter;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.diylc.common.ComponentType;
import org.diylc.core.Template;
public interface VariantService {
void importDefaultVariants();
void upgradeVariants(Map<String, List<ComponentType>> componentTypes);
List<Template> getVariantsFor(ComponentType type);
int importVariants(String fileName) throws IOException;
String getDefaultVariant(ComponentType type);
void deleteVariant(ComponentType type, String templateName);
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -43,10 +43,14 @@ import org.apache.log4j.Logger;
import org.diylc.appframework.miscutils.Utils;
import org.diylc.appframework.simplemq.MessageDispatcher;
import org.diylc.appframework.update.VersionNumber;
<<<<<<< Updated upstream:diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java
import org.diylc.common.EventType;
import org.diylc.core.Project;
import org.diylc.presenter.Presenter;
import org.diylc.test.DIYTest;
=======
import org.diylc.presenter.ProjectFileService;
>>>>>>> Stashed changes:diylc/diylc-core/src/main/java/org/diylc/serialization/ProjectFileManager.java
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -56,6 +60,7 @@ import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.mapper.MapperWrapper;
import com.thoughtworks.xstream.security.AnyTypePermission;
<<<<<<< Updated upstream:diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java
public class ProjectFileManager {
@@ -64,6 +69,21 @@ public class ProjectFileManager {
private XStream xStream;
// Legacy deserializer for 3.0.1 through 3.0.7, loads Points referenced in
// pixels.
=======
import org.diylc.common.EventType;
import org.diylc.core.Project;
import org.diylc.presenter.Presenter;
import org.diylc.test.DIYTest;
public class ProjectFileManager implements ProjectFileService {
private static final Logger LOG = Logger.getLogger(ProjectFileManager.class);
private XStream xStream;
// Legacy deserializer for 3.0.1 through 3.0.7, loads Points referenced in
// pixels.
>>>>>>> Stashed changes:diylc/diylc-core/src/main/java/org/diylc/serialization/ProjectFileManager.java
private XStream xStreamOld;
public static final XStream xStreamSerializer = new XStream(new DomDriver("UTF-8"));
Binary file not shown.
@@ -1,5 +1,2 @@
eclipse.preferences.version=1
encoding//appimage/setup_wsl_appimage.bat=UTF-8
encoding//lang/Deutsch.txt=UTF-8
encoding//src/org/diylc/swing/gui/CollapsiblePanel.java=UTF-8
encoding/lang=UTF-8
encoding/<project>=ISO-8859-1
+2 -1
View File
@@ -13,8 +13,9 @@
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_ATTR_USE_ARGFILE" value="false"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES" value="true"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
<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.PROJECT_ATTR" value="diylc-swing"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms512m -Xmx4096m -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 -Ddorg.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&#13;&#10;--add-opens java.desktop/java.awt.font=ALL-UNNAMED&#13;&#10;--add-opens java.desktop/java.awt.geom=ALL-UNNAMED"/>
<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 -Ddorg.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&#13;&#10;--add-opens java.desktop/java.awt.font=ALL-UNNAMED&#13;&#10;--add-opens java.desktop/java.awt.geom=ALL-UNNAMED --add-exports java.desktop/com.apple.eawt=ALL-UNNAMED --add-exports java.desktop/com.apple.eawt.event=ALL-UNNAMED --add-exports java.desktop/com.apple.eio=ALL-UNNAMED"/>
</launchConfiguration>
+25 -14
View File
@@ -6,6 +6,19 @@
<property name="appimagetool" value="${basedir}/tools/appimagetool-x86_64.AppImage" />
<property name="wsl.command" value="wsl bash -c"/>
<target name="setup-wsl">
<!-- Install necessary Linux dependencies inside WSL -->
<exec executable="cmd.exe" failonerror="true">
<arg line="/c ${wsl.command} &quot;sudo apt update &amp;&amp; sudo apt install -y wget libfuse2 fuse&quot;" />
</exec>
<!-- Download AppImageTool into WSL -->
<exec executable="cmd.exe" failonerror="true">
<arg line="/c ${wsl.command} &quot;wget -O ~/appimagetool https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage &amp;&amp; chmod +x ~/appimagetool&quot;" />
</exec>
</target>
<target name="build-appimage">
<mkdir dir="${appdir}/usr/bin" />
@@ -13,22 +26,13 @@
<mkdir dir="${appdir}/usr/share/metainfo" />
<!-- Copy app files -->
<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="lang" prefix="lang" />
<zipfileset dir="deploy" includes="splash.png" />
<copy file="${jar.dir}/diylc.jar" todir="${appdir}/usr/bin" />
<copy todir="${appdir}/usr/bin/lib">
<copy file="${jar.dir}/diylc.jar" todir="${appdir}/usr/lib" />
<copy todir="${appdir}/usr/lib/lib">
<fileset dir="${jar.dir}/lib">
<include name="*"/>
</fileset>
</copy>
<copy todir="${appdir}/usr/bin/library">
<copy todir="${appdir}/usr/lib/library">
<fileset dir="${jar.dir}/library">
<include name="*"/>
</fileset>
@@ -53,9 +57,10 @@
<include name="*"/>
</fileset>
</copy>
<copy file="appimage/diylc.sh" tofile="${appdir}/usr/bin/diylc" />
<copy file="appimage/diylc.sh" tofile="${appdir}/usr/bin/diylc.sh" />
<copy file="appimage/AppRun" tofile="${appdir}/AppRun" />
<copy file="deploy/splash.png" todir="${appdir}/usr/bin" />
<chmod file="${appdir}/usr/bin/diylc" perm="755" />
<chmod file="${appdir}/AppRun" perm="755" />
<!-- Copy icons and desktop file -->
<copy file="icons/icon_512x512.png" tofile="${appdir}/usr/share/icons/hicolor/512x512/apps/com.diy_fever.DIYLayoutCreator.png" />
@@ -84,6 +89,12 @@
<exec executable="cmd.exe" failonerror="true">
<arg line="/c ${wsl.command} &quot;sed -i 's/\r$//' /tmp/AppDir/com.diy_fever.DIYLayoutCreator.desktop&quot;"/>
</exec>
<exec executable="cmd.exe" failonerror="true">
<arg line="/c ${wsl.command} &quot;sed -i 's/\r$//' /tmp/AppDir/AppRun&quot;"/>
</exec>
<exec executable="cmd.exe" failonerror="true">
<arg line="/c ${wsl.command} &quot;sed -i 's/\r$//' /tmp/AppDir/usr/bin/diylc.sh&quot;"/>
</exec>
<echo message="Starting AppImage build process using WSL..."/>
+8
View File
@@ -0,0 +1,8 @@
#!/bin/bash
#set -x # Enable debug mode (prints each command before execution)
HERE="$(dirname "$(readlink -f "$0")")"
echo "AppRun: Running from directory: $HERE"
echo "AppRun: Executing $HERE/usr/bin/diylc.sh with args: $@"
exec "$HERE/usr/bin/diylc.sh" "$@"
+40 -7
View File
@@ -1,11 +1,44 @@
#!/bin/bash
HERE="$(dirname "$(readlink -f "$0")")"
#set -x # Enable debug mode
# Set JRE path inside AppImage
if [ -d "$HERE/../lib/jre" ]; then
JAVA_HOME="$HERE/../lib/jre"
PATH="$JAVA_HOME/bin:$PATH"
export JAVA_HOME PATH
HERE="$(dirname "$(readlink -f "$0")")"
echo "diylc.sh: Running from directory: $HERE"
# Check if Java is available
if [ -d "$HERE/jre" ]; then
export JAVA_HOME="$HERE/jre"
export PATH="$JAVA_HOME/bin:$PATH"
JAVA="$JAVA_HOME/bin/java"
echo "diylc.sh: Using bundled JRE: $JAVA"
else
JAVA="$(which java)"
echo "diylc.sh: Using system Java: $JAVA"
fi
exec "$JAVA_HOME/bin/java" -Xms512m -Xmx4096m -javaagent:lib/jar-loader.jar -Dorg.diylc.scriptRun=true -Dfile.encoding=UTF-8 -cp diylc.jar:lib --add-exports java.desktop/com.apple.eawt.event=ALL-UNNAMED --add-exports java.desktop/com.apple.eio=ALL-UNNAMED --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 --add-opens java.desktop/java.awt.font=ALL-UNNAMED --add-opens java.desktop/java.awt.geom=ALL-UNNAMED org.diylc.DIYLCStarter "$@"
# Debug: Check Java existence
if [ ! -x "$JAVA" ]; then
echo "diylc.sh: ERROR - Java binary not found or not executable!"
exit 1
fi
cd "$HERE"
echo "diylc.sh: Current working directory: $(pwd)"
# Debug: Print command before execution
echo "diylc.sh: Executing DIYLCStarter with Java"
exec "$JAVA" \
-javaagent:"$HERE/../lib/lib/jar-loader.jar" \
-Xms128m \
-Xmx4096m \
-cp "$HERE/../lib/diylc.jar:$HERE/../lib/lib/*" \
--add-exports java.desktop/com.apple.eawt.event=ALL-UNNAMED \
--add-exports java.desktop/com.apple.eio=ALL-UNNAMED \
--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 \
--add-opens java.desktop/java.awt.font=ALL-UNNAMED \
--add-opens java.desktop/java.awt.geom=ALL-UNNAMED \
-Dorg.diylc.scriptRun=true \
org.diylc.DIYLCStarter "$@"
+1 -1
View File
@@ -14,7 +14,7 @@
<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.41.0" />
<property name="diylc.version" value="5.0.0" />
<property name="win.jre.x86.path" value="tools/jre/win/x86/jre17.0.14_7.zip" />
<property name="win.jre.x64.path" value="tools/jre/win/x64/jre17.0.14_7.zip" />
Binary file not shown.
+609 -182
View File
@@ -1,182 +1,609 @@
#10 / 2.59mm
#12 / 2.05mm
#14 / 1.63mm
#16 / 1.29mm
#18 / 1.02mm
#20 / 0.81mm
#22 / 0.64mm
#24 / 0.51mm
#26 / 0.40mm
#28 / 0.32mm
#30 / 0.25mm
#32 / 0.20mm
#34 / 0.16mm
#36 / 0.13mm
#8 / 3.26mm
1 throws / 2 positions
10 throws / 10 positions
11 throws / 11 positions
12 throws / 12 positions
1P12T
2 throws / 2 positions
2 throws / 3 positions / OFF even positions
2P5T
2P6T
3 throws / 3 positions
3 throws / 5 positions / SHORT even positions
3P4T
3PDT
3PDT (On/Off/On)
4 band
4 throws / 4 positions
4P3T
4P5T
4P5T (Super/Mega)
4P6T
4PDT
4PDT (On/Off/On)
4PDT (On/On/On Type 1)
4PDT (On/On/On Type 2)
5 band
5 throws / 5 positions
5PDT
5PDT (On/Off/On)
6 throws / 6 positions
7 throws / 7 positions
8 throws / 8 positions
9 throws / 9 positions
A-O-I REGULATOR
AC
ANSI
AWG
Alternate
And
Angle Offset
B-C-E BJT
Background
Box
C-B-E BJT
Circle
Coil(s)
Component reordering is possible only when Project Explorer is sorted by z-index.
Configuration
Could not apply changes. Check the log for details.
D-G-S JFET
D-G-S MOSFET
D-S-G JFET
D-S-G MOSFET
DC
DFM A
DFM B
DIP
DP3T
DP3T (Import 5-Position Strat)
DP4T (6-Position Oak Grigsby)
DP5T
DPDT
DPDT (On/Off/On)
DPDT (On/On)
DPDT (On/On/On Type 1)
DPDT (On/On/On Type 2)
Designation
Deutsch
Dimension Mode
Dots (Gradual)
Dots (Uniform)
Double Rails
Double Rods
Draw Standard
Drop
E+
E-B-C BJT
Eight
English
Español
Export
Export to Gerber
Filament Voltage
Français
G-D-S JFET
G-D-S MOSFET
G-I-O REGULATOR
G-O-I REGULATOR
G-S-D JFET
G-S-D MOSFET
Generate DIYLC Netlist (excl. Switches)
Generate DIYLC Netlist (incl. Switches)
Gray
Hole Type
Humbucking - 4 leads
I-G-O REGULATOR
IEC
Inner 1
Inner 2
Inner 3
Inner 4
Inner 5
Inner 6
Italiano
Lin
Log
MPJA
Markers
Maximum number of switching combinations exceeded. Allowed: %s, actual: %s
NPN
Nand
Nederlands
Nine
Non-Plated Through Hole
Non-shorting
Nor
Not
Numeric (0-10)
Numeric (1-10)
Numeric (1-11)
Numeric (1-12)
Numeric (Even, No Ticks)
Numeric (Even, With Ticks)
O-G-I REGULATOR
One
Or
PAF
PCB
PNP
Pitch
Plated Through Hole
Poles
Português
RS
Rectangle
Rev log
S-G-D JFET
S-G-D MOSFET
SMD
SPDT
SPDT (On/Off/On)
SPDT (On/On)
SPST
Screw Position
Shorting
Show Project Explorer
Single - North
Single - South
Six
Sort by Name
Sort by Type
Sort by Z-index
Source Style
Source Type
Srpski
Stroke
Ten
Terminal
Timing
Tubular Beveled
Xnor
Xor
cm
ft
in
mm
px
yd
#10 / 2.59mm
#12 / 2.05mm
#14 / 1.63mm
#16 / 1.29mm
#18 / 1.02mm
#20 / 0.81mm
#22 / 0.64mm
#24 / 0.51mm
#26 / 0.40mm
#28 / 0.32mm
#30 / 0.25mm
#32 / 0.20mm
#34 / 0.16mm
#36 / 0.13mm
#8 / 3.26mm
(Building Blocks)
(Favorites)
(Recently Used)
1 throws / 2 positions
10 throws / 10 positions
11 throws / 11 positions
12 throws / 12 positions
180 degrees clockwise
1P12T
2 throws / 2 positions
2 throws / 3 positions / OFF even positions
270 degrees clockwise
2P5T
2P6T
3 throws / 3 positions
3 throws / 5 positions / SHORT even positions
3P4T
3PDT
3PDT (On/Off/On)
4 band
4 throws / 4 positions
4P3T
4P5T
4P5T (Super/Mega)
4P6T
4PDT
4PDT (On/Off/On)
4PDT (On/On/On Type 1)
4PDT (On/On/On Type 2)
5 band
5 throws / 5 positions
5PDT
5PDT (On/Off/On)
6 throws / 6 positions
7 throws / 7 positions
8 throws / 8 positions
9 throws / 9 positions
90 degrees clockwise
A variant with that name already exists. Overwrite?
A-O-I REGULATOR
AC
ANSI
AWG
About
Above
Access User Files
Add Flexible Leads
Add Validation Step
All Connected
Alpha
Alternate
Analyze
Analyze Guitar Diagrams
And
Angle
Angle Offset
Anti-Aliasing
Arrow Size
Author
Auto-Create Pads
Auto-Edit Mode
B-C-E BJT
Background
Base
Below
Board
Board Color
Board Width
Boards
Bobbin 1
Bobbin 2
Body
Border
Border Thickness
Both
Both Sides
Bottom
Bottom Left
Bottom Right
Box
Bracket
Bring Forward
Bring Selection to Front
Buffer
C-B-E BJT
Center
Center Negative
Center Positive
Center Terminal
Central
Change Password
Channel
Chassis
Check Trace Proximity
Circle
Circular
Click on a component to highlight area directly or indirectly connected to the area below the cursor. To continue editing, this mode needs to be switched OFF
Click on the canvas to create a new %s or press %s to cancel
Click on the canvas to set the %s control point of a new %s or press %s to cancel
Click the lightbulb icon in the bottom-right corner of the window for more info.
Click to fetch the most recent public announcement
Click to show recent changes and updates
Click to toggle to the next option
Coil
Coil Border
Coil Length
Coil Width
Coil(s)
Color
Color 1
Color 2
Color code
Column Spacing
Columns
Component
Component API
Component reordering is possible only when Project Explorer is sorted by z-index.
Components
Config
Configuration
Connectivity
Connector
Connector (Mirrored)
Contacts
Continuous Creation
Coordinate Color
Coordinate Origin
Coordinates
Copy
Core
Core Border
Core Thickness
Core Width
Could not apply changes. Check the log for details.
Could not create a new file. Check the log for details.
Could not create component. Check log for details.
Could not fetch public announcements.
Could not save the project to file. Check the log for details.
Could not set component type slot. Check log for details.
Cover
Create B.O.M.
Create New Account
Current
Cut
Cut Between Holes
Cut Orientation
D-G-S JFET
D-G-S MOSFET
D-S-G JFET
D-S-G MOSFET
DC
DFM A
DFM B
DIP
DIP (Mirrored)
DP3T
DP3T (Import 5-Position Strat)
DP3T (Standard 3-Position Strat)
DP3T (Standard 5-Position Strat)
DP4T (4-Position Tele)
DP4T (6-Position Oak Grigsby)
DP5T
DPDT
DPDT (On/Off/On)
DPDT (On/On)
DPDT (On/On/On Type 1)
DPDT (On/On/On Type 2)
Dashed
Decimals
Default
Default Font
Default Font Size
Delete Selection
Description
Designation
Diameter
Dimension Mode
Directional
Directly heated
Display
Display Pin #s
Dog Ear
Donate
Dot Spacing
Dots (Gradual)
Dots (Uniform)
Dotted
Double Rails
Double Rods
Drag control point(s) of
Drag the mouse over the canvas to place a new
Draw Standard
Drop
Duodecar B12C
Duplicate
E+
E-B-C BJT
Edges
Edit
Edit Project Settings
Edit Selection
Eight
Electro-Mechanical
Electrode Labels
Enable Cache Boost
End Arrow
Enjoying DIYLC? Click here to buy me a coffee :)
Error
Error occurred while editing selection. Check the log for details.
Exit
Expand Selection
Explicit Dimensions
Explicit Length
Explicit Width
Export
Export Building Blocks
Export Grid
Export Variants
Export to Gerber
Export to PDF
Export to PNG
Extra Working Area
Eyelet color
FAQ
Filament Voltage
File
Filtertron
Find
Five
Flip
Folded
Font
Font Bold
Font Italic
Font Size
Font Size Override
Four
Full
Fuse
G-D-S JFET
G-D-S MOSFET
G-I-O REGULATOR
G-O-I REGULATOR
G-S-D JFET
G-S-D MOSFET
Generate DIYLC Netlist (excl. Switches)
Generate DIYLC Netlist (incl. Switches)
Generate Spice Netlist
Grid
Grid Spacing
Group Selection
Guitar
Half
Heaters
Height
Help
Hi-Quality Rendering
Highlight Connected Areas
Hole
Hole Size
Hole Spacing
Hole Type
Holes Per Strip
Horizontal
Horizontal Alignment
Horizontal Large
Horizontal Medium
Horizontal Small 1
Horizontal Small 2
Horizontal X-Small
Humbucking - 4 leads
I-G-O REGULATOR
IEC
Image
Immediate Only
Import
Import Building Blocks
Import Netlist
Import Variants
In-Line D-44
In-line
Indent
Information
Inline
Inner 1
Inner 2
Inner 3
Inner 4
Inner 5
Inner 6
Inside Color
Integration
Invert Polarity
Label
Label Color
Label Orientation
Label Position
Labels
Language
Language selection will be applied after the application is restarted.
Layer
Layers
Lead Color
Lead Count
Lead Length
Lead Spacing
Left
Left click to instantiate this component, right click for more options
Left-to-Right
Legs
Length
Letters
Lin
Loadline Editor
Lock
Log
Log In
Log Out
Lug Size
Lugs
MPJA
Make a Donation
Manage Account
Manage My Uploads
Mark Common Lugs
Marker
Marker Size
Markers
Maximum number of switching combinations exceeded. Allowed: %s, actual: %s
Mini
Miniature
Mirror Horizontally
Mirror Selection
Mirror Vertically
Mirroring operation will change the circuit. Do you want to continue?
Misc
Model
Mono
Mount
Mounting Lugs
Mouse Wheel Zoom
Moveable Label
NPN
Name
Nand
Negative
New
New version available
Nine
No
No new public announcements available.
Non-Plated Through Hole
Non-shorting
None
Nor
Not
Noval B9A
Nudge
Numbers
Numeric (0-10)
Numeric (1-10)
Numeric (1-11)
Numeric (1-12)
Numeric (Even, No Ticks)
Numeric (Even, With Ticks)
Nut
O-G-I REGULATOR
Octal
Offset
One
One Side
Open
Opposing Points
Or
Orientation
Outer Foil
Outer Foil Mark
Outline Mode
Outside
Oval horizontal
Oval vertical
PAF
PCB
PNP
Pad Color
Pad color
Panel
Passive
Paste
Pin Arrangement
Pin Color
Pin Spacing
Pin spacing
Pinout
Pins
Pitch
Plated Through Hole
Play Test
Plugin API
Point Count
Polarity
Polarized
Pole Color
Pole Pieces
Pole Pieces 1
Pole Pieces 2
Poles
Positions
Positive
Power Rating
Power Strip
Primary CT
Print...
Project Cloud
Public Announcement
RS
Radius
Rail
Recent Files
Recent Updates
Rectangle
Redo
Renumber On Paste
Renumber Selection
Resistance
Rev log
Reverse (standing)
Right
Rim
Rods
Rotate Clockwise
Rotate Counterclockwise
Rotate Selection
Round
Round WOG A
Round WOG B
Row Spacing
Rows
Ruler Inch Subdivision...
S-G-D JFET
S-G-D MOSFET
SMD
SPDT
SPDT (On/Off/On)
SPDT (On/On)
SPST
Same Type Only
Save
Save As
Save as Variant
Scale
Schematic Symbols
Screw Position
Screws
Search The Cloud
Searchable Tree
Secondary CT
Select All
Selected component(s) have reached the bottom of their layer. Do you want to force the selection to the back?
Selected component(s) have reached the top of their layer. Do you want to force the selection to the top?
Selection
Selection Size
Selection contains components that cannot be mirrored. Do you want to exclude them?
Selection contains components that cannot be rotated. Do you want to exclude them?
Selection is empty.
Semiconductors
Send Backward
Send Selection to Back
Seven
Shaft Down
Shaft Up
Shape
Shapes
Shorting
Show Bracket
Show Grid
Show Project Explorer
Show Rulers
Shroud
Shrouded
Single - North
Single - South
Single Rail
Single Rods
Six
Size
Sizing Mode
Small-button B7G
Smooth
Snap To
Soap Bar
Solid
Sort by Name
Sort by Type
Sort by Z-index
Source Style
Source Type
Spacing
Square
Square BR-3
Standard
Start Arrow
Start Recording
Stereo
Sticky Points
Stop Recording
Stratocaster
Strip Color
Stripe
Stripe 1
Stripe 2
Stripe Color
Stripe Color 1
Stripe Color 2
Stroke
Style
Submit a Bug
Suppressor grid
Switched
Switches
Tab
Tab Border
Tabbed Toolbar
Taper
Telecaster
Ten
Terminal
Terminal Spacing
Terminals
Test
Text
Text Color
There are unsaved changes. Would you like to save them?
Thickness
Three
Through Hole
Tick
Tick Width
Ticks
Timing
Title
Toolbox
Top
Top Lead
Top Left
Top Right
Top-to-Bottom
Trace
Trace Color
Trace Mask
Transform Selection
Triangle
Tubes
Tubular
Tubular Beveled
Two
Type
Ultra-miniature
Underside Pad Color
Underside Trace Color
Undo
Ungroup Selection
Unit
Upload A Project
User Manual
Value
Version history is not available.
Vertical
Vertical Alignment
Vertical Inline
Vertical Offset 1
Vertical Offset 2
View
Visible
Voltage
Wafer
Warning
Width
Winding Spacing
Wiring
X-axis
Xnor
Xor
Y-axis
Zoom
base of 10
base of 2
cm
ft
hold %s and drag to unstick from
in
mm
px
yd
+1 -1
View File
@@ -126,7 +126,7 @@
<property name="jdk.archive.linux" value="OpenJDK17U-jre_x64_linux_hotspot_${jdk.version.file}.tar.gz" />
<property name="jdk.url.linux" value="https://github.com/adoptium/temurin17-binaries/releases/download/jdk-${jdk.version}/${jdk.archive.linux}" />
<property name="jre.dest.linux" value="${basedir}/build/jre" />
<property name="appdir.jre" value="${appdir}/usr/lib/jre" />
<property name="appdir.jre" value="${appdir}/usr/bin/jre" />
<!-- Ensure clean jre folder -->
<delete dir="${jre.dest.linux}" />
Binary file not shown.
Binary file not shown.
+559
View File
@@ -0,0 +1,559 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.diylc</groupId>
<artifactId>diylc-parent</artifactId>
<version>5.1.0</version>
</parent>
<artifactId>diylc-swing</artifactId>
<!-- No need to specify version - it inherits from parent -->
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<!-- Internal module dependencies -->
<dependency>
<groupId>org.diylc</groupId>
<artifactId>diylc-core</artifactId>
</dependency>
<dependency>
<groupId>org.diylc</groupId>
<artifactId>diylc-library</artifactId>
</dependency>
<!-- Common dependencies from Maven Central -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<exclusions>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.5-FINAL</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.4.0-jre</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.27</version>
</dependency>
<dependency>
<groupId>com.orsonpdf</groupId>
<artifactId>orsonpdf</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.1.12</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>commons-compiler</artifactId>
<version>3.1.12</version>
</dependency>
<dependency>
<groupId>net.java.balloontip</groupId>
<artifactId>balloontip</artifactId>
<version>1.2.4.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>com.guigarage</groupId>
<artifactId>gestures-wrapper</artifactId>
<version>0.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.36</version>
</dependency>
<!-- Local dependencies from lib folder -->
<dependency>
<groupId>org.diylc.local</groupId>
<artifactId>app-framework</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.diylc.local</groupId>
<artifactId>gerber-writer-api-1.0.0</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.diylc.local</groupId>
<artifactId>java-http-proxy</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.diylc.local</groupId>
<artifactId>jep-2.4.1</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.diylc.local</groupId>
<artifactId>svgSalamander-1.1.2.4</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.diylc.local</groupId>
<artifactId>swing-framework</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>3.2.3</version>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<finalName>diylc</finalName>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>org.diylc.DIYLCStarter</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>universal-zip</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.5.0</version>
<configuration>
<descriptors>
<descriptor>deploy/universal-zip.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<configuration>
<finalName>diylc-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>linux-appimage</id>
<properties>
<appdir.dir>${project.build.directory}/AppDir</appdir.dir>
<jdk.version>17.0.14+7</jdk.version>
<jdk.version.file>17.0.14_7</jdk.version.file>
<jdk.archive.linux>OpenJDK17U-jre_x64_linux_hotspot_${jdk.version.file}.tar.gz</jdk.archive.linux>
<jdk.url.linux>https://github.com/adoptium/temurin17-binaries/releases/download/jdk-${jdk.version}/${jdk.archive.linux}</jdk.url.linux>
<jre.dest.linux>${project.build.directory}/jre-temp</jre.dest.linux>
<appdir.jre>${appdir.dir}/usr/bin/jre</appdir.jre>
<wsl.command>wsl bash -c</wsl.command>
<appimage.output.file>DIYLayoutCreator-${project.version}-x86_64.AppImage</appimage.output.file>
</properties>
<build>
<plugins>
<!-- Create AppDir structure and copy files -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>create-appdir</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- Create directory structure -->
<mkdir dir="${appdir.dir}/usr/bin" />
<mkdir dir="${appdir.dir}/usr/lib" />
<mkdir dir="${appdir.dir}/usr/share/icons/hicolor/512x512/apps" />
<mkdir dir="${appdir.dir}/usr/share/metainfo" />
<!-- Copy app files -->
<copy file="${project.build.directory}/diylc.jar" todir="${appdir.dir}/usr/lib" />
<!-- Copy AppImage specific files -->
<copy file="${project.basedir}/deploy/linux/appimage/diylc.sh" tofile="${appdir.dir}/usr/bin/diylc.sh" />
<copy file="${project.basedir}/deploy/linux/appimage/AppRun" tofile="${appdir.dir}/AppRun" />
<chmod file="${appdir.dir}/AppRun" perm="755" />
<chmod file="${appdir.dir}/usr/bin/diylc.sh" perm="755" />
<!-- Copy icons and desktop files -->
<copy file="${project.basedir}/src/main/resources/icons/icon_512x512.png"
tofile="${appdir.dir}/usr/share/icons/hicolor/512x512/apps/com.diy_fever.DIYLayoutCreator.png" />
<copy file="${project.basedir}/src/main/resources/icons/icon_512x512.png"
tofile="${appdir.dir}/com.diy_fever.DIYLayoutCreator.png" />
<copy file="${project.basedir}/deploy/linux/appimage/com.diy_fever.DIYLayoutCreator.desktop"
todir="${appdir.dir}" />
<copy file="${project.basedir}/deploy/linux/appimage/com.diy_fever.DIYLayoutCreator.metainfo.xml"
todir="${appdir.dir}/usr/share/metainfo" />
<!-- Download and extract JRE for Linux -->
<!-- Ensure clean jre folders -->
<delete dir="${jre.dest.linux}" />
<mkdir dir="${jre.dest.linux}" />
<mkdir dir="${project.build.directory}/downloads" />
<!-- Download JRE 17 if not already present -->
<get src="${jdk.url.linux}"
dest="${project.build.directory}/downloads/${jdk.archive.linux}"
usetimestamp="true" />
<!-- Extract JRE -->
<untar src="${project.build.directory}/downloads/${jdk.archive.linux}"
dest="${jre.dest.linux}"
compression="gzip" />
<!-- Move extracted folder into AppImage location -->
<mkdir dir="${appdir.jre}" />
<move todir="${appdir.jre}">
<fileset dir="${jre.dest.linux}/jdk-${jdk.version}-jre" />
</move>
<!-- Clean up temporary directory -->
<delete dir="${jre.dest.linux}" />
<echo message="JRE 17 bundled into ${appdir.jre}" />
<!-- Convert line endings to Unix format -->
<fixcrlf file="${appdir.dir}/com.diy_fever.DIYLayoutCreator.desktop" eol="unix" />
<fixcrlf file="${appdir.dir}/AppRun" eol="unix" />
<fixcrlf file="${appdir.dir}/usr/bin/diylc.sh" eol="unix" />
<echo message="AppDir structure created successfully at: ${appdir.dir}" />
</target>
</configuration>
</execution>
<!-- Build AppImage -->
<execution>
<id>build-appimage</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="Starting AppImage build process..." />
<!-- Detect operating system -->
<condition property="isWindows">
<os family="windows" />
</condition>
<condition property="isMac">
<os family="mac" />
</condition>
<condition property="isLinux">
<and>
<os family="unix" />
<not>
<os family="mac" />
</not>
</and>
</condition>
<echo message="Detected OS: ${os.name}" />
<!-- Windows-specific build -->
<echo message="Windows build will execute: ${isWindows}" />
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
<arg line="/c echo Building AppImage using Windows with WSL..." />
</exec>
<!-- Check if WSL is available -->
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
<arg line="/c where wsl" />
</exec>
<!-- Set WSL command -->
<property name="wsl.command" value="wsl bash -c" />
<!-- Check if WSL has a Linux distribution installed -->
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
<arg line="/c wsl -l" />
</exec>
<!-- Copy AppDir to WSL /tmp directory -->
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
<arg line="/c wsl cp -r &quot;$(wslpath -u '${appdir.dir}')&quot; /tmp/AppDir" />
</exec>
<!-- Convert line endings to Unix format in WSL -->
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
<arg line="/c ${wsl.command} &quot;sed -i 's/\r$//' /tmp/AppDir/com.diy_fever.DIYLayoutCreator.desktop&quot;" />
</exec>
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
<arg line="/c ${wsl.command} &quot;sed -i 's/\r$//' /tmp/AppDir/AppRun&quot;" />
</exec>
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
<arg line="/c ${wsl.command} &quot;sed -i 's/\r$//' /tmp/AppDir/usr/bin/diylc.sh&quot;" />
</exec>
<!-- Setup WSL with required dependencies -->
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
<arg line="/c echo Setting up WSL with required dependencies..." />
</exec>
<!-- Install necessary Linux dependencies inside WSL -->
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
<arg line="/c ${wsl.command} &quot;sudo apt update &amp;&amp; sudo apt install -y wget libfuse2 fuse&quot;" />
</exec>
<!-- Download AppImageTool into WSL if not already present -->
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
<arg line="/c ${wsl.command} &quot;if [ ! -f ~/appimagetool ]; then wget -O ~/appimagetool https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage &amp;&amp; chmod +x ~/appimagetool; fi&quot;" />
</exec>
<!-- Build AppImage using appimagetool in WSL -->
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
<arg line="/c ${wsl.command} &quot;cd /tmp &amp;&amp; ~/appimagetool /tmp/AppDir /tmp/${appimage.output.file}&quot;" />
</exec>
<!-- Copy the AppImage back to the build directory -->
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
<arg line="/c wsl bash -c &quot;cp /tmp/${appimage.output.file} $(wslpath -u '${project.build.directory}/${appimage.output.file}')&quot;" />
</exec>
<!-- macOS-specific build -->
<echo message="Mac build will execute: ${isMac}" />
<exec executable="bash" failonerror="true" osfamily="mac">
<arg line="-c 'echo Building AppImage using macOS with Docker...'" />
</exec>
<!-- Check if Docker is available -->
<exec executable="docker" resultproperty="docker.result" failifexecutionfails="false" osfamily="mac">
<arg line="--version" />
</exec>
<!-- Create a temporary directory for Docker volume mapping -->
<mkdir dir="${project.build.directory}/docker-tmp" />
<!-- Copy AppDir to the Docker volume directory -->
<copy todir="${project.build.directory}/docker-tmp/AppDir">
<fileset dir="${appdir.dir}" />
</copy>
<!-- Run AppImageTool in Docker -->
<exec executable="docker" failonerror="true" osfamily="mac">
<arg line="run --rm -v &quot;${project.build.directory}/docker-tmp:/workspace&quot; -w /workspace appimagecrafters/appimage-builder:latest /bin/bash -c &quot;ARCH=x86_64 appimagetool AppDir ${appimage.output.file}&quot;" />
</exec>
<!-- Copy the AppImage to the build directory -->
<copy file="${project.build.directory}/docker-tmp/${appimage.output.file}" todir="${project.build.directory}" />
<!-- Clean up temporary directory -->
<delete dir="${project.build.directory}/docker-tmp" />
<!-- &lt;!&ndash; Linux-specific build &ndash;&gt;-->
<!-- <echo message="Linux build will execute: ${isLinux}" />-->
<!-- <exec executable="bash" failonerror="true" osfamily="unix">-->
<!-- <arg line="-c 'echo Building AppImage natively on Linux...'" />-->
<!-- </exec>-->
<!-- -->
<!-- &lt;!&ndash; Install dependencies if needed &ndash;&gt;-->
<!-- <exec executable="bash" failonerror="true" osfamily="unix">-->
<!-- <arg line="-c 'which appimagetool || (echo &quot;Installing appimagetool...&quot; &amp;&amp; sudo apt-get update &amp;&amp; sudo apt-get install -y libfuse2 fuse &amp;&amp; wget -O /tmp/appimagetool https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage &amp;&amp; chmod +x /tmp/appimagetool &amp;&amp; sudo mv /tmp/appimagetool /usr/local/bin/)'" />-->
<!-- </exec>-->
<!-- -->
<!-- &lt;!&ndash; Build AppImage &ndash;&gt;-->
<!-- <exec executable="bash" failonerror="true" osfamily="unix">-->
<!-- <arg line="-c 'appimagetool ${appdir.dir} ${project.build.directory}/${appimage.output.file}'" />-->
<!-- </exec>-->
<!-- Create zip package -->
<zip destfile="${project.build.directory}/diylc-${project.version}-linux.zip">
<zipfileset file="${project.build.directory}/${appimage.output.file}"
filemode="755" />
</zip>
<echo message="AppImage build completed successfully! Output: ${project.build.directory}/${appimage.output.file}" />
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- Windows InnoSetup build profile using Docker -->
<profile>
<id>win64-installer</id>
<properties>
<jdk.version>17.0.14+7</jdk.version>
<jdk.version.file>17.0.14_7</jdk.version.file>
<jdk.archive.win64>OpenJDK17U-jre_x64_windows_hotspot_${jdk.version.file}.zip</jdk.archive.win64>
<jdk.url.win64>https://github.com/adoptium/temurin17-binaries/releases/download/jdk-${jdk.version}/${jdk.archive.win64}</jdk.url.win64>
</properties>
<build>
<plugins>
<!-- Download and extract JRE -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>download-extract-jre</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- Clean old jre_win folder -->
<delete dir="${project.build.directory}/jre_win" />
<!-- Create folder to hold extracted JRE -->
<mkdir dir="${project.build.directory}/jre_win" />
<!-- Download JRE 64-bit for Windows -->
<mkdir dir="${project.build.directory}/downloads" />
<get src="${jdk.url.win64}"
dest="${project.build.directory}/downloads/${jdk.archive.win64}"
usetimestamp="true" />
<!-- Extract JRE into jre_win -->
<unzip src="${project.build.directory}/downloads/${jdk.archive.win64}"
dest="${project.build.directory}/jre_win" />
<!-- Move files up one level -->
<move todir="${project.build.directory}/jre_win">
<fileset dir="${project.build.directory}/jre_win/jdk-${jdk.version}-jre" />
</move>
<!-- Remove empty top-level folder -->
<delete dir="${project.build.directory}/jre_win/jdk-${jdk.version}-jre" />
</target>
</configuration>
</execution>
</executions>
</plugin>
<!-- Run InnoSetup -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>build-windows-installer</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>docker</executable>
<arguments>
<argument>run</argument>
<argument>--rm</argument>
<argument>-v</argument>
<argument>${project.basedir}:/workspace</argument>
<argument>amake/innosetup</argument>
<argument>/Ddiylcver=${project.version}</argument>
<argument>/Darch=x64</argument>
<argument>/workspace/deploy/win/install.iss</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
@@ -17,11 +17,11 @@
*/
package org.diylc;
import java.awt.Desktop;
import java.io.File;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
@@ -31,6 +31,13 @@ import org.apache.log4j.PropertyConfigurator;
import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.appframework.miscutils.PropertyInjector;
import org.diylc.appframework.miscutils.Utils;
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/DIYLCStarter.java
=======
import org.diylc.config.DIYLCConfig;
import org.diylc.swingframework.export.DrawingExporter;
import org.diylc.swingframework.fonts.FontOptimizer;
import com.thoughtworks.xstream.XStream;
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/DIYLCStarter.java
import org.diylc.common.IPlugInPort;
import org.diylc.core.IView;
import org.diylc.lang.LangUtil;
@@ -39,12 +46,16 @@ import org.diylc.serialization.ProjectFileManager;
import org.diylc.swing.gui.MainFrame;
import org.diylc.swing.gui.TemplateDialog;
import org.diylc.swing.plugins.file.ProjectDrawingProvider;
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/DIYLCStarter.java
import org.diylc.swingframework.export.DrawingExporter;
import org.diylc.swingframework.fonts.FontOptimizer;
import com.apple.eawt.AppEvent;
import com.apple.eawt.Application;
import com.thoughtworks.xstream.XStream;
import ca.cgjennings.jvm.JarLoader;
=======
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/DIYLCStarter.java
/**
* Main class that runs DIYLC.
@@ -179,8 +190,15 @@ public class DIYLCStarter {
LOG.info("Creating the main frame...");
MainFrame mainFrame = new MainFrame();
Presenter presenter = mainFrame.getPresenter();
// Disable web server since this is a Swing app
ConfigurableApplicationContext context = new SpringApplicationBuilder(DIYLCConfig.class, DIYLCSwingConfig.class)
.web(WebApplicationType.NONE)
.headless(false)
.run(args);
// Get MainFrame from Spring context and show it
MainFrame mainFrame = context.getBean(MainFrame.class);
Presenter presenter = context.getBean(Presenter.class);
LOG.info("Main frame created.");
// mainFrame.setLocationRelativeTo(null);
@@ -204,16 +222,8 @@ public class DIYLCStarter {
if (Utils.isMac()) {
LOG.info("Setting up open file handler for Mac...");
SwingUtilities.invokeLater(() -> {
Application.getApplication().setOpenFileHandler((AppEvent.OpenFilesEvent ofe) -> {
List<File> files = ofe.getFiles();
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.");
});
// On macOS this function is called when a new file is opened.
Desktop.getDesktop().setOpenFileHandler(new OpenDIYFilesHandler(presenter));
});
}
@@ -0,0 +1,46 @@
package org.diylc;
import org.diylc.appframework.simplemq.MessageDispatcher;
import org.diylc.common.EventType;
import org.diylc.common.IPlugIn;
import org.diylc.presenter.*;
import org.diylc.swing.actions.file.ImportFileView;
import org.diylc.swing.gui.DummyView;
import org.diylc.swing.loadline.LoadlineEditorFrame;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.*;
import org.diylc.config.DIYLCConfig;
import org.diylc.swing.gui.MainFrame;
import org.diylc.core.IView;
import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.swing.plugins.PluginConfig;
import java.util.List;
@Configuration
//@Import({DIYLCConfig.class})
public class DIYLCSwingConfig {
@Primary
@Bean
public IView mainFrame(@Lazy
Presenter presenter, IConfigurationManager configurationManager, List<IPlugIn> plugins) {
return new MainFrame(presenter, configurationManager, plugins);
}
@Bean
public IView importFileView() {
return new ImportFileView();
}
@Bean
public IView dummyView() {
return new DummyView();
}
@Bean
public IView loadlineView(Presenter presenter) {
return new LoadlineEditorFrame(presenter);
}
}
@@ -0,0 +1,35 @@
package org.diylc;
import java.awt.desktop.OpenFilesEvent;
import java.awt.desktop.OpenFilesHandler;
import java.io.File;
import java.util.List;
import org.apache.log4j.Logger;
import org.diylc.common.IPlugInPort;
public class OpenDIYFilesHandler implements OpenFilesHandler {
private static final Logger LOG = Logger.getLogger(DIYLCStarter.class);
private final IPlugInPort presenter;
public OpenDIYFilesHandler(IPlugInPort presenter) {
super();
this.presenter = presenter;
}
@Override
public void openFiles(OpenFilesEvent e) {
List<File> files = e.getFiles();
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.");
}
}
@@ -9,11 +9,15 @@ import java.util.Set;
import javax.swing.AbstractAction;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
import org.diylc.DIYLCSwingConfig;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
import org.diylc.clipboard.ComponentTransferableFactory;
import org.diylc.common.IPlugInPort;
import org.diylc.common.ITask;
import org.diylc.common.PropertyWrapper;
import org.diylc.config.DIYLCConfig;
import org.diylc.config.ImportFileDIYLCConfig;
import org.diylc.core.IView;
import org.diylc.presenter.Presenter;
import org.diylc.swing.ActionFactory;
@@ -21,6 +25,9 @@ import org.diylc.swing.ISwingUI;
import org.diylc.swing.gui.DialogFactory;
import org.diylc.swing.images.IconLoader;
import org.diylc.swing.plugins.file.FileFilterEnum;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
public class ImportAction extends AbstractAction {
@@ -34,35 +41,14 @@ public class ImportAction extends AbstractAction {
super();
this.plugInPort = plugInPort;
this.swingUI = swingUI;
this.presenter = new Presenter(new IView() {
@Override
public int showConfirmDialog(String message, String title, int optionType,
int messageType) {
return JOptionPane.showConfirmDialog(null, message, title, optionType, messageType);
}
ConfigurableApplicationContext context = new SpringApplicationBuilder(ImportFileDIYLCConfig.class, DIYLCSwingConfig.class)
.web(WebApplicationType.NONE)
.headless(false)
.run();
@Override
public void showMessage(String message, String title, int messageType) {
JOptionPane.showMessageDialog(null, message, title, messageType);
}
this.presenter = context.getBean(Presenter.class);
@Override
public String showInputDialog(String message, String title) {
return JOptionPane.showInputDialog(null, message, title, JOptionPane.QUESTION_MESSAGE);
}
@Override
public File promptFileSave() {
return null;
}
@Override
public boolean editProperties(List<PropertyWrapper> properties,
Set<PropertyWrapper> defaultedProperties, String title) {
return false;
}
}, InMemoryConfigurationManager.getInstance());
putValue(AbstractAction.NAME, "Import");
putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_I,
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
@@ -0,0 +1,41 @@
package org.diylc.swing.actions.file;
import org.diylc.common.PropertyWrapper;
import org.diylc.core.IView;
import org.springframework.stereotype.Component;
import javax.swing.*;
import java.io.File;
import java.util.List;
import java.util.Set;
@Component
public class ImportFileView implements IView {
@Override
public int showConfirmDialog(String message, String title, int optionType,
int messageType) {
return JOptionPane.showConfirmDialog(null, message, title, optionType, messageType);
}
@Override
public void showMessage(String message, String title, int messageType) {
JOptionPane.showMessageDialog(null, message, title, messageType);
}
@Override
public String showInputDialog(String message, String title) {
return JOptionPane.showInputDialog(null, message, title, JOptionPane.QUESTION_MESSAGE);
}
@Override
public File promptFileSave() {
return null;
}
@Override
public boolean editProperties(List< PropertyWrapper > properties,
Set<PropertyWrapper> defaultedProperties, String title) {
return false;
}
}
@@ -88,6 +88,41 @@ import org.diylc.swing.plugins.toolbox.ToolBox;
import org.diylc.swing.plugins.tree.ComponentTree;
import org.diylc.swingframework.ButtonDialog;
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/gui/MainFrame.java
=======
import org.diylc.common.BadPositionException;
import org.diylc.common.EventType;
import org.diylc.common.IPlugIn;
import org.diylc.common.IPlugInPort;
import org.diylc.common.ITask;
import org.diylc.common.PropertyWrapper;
import org.diylc.core.IView;
import org.diylc.core.images.IconLoader;
import org.diylc.lang.LangUtil;
import org.diylc.presenter.Presenter;
import org.diylc.swing.ISwingUI;
import org.diylc.swing.gui.actionbar.ActionBarPlugin;
import org.diylc.swing.gui.editor.PropertyEditorDialog;
import org.diylc.swing.plugins.autosave.AutoSavePlugin;
import org.diylc.swing.plugins.canvas.CanvasPlugin;
import org.diylc.swing.plugins.cloud.CloudPlugIn;
import org.diylc.swing.plugins.config.ConfigPlugin;
import org.diylc.swing.plugins.edit.EditMenuPlugin;
import org.diylc.swing.plugins.explorer.ExplorerPlugin;
import org.diylc.swing.plugins.file.FileFilterEnum;
import org.diylc.swing.plugins.file.FileMenuPlugin;
import org.diylc.swing.plugins.help.HelpMenuPlugin;
import org.diylc.swing.plugins.layers.LayersMenuPlugin;
import org.diylc.swing.plugins.statusbar.StatusBar;
import org.diylc.swing.plugins.test.TestMenuPlugin;
import org.diylc.swing.plugins.toolbox.ToolBox;
import org.diylc.swing.plugins.tree.ComponentTree;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.diylc.swing.plugins.PluginFactory;
@Component
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/gui/MainFrame.java
public class MainFrame extends JFrame implements ISwingUI {
private static final Logger LOG = Logger.getLogger(MainFrame.class);
@@ -100,7 +135,8 @@ public class MainFrame extends JFrame implements ISwingUI {
private JPanel topPanel;
private JPanel bottomPanel;
private Presenter presenter;
private final Presenter presenter;
private final IConfigurationManager configManager;
private JMenuBar mainMenuBar;
private Map<String, JMenu> menuMap;
@@ -108,26 +144,47 @@ public class MainFrame extends JFrame implements ISwingUI {
private CanvasPlugin canvasPlugin;
public MainFrame() {
@Autowired
public MainFrame(
Presenter presenter,
IConfigurationManager configManager,
List<IPlugIn> plugins) { // Spring will inject all IPlugIn implementations
super("DIYLC 4");
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/gui/MainFrame.java
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
=======
this.presenter = presenter;
this.configManager = configManager;
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/gui/MainFrame.java
setPreferredSize(new Dimension(1024, 700));
createBasePanels();
menuMap = new HashMap<String, JMenu>();
buttonGroupMap = new HashMap<String, ButtonGroup>();
setIconImages(Arrays.asList(IconLoader.IconSmall.getImage(), IconLoader.IconMedium.getImage(),
IconLoader.IconLarge.getImage()));
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/gui/MainFrame.java
DialogFactory.getInstance().initialize(this);
IConfigurationManager<?> configManager = ConfigurationManager.getInstance();
=======
DialogFactory.getInstance().initialize(this);
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/gui/MainFrame.java
this.presenter = new Presenter(this, configManager, true);
for (IPlugIn plugIn : plugins) {
presenter.installPlugin(() -> plugIn);
}
presenter.installPlugin(() -> new ToolBox(this));
// this.canvasPlugin = (CanvasPlugin) plugins.stream()
// .filter(x -> CanvasPlugin.class.isInstance(x))
// .findFirst().orElseThrow();
presenter.installPlugin(() -> new ToolBox(this));
presenter.installPlugin(() -> new FileMenuPlugin(this));
presenter.installPlugin(() -> new EditMenuPlugin(this));
presenter.installPlugin(() -> new ConfigPlugin(this));
presenter.installPlugin(() -> new LayersMenuPlugin(this));
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/gui/MainFrame.java
presenter.installPlugin(() -> new CloudPlugIn(this));
if ("true".equalsIgnoreCase(System.getProperty("org.diylc.enableTests")))
presenter.installPlugin(() -> new TestMenuPlugin(this));
@@ -144,6 +201,20 @@ public class MainFrame extends JFrame implements ISwingUI {
presenter.installPlugin(() -> new FramePlugin());
presenter.installPlugin(() -> new AutoSavePlugin(this));
=======
presenter.installPlugin(() -> new CloudPlugIn(this));
if ("true".equalsIgnoreCase(System.getProperty("org.diylc.enableTests")))
presenter.installPlugin(() -> new TestMenuPlugin(this));
presenter.installPlugin(() -> new HelpMenuPlugin(this));
presenter.installPlugin(() -> new ActionBarPlugin(this));
presenter.installPlugin(() -> new StatusBar(this));
canvasPlugin = new CanvasPlugin(this, configManager);
presenter.installPlugin(() -> canvasPlugin);
presenter.installPlugin(() -> new ComponentTree(this, canvasPlugin.getCanvasPanel()));
presenter.installPlugin(() -> new ExplorerPlugin(this, canvasPlugin.getCanvasPanel()));
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/gui/MainFrame.java
presenter.createNewProject();
@@ -21,6 +21,7 @@
*/
package org.diylc.swing.gui;
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/gui/TemplateDialog.java
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
@@ -58,7 +59,52 @@ import org.diylc.common.DrawOption;
import org.diylc.common.IPlugInPort;
import org.diylc.common.PropertyWrapper;
import org.diylc.core.IView;
=======
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.apache.log4j.Logger;
import org.diylc.DIYLCSwingConfig;
import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
import org.diylc.common.DrawOption;
import org.diylc.common.IPlugInPort;
import org.diylc.common.PropertyWrapper;
import org.diylc.config.ImportFileDIYLCConfig;
import org.diylc.core.IView;
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/gui/TemplateDialog.java
import org.diylc.presenter.Presenter;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
public class TemplateDialog extends JDialog {
@@ -85,13 +131,13 @@ public class TemplateDialog extends JDialog {
setModal(true);
setResizable(false);
this.plugInPort = plugInPort;
this.presenter = new Presenter(new IView() {
@Override
public int showConfirmDialog(String message, String title, int optionType, int messageType) {
return JOptionPane.showConfirmDialog(TemplateDialog.this, message, title, optionType, messageType);
}
ConfigurableApplicationContext context = new SpringApplicationBuilder(ImportFileDIYLCConfig.class, DIYLCSwingConfig.class)
.web(WebApplicationType.NONE)
.headless(false)
.run();
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/gui/TemplateDialog.java
@Override
public void showMessage(String message, String title, int messageType) {
JOptionPane.showMessageDialog(TemplateDialog.this, message, title, messageType);
@@ -101,17 +147,10 @@ public class TemplateDialog extends JDialog {
public String showInputDialog(String message, String title) {
return JOptionPane.showInputDialog(null, message, title, JOptionPane.QUESTION_MESSAGE);
}
=======
this.presenter = context.getBean(Presenter.class);
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/gui/TemplateDialog.java
@Override
public File promptFileSave() {
return null;
}
@Override
public boolean editProperties(List<PropertyWrapper> properties, Set<PropertyWrapper> defaultedProperties, String title) {
return false;
}
}, InMemoryConfigurationManager.getInstance());
// this.presenter.installPlugin(new IPlugIn() {
//
// @Override
@@ -47,12 +47,14 @@ import org.diylc.swing.ActionFactory;
import org.diylc.swing.ISwingUI;
import org.diylc.swing.images.IconLoader;
import org.diylc.swing.plugins.help.HelpMenuPlugin;
import org.springframework.stereotype.Component;
/**
* Mini toolbar with common actions
*
* @author Branislav Stojkovic
*/
@Component
public class ActionBarPlugin implements IPlugIn {
private static final Logger LOG = Logger.getLogger(ActionBarPlugin.class);
@@ -32,9 +32,27 @@ import javax.swing.JTextField;
import javax.swing.UIManager;
import org.apache.log4j.Logger;
import org.apache.poi.util.IOUtils;
import org.diylc.DIYLCSwingConfig;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
import org.diylc.appframework.miscutils.Utils;
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/loadline/LoadlineEditorFrame.java
=======
import org.diylc.components.connectivity.Dot;
import org.diylc.components.connectivity.Line;
import org.diylc.components.misc.Image;
import org.diylc.components.misc.Image.ImageSizingMode;
import org.diylc.components.misc.Label;
import org.diylc.components.misc.LoadlineCurve;
import org.diylc.components.misc.LoadlineEntity;
import org.diylc.config.ImportFileDIYLCConfig;
import org.diylc.config.LoadlineDIYLCConfig;
import org.diylc.swingframework.ButtonDialog;
import org.diylc.swingframework.DoubleTextField;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/loadline/LoadlineEditorFrame.java
import org.diylc.common.EventType;
import org.diylc.common.HorizontalAlignment;
import org.diylc.common.IPlugIn;
@@ -63,11 +81,19 @@ import org.diylc.swing.gui.editor.PropertyEditorDialog;
import org.diylc.swing.images.IconLoader;
import org.diylc.swing.plugins.canvas.CanvasPanel;
import org.diylc.swing.plugins.file.FileFilterEnum;
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/loadline/LoadlineEditorFrame.java
import org.diylc.swingframework.ButtonDialog;
import org.diylc.swingframework.DoubleTextField;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
=======
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/loadline/LoadlineEditorFrame.java
@Component
public class LoadlineEditorFrame extends JFrame implements IView {
private static final long serialVersionUID = 1L;
@@ -94,7 +120,7 @@ public class LoadlineEditorFrame extends JFrame implements IView {
private int xIncrement;
private int yIncrement;
public LoadlineEditorFrame() {
public LoadlineEditorFrame(Presenter plugInPort) {
super("Loadline Editor");
setIconImage(IconLoader.Loadline.getImage());
setResizable(false);
@@ -116,8 +142,9 @@ public class LoadlineEditorFrame extends JFrame implements IView {
}
});
this.plugInPort = plugInPort;
this.plugInPort = new Presenter(this, configManager);
this.plugInPort.installPlugin(() -> new IPlugIn() {
@SuppressWarnings("incomplete-switch")
@@ -711,7 +738,13 @@ public class LoadlineEditorFrame extends JFrame implements IView {
@Override
public void actionPerformed(ActionEvent e) {
new LoadlineEditorFrame().setVisible(true);
ConfigurableApplicationContext context = new SpringApplicationBuilder(LoadlineDIYLCConfig.class, DIYLCSwingConfig.class)
.web(WebApplicationType.NONE)
.headless(false)
.run();
IView view = context.getBean(IView.class);
((LoadlineEditorFrame)view).setVisible(true);
}
}
}
@@ -0,0 +1,10 @@
package org.diylc.swing.plugins;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ComponentScan;
@Configuration
@ComponentScan("org.diylc.swing.plugins")
public class PluginConfig {
// Plugin-specific beans can be defined here if needed
}
@@ -0,0 +1,85 @@
package org.diylc.swing.plugins;
import org.diylc.swing.ISwingUI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.swing.gui.*;
import org.diylc.swing.plugins.canvas.CanvasPlugin;
import org.diylc.swing.plugins.file.FileMenuPlugin;
import org.diylc.swing.plugins.edit.EditMenuPlugin;
import org.diylc.swing.plugins.config.ConfigPlugin;
import org.diylc.swing.plugins.layers.LayersMenuPlugin;
import org.diylc.swing.plugins.cloud.CloudPlugIn;
import org.diylc.swing.plugins.help.HelpMenuPlugin;
import org.diylc.swing.plugins.test.TestMenuPlugin;
import org.diylc.swing.plugins.statusbar.StatusBar;
import org.diylc.swing.plugins.tree.ComponentTree;
import org.diylc.swing.plugins.explorer.ExplorerPlugin;
import org.diylc.swing.plugins.toolbox.ToolBox;
import org.diylc.swing.gui.actionbar.ActionBarPlugin;
import javax.swing.*;
@Component
public class PluginFactory {
private final IConfigurationManager configManager;
@Autowired
public PluginFactory(IConfigurationManager configManager) {
this.configManager = configManager;
}
public CanvasPlugin createCanvasPlugin(ISwingUI ui) {
return new CanvasPlugin(ui, configManager);
}
public FileMenuPlugin createFileMenuPlugin(ISwingUI ui) {
return new FileMenuPlugin(ui);
}
public EditMenuPlugin createEditMenuPlugin(ISwingUI ui) {
return new EditMenuPlugin(ui);
}
public ConfigPlugin createConfigPlugin(ISwingUI ui) {
return new ConfigPlugin(ui);
}
public LayersMenuPlugin createLayersMenuPlugin(ISwingUI ui) {
return new LayersMenuPlugin(ui);
}
public CloudPlugIn createCloudPlugIn(ISwingUI ui) {
return new CloudPlugIn(ui);
}
public TestMenuPlugin createTestMenuPlugin(ISwingUI ui) {
return new TestMenuPlugin(ui);
}
public HelpMenuPlugin createHelpMenuPlugin(ISwingUI ui) {
return new HelpMenuPlugin(ui);
}
public ActionBarPlugin createActionBarPlugin(ISwingUI ui) {
return new ActionBarPlugin(ui);
}
public StatusBar createStatusBar(ISwingUI ui) {
return new StatusBar(ui);
}
public ToolBox createToolBox(ISwingUI ui) {
return new ToolBox(ui);
}
public ComponentTree createComponentTree(ISwingUI ui, JComponent canvasPanel) {
return new ComponentTree(ui, canvasPanel);
}
public ExplorerPlugin createExplorerPlugin(ISwingUI ui, JComponent canvasPanel) {
return new ExplorerPlugin(ui, canvasPanel);
}
}
@@ -36,7 +36,9 @@ import org.diylc.common.EventType;
import org.diylc.common.IPlugIn;
import org.diylc.common.IPlugInPort;
import org.diylc.core.IView;
import org.springframework.stereotype.Component;
@Component
public class AutoSavePlugin implements IPlugIn {
private static final String AUTO_SAVE_PATH = Utils.getUserDataDirectory("diylc") + "backup";
@@ -52,6 +52,7 @@ import org.diylc.presenter.Presenter;
import org.diylc.swing.ISwingUI;
import org.diylc.swing.gui.ComponentPopupMenu;
import org.diylc.swing.plugins.file.ProjectDrawingProvider;
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java
import org.diylc.swingframework.ruler.IRulerListener;
import org.diylc.swingframework.ruler.Ruler.InchSubdivision;
import org.diylc.swingframework.ruler.RulerScrollPane;
@@ -59,7 +60,11 @@ import com.guigarage.gestures.GestureMagnificationEvent;
import com.guigarage.gestures.GestureMagnificationListener;
import com.guigarage.gestures.GestureUtilities;
import com.guigarage.gestures.GesturesNotSupportedException;
=======
import org.springframework.stereotype.Component;
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/canvas/CanvasPlugin.java
@Component
public class CanvasPlugin implements IPlugIn{
private static final Logger LOG = Logger.getLogger(CanvasPlugin.class);
@@ -21,6 +21,7 @@
*/
package org.diylc.swing.plugins.cloud;
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/plugins/cloud/CloudPlugIn.java
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.ArrayList;
@@ -52,6 +53,48 @@ import org.diylc.swing.plugins.cloud.view.browser.UploadManagerFrame;
import org.diylc.swing.plugins.file.FileFilterEnum;
import org.diylc.swingframework.ButtonDialog;
=======
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.ListIterator;
import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import org.apache.log4j.Logger;
import org.diylc.DIYLCSwingConfig;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
import org.diylc.config.DummyViewDIYLCConfig;
import org.diylc.config.ImportFileDIYLCConfig;
import org.diylc.swingframework.ButtonDialog;
import org.diylc.common.EventType;
import org.diylc.common.IPlugIn;
import org.diylc.common.IPlugInPort;
import org.diylc.common.ITask;
import org.diylc.core.IView;
import org.diylc.plugins.cloud.presenter.CloudException;
import org.diylc.plugins.cloud.presenter.CloudPresenter;
import org.diylc.presenter.Presenter;
import org.diylc.swing.ISwingUI;
import org.diylc.swing.gui.DialogFactory;
import org.diylc.swing.gui.DummyView;
import org.diylc.utils.IconLoader;
import org.diylc.swing.plugins.cloud.view.ChangePasswordDialog;
import org.diylc.swing.plugins.cloud.view.LoginDialog;
import org.diylc.swing.plugins.cloud.view.UploadDialog;
import org.diylc.swing.plugins.cloud.view.UserEditDialog;
import org.diylc.swing.plugins.cloud.view.browser.CloudBrowserFrame;
import org.diylc.swing.plugins.cloud.view.browser.UploadManagerFrame;
import org.diylc.swing.plugins.file.FileFilterEnum;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;
@Component
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/CloudPlugIn.java
public class CloudPlugIn implements IPlugIn {
private static final String ONLINE_TITLE = "Project Cloud";
@@ -80,7 +123,18 @@ public class CloudPlugIn implements IPlugIn {
super();
this.swingUI = swingUI;
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/plugins/cloud/CloudPlugIn.java
this.thumbnailPresenter = new Presenter(new DummyView(), InMemoryConfigurationManager.getInstance());
=======
ConfigurableApplicationContext context = new SpringApplicationBuilder(DummyViewDIYLCConfig.class, DIYLCSwingConfig.class)
.web(WebApplicationType.NONE)
.headless(false)
.run();
this.thumbnailPresenter = context.getBean(Presenter.class);
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/CloudPlugIn.java
this.thumbnailGenerator = new ThumbnailGenerator(thumbnailPresenter);
swingUI.injectMenuAction(getLibraryAction(), ONLINE_TITLE);
@@ -50,7 +50,14 @@ import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import javax.swing.text.DefaultCaret;
import org.apache.log4j.Logger;
import org.diylc.DIYLCSwingConfig;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/plugins/cloud/view/browser/ResultsScrollPanel.java
=======
import org.diylc.config.DummyViewDIYLCConfig;
import org.diylc.swingframework.ButtonDialog;
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/view/browser/ResultsScrollPanel.java
import org.diylc.common.IPlugInPort;
import org.diylc.common.ITask;
import org.diylc.common.PropertyWrapper;
@@ -72,6 +79,9 @@ import org.diylc.swing.plugins.cloud.view.CommentDialog;
import org.diylc.swing.plugins.file.FileFilterEnum;
import org.diylc.swingframework.ButtonDialog;
import org.diylc.utils.Pair;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
/**
* Component that is capable of showing a list of {@link ProjectEntity} objects. Can work in paging
@@ -398,9 +408,15 @@ public class ResultsScrollPanel extends JScrollPane {
+ project.getName()
+ "\" with a new file?\nThis opperation is irreversible. Once replaced, the old version of the project cannot be restored.",
"Replace Project", IView.YES_NO_OPTION, IView.QUESTION_MESSAGE) == IView.YES_OPTION) {
final Presenter thumbnailPresenter =
new Presenter(new DummyView(), InMemoryConfigurationManager.getInstance());
ConfigurableApplicationContext context = new SpringApplicationBuilder(DummyViewDIYLCConfig.class, DIYLCSwingConfig.class)
.web(WebApplicationType.NONE)
.headless(false)
.run();
Presenter thumbnailPresenter = context.getBean(Presenter.class);
final ThumbnailGenerator thumbnailGenerator = new ThumbnailGenerator(thumbnailPresenter);
final File file =
@@ -34,13 +34,18 @@ import org.diylc.swing.IDynamicSubmenuHandler;
import org.diylc.swing.ISwingUI;
import org.diylc.swing.images.IconLoader;
import org.diylc.swing.loadline.LoadlineEditorFrame;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.common.AbstractPlugin;
/**
* Entry point class for File management utilities.
*
* @author Branislav Stojkovic
*/
public class FileMenuPlugin implements IPlugIn, IDynamicSubmenuHandler {
@Component
public class FileMenuPlugin extends AbstractPlugin implements IDynamicSubmenuHandler {
private static final Logger LOG = Logger.getLogger(FileMenuPlugin.class);
@@ -56,6 +61,7 @@ public class FileMenuPlugin implements IPlugIn, IDynamicSubmenuHandler {
private ISwingUI swingUI;
private IPlugInPort plugInPort;
@Autowired
public FileMenuPlugin(ISwingUI swingUI) {
super();
this.swingUI = swingUI;
@@ -130,7 +136,7 @@ public class FileMenuPlugin implements IPlugIn, IDynamicSubmenuHandler {
@Override
public EnumSet<EventType> getSubscribedEventTypes() {
return null;
return EnumSet.of(EventType.FILE_STATUS_CHANGED);
}
@Override
@@ -21,6 +21,7 @@
*/
package org.diylc.swing.plugins.file;
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/swing/plugins/file/ProjectPreview.java
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
@@ -44,6 +45,39 @@ import org.diylc.serialization.ProjectFileManager;
import org.diylc.swing.gui.DummyView;
import org.diylc.swingframework.IFileChooserAccessory;
=======
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.FileInputStream;
import java.util.EnumSet;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.diylc.DIYLCSwingConfig;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
import org.diylc.config.DummyViewDIYLCConfig;
import org.diylc.config.ImportFileDIYLCConfig;
import org.diylc.swingframework.IFileChooserAccessory;
import org.diylc.common.DrawOption;
import org.diylc.common.IPlugInPort;
import org.diylc.core.Project;
import org.diylc.presenter.Presenter;
import org.diylc.serialization.ProjectFileManager;
import org.diylc.swing.gui.DummyView;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/file/ProjectPreview.java
/**
* {@link JComponent} that shows preview of the selected project in {@link JFileChooser}. It's
* hooked onto {@link JFileChooser} as {@link PropertyChangeListener} and refreshes when file is
@@ -64,7 +98,13 @@ public class ProjectPreview extends JPanel implements PropertyChangeListener, IF
super();
setPreferredSize(new Dimension(140, 128));
presenter = new Presenter(new DummyView(), InMemoryConfigurationManager.getInstance());
ConfigurableApplicationContext context = new SpringApplicationBuilder(DummyViewDIYLCConfig.class, DIYLCSwingConfig.class)
.web(WebApplicationType.NONE)
.headless(false)
.run();
this.presenter = context.getBean(Presenter.class);
emptyProject = new Project();
emptyProject.setTitle("");
@@ -27,6 +27,7 @@ import java.net.URL;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
<<<<<<< Updated upstream:diylc/diylc-swing/src/org/diylc/utils/BatchConverter.java
import org.diylc.DIYLCStarter;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
import org.diylc.presenter.Presenter;
@@ -61,3 +62,50 @@ public class BatchConverter {
}
}
=======
import org.diylc.DIYLCSwingConfig;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
import org.diylc.DIYLCStarter;
import org.diylc.config.ImportFileDIYLCConfig;
import org.diylc.presenter.Presenter;
import org.diylc.swing.gui.DummyView;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
public class BatchConverter {
private static final Logger LOG = Logger.getLogger(BatchConverter.class);
public static void main(String[] args) {
URL url = DIYLCStarter.class.getResource("/log4j.properties");
Properties properties = new Properties();
try (InputStream inputStream = url.openStream()) {
properties.load(inputStream);
PropertyConfigurator.configure(properties);
} catch (Exception e) {
LOG.error("Could not initialize log4j configuration", e);
}
File dir = new File("C:\\Users\\Branislav Stojkovic\\Documents\\layouts_v1");
File[] matchingFiles = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return true;
}
});
ConfigurableApplicationContext context = new SpringApplicationBuilder(ImportFileDIYLCConfig.class, DIYLCSwingConfig.class)
.web(WebApplicationType.NONE)
.headless(false)
.run();
Presenter presenter = context.getBean(Presenter.class);
for (File file : matchingFiles) {
if (file.getName() != "" && file.getName() != "." && file.getName() != ".." && !file.isDirectory())
presenter.loadProjectFromFile(file.getAbsolutePath());
presenter.saveProjectToFile(file.getParentFile().getAbsolutePath() + "\\converted\\" + file.getName(), false);
}
}
}
>>>>>>> Stashed changes:diylc/diylc-swing/src/main/java/org/diylc/utils/BatchConverter.java
@@ -20,19 +20,40 @@ import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
import org.diylc.appframework.simplemq.MessageDispatcher;
import org.diylc.appframework.update.VersionNumber;
<<<<<<< Updated upstream:diylc/diylc-swing/test/org/diylc/RegressionTestRunner.java
=======
import org.diylc.common.EventType;
import org.diylc.config.DummyViewDIYLCConfig;
import org.diylc.config.ImportFileDIYLCConfig;
import org.diylc.presenter.*;
import org.diylc.swingframework.export.DrawingExporter;
>>>>>>> Stashed changes:diylc/diylc-swing/src/test/java/org/diylc/RegressionTestRunner.java
import org.diylc.common.IPlugInPort;
import org.diylc.core.IView;
import org.diylc.netlist.Netlist;
import org.diylc.netlist.NetlistException;
<<<<<<< Updated upstream:diylc/diylc-swing/test/org/diylc/RegressionTestRunner.java
import org.diylc.presenter.Presenter;
import org.diylc.swing.plugins.file.ProjectDrawingProvider;
import org.diylc.swingframework.export.DrawingExporter;
=======
>>>>>>> Stashed changes:diylc/diylc-swing/src/test/java/org/diylc/RegressionTestRunner.java
import com.github.romankh3.image.comparison.ImageComparison;
import com.github.romankh3.image.comparison.ImageComparisonUtil;
import com.github.romankh3.image.comparison.model.ImageComparisonResult;
import com.github.romankh3.image.comparison.model.ImageComparisonState;
<<<<<<< Updated upstream:diylc/diylc-swing/test/org/diylc/RegressionTestRunner.java
=======
import org.diylc.swing.plugins.file.ProjectDrawingProvider;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
>>>>>>> Stashed changes:diylc/diylc-swing/src/test/java/org/diylc/RegressionTestRunner.java
public class RegressionTestRunner {
@@ -79,7 +100,8 @@ public class RegressionTestRunner {
private static void createReport(List<RegressionTestResult> results, String basePath)
throws IOException {
IView view = new MockView();
Presenter presenter = new Presenter(view, InMemoryConfigurationManager.getInstance());
Presenter presenter = TestBase.getPresenter(view);
VersionNumber currentVersionNumber = presenter.getCurrentVersionNumber();
String fileName = basePath + File.separator + "reports" + File.separator
@@ -161,7 +183,7 @@ public class RegressionTestRunner {
String prefix = "File: " + file.getName() + " status: ";
try {
MockView view = new MockView();
Presenter presenter = new Presenter(view, InMemoryConfigurationManager.getInstance());
Presenter presenter = TestBase.getPresenter(view);
ProjectDrawingProvider drawingProvider =
new ProjectDrawingProvider(presenter, false, true, false);
presenter.loadProjectFromFile(file.getAbsolutePath());
@@ -1,3 +1,4 @@
<<<<<<< Updated upstream:diylc/diylc-swing/test/org/diylc/TestBase.java
package org.diylc;
import java.awt.Point;
@@ -49,3 +50,82 @@ public class TestBase {
presenter.mouseClicked(point2, MouseEvent.BUTTON1, false, false, false, 1);
}
}
=======
package org.diylc;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.io.InputStream;
import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.apache.log4j.PropertyConfigurator;
import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
import org.diylc.appframework.simplemq.MessageDispatcher;
import org.diylc.common.ComponentType;
import org.diylc.config.DummyViewDIYLCConfig;
import org.diylc.core.IView;
import org.diylc.presenter.*;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
public class TestBase {
protected Presenter presenter;
protected IView view;
public TestBase() {
URL url = DIYLCStarter.class.getResource("/log4j.properties");
Properties properties = new Properties();
try (InputStream inputStream = url.openStream()) {
properties.load(inputStream);
PropertyConfigurator.configure(properties);
} catch (Exception e) {
System.err.println("Could not initialize log4j configuration: " + e.getMessage());
}
ConfigurationManager.getInstance().initialize("diylc-test");
view = new MockView();
presenter = getPresenter(view);
}
protected void instantiateOneClick(String category, String name, Point point1) {
Map<String, List<ComponentType>> componentTypes = presenter.getComponentTypes();
ComponentType resistorType = componentTypes.get(category).stream().filter(x -> x.getName().equals(name)).findFirst().get();
presenter.setNewComponentTypeSlot(resistorType, null, null, false);
presenter.mouseClicked(point1, MouseEvent.BUTTON1, false, false, false, 1);
}
protected void instantiateTwoClick(String category, String name, Point point1, Point point2) {
Map<String, List<ComponentType>> componentTypes = presenter.getComponentTypes();
ComponentType resistorType = componentTypes.get(category).stream().filter(x -> x.getName().equals(name)).findFirst().get();
presenter.setNewComponentTypeSlot(resistorType, null, null, false);
presenter.mouseClicked(point1, MouseEvent.BUTTON1, false, false, false, 1);
presenter.mouseMoved(point2, false, false, false);
presenter.mouseClicked(point2, MouseEvent.BUTTON1, false, false, false, 1);
}
static Presenter getPresenter(IView view) {
ConfigurableApplicationContext context = new SpringApplicationBuilder(DummyViewDIYLCConfig.class, DIYLCSwingConfig.class)
.web(WebApplicationType.NONE)
.headless(false)
.run();
Presenter presenter = new Presenter(view,
context.getBean(IConfigurationManager.class),
context.getBean(MessageDispatcher.class),
context.getBean(DrawingService.class),
context.getBean(ProjectFileService.class),
context.getBean(InstantiationService.class),
context.getBean(VariantService.class),
context.getBean(BuildingBlockService.class),
false);
return presenter;
}
}
>>>>>>> Stashed changes:diylc/diylc-swing/src/test/java/org/diylc/TestBase.java
+1 -1
View File
@@ -4,7 +4,7 @@ AppVersion={#diylcver}
DefaultDirName={pf}\DIYLC
DefaultGroupName=DIY Layout Creator
UninstallDisplayIcon={app}\diylc.exe
Compression=lzma2
Compression=zip
SolidCompression=yes
OutputDir=../build
OutputBaseFilename=diylc