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