/components/forks/poi/src/loci/poi/hssf/record/WindowTwoRecord.java
Java | 600 lines | 290 code | 100 blank | 210 comment | 4 complexity | 2f0b316a26e7d5bbbbe5284b2b9eb7ec MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, Apache-2.0, BSD-2-Clause, MPL-2.0-no-copyleft-exception
- /*
- * #%L
- * Fork of Apache Jakarta POI.
- * %%
- * Copyright (C) 2008 - 2013 Open Microscopy Environment:
- * - Board of Regents of the University of Wisconsin-Madison
- * - Glencoe Software, Inc.
- * - University of Dundee
- * %%
- * Licensed 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.
- * #L%
- */
- /* ====================================================================
- 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 loci.poi.hssf.record;
- import loci.poi.util.BitField;
- import loci.poi.util.BitFieldFactory;
- import loci.poi.util.LittleEndian;
- /**
- * Title: Window Two Record<P>
- * Description: sheet window settings<P>
- * REFERENCE: PG 422 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P>
- * @author Andrew C. Oliver (acoliver at apache dot org)
- * @author Jason Height (jheight at chariot dot net dot au)
- * @version 2.0-pre
- */
- public class WindowTwoRecord
- extends Record
- {
- public final static short sid = 0x23e;
- private short field_1_options;
- // bitfields
- private BitField displayFormulas = BitFieldFactory.getInstance(0x01);
- private BitField displayGridlines = BitFieldFactory.getInstance(0x02);
- private BitField displayRowColHeadings = BitFieldFactory.getInstance(0x04);
- private BitField freezePanes = BitFieldFactory.getInstance(0x08);
- private BitField displayZeros = BitFieldFactory.getInstance(0x10);
- private BitField defaultHeader =
- BitFieldFactory.getInstance(0x20); // if false use color in field 4
- // if true use default foreground
- // for headers
- private BitField arabic =
- BitFieldFactory.getInstance(0x40); // for our desert dwelling friends
- private BitField displayGuts = BitFieldFactory.getInstance(0x80);
- private BitField freezePanesNoSplit = BitFieldFactory.getInstance(0x100);
- private BitField selected = BitFieldFactory.getInstance(0x200);
- private BitField paged = BitFieldFactory.getInstance(0x400);
- private BitField savedInPageBreakPreview = BitFieldFactory.getInstance(0x800);
- // 4-7 reserved
- // end bitfields
- private short field_2_top_row;
- private short field_3_left_col;
- private int field_4_header_color;
- private short field_5_page_break_zoom;
- private short field_6_normal_zoom;
- private int field_7_reserved;
- public WindowTwoRecord()
- {
- }
- /**
- * Constructs a WindowTwo record and sets its fields appropriately.
- * @param in the RecordInputstream to read the record from
- */
- public WindowTwoRecord(RecordInputStream in)
- {
- super(in);
- }
- protected void validateSid(short id)
- {
- if (id != sid)
- {
- throw new RecordFormatException("NOT A valid WindowTwo RECORD");
- }
- }
- protected void fillFields(RecordInputStream in)
- {
- int size = in.remaining();
- field_1_options = in.readShort();
- field_2_top_row = in.readShort();
- field_3_left_col = in.readShort();
- field_4_header_color = in.readInt();
- if (size > 10)
- {
- field_5_page_break_zoom = in.readShort();
- field_6_normal_zoom = in.readShort();
- }
- if (size > 14)
- { // there is a special case of this record that has only 14 bytes...undocumented!
- field_7_reserved = in.readInt();
- }
- }
- /**
- * set the options bitmask or just use the bit setters.
- * @param options
- */
- public void setOptions(short options)
- {
- field_1_options = options;
- }
- // option bitfields
- /**
- * set whether the window should display formulas
- * @param formulas or not
- */
- public void setDisplayFormulas(boolean formulas)
- {
- field_1_options = displayFormulas.setShortBoolean(field_1_options, formulas);
- }
- /**
- * set whether the window should display gridlines
- * @param gridlines or not
- */
- public void setDisplayGridlines(boolean gridlines)
- {
- field_1_options = displayGridlines.setShortBoolean(field_1_options, gridlines);
- }
- /**
- * set whether the window should display row and column headings
- * @param headings or not
- */
- public void setDisplayRowColHeadings(boolean headings)
- {
- field_1_options = displayRowColHeadings.setShortBoolean(field_1_options, headings);
- }
- /**
- * set whether the window should freeze panes
- * @param freezepanes freeze panes or not
- */
- public void setFreezePanes(boolean freezepanes)
- {
- field_1_options = freezePanes.setShortBoolean(field_1_options, freezepanes);
- }
- /**
- * set whether the window should display zero values
- * @param zeros or not
- */
- public void setDisplayZeros(boolean zeros)
- {
- field_1_options = displayZeros.setShortBoolean(field_1_options, zeros);
- }
- /**
- * set whether the window should display a default header
- * @param header or not
- */
- public void setDefaultHeader(boolean header)
- {
- field_1_options = defaultHeader.setShortBoolean(field_1_options, header);
- }
- /**
- * is this arabic?
- * @param isarabic arabic or not
- */
- public void setArabic(boolean isarabic)
- {
- field_1_options = arabic.setShortBoolean(field_1_options, isarabic);
- }
- /**
- * set whether the outline symbols are displaed
- * @param guts symbols or not
- */
- public void setDisplayGuts(boolean guts)
- {
- field_1_options = displayGuts.setShortBoolean(field_1_options, guts);
- }
- /**
- * freeze unsplit panes or not
- * @param freeze or not
- */
- public void setFreezePanesNoSplit(boolean freeze)
- {
- field_1_options = freezePanesNoSplit.setShortBoolean(field_1_options, freeze);
- }
- /**
- * sheet tab is selected
- * @param sel selected or not
- */
- public void setSelected(boolean sel)
- {
- field_1_options = selected.setShortBoolean(field_1_options, sel);
- }
- /**
- * is the sheet currently displayed in the window
- * @param p displayed or not
- */
- public void setPaged(boolean p)
- {
- field_1_options = paged.setShortBoolean(field_1_options, p);
- }
- /**
- * was the sheet saved in page break view
- * @param p pagebreaksaved or not
- */
- public void setSavedInPageBreakPreview(boolean p)
- {
- field_1_options = savedInPageBreakPreview.setShortBoolean(field_1_options, p);
- }
- // end of bitfields.
- /**
- * set the top row visible in the window
- * @param topRow top row visible
- */
- public void setTopRow(short topRow)
- {
- field_2_top_row = topRow;
- }
- /**
- * set the leftmost column displayed in the window
- * @param leftCol leftmost column
- */
- public void setLeftCol(short leftCol)
- {
- field_3_left_col = leftCol;
- }
- /**
- * set the palette index for the header color
- * @param color
- */
- public void setHeaderColor(int color)
- {
- field_4_header_color = color;
- }
- /**
- * zoom magification in page break view
- * @param zoom
- */
- public void setPageBreakZoom(short zoom)
- {
- field_5_page_break_zoom = zoom;
- }
- /**
- * set the zoom magnification in normal view
- * @param zoom
- */
- public void setNormalZoom(short zoom)
- {
- field_6_normal_zoom = zoom;
- }
- /**
- * set the reserved (don't do this) value
- */
- public void setReserved(int reserved)
- {
- field_7_reserved = reserved;
- }
- /**
- * get the options bitmask or just use the bit setters.
- * @return options
- */
- public short getOptions()
- {
- return field_1_options;
- }
- // option bitfields
- /**
- * get whether the window should display formulas
- * @return formulas or not
- */
- public boolean getDisplayFormulas()
- {
- return displayFormulas.isSet(field_1_options);
- }
- /**
- * get whether the window should display gridlines
- * @return gridlines or not
- */
- public boolean getDisplayGridlines()
- {
- return displayGridlines.isSet(field_1_options);
- }
- /**
- * get whether the window should display row and column headings
- * @return headings or not
- */
- public boolean getDisplayRowColHeadings()
- {
- return displayRowColHeadings.isSet(field_1_options);
- }
- /**
- * get whether the window should freeze panes
- * @return freeze panes or not
- */
- public boolean getFreezePanes()
- {
- return freezePanes.isSet(field_1_options);
- }
- /**
- * get whether the window should display zero values
- * @return zeros or not
- */
- public boolean getDisplayZeros()
- {
- return displayZeros.isSet(field_1_options);
- }
- /**
- * get whether the window should display a default header
- * @return header or not
- */
- public boolean getDefaultHeader()
- {
- return defaultHeader.isSet(field_1_options);
- }
- /**
- * is this arabic?
- * @return arabic or not
- */
- public boolean getArabic()
- {
- return arabic.isSet(field_1_options);
- }
- /**
- * get whether the outline symbols are displaed
- * @return symbols or not
- */
- public boolean getDisplayGuts()
- {
- return displayGuts.isSet(field_1_options);
- }
- /**
- * freeze unsplit panes or not
- * @return freeze or not
- */
- public boolean getFreezePanesNoSplit()
- {
- return freezePanesNoSplit.isSet(field_1_options);
- }
- /**
- * sheet tab is selected
- * @return selected or not
- */
- public boolean getSelected()
- {
- return selected.isSet(field_1_options);
- }
- /**
- * is the sheet currently displayed in the window
- * @return displayed or not
- */
- public boolean getPaged()
- {
- return paged.isSet(field_1_options);
- }
- /**
- * was the sheet saved in page break view
- * @return pagebreaksaved or not
- */
- public boolean getSavedInPageBreakPreview()
- {
- return savedInPageBreakPreview.isSet(field_1_options);
- }
- // end of bitfields.
- /**
- * get the top row visible in the window
- * @return toprow
- */
- public short getTopRow()
- {
- return field_2_top_row;
- }
- /**
- * get the leftmost column displayed in the window
- * @return leftmost
- */
- public short getLeftCol()
- {
- return field_3_left_col;
- }
- /**
- * get the palette index for the header color
- * @return color
- */
- public int getHeaderColor()
- {
- return field_4_header_color;
- }
- /**
- * zoom magification in page break view
- * @return zoom
- */
- public short getPageBreakZoom()
- {
- return field_5_page_break_zoom;
- }
- /**
- * get the zoom magnification in normal view
- * @return zoom
- */
- public short getNormalZoom()
- {
- return field_6_normal_zoom;
- }
- /**
- * get the reserved bits - why would you do this?
- * @return reserved stuff -probably garbage
- */
- public int getReserved()
- {
- return field_7_reserved;
- }
- public String toString()
- {
- StringBuffer buffer = new StringBuffer();
- buffer.append("[WINDOW2]\n");
- buffer.append(" .options = ")
- .append(Integer.toHexString(getOptions())).append("\n");
- buffer.append(" .dispformulas= ").append(getDisplayFormulas())
- .append("\n");
- buffer.append(" .dispgridlins= ").append(getDisplayGridlines())
- .append("\n");
- buffer.append(" .disprcheadin= ")
- .append(getDisplayRowColHeadings()).append("\n");
- buffer.append(" .freezepanes = ").append(getFreezePanes())
- .append("\n");
- buffer.append(" .displayzeros= ").append(getDisplayZeros())
- .append("\n");
- buffer.append(" .defaultheadr= ").append(getDefaultHeader())
- .append("\n");
- buffer.append(" .arabic = ").append(getArabic())
- .append("\n");
- buffer.append(" .displayguts = ").append(getDisplayGuts())
- .append("\n");
- buffer.append(" .frzpnsnosplt= ")
- .append(getFreezePanesNoSplit()).append("\n");
- buffer.append(" .selected = ").append(getSelected())
- .append("\n");
- buffer.append(" .paged = ").append(getPaged())
- .append("\n");
- buffer.append(" .svdinpgbrkpv= ")
- .append(getSavedInPageBreakPreview()).append("\n");
- buffer.append(" .toprow = ")
- .append(Integer.toHexString(getTopRow())).append("\n");
- buffer.append(" .leftcol = ")
- .append(Integer.toHexString(getLeftCol())).append("\n");
- buffer.append(" .headercolor = ")
- .append(Integer.toHexString(getHeaderColor())).append("\n");
- buffer.append(" .pagebreakzoom = ")
- .append(Integer.toHexString(getPageBreakZoom())).append("\n");
- buffer.append(" .normalzoom = ")
- .append(Integer.toHexString(getNormalZoom())).append("\n");
- buffer.append(" .reserved = ")
- .append(Integer.toHexString(getReserved())).append("\n");
- buffer.append("[/WINDOW2]\n");
- return buffer.toString();
- }
- public int serialize(int offset, byte [] data)
- {
- LittleEndian.putShort(data, 0 + offset, sid);
- LittleEndian.putShort(data, 2 + offset, ( short ) 18);
- LittleEndian.putShort(data, 4 + offset, getOptions());
- LittleEndian.putShort(data, 6 + offset, getTopRow());
- LittleEndian.putShort(data, 8 + offset, getLeftCol());
- LittleEndian.putInt(data, 10 + offset, getHeaderColor());
- LittleEndian.putShort(data, 14 + offset, getPageBreakZoom());
- LittleEndian.putShort(data, 16 + offset, getNormalZoom());
- LittleEndian.putInt(data, 18 + offset, getReserved());
- return getRecordSize();
- }
- public int getRecordSize()
- {
- return 22;
- }
- public short getSid()
- {
- return sid;
- }
- public Object clone() {
- WindowTwoRecord rec = new WindowTwoRecord();
- rec.field_1_options = field_1_options;
- rec.field_2_top_row = field_2_top_row;
- rec.field_3_left_col = field_3_left_col;
- rec.field_4_header_color = field_4_header_color;
- rec.field_5_page_break_zoom = field_5_page_break_zoom;
- rec.field_6_normal_zoom = field_6_normal_zoom;
- rec.field_7_reserved = field_7_reserved;
- return rec;
- }
- }