add default building blocks functionality

This commit is contained in:
bancika
2020-04-04 11:58:03 +02:00
parent d9ca1346f0
commit bfc6721974
5 changed files with 453 additions and 4 deletions
@@ -26,6 +26,7 @@ import java.io.IOException;
public interface IBlockProcessor { public interface IBlockProcessor {
public static final String BLOCKS_KEY = "buildingBlocks"; public static final String BLOCKS_KEY = "buildingBlocks";
public static final String DEFAULT_BLOCKS_IMPORTED_KEY = "defaultBlocksImported";
void saveSelectionAsBlock(String blockName); void saveSelectionAsBlock(String blockName);
@@ -191,6 +191,7 @@ public class Presenter implements IPlugInPort {
// visibleLayers = EnumSet.allOf(ComponentLayer.class); // visibleLayers = EnumSet.allOf(ComponentLayer.class);
upgradeVariants(); upgradeVariants();
importDefaultVariants(); importDefaultVariants();
importDefaultBlocks();
} }
public void installPlugin(IPlugIn plugIn) { public void installPlugin(IPlugIn plugIn) {
@@ -2458,6 +2459,40 @@ public class Presenter implements IPlugInPort {
} }
} }
@SuppressWarnings("unchecked")
private void importDefaultBlocks() {
// import default templates from variants.xml file only if we didn't do it already
if (!ConfigurationManager.getInstance().readBoolean(DEFAULT_BLOCKS_IMPORTED_KEY, false)) {
try {
URL resource = Presenter.class.getResource("blocks.xml");
if (resource != null) {
BufferedInputStream in = new BufferedInputStream(resource.openStream());
XStream xStream = new XStream(new DomDriver());
Map<String, List<IDIYComponent<?>>> defaults = (Map<String, List<IDIYComponent<?>>>) xStream.fromXML(in);
in.close();
Map<String, List<IDIYComponent<?>>> blocksMap =
(Map<String, List<IDIYComponent<?>>>) ConfigurationManager.getInstance().readObject(BLOCKS_KEY, null);
if (blocksMap == null)
blocksMap = new HashMap<String, List<IDIYComponent<?>>>();
// merge default blocks with user's
for (Map.Entry<String, List<IDIYComponent<?>>> entry : defaults.entrySet()) {
if (!blocksMap.containsKey(entry.getKey()))
blocksMap.put(entry.getKey(), entry.getValue());
}
// update templates and a flag marking that we imported them
ConfigurationManager.getInstance().writeValue(DEFAULT_BLOCKS_IMPORTED_KEY, true);
ConfigurationManager.getInstance().writeValue(BLOCKS_KEY, blocksMap);
LOG.info(String.format("Imported %d default building blocks", defaults == null ? 0 : defaults.size()));
}
} catch (Exception e) {
LOG.error("Could not load default blocks", e);
}
}
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
public List<Template> getVariantsFor(ComponentType type) { public List<Template> getVariantsFor(ComponentType type) {
@@ -2667,7 +2702,31 @@ public class Presenter implements IPlugInPort {
} }
}); });
blocks.put(blockName, blockComponents); blocks.put(blockName, blockComponents);
ConfigurationManager.getInstance().writeValue(BLOCKS_KEY, blocks);
if (System.getProperty("org.diylc.WriteStaticBlocks", "false").equalsIgnoreCase("true")) {
Map<String, List<IDIYComponent<?>>> defaultBlockMap = new HashMap<String, List<IDIYComponent<?>>>();
// unify default and user-variants
for (Map.Entry<String, List<IDIYComponent<?>>> entry : blocks.entrySet()) {
if (defaultBlockMap.containsKey(entry.getKey())) {
defaultBlockMap.get(entry.getKey()).addAll(entry.getValue());
} else {
defaultBlockMap.put(entry.getKey(), entry.getValue());
}
}
try {
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("blocks.xml"));
XStream xStream = new XStream(new DomDriver());
xStream.toXML(defaultBlockMap, out);
out.close();
// no more user variants
ConfigurationManager.getInstance().writeValue(BLOCKS_KEY, null);
LOG.info("Saved default blocks");
} catch (IOException e) {
LOG.error("Could not save default blocks", e);
}
} else {
ConfigurationManager.getInstance().writeValue(BLOCKS_KEY, blocks);
}
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -0,0 +1,385 @@
<map>
<entry>
<string>TO-92 w/ 2 Leads</string>
<list>
<org.diylc.components.connectivity.Jumper>
<name>J1</name>
<alpha>127</alpha>
<points>
<java.awt.Point>
<x>580</x>
<y>720</y>
</java.awt.Point>
<java.awt.Point>
<x>580</x>
<y>740</y>
</java.awt.Point>
<java.awt.Point>
<x>1320</x>
<y>250</y>
</java.awt.Point>
</points>
<bodyColor>
<red>255</red>
<green>255</green>
<blue>255</blue>
<alpha>255</alpha>
</bodyColor>
<borderColor>
<red>0</red>
<green>0</green>
<blue>0</blue>
<alpha>255</alpha>
</borderColor>
<labelColor reference="../borderColor"/>
<leadColor>
<red>117</red>
<green>157</green>
<blue>175</blue>
<alpha>255</alpha>
</leadColor>
<display>NAME</display>
<flipStanding>false</flipStanding>
<labelOriantation>Directional</labelOriantation>
<moveLabel>false</moveLabel>
<style>SOLID</style>
</org.diylc.components.connectivity.Jumper>
<org.diylc.components.connectivity.Jumper>
<name>J2</name>
<alpha>127</alpha>
<points>
<java.awt.Point>
<x>580</x>
<y>780</y>
</java.awt.Point>
<java.awt.Point>
<x>580</x>
<y>760</y>
</java.awt.Point>
<java.awt.Point>
<x>-177</x>
<y>1259</y>
</java.awt.Point>
</points>
<bodyColor>
<red>255</red>
<green>255</green>
<blue>255</blue>
<alpha>255</alpha>
</bodyColor>
<borderColor>
<red>0</red>
<green>0</green>
<blue>0</blue>
<alpha>255</alpha>
</borderColor>
<labelColor reference="../borderColor"/>
<leadColor>
<red>117</red>
<green>157</green>
<blue>175</blue>
<alpha>255</alpha>
</leadColor>
<display>NAME</display>
<flipStanding>false</flipStanding>
<labelOriantation>Directional</labelOriantation>
<moveLabel>false</moveLabel>
<style>SOLID</style>
</org.diylc.components.connectivity.Jumper>
<org.diylc.components.semiconductors.TransistorTO92>
<name>Q1</name>
<alpha>100</alpha>
<value></value>
<orientation>DEFAULT</orientation>
<controlPoints>
<java.awt.Point>
<x>580</x>
<y>740</y>
</java.awt.Point>
<java.awt.Point>
<x>580</x>
<y>750</y>
</java.awt.Point>
<java.awt.Point>
<x>580</x>
<y>760</y>
</java.awt.Point>
</controlPoints>
<bodyColor>
<red>128</red>
<green>128</green>
<blue>128</blue>
<alpha>255</alpha>
</bodyColor>
<borderColor>
<red>89</red>
<green>89</green>
<blue>89</blue>
<alpha>255</alpha>
</borderColor>
<labelColor reference="../../org.diylc.components.connectivity.Jumper/borderColor"/>
<display>NAME</display>
<folded>false</folded>
<pinSpacing>
<value>0.05</value>
<unit class="org.diylc.core.measures.SizeUnit">in</unit>
</pinSpacing>
</org.diylc.components.semiconductors.TransistorTO92>
</list>
</entry>
<entry>
<string>TO-92 w/ 3 Leads</string>
<list>
<org.diylc.components.connectivity.Jumper>
<name>J1</name>
<alpha>127</alpha>
<points>
<java.awt.Point>
<x>720</x>
<y>620</y>
</java.awt.Point>
<java.awt.Point>
<x>760</x>
<y>640</y>
</java.awt.Point>
<java.awt.Point>
<x>650</x>
<y>-41</y>
</java.awt.Point>
</points>
<bodyColor>
<red>255</red>
<green>255</green>
<blue>255</blue>
<alpha>255</alpha>
</bodyColor>
<borderColor>
<red>0</red>
<green>0</green>
<blue>0</blue>
<alpha>255</alpha>
</borderColor>
<labelColor reference="../borderColor"/>
<leadColor>
<red>117</red>
<green>157</green>
<blue>175</blue>
<alpha>255</alpha>
</leadColor>
<display>NAME</display>
<flipStanding>false</flipStanding>
<labelOriantation>Directional</labelOriantation>
<moveLabel>false</moveLabel>
<style>SOLID</style>
</org.diylc.components.connectivity.Jumper>
<org.diylc.components.connectivity.Jumper>
<name>J2</name>
<alpha>127</alpha>
<points>
<java.awt.Point>
<x>720</x>
<y>680</y>
</java.awt.Point>
<java.awt.Point>
<x>760</x>
<y>660</y>
</java.awt.Point>
<java.awt.Point>
<x>-206</x>
<y>95</y>
</java.awt.Point>
</points>
<bodyColor>
<red>255</red>
<green>255</green>
<blue>255</blue>
<alpha>255</alpha>
</bodyColor>
<borderColor>
<red>0</red>
<green>0</green>
<blue>0</blue>
<alpha>255</alpha>
</borderColor>
<labelColor reference="../borderColor"/>
<leadColor>
<red>117</red>
<green>157</green>
<blue>175</blue>
<alpha>255</alpha>
</leadColor>
<display>NAME</display>
<flipStanding>false</flipStanding>
<labelOriantation>Directional</labelOriantation>
<moveLabel>false</moveLabel>
<style>SOLID</style>
</org.diylc.components.connectivity.Jumper>
<org.diylc.components.connectivity.Jumper>
<name>J3</name>
<alpha>127</alpha>
<points>
<java.awt.Point>
<x>719</x>
<y>650</y>
</java.awt.Point>
<java.awt.Point>
<x>760</x>
<y>650</y>
</java.awt.Point>
<java.awt.Point>
<x>147</x>
<y>-279</y>
</java.awt.Point>
</points>
<bodyColor>
<red>255</red>
<green>255</green>
<blue>255</blue>
<alpha>255</alpha>
</bodyColor>
<borderColor>
<red>0</red>
<green>0</green>
<blue>0</blue>
<alpha>255</alpha>
</borderColor>
<labelColor reference="../borderColor"/>
<leadColor>
<red>117</red>
<green>157</green>
<blue>175</blue>
<alpha>255</alpha>
</leadColor>
<display>NAME</display>
<flipStanding>false</flipStanding>
<labelOriantation>Directional</labelOriantation>
<moveLabel>false</moveLabel>
<style>SOLID</style>
</org.diylc.components.connectivity.Jumper>
<org.diylc.components.semiconductors.TransistorTO92>
<name>Q1</name>
<alpha>100</alpha>
<value></value>
<orientation>DEFAULT</orientation>
<controlPoints>
<java.awt.Point>
<x>760</x>
<y>640</y>
</java.awt.Point>
<java.awt.Point>
<x>760</x>
<y>650</y>
</java.awt.Point>
<java.awt.Point>
<x>760</x>
<y>660</y>
</java.awt.Point>
</controlPoints>
<bodyColor>
<red>128</red>
<green>128</green>
<blue>128</blue>
<alpha>255</alpha>
</bodyColor>
<borderColor>
<red>89</red>
<green>89</green>
<blue>89</blue>
<alpha>255</alpha>
</borderColor>
<labelColor reference="../../org.diylc.components.connectivity.Jumper/borderColor"/>
<display>NAME</display>
<folded>false</folded>
<pinSpacing>
<value>0.05</value>
<unit class="org.diylc.core.measures.SizeUnit">in</unit>
</pinSpacing>
</org.diylc.components.semiconductors.TransistorTO92>
</list>
</entry>
<entry>
<string>TO-92 w/ 2 Leads</string>
<list>
<org.diylc.components.connectivity.Jumper>
<name>J1</name>
<alpha>127</alpha>
<points>
<java.awt.Point>
<x>580</x>
<y>720</y>
</java.awt.Point>
<java.awt.Point>
<x>580</x>
<y>740</y>
</java.awt.Point>
<java.awt.Point>
<x>1320</x>
<y>250</y>
</java.awt.Point>
</points>
<bodyColor reference="../../../../entry/list/org.diylc.components.connectivity.Jumper/bodyColor"/>
<borderColor reference="../../../../entry/list/org.diylc.components.connectivity.Jumper/borderColor"/>
<labelColor reference="../../../../entry/list/org.diylc.components.connectivity.Jumper/borderColor"/>
<leadColor reference="../../../../entry/list/org.diylc.components.connectivity.Jumper/leadColor"/>
<display>NAME</display>
<flipStanding>false</flipStanding>
<labelOriantation>Directional</labelOriantation>
<moveLabel>false</moveLabel>
<style>SOLID</style>
</org.diylc.components.connectivity.Jumper>
<org.diylc.components.connectivity.Jumper>
<name>J2</name>
<alpha>127</alpha>
<points>
<java.awt.Point>
<x>580</x>
<y>780</y>
</java.awt.Point>
<java.awt.Point>
<x>580</x>
<y>760</y>
</java.awt.Point>
<java.awt.Point>
<x>-177</x>
<y>1259</y>
</java.awt.Point>
</points>
<bodyColor reference="../../../../entry/list/org.diylc.components.connectivity.Jumper[2]/bodyColor"/>
<borderColor reference="../../../../entry/list/org.diylc.components.connectivity.Jumper[2]/borderColor"/>
<labelColor reference="../../../../entry/list/org.diylc.components.connectivity.Jumper[2]/borderColor"/>
<leadColor reference="../../../../entry/list/org.diylc.components.connectivity.Jumper[2]/leadColor"/>
<display>NAME</display>
<flipStanding>false</flipStanding>
<labelOriantation>Directional</labelOriantation>
<moveLabel>false</moveLabel>
<style>SOLID</style>
</org.diylc.components.connectivity.Jumper>
<org.diylc.components.semiconductors.TransistorTO92>
<name>Q1</name>
<alpha>100</alpha>
<value></value>
<orientation>DEFAULT</orientation>
<controlPoints>
<java.awt.Point>
<x>580</x>
<y>740</y>
</java.awt.Point>
<java.awt.Point>
<x>580</x>
<y>750</y>
</java.awt.Point>
<java.awt.Point>
<x>580</x>
<y>760</y>
</java.awt.Point>
</controlPoints>
<bodyColor reference="../../../../entry/list/org.diylc.components.semiconductors.TransistorTO92/bodyColor"/>
<borderColor reference="../../../../entry/list/org.diylc.components.semiconductors.TransistorTO92/borderColor"/>
<labelColor reference="../../../../entry/list/org.diylc.components.connectivity.Jumper/borderColor"/>
<display>NAME</display>
<folded>false</folded>
<pinSpacing reference="../../../../entry/list/org.diylc.components.semiconductors.TransistorTO92/pinSpacing"/>
</org.diylc.components.semiconductors.TransistorTO92>
</list>
</entry>
</map>
@@ -2850,9 +2850,13 @@
<changeType>NEW_FEATURE</changeType> <changeType>NEW_FEATURE</changeType>
<description>Added "Ruler Inch Subdivision" config option that allows inch rulers to be subdivided either using base of 2 (1/4", 1/8, 1/16) or base of 10 (1/10)</description> <description>Added "Ruler Inch Subdivision" config option that allows inch rulers to be subdivided either using base of 2 (1/4", 1/8, 1/16) or base of 10 (1/10)</description>
</org.diylc.appframework.update.Change> </org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Added few out-of-the-box building blocks that can be deleted if unwanted</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change> <org.diylc.appframework.update.Change>
<changeType>BUG_FIX</changeType> <changeType>BUG_FIX</changeType>
<description>Fix the issue with theme configuration that causes some components to fail to render</description> <description>Fix the issue with theme configuration that causes the app to fail to start and some components to fail to render</description>
</org.diylc.appframework.update.Change> </org.diylc.appframework.update.Change>
</changes> </changes>
<url>https://github.com/bancika/diy-layout-creator/releases</url> <url>https://github.com/bancika/diy-layout-creator/releases</url>
+1 -1
View File
@@ -11,5 +11,5 @@
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;sourceLookupDirector&gt;&#13;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;Library&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;DIYLC&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;diylc-core&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;diylc-library&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;default/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.default&quot;/&gt;&#13;&#10;&lt;/sourceContainers&gt;&#13;&#10;&lt;/sourceLookupDirector&gt;&#13;&#10;"/> <stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;sourceLookupDirector&gt;&#13;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;Library&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;DIYLC&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;diylc-core&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;diylc-library&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;default/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.default&quot;/&gt;&#13;&#10;&lt;/sourceContainers&gt;&#13;&#10;&lt;/sourceLookupDirector&gt;&#13;&#10;"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.diylc.DIYLCStarter"/> <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.diylc.DIYLCStarter"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="diylc-swing"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="diylc-swing"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms256m -Xmx512m -Dorg.diylc.scriptRun=true -Ddorg.diylc.debugContinuityAreas=true -Ddorg.diylc.WriteStaticVariants=true -Ddorg.diylc.debugComponentAreas=true"/> <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms256m -Xmx512m -Dorg.diylc.scriptRun=true -Ddorg.diylc.debugContinuityAreas=true -Ddorg.diylc.WriteStaticVariants=true -Ddorg.diylc.debugComponentAreas=true -Dorg.diylc.WriteStaticBlocks=true"/>
</launchConfiguration> </launchConfiguration>