summaryrefslogtreecommitdiffstats
path: root/sw/source/core/inc/unoport.hxx
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 05:54:39 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 05:54:39 +0000
commit267c6f2ac71f92999e969232431ba04678e7437e (patch)
tree358c9467650e1d0a1d7227a21dac2e3d08b622b2 /sw/source/core/inc/unoport.hxx
parentInitial commit. (diff)
downloadlibreoffice-267c6f2ac71f92999e969232431ba04678e7437e.tar.xz
libreoffice-267c6f2ac71f92999e969232431ba04678e7437e.zip
Adding upstream version 4:24.2.0.upstream/4%24.2.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sw/source/core/inc/unoport.hxx')
-rw-r--r--sw/source/core/inc/unoport.hxx314
1 files changed, 314 insertions, 0 deletions
diff --git a/sw/source/core/inc/unoport.hxx b/sw/source/core/inc/unoport.hxx
new file mode 100644
index 0000000000..d64936a703
--- /dev/null
+++ b/sw/source/core/inc/unoport.hxx
@@ -0,0 +1,314 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SW_SOURCE_CORE_INC_UNOPORT_HXX
+#define INCLUDED_SW_SOURCE_CORE_INC_UNOPORT_HXX
+
+#include <memory>
+#include <deque>
+
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/text/XTextRange.hpp>
+#include <com/sun/star/container/XEnumeration.hpp>
+#include <com/sun/star/container/XContentEnumerationAccess.hpp>
+#include <com/sun/star/beans/XPropertyState.hpp>
+#include <com/sun/star/beans/XMultiPropertySet.hpp>
+#include <com/sun/star/beans/XTolerantMultiPropertySet.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+
+#include <cppuhelper/implbase.hxx>
+
+#include <svl/itemprop.hxx>
+#include <svl/listener.hxx>
+
+#include <unocrsr.hxx>
+
+namespace com::sun::star::beans { struct PropertyValue; }
+namespace com::sun::star::text { class XTextField; }
+namespace com::sun::star::text { class XFootnote; }
+
+class SwFrameFormat;
+class SwRangeRedline;
+class SwTextRuby;
+class SwXText;
+class SwXTextPortion;
+
+typedef std::deque<
+ rtl::Reference<SwXTextPortion> >
+ TextRangeList_t;
+
+enum SwTextPortionType
+{
+ PORTION_TEXT,
+ PORTION_FIELD,
+ PORTION_FRAME,
+ PORTION_FOOTNOTE,
+ PORTION_REFMARK_START,
+ PORTION_REFMARK_END,
+ PORTION_TOXMARK_START,
+ PORTION_TOXMARK_END,
+ PORTION_BOOKMARK_START,
+ PORTION_BOOKMARK_END,
+ PORTION_REDLINE_START,
+ PORTION_REDLINE_END,
+ PORTION_RUBY_START,
+ PORTION_RUBY_END,
+ PORTION_SOFT_PAGEBREAK,
+ PORTION_META,
+ PORTION_FIELD_START,
+ PORTION_FIELD_SEP,
+ PORTION_FIELD_END,
+ PORTION_FIELD_START_END,
+ PORTION_ANNOTATION,
+ PORTION_ANNOTATION_END,
+ PORTION_LINEBREAK,
+ PORTION_CONTENT_CONTROL,
+ PORTION_LIST_AUTOFMT
+};
+
+class SwXTextPortion : public cppu::WeakImplHelper
+<
+ css::beans::XTolerantMultiPropertySet,
+ css::beans::XMultiPropertySet,
+ css::beans::XPropertySet,
+ css::text::XTextRange,
+ css::beans::XPropertyState,
+ css::container::XContentEnumerationAccess,
+ css::lang::XServiceInfo
+>,
+ public SvtListener
+{
+private:
+
+ const SfxItemPropertySet * m_pPropSet;
+ const css::uno::Reference< css::text::XText >
+ m_xParentText;
+ css::uno::Reference< css::text::XTextContent >
+ m_xRefMark;
+ css::uno::Reference< css::text::XTextContent >
+ m_xTOXMark;
+ css::uno::Reference< css::text::XTextContent >
+ m_xBookmark;
+ css::uno::Reference< css::text::XFootnote >
+ m_xFootnote;
+ css::uno::Reference< css::text::XTextField >
+ m_xTextField;
+ css::uno::Reference< css::text::XTextContent >
+ m_xMeta;
+ css::uno::Reference<css::text::XTextContent> m_xLineBreak;
+ css::uno::Reference<css::text::XTextContent> m_xContentControl;
+ std::optional< css::uno::Any > m_oRubyText;
+ std::optional< css::uno::Any > m_oRubyStyle;
+ std::optional< css::uno::Any > m_oRubyAdjust;
+ std::optional< css::uno::Any > m_oRubyIsAbove;
+ std::optional< css::uno::Any > m_oRubyPosition;
+ sw::UnoCursorPointer m_pUnoCursor;
+
+ SwFrameFormat* m_pFrameFormat;
+ const SwTextPortionType m_ePortionType;
+
+ bool m_bIsCollapsed;
+
+ /// Expose the paragraph's RES_PARATR_LIST_AUTOFMT, not the char props of the underlying (empty)
+ /// text.
+ bool m_bIsListAutoFormat;
+
+ void init(const SwUnoCursor* pPortionCursor);
+
+protected:
+ /// @throws css::beans::UnknownPropertyException
+ /// @throws css::beans::PropertyVetoException
+ /// @throws css::lang::IllegalArgumentException
+ /// @throws css::lang::WrappedTargetException
+ /// @throws css::uno::RuntimeException
+ void SetPropertyValues_Impl(
+ const css::uno::Sequence< OUString >& aPropertyNames,
+ const css::uno::Sequence< css::uno::Any >& aValues );
+ /// @throws css::beans::UnknownPropertyException
+ /// @throws css::lang::WrappedTargetException
+ /// @throws css::uno::RuntimeException
+ css::uno::Sequence< css::uno::Any > GetPropertyValues_Impl(
+ const css::uno::Sequence< OUString >& aPropertyNames );
+
+ void GetPropertyValue( css::uno::Any &rVal,
+ const SfxItemPropertyMapEntry& rEntry, SwUnoCursor *pUnoCursor, std::unique_ptr<SfxItemSet> &pSet );
+
+ /// @throws css::uno::RuntimeException
+ css::uno::Sequence<css::beans::GetDirectPropertyTolerantResult> GetPropertyValuesTolerant_Impl(
+ const css::uno::Sequence< OUString >& rPropertyNames, bool bDirectValuesOnly );
+
+ virtual ~SwXTextPortion() override;
+
+ virtual void Notify(const SfxHint& rHint) override;
+
+public:
+ SwXTextPortion(const SwUnoCursor* pPortionCursor, css::uno::Reference< css::text::XText > xParent, SwTextPortionType eType );
+ SwXTextPortion(const SwUnoCursor* pPortionCursor, css::uno::Reference< css::text::XText > xParent, SwFrameFormat& rFormat );
+
+ // for Ruby
+ SwXTextPortion(const SwUnoCursor* pPortionCursor,
+ SwTextRuby const& rAttr,
+ css::uno::Reference< css::text::XText > xParent,
+ bool bIsEnd );
+
+ //XTextRange
+ virtual css::uno::Reference< css::text::XText > SAL_CALL getText() override;
+ virtual css::uno::Reference< css::text::XTextRange > SAL_CALL getStart() override;
+ virtual css::uno::Reference< css::text::XTextRange > SAL_CALL getEnd() override;
+ virtual OUString SAL_CALL getString() override;
+ virtual void SAL_CALL setString(const OUString& aString) override;
+
+ //XTolerantMultiPropertySet
+ virtual css::uno::Sequence< css::beans::SetPropertyTolerantFailed > SAL_CALL setPropertyValuesTolerant( const css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Sequence< css::uno::Any >& aValues ) override;
+ virtual css::uno::Sequence< css::beans::GetPropertyTolerantResult > SAL_CALL getPropertyValuesTolerant( const css::uno::Sequence< OUString >& aPropertyNames ) override;
+ virtual css::uno::Sequence< css::beans::GetDirectPropertyTolerantResult > SAL_CALL getDirectPropertyValuesTolerant( const css::uno::Sequence< OUString >& aPropertyNames ) override;
+
+ //XMultiPropertySet
+ virtual void SAL_CALL setPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Sequence< css::uno::Any >& aValues ) override;
+ virtual css::uno::Sequence< css::uno::Any > SAL_CALL getPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames ) override;
+ virtual void SAL_CALL addPropertiesChangeListener( const css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) override;
+ virtual void SAL_CALL removePropertiesChangeListener( const css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) override;
+ virtual void SAL_CALL firePropertiesChangeEvent( const css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) override;
+
+ //XPropertySet
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override;
+ virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override;
+ virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) override;
+ virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override;
+ virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override;
+ virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
+ virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
+
+ //XPropertyState
+ virtual css::beans::PropertyState SAL_CALL getPropertyState( const OUString& PropertyName ) override;
+ virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName ) override;
+ virtual void SAL_CALL setPropertyToDefault( const OUString& PropertyName ) override;
+ virtual css::uno::Any SAL_CALL getPropertyDefault( const OUString& aPropertyName ) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+ //XContentEnumerationAccess
+ virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createContentEnumeration(const OUString& aServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getAvailableServiceNames() override;
+
+ void SetRefMark( css::uno::Reference< css::text::XTextContent > const & xMark)
+ { m_xRefMark = xMark; }
+
+ void SetTOXMark( css::uno::Reference< css::text::XTextContent > const & xMark)
+ { m_xTOXMark = xMark; }
+
+ void SetBookmark( css::uno::Reference< css::text::XTextContent > const & xMark)
+ { m_xBookmark = xMark; }
+
+ void SetFootnote( css::uno::Reference< css::text::XFootnote > const & xNote)
+ { m_xFootnote = xNote; }
+
+ void SetTextField( css::uno::Reference< css::text::XTextField> const & xField)
+ { m_xTextField = xField; }
+
+ void SetMeta( css::uno::Reference< css::text::XTextContent > const & xMeta)
+ { m_xMeta = xMeta; }
+
+ void SetLineBreak(css::uno::Reference<css::text::XTextContent> const& xLineBreak)
+ {
+ m_xLineBreak = xLineBreak;
+ }
+
+ void SetContentControl(const css::uno::Reference<css::text::XTextContent>& xContentControl)
+ {
+ m_xContentControl = xContentControl;
+ }
+
+ void SetCollapsed(bool bSet) { m_bIsCollapsed = bSet;}
+
+ SwTextPortionType GetTextPortionType() const { return m_ePortionType; }
+
+ SwUnoCursor& GetCursor() const
+ { return *m_pUnoCursor; }
+};
+
+class SwXTextPortionEnumeration final
+ : public ::cppu::WeakImplHelper
+ < css::container::XEnumeration
+ , css::lang::XServiceInfo
+ >
+{
+ TextRangeList_t m_Portions; // contains all portions, filled by ctor
+ sw::UnoCursorPointer m_pUnoCursor;
+
+ virtual ~SwXTextPortionEnumeration() override;
+
+public:
+ /// @param bOnlyTextFields tries to return less data, but may return more than just text fields
+ SwXTextPortionEnumeration(SwPaM& rParaCursor,
+ css::uno::Reference< SwXText > const & xParent,
+ const sal_Int32 nStart, const sal_Int32 nEnd, bool bOnlyTextFields = false );
+
+ SwXTextPortionEnumeration(SwPaM& rParaCursor,
+ TextRangeList_t && rPortions );
+
+ //XEnumeration
+ virtual sal_Bool SAL_CALL hasMoreElements() override;
+ virtual css::uno::Any SAL_CALL nextElement() override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL
+ getSupportedServiceNames() override;
+};
+
+class SwXRedlinePortion final : public SwXTextPortion
+{
+private:
+ SwRangeRedline const& m_rRedline;
+
+ bool Validate();
+
+ using SwXTextPortion::GetPropertyValue;
+
+ virtual ~SwXRedlinePortion() override;
+
+public:
+ SwXRedlinePortion(
+ SwRangeRedline const& rRedline,
+ SwUnoCursor const* pPortionCursor,
+ css::uno::Reference< css::text::XText > const& xParent,
+ bool const bIsStart);
+
+ /// @throws std::exception
+ static css::uno::Any GetPropertyValue(
+ std::u16string_view PropertyName, SwRangeRedline const& rRedline);
+ /// @throws std::exception
+ static css::uno::Sequence< css::beans::PropertyValue > CreateRedlineProperties(
+ SwRangeRedline const& rRedline, bool const bIsStart);
+
+ virtual css::uno::Sequence< sal_Int8 > SAL_CALL
+ getImplementationId() override;
+
+ // XPropertySet
+ virtual css::uno::Any SAL_CALL getPropertyValue(
+ const OUString& rPropertyName) override;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */