1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
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
10cdf0e10cSrcweir *
11efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
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.
19cdf0e10cSrcweir *
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 <unobookmark.hxx>
28cdf0e10cSrcweir #include <vos/mutex.hxx>
29cdf0e10cSrcweir #include <vcl/svapp.hxx>
30cdf0e10cSrcweir
31cdf0e10cSrcweir #include <TextCursorHelper.hxx>
32cdf0e10cSrcweir #include <unotextrange.hxx>
33cdf0e10cSrcweir #include <unomap.hxx>
34cdf0e10cSrcweir #include <unoprnms.hxx>
35cdf0e10cSrcweir #include <unoevtlstnr.hxx>
36cdf0e10cSrcweir #include <IMark.hxx>
37cdf0e10cSrcweir #include <crossrefbookmark.hxx>
38cdf0e10cSrcweir #include <doc.hxx>
39cdf0e10cSrcweir #include <IDocumentUndoRedo.hxx>
40cdf0e10cSrcweir #include <docary.hxx>
41cdf0e10cSrcweir #include <swundo.hxx>
42cdf0e10cSrcweir #include <comcore.hrc>
43cdf0e10cSrcweir #include <SwRewriter.hxx>
44cdf0e10cSrcweir #include <docsh.hxx>
45cdf0e10cSrcweir
46cdf0e10cSrcweir
47cdf0e10cSrcweir using namespace ::sw::mark;
48cdf0e10cSrcweir using namespace ::com::sun::star;
49cdf0e10cSrcweir using ::rtl::OUString;
50cdf0e10cSrcweir
51cdf0e10cSrcweir
52cdf0e10cSrcweir namespace
53cdf0e10cSrcweir {
lcl_QuoteName(const OUString & rName)54cdf0e10cSrcweir static OUString lcl_QuoteName(const OUString& rName)
55cdf0e10cSrcweir {
56cdf0e10cSrcweir static const OUString sStart = OUString(String(SW_RES(STR_START_QUOTE)));
57cdf0e10cSrcweir static const OUString sEnd = OUString(String(SW_RES(STR_END_QUOTE)));
58cdf0e10cSrcweir ::rtl::OUStringBuffer sBuf(64);
59cdf0e10cSrcweir return sBuf.append(sStart).append(rName).append(sEnd).makeStringAndClear();
60cdf0e10cSrcweir }
61cdf0e10cSrcweir }
62cdf0e10cSrcweir
63cdf0e10cSrcweir /******************************************************************
64cdf0e10cSrcweir * SwXBookmark
65cdf0e10cSrcweir ******************************************************************/
66cdf0e10cSrcweir
67cdf0e10cSrcweir class SwXBookmark::Impl
68cdf0e10cSrcweir : public SwClient
69cdf0e10cSrcweir {
70cdf0e10cSrcweir
71cdf0e10cSrcweir public:
72cdf0e10cSrcweir SwEventListenerContainer m_ListenerContainer;
73cdf0e10cSrcweir SwDoc * m_pDoc;
74cdf0e10cSrcweir ::sw::mark::IMark * m_pRegisteredBookmark;
75cdf0e10cSrcweir ::rtl::OUString m_sMarkName;
76cdf0e10cSrcweir
77cdf0e10cSrcweir
Impl(SwXBookmark & rThis,SwDoc * const pDoc,::sw::mark::IMark * const)78cdf0e10cSrcweir Impl( SwXBookmark & rThis,
79cdf0e10cSrcweir SwDoc *const pDoc, ::sw::mark::IMark *const /*pBookmark*/)
80cdf0e10cSrcweir : SwClient()
81cdf0e10cSrcweir , m_ListenerContainer(static_cast< ::cppu::OWeakObject* >(&rThis))
82cdf0e10cSrcweir , m_pDoc(pDoc)
83cdf0e10cSrcweir , m_pRegisteredBookmark(0)
84cdf0e10cSrcweir {
85cdf0e10cSrcweir // DO NOT regiserInMark here! (because SetXBookmark would delete rThis)
86cdf0e10cSrcweir }
87cdf0e10cSrcweir
88cdf0e10cSrcweir void registerInMark(SwXBookmark & rThis, ::sw::mark::IMark *const pBkmk);
89cdf0e10cSrcweir protected:
90cdf0e10cSrcweir // SwClient
91cdf0e10cSrcweir virtual void Modify( const SfxPoolItem *pOld, const SfxPoolItem *pNew);
92cdf0e10cSrcweir
93cdf0e10cSrcweir };
94cdf0e10cSrcweir
Modify(const SfxPoolItem * pOld,const SfxPoolItem * pNew)95cdf0e10cSrcweir void SwXBookmark::Impl::Modify(const SfxPoolItem *pOld, const SfxPoolItem *pNew)
96cdf0e10cSrcweir {
97cdf0e10cSrcweir ClientModify(this, pOld, pNew);
98cdf0e10cSrcweir if (!GetRegisteredIn())
99cdf0e10cSrcweir {
100cdf0e10cSrcweir m_pRegisteredBookmark = NULL;
101cdf0e10cSrcweir m_pDoc = NULL;
102cdf0e10cSrcweir m_ListenerContainer.Disposing();
103cdf0e10cSrcweir }
104cdf0e10cSrcweir }
105cdf0e10cSrcweir
registerInMark(SwXBookmark & rThis,::sw::mark::IMark * const pBkmk)1061cd05511SOliver-Rainer Wittmann void SwXBookmark::Impl::registerInMark(
1071cd05511SOliver-Rainer Wittmann SwXBookmark & rThis,
108cdf0e10cSrcweir ::sw::mark::IMark *const pBkmk)
109cdf0e10cSrcweir {
110cdf0e10cSrcweir if (pBkmk)
111cdf0e10cSrcweir {
112cdf0e10cSrcweir pBkmk->Add(this);
113*dec99bbdSOliver-Rainer Wittmann ::sw::mark::MarkBase *const pMarkBase(dynamic_cast< ::sw::mark::MarkBase * >(pBkmk));
114cdf0e10cSrcweir OSL_ENSURE(pMarkBase, "registerInMark: no MarkBase?");
115cdf0e10cSrcweir if (pMarkBase)
116cdf0e10cSrcweir {
117cdf0e10cSrcweir const uno::Reference<text::XTextContent> xBookmark(& rThis);
118cdf0e10cSrcweir pMarkBase->SetXBookmark(xBookmark);
119cdf0e10cSrcweir }
120cdf0e10cSrcweir }
121cdf0e10cSrcweir else if (m_pRegisteredBookmark)
122cdf0e10cSrcweir {
123cdf0e10cSrcweir m_sMarkName = m_pRegisteredBookmark->GetName();
124cdf0e10cSrcweir m_pRegisteredBookmark->Remove(this);
125cdf0e10cSrcweir }
126cdf0e10cSrcweir m_pRegisteredBookmark = pBkmk;
127cdf0e10cSrcweir }
128cdf0e10cSrcweir
129cdf0e10cSrcweir
GetBookmark() const130cdf0e10cSrcweir const ::sw::mark::IMark* SwXBookmark::GetBookmark() const
131cdf0e10cSrcweir {
132cdf0e10cSrcweir return m_pImpl->m_pRegisteredBookmark;
133cdf0e10cSrcweir }
134cdf0e10cSrcweir
SwXBookmark(::sw::mark::IMark * const pBkmk,SwDoc * const pDoc)135*dec99bbdSOliver-Rainer Wittmann SwXBookmark::SwXBookmark(
136*dec99bbdSOliver-Rainer Wittmann ::sw::mark::IMark *const pBkmk,
137*dec99bbdSOliver-Rainer Wittmann SwDoc *const pDoc)
138cdf0e10cSrcweir : m_pImpl( new SwXBookmark::Impl(*this, pDoc, pBkmk) )
139cdf0e10cSrcweir {
140cdf0e10cSrcweir }
141cdf0e10cSrcweir
SwXBookmark()142cdf0e10cSrcweir SwXBookmark::SwXBookmark()
143cdf0e10cSrcweir : m_pImpl( new SwXBookmark::Impl(*this, 0, 0) )
144cdf0e10cSrcweir {
145cdf0e10cSrcweir }
146cdf0e10cSrcweir
~SwXBookmark()147cdf0e10cSrcweir SwXBookmark::~SwXBookmark()
148cdf0e10cSrcweir {
149cdf0e10cSrcweir }
150cdf0e10cSrcweir
CreateXBookmark(SwDoc & rDoc,::sw::mark::IMark & rBookmark)151*dec99bbdSOliver-Rainer Wittmann uno::Reference<text::XTextContent> SwXBookmark::CreateXBookmark(
152*dec99bbdSOliver-Rainer Wittmann SwDoc & rDoc,
153*dec99bbdSOliver-Rainer Wittmann ::sw::mark::IMark & rBookmark)
154cdf0e10cSrcweir {
155cdf0e10cSrcweir // #i105557#: do not iterate over the registered clients: race condition
156*dec99bbdSOliver-Rainer Wittmann ::sw::mark::MarkBase *const pMarkBase(dynamic_cast< ::sw::mark::MarkBase * >(&rBookmark));
157cdf0e10cSrcweir OSL_ENSURE(pMarkBase, "CreateXBookmark: no MarkBase?");
158cdf0e10cSrcweir if (!pMarkBase) { return 0; }
159cdf0e10cSrcweir uno::Reference<text::XTextContent> xBookmark(pMarkBase->GetXBookmark());
160cdf0e10cSrcweir if (!xBookmark.is())
161cdf0e10cSrcweir {
162cdf0e10cSrcweir OSL_ENSURE(
163*dec99bbdSOliver-Rainer Wittmann dynamic_cast< ::sw::mark::IBookmark* >(&rBookmark) || IDocumentMarkAccess::GetType(rBookmark) == IDocumentMarkAccess::ANNOTATIONMARK,
164cdf0e10cSrcweir "<SwXBookmark::GetObject(..)>"
165*dec99bbdSOliver-Rainer Wittmann "SwXBookmark requested for non-bookmark mark and non-annotation mark.");
166cdf0e10cSrcweir SwXBookmark *const pXBookmark = new SwXBookmark(&rBookmark, &rDoc);
167cdf0e10cSrcweir xBookmark.set(pXBookmark);
1681cd05511SOliver-Rainer Wittmann pXBookmark->registerInMark( pMarkBase);
169cdf0e10cSrcweir }
170cdf0e10cSrcweir return xBookmark;
171cdf0e10cSrcweir }
172cdf0e10cSrcweir
1731cd05511SOliver-Rainer Wittmann
registerInMark(::sw::mark::IMark * const pBkmk)1741cd05511SOliver-Rainer Wittmann void SwXBookmark::registerInMark( ::sw::mark::IMark *const pBkmk )
1751cd05511SOliver-Rainer Wittmann {
1761cd05511SOliver-Rainer Wittmann m_pImpl->registerInMark( *this, pBkmk );
1771cd05511SOliver-Rainer Wittmann }
1781cd05511SOliver-Rainer Wittmann
GetBookmarkInDoc(SwDoc const * const pDoc,const uno::Reference<lang::XUnoTunnel> & xUT)179cdf0e10cSrcweir ::sw::mark::IMark const* SwXBookmark::GetBookmarkInDoc(SwDoc const*const pDoc,
180cdf0e10cSrcweir const uno::Reference< lang::XUnoTunnel> & xUT)
181cdf0e10cSrcweir {
182cdf0e10cSrcweir SwXBookmark *const pXBkm(
183cdf0e10cSrcweir ::sw::UnoTunnelGetImplementation<SwXBookmark>(xUT));
184cdf0e10cSrcweir if (pXBkm && (pDoc == pXBkm->m_pImpl->m_pDoc))
185cdf0e10cSrcweir {
186cdf0e10cSrcweir return pXBkm->m_pImpl->m_pRegisteredBookmark;
187cdf0e10cSrcweir }
188cdf0e10cSrcweir return 0;
189cdf0e10cSrcweir }
190cdf0e10cSrcweir
getUnoTunnelId()191cdf0e10cSrcweir const uno::Sequence< sal_Int8 > & SwXBookmark::getUnoTunnelId()
192cdf0e10cSrcweir {
193cdf0e10cSrcweir static uno::Sequence< sal_Int8 > aSeq = ::CreateUnoTunnelId();
194cdf0e10cSrcweir return aSeq;
195cdf0e10cSrcweir }
196cdf0e10cSrcweir
getSomething(const uno::Sequence<sal_Int8> & rId)197*dec99bbdSOliver-Rainer Wittmann sal_Int64 SAL_CALL SwXBookmark::getSomething( const uno::Sequence< sal_Int8 >& rId )
198cdf0e10cSrcweir throw (uno::RuntimeException)
199cdf0e10cSrcweir {
200cdf0e10cSrcweir return ::sw::UnoTunnelImpl<SwXBookmark>(rId, this);
201cdf0e10cSrcweir }
202cdf0e10cSrcweir
attachToRangeEx(const uno::Reference<text::XTextRange> & xTextRange,IDocumentMarkAccess::MarkType eType)203cdf0e10cSrcweir void SwXBookmark::attachToRangeEx(
204cdf0e10cSrcweir const uno::Reference< text::XTextRange > & xTextRange,
205cdf0e10cSrcweir IDocumentMarkAccess::MarkType eType)
206cdf0e10cSrcweir throw (lang::IllegalArgumentException, uno::RuntimeException)
207cdf0e10cSrcweir {
208cdf0e10cSrcweir if (m_pImpl->m_pRegisteredBookmark)
209cdf0e10cSrcweir {
210cdf0e10cSrcweir throw uno::RuntimeException();
211cdf0e10cSrcweir }
212cdf0e10cSrcweir
213cdf0e10cSrcweir const uno::Reference<lang::XUnoTunnel> xRangeTunnel(
214cdf0e10cSrcweir xTextRange, uno::UNO_QUERY);
215cdf0e10cSrcweir SwXTextRange* pRange = 0;
216cdf0e10cSrcweir OTextCursorHelper* pCursor = 0;
217cdf0e10cSrcweir if(xRangeTunnel.is())
218cdf0e10cSrcweir {
219cdf0e10cSrcweir pRange = ::sw::UnoTunnelGetImplementation<SwXTextRange>(xRangeTunnel);
220cdf0e10cSrcweir pCursor =
221cdf0e10cSrcweir ::sw::UnoTunnelGetImplementation<OTextCursorHelper>(xRangeTunnel);
222cdf0e10cSrcweir }
223cdf0e10cSrcweir
224cdf0e10cSrcweir SwDoc *const pDoc =
225cdf0e10cSrcweir (pRange) ? pRange->GetDoc() : ((pCursor) ? pCursor->GetDoc() : 0);
226cdf0e10cSrcweir if (!pDoc)
227cdf0e10cSrcweir {
228cdf0e10cSrcweir throw lang::IllegalArgumentException();
229cdf0e10cSrcweir }
230cdf0e10cSrcweir
231cdf0e10cSrcweir m_pImpl->m_pDoc = pDoc;
232cdf0e10cSrcweir SwUnoInternalPaM aPam(*m_pImpl->m_pDoc);
233cdf0e10cSrcweir ::sw::XTextRangeToSwPaM(aPam, xTextRange);
234cdf0e10cSrcweir UnoActionContext aCont(m_pImpl->m_pDoc);
235cdf0e10cSrcweir if (!m_pImpl->m_sMarkName.getLength())
236cdf0e10cSrcweir {
237cdf0e10cSrcweir m_pImpl->m_sMarkName = OUString::createFromAscii("Bookmark");
238cdf0e10cSrcweir }
239cdf0e10cSrcweir if ((eType == IDocumentMarkAccess::BOOKMARK) &&
240cdf0e10cSrcweir ::sw::mark::CrossRefNumItemBookmark::IsLegalName(m_pImpl->m_sMarkName))
241cdf0e10cSrcweir {
242cdf0e10cSrcweir eType = IDocumentMarkAccess::CROSSREF_NUMITEM_BOOKMARK;
243cdf0e10cSrcweir }
244cdf0e10cSrcweir else if ((eType == IDocumentMarkAccess::BOOKMARK) &&
2453078b051SOliver-Rainer Wittmann ::sw::mark::CrossRefHeadingBookmark::IsLegalName(m_pImpl->m_sMarkName) &&
2463078b051SOliver-Rainer Wittmann IDocumentMarkAccess::IsLegalPaMForCrossRefHeadingBookmark( aPam ) )
247cdf0e10cSrcweir {
248cdf0e10cSrcweir eType = IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK;
249cdf0e10cSrcweir }
2501cd05511SOliver-Rainer Wittmann registerInMark( m_pImpl->m_pDoc->getIDocumentMarkAccess()->makeMark( aPam, m_pImpl->m_sMarkName, eType ) );
251cdf0e10cSrcweir // Check, if bookmark has been created.
252cdf0e10cSrcweir // E.g., the creation of a cross-reference bookmark is suppress,
253cdf0e10cSrcweir // if the PaM isn't a valid one for cross-reference bookmarks.
254cdf0e10cSrcweir if (!m_pImpl->m_pRegisteredBookmark)
255cdf0e10cSrcweir {
256cdf0e10cSrcweir OSL_ENSURE(false,
257cdf0e10cSrcweir "<SwXBookmark::attachToRange(..)>"
258cdf0e10cSrcweir " - could not create Mark.");
259cdf0e10cSrcweir throw lang::IllegalArgumentException();
260cdf0e10cSrcweir }
261cdf0e10cSrcweir }
262cdf0e10cSrcweir
attachToRange(const uno::Reference<text::XTextRange> & xTextRange)263*dec99bbdSOliver-Rainer Wittmann void SwXBookmark::attachToRange( const uno::Reference< text::XTextRange > & xTextRange )
264cdf0e10cSrcweir throw (lang::IllegalArgumentException, uno::RuntimeException)
265cdf0e10cSrcweir {
266cdf0e10cSrcweir attachToRangeEx(xTextRange, IDocumentMarkAccess::BOOKMARK);
267cdf0e10cSrcweir }
268cdf0e10cSrcweir
attach(const uno::Reference<text::XTextRange> & xTextRange)269*dec99bbdSOliver-Rainer Wittmann void SAL_CALL SwXBookmark::attach( const uno::Reference< text::XTextRange > & xTextRange )
270cdf0e10cSrcweir throw (lang::IllegalArgumentException, uno::RuntimeException)
271cdf0e10cSrcweir {
272cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
273cdf0e10cSrcweir attachToRange( xTextRange );
274cdf0e10cSrcweir }
275cdf0e10cSrcweir
getAnchor()276*dec99bbdSOliver-Rainer Wittmann uno::Reference< text::XTextRange > SAL_CALL SwXBookmark::getAnchor()
277*dec99bbdSOliver-Rainer Wittmann throw (uno::RuntimeException)
278cdf0e10cSrcweir {
279cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
280cdf0e10cSrcweir
281cdf0e10cSrcweir if (!m_pImpl->m_pRegisteredBookmark)
282cdf0e10cSrcweir {
283cdf0e10cSrcweir throw uno::RuntimeException();
284cdf0e10cSrcweir }
285cdf0e10cSrcweir return SwXTextRange::CreateXTextRange(
286cdf0e10cSrcweir *m_pImpl->m_pDoc,
287cdf0e10cSrcweir m_pImpl->m_pRegisteredBookmark->GetMarkPos(),
288cdf0e10cSrcweir (m_pImpl->m_pRegisteredBookmark->IsExpanded())
289cdf0e10cSrcweir ? &m_pImpl->m_pRegisteredBookmark->GetOtherMarkPos() : NULL);
290cdf0e10cSrcweir }
291cdf0e10cSrcweir
dispose()292*dec99bbdSOliver-Rainer Wittmann void SAL_CALL SwXBookmark::dispose()
293*dec99bbdSOliver-Rainer Wittmann throw (uno::RuntimeException)
294cdf0e10cSrcweir {
295cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
296cdf0e10cSrcweir if (m_pImpl->m_pRegisteredBookmark)
297cdf0e10cSrcweir {
298*dec99bbdSOliver-Rainer Wittmann m_pImpl->m_pDoc->getIDocumentMarkAccess()->deleteMark( m_pImpl->m_pRegisteredBookmark );
299cdf0e10cSrcweir }
300cdf0e10cSrcweir }
301cdf0e10cSrcweir
addEventListener(const uno::Reference<lang::XEventListener> & xListener)302cdf0e10cSrcweir void SAL_CALL SwXBookmark::addEventListener(
303cdf0e10cSrcweir const uno::Reference< lang::XEventListener > & xListener)
304cdf0e10cSrcweir throw (uno::RuntimeException)
305cdf0e10cSrcweir {
306cdf0e10cSrcweir vos::OGuard g(Application::GetSolarMutex());
307cdf0e10cSrcweir
308cdf0e10cSrcweir if (!m_pImpl->m_pRegisteredBookmark)
309cdf0e10cSrcweir {
310cdf0e10cSrcweir throw uno::RuntimeException();
311cdf0e10cSrcweir }
312cdf0e10cSrcweir m_pImpl->m_ListenerContainer.AddListener(xListener);
313cdf0e10cSrcweir }
314cdf0e10cSrcweir
removeEventListener(const uno::Reference<lang::XEventListener> & xListener)315cdf0e10cSrcweir void SAL_CALL SwXBookmark::removeEventListener(
316cdf0e10cSrcweir const uno::Reference< lang::XEventListener > & xListener)
317cdf0e10cSrcweir throw (uno::RuntimeException)
318cdf0e10cSrcweir {
319cdf0e10cSrcweir vos::OGuard g(Application::GetSolarMutex());
320cdf0e10cSrcweir
321cdf0e10cSrcweir if (!m_pImpl->m_pRegisteredBookmark ||
322cdf0e10cSrcweir !m_pImpl->m_ListenerContainer.RemoveListener(xListener))
323cdf0e10cSrcweir {
324cdf0e10cSrcweir throw uno::RuntimeException();
325cdf0e10cSrcweir }
326cdf0e10cSrcweir }
327cdf0e10cSrcweir
getName()328cdf0e10cSrcweir OUString SAL_CALL SwXBookmark::getName()
329cdf0e10cSrcweir throw (uno::RuntimeException)
330cdf0e10cSrcweir {
331cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
332cdf0e10cSrcweir
333cdf0e10cSrcweir return (m_pImpl->m_pRegisteredBookmark)
334cdf0e10cSrcweir ? m_pImpl->m_pRegisteredBookmark->GetName()
335cdf0e10cSrcweir : m_pImpl->m_sMarkName;
336cdf0e10cSrcweir }
337cdf0e10cSrcweir
setName(const OUString & rName)338cdf0e10cSrcweir void SAL_CALL SwXBookmark::setName(const OUString& rName)
339cdf0e10cSrcweir throw (uno::RuntimeException)
340cdf0e10cSrcweir {
341cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
342cdf0e10cSrcweir
343cdf0e10cSrcweir if (!m_pImpl->m_pRegisteredBookmark)
344cdf0e10cSrcweir {
345cdf0e10cSrcweir m_pImpl->m_sMarkName = rName;
346cdf0e10cSrcweir }
347cdf0e10cSrcweir if (!m_pImpl->m_pRegisteredBookmark || (getName() == rName))
348cdf0e10cSrcweir {
349cdf0e10cSrcweir return;
350cdf0e10cSrcweir }
351cdf0e10cSrcweir IDocumentMarkAccess *const pMarkAccess =
352cdf0e10cSrcweir m_pImpl->m_pDoc->getIDocumentMarkAccess();
353*dec99bbdSOliver-Rainer Wittmann if(pMarkAccess->findMark(rName) != pMarkAccess->getAllMarksEnd())
354cdf0e10cSrcweir {
355cdf0e10cSrcweir throw uno::RuntimeException();
356cdf0e10cSrcweir }
357cdf0e10cSrcweir
358cdf0e10cSrcweir SwPaM aPam(m_pImpl->m_pRegisteredBookmark->GetMarkPos());
359cdf0e10cSrcweir if (m_pImpl->m_pRegisteredBookmark->IsExpanded())
360cdf0e10cSrcweir {
361cdf0e10cSrcweir aPam.SetMark();
362cdf0e10cSrcweir *aPam.GetMark() = m_pImpl->m_pRegisteredBookmark->GetOtherMarkPos();
363cdf0e10cSrcweir }
364cdf0e10cSrcweir
365cdf0e10cSrcweir SwRewriter aRewriter;
366cdf0e10cSrcweir aRewriter.AddRule(UNDO_ARG1, lcl_QuoteName(getName()));
367cdf0e10cSrcweir aRewriter.AddRule(UNDO_ARG2, SW_RES(STR_YIELDS));
368cdf0e10cSrcweir aRewriter.AddRule(UNDO_ARG3, lcl_QuoteName(rName));
369cdf0e10cSrcweir
370cdf0e10cSrcweir m_pImpl->m_pDoc->GetIDocumentUndoRedo().StartUndo(
371cdf0e10cSrcweir UNDO_BOOKMARK_RENAME, &aRewriter);
372cdf0e10cSrcweir pMarkAccess->renameMark(m_pImpl->m_pRegisteredBookmark, rName);
373cdf0e10cSrcweir m_pImpl->m_pDoc->GetIDocumentUndoRedo().EndUndo(
374cdf0e10cSrcweir UNDO_BOOKMARK_RENAME, &aRewriter);
375cdf0e10cSrcweir }
376cdf0e10cSrcweir
377cdf0e10cSrcweir OUString SAL_CALL
getImplementationName()378cdf0e10cSrcweir SwXBookmark::getImplementationName() throw (uno::RuntimeException)
379cdf0e10cSrcweir {
380cdf0e10cSrcweir return OUString::createFromAscii("SwXBookmark");
381cdf0e10cSrcweir }
382cdf0e10cSrcweir
383cdf0e10cSrcweir static char const*const g_ServicesBookmark[] =
384cdf0e10cSrcweir {
385cdf0e10cSrcweir "com.sun.star.text.TextContent",
386cdf0e10cSrcweir "com.sun.star.text.Bookmark",
387cdf0e10cSrcweir "com.sun.star.document.LinkTarget",
388cdf0e10cSrcweir };
389cdf0e10cSrcweir static const size_t g_nServicesBookmark(
390cdf0e10cSrcweir sizeof(g_ServicesBookmark)/sizeof(g_ServicesBookmark[0]));
391cdf0e10cSrcweir
supportsService(const OUString & rServiceName)392cdf0e10cSrcweir sal_Bool SAL_CALL SwXBookmark::supportsService(const OUString& rServiceName)
393cdf0e10cSrcweir throw (uno::RuntimeException)
394cdf0e10cSrcweir {
395cdf0e10cSrcweir return ::sw::SupportsServiceImpl(
396cdf0e10cSrcweir g_nServicesBookmark, g_ServicesBookmark, rServiceName);
397cdf0e10cSrcweir }
398cdf0e10cSrcweir
399cdf0e10cSrcweir uno::Sequence< OUString > SAL_CALL
getSupportedServiceNames()400cdf0e10cSrcweir SwXBookmark::getSupportedServiceNames() throw (uno::RuntimeException)
401cdf0e10cSrcweir {
402cdf0e10cSrcweir return ::sw::GetSupportedServiceNamesImpl(
403cdf0e10cSrcweir g_nServicesBookmark, g_ServicesBookmark);
404cdf0e10cSrcweir }
405cdf0e10cSrcweir
406cdf0e10cSrcweir // MetadatableMixin
GetCoreObject()407cdf0e10cSrcweir ::sfx2::Metadatable* SwXBookmark::GetCoreObject()
408cdf0e10cSrcweir {
409cdf0e10cSrcweir return dynamic_cast< ::sfx2::Metadatable* >(m_pImpl->m_pRegisteredBookmark);
410cdf0e10cSrcweir }
411cdf0e10cSrcweir
GetModel()412cdf0e10cSrcweir uno::Reference<frame::XModel> SwXBookmark::GetModel()
413cdf0e10cSrcweir {
414cdf0e10cSrcweir if (m_pImpl->m_pDoc)
415cdf0e10cSrcweir {
416cdf0e10cSrcweir SwDocShell const * const pShell( m_pImpl->m_pDoc->GetDocShell() );
417cdf0e10cSrcweir return (pShell) ? pShell->GetModel() : 0;
418cdf0e10cSrcweir }
419cdf0e10cSrcweir return 0;
420cdf0e10cSrcweir }
421cdf0e10cSrcweir
422cdf0e10cSrcweir
423cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo > SAL_CALL
getPropertySetInfo()424cdf0e10cSrcweir SwXBookmark::getPropertySetInfo() throw (uno::RuntimeException)
425cdf0e10cSrcweir {
426cdf0e10cSrcweir vos::OGuard g(Application::GetSolarMutex());
427cdf0e10cSrcweir
428cdf0e10cSrcweir static uno::Reference< beans::XPropertySetInfo > xRef(
429cdf0e10cSrcweir aSwMapProvider.GetPropertySet(PROPERTY_MAP_BOOKMARK)
430cdf0e10cSrcweir ->getPropertySetInfo() );
431cdf0e10cSrcweir return xRef;
432cdf0e10cSrcweir }
433cdf0e10cSrcweir
434cdf0e10cSrcweir void SAL_CALL
setPropertyValue(const OUString & PropertyName,const uno::Any &)435cdf0e10cSrcweir SwXBookmark::setPropertyValue(const OUString& PropertyName,
436cdf0e10cSrcweir const uno::Any& /*rValue*/)
437cdf0e10cSrcweir throw (beans::UnknownPropertyException, beans::PropertyVetoException,
438cdf0e10cSrcweir lang::IllegalArgumentException, lang::WrappedTargetException,
439cdf0e10cSrcweir uno::RuntimeException)
440cdf0e10cSrcweir {
441cdf0e10cSrcweir // nothing to set here
442cdf0e10cSrcweir throw lang::IllegalArgumentException( ::rtl::OUString(
443cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM("Property is read-only: "))
444cdf0e10cSrcweir + PropertyName, static_cast< cppu::OWeakObject * >(this), 0 );
445cdf0e10cSrcweir }
446cdf0e10cSrcweir
getPropertyValue(const OUString & rPropertyName)447cdf0e10cSrcweir uno::Any SAL_CALL SwXBookmark::getPropertyValue(const OUString& rPropertyName)
448cdf0e10cSrcweir throw (beans::UnknownPropertyException, lang::WrappedTargetException,
449cdf0e10cSrcweir uno::RuntimeException)
450cdf0e10cSrcweir {
451cdf0e10cSrcweir vos::OGuard g(Application::GetSolarMutex());
452cdf0e10cSrcweir
453cdf0e10cSrcweir uno::Any aRet;
454cdf0e10cSrcweir if (! ::sw::GetDefaultTextContentValue(aRet, rPropertyName))
455cdf0e10cSrcweir {
456cdf0e10cSrcweir if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_LINK_DISPLAY_NAME)))
457cdf0e10cSrcweir {
458cdf0e10cSrcweir aRet <<= getName();
459cdf0e10cSrcweir }
460cdf0e10cSrcweir }
461cdf0e10cSrcweir return aRet;
462cdf0e10cSrcweir }
463cdf0e10cSrcweir
464cdf0e10cSrcweir void SAL_CALL
addPropertyChangeListener(const::rtl::OUString &,const uno::Reference<beans::XPropertyChangeListener> &)465cdf0e10cSrcweir SwXBookmark::addPropertyChangeListener(
466cdf0e10cSrcweir const ::rtl::OUString& /*rPropertyName*/,
467cdf0e10cSrcweir const uno::Reference< beans::XPropertyChangeListener >& /*xListener*/)
468cdf0e10cSrcweir throw (beans::UnknownPropertyException, lang::WrappedTargetException,
469cdf0e10cSrcweir uno::RuntimeException)
470cdf0e10cSrcweir {
471cdf0e10cSrcweir OSL_ENSURE(false,
472cdf0e10cSrcweir "SwXBookmark::addPropertyChangeListener(): not implemented");
473cdf0e10cSrcweir }
474cdf0e10cSrcweir
475cdf0e10cSrcweir void SAL_CALL
removePropertyChangeListener(const::rtl::OUString &,const uno::Reference<beans::XPropertyChangeListener> &)476cdf0e10cSrcweir SwXBookmark::removePropertyChangeListener(
477cdf0e10cSrcweir const ::rtl::OUString& /*rPropertyName*/,
478cdf0e10cSrcweir const uno::Reference< beans::XPropertyChangeListener >& /*xListener*/)
479cdf0e10cSrcweir throw (beans::UnknownPropertyException, lang::WrappedTargetException,
480cdf0e10cSrcweir uno::RuntimeException)
481cdf0e10cSrcweir {
482cdf0e10cSrcweir OSL_ENSURE(false,
483cdf0e10cSrcweir "SwXBookmark::removePropertyChangeListener(): not implemented");
484cdf0e10cSrcweir }
485cdf0e10cSrcweir
486cdf0e10cSrcweir void SAL_CALL
addVetoableChangeListener(const::rtl::OUString &,const uno::Reference<beans::XVetoableChangeListener> &)487cdf0e10cSrcweir SwXBookmark::addVetoableChangeListener(
488cdf0e10cSrcweir const ::rtl::OUString& /*rPropertyName*/,
489cdf0e10cSrcweir const uno::Reference< beans::XVetoableChangeListener >& /*xListener*/)
490cdf0e10cSrcweir throw (beans::UnknownPropertyException, lang::WrappedTargetException,
491cdf0e10cSrcweir uno::RuntimeException)
492cdf0e10cSrcweir {
493cdf0e10cSrcweir OSL_ENSURE(false,
494cdf0e10cSrcweir "SwXBookmark::addVetoableChangeListener(): not implemented");
495cdf0e10cSrcweir }
496cdf0e10cSrcweir
497cdf0e10cSrcweir void SAL_CALL
removeVetoableChangeListener(const::rtl::OUString &,const uno::Reference<beans::XVetoableChangeListener> &)498cdf0e10cSrcweir SwXBookmark::removeVetoableChangeListener(
499cdf0e10cSrcweir const ::rtl::OUString& /*rPropertyName*/,
500cdf0e10cSrcweir const uno::Reference< beans::XVetoableChangeListener >& /*xListener*/)
501cdf0e10cSrcweir throw (beans::UnknownPropertyException, lang::WrappedTargetException,
502cdf0e10cSrcweir uno::RuntimeException)
503cdf0e10cSrcweir {
504cdf0e10cSrcweir OSL_ENSURE(false,
505cdf0e10cSrcweir "SwXBookmark::removeVetoableChangeListener(): not implemented");
506cdf0e10cSrcweir }
507cdf0e10cSrcweir
508cdf0e10cSrcweir /******************************************************************
509cdf0e10cSrcweir * SwXFieldmark
510cdf0e10cSrcweir ******************************************************************/
511cdf0e10cSrcweir
SwXFieldmark(bool _isReplacementObject)5121cd05511SOliver-Rainer Wittmann SwXFieldmark::SwXFieldmark( bool _isReplacementObject )
5131cd05511SOliver-Rainer Wittmann : SwXFieldmark_Base()
514cdf0e10cSrcweir , isReplacementObject(_isReplacementObject)
5151cd05511SOliver-Rainer Wittmann {
5161cd05511SOliver-Rainer Wittmann }
5171cd05511SOliver-Rainer Wittmann
5181cd05511SOliver-Rainer Wittmann
SwXFieldmark(bool _isReplacementObject,::sw::mark::IMark * const pMark,SwDoc * const pDoc)5191cd05511SOliver-Rainer Wittmann SwXFieldmark::SwXFieldmark(
5201cd05511SOliver-Rainer Wittmann bool _isReplacementObject,
5211cd05511SOliver-Rainer Wittmann ::sw::mark::IMark *const pMark,
5221cd05511SOliver-Rainer Wittmann SwDoc *const pDoc )
5231cd05511SOliver-Rainer Wittmann : SwXFieldmark_Base( pMark, pDoc )
5241cd05511SOliver-Rainer Wittmann , isReplacementObject( _isReplacementObject )
5251cd05511SOliver-Rainer Wittmann {
5261cd05511SOliver-Rainer Wittmann }
5271cd05511SOliver-Rainer Wittmann
5281cd05511SOliver-Rainer Wittmann
CreateXFieldmark(SwDoc & rDoc,::sw::mark::IMark & rBookmark)5291cd05511SOliver-Rainer Wittmann uno::Reference<text::XTextContent> SwXFieldmark::CreateXFieldmark(
5301cd05511SOliver-Rainer Wittmann SwDoc & rDoc,
5311cd05511SOliver-Rainer Wittmann ::sw::mark::IMark & rBookmark )
5321cd05511SOliver-Rainer Wittmann {
5331cd05511SOliver-Rainer Wittmann // do not iterate over the registered clients: race condition
5341cd05511SOliver-Rainer Wittmann ::sw::mark::MarkBase *const pMarkBase( dynamic_cast< ::sw::mark::MarkBase * >(&rBookmark));
5351cd05511SOliver-Rainer Wittmann OSL_ENSURE(pMarkBase, "CreateXFieldmark: no MarkBase?");
5361cd05511SOliver-Rainer Wittmann if (!pMarkBase) { return 0; }
5371cd05511SOliver-Rainer Wittmann
5381cd05511SOliver-Rainer Wittmann uno::Reference<text::XTextContent> xBookmark(pMarkBase->GetXBookmark());
5391cd05511SOliver-Rainer Wittmann if (!xBookmark.is())
5401cd05511SOliver-Rainer Wittmann {
5411cd05511SOliver-Rainer Wittmann SwXFieldmark* pXFieldmark = NULL;
5421cd05511SOliver-Rainer Wittmann if ( dynamic_cast< ::sw::mark::TextFieldmark* >(&rBookmark) )
5431cd05511SOliver-Rainer Wittmann {
5441cd05511SOliver-Rainer Wittmann pXFieldmark = new SwXFieldmark( false, &rBookmark, &rDoc );
5451cd05511SOliver-Rainer Wittmann }
5461cd05511SOliver-Rainer Wittmann else if ( dynamic_cast< ::sw::mark::CheckboxFieldmark* >(&rBookmark) )
5471cd05511SOliver-Rainer Wittmann {
5481cd05511SOliver-Rainer Wittmann pXFieldmark = new SwXFieldmark( true, &rBookmark, &rDoc );
5491cd05511SOliver-Rainer Wittmann }
5501cd05511SOliver-Rainer Wittmann if ( pXFieldmark != NULL )
5511cd05511SOliver-Rainer Wittmann {
5521cd05511SOliver-Rainer Wittmann xBookmark.set( pXFieldmark );
5531cd05511SOliver-Rainer Wittmann pXFieldmark->registerInMark( pMarkBase );
5541cd05511SOliver-Rainer Wittmann }
5551cd05511SOliver-Rainer Wittmann }
5561cd05511SOliver-Rainer Wittmann return xBookmark;
5571cd05511SOliver-Rainer Wittmann }
5581cd05511SOliver-Rainer Wittmann
559cdf0e10cSrcweir
insertByName(const OUString & aName,const uno::Any & aElement)560cdf0e10cSrcweir void SwXFieldmarkParameters::insertByName(const OUString& aName, const uno::Any& aElement)
561cdf0e10cSrcweir throw (lang::IllegalArgumentException, container::ElementExistException, lang::WrappedTargetException, uno::RuntimeException)
562cdf0e10cSrcweir {
563cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
564cdf0e10cSrcweir IFieldmark::parameter_map_t* pParameters = getCoreParameters();
565cdf0e10cSrcweir if(pParameters->find(aName) != pParameters->end())
566cdf0e10cSrcweir throw container::ElementExistException();
567cdf0e10cSrcweir (*pParameters)[aName] = aElement;
568cdf0e10cSrcweir }
569cdf0e10cSrcweir
removeByName(const OUString & aName)570cdf0e10cSrcweir void SwXFieldmarkParameters::removeByName(const OUString& aName)
571cdf0e10cSrcweir throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
572cdf0e10cSrcweir {
573cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
574cdf0e10cSrcweir if(!getCoreParameters()->erase(aName))
575cdf0e10cSrcweir throw container::NoSuchElementException();
576cdf0e10cSrcweir }
577cdf0e10cSrcweir
replaceByName(const OUString & aName,const uno::Any & aElement)578cdf0e10cSrcweir void SwXFieldmarkParameters::replaceByName(const OUString& aName, const uno::Any& aElement)
579cdf0e10cSrcweir throw (lang::IllegalArgumentException, container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
580cdf0e10cSrcweir {
581cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
582cdf0e10cSrcweir IFieldmark::parameter_map_t* pParameters = getCoreParameters();
583cdf0e10cSrcweir IFieldmark::parameter_map_t::iterator pEntry = pParameters->find(aName);
584cdf0e10cSrcweir if(pEntry == pParameters->end())
585cdf0e10cSrcweir throw container::NoSuchElementException();
586cdf0e10cSrcweir pEntry->second = aElement;
587cdf0e10cSrcweir }
588cdf0e10cSrcweir
getByName(const OUString & aName)589cdf0e10cSrcweir uno::Any SwXFieldmarkParameters::getByName(const OUString& aName)
590cdf0e10cSrcweir throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
591cdf0e10cSrcweir {
592cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
593cdf0e10cSrcweir IFieldmark::parameter_map_t* pParameters = getCoreParameters();
594cdf0e10cSrcweir IFieldmark::parameter_map_t::iterator pEntry = pParameters->find(aName);
595cdf0e10cSrcweir if(pEntry == pParameters->end())
596cdf0e10cSrcweir throw container::NoSuchElementException();
597cdf0e10cSrcweir return pEntry->second;
598cdf0e10cSrcweir }
599cdf0e10cSrcweir
getElementNames()600cdf0e10cSrcweir uno::Sequence<OUString> SwXFieldmarkParameters::getElementNames()
601cdf0e10cSrcweir throw (uno::RuntimeException)
602cdf0e10cSrcweir {
603cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
604cdf0e10cSrcweir IFieldmark::parameter_map_t* pParameters = getCoreParameters();
605cdf0e10cSrcweir uno::Sequence<OUString> vResult(pParameters->size());
606cdf0e10cSrcweir OUString* pOutEntry = vResult.getArray();
607cdf0e10cSrcweir for(IFieldmark::parameter_map_t::iterator pEntry = pParameters->begin(); pEntry!=pParameters->end(); ++pEntry, ++pOutEntry)
608cdf0e10cSrcweir *pOutEntry = pEntry->first;
609cdf0e10cSrcweir return vResult;
610cdf0e10cSrcweir }
611cdf0e10cSrcweir
hasByName(const OUString & aName)612cdf0e10cSrcweir ::sal_Bool SwXFieldmarkParameters::hasByName(const OUString& aName)
613cdf0e10cSrcweir throw (uno::RuntimeException)
614cdf0e10cSrcweir {
615cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
616cdf0e10cSrcweir IFieldmark::parameter_map_t* pParameters = getCoreParameters();
617cdf0e10cSrcweir return (pParameters->find(aName) != pParameters->end());
618cdf0e10cSrcweir }
619cdf0e10cSrcweir
getElementType()620cdf0e10cSrcweir uno::Type SwXFieldmarkParameters::getElementType()
621cdf0e10cSrcweir throw (uno::RuntimeException)
622cdf0e10cSrcweir {
623cdf0e10cSrcweir return ::cppu::UnoType< ::cppu::UnoVoidType>::get();
624cdf0e10cSrcweir }
625cdf0e10cSrcweir
hasElements()626cdf0e10cSrcweir ::sal_Bool SwXFieldmarkParameters::hasElements()
627cdf0e10cSrcweir throw (uno::RuntimeException)
628cdf0e10cSrcweir {
629cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
630cdf0e10cSrcweir return !getCoreParameters()->empty();
631cdf0e10cSrcweir }
632cdf0e10cSrcweir
Modify(const SfxPoolItem * pOld,const SfxPoolItem * pNew)633cdf0e10cSrcweir void SwXFieldmarkParameters::Modify(const SfxPoolItem *pOld, const SfxPoolItem *pNew)
634cdf0e10cSrcweir {
635cdf0e10cSrcweir ClientModify(this, pOld, pNew);
636cdf0e10cSrcweir }
637cdf0e10cSrcweir
638cdf0e10cSrcweir
getCoreParameters()639cdf0e10cSrcweir IFieldmark::parameter_map_t* SwXFieldmarkParameters::getCoreParameters()
640cdf0e10cSrcweir throw (uno::RuntimeException)
641cdf0e10cSrcweir {
642cdf0e10cSrcweir const IFieldmark* pFieldmark = dynamic_cast< const IFieldmark* >(GetRegisteredIn());
643cdf0e10cSrcweir if(!pFieldmark)
644cdf0e10cSrcweir throw uno::RuntimeException();
645cdf0e10cSrcweir return const_cast< IFieldmark* >(pFieldmark)->GetParameters();
646cdf0e10cSrcweir }
647cdf0e10cSrcweir
648cdf0e10cSrcweir
attachToRange(const uno::Reference<text::XTextRange> & xTextRange)649cdf0e10cSrcweir void SwXFieldmark::attachToRange( const uno::Reference < text::XTextRange >& xTextRange )
650cdf0e10cSrcweir throw(lang::IllegalArgumentException, uno::RuntimeException)
651cdf0e10cSrcweir {
652cdf0e10cSrcweir attachToRangeEx( xTextRange,
653cdf0e10cSrcweir ( isReplacementObject ? IDocumentMarkAccess::CHECKBOX_FIELDMARK : IDocumentMarkAccess::TEXT_FIELDMARK ) );
654cdf0e10cSrcweir }
655cdf0e10cSrcweir
getFieldType(void)656cdf0e10cSrcweir ::rtl::OUString SwXFieldmark::getFieldType(void)
657cdf0e10cSrcweir throw(uno::RuntimeException)
658cdf0e10cSrcweir {
659cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
660cdf0e10cSrcweir const IFieldmark *pBkm = dynamic_cast<const IFieldmark*>(GetBookmark());
661cdf0e10cSrcweir if(!pBkm)
662cdf0e10cSrcweir throw uno::RuntimeException();
663cdf0e10cSrcweir return pBkm->GetFieldname();
664cdf0e10cSrcweir }
665cdf0e10cSrcweir
setFieldType(const::rtl::OUString & fieldType)666cdf0e10cSrcweir void SwXFieldmark::setFieldType(const::rtl::OUString & fieldType)
667cdf0e10cSrcweir throw(uno::RuntimeException)
668cdf0e10cSrcweir {
669cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
670cdf0e10cSrcweir IFieldmark *pBkm = const_cast<IFieldmark*>(
671cdf0e10cSrcweir dynamic_cast<const IFieldmark*>(GetBookmark()));
672cdf0e10cSrcweir if(!pBkm)
673cdf0e10cSrcweir throw uno::RuntimeException();
674cdf0e10cSrcweir pBkm->SetFieldname(fieldType);
675cdf0e10cSrcweir }
676cdf0e10cSrcweir
getParameters()677cdf0e10cSrcweir uno::Reference<container::XNameContainer> SwXFieldmark::getParameters()
678cdf0e10cSrcweir throw (uno::RuntimeException)
679cdf0e10cSrcweir {
680cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
681cdf0e10cSrcweir IFieldmark *pBkm = const_cast<IFieldmark*>(
682cdf0e10cSrcweir dynamic_cast<const IFieldmark*>(GetBookmark()));
683cdf0e10cSrcweir if(!pBkm)
684cdf0e10cSrcweir throw uno::RuntimeException();
685cdf0e10cSrcweir return uno::Reference<container::XNameContainer>(new SwXFieldmarkParameters(pBkm));
686cdf0e10cSrcweir }
687