diff options
author | Daniel Rentz [dr] <daniel.rentz@oracle.com> | 2011-01-12 13:29:17 +0100 |
---|---|---|
committer | Daniel Rentz [dr] <daniel.rentz@oracle.com> | 2011-01-12 13:29:17 +0100 |
commit | 97811e2bbb84b82dbc52619bc70f8ed2eba59ee7 (patch) | |
tree | 45f02699fd4564954300f38338612539e6bcb74c /oox/inc/oox/xls/excelhandlers.hxx | |
parent | d4c7fa84b7856918328bee20a5387cb32442bec3 (diff) | |
parent | db5c714536cc07744d37f900a26e68af068ddee4 (diff) |
dr78: rebase to DEV300_m97
Diffstat (limited to 'oox/inc/oox/xls/excelhandlers.hxx')
-rw-r--r-- | oox/inc/oox/xls/excelhandlers.hxx | 191 |
1 files changed, 58 insertions, 133 deletions
diff --git a/oox/inc/oox/xls/excelhandlers.hxx b/oox/inc/oox/xls/excelhandlers.hxx index e25fc994c362..39088204d24d 100644 --- a/oox/inc/oox/xls/excelhandlers.hxx +++ b/oox/inc/oox/xls/excelhandlers.hxx @@ -41,17 +41,17 @@ namespace xls { Used to import contexts in global workbook fragments. */ -class OoxWorkbookContextBase : public ::oox::core::ContextHandler2, public WorkbookHelper +class WorkbookContextBase : public ::oox::core::ContextHandler2, public WorkbookHelper { public: template< typename ParentType > - explicit OoxWorkbookContextBase( ParentType& rParent ); + explicit WorkbookContextBase( ParentType& rParent ); }; // ---------------------------------------------------------------------------- template< typename ParentType > -OoxWorkbookContextBase::OoxWorkbookContextBase( ParentType& rParent ) : +WorkbookContextBase::WorkbookContextBase( ParentType& rParent ) : ::oox::core::ContextHandler2( rParent ), WorkbookHelper( rParent ) { @@ -63,32 +63,32 @@ OoxWorkbookContextBase::OoxWorkbookContextBase( ParentType& rParent ) : Used to import contexts in sheet fragments. */ -class OoxWorksheetContextBase : public ::oox::core::ContextHandler2, public WorksheetHelperRoot +class WorksheetContextBase : public ::oox::core::ContextHandler2, public WorksheetHelperRoot { public: template< typename ParentType > - explicit OoxWorksheetContextBase( + explicit WorksheetContextBase( ParentType& rParent, - ISegmentProgressBarRef xProgressBar, + const ISegmentProgressBarRef& rxProgressBar, WorksheetType eSheetType, sal_Int16 nSheet ); template< typename ParentType > - explicit OoxWorksheetContextBase( ParentType& rParent ); + explicit WorksheetContextBase( ParentType& rParent ); }; // ---------------------------------------------------------------------------- template< typename ParentType > -OoxWorksheetContextBase::OoxWorksheetContextBase( ParentType& rParent, - ISegmentProgressBarRef xProgressBar, WorksheetType eSheetType, sal_Int16 nSheet ) : +WorksheetContextBase::WorksheetContextBase( ParentType& rParent, + const ISegmentProgressBarRef& rxProgressBar, WorksheetType eSheetType, sal_Int16 nSheet ) : ::oox::core::ContextHandler2( rParent ), - WorksheetHelperRoot( rParent, xProgressBar, eSheetType, nSheet ) + WorksheetHelperRoot( rParent, rxProgressBar, eSheetType, nSheet ) { } template< typename ParentType > -OoxWorksheetContextBase::OoxWorksheetContextBase( ParentType& rParent ) : +WorksheetContextBase::WorksheetContextBase( ParentType& rParent ) : ::oox::core::ContextHandler2( rParent ), WorksheetHelperRoot( rParent ) { @@ -100,10 +100,10 @@ OoxWorksheetContextBase::OoxWorksheetContextBase( ParentType& rParent ) : Used to import global workbook fragments. */ -class OoxWorkbookFragmentBase : public ::oox::core::FragmentHandler2, public WorkbookHelper +class WorkbookFragmentBase : public ::oox::core::FragmentHandler2, public WorkbookHelper { public: - explicit OoxWorkbookFragmentBase( + explicit WorkbookFragmentBase( const WorkbookHelper& rHelper, const ::rtl::OUString& rFragmentPath ); }; @@ -114,17 +114,17 @@ public: Used to import sheet fragments. */ -class OoxWorksheetFragmentBase : public ::oox::core::FragmentHandler2, public WorksheetHelperRoot +class WorksheetFragmentBase : public ::oox::core::FragmentHandler2, public WorksheetHelperRoot { public: - explicit OoxWorksheetFragmentBase( + explicit WorksheetFragmentBase( const WorkbookHelper& rHelper, const ::rtl::OUString& rFragmentPath, - ISegmentProgressBarRef xProgressBar, + const ISegmentProgressBarRef& rxProgressBar, WorksheetType eSheetType, sal_Int16 nSheet ); - explicit OoxWorksheetFragmentBase( + explicit WorksheetFragmentBase( const WorksheetHelper& rHelper, const ::rtl::OUString& rFragmentPath ); }; @@ -132,72 +132,21 @@ 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. + import the record the passed BIFF input stream currently points to. */ -class BiffContextHandler : public BiffHandlerBase +class BiffContextHandler { public: - /** Derived classes have to implement importing the current record. */ - virtual void importRecord() = 0; + virtual ~BiffContextHandler(); -protected: - explicit BiffContextHandler( const BiffHandlerBase& rParent ); + /** Derived classes have to implement importing the current record. */ + virtual void importRecord( BiffInputStream& rStrm ) = 0; }; -// ============================================================================ +// ---------------------------------------------------------------------------- /** Context handler derived from the WorkbookHelper helper class. @@ -206,21 +155,11 @@ protected: class BiffWorkbookContextBase : public BiffContextHandler, public WorkbookHelper { protected: - template< typename ParentType > - explicit BiffWorkbookContextBase( const ParentType& rParent ); + explicit BiffWorkbookContextBase( const WorkbookHelper& rHelper ); }; // ---------------------------------------------------------------------------- -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. @@ -228,68 +167,48 @@ BiffWorkbookContextBase::BiffWorkbookContextBase( const ParentType& rParent ) : class BiffWorksheetContextBase : public BiffContextHandler, public WorksheetHelperRoot { protected: - template< typename ParentType > explicit BiffWorksheetContextBase( - const ParentType& rParent, - ISegmentProgressBarRef xProgressBar, + const WorkbookHelper& rHelper, + const ISegmentProgressBarRef& rxProgressBar, WorksheetType eSheetType, sal_Int16 nSheet ); - template< typename ParentType > - explicit BiffWorksheetContextBase( const ParentType& rParent ); + explicit BiffWorksheetContextBase( const WorksheetHelper& rHelper ); }; -// ---------------------------------------------------------------------------- - -template< typename ParentType > -BiffWorksheetContextBase::BiffWorksheetContextBase( const ParentType& rParent, - ISegmentProgressBarRef xProgressBar, WorksheetType eSheetType, sal_Int16 nSheet ) : - BiffContextHandler( rParent ), - WorksheetHelperRoot( rParent, xProgressBar, eSheetType, nSheet ) -{ -} - -template< typename ParentType > -BiffWorksheetContextBase::BiffWorksheetContextBase( const ParentType& rParent ) : - BiffContextHandler( rParent ), - WorksheetHelperRoot( rParent ) -{ -} - // ============================================================================ -namespace prv { - -struct BiffFragmentStreamOwner +/** An enumeration for all types of fragments in a BIFF workbook stream. */ +enum BiffFragmentType { - typedef ::boost::shared_ptr< BinaryXInputStream > XInputStreamRef; - typedef ::boost::shared_ptr< BiffInputStream > BiffInputStreamRef; - - XInputStreamRef mxXInStrm; - BiffInputStreamRef mxBiffStrm; - - explicit BiffFragmentStreamOwner( const ::oox::core::FilterBase& rFilter, const ::rtl::OUString& rStrmName ); - virtual ~BiffFragmentStreamOwner(); + 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. }; -} // namespace prv - // ---------------------------------------------------------------------------- -class BiffFragmentHandler : private prv::BiffFragmentStreamOwner, public BiffHandlerBase +class BiffFragmentHandler { public: - /** Imports the fragment, returns true, if EOF record has been reached. */ - virtual bool importFragment() = 0; - -protected: /** Opens the stream with the passed full name. */ explicit BiffFragmentHandler( const ::oox::core::FilterBase& rFilter, const ::rtl::OUString& rStrmName ); - /** Reuses the stream of the passed fragment. */ - explicit BiffFragmentHandler( const BiffFragmentHandler& rHandler ); + virtual ~BiffFragmentHandler(); + + /** Imports the fragment, returns true, if EOF record has been reached. */ + virtual bool importFragment() = 0; + +protected: + /** Returns the BIFF input stream of this fragment. */ + inline BiffInputStream& getInputStream() { return *mxBiffStrm; } /** Starts a new fragment in a workbbok stream and returns the fragment type. @@ -313,9 +232,16 @@ protected: @return True = stream points to the EOF record of the current fragment. */ bool skipFragment(); + +private: + typedef ::boost::shared_ptr< BinaryXInputStream > XInputStreamRef; + typedef ::boost::shared_ptr< BiffInputStream > BiffInputStreamRef; + + XInputStreamRef mxXInStrm; + BiffInputStreamRef mxBiffStrm; }; -// ============================================================================ +// ---------------------------------------------------------------------------- /** Fragment handler derived from the WorkbookHelper helper class. @@ -330,7 +256,7 @@ protected: bool bCloneDecoder = false ); }; -// ============================================================================ +// ---------------------------------------------------------------------------- /** Fragment handler derived from the WorksheetHelper helper class. @@ -341,12 +267,12 @@ class BiffWorksheetFragmentBase : public BiffFragmentHandler, public WorksheetHe protected: explicit BiffWorksheetFragmentBase( const BiffWorkbookFragmentBase& rParent, - ISegmentProgressBarRef xProgressBar, + const ISegmentProgressBarRef& rxProgressBar, WorksheetType eSheetType, sal_Int16 nSheet ); }; -// ============================================================================ +// ---------------------------------------------------------------------------- /** Special fragment handler for worksheets that have to be skipped. */ @@ -355,7 +281,7 @@ class BiffSkipWorksheetFragment : public BiffWorksheetFragmentBase public: explicit BiffSkipWorksheetFragment( const BiffWorkbookFragmentBase& rParent, - ISegmentProgressBarRef xProgressBar, + const ISegmentProgressBarRef& rxProgressBar, sal_Int16 nSheet ); virtual bool importFragment(); @@ -368,4 +294,3 @@ public: } // namespace oox #endif - |