diff options
Diffstat (limited to 'sc/source/filter/inc/excrecds.hxx')
-rw-r--r-- | sc/source/filter/inc/excrecds.hxx | 513 |
1 files changed, 513 insertions, 0 deletions
diff --git a/sc/source/filter/inc/excrecds.hxx b/sc/source/filter/inc/excrecds.hxx new file mode 100644 index 000000000000..7e1ce313c26b --- /dev/null +++ b/sc/source/filter/inc/excrecds.hxx @@ -0,0 +1,513 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef SC_EXCRECDS_HXX +#define SC_EXCRECDS_HXX + +#include <tools/solar.h> +#include <svl/zforlist.hxx> +#include <tools/string.hxx> +#include <vcl/vclenum.hxx> +#include <tools/color.hxx> + + +#include <vector> +#include "olinetab.hxx" +#include "filter.hxx" +#include "rangelst.hxx" +#include "xerecord.hxx" +#include "xeroot.hxx" +#include "xeformula.hxx" +#include "xestring.hxx" +#include "root.hxx" +#include "excdefs.hxx" +#include "cell.hxx" +#include <boost/shared_ptr.hpp> + +//------------------------------------------------------------------ Forwards - + +class SvxBorderLine; + +class SvStream; +class Font; +class List; +class ScPatternAttr; +class ScTokenArray; +class ScRangeData; +class ScDBData; +class ScEditCell; +class SfxItemSet; +class EditTextObject; +class ScPageHFItem; +class ScProgress; + +class ExcTable; + +//----------------------------------------------------------- class ExcRecord - + +class ExcRecord : public XclExpRecord +{ +public: + virtual void Save( XclExpStream& rStrm ); + virtual void SaveXml( XclExpXmlStream& rStrm ); + + virtual UINT16 GetNum() const = 0; + virtual sal_Size GetLen() const = 0; + +protected: + virtual void SaveCont( XclExpStream& rStrm ); + +private: + /** Writes the body of the record. */ + virtual void WriteBody( XclExpStream& rStrm ); +}; + + +//--------------------------------------------------------- class ExcEmptyRec - + +class ExcEmptyRec : public ExcRecord +{ +private: +protected: +public: + virtual void Save( XclExpStream& rStrm ); + virtual UINT16 GetNum() const; + virtual sal_Size GetLen() const; +}; + + +//------------------------------------------------------- class ExcRecordList - + +class ExcRecordList : protected List, public ExcEmptyRec +{ +private: +protected: +public: + virtual ~ExcRecordList(); + + using List::Count; + + inline ExcRecord* First( void ) { return ( ExcRecord* ) List::First(); } + inline ExcRecord* Next( void ) { return ( ExcRecord* ) List::Next(); } + + inline void Append( ExcRecord* pNew ) { if( pNew ) List::Insert( pNew, LIST_APPEND ); } + inline const ExcRecord* Get( UINT32 nNum ) const { return ( ExcRecord* ) List::GetObject( nNum ); } + + virtual void Save( XclExpStream& rStrm ); +}; + + +//--------------------------------------------------------- class ExcDummyRec - + +class ExcDummyRec : public ExcRecord +{ +protected: +public: + virtual void Save( XclExpStream& rStrm ); + virtual UINT16 GetNum() const; + virtual const BYTE* GetData() const = 0; // byte data must contain header and body +}; + + +//------------------------------------------------------- class ExcBoolRecord - +// stores BOOL as 16bit val ( 0x0000 | 0x0001 ) + +class ExcBoolRecord : public ExcRecord +{ +private: + virtual void SaveCont( XclExpStream& rStrm ); + +protected: + BOOL bVal; + + inline ExcBoolRecord() : bVal( FALSE ) {} + +public: + inline ExcBoolRecord( const BOOL bDefault ) : bVal( bDefault ) {} + + virtual sal_Size GetLen( void ) const; +}; + + +//--------------------------------------------------------- class ExcBof_Base - + +class ExcBof_Base : public ExcRecord +{ +private: +protected: + UINT16 nDocType; + UINT16 nVers; + UINT16 nRupBuild; + UINT16 nRupYear; +public: + ExcBof_Base( void ); +}; + + +//-------------------------------------------------------------- class ExcBof - +// Header Record fuer WORKSHEETS + +class ExcBof : public ExcBof_Base +{ +private: + virtual void SaveCont( XclExpStream& rStrm ); +public: + ExcBof( void ); + + virtual UINT16 GetNum( void ) const; + virtual sal_Size GetLen( void ) const; +}; + + +//------------------------------------------------------------- class ExcBofW - +// Header Record fuer WORKBOOKS + +class ExcBofW : public ExcBof_Base +{ +private: + virtual void SaveCont( XclExpStream& rStrm ); +public: + ExcBofW( void ); + + virtual UINT16 GetNum( void ) const; + virtual sal_Size GetLen( void ) const; +}; + + +//-------------------------------------------------------------- class ExcEof - + +class ExcEof : public ExcRecord +{ +private: +public: + virtual UINT16 GetNum( void ) const; + virtual sal_Size GetLen( void ) const; +}; + + +//--------------------------------------------------------- class ExcDummy_00 - +// INTERFACEHDR to FNGROUPCOUNT (see excrecds.cxx) + +class ExcDummy_00 : public ExcDummyRec +{ +private: + static const BYTE pMyData[]; + static const sal_Size nMyLen; +public: + virtual sal_Size GetLen( void ) const; + virtual const BYTE* GetData( void ) const; +}; + +// EXC_ID_WINDOWPROTECTION +class XclExpWindowProtection : public XclExpBoolRecord +{ + public: + XclExpWindowProtection(bool bValue); + + virtual void SaveXml( XclExpXmlStream& rStrm ); +}; + +// EXC_ID_PROTECT Document Protection +class XclExpProtection : public XclExpBoolRecord +{ + public: + XclExpProtection(bool bValue); +}; + +class XclExpPassHash : public XclExpRecord +{ +public: + XclExpPassHash(const ::com::sun::star::uno::Sequence<sal_Int8>& aHash); + virtual ~XclExpPassHash(); + +private: + virtual void WriteBody(XclExpStream& rStrm); + +private: + sal_uInt16 mnHash; +}; + + +//-------------------------------------------------------- class ExcDummy_04x - +// PASSWORD to BOOKBOOL (see excrecds.cxx), no 1904 + +class ExcDummy_040 : public ExcDummyRec +{ +private: + static const BYTE pMyData[]; + static const sal_Size nMyLen; +public: + virtual sal_Size GetLen( void ) const; + virtual const BYTE* GetData( void ) const; +}; + + + +class ExcDummy_041 : public ExcDummyRec +{ +private: + static const BYTE pMyData[]; + static const sal_Size nMyLen; +public: + virtual sal_Size GetLen( void ) const; + virtual const BYTE* GetData( void ) const; +}; + + +//------------------------------------------------------------- class Exc1904 - + +class Exc1904 : public ExcBoolRecord +{ +public: + Exc1904( ScDocument& rDoc ); + virtual UINT16 GetNum( void ) const; + + virtual void SaveXml( XclExpXmlStream& rStrm ); +private: + BOOL bDateCompatibility; +}; + + +//------------------------------------------------------ class ExcBundlesheet - + +class ExcBundlesheetBase : public ExcRecord +{ +protected: + sal_Size nStrPos; + sal_Size nOwnPos; // Position NACH # und Len + UINT16 nGrbit; + SCTAB nTab; + + ExcBundlesheetBase(); + +public: + ExcBundlesheetBase( RootData& rRootData, SCTAB nTab ); + + inline void SetStreamPos( sal_Size nNewStrPos ) { nStrPos = nNewStrPos; } + void UpdateStreamPos( XclExpStream& rStrm ); + + virtual UINT16 GetNum() const; +}; + + + +class ExcBundlesheet : public ExcBundlesheetBase +{ +private: + ByteString aName; + + virtual void SaveCont( XclExpStream& rStrm ); + +public: + ExcBundlesheet( RootData& rRootData, SCTAB nTab ); + virtual sal_Size GetLen() const; +}; + +//--------------------------------------------------------- class ExcDummy_02 - +// sheet dummies: CALCMODE to SETUP + +class ExcDummy_02a : public ExcDummyRec +{ +private: + static const BYTE pMyData[]; + static const sal_Size nMyLen; +public: + virtual sal_Size GetLen( void ) const; + virtual const BYTE* GetData( void ) const; +}; + + +// ---------------------------------------------------------------------------- + +/** This record contains the Windows country IDs for the UI and document language. */ +class XclExpCountry : public XclExpRecord +{ +public: + explicit XclExpCountry( const XclExpRoot& rRoot ); + +private: + sal_uInt16 mnUICountry; /// The UI country ID. + sal_uInt16 mnDocCountry; /// The document country ID. + + /** Writes the body of the COUNTRY record. */ + virtual void WriteBody( XclExpStream& rStrm ); +}; + + +// XclExpWsbool =============================================================== + +class XclExpWsbool : public XclExpUInt16Record +{ +public: + explicit XclExpWsbool( bool bFitToPages, SCTAB nScTab = -1, XclExpFilterManager* pManager = NULL ); + + virtual void SaveXml( XclExpXmlStream& rStrm ); +private: + SCTAB mnScTab; + XclExpFilterManager* mpManager; +}; + + +// ============================================================================ + +class XclExpFiltermode : public XclExpEmptyRecord +{ +public: + explicit XclExpFiltermode(); +}; + +// ---------------------------------------------------------------------------- + +class XclExpAutofilterinfo : public XclExpUInt16Record +{ +public: + explicit XclExpAutofilterinfo( const ScAddress& rStartPos, SCCOL nScCol ); + + inline const ScAddress GetStartPos() const { return maStartPos; } + inline SCCOL GetColCount() const { return static_cast< SCCOL >( GetValue() ); } + +private: + ScAddress maStartPos; +}; + +// ---------------------------------------------------------------------------- + +class ExcFilterCondition +{ +private: + UINT8 nType; + UINT8 nOper; + double fVal; + XclExpString* pText; + +protected: +public: + ExcFilterCondition(); + ~ExcFilterCondition(); + + inline BOOL IsEmpty() const { return (nType == EXC_AFTYPE_NOTUSED); } + inline BOOL HasEqual() const { return (nOper == EXC_AFOPER_EQUAL); } + ULONG GetTextBytes() const; + + void SetCondition( UINT8 nTp, UINT8 nOp, double fV, String* pT ); + + void Save( XclExpStream& rStrm ); + void SaveXml( XclExpXmlStream& rStrm ); + void SaveText( XclExpStream& rStrm ); +}; + +// ---------------------------------------------------------------------------- + +class XclExpAutofilter : public XclExpRecord, protected XclExpRoot +{ +private: + UINT16 nCol; + UINT16 nFlags; + ExcFilterCondition aCond[ 2 ]; + + BOOL AddCondition( ScQueryConnect eConn, UINT8 nType, + UINT8 nOp, double fVal, String* pText, + BOOL bSimple = FALSE ); + + virtual void WriteBody( XclExpStream& rStrm ); + +protected: +public: + XclExpAutofilter( const XclExpRoot& rRoot, UINT16 nC ); + + inline UINT16 GetCol() const { return nCol; } + inline BOOL HasCondition() const { return !aCond[ 0 ].IsEmpty(); } + inline BOOL HasTop10() const { return ::get_flag( nFlags, EXC_AFFLAG_TOP10 ); } + + BOOL AddEntry( const ScQueryEntry& rEntry ); + + virtual void SaveXml( XclExpXmlStream& rStrm ); +}; + +// ---------------------------------------------------------------------------- + +class ExcAutoFilterRecs : public XclExpRecordBase, protected XclExpRoot +{ +public: + explicit ExcAutoFilterRecs( const XclExpRoot& rRoot, SCTAB nTab ); + virtual ~ExcAutoFilterRecs(); + + void AddObjRecs(); + + virtual void Save( XclExpStream& rStrm ); + virtual void SaveXml( XclExpXmlStream& rStrm ); + + bool HasFilterMode() const; + +private: + XclExpAutofilter* GetByCol( SCCOL nCol ); // always 0-based + BOOL IsFiltered( SCCOL nCol ); + +private: + typedef XclExpRecordList< XclExpAutofilter > XclExpAutofilterList; + typedef XclExpAutofilterList::RecordRefType XclExpAutofilterRef; + + XclExpAutofilterList maFilterList; + XclExpFiltermode* pFilterMode; + XclExpAutofilterinfo* pFilterInfo; + ScRange maRef; + bool mbAutoFilter; +}; + +// ---------------------------------------------------------------------------- + +/** Sheet filter manager. Contains auto filters or advanced filters from all sheets. */ +class XclExpFilterManager : protected XclExpRoot +{ +public: + explicit XclExpFilterManager( const XclExpRoot& rRoot ); + + /** Creates the filter records for the specified sheet. + @descr Creates and inserts related built-in NAME records. Therefore this + function is called from the name buffer itself. */ + void InitTabFilter( SCTAB nScTab ); + + /** Returns a record object containing all filter records for the specified sheet. */ + XclExpRecordRef CreateRecord( SCTAB nScTab ); + + /** Returns whether or not FilterMode is present */ + bool HasFilterMode( SCTAB nScTab ); + +private: + using XclExpRoot::CreateRecord; + + typedef boost::shared_ptr< ExcAutoFilterRecs > XclExpTabFilterRef; + typedef ::std::map< SCTAB, XclExpTabFilterRef > XclExpTabFilterMap; + + XclExpTabFilterMap maFilterMap; +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |