package org.freeplane.core.resources;
import java.awt.Dimension;
import java.awt.Frame;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import org.freeplane.core.ui.components.UITools;
import org.freeplane.core.util.LogUtils;
import org.freeplane.n3.nanoxml.IXMLParser;
import org.freeplane.n3.nanoxml.IXMLReader;
import org.freeplane.n3.nanoxml.StdXMLReader;
import org.freeplane.n3.nanoxml.XMLElement;
import org.freeplane.n3.nanoxml.XMLException;
import org.freeplane.n3.nanoxml.XMLParserFactory;
import org.freeplane.n3.nanoxml.XMLWriter;
public class WindowConfigurationStorage {
protected int height;
protected int width;
protected int x;
protected int y;
final private String name;
public WindowConfigurationStorage(String name) {
super();
this.name = name;
}
public int getHeight() {
return height;
}
public int getWidth() {
return width;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
private String marshall() {
final XMLElement xml = new XMLElement();
xml.setAttribute("x", Integer.toString(x));
xml.setAttribute("y", Integer.toString(y));
xml.setAttribute("width", Integer.toString(width));
xml.setAttribute("height", Integer.toString(height));
xml.setName(name);
marshallSpecificElements(xml);
final StringWriter string = new StringWriter();
final XMLWriter writer = new XMLWriter(string);
try {
writer.write(xml);
return string.toString();
}
catch (final IOException e) {
LogUtils.severe(e);
return null;
}
}
protected void marshallSpecificElements(XMLElement xml){
};
public void setHeight(final int height) {
this.height = height;
}
public void setWidth(final int width) {
this.width = width;
}
public void setX(final int x) {
this.x = x;
}
public void setY(final int y) {
this.y = y;
}
public void storeDialogPositions(final JDialog dialog) {
storeDialogPositions(dialog, name);
}
public void storeDialogPositions(final JDialog dialog, final String window_preference_storage_property) {
setX((dialog.getX()));
setY((dialog.getY()));
setWidth((dialog.getWidth()));
setHeight((dialog.getHeight()));
final String marshalled = marshall();
ResourceController.getResourceController().setProperty(window_preference_storage_property, marshalled);
}
public XMLElement restoreDialogPositions(final JDialog dialog) {
return restoreDialogPositions(dialog, name);
}
public XMLElement restoreDialogPositions(final JDialog dialog, final String window_preference_storage_property) {
String marshalled = ResourceController.getResourceController().getProperty(window_preference_storage_property);
return unmarschall(marshalled, dialog);
}
protected XMLElement unmarschall(final String marshalled, final JDialog dialog) {
if (marshalled != null) {
final IXMLParser parser = XMLParserFactory.createDefaultXMLParser();
final IXMLReader xmlReader = new StdXMLReader(new StringReader(marshalled));
parser.setReader(xmlReader);
try {
final XMLElement storage = (XMLElement) parser.parse();
if (storage != null) {
x = Integer.parseInt(storage.getAttribute("x", "-1"));
y = Integer.parseInt(storage.getAttribute("y", "-1"));
width = Integer.parseInt(storage.getAttribute("width", "-1"));
height = Integer.parseInt(storage.getAttribute("height", "-1"));
UITools.setBounds(dialog, x, y, width, height);
return storage;
}
}
catch (final NumberFormatException e) {
LogUtils.severe(e);
}
catch (final XMLException e) {
LogUtils.severe(e);
}
}
final Frame rootFrame = JOptionPane.getFrameForComponent(dialog);
final Dimension prefSize = rootFrame.getSize();
prefSize.width = prefSize.width * 3 / 4;
prefSize.height = prefSize.height * 3 / 4;
dialog.setSize(prefSize);
return null;
}
}