1efeef26fSAndrew Rist /**************************************************************
2*3e9d8370Smseidel  *
3efeef26fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5efeef26fSAndrew Rist  * distributed with this work for additional information
6efeef26fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7efeef26fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist  * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*3e9d8370Smseidel  *
11efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*3e9d8370Smseidel  *
13efeef26fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist  * software distributed under the License is distributed on an
15efeef26fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist  * KIND, either express or implied.  See the License for the
17efeef26fSAndrew Rist  * specific language governing permissions and limitations
18efeef26fSAndrew Rist  * under the License.
19*3e9d8370Smseidel  *
20efeef26fSAndrew Rist  *************************************************************/
21efeef26fSAndrew Rist 
22efeef26fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <svx/svxids.hrc>
28cdf0e10cSrcweir #include <map>
29cdf0e10cSrcweir #include <com/sun/star/text/XTextSection.hpp>
30cdf0e10cSrcweir #include <cmdid.h>
31cdf0e10cSrcweir #include <unocrsrhelper.hxx>
32cdf0e10cSrcweir #include <unofootnote.hxx>
33cdf0e10cSrcweir #include <unorefmark.hxx>
34cdf0e10cSrcweir #include <unostyle.hxx>
35cdf0e10cSrcweir #include <unoidx.hxx>
36cdf0e10cSrcweir #include <unofield.hxx>
37cdf0e10cSrcweir #include <unotbl.hxx>
38cdf0e10cSrcweir #include <unosett.hxx>
39cdf0e10cSrcweir #include <unoframe.hxx>
40cdf0e10cSrcweir #include <unocrsr.hxx>
41cdf0e10cSrcweir #include <doc.hxx>
42cdf0e10cSrcweir #include <IDocumentUndoRedo.hxx>
43cdf0e10cSrcweir #include <IDocumentRedlineAccess.hxx>
44cdf0e10cSrcweir #include <fmtftn.hxx>
45cdf0e10cSrcweir #include <fmtpdsc.hxx>
46cdf0e10cSrcweir #include <charfmt.hxx>
47cdf0e10cSrcweir #include <pagedesc.hxx>
48cdf0e10cSrcweir #include <docstyle.hxx>
49cdf0e10cSrcweir #include <ndtxt.hxx>
50cdf0e10cSrcweir #include <txtrfmrk.hxx>
51cdf0e10cSrcweir #include <fmtfld.hxx>
5269a74367SOliver-Rainer Wittmann #include <txtfld.hxx>
53cdf0e10cSrcweir #include <docsh.hxx>
54cdf0e10cSrcweir #include <section.hxx>
55cdf0e10cSrcweir #include <shellio.hxx>
56cdf0e10cSrcweir #include <edimp.hxx>
57cdf0e10cSrcweir #include <swundo.hxx>
58cdf0e10cSrcweir #include <cntfrm.hxx>
59cdf0e10cSrcweir #include <pagefrm.hxx>
60cdf0e10cSrcweir #include <svl/eitem.hxx>
61cdf0e10cSrcweir #include <tools/urlobj.hxx>
62cdf0e10cSrcweir #include <docary.hxx>
63cdf0e10cSrcweir #include <swtable.hxx>
64cdf0e10cSrcweir #include <tox.hxx>
65cdf0e10cSrcweir #include <doctxm.hxx>
66cdf0e10cSrcweir #include <fchrfmt.hxx>
67cdf0e10cSrcweir #include <editeng/flstitem.hxx>
68cdf0e10cSrcweir #include <vcl/metric.hxx>
69cdf0e10cSrcweir #include <svtools/ctrltool.hxx>
70cdf0e10cSrcweir #define _SVSTDARR_USHORTS
71cdf0e10cSrcweir #define _SVSTDARR_USHORTSSORT
72cdf0e10cSrcweir #include <svl/svstdarr.hxx>
73cdf0e10cSrcweir #include <sfx2/docfilt.hxx>
74cdf0e10cSrcweir #include <sfx2/docfile.hxx>
75cdf0e10cSrcweir #include <sfx2/fcontnr.hxx>
76cdf0e10cSrcweir #include <svl/stritem.hxx>
77cdf0e10cSrcweir #include <com/sun/star/beans/PropertyState.hpp>
78cdf0e10cSrcweir #include <SwStyleNameMapper.hxx>
79cdf0e10cSrcweir #include <redline.hxx>
80cdf0e10cSrcweir #include <numrule.hxx>
81cdf0e10cSrcweir #include <comphelper/storagehelper.hxx>
82cdf0e10cSrcweir #include <comphelper/mediadescriptor.hxx>
83cdf0e10cSrcweir #include <comphelper/sequenceashashmap.hxx>
84cdf0e10cSrcweir #include <com/sun/star/embed/ElementModes.hpp>
85cdf0e10cSrcweir #include <com/sun/star/embed/XStorage.hpp>
86cdf0e10cSrcweir // --> OD 2008-11-26 #158694#
87cdf0e10cSrcweir #include <SwNodeNum.hxx>
88cdf0e10cSrcweir // <--
89cdf0e10cSrcweir #include <fmtmeta.hxx>
90cdf0e10cSrcweir 
91cdf0e10cSrcweir 
92cdf0e10cSrcweir using namespace ::com::sun::star;
93cdf0e10cSrcweir using namespace ::com::sun::star::uno;
94cdf0e10cSrcweir using namespace ::com::sun::star::beans;
95cdf0e10cSrcweir using namespace ::com::sun::star::text;
96cdf0e10cSrcweir using namespace ::com::sun::star::table;
97cdf0e10cSrcweir using namespace ::com::sun::star::container;
98cdf0e10cSrcweir using namespace ::com::sun::star::lang;
99cdf0e10cSrcweir using ::rtl::OUString;
100cdf0e10cSrcweir 
101cdf0e10cSrcweir 
102cdf0e10cSrcweir namespace SwUnoCursorHelper
103cdf0e10cSrcweir {
104cdf0e10cSrcweir 
105cdf0e10cSrcweir uno::Reference<text::XTextContent>
GetNestedTextContent(SwTxtNode & rTextNode,xub_StrLen const nIndex,bool const bParent)106cdf0e10cSrcweir GetNestedTextContent(SwTxtNode & rTextNode, xub_StrLen const nIndex,
107cdf0e10cSrcweir         bool const bParent)
108cdf0e10cSrcweir {
109cdf0e10cSrcweir     // these should be unambiguous because of the dummy character
110cdf0e10cSrcweir     SwTxtNode::GetTxtAttrMode const eMode( (bParent)
111cdf0e10cSrcweir         ? SwTxtNode::PARENT : SwTxtNode::EXPAND );
112cdf0e10cSrcweir     SwTxtAttr *const pMetaTxtAttr =
113cdf0e10cSrcweir         rTextNode.GetTxtAttrAt(nIndex, RES_TXTATR_META, eMode);
114cdf0e10cSrcweir     SwTxtAttr *const pMetaFieldTxtAttr =
115cdf0e10cSrcweir         rTextNode.GetTxtAttrAt(nIndex, RES_TXTATR_METAFIELD, eMode);
116cdf0e10cSrcweir     // which is innermost?
117cdf0e10cSrcweir     SwTxtAttr *const pTxtAttr = (pMetaTxtAttr)
118cdf0e10cSrcweir         ? ((pMetaFieldTxtAttr)
119cdf0e10cSrcweir             ? ((*pMetaFieldTxtAttr->GetStart() >
120cdf0e10cSrcweir                     *pMetaTxtAttr->GetStart())
121cdf0e10cSrcweir                 ? pMetaFieldTxtAttr : pMetaTxtAttr)
122cdf0e10cSrcweir             : pMetaTxtAttr)
123cdf0e10cSrcweir         : pMetaFieldTxtAttr;
124cdf0e10cSrcweir     uno::Reference<XTextContent> xRet;
125cdf0e10cSrcweir     if (pTxtAttr)
126cdf0e10cSrcweir     {
127cdf0e10cSrcweir         ::sw::Meta *const pMeta(
128cdf0e10cSrcweir             static_cast<SwFmtMeta &>(pTxtAttr->GetAttr()).GetMeta());
129cdf0e10cSrcweir         OSL_ASSERT(pMeta);
130cdf0e10cSrcweir         xRet.set(pMeta->MakeUnoObject(), uno::UNO_QUERY);
131cdf0e10cSrcweir     }
132cdf0e10cSrcweir     return xRet;
133cdf0e10cSrcweir }
134cdf0e10cSrcweir 
135cdf0e10cSrcweir 
136cdf0e10cSrcweir /* -----------------16.09.98 12:27-------------------
137cdf0e10cSrcweir * 	Lesen spezieller Properties am Cursor
138cdf0e10cSrcweir  * --------------------------------------------------*/
getCrsrPropertyValue(const SfxItemPropertySimpleEntry & rEntry,SwPaM & rPam,Any * pAny,PropertyState & eState,const SwTxtNode * pNode)13969a74367SOliver-Rainer Wittmann sal_Bool getCrsrPropertyValue(
14069a74367SOliver-Rainer Wittmann     const SfxItemPropertySimpleEntry& rEntry,
14169a74367SOliver-Rainer Wittmann     SwPaM& rPam,
14269a74367SOliver-Rainer Wittmann     Any *pAny,
14369a74367SOliver-Rainer Wittmann     PropertyState& eState,
14469a74367SOliver-Rainer Wittmann     const SwTxtNode* pNode )
145cdf0e10cSrcweir {
14669a74367SOliver-Rainer Wittmann     PropertyState eNewState = PropertyState_DIRECT_VALUE;
14769a74367SOliver-Rainer Wittmann     //    PropertyState_DEFAULT_VALUE
14869a74367SOliver-Rainer Wittmann     //    PropertyState_AMBIGUOUS_VALUE
14969a74367SOliver-Rainer Wittmann     sal_Bool bDone = sal_True;
150cdf0e10cSrcweir     switch(rEntry.nWID)
15169a74367SOliver-Rainer Wittmann     {
152cdf0e10cSrcweir         case FN_UNO_PARA_CONT_PREV_SUBTREE:
153cdf0e10cSrcweir             if (pAny)
154cdf0e10cSrcweir             {
155cdf0e10cSrcweir                 const SwTxtNode * pTmpNode = pNode;
156cdf0e10cSrcweir 
157cdf0e10cSrcweir                 if (!pTmpNode)
158cdf0e10cSrcweir                     pTmpNode = rPam.GetNode()->GetTxtNode();
159cdf0e10cSrcweir 
160cdf0e10cSrcweir                 bool bRet = false;
161cdf0e10cSrcweir 
162cdf0e10cSrcweir                 if ( pTmpNode &&
163cdf0e10cSrcweir                      pTmpNode->GetNum() &&
164*3e9d8370Smseidel                      pTmpNode->GetNum()->IsContinuingPreviousSubTree() )
165cdf0e10cSrcweir                 {
166cdf0e10cSrcweir                     bRet = true;
167cdf0e10cSrcweir                 }
168cdf0e10cSrcweir 
169cdf0e10cSrcweir                 *pAny <<= bRet;
170cdf0e10cSrcweir             }
171cdf0e10cSrcweir         break;
17269a74367SOliver-Rainer Wittmann 
173cdf0e10cSrcweir         case FN_UNO_PARA_NUM_STRING:
174cdf0e10cSrcweir             if (pAny)
175cdf0e10cSrcweir             {
176cdf0e10cSrcweir                 const SwTxtNode * pTmpNode = pNode;
177cdf0e10cSrcweir 
178cdf0e10cSrcweir                 if (!pTmpNode)
179cdf0e10cSrcweir                     pTmpNode = rPam.GetNode()->GetTxtNode();
180cdf0e10cSrcweir 
181cdf0e10cSrcweir                 String sRet;
182cdf0e10cSrcweir                 if ( pTmpNode && pTmpNode->GetNum() )
183cdf0e10cSrcweir                 {
184cdf0e10cSrcweir                     sRet = pTmpNode->GetNumString();
185cdf0e10cSrcweir                 }
186cdf0e10cSrcweir 
187cdf0e10cSrcweir                 *pAny <<= OUString(sRet);
188cdf0e10cSrcweir             }
189cdf0e10cSrcweir         break;
19069a74367SOliver-Rainer Wittmann 
19169a74367SOliver-Rainer Wittmann         case RES_PARATR_OUTLINELEVEL: //#outlinelevel added by zhaojianwei
192cdf0e10cSrcweir             if (pAny)
193cdf0e10cSrcweir             {
194cdf0e10cSrcweir                 const SwTxtNode * pTmpNode = pNode;
195cdf0e10cSrcweir 
196cdf0e10cSrcweir                 if (!pTmpNode)
197cdf0e10cSrcweir                     pTmpNode = rPam.GetNode()->GetTxtNode();
198cdf0e10cSrcweir 
199cdf0e10cSrcweir                 sal_Int16 nRet = -1;
200cdf0e10cSrcweir                 if ( pTmpNode )
201cdf0e10cSrcweir                     nRet = sal::static_int_cast< sal_Int16 >( pTmpNode->GetAttrOutlineLevel() );
202cdf0e10cSrcweir 
203cdf0e10cSrcweir                 *pAny <<= nRet;
204cdf0e10cSrcweir             }
205cdf0e10cSrcweir         break; //<-end,zhaojianwei
20669a74367SOliver-Rainer Wittmann 
20769a74367SOliver-Rainer Wittmann         case FN_UNO_PARA_CONDITIONAL_STYLE_NAME:
20869a74367SOliver-Rainer Wittmann         case FN_UNO_PARA_STYLE :
20969a74367SOliver-Rainer Wittmann             {
210cdf0e10cSrcweir             SwFmtColl* pFmt = 0;
211cdf0e10cSrcweir             if(pNode)
212cdf0e10cSrcweir                 pFmt = FN_UNO_PARA_CONDITIONAL_STYLE_NAME == rEntry.nWID
213cdf0e10cSrcweir                             ? pNode->GetFmtColl() : &pNode->GetAnyFmtColl();
214cdf0e10cSrcweir             else
215cdf0e10cSrcweir             {
216cdf0e10cSrcweir                 pFmt = SwUnoCursorHelper::GetCurTxtFmtColl(rPam,
217cdf0e10cSrcweir                         FN_UNO_PARA_CONDITIONAL_STYLE_NAME == rEntry.nWID);
218cdf0e10cSrcweir             }
219cdf0e10cSrcweir 			if(pFmt)
220cdf0e10cSrcweir 			{
221cdf0e10cSrcweir 				if( pAny )
222cdf0e10cSrcweir 				{
223cdf0e10cSrcweir 					String sVal;
224cdf0e10cSrcweir 					SwStyleNameMapper::FillProgName(pFmt->GetName(), sVal, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, sal_True );
225cdf0e10cSrcweir 					*pAny <<= OUString(sVal);
226cdf0e10cSrcweir 				}
227cdf0e10cSrcweir 			}
228cdf0e10cSrcweir 			else
229cdf0e10cSrcweir 				eNewState = PropertyState_AMBIGUOUS_VALUE;
230cdf0e10cSrcweir 		}
231cdf0e10cSrcweir 		break;
232cdf0e10cSrcweir 		case FN_UNO_PAGE_STYLE :
233cdf0e10cSrcweir 		{
234cdf0e10cSrcweir 			String sVal;
235cdf0e10cSrcweir 			GetCurPageStyle(rPam, sVal);
236cdf0e10cSrcweir 			if( pAny )
237cdf0e10cSrcweir 				*pAny <<= OUString(sVal);
238cdf0e10cSrcweir 			if(!sVal.Len())
239cdf0e10cSrcweir 				eNewState = PropertyState_AMBIGUOUS_VALUE;
240cdf0e10cSrcweir 		}
241cdf0e10cSrcweir 		break;
242cdf0e10cSrcweir 		case FN_UNO_NUM_START_VALUE  :
243cdf0e10cSrcweir 			if( pAny )
244cdf0e10cSrcweir 			{
245cdf0e10cSrcweir 				sal_Int16 nValue = IsNodeNumStart(rPam, eNewState);
246cdf0e10cSrcweir 				*pAny <<= nValue;
247cdf0e10cSrcweir 			}
248cdf0e10cSrcweir 		break;
24969a74367SOliver-Rainer Wittmann 
25069a74367SOliver-Rainer Wittmann         case FN_UNO_NUM_LEVEL  :
25169a74367SOliver-Rainer Wittmann         case FN_UNO_IS_NUMBER  :
252cdf0e10cSrcweir         case FN_UNO_LIST_ID:
25369a74367SOliver-Rainer Wittmann         case FN_NUMBER_NEWSTART:
25469a74367SOliver-Rainer Wittmann             {
25569a74367SOliver-Rainer Wittmann                 // a multi selection is not considered
25669a74367SOliver-Rainer Wittmann                 const SwTxtNode* pTxtNd = rPam.GetNode()->GetTxtNode();
25769a74367SOliver-Rainer Wittmann                 if ( pTxtNd && pTxtNd->IsInList() )
25869a74367SOliver-Rainer Wittmann                 {
25969a74367SOliver-Rainer Wittmann                     if( pAny )
260cdf0e10cSrcweir                     {
26169a74367SOliver-Rainer Wittmann                         if(rEntry.nWID == FN_UNO_NUM_LEVEL)
26269a74367SOliver-Rainer Wittmann                             *pAny <<= (sal_Int16)(pTxtNd->GetActualListLevel());
26369a74367SOliver-Rainer Wittmann                         else if(rEntry.nWID == FN_UNO_IS_NUMBER)
26469a74367SOliver-Rainer Wittmann                         {
26569a74367SOliver-Rainer Wittmann                             sal_Bool bIsNumber = pTxtNd->IsCountedInList();
26669a74367SOliver-Rainer Wittmann                             pAny->setValue(&bIsNumber, ::getBooleanCppuType());
26769a74367SOliver-Rainer Wittmann                         }
26869a74367SOliver-Rainer Wittmann                         else if ( rEntry.nWID == FN_UNO_LIST_ID )
26969a74367SOliver-Rainer Wittmann                         {
27069a74367SOliver-Rainer Wittmann                             const String sListId = pTxtNd->GetListId();
27169a74367SOliver-Rainer Wittmann                             *pAny <<= OUString(sListId);
27269a74367SOliver-Rainer Wittmann                         }
27369a74367SOliver-Rainer Wittmann                         else /*if(rEntry.nWID == UNO_NAME_PARA_IS_NUMBERING_RESTART)*/
27469a74367SOliver-Rainer Wittmann                         {
27569a74367SOliver-Rainer Wittmann                             sal_Bool bIsRestart = pTxtNd->IsListRestart();
27669a74367SOliver-Rainer Wittmann                             pAny->setValue(&bIsRestart, ::getBooleanCppuType());
27769a74367SOliver-Rainer Wittmann                         }
278cdf0e10cSrcweir                     }
27969a74367SOliver-Rainer Wittmann                 }
28069a74367SOliver-Rainer Wittmann                 else
28169a74367SOliver-Rainer Wittmann                 {
28269a74367SOliver-Rainer Wittmann                     eNewState = PropertyState_DEFAULT_VALUE;
283cdf0e10cSrcweir 
28469a74367SOliver-Rainer Wittmann                     if( pAny )
285cdf0e10cSrcweir                     {
28669a74367SOliver-Rainer Wittmann                         // #i30838# set default values for default properties
28769a74367SOliver-Rainer Wittmann                         if(rEntry.nWID == FN_UNO_NUM_LEVEL)
28869a74367SOliver-Rainer Wittmann                             *pAny <<= static_cast<sal_Int16>( 0 );
28969a74367SOliver-Rainer Wittmann                         else if(rEntry.nWID == FN_UNO_IS_NUMBER)
29069a74367SOliver-Rainer Wittmann                             *pAny <<= false;
29169a74367SOliver-Rainer Wittmann                         // --> OD 2008-07-14 #i91601#
29269a74367SOliver-Rainer Wittmann                         else if ( rEntry.nWID == FN_UNO_LIST_ID )
29369a74367SOliver-Rainer Wittmann                         {
29469a74367SOliver-Rainer Wittmann                             *pAny <<= OUString();
29569a74367SOliver-Rainer Wittmann                         }
29669a74367SOliver-Rainer Wittmann                         // <--
29769a74367SOliver-Rainer Wittmann                         else /*if(rEntry.nWID == UNO_NAME_PARA_IS_NUMBERING_RESTART)*/
29869a74367SOliver-Rainer Wittmann                             *pAny <<= false;
299cdf0e10cSrcweir                     }
30069a74367SOliver-Rainer Wittmann                 }
30169a74367SOliver-Rainer Wittmann                 //PROPERTY_MAYBEVOID!
30269a74367SOliver-Rainer Wittmann             }
30369a74367SOliver-Rainer Wittmann             break;
30469a74367SOliver-Rainer Wittmann 
30569a74367SOliver-Rainer Wittmann         case FN_UNO_NUM_RULES  :
30669a74367SOliver-Rainer Wittmann             if( pAny )
30769a74367SOliver-Rainer Wittmann                 getNumberingProperty(rPam, eNewState, pAny);
30869a74367SOliver-Rainer Wittmann             else
309cdf0e10cSrcweir             {
31034760e49SOliver-Rainer Wittmann                 if( !rPam.GetDoc()->GetNumRuleAtPos( *rPam.GetPoint() ) )
31169a74367SOliver-Rainer Wittmann                     eNewState = PropertyState_DEFAULT_VALUE;
31269a74367SOliver-Rainer Wittmann             }
31369a74367SOliver-Rainer Wittmann             break;
31469a74367SOliver-Rainer Wittmann 
31569a74367SOliver-Rainer Wittmann         case FN_UNO_DOCUMENT_INDEX_MARK:
31669a74367SOliver-Rainer Wittmann             {
31769a74367SOliver-Rainer Wittmann                 ::std::vector<SwTxtAttr *> const marks(
31869a74367SOliver-Rainer Wittmann                     rPam.GetNode()->GetTxtNode()->GetTxtAttrsAt(
31969a74367SOliver-Rainer Wittmann                     rPam.GetPoint()->nContent.GetIndex(), RES_TXTATR_TOXMARK));
32069a74367SOliver-Rainer Wittmann                 if (marks.size())
32169a74367SOliver-Rainer Wittmann                 {
32269a74367SOliver-Rainer Wittmann                     if( pAny )
32369a74367SOliver-Rainer Wittmann                     {   // hmm... can only return 1 here
32469a74367SOliver-Rainer Wittmann                         SwTOXMark & rMark =
32569a74367SOliver-Rainer Wittmann                             static_cast<SwTOXMark &>((*marks.begin())->GetAttr());
32669a74367SOliver-Rainer Wittmann                         const uno::Reference< text::XDocumentIndexMark > xRef =
32769a74367SOliver-Rainer Wittmann                             SwXDocumentIndexMark::CreateXDocumentIndexMark(
328cdf0e10cSrcweir                             *rPam.GetDoc(),
329cdf0e10cSrcweir                             *const_cast<SwTOXType*>(rMark.GetTOXType()), rMark);
33069a74367SOliver-Rainer Wittmann                         (*pAny) <<= xRef;
33169a74367SOliver-Rainer Wittmann                     }
33269a74367SOliver-Rainer Wittmann                 }
33369a74367SOliver-Rainer Wittmann                 else
33469a74367SOliver-Rainer Wittmann                     //auch hier - nicht zu unterscheiden
33569a74367SOliver-Rainer Wittmann                     eNewState = PropertyState_DEFAULT_VALUE;
33669a74367SOliver-Rainer Wittmann             }
33769a74367SOliver-Rainer Wittmann             break;
33869a74367SOliver-Rainer Wittmann 
33969a74367SOliver-Rainer Wittmann         case FN_UNO_DOCUMENT_INDEX:
34069a74367SOliver-Rainer Wittmann             {
34169a74367SOliver-Rainer Wittmann                 const SwTOXBase* pBase = rPam.GetDoc()->GetCurTOX(
34269a74367SOliver-Rainer Wittmann                     *rPam.Start() );
34369a74367SOliver-Rainer Wittmann                 if( pBase )
34469a74367SOliver-Rainer Wittmann                 {
34569a74367SOliver-Rainer Wittmann                     if( pAny )
34669a74367SOliver-Rainer Wittmann                     {
34769a74367SOliver-Rainer Wittmann                         const uno::Reference< text::XDocumentIndex > xRef =
34869a74367SOliver-Rainer Wittmann                             SwXDocumentIndex::CreateXDocumentIndex(*rPam.GetDoc(),
349cdf0e10cSrcweir                             *static_cast<SwTOXBaseSection const*>(pBase));
35069a74367SOliver-Rainer Wittmann                         (*pAny) <<= xRef;
35169a74367SOliver-Rainer Wittmann                     }
35269a74367SOliver-Rainer Wittmann                 }
35369a74367SOliver-Rainer Wittmann                 else
35469a74367SOliver-Rainer Wittmann                     eNewState = PropertyState_DEFAULT_VALUE;
35569a74367SOliver-Rainer Wittmann             }
35669a74367SOliver-Rainer Wittmann             break;
35769a74367SOliver-Rainer Wittmann 
35869a74367SOliver-Rainer Wittmann         case FN_UNO_TEXT_FIELD:
35969a74367SOliver-Rainer Wittmann             {
36069a74367SOliver-Rainer Wittmann                 const SwPosition *pPos = rPam.Start();
36169a74367SOliver-Rainer Wittmann                 const SwTxtNode *pTxtNd =
36269a74367SOliver-Rainer Wittmann                     rPam.GetDoc()->GetNodes()[pPos->nNode.GetIndex()]->GetTxtNode();
36369a74367SOliver-Rainer Wittmann                 const SwTxtAttr* pTxtAttr = (pTxtNd)
36469a74367SOliver-Rainer Wittmann                     ? pTxtNd->GetFldTxtAttrAt( pPos->nContent.GetIndex(), true )
36569a74367SOliver-Rainer Wittmann                     : 0;
36669a74367SOliver-Rainer Wittmann                 if ( pTxtAttr != NULL )
367cdf0e10cSrcweir                 {
36869a74367SOliver-Rainer Wittmann                     if( pAny )
36969a74367SOliver-Rainer Wittmann                     {
37069a74367SOliver-Rainer Wittmann                         SwXTextField* pField =
37169a74367SOliver-Rainer Wittmann                             SwXTextField::CreateSwXTextField( *rPam.GetDoc(),pTxtAttr->GetFmtFld() );
37269a74367SOliver-Rainer Wittmann                         *pAny <<= uno::Reference< XTextField >( pField );
37369a74367SOliver-Rainer Wittmann                     }
374cdf0e10cSrcweir                 }
37569a74367SOliver-Rainer Wittmann                 else
37669a74367SOliver-Rainer Wittmann                     eNewState = PropertyState_DEFAULT_VALUE;
377cdf0e10cSrcweir             }
37869a74367SOliver-Rainer Wittmann             break;
379cdf0e10cSrcweir 
38069a74367SOliver-Rainer Wittmann         case FN_UNO_TEXT_TABLE:
38169a74367SOliver-Rainer Wittmann         case FN_UNO_CELL:
38269a74367SOliver-Rainer Wittmann             {
38369a74367SOliver-Rainer Wittmann                 SwStartNode* pSttNode = rPam.GetNode()->StartOfSectionNode();
38469a74367SOliver-Rainer Wittmann                 SwStartNodeType eType = pSttNode->GetStartNodeType();
38569a74367SOliver-Rainer Wittmann                 if(SwTableBoxStartNode == eType)
38669a74367SOliver-Rainer Wittmann                 {
38769a74367SOliver-Rainer Wittmann                     if( pAny )
38869a74367SOliver-Rainer Wittmann                     {
38969a74367SOliver-Rainer Wittmann                         const SwTableNode* pTblNode = pSttNode->FindTableNode();
39069a74367SOliver-Rainer Wittmann                         SwFrmFmt* pTableFmt = (SwFrmFmt*)pTblNode->GetTable().GetFrmFmt();
39169a74367SOliver-Rainer Wittmann                         //SwTable& rTable = ((SwTableNode*)pSttNode)->GetTable();
39269a74367SOliver-Rainer Wittmann                         if(FN_UNO_TEXT_TABLE == rEntry.nWID)
39369a74367SOliver-Rainer Wittmann                         {
394*3e9d8370Smseidel                             uno::Reference< XTextTable > xTable = SwXTextTables::GetObject(*pTableFmt);
39569a74367SOliver-Rainer Wittmann                             pAny->setValue(&xTable, ::getCppuType((uno::Reference<XTextTable>*)0));
39669a74367SOliver-Rainer Wittmann                         }
39769a74367SOliver-Rainer Wittmann                         else
39869a74367SOliver-Rainer Wittmann                         {
39969a74367SOliver-Rainer Wittmann                             SwTableBox* pBox = pSttNode->GetTblBox();
400*3e9d8370Smseidel                             uno::Reference< XCell > xCell = SwXCell::CreateXCell(pTableFmt, pBox);
40169a74367SOliver-Rainer Wittmann                             pAny->setValue(&xCell, ::getCppuType((uno::Reference<XCell>*)0));
40269a74367SOliver-Rainer Wittmann                         }
40369a74367SOliver-Rainer Wittmann                     }
40469a74367SOliver-Rainer Wittmann                 }
40569a74367SOliver-Rainer Wittmann                 else
40669a74367SOliver-Rainer Wittmann                     eNewState = PropertyState_DEFAULT_VALUE;
40769a74367SOliver-Rainer Wittmann             }
40869a74367SOliver-Rainer Wittmann             break;
40969a74367SOliver-Rainer Wittmann 
41069a74367SOliver-Rainer Wittmann         case FN_UNO_TEXT_FRAME:
41169a74367SOliver-Rainer Wittmann             {
41269a74367SOliver-Rainer Wittmann                 SwStartNode* pSttNode = rPam.GetNode()->StartOfSectionNode();
41369a74367SOliver-Rainer Wittmann                 SwStartNodeType eType = pSttNode->GetStartNodeType();
41469a74367SOliver-Rainer Wittmann 
41569a74367SOliver-Rainer Wittmann                 SwFrmFmt* pFmt;
41669a74367SOliver-Rainer Wittmann                 if(eType == SwFlyStartNode && 0 != (pFmt = pSttNode->GetFlyFmt()))
41769a74367SOliver-Rainer Wittmann                 {
41869a74367SOliver-Rainer Wittmann                     if( pAny )
41969a74367SOliver-Rainer Wittmann                     {
420*3e9d8370Smseidel                         uno::Reference< XTextFrame > xFrm = (SwXTextFrame*) SwXFrames::GetObject(*pFmt, FLYCNTTYPE_FRM);
42169a74367SOliver-Rainer Wittmann                         pAny->setValue(&xFrm, ::getCppuType((uno::Reference<XTextFrame>*)0));
42269a74367SOliver-Rainer Wittmann                     }
42369a74367SOliver-Rainer Wittmann                 }
42469a74367SOliver-Rainer Wittmann                 else
42569a74367SOliver-Rainer Wittmann                     eNewState = PropertyState_DEFAULT_VALUE;
42669a74367SOliver-Rainer Wittmann             }
42769a74367SOliver-Rainer Wittmann             break;
42869a74367SOliver-Rainer Wittmann 
42969a74367SOliver-Rainer Wittmann         case FN_UNO_TEXT_SECTION:
43069a74367SOliver-Rainer Wittmann             {
43169a74367SOliver-Rainer Wittmann                 SwSection* pSect = rPam.GetDoc()->GetCurrSection(*rPam.GetPoint());
43269a74367SOliver-Rainer Wittmann                 if(pSect)
43369a74367SOliver-Rainer Wittmann                 {
43469a74367SOliver-Rainer Wittmann                     if( pAny )
43569a74367SOliver-Rainer Wittmann                     {
436*3e9d8370Smseidel                         uno::Reference< XTextSection > xSect = SwXTextSections::GetObject( *pSect->GetFmt() );
43769a74367SOliver-Rainer Wittmann                         pAny->setValue(&xSect, ::getCppuType((uno::Reference<XTextSection>*)0) );
43869a74367SOliver-Rainer Wittmann                     }
43969a74367SOliver-Rainer Wittmann                 }
44069a74367SOliver-Rainer Wittmann                 else
44169a74367SOliver-Rainer Wittmann                     eNewState = PropertyState_DEFAULT_VALUE;
44269a74367SOliver-Rainer Wittmann             }
44369a74367SOliver-Rainer Wittmann             break;
44469a74367SOliver-Rainer Wittmann 
44569a74367SOliver-Rainer Wittmann         case FN_UNO_ENDNOTE:
44669a74367SOliver-Rainer Wittmann         case FN_UNO_FOOTNOTE:
44769a74367SOliver-Rainer Wittmann             {
44869a74367SOliver-Rainer Wittmann                 SwTxtAttr *const pTxtAttr =
44969a74367SOliver-Rainer Wittmann                     rPam.GetNode()->GetTxtNode()->GetTxtAttrForCharAt(
450cdf0e10cSrcweir                     rPam.GetPoint()->nContent.GetIndex(), RES_TXTATR_FTN);
45169a74367SOliver-Rainer Wittmann                 if(pTxtAttr)
45269a74367SOliver-Rainer Wittmann                 {
45369a74367SOliver-Rainer Wittmann                     const SwFmtFtn& rFtn = pTxtAttr->GetFtn();
45469a74367SOliver-Rainer Wittmann                     if(rFtn.IsEndNote() == (FN_UNO_ENDNOTE == rEntry.nWID))
45569a74367SOliver-Rainer Wittmann                     {
45669a74367SOliver-Rainer Wittmann                         if( pAny )
45769a74367SOliver-Rainer Wittmann                         {
45869a74367SOliver-Rainer Wittmann                             const uno::Reference< text::XFootnote > xFootnote =
45969a74367SOliver-Rainer Wittmann                                 SwXFootnote::CreateXFootnote(*rPam.GetDoc(), rFtn);
46069a74367SOliver-Rainer Wittmann                             *pAny <<= xFootnote;
46169a74367SOliver-Rainer Wittmann                         }
46269a74367SOliver-Rainer Wittmann                     }
46369a74367SOliver-Rainer Wittmann                     else
46469a74367SOliver-Rainer Wittmann                         eNewState = PropertyState_DEFAULT_VALUE;
46569a74367SOliver-Rainer Wittmann                 }
46669a74367SOliver-Rainer Wittmann                 else
46769a74367SOliver-Rainer Wittmann                     eNewState = PropertyState_DEFAULT_VALUE;
46869a74367SOliver-Rainer Wittmann             }
46969a74367SOliver-Rainer Wittmann             break;
47069a74367SOliver-Rainer Wittmann 
47169a74367SOliver-Rainer Wittmann         case FN_UNO_REFERENCE_MARK:
472cdf0e10cSrcweir             {
47369a74367SOliver-Rainer Wittmann                 ::std::vector<SwTxtAttr *> const marks(
47469a74367SOliver-Rainer Wittmann                     rPam.GetNode()->GetTxtNode()->GetTxtAttrsAt(
47569a74367SOliver-Rainer Wittmann                     rPam.GetPoint()->nContent.GetIndex(), RES_TXTATR_REFMARK));
47669a74367SOliver-Rainer Wittmann                 if (marks.size())
47769a74367SOliver-Rainer Wittmann                 {
47869a74367SOliver-Rainer Wittmann                     if( pAny )
47969a74367SOliver-Rainer Wittmann                     {   // hmm... can only return 1 here
48069a74367SOliver-Rainer Wittmann                         const SwFmtRefMark& rRef = (*marks.begin())->GetRefMark();
481*3e9d8370Smseidel                         uno::Reference< XTextContent > xRef = SwXReferenceMarks::GetObject( rPam.GetDoc(), &rRef );
48269a74367SOliver-Rainer Wittmann                         pAny->setValue(&xRef, ::getCppuType((uno::Reference<XTextContent>*)0));
48369a74367SOliver-Rainer Wittmann                     }
48469a74367SOliver-Rainer Wittmann                 }
48569a74367SOliver-Rainer Wittmann                 else
48669a74367SOliver-Rainer Wittmann                     eNewState = PropertyState_DEFAULT_VALUE;
48769a74367SOliver-Rainer Wittmann             }
48869a74367SOliver-Rainer Wittmann             break;
48969a74367SOliver-Rainer Wittmann 
490cdf0e10cSrcweir         case FN_UNO_NESTED_TEXT_CONTENT:
491cdf0e10cSrcweir         {
492cdf0e10cSrcweir             uno::Reference<XTextContent> const xRet(
493cdf0e10cSrcweir                 GetNestedTextContent(*rPam.GetNode()->GetTxtNode(),
494cdf0e10cSrcweir                     rPam.GetPoint()->nContent.GetIndex(), false));
495cdf0e10cSrcweir             if (xRet.is())
496cdf0e10cSrcweir             {
497cdf0e10cSrcweir                 if (pAny)
498cdf0e10cSrcweir                 {
499cdf0e10cSrcweir                     (*pAny) <<= xRet;
500cdf0e10cSrcweir                 }
501cdf0e10cSrcweir             }
502cdf0e10cSrcweir             else
503cdf0e10cSrcweir             {
504cdf0e10cSrcweir                 eNewState = PropertyState_DEFAULT_VALUE;
505cdf0e10cSrcweir             }
506cdf0e10cSrcweir         }
507cdf0e10cSrcweir         break;
50869a74367SOliver-Rainer Wittmann 
509cdf0e10cSrcweir         case FN_UNO_CHARFMT_SEQUENCE:
510cdf0e10cSrcweir         {
511cdf0e10cSrcweir 
512cdf0e10cSrcweir             SwTxtNode* pTxtNode;
513cdf0e10cSrcweir             if((pTxtNode = (SwTxtNode*)rPam.GetNode( sal_True )) == rPam.GetNode(sal_False) &&
514cdf0e10cSrcweir                     pTxtNode->GetpSwpHints())
515cdf0e10cSrcweir             {
516cdf0e10cSrcweir                 sal_uInt16 nPaMStart = rPam.GetPoint()->nContent.GetIndex();
517cdf0e10cSrcweir                 sal_uInt16 nPaMEnd = rPam.GetMark() ? rPam.GetMark()->nContent.GetIndex() : nPaMStart;
518cdf0e10cSrcweir                 if(nPaMStart > nPaMEnd)
519cdf0e10cSrcweir                 {
520cdf0e10cSrcweir                     sal_uInt16 nTmp = nPaMStart;
521cdf0e10cSrcweir                     nPaMStart = nPaMEnd;
522cdf0e10cSrcweir                     nPaMEnd = nTmp;
523cdf0e10cSrcweir                 }
524cdf0e10cSrcweir                 Sequence< ::rtl::OUString> aCharStyles;
525cdf0e10cSrcweir                 SwpHints* pHints = pTxtNode->GetpSwpHints();
526cdf0e10cSrcweir                 for(sal_uInt16 nAttr = 0; nAttr < pHints->GetStartCount(); nAttr++ )
527cdf0e10cSrcweir                 {
528cdf0e10cSrcweir                     SwTxtAttr* pAttr = pHints->GetStart( nAttr );
529cdf0e10cSrcweir                     if(pAttr->Which() != RES_TXTATR_CHARFMT)
530cdf0e10cSrcweir                         continue;
531cdf0e10cSrcweir                     sal_uInt16 nAttrStart = *pAttr->GetStart();
532cdf0e10cSrcweir                     sal_uInt16 nAttrEnd = *pAttr->GetEnd();
533cdf0e10cSrcweir                     //check if the attribute touches the selection
534cdf0e10cSrcweir                     if( ( nAttrEnd > nPaMStart && nAttrStart < nPaMEnd ) ||
535cdf0e10cSrcweir                         ( !nAttrStart && !nAttrEnd && !nPaMStart && !nPaMEnd ) )
536cdf0e10cSrcweir                     {
537cdf0e10cSrcweir                         //check for overlapping
538cdf0e10cSrcweir                         if(nAttrStart > nPaMStart ||
539cdf0e10cSrcweir                                     nAttrEnd < nPaMEnd)
540cdf0e10cSrcweir                         {
541cdf0e10cSrcweir                             aCharStyles.realloc(0);
542cdf0e10cSrcweir                             eNewState = PropertyState_AMBIGUOUS_VALUE;
543cdf0e10cSrcweir                             break;
544cdf0e10cSrcweir                         }
545cdf0e10cSrcweir                         else
546cdf0e10cSrcweir                         {
547cdf0e10cSrcweir                             //now the attribute should start before or at the selection
548cdf0e10cSrcweir                             //and it should end at the end of the selection or behind
549cdf0e10cSrcweir                             DBG_ASSERT(nAttrStart <= nPaMStart && nAttrEnd >=nPaMEnd,
550cdf0e10cSrcweir                                     "attribute overlaps or is outside");
551cdf0e10cSrcweir                             //now the name of the style has to be added to the sequence
552cdf0e10cSrcweir                             aCharStyles.realloc(aCharStyles.getLength() + 1);
553cdf0e10cSrcweir                             DBG_ASSERT(pAttr->GetCharFmt().GetCharFmt(), "no character format set");
554cdf0e10cSrcweir                             aCharStyles.getArray()[aCharStyles.getLength() - 1] =
555cdf0e10cSrcweir                                         SwStyleNameMapper::GetProgName(
556cdf0e10cSrcweir                                             pAttr->GetCharFmt().GetCharFmt()->GetName(), nsSwGetPoolIdFromName::GET_POOLID_CHRFMT);
557cdf0e10cSrcweir                         }
558cdf0e10cSrcweir                     }
559cdf0e10cSrcweir 
560cdf0e10cSrcweir                 }
561cdf0e10cSrcweir                 eNewState =
562cdf0e10cSrcweir                     aCharStyles.getLength() ?
563cdf0e10cSrcweir                         PropertyState_DIRECT_VALUE : PropertyState_DEFAULT_VALUE;;
564cdf0e10cSrcweir                 if(pAny)
565cdf0e10cSrcweir                     (*pAny) <<= aCharStyles;
566cdf0e10cSrcweir             }
567cdf0e10cSrcweir             else
568cdf0e10cSrcweir                 eNewState = PropertyState_DEFAULT_VALUE;
569cdf0e10cSrcweir         }
570cdf0e10cSrcweir         break;
57169a74367SOliver-Rainer Wittmann 
57269a74367SOliver-Rainer Wittmann         case RES_TXTATR_CHARFMT:
57369a74367SOliver-Rainer Wittmann             // kein break hier!
57469a74367SOliver-Rainer Wittmann         default: bDone = sal_False;
57569a74367SOliver-Rainer Wittmann     }
57669a74367SOliver-Rainer Wittmann     if( bDone )
57769a74367SOliver-Rainer Wittmann         eState = eNewState;
57869a74367SOliver-Rainer Wittmann     return bDone;
579cdf0e10cSrcweir };
580cdf0e10cSrcweir /* -----------------30.06.98 10:30-------------------
581cdf0e10cSrcweir  *
582cdf0e10cSrcweir  * --------------------------------------------------*/
IsNodeNumStart(SwPaM & rPam,PropertyState & eState)583cdf0e10cSrcweir sal_Int16 IsNodeNumStart(SwPaM& rPam, PropertyState& eState)
584cdf0e10cSrcweir {
585cdf0e10cSrcweir 	const SwTxtNode* pTxtNd = rPam.GetNode()->GetTxtNode();
586cdf0e10cSrcweir     // --> OD 2008-02-28 #refactorlists#
587cdf0e10cSrcweir     // correction: check, if restart value is set at the text node and use
588cdf0e10cSrcweir     // new method <SwTxtNode::GetAttrListRestartValue()> to retrieve the value
589cdf0e10cSrcweir     if ( pTxtNd && pTxtNd->GetNumRule() && pTxtNd->IsListRestart() &&
590cdf0e10cSrcweir          pTxtNd->HasAttrListRestartValue() )
591cdf0e10cSrcweir 	{
592cdf0e10cSrcweir 		eState = PropertyState_DIRECT_VALUE;
593cdf0e10cSrcweir         sal_Int16 nTmp = sal::static_int_cast< sal_Int16 >(pTxtNd->GetAttrListRestartValue());
594cdf0e10cSrcweir         return nTmp;
595cdf0e10cSrcweir 	}
596cdf0e10cSrcweir     // <--
597cdf0e10cSrcweir 	eState = PropertyState_DEFAULT_VALUE;
598cdf0e10cSrcweir 	return -1;
599cdf0e10cSrcweir }
600cdf0e10cSrcweir 
601cdf0e10cSrcweir /* -----------------25.05.98 11:41-------------------
602cdf0e10cSrcweir  *
603cdf0e10cSrcweir  * --------------------------------------------------*/
setNumberingProperty(const Any & rValue,SwPaM & rPam)604cdf0e10cSrcweir void setNumberingProperty(const Any& rValue, SwPaM& rPam)
605cdf0e10cSrcweir {
606cdf0e10cSrcweir     uno::Reference<XIndexReplace> xIndexReplace;
607cdf0e10cSrcweir     if(rValue >>= xIndexReplace)
608cdf0e10cSrcweir 	{
609cdf0e10cSrcweir 		SwXNumberingRules* pSwNum = 0;
610cdf0e10cSrcweir 
611cdf0e10cSrcweir         uno::Reference<XUnoTunnel> xNumTunnel(xIndexReplace, UNO_QUERY);
612cdf0e10cSrcweir 		if(xNumTunnel.is())
613cdf0e10cSrcweir 		{
614cdf0e10cSrcweir 			pSwNum = reinterpret_cast< SwXNumberingRules * >(
615cdf0e10cSrcweir 				sal::static_int_cast< sal_IntPtr >( xNumTunnel->getSomething( SwXNumberingRules::getUnoTunnelId() )));
616cdf0e10cSrcweir 		}
617cdf0e10cSrcweir 
618cdf0e10cSrcweir 		if(pSwNum)
619cdf0e10cSrcweir 		{
620cdf0e10cSrcweir             SwDoc* pDoc = rPam.GetDoc();
621cdf0e10cSrcweir 			if(pSwNum->GetNumRule())
622cdf0e10cSrcweir 			{
623cdf0e10cSrcweir 				SwNumRule aRule(*pSwNum->GetNumRule());
624*3e9d8370Smseidel 				const String* pNewCharStyles = pSwNum->GetNewCharStyleNames();
625cdf0e10cSrcweir 				const String* pBulletFontNames = pSwNum->GetBulletFontNames();
626cdf0e10cSrcweir 				for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
627cdf0e10cSrcweir 				{
628cdf0e10cSrcweir 					SwNumFmt aFmt(aRule.Get( i ));
629cdf0e10cSrcweir 					if( pNewCharStyles[i].Len() &&
630cdf0e10cSrcweir 						pNewCharStyles[i] != SwXNumberingRules::GetInvalidStyle() &&
631cdf0e10cSrcweir 						(!aFmt.GetCharFmt() || pNewCharStyles[i] != aFmt.GetCharFmt()->GetName()))
632cdf0e10cSrcweir 					{
633cdf0e10cSrcweir 						if(!pNewCharStyles[i].Len())
634cdf0e10cSrcweir 							aFmt.SetCharFmt(0);
635cdf0e10cSrcweir 						else
636cdf0e10cSrcweir 						{
637cdf0e10cSrcweir 
638cdf0e10cSrcweir                             // CharStyle besorgen und an der Rule setzen
639cdf0e10cSrcweir 							sal_uInt16 nChCount = pDoc->GetCharFmts()->Count();
640cdf0e10cSrcweir 							SwCharFmt* pCharFmt = 0;
641cdf0e10cSrcweir                             for(sal_uInt16 nCharFmt = 0; nCharFmt < nChCount; nCharFmt++)
642cdf0e10cSrcweir 							{
643cdf0e10cSrcweir                                 SwCharFmt& rChFmt = *((*(pDoc->GetCharFmts()))[nCharFmt]);;
644cdf0e10cSrcweir 								if(rChFmt.GetName() == pNewCharStyles[i])
645cdf0e10cSrcweir 								{
646cdf0e10cSrcweir 									pCharFmt = &rChFmt;
647cdf0e10cSrcweir 									break;
648cdf0e10cSrcweir 								}
649cdf0e10cSrcweir 							}
650cdf0e10cSrcweir 
651cdf0e10cSrcweir 							if(!pCharFmt)
652cdf0e10cSrcweir 							{
653cdf0e10cSrcweir 								SfxStyleSheetBasePool* pPool = pDoc->GetDocShell()->GetStyleSheetPool();
654cdf0e10cSrcweir 								SfxStyleSheetBase* pBase;
655cdf0e10cSrcweir 								pBase = pPool->Find(pNewCharStyles[i], SFX_STYLE_FAMILY_CHAR);
656cdf0e10cSrcweir 							// soll das wirklich erzeugt werden?
657cdf0e10cSrcweir 								if(!pBase)
658cdf0e10cSrcweir 									pBase = &pPool->Make(pNewCharStyles[i], SFX_STYLE_FAMILY_PAGE);
659cdf0e10cSrcweir 								pCharFmt = ((SwDocStyleSheet*)pBase)->GetCharFmt();
660cdf0e10cSrcweir 							}
661cdf0e10cSrcweir 							if(pCharFmt)
662cdf0e10cSrcweir 								aFmt.SetCharFmt(pCharFmt);
663cdf0e10cSrcweir 						}
664cdf0e10cSrcweir 					}
665cdf0e10cSrcweir 					//jetzt nochmal fuer Fonts
666cdf0e10cSrcweir 					if(
667cdf0e10cSrcweir 					   pBulletFontNames[i] != SwXNumberingRules::GetInvalidStyle() &&
668cdf0e10cSrcweir 					   (
669cdf0e10cSrcweir 					    (pBulletFontNames[i].Len() && !aFmt.GetBulletFont()) ||
670cdf0e10cSrcweir 					    (pBulletFontNames[i].Len() &&
671cdf0e10cSrcweir 							aFmt.GetBulletFont()->GetName() != pBulletFontNames[i])
672cdf0e10cSrcweir 					   )
673cdf0e10cSrcweir 					  )
674cdf0e10cSrcweir 					{
675cdf0e10cSrcweir 						const SvxFontListItem* pFontListItem =
676cdf0e10cSrcweir 								(const SvxFontListItem* )pDoc->GetDocShell()
677cdf0e10cSrcweir 													->GetItem( SID_ATTR_CHAR_FONTLIST );
678cdf0e10cSrcweir 						const FontList*	 pList = pFontListItem->GetFontList();
679cdf0e10cSrcweir 
680cdf0e10cSrcweir 						FontInfo aInfo = pList->Get(
681cdf0e10cSrcweir 							pBulletFontNames[i],WEIGHT_NORMAL, ITALIC_NONE);
682cdf0e10cSrcweir 						Font aFont(aInfo);
683cdf0e10cSrcweir 						aFmt.SetBulletFont(&aFont);
684cdf0e10cSrcweir 					}
685cdf0e10cSrcweir 					aRule.Set( i, aFmt );
686cdf0e10cSrcweir 				}
687cdf0e10cSrcweir                 UnoActionContext aAction(pDoc);
688cdf0e10cSrcweir 
689*3e9d8370Smseidel                 if ( rPam.GetNext() != &rPam ) // Mehrfachselektion ?
69034760e49SOliver-Rainer Wittmann                 {
691cdf0e10cSrcweir                     pDoc->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL );
69234760e49SOliver-Rainer Wittmann                     SwPamRanges aRangeArr( rPam );
69334760e49SOliver-Rainer Wittmann                     SwPaM aPam( *rPam.GetPoint() );
69434760e49SOliver-Rainer Wittmann                     for ( sal_uInt16 n = 0; n < aRangeArr.Count(); ++n )
695cdf0e10cSrcweir                     {
696cdf0e10cSrcweir                         pDoc->SetNumRule( aRangeArr.SetPam( n, aPam ), aRule, false );
697cdf0e10cSrcweir                     }
698cdf0e10cSrcweir                     pDoc->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL );
699cdf0e10cSrcweir                 }
700cdf0e10cSrcweir                 else
701cdf0e10cSrcweir                 {
702cdf0e10cSrcweir                     pDoc->SetNumRule( rPam, aRule, false );
703cdf0e10cSrcweir                 }
70434760e49SOliver-Rainer Wittmann             }
70534760e49SOliver-Rainer Wittmann             else if ( pSwNum->GetCreatedNumRuleName().Len() )
70634760e49SOliver-Rainer Wittmann             {
70734760e49SOliver-Rainer Wittmann                 UnoActionContext aAction( pDoc );
70834760e49SOliver-Rainer Wittmann                 SwNumRule* pRule = pDoc->FindNumRulePtr( pSwNum->GetCreatedNumRuleName() );
70934760e49SOliver-Rainer Wittmann                 if ( !pRule )
71034760e49SOliver-Rainer Wittmann                     throw RuntimeException();
711cdf0e10cSrcweir                 pDoc->SetNumRule( rPam, *pRule, false );
71234760e49SOliver-Rainer Wittmann             }
713cdf0e10cSrcweir             else
714cdf0e10cSrcweir             {
71534760e49SOliver-Rainer Wittmann                 // outline numbering
716cdf0e10cSrcweir                 UnoActionContext aAction(pDoc);
717cdf0e10cSrcweir                 SwNumRule* pRule = pDoc->GetOutlineNumRule();
718cdf0e10cSrcweir                 if(!pRule)
719cdf0e10cSrcweir                     throw RuntimeException();
720cdf0e10cSrcweir                 pDoc->SetNumRule( rPam, *pRule, false );
721cdf0e10cSrcweir             }
72234760e49SOliver-Rainer Wittmann         }
72334760e49SOliver-Rainer Wittmann     }
72434760e49SOliver-Rainer Wittmann     else if ( rValue.getValueType() == ::getVoidCppuType() )
725cdf0e10cSrcweir     {
726cdf0e10cSrcweir         rPam.GetDoc()->DelNumRules(rPam);
727cdf0e10cSrcweir     }
728cdf0e10cSrcweir }
729cdf0e10cSrcweir 
730cdf0e10cSrcweir 
731cdf0e10cSrcweir /* -----------------25.05.98 11:40-------------------
732cdf0e10cSrcweir  *
733cdf0e10cSrcweir  * --------------------------------------------------*/
getNumberingProperty(SwPaM & rPam,PropertyState & eState,Any * pAny)734*3e9d8370Smseidel void getNumberingProperty(SwPaM& rPam, PropertyState& eState, Any * pAny )
735cdf0e10cSrcweir {
73634760e49SOliver-Rainer Wittmann 	const SwNumRule* pNumRule = rPam.GetDoc()->GetNumRuleAtPos( *rPam.GetPoint() );
737cdf0e10cSrcweir 	if(pNumRule)
738cdf0e10cSrcweir 	{
739*3e9d8370Smseidel 		uno::Reference< XIndexReplace > xNum = new SwXNumberingRules(*pNumRule);
740cdf0e10cSrcweir 		if ( pAny )
741cdf0e10cSrcweir 			pAny->setValue(&xNum, ::getCppuType((const uno::Reference<XIndexReplace>*)0));
742cdf0e10cSrcweir 		eState = PropertyState_DIRECT_VALUE;
743cdf0e10cSrcweir 	}
744cdf0e10cSrcweir 	else
745cdf0e10cSrcweir 		eState = PropertyState_DEFAULT_VALUE;
746cdf0e10cSrcweir }
747cdf0e10cSrcweir /* -----------------04.07.98 15:15-------------------
748cdf0e10cSrcweir  *
749cdf0e10cSrcweir  * --------------------------------------------------*/
GetCurPageStyle(SwPaM & rPaM,String & rString)750cdf0e10cSrcweir void GetCurPageStyle(SwPaM& rPaM, String &rString)
751cdf0e10cSrcweir {
752cdf0e10cSrcweir 	const SwPageFrm* pPage = rPaM.GetCntntNode()->getLayoutFrm(rPaM.GetDoc()->GetCurrentLayout())->FindPageFrm();
753cdf0e10cSrcweir 	if(pPage)
754cdf0e10cSrcweir 		SwStyleNameMapper::FillProgName( pPage->GetPageDesc()->GetName(), rString, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, sal_True );
755cdf0e10cSrcweir }
756cdf0e10cSrcweir /* -----------------30.03.99 10:52-------------------
757cdf0e10cSrcweir  * spezielle Properties am Cursor zuruecksetzen
758cdf0e10cSrcweir  * --------------------------------------------------*/
resetCrsrPropertyValue(const SfxItemPropertySimpleEntry & rEntry,SwPaM & rPam)759cdf0e10cSrcweir void resetCrsrPropertyValue(const SfxItemPropertySimpleEntry& rEntry, SwPaM& rPam)
760cdf0e10cSrcweir {
761cdf0e10cSrcweir 	SwDoc* pDoc = rPam.GetDoc();
762*3e9d8370Smseidel 	switch(rEntry.nWID)
763cdf0e10cSrcweir 	{
764cdf0e10cSrcweir 		case FN_UNO_PARA_STYLE :
765cdf0e10cSrcweir //			lcl_SetTxtFmtColl(aValue, pUnoCrsr);
766cdf0e10cSrcweir 		break;
767cdf0e10cSrcweir 		case FN_UNO_PAGE_STYLE :
768cdf0e10cSrcweir 		break;
769cdf0e10cSrcweir 		case FN_UNO_NUM_START_VALUE  :
770cdf0e10cSrcweir 		{
771cdf0e10cSrcweir 			UnoActionContext aAction(pDoc);
772cdf0e10cSrcweir 
773cdf0e10cSrcweir 			if( rPam.GetNext() != &rPam )			// Mehrfachselektion ?
774cdf0e10cSrcweir             {
775cdf0e10cSrcweir                 pDoc->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL );
776cdf0e10cSrcweir 				SwPamRanges aRangeArr( rPam );
777cdf0e10cSrcweir 				SwPaM aPam( *rPam.GetPoint() );
778cdf0e10cSrcweir 				for( sal_uInt16 n = 0; n < aRangeArr.Count(); ++n )
779cdf0e10cSrcweir 					pDoc->SetNodeNumStart( *aRangeArr.SetPam( n, aPam ).GetPoint(), 1 );
780cdf0e10cSrcweir                 pDoc->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL );
781cdf0e10cSrcweir             }
782cdf0e10cSrcweir             else
783cdf0e10cSrcweir 				pDoc->SetNodeNumStart( *rPam.GetPoint(), 0 );
784cdf0e10cSrcweir 		}
785cdf0e10cSrcweir 
786cdf0e10cSrcweir 		break;
787cdf0e10cSrcweir 		case FN_UNO_NUM_LEVEL  :
788cdf0e10cSrcweir 		break;
789cdf0e10cSrcweir 		case FN_UNO_NUM_RULES:
790cdf0e10cSrcweir //    		lcl_setNumberingProperty(aValue, pUnoCrsr);
791cdf0e10cSrcweir 		break;
792cdf0e10cSrcweir         case FN_UNO_CHARFMT_SEQUENCE:
793cdf0e10cSrcweir         {
794cdf0e10cSrcweir             SvUShortsSort aWhichIds;
795cdf0e10cSrcweir             aWhichIds.Insert(RES_TXTATR_CHARFMT);
796cdf0e10cSrcweir             pDoc->ResetAttrs(rPam, sal_True, &aWhichIds);
797cdf0e10cSrcweir         }
798cdf0e10cSrcweir         break;
799cdf0e10cSrcweir     }
800cdf0e10cSrcweir }
801cdf0e10cSrcweir /* -----------------21.07.98 11:36-------------------
802cdf0e10cSrcweir  *
803cdf0e10cSrcweir  * --------------------------------------------------*/
InsertFile(SwUnoCrsr * pUnoCrsr,const String & rURL,const uno::Sequence<beans::PropertyValue> & rOptions)804cdf0e10cSrcweir void InsertFile(SwUnoCrsr* pUnoCrsr,
805cdf0e10cSrcweir     const String& rURL,
806cdf0e10cSrcweir     const uno::Sequence< beans::PropertyValue >& rOptions
807cdf0e10cSrcweir     ) throw( lang::IllegalArgumentException, io::IOException, uno::RuntimeException )
808cdf0e10cSrcweir {
809cdf0e10cSrcweir 	SfxMedium* pMed = 0;
810cdf0e10cSrcweir 	SwDoc* pDoc = pUnoCrsr->GetDoc();
811cdf0e10cSrcweir 	SwDocShell* pDocSh = pDoc->GetDocShell();
812cdf0e10cSrcweir     comphelper::MediaDescriptor aMediaDescriptor( rOptions );
813cdf0e10cSrcweir     ::rtl::OUString sFileName = rURL;
814cdf0e10cSrcweir     ::rtl::OUString sFilterName, sFilterOptions, sPassword, sBaseURL;
815cdf0e10cSrcweir     uno::Reference < io::XStream > xStream;
816cdf0e10cSrcweir     uno::Reference < io::XInputStream > xInputStream;
817cdf0e10cSrcweir 
818cdf0e10cSrcweir     if( !sFileName.getLength() )
819cdf0e10cSrcweir         aMediaDescriptor[comphelper::MediaDescriptor::PROP_URL()] >>= sFileName;
820cdf0e10cSrcweir     if( !sFileName.getLength() )
821cdf0e10cSrcweir         aMediaDescriptor[comphelper::MediaDescriptor::PROP_FILENAME()] >>= sFileName;
822cdf0e10cSrcweir     aMediaDescriptor[comphelper::MediaDescriptor::PROP_INPUTSTREAM()] >>= xInputStream;
823cdf0e10cSrcweir     aMediaDescriptor[comphelper::MediaDescriptor::PROP_STREAM()] >>= xStream;
824cdf0e10cSrcweir     aMediaDescriptor[comphelper::MediaDescriptor::PROP_INPUTSTREAM()] >>= xInputStream;
825cdf0e10cSrcweir     aMediaDescriptor[comphelper::MediaDescriptor::PROP_FILTERNAME()] >>= sFilterName;
826cdf0e10cSrcweir     aMediaDescriptor[comphelper::MediaDescriptor::PROP_FILTEROPTIONS()] >>= sFilterOptions;
827cdf0e10cSrcweir     aMediaDescriptor[comphelper::MediaDescriptor::PROP_PASSWORD()] >>= sPassword;
828cdf0e10cSrcweir     aMediaDescriptor[comphelper::MediaDescriptor::PROP_DOCUMENTBASEURL() ] >>= sBaseURL;
829cdf0e10cSrcweir     if ( !xInputStream.is() && xStream.is() )
830cdf0e10cSrcweir         xInputStream = xStream->getInputStream();
831cdf0e10cSrcweir 
832cdf0e10cSrcweir     if(!pDocSh || (!sFileName.getLength() && !xInputStream.is()))
833cdf0e10cSrcweir 		return;
834cdf0e10cSrcweir 
835cdf0e10cSrcweir     SfxObjectFactory& rFact = pDocSh->GetFactory();
836cdf0e10cSrcweir     const SfxFilter* pFilter = rFact.GetFilterContainer()->GetFilter4FilterName( sFilterName );
837cdf0e10cSrcweir     uno::Reference < embed::XStorage > xReadStorage;
838cdf0e10cSrcweir     if( xInputStream.is() )
839cdf0e10cSrcweir     {
840cdf0e10cSrcweir         uno::Sequence< uno::Any > aArgs( 2 );
841cdf0e10cSrcweir         aArgs[0] <<= xInputStream;
842cdf0e10cSrcweir         aArgs[1] <<= embed::ElementModes::READ;
843cdf0e10cSrcweir         try
844cdf0e10cSrcweir         {
845cdf0e10cSrcweir             xReadStorage = uno::Reference< embed::XStorage >(
846cdf0e10cSrcweir                             ::comphelper::OStorageHelper::GetStorageFactory()->createInstanceWithArguments( aArgs ),
847cdf0e10cSrcweir                             uno::UNO_QUERY );
848cdf0e10cSrcweir         }
849cdf0e10cSrcweir         catch( const io::IOException& rEx)
850cdf0e10cSrcweir         {
851cdf0e10cSrcweir             (void)rEx;
852cdf0e10cSrcweir         }
853cdf0e10cSrcweir     }
854cdf0e10cSrcweir     if ( !pFilter )
855cdf0e10cSrcweir 	{
856cdf0e10cSrcweir         if( xInputStream.is() && !xReadStorage.is())
857cdf0e10cSrcweir         {
858cdf0e10cSrcweir             pMed = new SfxMedium;
859cdf0e10cSrcweir             pMed->setStreamToLoadFrom(xInputStream, sal_True );
860cdf0e10cSrcweir         }
861cdf0e10cSrcweir         else
862cdf0e10cSrcweir             pMed = xReadStorage.is() ?
863cdf0e10cSrcweir                 new SfxMedium(xReadStorage, sBaseURL, 0 ) :
864cdf0e10cSrcweir                 new SfxMedium(sFileName, STREAM_READ, sal_True, 0, 0 );
865cdf0e10cSrcweir         if( sBaseURL.getLength() )
866cdf0e10cSrcweir             pMed->GetItemSet()->Put( SfxStringItem( SID_DOC_BASEURL, sBaseURL ) );
867cdf0e10cSrcweir 
868cdf0e10cSrcweir 		SfxFilterMatcher aMatcher( rFact.GetFilterContainer()->GetName() );
869cdf0e10cSrcweir 		ErrCode nErr = aMatcher.GuessFilter( *pMed, &pFilter, sal_False );
870cdf0e10cSrcweir 		if ( nErr || !pFilter)
871cdf0e10cSrcweir 			DELETEZ(pMed);
872cdf0e10cSrcweir 		else
873cdf0e10cSrcweir 			pMed->SetFilter( pFilter );
874cdf0e10cSrcweir 	}
875cdf0e10cSrcweir 	else
876cdf0e10cSrcweir 	{
877cdf0e10cSrcweir         if(!pMed)
878cdf0e10cSrcweir         {
879cdf0e10cSrcweir             if( xInputStream.is() && !xReadStorage.is())
880cdf0e10cSrcweir             {
881cdf0e10cSrcweir                 pMed = new SfxMedium;
882cdf0e10cSrcweir                 pMed->setStreamToLoadFrom(xInputStream, sal_True );
883cdf0e10cSrcweir                 pMed->SetFilter( pFilter );
884cdf0e10cSrcweir             }
885cdf0e10cSrcweir             else
886cdf0e10cSrcweir             {
887cdf0e10cSrcweir                 if( xReadStorage.is() )
888cdf0e10cSrcweir                 {
889cdf0e10cSrcweir                     pMed = new SfxMedium(xReadStorage, sBaseURL, 0 );
890cdf0e10cSrcweir                     pMed->SetFilter( pFilter );
891cdf0e10cSrcweir                 }
892cdf0e10cSrcweir                 else
893cdf0e10cSrcweir                     pMed = new SfxMedium(sFileName, STREAM_READ, sal_True, pFilter, 0);
894cdf0e10cSrcweir             }
895cdf0e10cSrcweir         }
896cdf0e10cSrcweir         if(sFilterOptions.getLength())
897cdf0e10cSrcweir             pMed->GetItemSet()->Put( SfxStringItem( SID_FILE_FILTEROPTIONS, sFilterOptions ) );
898cdf0e10cSrcweir         if( sBaseURL.getLength())
899cdf0e10cSrcweir             pMed->GetItemSet()->Put( SfxStringItem( SID_DOC_BASEURL, sBaseURL ) );
900cdf0e10cSrcweir 	}
901cdf0e10cSrcweir 
902cdf0e10cSrcweir 	if( !pMed )
903cdf0e10cSrcweir 		return;
904cdf0e10cSrcweir 
905*3e9d8370Smseidel 	// this sourcecode is not responsible for the lifetime of the shell, SfxObjectShellLock should not be used
906cdf0e10cSrcweir 	SfxObjectShellRef aRef( pDocSh );
907cdf0e10cSrcweir 
908cdf0e10cSrcweir 	pDocSh->RegisterTransfer( *pMed );
909cdf0e10cSrcweir 	pMed->DownLoad();	// ggfs. den DownLoad anstossen
910cdf0e10cSrcweir 	if( aRef.Is() && 1 < aRef->GetRefCount() )	// noch gueltige Ref?
911cdf0e10cSrcweir 	{
912cdf0e10cSrcweir 		SwReader* pRdr;
913cdf0e10cSrcweir 		SfxItemSet* pSet = 	pMed->GetItemSet();
914cdf0e10cSrcweir 		pSet->Put(SfxBoolItem(FN_API_CALL, sal_True));
915*3e9d8370Smseidel 		if(sPassword.getLength())
916*3e9d8370Smseidel 			pSet->Put(SfxStringItem(SID_PASSWORD, sPassword));
917cdf0e10cSrcweir 		Reader *pRead = pDocSh->StartConvertFrom( *pMed, &pRdr, 0, pUnoCrsr);
918cdf0e10cSrcweir 		if( pRead )
919cdf0e10cSrcweir 		{
920cdf0e10cSrcweir 
921cdf0e10cSrcweir 			UnoActionContext aContext(pDoc);
922cdf0e10cSrcweir 
923cdf0e10cSrcweir 			if(pUnoCrsr->HasMark())
924cdf0e10cSrcweir 				pDoc->DeleteAndJoin(*pUnoCrsr);
925cdf0e10cSrcweir 
926cdf0e10cSrcweir 			SwNodeIndex aSave(  pUnoCrsr->GetPoint()->nNode, -1 );
927cdf0e10cSrcweir 			xub_StrLen nCntnt = pUnoCrsr->GetPoint()->nContent.GetIndex();
928cdf0e10cSrcweir 
929*3e9d8370Smseidel 			sal_uInt32 nErrno = pRdr->Read( *pRead ); // und Dokument einfuegen
930cdf0e10cSrcweir 
931cdf0e10cSrcweir 			if(!nErrno)
932cdf0e10cSrcweir 			{
933cdf0e10cSrcweir 				aSave++;
934cdf0e10cSrcweir 				pUnoCrsr->SetMark();
935cdf0e10cSrcweir 				pUnoCrsr->GetMark()->nNode = aSave;
936cdf0e10cSrcweir 
937cdf0e10cSrcweir 				SwCntntNode* pCntNode = aSave.GetNode().GetCntntNode();
938cdf0e10cSrcweir 				if( !pCntNode )
939cdf0e10cSrcweir 					nCntnt = 0;
940cdf0e10cSrcweir 				pUnoCrsr->GetMark()->nContent.Assign( pCntNode, nCntnt );
941cdf0e10cSrcweir 			}
942cdf0e10cSrcweir 
943cdf0e10cSrcweir 			delete pRdr;
944cdf0e10cSrcweir 
945cdf0e10cSrcweir 			// ggfs. alle Verzeichnisse updaten:
946cdf0e10cSrcweir /*			if( pWrtShell->IsUpdateTOX() )
947cdf0e10cSrcweir 			{
948cdf0e10cSrcweir 				SfxRequest aReq( *this, FN_UPDATE_TOX );
949cdf0e10cSrcweir 				Execute( aReq );
950cdf0e10cSrcweir 				pWrtShell->SetUpdateTOX( sal_False );		// wieder zurueck setzen
951cdf0e10cSrcweir 			}*/
952cdf0e10cSrcweir 
953cdf0e10cSrcweir 		}
954cdf0e10cSrcweir 	}
955cdf0e10cSrcweir 	delete pMed;
956cdf0e10cSrcweir }
957cdf0e10cSrcweir 
958cdf0e10cSrcweir /* -----------------14.07.04 ------------------------
959cdf0e10cSrcweir  *
960cdf0e10cSrcweir  * --------------------------------------------------*/
961cdf0e10cSrcweir 
962cdf0e10cSrcweir // insert text and scan for CR characters in order to insert
963cdf0e10cSrcweir // paragraph breaks at those positions by calling SplitNode
DocInsertStringSplitCR(SwDoc & rDoc,const SwPaM & rNewCursor,const String & rText,const bool bForceExpandHints)964cdf0e10cSrcweir sal_Bool DocInsertStringSplitCR(
965cdf0e10cSrcweir         SwDoc &rDoc,
966cdf0e10cSrcweir         const SwPaM &rNewCursor, const String &rText,
967cdf0e10cSrcweir         const bool bForceExpandHints )
968cdf0e10cSrcweir {
969cdf0e10cSrcweir     sal_Bool bOK = sal_True;
970cdf0e10cSrcweir 
971cdf0e10cSrcweir         const enum IDocumentContentOperations::InsertFlags nInsertFlags =
972cdf0e10cSrcweir             (bForceExpandHints)
973cdf0e10cSrcweir             ? static_cast<IDocumentContentOperations::InsertFlags>(
974cdf0e10cSrcweir                     IDocumentContentOperations::INS_FORCEHINTEXPAND |
975cdf0e10cSrcweir                     IDocumentContentOperations::INS_EMPTYEXPAND)
976cdf0e10cSrcweir             : IDocumentContentOperations::INS_EMPTYEXPAND;
977cdf0e10cSrcweir 
978cdf0e10cSrcweir     // grouping done in InsertString is intended for typing, not API calls
979cdf0e10cSrcweir     ::sw::GroupUndoGuard const undoGuard(rDoc.GetIDocumentUndoRedo());
980cdf0e10cSrcweir     OUString aTxt;
981cdf0e10cSrcweir     xub_StrLen nStartIdx = 0;
982cdf0e10cSrcweir     SwTxtNode* const pTxtNd =
983cdf0e10cSrcweir         rNewCursor.GetPoint()->nNode.GetNode().GetTxtNode();
984cdf0e10cSrcweir     const xub_StrLen nMaxLength = ( pTxtNd )
985cdf0e10cSrcweir         ? STRING_LEN - pTxtNd->GetTxt().Len()
986cdf0e10cSrcweir         : STRING_LEN;
987cdf0e10cSrcweir     xub_StrLen nIdx = rText.Search( '\r', nStartIdx );
988cdf0e10cSrcweir     if( ( nIdx == STRING_NOTFOUND && nMaxLength < rText.Len() ) ||
989cdf0e10cSrcweir         ( nIdx != STRING_NOTFOUND && nMaxLength < nIdx ) )
990cdf0e10cSrcweir     {
991cdf0e10cSrcweir         nIdx = nMaxLength;
992cdf0e10cSrcweir     }
993cdf0e10cSrcweir     while (nIdx != STRING_NOTFOUND )
994cdf0e10cSrcweir     {
995cdf0e10cSrcweir         DBG_ASSERT( nIdx - nStartIdx >= 0, "index negative!" );
996cdf0e10cSrcweir         aTxt = rText.Copy( nStartIdx, nIdx - nStartIdx );
997cdf0e10cSrcweir         if (aTxt.getLength() &&
998cdf0e10cSrcweir             !rDoc.InsertString( rNewCursor, aTxt, nInsertFlags ))
999cdf0e10cSrcweir         {
1000cdf0e10cSrcweir             DBG_ERROR( "Doc->Insert(Str) failed." );
1001cdf0e10cSrcweir             bOK = sal_False;
1002cdf0e10cSrcweir         }
1003cdf0e10cSrcweir         if (!rDoc.SplitNode( *rNewCursor.GetPoint(), false ) )
1004cdf0e10cSrcweir         {
1005cdf0e10cSrcweir             DBG_ERROR( "SplitNode failed" );
1006cdf0e10cSrcweir             bOK = sal_False;
1007cdf0e10cSrcweir         }
1008cdf0e10cSrcweir         nStartIdx = nIdx + 1;
1009cdf0e10cSrcweir         nIdx = rText.Search( '\r', nStartIdx );
1010cdf0e10cSrcweir     }
1011cdf0e10cSrcweir     aTxt = rText.Copy( nStartIdx );
1012cdf0e10cSrcweir     if (aTxt.getLength() &&
1013cdf0e10cSrcweir         !rDoc.InsertString( rNewCursor, aTxt, nInsertFlags ))
1014cdf0e10cSrcweir     {
1015cdf0e10cSrcweir         DBG_ERROR( "Doc->Insert(Str) failed." );
1016cdf0e10cSrcweir         bOK = sal_False;
1017cdf0e10cSrcweir     }
1018cdf0e10cSrcweir 
1019cdf0e10cSrcweir     return bOK;
1020cdf0e10cSrcweir }
1021cdf0e10cSrcweir /*-- 10.03.2008 09:58:47---------------------------------------------------
1022cdf0e10cSrcweir 
1023cdf0e10cSrcweir   -----------------------------------------------------------------------*/
makeRedline(SwPaM & rPaM,const::rtl::OUString & rRedlineType,const uno::Sequence<beans::PropertyValue> & rRedlineProperties)1024cdf0e10cSrcweir void makeRedline( SwPaM& rPaM,
1025cdf0e10cSrcweir     const ::rtl::OUString& rRedlineType,
1026cdf0e10cSrcweir     const uno::Sequence< beans::PropertyValue >& rRedlineProperties )
1027cdf0e10cSrcweir         throw (lang::IllegalArgumentException, uno::RuntimeException)
1028cdf0e10cSrcweir {
1029cdf0e10cSrcweir     IDocumentRedlineAccess* pRedlineAccess = rPaM.GetDoc();
1030cdf0e10cSrcweir 
1031cdf0e10cSrcweir     RedlineType_t eType = nsRedlineType_t::REDLINE_INSERT;
1032cdf0e10cSrcweir     if( rRedlineType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "Delete" ) ))
1033cdf0e10cSrcweir         eType = nsRedlineType_t::REDLINE_DELETE;
1034cdf0e10cSrcweir     else if( rRedlineType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "Format" ) ))
1035cdf0e10cSrcweir         eType = nsRedlineType_t::REDLINE_FORMAT;
1036cdf0e10cSrcweir     else if( rRedlineType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "TextTable" ) ))
1037cdf0e10cSrcweir         eType = nsRedlineType_t::REDLINE_TABLE;
1038cdf0e10cSrcweir     else if( !rRedlineType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "Insert" ) ))
1039cdf0e10cSrcweir         throw lang::IllegalArgumentException();
1040cdf0e10cSrcweir 
1041cdf0e10cSrcweir     //todo: what about REDLINE_FMTCOLL?
1042cdf0e10cSrcweir     comphelper::SequenceAsHashMap aPropMap( rRedlineProperties );
1043cdf0e10cSrcweir     uno::Any aAuthorValue;
1044cdf0e10cSrcweir     aAuthorValue = aPropMap.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii("RedlineAuthor"), aAuthorValue);
1045cdf0e10cSrcweir     sal_uInt16 nAuthor = 0;
1046cdf0e10cSrcweir     ::rtl::OUString sAuthor;
1047cdf0e10cSrcweir     if( aAuthorValue >>= sAuthor )
1048cdf0e10cSrcweir         nAuthor = pRedlineAccess->InsertRedlineAuthor(sAuthor);
1049cdf0e10cSrcweir 
1050cdf0e10cSrcweir     ::rtl::OUString sComment;
1051cdf0e10cSrcweir     uno::Any aCommentValue;
1052cdf0e10cSrcweir     aCommentValue = aPropMap.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii("RedlineComment"), aCommentValue);
1053cdf0e10cSrcweir 
1054cdf0e10cSrcweir     SwRedlineData aRedlineData( eType, nAuthor );
1055cdf0e10cSrcweir     if( aCommentValue >>= sComment )
1056cdf0e10cSrcweir         aRedlineData.SetComment( sComment );
1057cdf0e10cSrcweir 
1058cdf0e10cSrcweir     ::util::DateTime aStamp;
1059cdf0e10cSrcweir     uno::Any aDateTimeValue;
1060cdf0e10cSrcweir     aDateTimeValue = aPropMap.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii("RedlineDateTime"), aDateTimeValue);
1061cdf0e10cSrcweir     if( aDateTimeValue >>= aStamp )
1062cdf0e10cSrcweir     {
1063cdf0e10cSrcweir        aRedlineData.SetTimeStamp(
1064cdf0e10cSrcweir         DateTime( Date( aStamp.Day, aStamp.Month, aStamp.Year ), Time( aStamp.Hours, aStamp.Minutes, aStamp.Seconds ) ) );
1065cdf0e10cSrcweir     }
1066cdf0e10cSrcweir 
1067cdf0e10cSrcweir     SwRedline* pRedline = new SwRedline( aRedlineData, rPaM );
1068cdf0e10cSrcweir     RedlineMode_t nPrevMode = pRedlineAccess->GetRedlineMode( );
1069cdf0e10cSrcweir 
1070cdf0e10cSrcweir     pRedlineAccess->SetRedlineMode_intern(nsRedlineMode_t::REDLINE_ON);
1071cdf0e10cSrcweir     bool bRet = pRedlineAccess->AppendRedline( pRedline, false );
1072cdf0e10cSrcweir     pRedlineAccess->SetRedlineMode_intern( nPrevMode );
1073cdf0e10cSrcweir     if( !bRet )
1074cdf0e10cSrcweir         throw lang::IllegalArgumentException();
1075cdf0e10cSrcweir }
1076cdf0e10cSrcweir 
1077cdf0e10cSrcweir /*-- 19.02.2009 09:27:26---------------------------------------------------
1078cdf0e10cSrcweir 
1079cdf0e10cSrcweir   -----------------------------------------------------------------------*/
~SwAnyMapHelper()1080cdf0e10cSrcweir SwAnyMapHelper::~SwAnyMapHelper()
1081cdf0e10cSrcweir {
1082cdf0e10cSrcweir     AnyMapHelper_t::iterator aIt = begin();
1083cdf0e10cSrcweir     while( aIt != end() )
1084cdf0e10cSrcweir     {
1085cdf0e10cSrcweir         delete ( aIt->second );
1086cdf0e10cSrcweir         ++aIt;
1087cdf0e10cSrcweir     }
1088cdf0e10cSrcweir }
1089cdf0e10cSrcweir /*-- 19.02.2009 09:27:26---------------------------------------------------
1090cdf0e10cSrcweir 
1091cdf0e10cSrcweir   -----------------------------------------------------------------------*/
SetValue(sal_uInt16 nWhichId,sal_uInt16 nMemberId,const uno::Any & rAny)1092cdf0e10cSrcweir void SwAnyMapHelper::SetValue( sal_uInt16 nWhichId, sal_uInt16 nMemberId, const uno::Any& rAny )
1093cdf0e10cSrcweir {
1094cdf0e10cSrcweir     sal_uInt32 nKey = (nWhichId << 16) + nMemberId;
1095cdf0e10cSrcweir     AnyMapHelper_t::iterator aIt = find( nKey );
1096cdf0e10cSrcweir     if( aIt != end() )
1097cdf0e10cSrcweir     {
1098cdf0e10cSrcweir         *(aIt->second) = rAny;
1099cdf0e10cSrcweir     }
1100cdf0e10cSrcweir     else
1101cdf0e10cSrcweir         insert( value_type(nKey, new uno::Any( rAny )) );
1102cdf0e10cSrcweir }
1103cdf0e10cSrcweir /*-- 19.02.2009 09:27:26---------------------------------------------------
1104cdf0e10cSrcweir 
1105cdf0e10cSrcweir   -----------------------------------------------------------------------*/
FillValue(sal_uInt16 nWhichId,sal_uInt16 nMemberId,const uno::Any * & pAny)1106cdf0e10cSrcweir bool    SwAnyMapHelper::FillValue( sal_uInt16 nWhichId, sal_uInt16 nMemberId, const uno::Any*& pAny )
1107cdf0e10cSrcweir {
1108cdf0e10cSrcweir     bool bRet = false;
1109cdf0e10cSrcweir     sal_uInt32 nKey = (nWhichId << 16) + nMemberId;
1110cdf0e10cSrcweir     AnyMapHelper_t::iterator aIt = find( nKey );
1111cdf0e10cSrcweir     if( aIt != end() )
1112cdf0e10cSrcweir     {
1113cdf0e10cSrcweir         pAny = aIt->second;
1114cdf0e10cSrcweir         bRet = true;
1115cdf0e10cSrcweir     }
1116cdf0e10cSrcweir     return bRet;
1117cdf0e10cSrcweir }
1118cdf0e10cSrcweir 
1119cdf0e10cSrcweir }//namespace SwUnoCursorHelper
1120