/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * This file is part of xlslib -- A multiplatform, C/C++ library * for dynamic generation of Excel(TM) files. * * Copyright 2004 Yeico S. A. de C. V. All Rights Reserved. * Copyright 2008-2011 David Hoerl All Rights Reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY David Hoerl ''AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL David Hoerl OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "../xlslib/record.h" #include "../xlslib/row.h" #include "../xlslib/datast.h" #include "../xlslib/rectypes.h" #include "../xlslib/extformat.h" using namespace xlslib_core; rowheight_t::rowheight_t() : xformat(NULL), num(0), height(ROW_DFLT_HEIGHT) { } rowheight_t::rowheight_t(unsigned32_t rownum, unsigned16_t rowheight, xf_t *pxformat) : xformat(pxformat), num(rownum), height(rowheight) { } rowheight_t::~rowheight_t() { if(xformat) { xformat->UnMarkUsed(); } } /* ****************************** * CRow class implementation ****************************** */ CRow::CRow(CDataStorage &datastore, unsigned32_t rownum, unsigned32_t firstcol, unsigned32_t lastcol, unsigned16_t rowheight, const xf_t* xformat) : CRecord(datastore) { SetRecordType(RECTYPE_ROW); AddValue16((unsigned16_t)rownum); AddValue16((unsigned16_t)firstcol); AddValue16((unsigned16_t)(lastcol+1)); AddValue16(rowheight); // A field used by MS for "optimizing" (?) the loading of a file. // Doc says it shall be set to 0 if I'm creating a BIFF... AddValue16(0); // A reserved value: AddValue16(0); // TODO: The following flag-word can be used for outline cells. // As a default the GhostDirty flag is set, so the row has a default // format (set by the index of byte 18). if(rowheight == ROW_DFLT_HEIGHT) { AddValue16(ROW_DFLT_GRBIT /*|0x100*/); // [i_a] Excel2003 also sets bit 8: 0x100 } else { AddValue16(ROW_DFLT_GRBIT|ROW_GRBIT_UNSYNC /*|0x100*/); } if(xformat == NULL) { AddValue16(ROW_DFLT_IXFE); } else { AddValue16(xformat->GetIndex()); } SetRecordLength(GetDataSize()-RECORD_HEADER_SIZE); } CRow::~CRow() { } /* ****************************** * CDBCell class implementation ****************************** */ CDBCell::CDBCell(CDataStorage &datastore, size_t startblock) : CRecord(datastore) { m_Backpatching_Level = 1; // The new initializated DBCell record points to nowhere and has no // extra rows (the array of stream offsets is empty); SetRecordType(RECTYPE_DBCELL); AddValue32((unsigned32_t)startblock); SetRecordLength(GetDataSize()-RECORD_HEADER_SIZE); } CDBCell::~CDBCell() { } void CDBCell::AddRowOffset(size_t rowoffset) { AddValue16((unsigned16_t) rowoffset); SetRecordLength(GetDataSize()-RECORD_HEADER_SIZE); }