text: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
   *
   * 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);
  }
  