19 #include <oox/token/namespaces.hxx>
20 #include <oox/token/tokens.hxx>
26 #include <document.hxx>
27 #include <compiler.hxx>
32 #include <tokenarray.hxx>
34 #include <com/sun/star/util/DateTime.hpp>
53 class RCCCellValueContext :
public WorkbookContextBase
64 RevisionLogFragment& rParent, sal_Int32 nSheetIndex,
ScAddress& rPos,
ScCellValue& rCellValue ) :
65 WorkbookContextBase(rParent),
66 mnSheetIndex(nSheetIndex),
68 mrCellValue(rCellValue),
73 sal_Int32 nElement,
const AttributeList& )
override
75 if (nElement == XLS_TOKEN(is))
77 mxRichString = std::make_shared<RichString>(*this);
78 return new RichStringContext(*
this, mxRichString);
84 virtual void onStartElement(
const AttributeList& rAttribs )
override
86 switch (getCurrentElement())
97 virtual void onCharacters(
const OUString& rChars )
override
99 switch (getCurrentElement())
103 if (mnType == XML_n || mnType == XML_b)
104 mrCellValue.
set(rChars.toDouble());
109 if (mnType == XML_inlineStr)
122 std::unique_ptr<ScTokenArray> pArray = aComp.CompileString(rChars);
134 virtual void onEndElement()
override
136 switch (getCurrentElement())
145 std::unique_ptr<EditTextObject> pTextObj = mxRichString->convert(rDoc.
GetEditEngine(),
nullptr);
149 pTextObj->NormalizeString(rPool);
150 mrCellValue.
set(pTextObj.release());
161 void importCell(
const AttributeList& rAttribs )
163 mnType = rAttribs.getToken(XML_t, XML_n);
164 OUString aRefStr = rAttribs.getString(XML_r, OUString());
165 if (!aRefStr.isEmpty())
168 if (mnSheetIndex != -1)
169 mrPos.
SetTab(mnSheetIndex-1);
174 struct RevisionMetadata
180 RevisionMetadata(
const RevisionMetadata& r ) :
181 maUserName(r.maUserName), maDateTime(r.maDateTime) {}
193 RevisionHeadersFragment::RevisionHeadersFragment(
212 case XLS_TOKEN(headers):
217 case XLS_TOKEN(sheetIdMap):
219 case XLS_TOKEN(sheetId):
232 case XLS_TOKEN(headers):
236 case XLS_TOKEN(sheetIdMap):
238 case XLS_TOKEN(sheetId):
249 OUString aSelfUser = pCT->GetUser();
250 pCT->SetUseFixDateTime(
true);
253 for (
const auto& [rRelId,
rData] :
mpImpl->maRevData)
260 pCT->SetUser(
rData.maUserName);
261 pCT->SetFixDateTimeLocal(
rData.maDateTime);
267 pCT->SetUser(aSelfUser);
268 pCT->SetUseFixDateTime(
false);
279 OUString aRId = rAttribs.
getString(R_TOKEN(
id), OUString());
284 RevisionMetadata aMetadata;
285 OUString aDateTimeStr = rAttribs.
getString(XML_dateTime, OUString());
286 if (!aDateTimeStr.isEmpty())
288 util::DateTime aDateTime;
290 Date aDate(aDateTime);
292 aMetadata.maDateTime.SetDate(aDate.
GetDate());
293 aMetadata.maDateTime.SetTime(aTime.
GetTime());
296 aMetadata.maUserName = rAttribs.
getString(XML_userName, OUString());
298 mpImpl->maRevData.emplace(aRId, aMetadata);
321 mrChangeTrack(rChangeTrack),
324 mbEndOfList(
false) {}
330 mpImpl(new
Impl(rChangeTrack)) {}
342 return new RCCCellValueContext(*
this,
mpImpl->mnSheetIndex,
mpImpl->maNewCellPos,
mpImpl->maNewCellValue);
344 return new RCCCellValueContext(*
this,
mpImpl->mnSheetIndex,
mpImpl->maOldCellPos,
mpImpl->maOldCellValue);
356 mpImpl->maNewCellPos.SetInvalid();
357 mpImpl->maOldCellPos.SetInvalid();
358 mpImpl->maNewCellValue.clear();
359 mpImpl->maOldCellValue.clear();
396 mpImpl->meType = REV_CELLCHANGE;
403 if (
mpImpl->mnSheetIndex == -1)
407 mpImpl->meType = REV_UNKNOWN;
408 sal_Int32 nAction = rAttribs.
getToken(XML_action, -1);
412 OUString aRefStr = rAttribs.
getString(XML_ref, OUString());
414 if (!
mpImpl->maRange.IsValid())
420 mpImpl->meType = REV_INSERTROW;
438 mpImpl->mrChangeTrack.AppendContentOnTheFly(
Helper class to provide access to global workbook data.
void importRrc(const AttributeList &rAttribs)
SharedString intern(const OUString &rStr)
void importRcc(const AttributeList &rAttribs)
SC_DLLPUBLIC svl::SharedStringPool & GetSharedStringPool()
ScCellValue & mrCellValue
OptValue< bool > getBool(sal_Int32 nAttrToken) const
SC_DLLPUBLIC void SetChangeViewSettings(const ScChangeViewSettings &rNew)
Impl(ScChangeTrack &rChangeTrack)
OptValue< sal_Int32 > getInteger(sal_Int32 nAttrToken) const
const ContentProperties & rData
static bool parseDateTime(css::util::DateTime &rDateTime, std::u16string_view rString)
OptValue< OUString > getString(sal_Int32 nAttrToken) const
virtual void onStartElement(const AttributeList &rAttribs) override
bool importOoxFragment(const rtl::Reference< oox::core::FragmentHandler > &rxHandler)
Imports a fragment using the passed fragment handler, which contains the full path to the fragment st...
Store arbitrary cell value of any kind.
std::shared_ptr< RichString > RichStringRef
Fragment handler derived from the WorkbookHelper helper class.
sal_Int32 GetDate() const
ScCellValue maNewCellValue
ScDocument & getScDocument()
sal_Int32 getCurrentElement() const
virtual oox::core::ContextHandlerRef onCreateContext(sal_Int32 nElement, const AttributeList &rAttribs) override
RevisionLogFragment(const WorkbookHelper &rHelper, const OUString &rFragmentPath, ScChangeTrack &rChangeTrack)
virtual void finalizeImport() override
virtual void onCharacters(const OUString &rChars) override
OUString getFragmentPathFromRelId(const OUString &rRelId) const
virtual void onEndElement() override
RichStringRef mxRichString
virtual ~RevisionLogFragment() override
SC_DLLPUBLIC void SetChangeTrack(std::unique_ptr< ScChangeTrack > pTrack)
only for import filter, deletes any existing ChangeTrack via EndChangeTracking() and takes ownership ...
std::unique_ptr< Impl > mpImpl
SC_DLLPUBLIC ScRefFlags Parse(const OUString &, const ScDocument &, const Details &rDetails=detailsOOOa1, ExternalInfo *pExtInfo=nullptr, const css::uno::Sequence< css::sheet::ExternalLinkInfo > *pExternalLinks=nullptr, sal_Int32 *pSheetEndPos=nullptr, const OUString *pErrRef=nullptr)
static FastParser * createParser()
SC_DLLPUBLIC ScFieldEditEngine & GetEditEngine()
ScCellValue maOldCellValue
OptValue< sal_Int32 > getToken(sal_Int32 nAttrToken) const
void importCommon(const AttributeList &rAttribs)
ScChangeTrack & mrChangeTrack
bool m_bDetectedRangeSegmentation false
void SetShowChanges(bool bFlag)