/* -*- 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 * * for a copy of the LGPLv3 License. * ************************************************************************/ #ifndef SC_XMLCHANGETRACKINGIMPORTHELPER_HXX #define SC_XMLCHANGETRACKINGIMPORTHELPER_HXX #include "chgtrack.hxx" #include #include class ScBaseCell; class ScDocument; class DateTime; struct ScMyActionInfo { rtl::OUString sUser; rtl::OUString sComment; com::sun::star::util::DateTime aDateTime; }; struct ScMyCellInfo { ScBaseCell* pCell; rtl::OUString sFormulaAddress; rtl::OUString sFormula; String sInputString; double fValue; sal_Int32 nMatrixCols; sal_Int32 nMatrixRows; formula::FormulaGrammar::Grammar eGrammar; sal_uInt16 nType; sal_uInt8 nMatrixFlag; ScMyCellInfo(ScBaseCell* pCell, const rtl::OUString& sFormulaAddress, const rtl::OUString& sFormula, const formula::FormulaGrammar::Grammar eGrammar, const rtl::OUString& sInputString, const double& fValue, const sal_uInt16 nType, const sal_uInt8 nMatrixFlag, const sal_Int32 nMatrixCols, const sal_Int32 nMatrixRows); ~ScMyCellInfo(); ScBaseCell* CreateCell(ScDocument* pDoc); }; struct ScMyDeleted { sal_uInt32 nID; ScMyCellInfo* pCellInfo; ScMyDeleted(); ~ScMyDeleted(); }; typedef std::list ScMyDeletedList; struct ScMyGenerated { ScBigRange aBigRange; sal_uInt32 nID; ScMyCellInfo* pCellInfo; ScMyGenerated(ScMyCellInfo* pCellInfo, const ScBigRange& aBigRange); ~ScMyGenerated(); }; typedef std::list ScMyGeneratedList; struct ScMyInsertionCutOff { sal_uInt32 nID; sal_Int32 nPosition; ScMyInsertionCutOff(const sal_uInt32 nTempID, const sal_Int32 nTempPosition) : nID(nTempID), nPosition(nTempPosition) {} }; struct ScMyMoveCutOff { sal_uInt32 nID; sal_Int32 nStartPosition; sal_Int32 nEndPosition; ScMyMoveCutOff(const sal_uInt32 nTempID, const sal_Int32 nStartPos, const sal_Int32 nEndPos) : nID(nTempID), nStartPosition(nStartPos), nEndPosition(nEndPos) {} }; typedef std::list ScMyMoveCutOffs; struct ScMyMoveRanges { ScBigRange aSourceRange; ScBigRange aTargetRange; ScMyMoveRanges(const ScBigRange& aSource, const ScBigRange aTarget) : aSourceRange(aSource), aTargetRange(aTarget) {} }; typedef std::list ScMyDependencies; struct ScMyBaseAction { ScMyActionInfo aInfo; ScBigRange aBigRange; ScMyDependencies aDependencies; ScMyDeletedList aDeletedList; sal_uInt32 nActionNumber; sal_uInt32 nRejectingNumber; sal_uInt32 nPreviousAction; ScChangeActionType nActionType; ScChangeActionState nActionState; ScMyBaseAction(const ScChangeActionType nActionType); virtual ~ScMyBaseAction(); }; struct ScMyInsAction : public ScMyBaseAction { ScMyInsAction(const ScChangeActionType nActionType); ~ScMyInsAction(); }; struct ScMyDelAction : public ScMyBaseAction { ScMyGeneratedList aGeneratedList; ScMyInsertionCutOff* pInsCutOff; ScMyMoveCutOffs aMoveCutOffs; sal_Int32 nD; ScMyDelAction(const ScChangeActionType nActionType); ~ScMyDelAction(); }; struct ScMyMoveAction : public ScMyBaseAction { ScMyGeneratedList aGeneratedList; ScMyMoveRanges* pMoveRanges; ScMyMoveAction(); ~ScMyMoveAction(); }; struct ScMyContentAction : public ScMyBaseAction { ScMyCellInfo* pCellInfo; ScMyContentAction(); ~ScMyContentAction(); }; struct ScMyRejAction : public ScMyBaseAction { ScMyRejAction(); ~ScMyRejAction(); }; typedef std::list ScMyActions; class ScXMLChangeTrackingImportHelper { std::set aUsers; ScMyActions aActions; com::sun::star::uno::Sequence aProtect; ScDocument* pDoc; ScChangeTrack* pTrack; ScMyBaseAction* pCurrentAction; rtl::OUString sIDPrefix; sal_uInt32 nPrefixLength; sal_Int16 nMultiSpanned; sal_Int16 nMultiSpannedSlaveCount; bool bChangeTrack; private: void ConvertInfo(const ScMyActionInfo& aInfo, String& rUser, DateTime& aDateTime); ScChangeAction* CreateInsertAction(ScMyInsAction* pAction); ScChangeAction* CreateDeleteAction(ScMyDelAction* pAction); ScChangeAction* CreateMoveAction(ScMyMoveAction* pAction); ScChangeAction* CreateRejectionAction(ScMyRejAction* pAction); ScChangeAction* CreateContentAction(ScMyContentAction* pAction); void CreateGeneratedActions(ScMyGeneratedList& rList); public: ScXMLChangeTrackingImportHelper(); ~ScXMLChangeTrackingImportHelper(); void SetChangeTrack(bool bValue) { bChangeTrack = bValue; } void SetProtection(const com::sun::star::uno::Sequence& rProtect) { aProtect = rProtect; } void StartChangeAction(const ScChangeActionType nActionType); sal_uInt32 GetIDFromString(const rtl::OUString& sID); void SetActionNumber(const sal_uInt32 nActionNumber) { pCurrentAction->nActionNumber = nActionNumber; } void SetActionState(const ScChangeActionState nActionState) { pCurrentAction->nActionState = nActionState; } void SetRejectingNumber(const sal_uInt32 nRejectingNumber) { pCurrentAction->nRejectingNumber = nRejectingNumber; } void SetActionInfo(const ScMyActionInfo& aInfo); void SetBigRange(const ScBigRange& aBigRange) { pCurrentAction->aBigRange = aBigRange; } void SetPreviousChange(const sal_uInt32 nPreviousAction, ScMyCellInfo* pCellInfo); void SetPosition(const sal_Int32 nPosition, const sal_Int32 nCount, const sal_Int32 nTable); void AddDependence(const sal_uInt32 nID) { pCurrentAction->aDependencies.push_front(nID); } void AddDeleted(const sal_uInt32 nID); void AddDeleted(const sal_uInt32 nID, ScMyCellInfo* pCellInfo); void SetMultiSpanned(const sal_Int16 nMultiSpanned); void SetInsertionCutOff(const sal_uInt32 nID, const sal_Int32 nPosition); void AddMoveCutOff(const sal_uInt32 nID, const sal_Int32 nStartPosition, const sal_Int32 nEndPosition); void SetMoveRanges(const ScBigRange& aSourceRange, const ScBigRange& aTargetRange); void GetMultiSpannedRange(); void AddGenerated(ScMyCellInfo* pCellInfo, const ScBigRange& aBigRange); void EndChangeAction(); void SetDeletionDependencies(ScMyDelAction* pAction, ScChangeActionDel* pDelAct); void SetMovementDependencies(ScMyMoveAction* pAction, ScChangeActionMove* pMoveAct); void SetContentDependencies(ScMyContentAction* pAction, ScChangeActionContent* pActContent); void SetDependencies(ScMyBaseAction* pAction); void SetNewCell(ScMyContentAction* pAction); void CreateChangeTrack(ScDocument* pDoc); }; #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */