1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 #ifndef INCLUDED_SW_INC_UNOCRSRHELPER_HXX 20 #define INCLUDED_SW_INC_UNOCRSRHELPER_HXX 21 22 #include "swtypes.hxx" 23 #include "flyenum.hxx" 24 #include "pam.hxx" 25 26 #include <map> 27 28 class SfxItemSet; 29 class SfxItemPropertySet; 30 struct SfxItemPropertySimpleEntry; 31 class SdrObject; 32 class SwTextNode; 33 class SwCursor; 34 class SwUnoCursor; 35 class SwUnoTableCursor; 36 class SwFormatColl; 37 struct SwSortOptions; 38 class SwDoc; 39 class SwRootFrame; 40 41 namespace sw { namespace mark { class IMark; } } 42 43 namespace com{ namespace sun{ namespace star{ 44 namespace beans{ 45 struct PropertyValue; 46 enum class PropertyState; 47 } 48 namespace text { 49 class XTextContent; 50 class XFlatParagraphIterator; 51 } 52 }}} 53 54 enum SwGetPropertyStatesCaller 55 { 56 SW_PROPERTY_STATE_CALLER_DEFAULT, 57 SW_PROPERTY_STATE_CALLER_SWX_TEXT_PORTION, 58 SW_PROPERTY_STATE_CALLER_SINGLE_VALUE_ONLY, 59 SW_PROPERTY_STATE_CALLER_SWX_TEXT_PORTION_TOLERANT 60 }; 61 62 namespace SwUnoCursorHelper 63 { 64 class SwAnyMapHelper 65 { 66 private: 67 // keep Any's mapped by (WhichId << 16 ) + (MemberId) 68 std::map<sal_uInt32, css::uno::Any> m_Map; 69 70 public: 71 void SetValue( sal_uInt16 nWhichId, sal_uInt16 nMemberId, const css::uno::Any& rAny ); 72 bool FillValue( sal_uInt16 nWhichId, sal_uInt16 nMemberId, const css::uno::Any*& pAny ); 73 }; 74 75 css::uno::Reference< css::text::XTextContent > 76 GetNestedTextContent(SwTextNode const & rTextNode, sal_Int32 const nIndex, 77 bool const bParent); 78 79 bool getCursorPropertyValue(const SfxItemPropertySimpleEntry& rEntry 80 , SwPaM& rPam 81 , css::uno::Any *pAny 82 , css::beans::PropertyState& eState 83 , const SwTextNode* pNode = nullptr ); 84 85 void GetCurPageStyle(SwPaM const & rPaM, OUString &rString); 86 IsStartOfPara(SwPaM & rUnoCursor)87 inline bool IsStartOfPara(SwPaM& rUnoCursor) 88 { return rUnoCursor.GetPoint()->nContent == 0;} IsEndOfPara(SwPaM & rUnoCursor)89 inline bool IsEndOfPara(SwPaM& rUnoCursor) 90 { return rUnoCursor.GetContentNode() && 91 rUnoCursor.GetPoint()->nContent == rUnoCursor.GetContentNode()->Len();} 92 93 void resetCursorPropertyValue(const SfxItemPropertySimpleEntry& rEntry, SwPaM& rPam); 94 /// @throws css::lang::IllegalArgumentException 95 /// @throws css::io::IOException 96 /// @throws css::uno::RuntimeException 97 void InsertFile(SwUnoCursor* pUnoCursor, 98 const OUString& rURL, 99 const css::uno::Sequence< css::beans::PropertyValue >& rOptions); 100 101 void getNumberingProperty( 102 SwPaM& rPam, 103 css::beans::PropertyState& eState, 104 css::uno::Any *pAny ); 105 106 void setNumberingProperty( 107 const css::uno::Any& rValue, 108 SwPaM& rPam); 109 110 sal_Int16 IsNodeNumStart( 111 SwPaM const & rPam, 112 css::beans::PropertyState& eState); 113 114 bool DocInsertStringSplitCR( SwDoc &rDoc, 115 const SwPaM &rNewCursor, const OUString &rText, 116 const bool bForceExpandHints ); 117 /// @throws css::lang::IllegalArgumentException 118 /// @throws css::uno::RuntimeException 119 void makeRedline( SwPaM const & rPaM, const OUString& RedlineType, 120 const css::uno::Sequence< css::beans::PropertyValue >& RedlineProperties ); 121 122 /// @throws css::lang::IllegalArgumentException 123 /// @throws css::uno::RuntimeException 124 void makeTableRowRedline( SwTableLine& rTableLine, const OUString& RedlineType, 125 const css::uno::Sequence< css::beans::PropertyValue >& RedlineProperties ); 126 127 /// @throws css::lang::IllegalArgumentException 128 /// @throws css::uno::RuntimeException 129 SW_DLLPUBLIC void makeTableCellRedline( SwTableBox& rTableBox, const OUString& RedlineType, 130 const css::uno::Sequence< css::beans::PropertyValue >& RedlineProperties ); 131 132 /// @param bTableMode: attributes should be applied to a table selection 133 void SetCursorAttr(SwPaM & rPam, const SfxItemSet & rSet, 134 const SetAttrMode nAttrMode, 135 const bool bTableMode = false); 136 void GetCursorAttr(SwPaM & rPam, SfxItemSet & rSet, 137 const bool bOnlyTextAttr = false, 138 const bool bGetFromChrFormat = true); 139 void GetTextFromPam(SwPaM & rPam, OUString & rBuffer, SwRootFrame const* pLayout = nullptr); 140 SwFormatColl * GetCurTextFormatColl(SwPaM & rPam, const bool bConditional); 141 142 void SelectPam(SwPaM & rPam, const bool bExpand); 143 void SetString(SwCursor & rCursor, const OUString & rString); 144 145 css::uno::Sequence< css::beans::PropertyValue > 146 CreateSortDescriptor(const bool bFromTable); 147 bool ConvertSortProperties( 148 const css::uno::Sequence< css::beans::PropertyValue >& rDescriptor, 149 SwSortOptions & rSortOpt); 150 151 /// @throws css::beans::UnknownPropertyException 152 /// @throws css::beans::PropertyVetoException 153 /// @throws css::lang::IllegalArgumentException 154 /// @throws css::lang::WrappedTargetException 155 /// @throws css::uno::RuntimeException 156 void SetPropertyValue( 157 SwPaM& rPaM, 158 const SfxItemPropertySet & rPropSet, 159 const OUString & rPropertyName, 160 const css::uno::Any & rValue, 161 const SetAttrMode nAttrMode = SetAttrMode::DEFAULT); 162 /// @throws css::beans::UnknownPropertyException 163 /// @throws css::beans::PropertyVetoException 164 /// @throws css::lang::IllegalArgumentException 165 /// @throws css::lang::WrappedTargetException 166 /// @throws css::uno::RuntimeException 167 void SetPropertyValues( 168 SwPaM& rPaM, 169 const SfxItemPropertySet & rPropSet, 170 const css::uno::Sequence< css::beans::PropertyValue > & 171 rPropertyValues, 172 const SetAttrMode nAttrMode = SetAttrMode::DEFAULT); 173 /// @throws css::beans::UnknownPropertyException 174 /// @throws css::lang::WrappedTargetException 175 /// @throws css::uno::RuntimeException 176 css::uno::Any GetPropertyValue( 177 SwPaM& rPaM, 178 const SfxItemPropertySet & rPropSet, 179 const OUString & rPropertyName); 180 /// @throws css::beans::UnknownPropertyException 181 /// @throws css::uno::RuntimeException 182 css::uno::Sequence< css::beans::PropertyState > GetPropertyStates( 183 SwPaM & rPaM, 184 const SfxItemPropertySet & rPropSet, 185 const css::uno::Sequence< OUString >& 186 rPropertyNames, 187 const SwGetPropertyStatesCaller eCaller = 188 SW_PROPERTY_STATE_CALLER_DEFAULT); 189 /// @throws css::beans::UnknownPropertyException 190 /// @throws css::uno::RuntimeException 191 css::beans::PropertyState GetPropertyState( 192 SwPaM & rPaM, 193 const SfxItemPropertySet & rPropSet, 194 const OUString & rPropertyName); 195 /// @throws css::beans::UnknownPropertyException 196 /// @throws css::uno::RuntimeException 197 void SetPropertyToDefault( 198 SwPaM & rPaM, 199 const SfxItemPropertySet & rPropSet, 200 const OUString & rPropertyName); 201 /// @throws css::beans::UnknownPropertyException 202 /// @throws css::lang::WrappedTargetException 203 /// @throws css::uno::RuntimeException 204 css::uno::Any GetPropertyDefault( 205 SwPaM const & rPaM, 206 const SfxItemPropertySet & rPropSet, 207 const OUString & rPropertyName); 208 209 bool SetPageDesc( 210 const css::uno::Any& rValue, 211 SwDoc & rDoc, SfxItemSet & rSet); 212 /// @throws css::lang::IllegalArgumentException 213 /// @throws css::uno::RuntimeException 214 void SetTextFormatColl(const css::uno::Any & rAny, SwPaM & rPaM); 215 /// @throws css::lang::IllegalArgumentException 216 /// @throws css::uno::RuntimeException 217 /// @throws css::uno::DeploymentException 218 bool SetCursorPropertyValue( 219 SfxItemPropertySimpleEntry const& rEntry, 220 css::uno::Any const& rValue, 221 SwPaM & rPam, SfxItemSet & rItemSet); 222 223 /// try to get something that can be selected out of the XInterface 224 /// at most one of the out parameters gets assigned a non-null value 225 /// o_rpPaM is newly allocated and must be deleted; other parameters not 226 SW_DLLPUBLIC void GetSelectableFromAny( 227 css::uno::Reference<css::uno::XInterface> const& xIfc, 228 SwDoc & rTargetDoc, 229 SwPaM *& o_rpPaM, std::pair<OUString, FlyCntType> & o_rFrame, 230 OUString & o_rTableName, SwUnoTableCursor const*& o_rpTableCursor, 231 ::sw::mark::IMark const*& o_rpMark, 232 std::vector<SdrObject *> & o_rSdrObjects); 233 234 css::uno::Reference<css::text::XFlatParagraphIterator> 235 CreateFlatParagraphIterator(SwDoc &, sal_Int32, bool); 236 237 } // namespace SwUnoCursorHelper 238 239 #endif 240 241 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 242