xref: /trunk/main/sw/source/core/unocore/unobkm.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
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