blob: c80e6ac8cd8bd4836cacfc538989ca41fb4f2e61 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package org.openoffice.xmerge.converter.xml.sxc;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.awt.Point;
import org.openoffice.xmerge.converter.xml.OfficeConstants;
/**
* This is a class representing the different attributes for a worksheet
* contained in settings.xml.
*
* @author Martin Maher
*/
public class SheetSettings implements OfficeConstants {
/** A w3c <code>Document</code>. */
private org.w3c.dom.Document settings = null;
private String sheetName;
private int cursorX = 0;
private int cursorY = 0;
private int splitTypeX;
private int splitTypeY;
private int splitPointX = 0;
private int splitPointY = 0;
private int posLeft = 0;
private int posRight = 0;
private int posBottom = 0;
private int posTop = 0;
private int paneNumber = 2;
final public static int NONE = 0x00;
final public static int SPLIT = 0x01;
final public static int FREEZE = 0x02;
/**
* Default Constructor for a <code>ColumnRowInfo</code>
*
*/
public SheetSettings() {
}
/**
* Constructor that takes a <code>Node</code> to build a <code>SheetSettings</code>
*
* @param root XML Node to read from
*/
public SheetSettings(Node root) {
readNode(root);
}
/**
* Constructor for a <code>ColumnRowInfo</code>
*
* @param dimension if it's a row the height, a column the width
* @param repeated
*/
public SheetSettings(String name) {
sheetName = name;
}
/**
* sets the position of the acitve cell
*
* @param activeCell the current curor position
*/
public void setCursor(Point activeCell) {
cursorX = (int) activeCell.getX();
cursorY = (int) activeCell.getY();
}
/**
* Gets the position of the acitve cell
*
* @return The position as a <code>Point</code>
*/
public Point getCursor() {
return (new Point(cursorX, cursorY));
}
/**
* Sets the position of the freeze
*
* @param splitPoint the point at where the split occurs
*/
public void setFreeze(Point splitPoint) {
splitTypeX = FREEZE;
splitTypeY = FREEZE;
splitPointX = (int) splitPoint.getX();
splitPointY = (int) splitPoint.getY();
}
/**
* Sets the position of the split
*
* @param splitPoint the point at where the split occurs
*/
public void setSplit(Point splitPoint) {
splitTypeX = SPLIT;
splitTypeY = SPLIT;
splitPointX = (int) splitPoint.getX();
splitPointY = (int) splitPoint.getY();
}
/**
* sets the position and type of the split
*
* @return The position as a <code>Point</code> where the split occurs
*/
public Point getSplit() {
return (new Point(splitPointX, splitPointY));
}
/**
* sets the position and type of the split
*
* @return The position as a <code>Point</code> where the split occurs
*/
public Point getSplitType() {
return (new Point(splitTypeX, splitTypeY));
}
/**
* Sets the top row visible in the lower pane and the leftmost column
* visibile in the right pane.
*
* @param top The top row visible in the lower pane
* @param left The leftmost column visibile in the right pane
*/
public void setTopLeft(int top, int left) {
posLeft = left;
posTop = top;
}
/**
* Gets the the leftmost column visibile in the right pane.
*
* @return the 0-based index to the column
*/
public int getLeft() {
return posLeft;
}
/**
* Sets the top row visible in the lower pane and the leftmost column
* visibile in the right pane.
*
* @param top The top row visible in the lower pane
* @param left The leftmost column visibile in the right pane
*/
public int getTop() {
return posTop;
}
/**
* Gets the active Panel
* 0 - Bottom Right, 1 - Top Right
* 2 - Bottom Left, 3 - Top Left
*
* @return int representing the active panel
*/
public int getPaneNumber() {
return paneNumber;
}
/**
* Sets the sheetname this settings object applies to
*
* @param sheetName the name of the worksheet
*/
public void setSheetName(String sheetName) {
this.sheetName = sheetName;
}
/**
* Sets the active pane number
* 0 - Bottom Right, 1 - Top Right
* 2 - Bottom Left, 3 - Top Left
*
* @param paneNumber the pane number
*/
public void setPaneNumber(int paneNumber) {
this.paneNumber = paneNumber;
}
/**
* Gets the name of the worksheet these <code>Settings</code> apply to
*
* @return the name of the worksheet
*/
public String getSheetName() {
return sheetName;
}
/**
* Adds an XML entry for a particular setting
*
* @param root the root node at which to add the xml entry
* @param attribute the name of the attribute to add
* @param type the attribute type (int, short etc)
* @param value the value of the attribute
*/
private void addConfigItem(Node root, String attribute, String type, String value) {
Element configItem = settings.createElement(TAG_CONFIG_ITEM);
configItem.setAttribute(ATTRIBUTE_CONFIG_NAME, attribute);
configItem.setAttribute(ATTRIBUTE_CONFIG_TYPE, type);
configItem.appendChild(settings.createTextNode(value));
root.appendChild(configItem);
}
/**
* Writes out a settings.xml entry for this SheetSettings object
*
* @param settings a <code>Document</code> object representing the settings.xml
* @param root the root xml node to add to
*/
public void writeNode(org.w3c.dom.Document settings, Node root) {
this.settings = settings;
Element configItemMapEntry = (Element) settings.createElement(TAG_CONFIG_ITEM_MAP_ENTRY);
configItemMapEntry.setAttribute(ATTRIBUTE_CONFIG_NAME, getSheetName());
addConfigItem(configItemMapEntry, "CursorPositionX", "int", Integer.toString(cursorX));
addConfigItem(configItemMapEntry, "CursorPositionY", "int", Integer.toString(cursorY));
String splitMode = Integer.toString(splitTypeX);
if(splitPointX==0) {
splitMode = "0";
}
addConfigItem(configItemMapEntry, "HorizontalSplitMode", "short", splitMode);
splitMode = Integer.toString(splitTypeY);
if(splitPointY==0) {
splitMode = "0";
}
addConfigItem(configItemMapEntry, "VerticalSplitMode", "short", splitMode);
addConfigItem(configItemMapEntry, "HorizontalSplitPosition", "int", Integer.toString(splitPointX));
addConfigItem(configItemMapEntry, "VerticalSplitPosition", "int", Integer.toString(splitPointY));
addConfigItem(configItemMapEntry, "ActiveSplitRange", "short", Integer.toString(paneNumber));
addConfigItem(configItemMapEntry, "PositionLeft", "int", "0");
addConfigItem(configItemMapEntry, "PositionRight", "int", Integer.toString(posLeft));
addConfigItem(configItemMapEntry, "PositionTop", "int", "0");
addConfigItem(configItemMapEntry, "PositionBottom", "int", Integer.toString(posTop));
root.appendChild(configItemMapEntry);
}
/**
* Sets a variable based on a String value read from XML
*
* @param name xml name of the attribute to set
* @param value String value fo the attribute
*/
public void addAttribute(String name, String value) {
if(name.equals("CursorPositionX")) {
cursorX = Integer.parseInt(value);
} else if(name.equals("CursorPositionY")) {
cursorY = Integer.parseInt(value);
} else if(name.equals("HorizontalSplitPosition")) {
splitPointX = Integer.parseInt(value);
} else if(name.equals("VerticalSplitPosition")) {
splitPointY = Integer.parseInt(value);
} else if(name.equals("ActiveSplitRange")) {
paneNumber = Integer.parseInt(value);
} else if(name.equals("PositionRight")) {
posLeft = Integer.parseInt(value);
} else if(name.equals("PositionBottom")) {
posTop = Integer.parseInt(value);
} else if(name.equals("HorizontalSplitMode")) {
splitTypeX = Integer.parseInt(value);
} else if(name.equals("VerticalSplitMode")) {
splitTypeY = Integer.parseInt(value);
}
}
/**
* Reads document settings from xml and inits SheetSettings variables
*
* @param root XML Node to read from
*/
public void readNode(Node root) {
NamedNodeMap sheetAtt = root.getAttributes();
Node sheetNameNode = sheetAtt.getNamedItem(ATTRIBUTE_CONFIG_NAME);
sheetName = sheetNameNode.getNodeValue();
if (root.hasChildNodes()) {
NodeList nodeList = root.getChildNodes();
int len = nodeList.getLength();
for (int i = 0; i < len; i++) {
Node child = nodeList.item(i);
if (child.getNodeType() == Node.ELEMENT_NODE) {
String nodeName = child.getNodeName();
if (nodeName.equals(TAG_CONFIG_ITEM)) {
NamedNodeMap cellAtt = child.getAttributes();
Node configNameNode =
cellAtt.getNamedItem(ATTRIBUTE_CONFIG_NAME);
String name = configNameNode.getNodeValue();
NodeList nodeList2 = child.getChildNodes();
int len2 = nodeList2.getLength();
String s = "";
for (int j = 0; j < len2; j++) {
Node child2 = nodeList2.item(j);
if (child2.getNodeType() == Node.TEXT_NODE) {
s = child2.getNodeValue();
}
}
addAttribute(name, s);
}
}
}
}
}
}