summaryrefslogtreecommitdiff
path: root/oox/inc/oox/xls/excelhandlers.hxx
diff options
context:
space:
mode:
authorVladimir Glazounov <vg@openoffice.org>2008-09-30 13:51:36 +0000
committerVladimir Glazounov <vg@openoffice.org>2008-09-30 13:51:36 +0000
commit07cabd8e634679ff59db4d72eacdfb514feb3cd1 (patch)
tree41b064504b537ff35a017aad8373870ae2cc1738 /oox/inc/oox/xls/excelhandlers.hxx
parenta53f44d8fba07d9f7a79ac594a85b1059f1ae4a6 (diff)
CWS-TOOLING: integrate CWS dr63
Diffstat (limited to 'oox/inc/oox/xls/excelhandlers.hxx')
-rw-r--r--oox/inc/oox/xls/excelhandlers.hxx232
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