From 5ae8a3477ef4301e2411ca323a205595961ba409 Mon Sep 17 00:00:00 2001 From: bancika Date: Sun, 27 Feb 2011 23:23:51 +0000 Subject: [PATCH] add file version info improve image serialization serialize points referenced in inches --- .../DIYLC/config.xml | 2 +- .../DIYLC/library/main.jar | Bin 97571 -> 97706 bytes .../DIYLC/src/org/diylc/core/Project.java | 12 +++++ .../org/diylc/presenter/PointConverter.java | 41 ++++++++++++++++++ .../src/org/diylc/presenter/Presenter.java | 1 + .../diylc/presenter/ProjectFileManager.java | 15 ++++++- .../components/misc/IconImageConverter.java | 15 +++++-- 7 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/PointConverter.java diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml b/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml index ebd21fe3..b4120b55 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml @@ -59,7 +59,7 @@ default.org.diylc.components.misc.Label:Font Bold - true + false autoCreatePads diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar index ef827e76be103d7f4976cf54293c8d8c14fcbd08..cc3ff610bc83dd2b3f6e9a02843239f2c76a25fe 100644 GIT binary patch delta 4277 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 delta 4073 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 t@p2rT(Z%*VsXK1%=1j08Hv8|SooB#Sqz=* getLockedLayers() { return lockedLayers; } + + public VersionNumber getFileVersion() { + return fileVersion; + } + + public void setFileVersion(VersionNumber fileVersion) { + this.fileVersion = fileVersion; + } @Override public int hashCode() { diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/PointConverter.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/PointConverter.java new file mode 100644 index 00000000..d7e79d32 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/PointConverter.java @@ -0,0 +1,41 @@ +package org.diylc.presenter; + +import java.awt.Point; + +import org.diylc.utils.Constants; + +import com.thoughtworks.xstream.converters.Converter; +import com.thoughtworks.xstream.converters.MarshallingContext; +import com.thoughtworks.xstream.converters.UnmarshallingContext; +import com.thoughtworks.xstream.io.HierarchicalStreamReader; +import com.thoughtworks.xstream.io.HierarchicalStreamWriter; + +/** + * Serializes {@link Point} objects by converting coordinates from pixels to + * inches, thus avoiding the resolution to affect point placement. + * + * @author Branislav Stojkovic + */ +public class PointConverter implements Converter { + + @Override + public void marshal(Object object, HierarchicalStreamWriter writer, MarshallingContext context) { + Point point = (Point) object; + writer.addAttribute("x", Double.toString(1d * point.x / Constants.PIXELS_PER_INCH)); + writer.addAttribute("y", Double.toString(1d * point.y / Constants.PIXELS_PER_INCH)); + } + + @Override + public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { + double x = Double.parseDouble(reader.getAttribute("x")); + double y = Double.parseDouble(reader.getAttribute("y")); + return new Point((int) Math.round(x * Constants.PIXELS_PER_INCH), (int) Math.round(y + * Constants.PIXELS_PER_INCH)); + } + + @SuppressWarnings("unchecked") + @Override + public boolean canConvert(Class clazz) { + return Point.class.isAssignableFrom(clazz); + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java index 0ad3aec6..995d5546 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java @@ -245,6 +245,7 @@ public class Presenter implements IPlugInPort { public void saveProjectToFile(String fileName, boolean isBackup) { LOG.info(String.format("saveProjectToFile(%s)", fileName)); try { + currentProject.setFileVersion(CURRENT_VERSION); projectFileManager.serializeProjectToFile(currentProject, fileName, isBackup); } catch (Exception ex) { LOG.error("Could not save file", ex); diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/ProjectFileManager.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/ProjectFileManager.java index 964ed95a..bf55eb83 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/ProjectFileManager.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/ProjectFileManager.java @@ -68,6 +68,9 @@ public class ProjectFileManager { } private XStream xStream; + // Legacy deserializer for 3.0.1 through 3.0.7, loads Points referenced in + // pixels. + private XStream xStreamOld; private String currentFileName = null; private boolean modified = false; @@ -78,6 +81,9 @@ public class ProjectFileManager { super(); this.xStream = new XStream(new DomDriver()); xStream.autodetectAnnotations(true); + xStream.registerConverter(new PointConverter()); + this.xStreamOld = new XStream(new DomDriver()); + xStreamOld.autodetectAnnotations(true); this.messageDispatcher = messageDispatcher; } @@ -436,7 +442,14 @@ public class ProjectFileManager { private Project parseV3File(String fileName) throws IOException { Project project; FileInputStream fis = new FileInputStream(fileName); - project = (Project) xStream.fromXML(fis); + try { + project = (Project) xStream.fromXML(fis); + } catch (Exception e) { + LOG.warn("Could not open with the new xStream, trying the old one"); + fis.close(); + fis = new FileInputStream(fileName); + project = (Project) xStreamOld.fromXML(fis); + } fis.close(); return project; } diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/misc/IconImageConverter.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/misc/IconImageConverter.java index dabb1971..e36377b0 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/misc/IconImageConverter.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/misc/IconImageConverter.java @@ -48,9 +48,14 @@ public class IconImageConverter implements Converter { writer.addAttribute("width", Integer.toString(width)); writer.addAttribute("height", Integer.toString(height)); StringBuilder dataBuilder = new StringBuilder(); + int n = 0; for (int pixel : pixels) { dataBuilder.append(Integer.toString(pixel, 16)); dataBuilder.append(","); + n++; + if (n % 16 == 0) { + dataBuilder.append("\n"); + } } writer.addAttribute("data", dataBuilder.toString()); } @@ -61,11 +66,15 @@ public class IconImageConverter implements Converter { int height = Integer.parseInt(reader.getAttribute("height")); LOG.debug("Reading image from file: " + width + "x" + height); int[] pixels = new int[width * height]; - String data = reader.getAttribute("data"); + String data = reader.getAttribute("data").replace("\n", ""); String[] splitData = data.split(","); - for (int i = 0; i < splitData.length; i++) { + for (int i = 0; i < Math.min(splitData.length, pixels.length); i++) { if (!splitData[i].isEmpty()) { - pixels[i] = Integer.parseInt(splitData[i], 16); + try { + pixels[i] = Integer.parseInt(splitData[i].trim(), 16); + } catch (Exception e) { + pixels[i] = 0; + } } }