mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-07 12:24:58 +10:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8e20f61946 | |||
| ad9a575dc6 | |||
| def979adf8 | |||
| bd172ec0fd | |||
| b8a2e3a727 |
@@ -2,3 +2,4 @@
|
||||
*.iml
|
||||
*.eml
|
||||
/.project
|
||||
**/.DS_Store
|
||||
|
||||
+20
-20
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
package org.diylc.core;
|
||||
|
||||
public enum BoardUndersideDisplay {
|
||||
NONE, ABOVE, BELOW, LEFT, RIGHT;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString().charAt(0) + super.toString().substring(1).toLowerCase();
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package org.diylc.core;
|
||||
|
||||
import java.awt.geom.Rectangle2D;
|
||||
|
||||
public interface IBoard {
|
||||
|
||||
Rectangle2D getBoardRectangle();
|
||||
|
||||
BoardUndersideDisplay getBoardUndersideDisplay();
|
||||
|
||||
boolean shouldExportToGerber();
|
||||
}
|
||||
@@ -14,7 +14,6 @@ import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.diylc.core.ComponentState;
|
||||
import org.diylc.core.IBoard;
|
||||
import org.diylc.core.IDIYComponent;
|
||||
import org.diylc.core.IView;
|
||||
import org.diylc.core.Project;
|
||||
@@ -30,15 +29,12 @@ public class GerberExporter {
|
||||
|
||||
public static void exportGerber(String fileNameBase, Project currentProject, IView view,
|
||||
Graphics2D graphics2d, String diylcVersion) {
|
||||
|
||||
List<IBoard> gerberBoards =
|
||||
currentProject.getComponents().stream()
|
||||
.filter(IBoard.class::isInstance)
|
||||
.map(IBoard.class::cast)
|
||||
.filter(IBoard::shouldExportToGerber).collect(Collectors.toList());
|
||||
List<IGerberBoard> gerberBoards =
|
||||
currentProject.getComponents().stream().filter(c -> c instanceof IGerberBoard)
|
||||
.map(x -> (IGerberBoard) x).collect(Collectors.toList());
|
||||
|
||||
Map<IBoard, List<IDIYComponent<?>>> boardComponentMap =
|
||||
new HashMap<IBoard, List<IDIYComponent<?>>>();
|
||||
Map<IGerberBoard, List<IDIYComponent<?>>> boardComponentMap =
|
||||
new HashMap<IGerberBoard, List<IDIYComponent<?>>>();
|
||||
|
||||
// DefaultGerberBoard defaultGerberBoard = new DefaultGerberBoard();
|
||||
|
||||
@@ -47,7 +43,7 @@ public class GerberExporter {
|
||||
currentProject.getComponents().stream().filter(c -> c instanceof IGerberComponent)
|
||||
.forEach(c -> {
|
||||
Point2D firstPoint = c.getControlPoint(0);
|
||||
IBoard board = gerberBoards.stream()
|
||||
IGerberBoard board = gerberBoards.stream()
|
||||
.filter(b -> b.getBoardRectangle().contains(firstPoint)).findFirst().orElse(null);
|
||||
if (board == null) {
|
||||
componentsWithoutBoard.add(c);
|
||||
|
||||
@@ -174,6 +174,7 @@ public class GerberG2DWrapper extends Graphics2D
|
||||
if (str == null || str.trim().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
GlyphVector gv = font.createGlyphVector(graphics2d.getFontRenderContext(), str);
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package org.diylc.core.gerber;
|
||||
|
||||
import java.awt.geom.Rectangle2D;
|
||||
|
||||
public interface IGerberBoard {
|
||||
|
||||
Rectangle2D getBoardRectangle();
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -54,11 +54,8 @@ import org.diylc.common.GridType;
|
||||
import org.diylc.common.IComponentFilter;
|
||||
import org.diylc.common.IPlugInPort;
|
||||
import org.diylc.common.ObjectCache;
|
||||
import org.diylc.components.AbstractTransparentComponent;
|
||||
import org.diylc.core.BoardUndersideDisplay;
|
||||
import org.diylc.core.ComponentForRender;
|
||||
import org.diylc.core.ComponentState;
|
||||
import org.diylc.core.IBoard;
|
||||
import org.diylc.core.IContinuity;
|
||||
import org.diylc.core.IDIYComponent;
|
||||
import org.diylc.core.ILayeredComponent;
|
||||
@@ -77,14 +74,14 @@ 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);
|
||||
|
||||
public static int CONTROL_POINT_SIZE = 7;
|
||||
public static double EXTRA_SPACE = 0.25;
|
||||
|
||||
public static final String ZOOM_KEY = "zoom";
|
||||
public static final String ZOOM_KEY = "zoom";
|
||||
|
||||
private static boolean SHADE_EXTRA_SPACE = true;
|
||||
|
||||
@@ -93,9 +90,6 @@ public class DrawingManager {
|
||||
|
||||
public static Color CONTROL_POINT_COLOR = Color.blue;
|
||||
public static Color SELECTED_CONTROL_POINT_COLOR = Color.green;
|
||||
|
||||
public static Size BOARD_MIRROR_SPACING = new Size(0.1, SizeUnit.in);
|
||||
private static final Byte MIRRORED_ALPHA = 64;
|
||||
|
||||
private Theme theme;
|
||||
|
||||
@@ -176,14 +170,12 @@ public class DrawingManager {
|
||||
* @param visibleRect
|
||||
* @return
|
||||
*/
|
||||
@SuppressWarnings("unlikely-arg-type")
|
||||
public 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) {
|
||||
|
||||
long totalStartTime = System.nanoTime();
|
||||
failedComponents.clear();
|
||||
if (project == null) {
|
||||
@@ -202,35 +194,38 @@ public class DrawingManager {
|
||||
|
||||
G2DWrapper g2dWrapper = new G2DWrapper(g2d, zoom);
|
||||
|
||||
configureG2D(g2d, drawOptions);
|
||||
|
||||
// group components with boards that contain them
|
||||
Map<IBoard, List<IDIYComponent<?>>> boardMap = project.getComponents().stream()
|
||||
.filter(IBoard.class::isInstance)
|
||||
.map(IBoard.class::cast)
|
||||
.filter(b -> b.getBoardUndersideDisplay() != BoardUndersideDisplay.NONE)
|
||||
.collect(Collectors.toMap(x -> x, x -> new ArrayList<IDIYComponent<?>>()));
|
||||
Map<IDIYComponent<?>, List<IBoard>> componentBoardMap = new HashMap<IDIYComponent<?>, List<IBoard>>();
|
||||
|
||||
for (IBoard board : boardMap.keySet()) {
|
||||
Rectangle2D boardRect = board.getBoardRectangle();
|
||||
for (IDIYComponent<?> c : project.getComponents()) {
|
||||
if (c == board) {
|
||||
continue;
|
||||
}
|
||||
boolean include = true;
|
||||
for (int i = 0; i < c.getControlPointCount(); i++) {
|
||||
if (!boardRect.contains(c.getControlPoint(i))) {
|
||||
include = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (include) {
|
||||
boardMap.get(board).add(c);
|
||||
componentBoardMap.computeIfAbsent(c, key -> new ArrayList<IBoard>()).add(board);
|
||||
}
|
||||
}
|
||||
if (drawOptions.contains(DrawOption.ANTIALIASING)) {
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
|
||||
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||
} else {
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
|
||||
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
|
||||
}
|
||||
if (configManager.readBoolean(IPlugInPort.HI_QUALITY_RENDER_KEY, false)) {
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,
|
||||
RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,
|
||||
RenderingHints.VALUE_COLOR_RENDER_QUALITY);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
|
||||
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
|
||||
// g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
|
||||
// RenderingHints.VALUE_STROKE_PURE);
|
||||
} else {
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,
|
||||
RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,
|
||||
RenderingHints.VALUE_COLOR_RENDER_SPEED);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
|
||||
RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
|
||||
}
|
||||
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
|
||||
RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
|
||||
|
||||
// AffineTransform initialTx = g2d.getTransform();
|
||||
Dimension canvasDimension =
|
||||
@@ -296,7 +291,6 @@ public class DrawingManager {
|
||||
if (filter != null && !filter.testComponent(component)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ComponentState state = componentStateMap.get(component);
|
||||
// Do not track the area if component is not invalidated and was
|
||||
// drawn in the same state.
|
||||
@@ -317,21 +311,15 @@ public class DrawingManager {
|
||||
long componentStart = System.nanoTime();
|
||||
try {
|
||||
|
||||
drawComponent(project, drawOptions, scaleFactor, visibleRect, zoom, g2dWrapper,
|
||||
outlineMode, i, component, state);
|
||||
|
||||
double boardMirrorSpacing = BOARD_MIRROR_SPACING.convertToPixels();
|
||||
|
||||
List<IBoard> boards = componentBoardMap.get(component);
|
||||
if (boards != null) {
|
||||
for (IBoard board : boards) {
|
||||
drawMirroredComponent(project, drawOptions, scaleFactor, visibleRect, zoom,
|
||||
g2dWrapper, outlineMode, i, state, boardMirrorSpacing, component, board);
|
||||
}
|
||||
}
|
||||
if (boardMap.keySet().contains(component)) {
|
||||
drawMirroredComponent(project, drawOptions, scaleFactor, visibleRect, zoom,
|
||||
g2dWrapper, outlineMode, i, state, boardMirrorSpacing, component, (IBoard)component);
|
||||
if (drawOptions.contains(DrawOption.ENABLE_CACHING)) // go through the DrawingCache
|
||||
DrawingCache.Instance.draw(component, g2dWrapper, state,
|
||||
drawOptions.contains(DrawOption.OUTLINE_MODE), project, zoom, scaleFactor, i, visibleRect);
|
||||
else // go straight to the wrapper
|
||||
component.draw(g2dWrapper, state, outlineMode, project, g2dWrapper);
|
||||
|
||||
if (g2dWrapper.isTrackingContinuityArea()) {
|
||||
LOG.info("Component " + component.getName() + " of type "
|
||||
+ component.getClass().getName() + " did not stop tracking continuity area.");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LOG.error("Error drawing " + component.getName(), e);
|
||||
@@ -521,114 +509,6 @@ public class DrawingManager {
|
||||
return failedComponents;
|
||||
}
|
||||
|
||||
private void drawMirroredComponent(Project project, Set<DrawOption> drawOptions,
|
||||
Double scaleFactor, Rectangle2D visibleRect, double zoom, G2DWrapper g2dWrapper,
|
||||
boolean outlineMode, int i, ComponentState state, double boardMirrorSpacing,
|
||||
IDIYComponent<?> componentToDraw, IBoard board) {
|
||||
Rectangle2D boardRectangle = board.getBoardRectangle();
|
||||
AffineTransform mirrorTx = null;
|
||||
switch (board.getBoardUndersideDisplay()) {
|
||||
case ABOVE:
|
||||
mirrorTx = new AffineTransform();
|
||||
mirrorTx.translate(boardRectangle.getMinX(), boardRectangle.getMinY());
|
||||
mirrorTx.scale(1, -1);
|
||||
mirrorTx.translate(-boardRectangle.getMinX(), -boardRectangle.getMinY());
|
||||
mirrorTx.translate(0, boardMirrorSpacing);
|
||||
break;
|
||||
case BELOW:
|
||||
mirrorTx = new AffineTransform();
|
||||
mirrorTx.translate(boardRectangle.getMinX(), boardRectangle.getMaxY());
|
||||
mirrorTx.scale(1, -1);
|
||||
mirrorTx.translate(-boardRectangle.getMinX(), -boardRectangle.getMaxY());
|
||||
mirrorTx.translate(0, -boardMirrorSpacing);
|
||||
break;
|
||||
case LEFT:
|
||||
mirrorTx = new AffineTransform();
|
||||
mirrorTx.translate(boardRectangle.getMinX(), boardRectangle.getMinY());
|
||||
mirrorTx.scale(-1, 1);
|
||||
mirrorTx.translate(-boardRectangle.getMinX(), -boardRectangle.getMinY());
|
||||
mirrorTx.translate(boardMirrorSpacing, 0);
|
||||
break;
|
||||
case RIGHT:
|
||||
mirrorTx = new AffineTransform();
|
||||
mirrorTx.translate(boardRectangle.getMaxX(), boardRectangle.getMinY());
|
||||
mirrorTx.scale(-1, 1);
|
||||
mirrorTx.translate(-boardRectangle.getMaxX(), -boardRectangle.getMinY());
|
||||
mirrorTx.translate(-boardMirrorSpacing, 0);
|
||||
break;
|
||||
default:
|
||||
LOG.warn("Unexpected board underside display: " + board.getBoardUndersideDisplay());
|
||||
break;
|
||||
}
|
||||
AffineTransform txBefore = new AffineTransform(g2dWrapper.getTransform());
|
||||
byte alphaBefore = 0;
|
||||
if (AbstractTransparentComponent.class.isInstance(componentToDraw)) {
|
||||
alphaBefore = ((AbstractTransparentComponent<?>)componentToDraw).getAlpha();
|
||||
((AbstractTransparentComponent<?>)componentToDraw).setAlpha(MIRRORED_ALPHA);
|
||||
}
|
||||
try {
|
||||
g2dWrapper.setMirrorTransform(mirrorTx);
|
||||
g2dWrapper.transform(mirrorTx);
|
||||
componentToDraw.draw(g2dWrapper, state, outlineMode, project, g2dWrapper);
|
||||
} finally {
|
||||
g2dWrapper.setTransform(txBefore);
|
||||
g2dWrapper.setMirrorTransform(null);
|
||||
if (AbstractTransparentComponent.class.isInstance(componentToDraw)) {
|
||||
((AbstractTransparentComponent<?>)componentToDraw).setAlpha(alphaBefore);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void drawComponent(Project project, Set<DrawOption> drawOptions, Double scaleFactor,
|
||||
Rectangle2D visibleRect, double zoom, G2DWrapper g2dWrapper, boolean outlineMode, int i,
|
||||
IDIYComponent<?> component, ComponentState state) {
|
||||
if (drawOptions.contains(DrawOption.ENABLE_CACHING)) // go through the DrawingCache
|
||||
DrawingCache.Instance.draw(component, g2dWrapper, state,
|
||||
drawOptions.contains(DrawOption.OUTLINE_MODE), project, zoom, scaleFactor, i, visibleRect);
|
||||
else // go straight to the wrapper
|
||||
component.draw(g2dWrapper, state, outlineMode, project, g2dWrapper);
|
||||
|
||||
if (g2dWrapper.isTrackingContinuityArea()) {
|
||||
LOG.debug("Component " + component.getName() + " of type "
|
||||
+ component.getClass().getName() + " did not stop tracking continuity area.");
|
||||
}
|
||||
}
|
||||
|
||||
private void configureG2D(Graphics2D g2d, Set<DrawOption> drawOptions) {
|
||||
if (drawOptions.contains(DrawOption.ANTIALIASING)) {
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
|
||||
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||
} else {
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
|
||||
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
|
||||
}
|
||||
if (configManager.readBoolean(IPlugInPort.HI_QUALITY_RENDER_KEY, false)) {
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,
|
||||
RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,
|
||||
RenderingHints.VALUE_COLOR_RENDER_QUALITY);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
|
||||
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
|
||||
// g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
|
||||
// RenderingHints.VALUE_STROKE_PURE);
|
||||
} else {
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,
|
||||
RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,
|
||||
RenderingHints.VALUE_COLOR_RENDER_SPEED);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
|
||||
RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
|
||||
}
|
||||
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
|
||||
RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
|
||||
}
|
||||
|
||||
private double zoomCached = 0;
|
||||
private Dimension canvasDimensionCached;
|
||||
private double extraSpaceCached;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -105,8 +105,6 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver {
|
||||
|
||||
private double zoom;
|
||||
private int zOrder;
|
||||
|
||||
private AffineTransform mirrorTransform;
|
||||
|
||||
/**
|
||||
* Creates a wrapper around specified {@link Graphics2D} object.
|
||||
@@ -220,12 +218,8 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver {
|
||||
@Override
|
||||
public void setContinuityMarker(String marker) {
|
||||
continuityMarker = marker;
|
||||
}
|
||||
|
||||
public void setMirrorTransform(AffineTransform mirrorTransform) {
|
||||
this.mirrorTransform = mirrorTransform;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends shape interior to the current component area.
|
||||
*
|
||||
@@ -350,73 +344,22 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver {
|
||||
|
||||
@Override
|
||||
public void drawString(String str, int x, int y) {
|
||||
this.drawString(str, (float)x, (float)y);
|
||||
canvasGraphics.drawString(str, x, y);
|
||||
if (drawingComponent && trackingAllowed) {
|
||||
FontMetrics fontMetrics = canvasGraphics.getFontMetrics();
|
||||
Rectangle2D rect = fontMetrics.getStringBounds(str, canvasGraphics);
|
||||
Point2D point = new Point2D.Double(x, y);
|
||||
// currentTx.transform(point, point);
|
||||
Rectangle2D finalRec =
|
||||
new Rectangle2D.Double(rect.getX() + point.getX(), rect.getY() + point.getY(), rect.getWidth(),
|
||||
rect.getHeight());
|
||||
appendShape(finalRec);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawString(String str, float x, float y) {
|
||||
if (this.mirrorTransform == null) {
|
||||
canvasGraphics.drawString(str, x, y);
|
||||
} else {
|
||||
drawStringUnmirrored(str, x, y);
|
||||
}
|
||||
handleDrawString(str, x, y);
|
||||
}
|
||||
|
||||
private void drawStringUnmirrored(String str, float x, float y) {
|
||||
// Save the current transform (T), which includes the mirror.
|
||||
AffineTransform originalTransform = new AffineTransform(getTransform());
|
||||
|
||||
// Compute the non-mirrored transform A by "canceling" the mirror:
|
||||
// Since T = A × M and M is self-inverse, we have A = T × M.
|
||||
AffineTransform nonMirroredTransform = new AffineTransform(originalTransform);
|
||||
nonMirroredTransform.concatenate(mirrorTransform);
|
||||
|
||||
GlyphVector gv = getFont().createGlyphVector(this.getFontRenderContext(), str);
|
||||
Rectangle2D visualBounds = gv.getVisualBounds();
|
||||
// Use a temporary Graphics2D (with transform A) to obtain correct FontMetrics.
|
||||
Graphics2D gTemp = (Graphics2D) canvasGraphics.create();
|
||||
gTemp.setTransform(nonMirroredTransform);
|
||||
FontMetrics fm = gTemp.getFontMetrics();
|
||||
double textWidth = fm.stringWidth(str);
|
||||
// Use ascent + descent as the bounding box height.
|
||||
double textHeight = visualBounds.getHeight();//fm.getAscent() + fm.getDescent();
|
||||
double ascent = fm.getAscent();
|
||||
gTemp.dispose();
|
||||
|
||||
// 1. Compute the center of the text’s bounding box in the mirrored (T) space.
|
||||
Point2D centerMirrored = new Point2D.Double(x + textWidth / 2.0,
|
||||
y + textHeight / 2.0);
|
||||
|
||||
// 2. Convert that center to screen coordinates using the original transform T.
|
||||
Point2D centerScreen = originalTransform.transform(centerMirrored, null);
|
||||
|
||||
// 3. Map the screen coordinate into the non-mirrored coordinate system (A).
|
||||
Point2D centerNonMirrored;
|
||||
try {
|
||||
centerNonMirrored = nonMirroredTransform.createInverse().transform(centerScreen, null);
|
||||
} catch (NoninvertibleTransformException e) {
|
||||
e.printStackTrace();
|
||||
centerNonMirrored = centerMirrored; // Fallback if inversion fails.
|
||||
}
|
||||
|
||||
// 4. Compute the new top-left in A so that the bounding box (width x height)
|
||||
// remains centered at centerNonMirrored.
|
||||
double newTopLeftX = centerNonMirrored.getX() - textWidth / 2.0;
|
||||
double newTopLeftY = centerNonMirrored.getY() - textHeight / 2.0;
|
||||
// Adjust for the baseline (drawString uses the baseline for y)
|
||||
float drawX = (float) newTopLeftX;
|
||||
float drawY = (float) (newTopLeftY + ascent);
|
||||
|
||||
// 5. Set the transform to the non-mirrored transform (A) so that mirror is canceled.
|
||||
canvasGraphics.setTransform(nonMirroredTransform);
|
||||
canvasGraphics.drawString(str, drawX, drawY);
|
||||
|
||||
// 6. Restore the original transform.
|
||||
setTransform(originalTransform);
|
||||
}
|
||||
|
||||
private void handleDrawString(String str, float x, float y) {
|
||||
canvasGraphics.drawString(str, x, y);
|
||||
if (drawingComponent && trackingAllowed) {
|
||||
FontMetrics fontMetrics = canvasGraphics.getFontMetrics();
|
||||
Rectangle2D rect = fontMetrics.getStringBounds(str, canvasGraphics);
|
||||
|
||||
@@ -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 =
|
||||
@@ -165,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
|
||||
@@ -175,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;
|
||||
|
||||
@@ -202,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);
|
||||
}
|
||||
@@ -221,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);
|
||||
@@ -1619,8 +1655,13 @@ public class Presenter implements IPlugInPort, IConfigListener {
|
||||
}
|
||||
// There is selection, so we need to finalize the drag&drop
|
||||
// operation.
|
||||
dragInProgress = false;
|
||||
if (!preDragProject.equals(currentProject)) {
|
||||
messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, preDragProject, currentProject, "Drag");
|
||||
drawingManager.clearContinuityArea();
|
||||
projectFileManager.notifyFileChange();
|
||||
}
|
||||
messageDispatcher.dispatchMessage(EventType.REPAINT);
|
||||
dragInProgress = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -240,5 +240,25 @@
|
||||
</changes>
|
||||
<url>https://github.com/bancika/diy-layout-creator/releases</url>
|
||||
</org.diylc.appframework.update.Version>
|
||||
<org.diylc.appframework.update.Version>
|
||||
<versionNumber>
|
||||
<major>5</major>
|
||||
<minor>1</minor>
|
||||
<build>0</build>
|
||||
</versionNumber>
|
||||
<releaseDate>2025-03-09 00:00:00.000 CET</releaseDate>
|
||||
<name></name>
|
||||
<changes>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>Updated the windows installer to avoid false positive virus detection</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>BUG_FIX</changeType>
|
||||
<description>Moving selected components with a mouse doesn't register file modification action and doesn't enable Undo action</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
</changes>
|
||||
<url>https://github.com/bancika/diy-layout-creator/releases</url>
|
||||
</org.diylc.appframework.update.Version>
|
||||
</a>
|
||||
</java.util.Arrays_-ArrayList>
|
||||
|
||||
@@ -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.
@@ -34,9 +34,7 @@ import org.diylc.common.IPlugInPort;
|
||||
import org.diylc.common.ObjectCache;
|
||||
import org.diylc.common.VerticalAlignment;
|
||||
import org.diylc.components.AbstractTransparentComponent;
|
||||
import org.diylc.core.BoardUndersideDisplay;
|
||||
import org.diylc.core.ComponentState;
|
||||
import org.diylc.core.IBoard;
|
||||
import org.diylc.core.IDrawingObserver;
|
||||
import org.diylc.core.Project;
|
||||
import org.diylc.core.VisibilityPolicy;
|
||||
@@ -44,7 +42,7 @@ import org.diylc.core.annotations.EditableProperty;
|
||||
import org.diylc.core.measures.Size;
|
||||
import org.diylc.core.measures.SizeUnit;
|
||||
|
||||
public abstract class AbstractBoard extends AbstractTransparentComponent<String> implements IBoard {
|
||||
public abstract class AbstractBoard extends AbstractTransparentComponent<String> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@@ -74,8 +72,6 @@ public abstract class AbstractBoard extends AbstractTransparentComponent<String>
|
||||
protected Size length;
|
||||
protected Size width;
|
||||
protected BoardSizingMode mode = BoardSizingMode.TwoPoints;
|
||||
|
||||
protected BoardUndersideDisplay boardUndersideDisplay = BoardUndersideDisplay.NONE;
|
||||
|
||||
@Override
|
||||
public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project,
|
||||
@@ -367,32 +363,6 @@ public abstract class AbstractBoard extends AbstractTransparentComponent<String>
|
||||
this.mode = mode;
|
||||
}
|
||||
|
||||
@EditableProperty(name = "Underside Display")
|
||||
@Override
|
||||
public BoardUndersideDisplay getBoardUndersideDisplay() {
|
||||
if (this.boardUndersideDisplay == null) {
|
||||
this.boardUndersideDisplay = BoardUndersideDisplay.NONE;
|
||||
}
|
||||
return this.boardUndersideDisplay;
|
||||
}
|
||||
|
||||
public void setBoardUndersideDisplay(BoardUndersideDisplay boardUndersideDisplay) {
|
||||
this.boardUndersideDisplay = boardUndersideDisplay;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle2D getBoardRectangle() {
|
||||
Point2D finalSecondPoint = getFinalSecondPoint();
|
||||
|
||||
return new Rectangle2D.Double(firstPoint.getX(), firstPoint.getY(),
|
||||
finalSecondPoint.getX() - firstPoint.getX(), finalSecondPoint.getY() - firstPoint.getY());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldExportToGerber() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle2D getCachingBounds() {
|
||||
Point2D finalSecondPoint = getFinalSecondPoint();
|
||||
|
||||
@@ -37,11 +37,12 @@ import org.diylc.core.Project;
|
||||
import org.diylc.core.annotations.BomPolicy;
|
||||
import org.diylc.core.annotations.ComponentDescriptor;
|
||||
import org.diylc.core.annotations.EditableProperty;
|
||||
import org.diylc.core.gerber.IGerberBoard;
|
||||
|
||||
@ComponentDescriptor(name = "Blank Board", category = "Boards", author = "Branislav Stojkovic",
|
||||
zOrder = IDIYComponent.BOARD, instanceNamePrefix = "Board", description = "Blank circuit board",
|
||||
bomPolicy = BomPolicy.SHOW_ONLY_TYPE_NAME, autoEdit = false, transformer = SimpleComponentTransformer.class)
|
||||
public class BlankBoard extends AbstractBoard {
|
||||
public class BlankBoard extends AbstractBoard implements IGerberBoard {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@@ -131,11 +132,6 @@ public class BlankBoard extends AbstractBoard {
|
||||
public String getControlPointNodeName(int index) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldExportToGerber() {
|
||||
return true;
|
||||
}
|
||||
|
||||
static enum Type {
|
||||
ROUND, SQUARE;
|
||||
@@ -145,4 +141,12 @@ public class BlankBoard extends AbstractBoard {
|
||||
return name().substring(0, 1) + name().substring(1).toLowerCase();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle2D getBoardRectangle() {
|
||||
Point2D finalSecondPoint = getFinalSecondPoint();
|
||||
|
||||
return new Rectangle2D.Double(firstPoint.getX(), firstPoint.getY(),
|
||||
finalSecondPoint.getX() - firstPoint.getX(), finalSecondPoint.getY() - firstPoint.getY());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
+436
-15
@@ -13,13 +13,18 @@
|
||||
#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
|
||||
@@ -45,27 +50,115 @@
|
||||
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
|
||||
Apply Model
|
||||
Anti-Aliasing
|
||||
Arrow Size
|
||||
Author
|
||||
Auto-Create Pads
|
||||
Auto-Edit Mode
|
||||
B-C-E BJT
|
||||
Background
|
||||
Board1
|
||||
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
|
||||
C1
|
||||
C2
|
||||
C3
|
||||
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
|
||||
@@ -74,8 +167,12 @@ 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
|
||||
@@ -83,24 +180,78 @@ 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
|
||||
Deutsch
|
||||
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
|
||||
English
|
||||
Español
|
||||
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
|
||||
Français
|
||||
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
|
||||
@@ -109,50 +260,198 @@ G-S-D JFET
|
||||
G-S-D MOSFET
|
||||
Generate DIYLC Netlist (excl. Switches)
|
||||
Generate DIYLC Netlist (incl. Switches)
|
||||
Gray
|
||||
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
|
||||
Italiano
|
||||
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
|
||||
Nederlands
|
||||
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
|
||||
Português
|
||||
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
|
||||
@@ -160,28 +459,150 @@ 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
|
||||
Srpski
|
||||
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
|
||||
Underside Display
|
||||
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
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -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 "$(wslpath -u '${appdir.dir}')" /tmp/AppDir" />
|
||||
</exec>
|
||||
|
||||
<!-- Convert line endings to Unix format in WSL -->
|
||||
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
|
||||
<arg line="/c ${wsl.command} "sed -i 's/\r$//' /tmp/AppDir/com.diy_fever.DIYLayoutCreator.desktop"" />
|
||||
</exec>
|
||||
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
|
||||
<arg line="/c ${wsl.command} "sed -i 's/\r$//' /tmp/AppDir/AppRun"" />
|
||||
</exec>
|
||||
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
|
||||
<arg line="/c ${wsl.command} "sed -i 's/\r$//' /tmp/AppDir/usr/bin/diylc.sh"" />
|
||||
</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} "sudo apt update && sudo apt install -y wget libfuse2 fuse"" />
|
||||
</exec>
|
||||
|
||||
<!-- Download AppImageTool into WSL if not already present -->
|
||||
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
|
||||
<arg line="/c ${wsl.command} "if [ ! -f ~/appimagetool ]; then wget -O ~/appimagetool https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage && chmod +x ~/appimagetool; fi"" />
|
||||
</exec>
|
||||
|
||||
<!-- Build AppImage using appimagetool in WSL -->
|
||||
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
|
||||
<arg line="/c ${wsl.command} "cd /tmp && ~/appimagetool /tmp/AppDir /tmp/${appimage.output.file}"" />
|
||||
</exec>
|
||||
|
||||
<!-- Copy the AppImage back to the build directory -->
|
||||
<exec executable="cmd.exe" failonerror="true" osfamily="windows">
|
||||
<arg line="/c wsl bash -c "cp /tmp/${appimage.output.file} $(wslpath -u '${project.build.directory}/${appimage.output.file}')"" />
|
||||
</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 "${project.build.directory}/docker-tmp:/workspace" -w /workspace appimagecrafters/appimage-builder:latest /bin/bash -c "ARCH=x86_64 appimagetool AppDir ${appimage.output.file}"" />
|
||||
</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" />
|
||||
|
||||
<!-- <!– Linux-specific build –>-->
|
||||
<!-- <echo message="Linux build will execute: ${isLinux}" />-->
|
||||
<!-- <exec executable="bash" failonerror="true" osfamily="unix">-->
|
||||
<!-- <arg line="-c 'echo Building AppImage natively on Linux...'" />-->
|
||||
<!-- </exec>-->
|
||||
<!-- -->
|
||||
<!-- <!– Install dependencies if needed –>-->
|
||||
<!-- <exec executable="bash" failonerror="true" osfamily="unix">-->
|
||||
<!-- <arg line="-c 'which appimagetool || (echo "Installing appimagetool..." && sudo apt-get update && sudo apt-get install -y libfuse2 fuse && wget -O /tmp/appimagetool https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage && chmod +x /tmp/appimagetool && sudo mv /tmp/appimagetool /usr/local/bin/)'" />-->
|
||||
<!-- </exec>-->
|
||||
<!-- -->
|
||||
<!-- <!– Build AppImage –>-->
|
||||
<!-- <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>
|
||||
@@ -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,10 +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.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.
|
||||
@@ -177,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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
+19
-3
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user