LCOV - code coverage report
Current view: top level - sc/source/filter/inc - XclExpChangeTrack.hxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 51 52 98.1 %
Date: 2015-06-13 12:38:46 Functions: 46 52 88.5 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #ifndef INCLUDED_SC_SOURCE_FILTER_INC_XCLEXPCHANGETRACK_HXX
      21             : #define INCLUDED_SC_SOURCE_FILTER_INC_XCLEXPCHANGETRACK_HXX
      22             : 
      23             : #include <stack>
      24             : #include <tools/datetime.hxx>
      25             : #include <rtl/uuid.h>
      26             : #include "bigrange.hxx"
      27             : #include "chgtrack.hxx"
      28             : #include "xelink.hxx"
      29             : #include "ftools.hxx"
      30             : #include "excrecds.hxx"
      31             : 
      32             : #include <boost/ptr_container/ptr_vector.hpp>
      33             : 
      34          10 : class ExcXmlRecord : public ExcRecord
      35             : {
      36             : public:
      37             :     virtual sal_Size    GetLen() const SAL_OVERRIDE;
      38             :     virtual sal_uInt16  GetNum() const SAL_OVERRIDE;
      39             :     virtual void        Save( XclExpStream& rStrm ) SAL_OVERRIDE;
      40             : };
      41             : 
      42             : // XclExpUserBView - one UserBView record for each user
      43             : 
      44           8 : class XclExpUserBView : public ExcRecord
      45             : {
      46             : private:
      47             :     XclExpString                sUsername;
      48             :     sal_uInt8                   aGUID[ 16 ];
      49             : 
      50             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
      51             : 
      52             : public:
      53             :                                 XclExpUserBView( const OUString& rUsername, const sal_uInt8* pGUID );
      54             : 
      55           6 :     inline const sal_uInt8*     GetGUID() const { return aGUID; }
      56             : 
      57             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
      58             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
      59             : };
      60             : 
      61             : // XclExpUserBViewList - list of UserBView records
      62             : 
      63             : class XclExpUserBViewList : public ExcEmptyRec
      64             : {
      65             : private:
      66             :     std::vector<XclExpUserBView*> aViews;
      67             : 
      68             : public:
      69             : 
      70             :     typedef std::vector<XclExpUserBView*>::iterator iterator;
      71             :     typedef std::vector<XclExpUserBView*>::const_iterator const_iterator;
      72             : 
      73             :                                 XclExpUserBViewList( const ScChangeTrack& rChangeTrack );
      74             :     virtual                     ~XclExpUserBViewList();
      75             : 
      76           3 :     inline iterator begin () { return aViews.begin(); }
      77             : 
      78           9 :     inline iterator end () { return aViews.end(); }
      79             : 
      80             :     inline const_iterator begin () const { return aViews.begin(); }
      81             : 
      82             :     inline const_iterator end () const { return aViews.end(); }
      83             : 
      84             :     virtual void                Save( XclExpStream& rStrm ) SAL_OVERRIDE;
      85             : };
      86             : 
      87             : // XclExpUsersViewBegin - begin of view block (one per sheet)
      88             : 
      89          12 : class XclExpUsersViewBegin : public ExcRecord
      90             : {
      91             : private:
      92             :     sal_uInt8                   aGUID[ 16 ];
      93             :     sal_uInt32                  nCurrTab;
      94             : 
      95             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
      96             : 
      97             : public:
      98             :                                 XclExpUsersViewBegin( const sal_uInt8* pGUID, sal_uInt32 nTab );
      99             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     100             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     101             : };
     102             : 
     103             : // XclExpUsersViewEnd - end of view block (one per sheet)
     104             : 
     105          18 : class XclExpUsersViewEnd : public ExcRecord
     106             : {
     107             : private:
     108             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
     109             : 
     110             : public:
     111             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     112             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     113             : };
     114             : 
     115             : // dummy record for "User Names" stream
     116             : 
     117           2 : class XclExpChTr0x0191 : public ExcRecord
     118             : {
     119             : private:
     120             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
     121             : 
     122             : public:
     123             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     124             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     125             : };
     126             : 
     127             : // dummy record for "User Names" stream
     128             : 
     129           2 : class XclExpChTr0x0198 : public ExcRecord
     130             : {
     131             : private:
     132             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
     133             : 
     134             : public:
     135             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     136             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     137             : };
     138             : 
     139             : // dummy record for "User Names" stream
     140             : 
     141           2 : class XclExpChTr0x0192 : public ExcRecord
     142             : {
     143             : private:
     144             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
     145             : 
     146             : public:
     147             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     148             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     149             : };
     150             : 
     151             : // dummy record for "User Names" stream
     152             : 
     153           2 : class XclExpChTr0x0197 : public ExcRecord
     154             : {
     155             : private:
     156             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
     157             : 
     158             : public:
     159             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     160             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     161             : };
     162             : 
     163             : // dummy record without content
     164             : 
     165             : class XclExpChTrEmpty : public ExcRecord
     166             : {
     167             : private:
     168             :     sal_uInt16                      nRecNum;
     169             : 
     170             : public:
     171           0 :     inline                      XclExpChTrEmpty( sal_uInt16 nNum ) : nRecNum( nNum ) {}
     172             :     virtual                     ~XclExpChTrEmpty();
     173             : 
     174             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     175             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     176             : };
     177             : 
     178             : // dummy record for "Revision Log" stream
     179             : 
     180           1 : class XclExpChTr0x0195 : public ExcRecord
     181             : {
     182             : private:
     183             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
     184             : 
     185             : public:
     186             :     virtual                     ~XclExpChTr0x0195();
     187             : 
     188             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     189             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     190             : };
     191             : 
     192             : // dummy record for "Revision Log" stream
     193             : 
     194             : class XclExpChTr0x0194 : public ExcRecord
     195             : {
     196             : private:
     197             :     XclExpString                sUsername;
     198             :     DateTime                    aDateTime;
     199             : 
     200             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
     201             : 
     202             : public:
     203             :     inline                      XclExpChTr0x0194( const ScChangeTrack& rChangeTrack );
     204             :     virtual                     ~XclExpChTr0x0194();
     205             : 
     206             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     207             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     208             : };
     209             : 
     210           1 : inline XclExpChTr0x0194::XclExpChTr0x0194( const ScChangeTrack& rChangeTrack ) :
     211           1 :     sUsername( rChangeTrack.GetUser() ),
     212           2 :     aDateTime( rChangeTrack.GetFixDateTime() )
     213             : {
     214           1 : }
     215             : 
     216             : // XclExpChTrHeader - header record, includes action count
     217             : 
     218             : class XclExpChTrHeader : public ExcRecord
     219             : {
     220             : private:
     221             :     sal_uInt8                   aGUID[ 16 ];
     222             :     sal_uInt32                  nCount;
     223             : 
     224             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
     225             : 
     226             : public:
     227           1 :     inline                      XclExpChTrHeader() : nCount( 0 ) {}
     228             :     virtual                     ~XclExpChTrHeader();
     229             : 
     230           4 :     inline void                 SetGUID( const sal_uInt8* pGUID )   { memcpy( aGUID, pGUID, 16 ); }
     231           1 :     inline void                 SetCount( sal_uInt32 nNew )         { nCount = nNew; }
     232             : 
     233             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     234             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     235             : 
     236             :     virtual void                SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
     237             : };
     238             : 
     239           3 : class XclExpXmlChTrHeaders : public ExcXmlRecord
     240             : {
     241             :     sal_uInt8 maGUID[16];
     242             : public:
     243             :     void SetGUID( const sal_uInt8* pGUID );
     244             : 
     245             :     virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
     246             : };
     247             : 
     248             : class XclExpChTrTabIdBuffer;
     249             : class XclExpChTrAction;
     250             : 
     251           6 : class XclExpXmlChTrHeader : public ExcXmlRecord
     252             : {
     253             :     OUString maUserName;
     254             :     DateTime maDateTime;
     255             :     sal_uInt8 maGUID[16];
     256             :     sal_Int32 mnLogNumber;
     257             :     sal_uInt32 mnMinAction;
     258             :     sal_uInt32 mnMaxAction;
     259             : 
     260             :     std::vector<sal_uInt16> maTabBuffer;
     261             :     std::vector<XclExpChTrAction*> maActions;
     262             : 
     263             : public:
     264             :     XclExpXmlChTrHeader(
     265             :         const OUString& rUserName, const DateTime& rDateTime, const sal_uInt8* pGUID,
     266             :         sal_Int32 nLogNumber, const XclExpChTrTabIdBuffer& rBuf );
     267             : 
     268             :     virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
     269             : 
     270             :     void AppendAction( XclExpChTrAction* pAction );
     271             : };
     272             : 
     273             : // XclExpChTrInfo - header of action group of a user
     274             : 
     275             : class XclExpChTrInfo : public ExcRecord
     276             : {
     277             : private:
     278             :     XclExpString                sUsername;
     279             :     DateTime                    aDateTime;
     280             :     sal_uInt8                   aGUID[ 16 ];
     281             : 
     282             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
     283             : 
     284             : public:
     285             :     XclExpChTrInfo( const OUString& rUsername, const DateTime& rDateTime,
     286             :                     const sal_uInt8* pGUID );
     287             : 
     288             :     virtual                     ~XclExpChTrInfo();
     289             : 
     290             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     291             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     292             : };
     293             : 
     294             : // XclExpChTrTabIdBuffer - buffer for tab id's
     295             : 
     296             : class XclExpChTrTabIdBuffer
     297             : {
     298             : private:
     299             :     sal_uInt16*                 pBuffer;
     300             :     sal_uInt16*                 pLast;
     301             :     sal_uInt16                  nBufSize;
     302             :     sal_uInt16                  nLastId;
     303             : 
     304             : public:
     305             :                                 XclExpChTrTabIdBuffer( sal_uInt16 nCount );
     306             :                                 XclExpChTrTabIdBuffer( const XclExpChTrTabIdBuffer& rCopy );
     307             :                                 ~XclExpChTrTabIdBuffer();
     308             : 
     309             :     void                        InitFill( sal_uInt16 nIndex );
     310             :     void                        InitFillup();
     311             : 
     312             :     sal_uInt16                  GetId( sal_uInt16 nIndex ) const;
     313             :     void                        Remove();
     314             : 
     315          19 :     inline sal_uInt16           GetBufferCount() const
     316          19 :                                     { return static_cast< sal_uInt16 >( (pLast - pBuffer) + 1 ); }
     317           8 :     inline void                 GetBufferCopy( sal_uInt16* pDest ) const
     318           8 :                                     { memcpy( pDest, pBuffer, sizeof(sal_uInt16) * GetBufferCount() ); }
     319             : };
     320             : 
     321             : // XclExpChTrTabId - tab id record
     322             : 
     323             : class XclExpChTrTabId : public ExcRecord
     324             : {
     325             : private:
     326             :     sal_uInt16*                 pBuffer;
     327             :     sal_uInt16                  nTabCount;
     328             : 
     329          77 :     inline void                 Clear() { if( pBuffer ) delete[] pBuffer; pBuffer = NULL; }
     330             : 
     331             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
     332             : 
     333             : public:
     334          72 :     inline                      XclExpChTrTabId( sal_uInt16 nCount ) :
     335          72 :                                     pBuffer( NULL ), nTabCount( nCount ) {}
     336             :                                 XclExpChTrTabId( const XclExpChTrTabIdBuffer& rBuffer );
     337             :     virtual                     ~XclExpChTrTabId();
     338             : 
     339             :     void                        Copy( const XclExpChTrTabIdBuffer& rBuffer );
     340             : 
     341             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     342             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     343             : };
     344             : 
     345             : // XclExpChTrAction - base class for action records
     346             : 
     347             : class XclExpChTrAction : public ExcRecord
     348             : {
     349             : private:
     350             :     OUString                    sUsername;
     351             :     DateTime                    aDateTime;
     352             :     sal_uInt32                  nIndex;         // action number
     353             :     XclExpChTrAction*           pAddAction;     // additional record for this action
     354             :     bool                        bAccepted;
     355             : 
     356             : protected:
     357             :     const XclExpTabInfo&        rTabInfo;       // for table num export (sc num -> xcl num)
     358             :     const XclExpChTrTabIdBuffer& rIdBuffer;     // for table num export (xcl num -> tab id)
     359             :     sal_uInt32                  nLength;        // this is not the record size
     360             :     sal_uInt16                  nOpCode;        // EXC_CHTR_OP_***
     361             :     bool                        bForceInfo;
     362             : 
     363             :                                 XclExpChTrAction( const XclExpChTrAction& rCopy );
     364             : 
     365             :     void                        SetAddAction( XclExpChTrAction* pAction );
     366             :     void                        AddDependentContents(
     367             :                                     const ScChangeAction& rAction,
     368             :                                     const XclExpRoot& rRoot,
     369             :                                     ScChangeTrack& rChangeTrack );
     370             : 
     371             :     static inline void          Write2DAddress( XclExpStream& rStrm, const ScAddress& rAddress );
     372             :     static inline void          Write2DRange( XclExpStream& rStrm, const ScRange& rRange );
     373             :     inline sal_uInt16           GetTabId( SCTAB nTabId ) const;
     374             :     inline void                 WriteTabId( XclExpStream& rStrm, SCTAB nTabId ) const;
     375             : 
     376             :                                 // save header data, call SaveActionData()
     377             :     virtual void                SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
     378          13 :     static inline sal_Size      GetHeaderByteCount() { return 12; }
     379             : 
     380             :                                 // override to save action data without header, called by SaveCont()
     381             :     virtual void                SaveActionData( XclExpStream& rStrm ) const = 0;
     382             :                                 // override to get action size without header, called by GetLen()
     383             :     virtual sal_Size            GetActionByteCount() const = 0;
     384             : 
     385             :                                 // do something before writing the record
     386             :     virtual void                PrepareSaveAction( XclExpStream& rStrm ) const;
     387             :                                 // do something after writing the record
     388             :     virtual void                CompleteSaveAction( XclExpStream& rStrm ) const;
     389             : 
     390          13 :     inline bool                 GetAccepted() const { return bAccepted; }
     391             : 
     392             : public:
     393             :                                 XclExpChTrAction(
     394             :                                     const ScChangeAction& rAction,
     395             :                                     const XclExpRoot& rRoot,
     396             :                                     const XclExpChTrTabIdBuffer& rTabIdBuffer,
     397             :                                     sal_uInt16 nNewOpCode = EXC_CHTR_OP_UNKNOWN );
     398             :     virtual                     ~XclExpChTrAction();
     399             : 
     400          30 :     inline const OUString&      GetUsername() const             { return sUsername; }
     401          30 :     inline const DateTime&      GetDateTime() const             { return aDateTime; }
     402           6 :     inline const XclExpChTrTabIdBuffer& GetTabIdBuffer() const  { return rIdBuffer; }
     403          24 :     inline bool                 ForceInfoRecord() const         { return bForceInfo; }
     404             : 
     405             :                                 // set own index & return new index
     406             :                                 // could override to use more indexes per action
     407             :     void                        SetIndex( sal_uInt32& rIndex );
     408             : 
     409             :     virtual void                Save( XclExpStream& rStrm ) SAL_OVERRIDE;
     410             :     virtual sal_Size            GetLen() const SAL_OVERRIDE;
     411             : 
     412           6 :     inline XclExpChTrAction*    GetAddAction() { return pAddAction; }
     413          26 :     inline sal_uInt32           GetActionNumber() const { return nIndex; }
     414             : };
     415             : 
     416           7 : inline void XclExpChTrAction::Write2DAddress( XclExpStream& rStrm, const ScAddress& rAddress )
     417             : {
     418           7 :     rStrm   << (sal_uInt16) rAddress.Row()
     419          14 :             << (sal_uInt16) rAddress.Col();
     420           7 : }
     421             : 
     422           6 : inline void XclExpChTrAction::Write2DRange( XclExpStream& rStrm, const ScRange& rRange )
     423             : {
     424           6 :     rStrm   << (sal_uInt16) rRange.aStart.Row()
     425          12 :             << (sal_uInt16) rRange.aEnd.Row()
     426          12 :             << (sal_uInt16) rRange.aStart.Col()
     427          12 :             << (sal_uInt16) rRange.aEnd.Col();
     428           6 : }
     429             : 
     430          26 : inline sal_uInt16 XclExpChTrAction::GetTabId( SCTAB nTab ) const
     431             : {
     432          26 :     return rIdBuffer.GetId( rTabInfo.GetXclTab( nTab ) );
     433             : }
     434             : 
     435          13 : inline void XclExpChTrAction::WriteTabId( XclExpStream& rStrm, SCTAB nTab ) const
     436             : {
     437          13 :     rStrm << GetTabId( nTab );
     438          13 : }
     439             : 
     440             : // XclExpChTrData - cell content itself
     441             : 
     442             : struct XclExpChTrData
     443             : {
     444             :     XclExpString*               pString;
     445             :     XclExpStringRef             mpFormattedString;
     446             :     const ScFormulaCell*        mpFormulaCell;
     447             :     XclTokenArrayRef            mxTokArr;
     448             :     XclExpRefLog                maRefLog;
     449             :     double                      fValue;
     450             :     sal_Int32                   nRKValue;
     451             :     sal_uInt16                  nType;
     452             :     sal_Size                    nSize;
     453             : 
     454             :                                 XclExpChTrData();
     455             :                                 ~XclExpChTrData();
     456             :     void                        Clear();
     457             : 
     458             :     void                        WriteFormula(
     459             :                                     XclExpStream& rStrm,
     460             :                                     const XclExpChTrTabIdBuffer& rTabIdBuffer );
     461             :     void                        Write(
     462             :                                     XclExpStream& rStrm,
     463             :                                     const XclExpChTrTabIdBuffer& rTabIdBuffer );
     464             : };
     465             : 
     466             : // XclExpChTrCellContent - changed cell content
     467             : 
     468             : class XclExpChTrCellContent : public XclExpChTrAction, protected XclExpRoot
     469             : {
     470             : private:
     471             :     XclExpChTrData*             pOldData;
     472             :     XclExpChTrData*             pNewData;
     473             :     sal_uInt16                  nOldLength;     // this is not the record size
     474             : 
     475             :     static void                 MakeEmptyChTrData( XclExpChTrData*& rpData );
     476             : 
     477             : protected:
     478             :     ScAddress                   aPosition;
     479             : 
     480             :     void GetCellData(
     481             :         const XclExpRoot& rRoot, const ScCellValue& rScCell, XclExpChTrData*& rpData,
     482             :         sal_uInt32& rXclLength1, sal_uInt16& rXclLength2 );
     483             : 
     484             :     virtual void                SaveActionData( XclExpStream& rStrm ) const SAL_OVERRIDE;
     485             : 
     486             : public:
     487             :                                 XclExpChTrCellContent(
     488             :                                     const ScChangeActionContent& rAction,
     489             :                                     const XclExpRoot& rRoot,
     490             :                                     const XclExpChTrTabIdBuffer& rTabIdBuffer );
     491             :     virtual                     ~XclExpChTrCellContent();
     492             : 
     493             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     494             :     virtual sal_Size            GetActionByteCount() const SAL_OVERRIDE;
     495             : 
     496             :     virtual void                SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
     497             : };
     498             : 
     499             : // XclExpChTrInsert - insert/delete columns/rows
     500             : 
     501             : class XclExpChTrInsert : public XclExpChTrAction
     502             : {
     503             :     bool mbEndOfList;
     504             : 
     505             : protected:
     506             :     ScRange                     aRange;
     507             : 
     508             :     XclExpChTrInsert( const XclExpChTrInsert& rCopy );
     509             : 
     510             :     virtual void                SaveActionData( XclExpStream& rStrm ) const SAL_OVERRIDE;
     511             :     virtual void                PrepareSaveAction( XclExpStream& rStrm ) const SAL_OVERRIDE;
     512             :     virtual void                CompleteSaveAction( XclExpStream& rStrm ) const SAL_OVERRIDE;
     513             : 
     514             : public:
     515             :                                 XclExpChTrInsert(
     516             :                                     const ScChangeAction& rAction,
     517             :                                     const XclExpRoot& rRoot,
     518             :                                     const XclExpChTrTabIdBuffer& rTabIdBuffer,
     519             :                                     ScChangeTrack& rChangeTrack );
     520             :     virtual                     ~XclExpChTrInsert();
     521             : 
     522             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     523             :     virtual sal_Size            GetActionByteCount() const SAL_OVERRIDE;
     524             : 
     525             :     virtual void                SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
     526             : };
     527             : 
     528             : // XclExpChTrInsertTab - insert table
     529             : 
     530             : class XclExpChTrInsertTab : public XclExpChTrAction, protected XclExpRoot
     531             : {
     532             : private:
     533             :     SCTAB                   nTab;
     534             : 
     535             : protected:
     536             :     virtual void                SaveActionData( XclExpStream& rStrm ) const SAL_OVERRIDE;
     537             : 
     538             : public:
     539             :                                 XclExpChTrInsertTab(
     540             :                                     const ScChangeAction& rAction,
     541             :                                     const XclExpRoot& rRoot,
     542             :                                     const XclExpChTrTabIdBuffer& rTabIdBuffer );
     543             :     virtual                     ~XclExpChTrInsertTab();
     544             : 
     545             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     546             :     virtual sal_Size            GetActionByteCount() const SAL_OVERRIDE;
     547             : 
     548             :     virtual void                SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
     549             : };
     550             : 
     551             : // XclExpChTrMoveRange - move cell range
     552             : 
     553             : class XclExpChTrMoveRange : public XclExpChTrAction
     554             : {
     555             : protected:
     556             :     ScRange                     aSourceRange;
     557             :     ScRange                     aDestRange;
     558             : 
     559             :     virtual void                SaveActionData( XclExpStream& rStrm ) const SAL_OVERRIDE;
     560             :     virtual void                PrepareSaveAction( XclExpStream& rStrm ) const SAL_OVERRIDE;
     561             :     virtual void                CompleteSaveAction( XclExpStream& rStrm ) const SAL_OVERRIDE;
     562             : 
     563             : public:
     564             :                                 XclExpChTrMoveRange(
     565             :                                     const ScChangeActionMove& rAction,
     566             :                                     const XclExpRoot& rRoot,
     567             :                                     const XclExpChTrTabIdBuffer& rTabIdBuffer,
     568             :                                     ScChangeTrack& rChangeTrack );
     569             :     virtual                     ~XclExpChTrMoveRange();
     570             : 
     571             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     572             :     virtual sal_Size            GetActionByteCount() const SAL_OVERRIDE;
     573             : 
     574             :     virtual void                SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
     575             : };
     576             : 
     577             : // XclExpChTr0x019A - additional data for delete action
     578             : 
     579             : class XclExpChTr0x014A : public XclExpChTrInsert
     580             : {
     581             : protected:
     582             :     virtual void                SaveActionData( XclExpStream& rStrm ) const SAL_OVERRIDE;
     583             : 
     584             : public:
     585             :                                 XclExpChTr0x014A( const XclExpChTrInsert& rAction );
     586             :     virtual                     ~XclExpChTr0x014A();
     587             : 
     588             :     virtual sal_uInt16              GetNum() const SAL_OVERRIDE;
     589             :     virtual sal_Size            GetActionByteCount() const SAL_OVERRIDE;
     590             : 
     591             :     virtual void                SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
     592             : };
     593             : 
     594             : // XclExpChangeTrack - exports the "Revision Log" stream
     595             : 
     596             : class XclExpChangeTrack : protected XclExpRoot
     597             : {
     598             :     typedef boost::ptr_vector<ExcRecord> RecListType;
     599             :     typedef boost::ptr_vector<XclExpChTrTabIdBuffer> TabIdBufferType;
     600             :     RecListType maRecList;           // list of "Revision Log" stream records
     601             :     std::stack<XclExpChTrAction*> aActionStack;
     602             :     XclExpChTrTabIdBuffer*        pTabIdBuffer;
     603             :     TabIdBufferType maBuffers;
     604             : 
     605             :     ScDocument*                 pTempDoc;           // empty document
     606             : 
     607             :     XclExpChTrHeader*           pHeader;            // header record for last GUID
     608             :     sal_uInt8                   aGUID[ 16 ];        // GUID for action info records
     609             :     bool                        bValidGUID;
     610             : 
     611             :     ScChangeTrack*              CreateTempChangeTrack();
     612             :     void                        PushActionRecord( const ScChangeAction& rAction );
     613             : 
     614             :     bool                        WriteUserNamesStream();
     615             : 
     616             : public:
     617             :                                 XclExpChangeTrack( const XclExpRoot& rRoot );
     618             :                                 virtual ~XclExpChangeTrack();
     619             : 
     620             :     void                        Write();
     621             :     void                        WriteXml( XclExpXmlStream& rStrm );
     622             : };
     623             : 
     624             : #endif
     625             : 
     626             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11