|
 |
f085be |
From b7bd1b66287d9d337234ac1b9b50a1fafba7dd1e Mon Sep 17 00:00:00 2001
|
|
 |
f085be |
From: Kohei Yoshida <kohei.yoshida@collabora.com>
|
|
 |
f085be |
Date: Mon, 14 Jul 2014 15:24:19 -0400
|
|
 |
f085be |
Subject: [PATCH 042/137] Preserve the "end of list" flag for xls
|
|
 |
f085be |
round-tripping.
|
|
 |
f085be |
|
|
 |
f085be |
This "end of list" flag determines whether the row insertion was an
|
|
 |
f085be |
automatic insertion at the bottom. Calc doesn't use this at the moment
|
|
 |
f085be |
but Excel uses it to differentiate a normal row insertion from an
|
|
 |
f085be |
automatic one.
|
|
 |
f085be |
|
|
 |
f085be |
(cherry picked from commit adf0d7b1fb8eed88f4fcd6d31662ae6f59d00812)
|
|
 |
f085be |
Signed-off-by: Andras Timar <andras.timar@collabora.com>
|
|
 |
f085be |
|
|
 |
f085be |
Conflicts:
|
|
 |
f085be |
sc/inc/chgtrack.hxx
|
|
 |
f085be |
sc/source/filter/xcl97/XclExpChangeTrack.cxx
|
|
 |
f085be |
|
|
 |
f085be |
Change-Id: I6b28669d816c54d1dc1e4c106918ba688415788d
|
|
 |
f085be |
(cherry picked from commit 8fd0951429bfa00a054ebbc195a480f89af9f912)
|
|
 |
f085be |
Signed-off-by: Andras Timar <andras.timar@collabora.com>
|
|
 |
f085be |
---
|
|
 |
f085be |
sc/inc/chgtrack.hxx | 26 ++++++++++------
|
|
 |
f085be |
sc/source/core/tool/chgtrack.cxx | 46 +++++++++++++++++-----------
|
|
 |
f085be |
sc/source/filter/inc/XclExpChangeTrack.hxx | 5 +--
|
|
 |
f085be |
sc/source/filter/inc/XclImpChangeTrack.hxx | 2 +-
|
|
 |
f085be |
sc/source/filter/xcl97/XclExpChangeTrack.cxx | 17 ++++++++--
|
|
 |
f085be |
sc/source/filter/xcl97/XclImpChangeTrack.cxx | 11 ++++---
|
|
 |
f085be |
6 files changed, 68 insertions(+), 39 deletions(-)
|
|
 |
f085be |
|
|
 |
f085be |
diff --git a/sc/inc/chgtrack.hxx b/sc/inc/chgtrack.hxx
|
|
 |
f085be |
index 1f6ddcd..2e57437 100644
|
|
 |
f085be |
--- a/sc/inc/chgtrack.hxx
|
|
 |
f085be |
+++ b/sc/inc/chgtrack.hxx
|
|
 |
f085be |
@@ -402,7 +402,9 @@ class ScChangeActionIns : public ScChangeAction
|
|
 |
f085be |
{
|
|
 |
f085be |
friend class ScChangeTrack;
|
|
 |
f085be |
|
|
 |
f085be |
- ScChangeActionIns( const ScRange& rRange );
|
|
 |
f085be |
+ bool mbEndOfList; /// whether or not a row was auto-inserted at the bottom.
|
|
 |
f085be |
+
|
|
 |
f085be |
+ ScChangeActionIns( const ScRange& rRange, bool bEndOfList = false );
|
|
 |
f085be |
virtual ~ScChangeActionIns();
|
|
 |
f085be |
|
|
 |
f085be |
virtual void AddContent( ScChangeActionContent* ) {}
|
|
 |
f085be |
@@ -413,17 +415,21 @@ class ScChangeActionIns : public ScChangeAction
|
|
 |
f085be |
virtual const ScChangeTrack* GetChangeTrack() const { return 0; }
|
|
 |
f085be |
|
|
 |
f085be |
public:
|
|
 |
f085be |
- ScChangeActionIns(const sal_uLong nActionNumber,
|
|
 |
f085be |
- const ScChangeActionState eState,
|
|
 |
f085be |
- const sal_uLong nRejectingNumber,
|
|
 |
f085be |
- const ScBigRange& aBigRange,
|
|
 |
f085be |
- const OUString& aUser,
|
|
 |
f085be |
- const DateTime& aDateTime,
|
|
 |
f085be |
- const OUString &sComment,
|
|
 |
f085be |
- const ScChangeActionType eType); // only to use in the XML import
|
|
 |
f085be |
+ ScChangeActionIns(
|
|
 |
f085be |
+ const sal_uLong nActionNumber,
|
|
 |
f085be |
+ const ScChangeActionState eState,
|
|
 |
f085be |
+ const sal_uLong nRejectingNumber,
|
|
 |
f085be |
+ const ScBigRange& aBigRange,
|
|
 |
f085be |
+ const OUString& aUser,
|
|
 |
f085be |
+ const DateTime& aDateTime,
|
|
 |
f085be |
+ const OUString &sComment,
|
|
 |
f085be |
+ const ScChangeActionType eType,
|
|
 |
f085be |
+ bool bEndOfList = false );
|
|
 |
f085be |
|
|
 |
f085be |
virtual void GetDescription(
|
|
 |
f085be |
OUString& rStr, ScDocument* pDoc, bool bSplitRange = false, bool bWarning = true) const;
|
|
 |
f085be |
+
|
|
 |
f085be |
+ SC_DLLPUBLIC bool IsEndOfList() const;
|
|
 |
f085be |
};
|
|
 |
f085be |
|
|
 |
f085be |
// ScChangeActionDel
|
|
 |
f085be |
@@ -1123,7 +1129,7 @@ public:
|
|
 |
f085be |
// Only use the following two if there is no different solution! (Assign
|
|
 |
f085be |
// string for NewValue or creation of a formula respectively)
|
|
 |
f085be |
|
|
 |
f085be |
- SC_DLLPUBLIC void AppendInsert( const ScRange& );
|
|
 |
f085be |
+ SC_DLLPUBLIC void AppendInsert( const ScRange& rRange, bool bEndOfList = false );
|
|
 |
f085be |
|
|
 |
f085be |
// pRefDoc may be NULL => no lookup of contents
|
|
 |
f085be |
// => no generation of deleted contents
|
|
 |
f085be |
diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx
|
|
 |
f085be |
index 1ebb30d..ff261ca 100644
|
|
 |
f085be |
--- a/sc/source/core/tool/chgtrack.cxx
|
|
 |
f085be |
+++ b/sc/source/core/tool/chgtrack.cxx
|
|
 |
f085be |
@@ -660,8 +660,9 @@ void ScChangeAction::AddDependent( sal_uLong nActionNumber,
|
|
 |
f085be |
}
|
|
 |
f085be |
|
|
 |
f085be |
// ScChangeActionIns
|
|
 |
f085be |
-ScChangeActionIns::ScChangeActionIns( const ScRange& rRange )
|
|
 |
f085be |
- : ScChangeAction( SC_CAT_NONE, rRange )
|
|
 |
f085be |
+ScChangeActionIns::ScChangeActionIns( const ScRange& rRange, bool bEndOfList ) :
|
|
 |
f085be |
+ ScChangeAction(SC_CAT_NONE, rRange),
|
|
 |
f085be |
+ mbEndOfList(bEndOfList)
|
|
 |
f085be |
{
|
|
 |
f085be |
if ( rRange.aStart.Col() == 0 && rRange.aEnd.Col() == MAXCOL )
|
|
 |
f085be |
{
|
|
 |
f085be |
@@ -692,8 +693,10 @@ ScChangeActionIns::ScChangeActionIns(
|
|
 |
f085be |
const sal_uLong nActionNumber, const ScChangeActionState eStateP,
|
|
 |
f085be |
const sal_uLong nRejectingNumber, const ScBigRange& aBigRangeP,
|
|
 |
f085be |
const OUString& aUserP, const DateTime& aDateTimeP,
|
|
 |
f085be |
- const OUString& sComment, const ScChangeActionType eTypeP) :
|
|
 |
f085be |
- ScChangeAction(eTypeP, aBigRangeP, nActionNumber, nRejectingNumber, eStateP, aDateTimeP, aUserP, sComment)
|
|
 |
f085be |
+ const OUString& sComment, const ScChangeActionType eTypeP,
|
|
 |
f085be |
+ bool bEndOfList ) :
|
|
 |
f085be |
+ ScChangeAction(eTypeP, aBigRangeP, nActionNumber, nRejectingNumber, eStateP, aDateTimeP, aUserP, sComment),
|
|
 |
f085be |
+ mbEndOfList(bEndOfList)
|
|
 |
f085be |
{
|
|
 |
f085be |
}
|
|
 |
f085be |
|
|
 |
f085be |
@@ -736,6 +739,11 @@ void ScChangeActionIns::GetDescription(
|
|
 |
f085be |
}
|
|
 |
f085be |
}
|
|
 |
f085be |
|
|
 |
f085be |
+bool ScChangeActionIns::IsEndOfList() const
|
|
 |
f085be |
+{
|
|
 |
f085be |
+ return mbEndOfList;
|
|
 |
f085be |
+}
|
|
 |
f085be |
+
|
|
 |
f085be |
bool ScChangeActionIns::Reject( ScDocument* pDoc )
|
|
 |
f085be |
{
|
|
 |
f085be |
if ( !aBigRange.IsValid( pDoc ) )
|
|
 |
f085be |
@@ -2826,9 +2834,9 @@ ScChangeActionContent* ScChangeTrack::AppendContentOnTheFly(
|
|
 |
f085be |
return pAct;
|
|
 |
f085be |
}
|
|
 |
f085be |
|
|
 |
f085be |
-void ScChangeTrack::AppendInsert( const ScRange& rRange )
|
|
 |
f085be |
+void ScChangeTrack::AppendInsert( const ScRange& rRange, bool bEndOfList )
|
|
 |
f085be |
{
|
|
 |
f085be |
- ScChangeActionIns* pAct = new ScChangeActionIns( rRange );
|
|
 |
f085be |
+ ScChangeActionIns* pAct = new ScChangeActionIns(rRange, bEndOfList);
|
|
 |
f085be |
Append( pAct );
|
|
 |
f085be |
}
|
|
 |
f085be |
|
|
 |
f085be |
@@ -4458,18 +4466,20 @@ ScChangeTrack* ScChangeTrack::Clone( ScDocument* pDocument ) const
|
|
 |
f085be |
case SC_CAT_INSERT_COLS:
|
|
 |
f085be |
case SC_CAT_INSERT_ROWS:
|
|
 |
f085be |
case SC_CAT_INSERT_TABS:
|
|
 |
f085be |
- {
|
|
 |
f085be |
- pClonedAction = new ScChangeActionIns(
|
|
 |
f085be |
- pAction->GetActionNumber(),
|
|
 |
f085be |
- pAction->GetState(),
|
|
 |
f085be |
- pAction->GetRejectAction(),
|
|
 |
f085be |
- pAction->GetBigRange(),
|
|
 |
f085be |
- pAction->GetUser(),
|
|
 |
f085be |
- pAction->GetDateTimeUTC(),
|
|
 |
f085be |
- pAction->GetComment(),
|
|
 |
f085be |
- pAction->GetType() );
|
|
 |
f085be |
- }
|
|
 |
f085be |
- break;
|
|
 |
f085be |
+ {
|
|
 |
f085be |
+ bool bEndOfList = static_cast<const ScChangeActionIns*>(pAction)->IsEndOfList();
|
|
 |
f085be |
+ pClonedAction = new ScChangeActionIns(
|
|
 |
f085be |
+ pAction->GetActionNumber(),
|
|
 |
f085be |
+ pAction->GetState(),
|
|
 |
f085be |
+ pAction->GetRejectAction(),
|
|
 |
f085be |
+ pAction->GetBigRange(),
|
|
 |
f085be |
+ pAction->GetUser(),
|
|
 |
f085be |
+ pAction->GetDateTimeUTC(),
|
|
 |
f085be |
+ pAction->GetComment(),
|
|
 |
f085be |
+ pAction->GetType(),
|
|
 |
f085be |
+ bEndOfList );
|
|
 |
f085be |
+ }
|
|
 |
f085be |
+ break;
|
|
 |
f085be |
case SC_CAT_DELETE_COLS:
|
|
 |
f085be |
case SC_CAT_DELETE_ROWS:
|
|
 |
f085be |
case SC_CAT_DELETE_TABS:
|
|
 |
f085be |
diff --git a/sc/source/filter/inc/XclExpChangeTrack.hxx b/sc/source/filter/inc/XclExpChangeTrack.hxx
|
|
 |
f085be |
index 72b7066..c7ee389 100644
|
|
 |
f085be |
--- a/sc/source/filter/inc/XclExpChangeTrack.hxx
|
|
 |
f085be |
+++ b/sc/source/filter/inc/XclExpChangeTrack.hxx
|
|
 |
f085be |
@@ -516,11 +516,12 @@ public:
|
|
 |
f085be |
|
|
 |
f085be |
class XclExpChTrInsert : public XclExpChTrAction
|
|
 |
f085be |
{
|
|
 |
f085be |
+ bool mbEndOfList;
|
|
 |
f085be |
+
|
|
 |
f085be |
protected:
|
|
 |
f085be |
ScRange aRange;
|
|
 |
f085be |
|
|
 |
f085be |
- XclExpChTrInsert( const XclExpChTrInsert& rCopy ) :
|
|
 |
f085be |
- XclExpChTrAction( rCopy ), aRange( rCopy.aRange ) {}
|
|
 |
f085be |
+ XclExpChTrInsert( const XclExpChTrInsert& rCopy );
|
|
 |
f085be |
|
|
 |
f085be |
virtual void SaveActionData( XclExpStream& rStrm ) const;
|
|
 |
f085be |
virtual void PrepareSaveAction( XclExpStream& rStrm ) const;
|
|
 |
f085be |
diff --git a/sc/source/filter/inc/XclImpChangeTrack.hxx b/sc/source/filter/inc/XclImpChangeTrack.hxx
|
|
 |
f085be |
index ffce967..c1b06d6 100644
|
|
 |
f085be |
--- a/sc/source/filter/inc/XclImpChangeTrack.hxx
|
|
 |
f085be |
+++ b/sc/source/filter/inc/XclImpChangeTrack.hxx
|
|
 |
f085be |
@@ -73,7 +73,7 @@ private:
|
|
 |
f085be |
void DoAcceptRejectAction( ScChangeAction* pAction );
|
|
 |
f085be |
void DoAcceptRejectAction( sal_uInt32 nFirst, sal_uInt32 nLast );
|
|
 |
f085be |
|
|
 |
f085be |
- void DoInsertRange( const ScRange& rRange );
|
|
 |
f085be |
+ void DoInsertRange( const ScRange& rRange, bool bEndOfList );
|
|
 |
f085be |
void DoDeleteRange( const ScRange& rRange );
|
|
 |
f085be |
|
|
 |
f085be |
inline sal_uInt8 LookAtuInt8();
|
|
 |
f085be |
diff --git a/sc/source/filter/xcl97/XclExpChangeTrack.cxx b/sc/source/filter/xcl97/XclExpChangeTrack.cxx
|
|
 |
f085be |
index aed0322..fe27e92 100644
|
|
 |
f085be |
--- a/sc/source/filter/xcl97/XclExpChangeTrack.cxx
|
|
 |
f085be |
+++ b/sc/source/filter/xcl97/XclExpChangeTrack.cxx
|
|
 |
f085be |
@@ -1118,7 +1118,10 @@ void XclExpChTrCellContent::SaveXml( XclExpXmlStream& rRevisionLogStrm )
|
|
 |
f085be |
pStream->endElement( XML_rcc );
|
|
 |
f085be |
}
|
|
 |
f085be |
|
|
 |
f085be |
-//___________________________________________________________________
|
|
 |
f085be |
+XclExpChTrInsert::XclExpChTrInsert( const XclExpChTrInsert& rCopy ) :
|
|
 |
f085be |
+ XclExpChTrAction(rCopy),
|
|
 |
f085be |
+ mbEndOfList(rCopy.mbEndOfList),
|
|
 |
f085be |
+ aRange(rCopy.aRange) {}
|
|
 |
f085be |
|
|
 |
f085be |
XclExpChTrInsert::XclExpChTrInsert(
|
|
 |
f085be |
const ScChangeAction& rAction,
|
|
 |
f085be |
@@ -1126,13 +1129,20 @@ XclExpChTrInsert::XclExpChTrInsert(
|
|
 |
f085be |
const XclExpChTrTabIdBuffer& rTabIdBuffer,
|
|
 |
f085be |
ScChangeTrack& rChangeTrack ) :
|
|
 |
f085be |
XclExpChTrAction( rAction, rRoot, rTabIdBuffer ),
|
|
 |
f085be |
+ mbEndOfList(false),
|
|
 |
f085be |
aRange( rAction.GetBigRange().MakeRange() )
|
|
 |
f085be |
{
|
|
 |
f085be |
nLength = 0x00000030;
|
|
 |
f085be |
switch( rAction.GetType() )
|
|
 |
f085be |
{
|
|
 |
f085be |
case SC_CAT_INSERT_COLS: nOpCode = EXC_CHTR_OP_INSCOL; break;
|
|
 |
f085be |
- case SC_CAT_INSERT_ROWS: nOpCode = EXC_CHTR_OP_INSROW; break;
|
|
 |
f085be |
+ case SC_CAT_INSERT_ROWS:
|
|
 |
f085be |
+ {
|
|
 |
f085be |
+ const ScChangeActionIns& rIns = static_cast<const ScChangeActionIns&>(rAction);
|
|
 |
f085be |
+ mbEndOfList = rIns.IsEndOfList();
|
|
 |
f085be |
+ nOpCode = EXC_CHTR_OP_INSROW;
|
|
 |
f085be |
+ }
|
|
 |
f085be |
+ break;
|
|
 |
f085be |
case SC_CAT_DELETE_COLS: nOpCode = EXC_CHTR_OP_DELCOL; break;
|
|
 |
f085be |
case SC_CAT_DELETE_ROWS: nOpCode = EXC_CHTR_OP_DELROW; break;
|
|
 |
f085be |
default:
|
|
 |
f085be |
@@ -1164,7 +1174,8 @@ XclExpChTrInsert::~XclExpChTrInsert()
|
|
 |
f085be |
void XclExpChTrInsert::SaveActionData( XclExpStream& rStrm ) const
|
|
 |
f085be |
{
|
|
 |
f085be |
WriteTabId( rStrm, aRange.aStart.Tab() );
|
|
 |
f085be |
- rStrm << (sal_uInt16) 0x0000;
|
|
 |
f085be |
+ sal_uInt16 nFlagVal = mbEndOfList ? 0x0001 : 0x0000;
|
|
 |
f085be |
+ rStrm << nFlagVal;
|
|
 |
f085be |
Write2DRange( rStrm, aRange );
|
|
 |
f085be |
rStrm << (sal_uInt32) 0x00000000;
|
|
 |
f085be |
}
|
|
 |
f085be |
diff --git a/sc/source/filter/xcl97/XclImpChangeTrack.cxx b/sc/source/filter/xcl97/XclImpChangeTrack.cxx
|
|
 |
f085be |
index 58c2540..cf1babc 100644
|
|
 |
f085be |
--- a/sc/source/filter/xcl97/XclImpChangeTrack.cxx
|
|
 |
f085be |
+++ b/sc/source/filter/xcl97/XclImpChangeTrack.cxx
|
|
 |
f085be |
@@ -95,10 +95,10 @@ void XclImpChangeTrack::DoAcceptRejectAction( sal_uInt32 nFirst, sal_uInt32 nLas
|
|
 |
f085be |
DoAcceptRejectAction( pChangeTrack->GetAction( nIndex ) );
|
|
 |
f085be |
}
|
|
 |
f085be |
|
|
 |
f085be |
-void XclImpChangeTrack::DoInsertRange( const ScRange& rRange )
|
|
 |
f085be |
+void XclImpChangeTrack::DoInsertRange( const ScRange& rRange, bool bEndOfList )
|
|
 |
f085be |
{
|
|
 |
f085be |
sal_uInt32 nFirst = pChangeTrack->GetActionMax() + 1;
|
|
 |
f085be |
- pChangeTrack->AppendInsert( rRange );
|
|
 |
f085be |
+ pChangeTrack->AppendInsert(rRange, bEndOfList);
|
|
 |
f085be |
sal_uInt32 nLast = pChangeTrack->GetActionMax();
|
|
 |
f085be |
DoAcceptRejectAction( nFirst, nLast );
|
|
 |
f085be |
}
|
|
 |
f085be |
@@ -299,7 +299,8 @@ void XclImpChangeTrack::ReadChTrInsert()
|
|
 |
f085be |
ScRange aRange;
|
|
 |
f085be |
aRange.aStart.SetTab( ReadTabNum() );
|
|
 |
f085be |
aRange.aEnd.SetTab( aRange.aStart.Tab() );
|
|
 |
f085be |
- pStrm->Ignore( 2 );
|
|
 |
f085be |
+ sal_uInt16 nFlags = pStrm->ReaduInt16();
|
|
 |
f085be |
+ bool bEndOfList = (nFlags & 0x0001); // row auto-inserted at the bottom.
|
|
 |
f085be |
Read2DRange( aRange );
|
|
 |
f085be |
|
|
 |
f085be |
if( aRecHeader.nOpCode & EXC_CHTR_OP_COLFLAG )
|
|
 |
f085be |
@@ -316,7 +317,7 @@ void XclImpChangeTrack::ReadChTrInsert()
|
|
 |
f085be |
if( aRecHeader.nOpCode & EXC_CHTR_OP_DELFLAG )
|
|
 |
f085be |
DoDeleteRange( aRange );
|
|
 |
f085be |
else
|
|
 |
f085be |
- DoInsertRange( aRange );
|
|
 |
f085be |
+ DoInsertRange(aRange, bEndOfList);
|
|
 |
f085be |
}
|
|
 |
f085be |
}
|
|
 |
f085be |
}
|
|
 |
f085be |
@@ -428,7 +429,7 @@ void XclImpChangeTrack::ReadChTrInsertTab()
|
|
 |
f085be |
if( pStrm->IsValid() )
|
|
 |
f085be |
{
|
|
 |
f085be |
nTabIdCount++;
|
|
 |
f085be |
- DoInsertRange( ScRange( 0, 0, nTab, MAXCOL, MAXROW, nTab ) );
|
|
 |
f085be |
+ DoInsertRange(ScRange(0, 0, nTab, MAXCOL, MAXROW, nTab), false);
|
|
 |
f085be |
}
|
|
 |
f085be |
}
|
|
 |
f085be |
}
|
|
 |
f085be |
--
|
|
 |
f085be |
1.9.3
|
|
 |
f085be |
|