Package org.freeplane.core.resources

Source Code of org.freeplane.core.resources.WindowConfigurationStorage

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;
  }
}
TOP

Related Classes of org.freeplane.core.resources.WindowConfigurationStorage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.