summaryrefslogtreecommitdiff
path: root/sw/source/core/unocore/unoflatpara.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/unocore/unoflatpara.cxx')
-rw-r--r--sw/source/core/unocore/unoflatpara.cxx175
1 files changed, 77 insertions, 98 deletions
diff --git a/sw/source/core/unocore/unoflatpara.cxx b/sw/source/core/unocore/unoflatpara.cxx
index 5e405e9ec75c..b78db11beeb7 100644
--- a/sw/source/core/unocore/unoflatpara.cxx
+++ b/sw/source/core/unocore/unoflatpara.cxx
@@ -22,6 +22,7 @@
#include <unoflatpara.hxx>
#include <o3tl/safeint.hxx>
+#include <utility>
#include <vcl/svapp.hxx>
#include <com/sun/star/text/TextMarkupType.hpp>
#include <com/sun/star/beans/PropertyAttribute.hpp>
@@ -41,7 +42,7 @@
#include <rootfrm.hxx>
#include <poolfmt.hxx>
#include <pagedesc.hxx>
-#include <IGrammarContact.hxx>
+#include <GrammarContact.hxx>
#include <viewopt.hxx>
#include <comphelper/servicehelper.hxx>
#include <comphelper/propertysetinfo.hxx>
@@ -64,9 +65,10 @@ CreateFlatParagraphIterator(SwDoc & rDoc, sal_Int32 const nTextMarkupType,
}
-SwXFlatParagraph::SwXFlatParagraph( SwTextNode& rTextNode, const OUString& aExpandText, const ModelToViewHelper& rMap )
+SwXFlatParagraph::SwXFlatParagraph( SwTextNode& rTextNode, OUString aExpandText, const ModelToViewHelper& rMap )
: SwXFlatParagraph_Base(& rTextNode, rMap)
- , maExpandText(aExpandText)
+ , maExpandText(std::move(aExpandText))
+ , maOrigText(rTextNode.GetText())
{
}
@@ -79,10 +81,11 @@ SwXFlatParagraph::~SwXFlatParagraph()
uno::Reference< beans::XPropertySetInfo > SAL_CALL
SwXFlatParagraph::getPropertySetInfo()
{
- static comphelper::PropertyMapEntry s_Entries[] = {
- { OUString("FieldPositions"), -1, ::cppu::UnoType<uno::Sequence<sal_Int32>>::get(), beans::PropertyAttribute::READONLY, 0 },
- { OUString("FootnotePositions"), -1, ::cppu::UnoType<uno::Sequence<sal_Int32>>::get(), beans::PropertyAttribute::READONLY, 0 },
- { OUString(), -1, css::uno::Type(), 0, 0 }
+ static const comphelper::PropertyMapEntry s_Entries[] = {
+ { u"FieldPositions"_ustr, -1, ::cppu::UnoType<uno::Sequence<sal_Int32>>::get(), beans::PropertyAttribute::READONLY, 0 },
+ { u"FootnotePositions"_ustr, -1, ::cppu::UnoType<uno::Sequence<sal_Int32>>::get(), beans::PropertyAttribute::READONLY, 0 },
+ { u"SortedTextId"_ustr, -1, ::cppu::UnoType<sal_Int32>::get(), beans::PropertyAttribute::READONLY, 0 },
+ { u"DocumentElementsCount"_ustr, -1, ::cppu::UnoType<sal_Int32>::get(), beans::PropertyAttribute::READONLY, 0 },
};
return new comphelper::PropertySetInfo(s_Entries);
}
@@ -90,8 +93,8 @@ SwXFlatParagraph::getPropertySetInfo()
void SAL_CALL
SwXFlatParagraph::setPropertyValue(const OUString&, const uno::Any&)
{
- throw lang::IllegalArgumentException("no values can be set",
- static_cast< ::cppu::OWeakObject*>(this), 0);
+ throw lang::IllegalArgumentException(u"no values can be set"_ustr,
+ getXWeak(), 0);
}
uno::Any SAL_CALL
@@ -101,11 +104,27 @@ SwXFlatParagraph::getPropertyValue(const OUString& rPropertyName)
if (rPropertyName == "FieldPositions")
{
- return uno::makeAny( comphelper::containerToSequence( GetConversionMap().getFieldPositions() ) );
+ return uno::Any( comphelper::containerToSequence( GetConversionMap().getFieldPositions() ) );
}
else if (rPropertyName == "FootnotePositions")
{
- return uno::makeAny( comphelper::containerToSequence( GetConversionMap().getFootnotePositions() ) );
+ return uno::Any( comphelper::containerToSequence( GetConversionMap().getFootnotePositions() ) );
+ }
+ else if (rPropertyName == "SortedTextId")
+ {
+ SwTextNode const*const pCurrentNode = GetTextNode();
+ sal_Int32 nIndex = -1;
+ if ( pCurrentNode )
+ nIndex = pCurrentNode->GetIndex().get();
+ return uno::Any( nIndex );
+ }
+ else if (rPropertyName == "DocumentElementsCount")
+ {
+ SwTextNode const*const pCurrentNode = GetTextNode();
+ sal_Int32 nCount = -1;
+ if ( pCurrentNode )
+ nCount = pCurrentNode->GetDoc().GetNodes().Count().get();
+ return uno::Any( nCount );
}
return uno::Any();
}
@@ -182,7 +201,7 @@ void SAL_CALL SwXFlatParagraph::setChecked( ::sal_Int32 nType, sal_Bool bVal )
if ( text::TextMarkupType::SPELLCHECK == nType )
{
GetTextNode()->SetWrongDirty(
- bVal ? SwTextNode::WrongState::DONE : SwTextNode::WrongState::TODO);
+ bVal ? sw::WrongState::DONE : sw::WrongState::TODO);
}
else if ( text::TextMarkupType::SMARTTAG == nType )
GetTextNode()->SetSmartTagDirty( !bVal );
@@ -190,7 +209,7 @@ void SAL_CALL SwXFlatParagraph::setChecked( ::sal_Int32 nType, sal_Bool bVal )
{
GetTextNode()->SetGrammarCheckDirty( !bVal );
if( bVal )
- ::finishGrammarCheck( *GetTextNode() );
+ sw::finishGrammarCheckFor(*GetTextNode());
}
}
@@ -215,7 +234,7 @@ sal_Bool SAL_CALL SwXFlatParagraph::isChecked( ::sal_Int32 nType )
sal_Bool SAL_CALL SwXFlatParagraph::isModified()
{
SolarMutexGuard aGuard;
- return nullptr == GetTextNode();
+ return !GetTextNode() || GetTextNode()->GetText() != maOrigText;
}
// text::XFlatParagraph:
@@ -260,14 +279,13 @@ void SAL_CALL SwXFlatParagraph::changeText(::sal_Int32 nPos, ::sal_Int32 nLen, c
UnoActionContext aAction( &GetTextNode()->GetDoc() );
- const uno::Reference< text::XTextRange > xRange =
+ const rtl::Reference<SwXTextRange> xRange =
SwXTextRange::CreateXTextRange(
GetTextNode()->GetDoc(), *aPaM.GetPoint(), aPaM.GetMark() );
- uno::Reference< beans::XPropertySet > xPropSet( xRange, uno::UNO_QUERY );
- if ( xPropSet.is() )
+ if ( xRange.is() )
{
for ( const auto& rAttribute : aAttributes )
- xPropSet->setPropertyValue( rAttribute.Name, rAttribute.Value );
+ xRange->setPropertyValue( rAttribute.Name, rAttribute.Value );
}
IDocumentContentOperations& rIDCO = pOldTextNode->getIDocumentContentOperations();
@@ -293,14 +311,13 @@ void SAL_CALL SwXFlatParagraph::changeAttributes(::sal_Int32 nPos, ::sal_Int32 n
UnoActionContext aAction( &GetTextNode()->GetDoc() );
- const uno::Reference< text::XTextRange > xRange =
+ const rtl::Reference<SwXTextRange> xRange =
SwXTextRange::CreateXTextRange(
GetTextNode()->GetDoc(), *aPaM.GetPoint(), aPaM.GetMark() );
- uno::Reference< beans::XPropertySet > xPropSet( xRange, uno::UNO_QUERY );
- if ( xPropSet.is() )
+ if ( xRange.is() )
{
for ( const auto& rAttribute : aAttributes )
- xPropSet->setPropertyValue( rAttribute.Name, rAttribute.Value );
+ xRange->setPropertyValue( rAttribute.Name, rAttribute.Value );
}
ClearTextNode(); // TODO: is this really needed?
@@ -312,24 +329,6 @@ css::uno::Sequence< ::sal_Int32 > SAL_CALL SwXFlatParagraph::getLanguagePortions
return css::uno::Sequence< ::sal_Int32>();
}
-namespace
-{
- class theSwXFlatParagraphUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theSwXFlatParagraphUnoTunnelId > {};
-}
-
-const uno::Sequence< sal_Int8 >&
-SwXFlatParagraph::getUnoTunnelId()
-{
- return theSwXFlatParagraphUnoTunnelId::get().getSeq();
-}
-
-sal_Int64 SAL_CALL
-SwXFlatParagraph::getSomething(
- const uno::Sequence< sal_Int8 >& rId)
-{
- return sw::UnoTunnelImpl(rId, this);
-}
-
SwXFlatParagraphIterator::SwXFlatParagraphIterator( SwDoc& rDoc, sal_Int32 nType, bool bAutomatic )
: mpDoc( &rDoc ),
mnType( nType ),
@@ -367,9 +366,8 @@ uno::Reference< text::XFlatParagraph > SwXFlatParagraphIterator::getNextPara()
{
SolarMutexGuard aGuard;
- uno::Reference< text::XFlatParagraph > xRet;
if (!mpDoc)
- return xRet;
+ return nullptr;
SwTextNode* pRet = nullptr;
if ( mbAutomatic )
@@ -387,7 +385,7 @@ uno::Reference< text::XFlatParagraph > SwXFlatParagraphIterator::getNextPara()
// this method is supposed to return an empty paragraph in case Online Checking is disabled
if ( ( mnType == text::TextMarkupType::PROOFREADING || mnType == text::TextMarkupType::SPELLCHECK )
&& !pViewShell->GetViewOptions()->IsOnlineSpell() )
- return xRet;
+ return nullptr;
// search for invalid content:
SwContentFrame* pCnt = pCurrentPage->ContainsContent();
@@ -460,7 +458,7 @@ uno::Reference< text::XFlatParagraph > SwXFlatParagraphIterator::getNextPara()
else // non-automatic checking
{
const SwNodes& rNodes = mpDoc->GetNodes();
- const sal_uLong nMaxNodes = rNodes.Count();
+ const SwNodeOffset nMaxNodes = rNodes.Count();
while ( mnCurrentNode < mnEndNode && mnCurrentNode < nMaxNodes )
{
@@ -468,30 +466,26 @@ uno::Reference< text::XFlatParagraph > SwXFlatParagraphIterator::getNextPara()
++mnCurrentNode;
- pRet = dynamic_cast<SwTextNode*>(pNd);
+ pRet = pNd->GetTextNode();
if ( pRet )
break;
if ( mnCurrentNode == mnEndNode )
{
- mnCurrentNode = 0;
- mnEndNode = 0;
+ mnCurrentNode = SwNodeOffset(0);
+ mnEndNode = SwNodeOffset(0);
}
}
}
- if ( pRet )
- {
- // Expand the string:
- const ModelToViewHelper aConversionMap(*pRet, mpDoc->getIDocumentLayoutAccess().GetCurrentLayout());
- const OUString& aExpandText = aConversionMap.getViewText();
+ if ( !pRet )
+ return nullptr;
- xRet = new SwXFlatParagraph( *pRet, aExpandText, aConversionMap );
- // keep hard references...
- m_aFlatParaList.insert( xRet );
- }
+ // Expand the string:
+ const ModelToViewHelper aConversionMap(*pRet, mpDoc->getIDocumentLayoutAccess().GetCurrentLayout());
+ const OUString& aExpandText = aConversionMap.getViewText();
- return xRet;
+ return new SwXFlatParagraph( *pRet, aExpandText, aConversionMap );
}
uno::Reference< text::XFlatParagraph > SwXFlatParagraphIterator::getLastPara()
@@ -503,91 +497,76 @@ uno::Reference< text::XFlatParagraph > SwXFlatParagraphIterator::getParaAfter(co
{
SolarMutexGuard aGuard;
- uno::Reference< text::XFlatParagraph > xRet;
if (!mpDoc)
- return xRet;
-
- const uno::Reference<lang::XUnoTunnel> xFPTunnel(xPara, uno::UNO_QUERY);
- SAL_WARN_IF(!xFPTunnel.is(), "sw.core", "invalid argument");
- SwXFlatParagraph* const pFlatParagraph(sw::UnoTunnelGetImplementation<SwXFlatParagraph>(xFPTunnel));
+ return nullptr;
+ SwXFlatParagraph* const pFlatParagraph(dynamic_cast<SwXFlatParagraph*>(xPara.get()));
+ SAL_WARN_IF(!pFlatParagraph, "sw.core", "invalid argument");
if ( !pFlatParagraph )
- return xRet;
+ return nullptr;
SwTextNode const*const pCurrentNode = pFlatParagraph->GetTextNode();
if ( !pCurrentNode )
- return xRet;
+ return nullptr;
SwTextNode* pNextTextNode = nullptr;
const SwNodes& rNodes = pCurrentNode->GetDoc().GetNodes();
- for( sal_uLong nCurrentNode = pCurrentNode->GetIndex() + 1; nCurrentNode < rNodes.Count(); ++nCurrentNode )
+ for( SwNodeOffset nCurrentNode = pCurrentNode->GetIndex() + 1; nCurrentNode < rNodes.Count(); ++nCurrentNode )
{
SwNode* pNd = rNodes[ nCurrentNode ];
- pNextTextNode = dynamic_cast<SwTextNode*>(pNd);
+ pNextTextNode = pNd->GetTextNode();
if ( pNextTextNode )
break;
}
- if ( pNextTextNode )
- {
- // Expand the string:
- const ModelToViewHelper aConversionMap(*pNextTextNode, mpDoc->getIDocumentLayoutAccess().GetCurrentLayout());
- const OUString& aExpandText = aConversionMap.getViewText();
+ if ( !pNextTextNode )
+ return nullptr;
- xRet = new SwXFlatParagraph( *pNextTextNode, aExpandText, aConversionMap );
- // keep hard references...
- m_aFlatParaList.insert( xRet );
- }
+ // Expand the string:
+ const ModelToViewHelper aConversionMap(*pNextTextNode, mpDoc->getIDocumentLayoutAccess().GetCurrentLayout());
+ const OUString& aExpandText = aConversionMap.getViewText();
- return xRet;
+ return new SwXFlatParagraph( *pNextTextNode, aExpandText, aConversionMap );
}
uno::Reference< text::XFlatParagraph > SwXFlatParagraphIterator::getParaBefore(const uno::Reference< text::XFlatParagraph > & xPara )
{
SolarMutexGuard aGuard;
- uno::Reference< text::XFlatParagraph > xRet;
if (!mpDoc)
- return xRet;
-
- const uno::Reference<lang::XUnoTunnel> xFPTunnel(xPara, uno::UNO_QUERY);
-
- SAL_WARN_IF(!xFPTunnel.is(), "sw.core", "invalid argument");
- SwXFlatParagraph* const pFlatParagraph(sw::UnoTunnelGetImplementation<SwXFlatParagraph>(xFPTunnel));
+ return nullptr;
+ SwXFlatParagraph* const pFlatParagraph(dynamic_cast<SwXFlatParagraph*>(xPara.get()));
+ SAL_WARN_IF(!pFlatParagraph, "sw.core", "invalid argument");
if ( !pFlatParagraph )
- return xRet;
+ return nullptr;
SwTextNode const*const pCurrentNode = pFlatParagraph->GetTextNode();
if ( !pCurrentNode )
- return xRet;
+ return nullptr;
SwTextNode* pPrevTextNode = nullptr;
const SwNodes& rNodes = pCurrentNode->GetDoc().GetNodes();
- for( sal_uLong nCurrentNode = pCurrentNode->GetIndex() - 1; nCurrentNode > 0; --nCurrentNode )
+ for( SwNodeOffset nCurrentNode = pCurrentNode->GetIndex() - 1; nCurrentNode > SwNodeOffset(0); --nCurrentNode )
{
SwNode* pNd = rNodes[ nCurrentNode ];
- pPrevTextNode = dynamic_cast<SwTextNode*>(pNd);
+ pPrevTextNode = pNd->GetTextNode();
if ( pPrevTextNode )
break;
}
- if ( pPrevTextNode )
- {
- // Expand the string:
- const ModelToViewHelper aConversionMap(*pPrevTextNode, mpDoc->getIDocumentLayoutAccess().GetCurrentLayout());
- const OUString& aExpandText = aConversionMap.getViewText();
+ if ( !pPrevTextNode )
+ return nullptr;
- xRet = new SwXFlatParagraph( *pPrevTextNode, aExpandText, aConversionMap );
- // keep hard references...
- m_aFlatParaList.insert( xRet );
- }
+ // Expand the string:
+ const ModelToViewHelper aConversionMap(*pPrevTextNode, mpDoc->getIDocumentLayoutAccess().GetCurrentLayout());
+ const OUString& aExpandText = aConversionMap.getViewText();
- return xRet;
+ return new SwXFlatParagraph( *pPrevTextNode, aExpandText, aConversionMap );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */