diff options
author | Vladimir Glazounov <vg@openoffice.org> | 2008-09-30 13:51:36 +0000 |
---|---|---|
committer | Vladimir Glazounov <vg@openoffice.org> | 2008-09-30 13:51:36 +0000 |
commit | 07cabd8e634679ff59db4d72eacdfb514feb3cd1 (patch) | |
tree | 41b064504b537ff35a017aad8373870ae2cc1738 /oox/inc/oox/xls/excelhandlers.hxx | |
parent | a53f44d8fba07d9f7a79ac594a85b1059f1ae4a6 (diff) |
CWS-TOOLING: integrate CWS dr63
Diffstat (limited to 'oox/inc/oox/xls/excelhandlers.hxx')
-rw-r--r-- | oox/inc/oox/xls/excelhandlers.hxx | 232 |
1 files changed, 223 insertions, 9 deletions
diff --git a/oox/inc/oox/xls/excelhandlers.hxx b/oox/inc/oox/xls/excelhandlers.hxx index 5a9f7fecc90c..1c7a511e826d 100644 --- a/oox/inc/oox/xls/excelhandlers.hxx +++ b/oox/inc/oox/xls/excelhandlers.hxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: excelhandlers.hxx,v $ - * $Revision: 1.4 $ + * $Revision: 1.4.20.2 $ * * This file is part of OpenOffice.org. * @@ -43,15 +43,19 @@ namespace oox { namespace xls { -typedef ::oox::core::ContextWrapper ContextWrapper; +typedef ::oox::core::ContextHandler2 OoxContextHandler; +typedef ::oox::core::FragmentHandler2 OoxFragmentHandler; +typedef ::oox::core::ContextWrapper ContextWrapper; + +// ============================================================================ // ============================================================================ /** Context handler derived from the WorkbookHelper helper class. Used to import contexts in global workbook fragments. */ -class OoxWorkbookContextBase : public ::oox::core::ContextHandler2, public WorkbookHelper +class OoxWorkbookContextBase : public OoxContextHandler, public WorkbookHelper { public: template< typename ParentType > @@ -62,7 +66,7 @@ public: template< typename ParentType > OoxWorkbookContextBase::OoxWorkbookContextBase( ParentType& rParent ) : - ::oox::core::ContextHandler2( rParent ), + OoxContextHandler( rParent ), WorkbookHelper( rParent ) { } @@ -73,7 +77,7 @@ OoxWorkbookContextBase::OoxWorkbookContextBase( ParentType& rParent ) : Used to import contexts in sheet fragments. */ -class OoxWorksheetContextBase : public ::oox::core::ContextHandler2, public WorksheetHelperRoot +class OoxWorksheetContextBase : public OoxContextHandler, public WorksheetHelperRoot { public: template< typename ParentType > @@ -92,14 +96,14 @@ public: template< typename ParentType > OoxWorksheetContextBase::OoxWorksheetContextBase( ParentType& rParent, ISegmentProgressBarRef xProgressBar, WorksheetType eSheetType, sal_Int32 nSheet ) : - ::oox::core::ContextHandler2( rParent ), + OoxContextHandler( rParent ), WorksheetHelperRoot( rParent, xProgressBar, eSheetType, nSheet ) { } template< typename ParentType > OoxWorksheetContextBase::OoxWorksheetContextBase( ParentType& rParent ) : - ::oox::core::ContextHandler2( rParent ), + OoxContextHandler( rParent ), WorksheetHelperRoot( rParent ) { } @@ -110,7 +114,7 @@ OoxWorksheetContextBase::OoxWorksheetContextBase( ParentType& rParent ) : Used to import global workbook fragments. */ -class OoxWorkbookFragmentBase : public ::oox::core::FragmentHandler2, public WorkbookHelper +class OoxWorkbookFragmentBase : public OoxFragmentHandler, public WorkbookHelper { public: explicit OoxWorkbookFragmentBase( @@ -124,7 +128,7 @@ public: Used to import sheet fragments. */ -class OoxWorksheetFragmentBase : public ::oox::core::FragmentHandler2, public WorksheetHelperRoot +class OoxWorksheetFragmentBase : public OoxFragmentHandler, public WorksheetHelperRoot { public: explicit OoxWorksheetFragmentBase( @@ -140,6 +144,216 @@ public: }; // ============================================================================ +// ============================================================================ + +/** An enumeration for all types of fragments in a BIFF workbook stream. */ +enum BiffFragmentType +{ + BIFF_FRAGMENT_GLOBALS, /// Workbook globals fragment. + BIFF_FRAGMENT_WORKSHEET, /// Worksheet fragment. + BIFF_FRAGMENT_CHARTSHEET, /// Chart sheet fragment. + BIFF_FRAGMENT_MACROSHEET, /// Macro sheet fragment. + BIFF_FRAGMENT_MODULESHEET, /// BIFF5 VB module fragment. + BIFF_FRAGMENT_EMPTYSHEET, /// Sheet fragment of unsupported type. + BIFF_FRAGMENT_WORKSPACE, /// BIFF4 workspace/workbook globals. + BIFF_FRAGMENT_UNKNOWN /// Unknown fragment/error. +}; + +// ============================================================================ + +/** Base class for all BIFF context handlers and fragment handlers. + + This base class holds a reference to the BIFF input stream which can be + accessed in all derived classes. + */ +class BiffHandlerBase +{ +protected: + inline explicit BiffHandlerBase( BiffInputStream& rStrm ) : mrStrm( rStrm ) {} + virtual ~BiffHandlerBase(); + + /** Skips a block of records up to the specified end record. + + Skips all records until next end record. When this function returns, + stream points to the end record, and the next call of startNextRecord() + at the stream will start the record following the end record. + + The identifier of the record that is active while this function is + called is used as start record identifier. This identifier is used to + correctly skip embedded record blocks with the same start and end + record identifier. + + @return True = stream points to the end record. + */ + bool skipRecordBlock( sal_uInt16 nEndRecId ); + + /** @return True = current record identifier is a BOF record. */ + bool isBofRecord() const; + +protected: + BiffInputStream& mrStrm; +}; + +// ============================================================================ + +/** Base class for all BIFF context handlers. + + Derived handlers have to implement the importRecord() function that has to + import the record the BIFF input stream currently points to. + */ +class BiffContextHandler : public BiffHandlerBase +{ +public: + /** Derived classes have to implement importing the current record. */ + virtual void importRecord() = 0; + +protected: + explicit BiffContextHandler( const BiffHandlerBase& rParent ); +}; + +// ============================================================================ + +/** Context handler derived from the WorkbookHelper helper class. + + Used to import contexts in global workbook fragments. + */ +class BiffWorkbookContextBase : public BiffContextHandler, public WorkbookHelper +{ +protected: + template< typename ParentType > + explicit BiffWorkbookContextBase( const ParentType& rParent ); +}; + +// ---------------------------------------------------------------------------- + +template< typename ParentType > +BiffWorkbookContextBase::BiffWorkbookContextBase( const ParentType& rParent ) : + BiffContextHandler( rParent ), + WorkbookHelper( rParent ) +{ +} + +// ============================================================================ + +/** Context handler derived from the WorksheetHelper helper class. + + Used to import contexts in sheet fragments. + */ +class BiffWorksheetContextBase : public BiffContextHandler, public WorksheetHelperRoot +{ +protected: + template< typename ParentType > + explicit BiffWorksheetContextBase( + const ParentType& rParent, + ISegmentProgressBarRef xProgressBar, + WorksheetType eSheetType, + sal_Int32 nSheet ); + + template< typename ParentType > + explicit BiffWorksheetContextBase( const ParentType& rParent ); +}; + +// ---------------------------------------------------------------------------- + +template< typename ParentType > +BiffWorksheetContextBase::BiffWorksheetContextBase( const ParentType& rParent, + ISegmentProgressBarRef xProgressBar, WorksheetType eSheetType, sal_Int32 nSheet ) : + BiffContextHandler( rParent ), + WorksheetHelperRoot( rParent, xProgressBar, eSheetType, nSheet ) +{ +} + +template< typename ParentType > +BiffWorksheetContextBase::BiffWorksheetContextBase( const ParentType& rParent ) : + BiffContextHandler( rParent ), + WorksheetHelperRoot( rParent ) +{ +} + +// ============================================================================ + +class BiffFragmentHandler : public BiffHandlerBase +{ +public: + /** Imports the fragment, returns true, if EOF record has been reached. */ + virtual bool importFragment() = 0; + +protected: + explicit BiffFragmentHandler( BiffInputStream& rStrm ); + + /** Starts a new fragment in a workbbok stream and returns the fragment type. + + The passed stream must point before a BOF record. The function will + try to start the next record and read the contents of the BOF record, + if extant. + + @return Fragment type according to the imported BOF record. + */ + BiffFragmentType startFragment( BiffType eBiff ); + + /** Skips the current fragment up to its trailing EOF record. + + Skips all records until next EOF record. When this function returns, + stream points to the EOF record, and the next call of startNextRecord() + at the stream will start the record following the EOF record. + + Embedded fragments enclosed in BOF/EOF records (e.g. embedded chart + objects) are skipped correctly. + + @return True = stream points to the EOF record of the current fragment. + */ + bool skipFragment(); +}; + +// ============================================================================ + +/** Fragment handler derived from the WorkbookHelper helper class. + + Used to import global workbook fragments. + */ +class BiffWorkbookFragmentBase : public BiffFragmentHandler, public WorkbookHelper +{ +protected: + explicit BiffWorkbookFragmentBase( + const WorkbookHelper& rHelper, + BiffInputStream& rStrm ); +}; + +// ============================================================================ + +/** Fragment handler derived from the WorksheetHelper helper class. + + Used to import sheet fragments. + */ +class BiffWorksheetFragmentBase : public BiffFragmentHandler, public WorksheetHelperRoot +{ +protected: + explicit BiffWorksheetFragmentBase( + const BiffWorkbookFragmentBase& rParent, + ISegmentProgressBarRef xProgressBar, + WorksheetType eSheetType, + sal_Int32 nSheet ); + + explicit BiffWorksheetFragmentBase( + const WorksheetHelper& rHelper, + BiffInputStream& rStrm ); +}; + +// ============================================================================ + +class BiffSkipWorksheetFragment : public BiffWorksheetFragmentBase +{ +public: + explicit BiffSkipWorksheetFragment( + const BiffWorkbookFragmentBase& rParent, + ISegmentProgressBarRef xProgressBar, + sal_Int32 nSheet ); + + virtual bool importFragment(); +}; + +// ============================================================================ +// ============================================================================ } // namespace xls } // namespace oox |