mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-10 09:12:09 +10:00
add file version info
improve image serialization serialize points referenced in inches
This commit is contained in:
@@ -59,7 +59,7 @@
|
|||||||
</entry>
|
</entry>
|
||||||
<entry>
|
<entry>
|
||||||
<string>default.org.diylc.components.misc.Label:Font Bold</string>
|
<string>default.org.diylc.components.misc.Label:Font Bold</string>
|
||||||
<boolean>true</boolean>
|
<boolean>false</boolean>
|
||||||
</entry>
|
</entry>
|
||||||
<entry>
|
<entry>
|
||||||
<string>autoCreatePads</string>
|
<string>autoCreatePads</string>
|
||||||
|
|||||||
Binary file not shown.
@@ -11,6 +11,8 @@ import org.diylc.core.annotations.PositiveMeasureValidator;
|
|||||||
import org.diylc.core.measures.Size;
|
import org.diylc.core.measures.Size;
|
||||||
import org.diylc.core.measures.SizeUnit;
|
import org.diylc.core.measures.SizeUnit;
|
||||||
|
|
||||||
|
import com.diyfever.gui.update.VersionNumber;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Entity class that defines a project. Contains project properties and a
|
* Entity class that defines a project. Contains project properties and a
|
||||||
* collection of components.This class is serialized to file. Some filed getters
|
* collection of components.This class is serialized to file. Some filed getters
|
||||||
@@ -27,6 +29,8 @@ public class Project implements Serializable {
|
|||||||
public static Size DEFAULT_HEIGHT = new Size(21d, SizeUnit.cm);
|
public static Size DEFAULT_HEIGHT = new Size(21d, SizeUnit.cm);
|
||||||
public static Size DEFAULT_GRID_SPACING = new Size(0.1d, SizeUnit.in);
|
public static Size DEFAULT_GRID_SPACING = new Size(0.1d, SizeUnit.in);
|
||||||
|
|
||||||
|
private VersionNumber fileVersion;
|
||||||
|
|
||||||
private String title;
|
private String title;
|
||||||
private String author;
|
private String author;
|
||||||
private String description;
|
private String description;
|
||||||
@@ -124,6 +128,14 @@ public class Project implements Serializable {
|
|||||||
return lockedLayers;
|
return lockedLayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VersionNumber getFileVersion() {
|
||||||
|
return fileVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFileVersion(VersionNumber fileVersion) {
|
||||||
|
this.fileVersion = fileVersion;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
final int prime = 31;
|
final int prime = 31;
|
||||||
|
|||||||
+41
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
@@ -245,6 +245,7 @@ public class Presenter implements IPlugInPort {
|
|||||||
public void saveProjectToFile(String fileName, boolean isBackup) {
|
public void saveProjectToFile(String fileName, boolean isBackup) {
|
||||||
LOG.info(String.format("saveProjectToFile(%s)", fileName));
|
LOG.info(String.format("saveProjectToFile(%s)", fileName));
|
||||||
try {
|
try {
|
||||||
|
currentProject.setFileVersion(CURRENT_VERSION);
|
||||||
projectFileManager.serializeProjectToFile(currentProject, fileName, isBackup);
|
projectFileManager.serializeProjectToFile(currentProject, fileName, isBackup);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
LOG.error("Could not save file", ex);
|
LOG.error("Could not save file", ex);
|
||||||
|
|||||||
+14
-1
@@ -68,6 +68,9 @@ public class ProjectFileManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private XStream xStream;
|
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 String currentFileName = null;
|
||||||
private boolean modified = false;
|
private boolean modified = false;
|
||||||
@@ -78,6 +81,9 @@ public class ProjectFileManager {
|
|||||||
super();
|
super();
|
||||||
this.xStream = new XStream(new DomDriver());
|
this.xStream = new XStream(new DomDriver());
|
||||||
xStream.autodetectAnnotations(true);
|
xStream.autodetectAnnotations(true);
|
||||||
|
xStream.registerConverter(new PointConverter());
|
||||||
|
this.xStreamOld = new XStream(new DomDriver());
|
||||||
|
xStreamOld.autodetectAnnotations(true);
|
||||||
this.messageDispatcher = messageDispatcher;
|
this.messageDispatcher = messageDispatcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -436,7 +442,14 @@ public class ProjectFileManager {
|
|||||||
private Project parseV3File(String fileName) throws IOException {
|
private Project parseV3File(String fileName) throws IOException {
|
||||||
Project project;
|
Project project;
|
||||||
FileInputStream fis = new FileInputStream(fileName);
|
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();
|
fis.close();
|
||||||
return project;
|
return project;
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-3
@@ -48,9 +48,14 @@ public class IconImageConverter implements Converter {
|
|||||||
writer.addAttribute("width", Integer.toString(width));
|
writer.addAttribute("width", Integer.toString(width));
|
||||||
writer.addAttribute("height", Integer.toString(height));
|
writer.addAttribute("height", Integer.toString(height));
|
||||||
StringBuilder dataBuilder = new StringBuilder();
|
StringBuilder dataBuilder = new StringBuilder();
|
||||||
|
int n = 0;
|
||||||
for (int pixel : pixels) {
|
for (int pixel : pixels) {
|
||||||
dataBuilder.append(Integer.toString(pixel, 16));
|
dataBuilder.append(Integer.toString(pixel, 16));
|
||||||
dataBuilder.append(",");
|
dataBuilder.append(",");
|
||||||
|
n++;
|
||||||
|
if (n % 16 == 0) {
|
||||||
|
dataBuilder.append("\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
writer.addAttribute("data", dataBuilder.toString());
|
writer.addAttribute("data", dataBuilder.toString());
|
||||||
}
|
}
|
||||||
@@ -61,11 +66,15 @@ public class IconImageConverter implements Converter {
|
|||||||
int height = Integer.parseInt(reader.getAttribute("height"));
|
int height = Integer.parseInt(reader.getAttribute("height"));
|
||||||
LOG.debug("Reading image from file: " + width + "x" + height);
|
LOG.debug("Reading image from file: " + width + "x" + height);
|
||||||
int[] pixels = new int[width * height];
|
int[] pixels = new int[width * height];
|
||||||
String data = reader.getAttribute("data");
|
String data = reader.getAttribute("data").replace("\n", "");
|
||||||
String[] splitData = data.split(",");
|
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()) {
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user