blob: 782ee328c6ce3e44dc7767a62e45d754801561a7 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx"
#include <rtl/uuid.h>
#include <vos/mutex.hxx>
#include <vcl/svapp.hxx>
#include <comphelper/sequence.hxx>
#include <unomid.h>
#include <unofootnote.hxx>
#include <unotextrange.hxx>
#include <unotextcursor.hxx>
#include <unoparagraph.hxx>
#include <unomap.hxx>
#include <unoprnms.hxx>
#include <unoevtlstnr.hxx>
#include <doc.hxx>
#include <ftnidx.hxx>
#include <fmtftn.hxx>
#include <txtftn.hxx>
#include <ndtxt.hxx>
#include <unocrsr.hxx>
#include <hints.hxx>
using namespace ::com::sun::star;
using ::rtl::OUString;
/******************************************************************
* SwXFootnote
******************************************************************/
class SwXFootnote::Impl
: public SwClient
{
public:
SwXFootnote & m_rThis;
const bool m_bIsEndnote;
SwEventListenerContainer m_ListenerContainer;
bool m_bIsDescriptor;
const SwFmtFtn * m_pFmtFtn;
::rtl::OUString m_sLabel;
Impl( SwXFootnote & rThis,
SwDoc *const pDoc, SwFmtFtn const*const pFootnote,
const bool bIsEndnote)
: SwClient((pDoc) ? pDoc->GetUnoCallBack() : 0)
, m_rThis(rThis)
, m_bIsEndnote(bIsEndnote)
, m_ListenerContainer(static_cast< ::cppu::OWeakObject* >(&rThis))
// #i111177#: unxsols4 (Sun C++ 5.9 SunOS_sparc) generates wrong code for this
// , m_bIsDescriptor(0 == pFootnote)
, m_bIsDescriptor((0 == pFootnote) ? true : false)
, m_pFmtFtn(pFootnote)
{
}
const SwFmtFtn* GetFootnoteFormat() const {
return m_rThis.GetDoc() ? m_pFmtFtn : 0;
}
SwFmtFtn const& GetFootnoteFormatOrThrow() {
SwFmtFtn const*const pFootnote( GetFootnoteFormat() );
if (!pFootnote) {
throw uno::RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
"SwXFootnote: disposed or invalid")), 0);
}
return *pFootnote;
}
void Invalidate();
protected:
// SwClient
virtual void Modify( const SfxPoolItem *pOld, const SfxPoolItem *pNew);
};
/* -----------------------------07.01.00 12:39--------------------------------
---------------------------------------------------------------------------*/
void SwXFootnote::Impl::Invalidate()
{
if (GetRegisteredIn())
{
const_cast<SwModify*>(GetRegisteredIn())->Remove(this);
}
m_ListenerContainer.Disposing();
m_pFmtFtn = 0;
m_rThis.SetDoc(0);
}
/* -----------------18.01.99 09:12-------------------
*
* --------------------------------------------------*/
void SwXFootnote::Impl::Modify(const SfxPoolItem *pOld, const SfxPoolItem *pNew)
{
ClientModify(this, pOld, pNew);
if (!GetRegisteredIn()) // removed => dispose
{
Invalidate();
}
else if (pOld)
{
switch (pOld->Which())
{
case RES_FOOTNOTE_DELETED:
if (static_cast<const void*>(m_pFmtFtn) ==
static_cast<const SwPtrMsgPoolItem *>(pOld)->pObject)
{
Invalidate();
}
break;
}
}
}
/*-- 10.12.98 15:31:44---------------------------------------------------
-----------------------------------------------------------------------*/
SwXFootnote::SwXFootnote(const bool bEndnote)
: SwXText(0, CURSOR_FOOTNOTE)
, m_pImpl( new SwXFootnote::Impl(*this, 0, 0, bEndnote) )
{
}
/*-- 10.12.98 15:31:45---------------------------------------------------
-----------------------------------------------------------------------*/
SwXFootnote::SwXFootnote(SwDoc & rDoc, const SwFmtFtn& rFmt)
: SwXText(& rDoc, CURSOR_FOOTNOTE)
, m_pImpl( new SwXFootnote::Impl(*this, &rDoc, &rFmt, rFmt.IsEndNote()) )
{
}
/*-- 10.12.98 15:31:45---------------------------------------------------
-----------------------------------------------------------------------*/
SwXFootnote::~SwXFootnote()
{
}
SwXFootnote *
SwXFootnote::GetXFootnote(
SwModify const& /*rUnoCB*/, SwFmtFtn const& /*rFootnoteFmt*/)
{
// re-use existing SwXFootnote
// #i105557#: do not iterate over the registered clients: race condition
// to do this properly requires the SwXFootnote to register at the
// SwFmtFtn directly, not at the unocallback
// also this function must return a uno Reference!
return 0;
}
SwXFootnote *
SwXFootnote::CreateXFootnote(SwDoc & rDoc, SwFmtFtn const& rFootnoteFmt)
{
SwXFootnote *const pXFootnote(
GetXFootnote(*rDoc.GetUnoCallBack(), rFootnoteFmt));
return (pXFootnote)
? pXFootnote
: new SwXFootnote(rDoc, rFootnoteFmt);
}
/* -----------------------------13.03.00 12:15--------------------------------
---------------------------------------------------------------------------*/
const uno::Sequence< sal_Int8 > & SwXFootnote::getUnoTunnelId()
{
static uno::Sequence< sal_Int8 > aSeq = ::CreateUnoTunnelId();
return aSeq;
}
/* -----------------------------10.03.00 18:04--------------------------------
---------------------------------------------------------------------------*/
sal_Int64 SAL_CALL
SwXFootnote::getSomething(const uno::Sequence< sal_Int8 >& rId)
throw (uno::RuntimeException)
{
const sal_Int64 nRet( ::sw::UnoTunnelImpl<SwXFootnote>(rId, this) );
return (nRet) ? nRet : SwXText::getSomething(rId);
}
/* -----------------------------06.04.00 16:36--------------------------------
---------------------------------------------------------------------------*/
OUString SAL_CALL
SwXFootnote::getImplementationName() throw (uno::RuntimeException)
{
return C2U("SwXFootnote");
}
/* -----------------------------06.04.00 16:36--------------------------------
---------------------------------------------------------------------------*/
static char const*const g_ServicesFootnote[] =
{
"com.sun.star.text.TextContent",
"com.sun.star.text.Footnote",
"com.sun.star.text.Text",
"com.sun.star.text.Endnote", // NB: only supported for endnotes!
};
static const size_t g_nServicesEndnote(
sizeof(g_ServicesFootnote)/sizeof(g_ServicesFootnote[0]));
static const size_t g_nServicesFootnote( g_nServicesEndnote - 1 ); // NB: omit!
sal_Bool SAL_CALL SwXFootnote::supportsService(const OUString& rServiceName)
throw (uno::RuntimeException)
{
vos::OGuard g(Application::GetSolarMutex());
return ::sw::SupportsServiceImpl(
(m_pImpl->m_bIsEndnote) ? g_nServicesEndnote : g_nServicesFootnote,
g_ServicesFootnote, rServiceName);
}
uno::Sequence< OUString > SAL_CALL
SwXFootnote::getSupportedServiceNames() throw (uno::RuntimeException)
{
vos::OGuard g(Application::GetSolarMutex());
return ::sw::GetSupportedServiceNamesImpl(
(m_pImpl->m_bIsEndnote) ? g_nServicesEndnote : g_nServicesFootnote,
g_ServicesFootnote);
}
/* -----------------------------21.03.00 15:39--------------------------------
---------------------------------------------------------------------------*/
uno::Sequence< uno::Type > SAL_CALL
SwXFootnote::getTypes() throw (uno::RuntimeException)
{
const uno::Sequence< uno::Type > aTypes = SwXFootnote_Base::getTypes();
const uno::Sequence< uno::Type > aTextTypes = SwXText::getTypes();
return ::comphelper::concatSequences(aTypes, aTextTypes);
}
/* -----------------------------21.03.00 15:39--------------------------------
---------------------------------------------------------------------------*/
uno::Sequence< sal_Int8 > SAL_CALL
SwXFootnote::getImplementationId() throw (uno::RuntimeException)
{
vos::OGuard aGuard(Application::GetSolarMutex());
static uno::Sequence< sal_Int8 > aId( 16 );
static sal_Bool bInit = sal_False;
if(!bInit)
{
rtl_createUuid( (sal_uInt8 *)(aId.getArray() ), 0, sal_True );
bInit = sal_True;
}
return aId;
}
/* -----------------------------21.03.00 15:46--------------------------------
---------------------------------------------------------------------------*/
uno::Any SAL_CALL
SwXFootnote::queryInterface(const uno::Type& rType)
throw (uno::RuntimeException)
{
const uno::Any ret = SwXFootnote_Base::queryInterface(rType);
return (ret.getValueType() == ::getCppuVoidType())
? SwXText::queryInterface(rType)
: ret;
}
/*-- 10.12.98 15:31:47---------------------------------------------------
-----------------------------------------------------------------------*/
OUString SAL_CALL SwXFootnote::getLabel() throw (uno::RuntimeException)
{
vos::OGuard aGuard(Application::GetSolarMutex());
::rtl::OUString sRet;
SwFmtFtn const*const pFmt = m_pImpl->GetFootnoteFormat();
if(pFmt)
{
sRet = pFmt->GetNumStr();
}
else if (m_pImpl->m_bIsDescriptor)
{
sRet = m_pImpl->m_sLabel;
}
else
{
throw uno::RuntimeException();
}
return sRet;
}
/*-- 10.12.98 15:31:48---------------------------------------------------
-----------------------------------------------------------------------*/
void SAL_CALL
SwXFootnote::setLabel(const OUString& aLabel) throw (uno::RuntimeException)
{
vos::OGuard aGuard(Application::GetSolarMutex());
SwFmtFtn const*const pFmt = m_pImpl->GetFootnoteFormat();
if(pFmt)
{
const SwTxtFtn* pTxtFtn = pFmt->GetTxtFtn();
DBG_ASSERT(pTxtFtn, "kein TextNode?");
SwTxtNode& rTxtNode = (SwTxtNode&)pTxtFtn->GetTxtNode();
SwPaM aPam(rTxtNode, *pTxtFtn->GetStart());
GetDoc()->SetCurFtn(aPam, aLabel, pFmt->GetNumber(), pFmt->IsEndNote());
}
else if (m_pImpl->m_bIsDescriptor)
{
m_pImpl->m_sLabel = String(aLabel);
}
else
{
throw uno::RuntimeException();
}
}
/* -----------------18.02.99 13:32-------------------
*
* --------------------------------------------------*/
void SAL_CALL
SwXFootnote::attach(const uno::Reference< text::XTextRange > & xTextRange)
throw (lang::IllegalArgumentException, uno::RuntimeException)
{
vos::OGuard aGuard(Application::GetSolarMutex());
if (!m_pImpl->m_bIsDescriptor)
{
throw uno::RuntimeException();
}
const uno::Reference<lang::XUnoTunnel> xRangeTunnel(
xTextRange, uno::UNO_QUERY);
SwXTextRange *const pRange =
::sw::UnoTunnelGetImplementation<SwXTextRange>(xRangeTunnel);
OTextCursorHelper *const pCursor =
::sw::UnoTunnelGetImplementation<OTextCursorHelper>(xRangeTunnel);
SwDoc *const pNewDoc =
(pRange) ? pRange->GetDoc() : ((pCursor) ? pCursor->GetDoc() : 0);
if (!pNewDoc)
{
throw lang::IllegalArgumentException();
}
SwUnoInternalPaM aPam(*pNewDoc);
//das muss jetzt sal_True liefern
::sw::XTextRangeToSwPaM(aPam, xTextRange);
UnoActionContext aCont(pNewDoc);
pNewDoc->DeleteAndJoin(aPam);
aPam.DeleteMark();
SwFmtFtn aFootNote(m_pImpl->m_bIsEndnote);
if (m_pImpl->m_sLabel.getLength())
{
aFootNote.SetNumStr(m_pImpl->m_sLabel);
}
SwXTextCursor const*const pTextCursor(
dynamic_cast<SwXTextCursor*>(pCursor));
const bool bForceExpandHints( (pTextCursor)
? pTextCursor->IsAtEndOfMeta() : false );
const SetAttrMode nInsertFlags = (bForceExpandHints)
? nsSetAttrMode::SETATTR_FORCEHINTEXPAND
: nsSetAttrMode::SETATTR_DEFAULT;
pNewDoc->InsertPoolItem(aPam, aFootNote, nInsertFlags);
SwTxtFtn *const pTxtAttr = static_cast<SwTxtFtn*>(
aPam.GetNode()->GetTxtNode()->GetTxtAttrForCharAt(
aPam.GetPoint()->nContent.GetIndex()-1, RES_TXTATR_FTN ));
if (pTxtAttr)
{
const SwFmtFtn& rFtn = pTxtAttr->GetFtn();
m_pImpl->m_pFmtFtn = &rFtn;
pNewDoc->GetUnoCallBack()->Add(m_pImpl.get());
// force creation of sequence id - is used for references
if (pNewDoc->IsInReading())
{
pTxtAttr->SetSeqNo(pNewDoc->GetFtnIdxs().Count());
}
else
{
pTxtAttr->SetSeqRefNo();
}
}
m_pImpl->m_bIsDescriptor = sal_False;
SetDoc(pNewDoc);
}
/*-- 10.12.98 15:31:48---------------------------------------------------
-----------------------------------------------------------------------*/
uno::Reference< text::XTextRange > SAL_CALL
SwXFootnote::getAnchor() throw (uno::RuntimeException)
{
vos::OGuard aGuard(Application::GetSolarMutex());
SwFmtFtn const& rFmt( m_pImpl->GetFootnoteFormatOrThrow() );
SwTxtFtn const*const pTxtFtn = rFmt.GetTxtFtn();
SwPaM aPam( pTxtFtn->GetTxtNode(), *pTxtFtn->GetStart() );
SwPosition aMark( *aPam.Start() );
aPam.SetMark();
aPam.GetMark()->nContent++;
const uno::Reference< text::XTextRange > xRet =
SwXTextRange::CreateXTextRange(*GetDoc(), *aPam.Start(), aPam.End());
return xRet;
}
/*-- 10.12.98 15:31:49---------------------------------------------------
-----------------------------------------------------------------------*/
void SAL_CALL SwXFootnote::dispose() throw (uno::RuntimeException)
{
vos::OGuard aGuard(Application::GetSolarMutex());
SwFmtFtn const& rFmt( m_pImpl->GetFootnoteFormatOrThrow() );
SwTxtFtn const*const pTxtFtn = rFmt.GetTxtFtn();
DBG_ASSERT(pTxtFtn, "no TextNode?");
SwTxtNode& rTxtNode = const_cast<SwTxtNode&>(pTxtFtn->GetTxtNode());
const xub_StrLen nPos = *pTxtFtn->GetStart();
SwPaM aPam(rTxtNode, nPos, rTxtNode, nPos+1);
GetDoc()->DeleteAndJoin( aPam );
}
/*-- 10.12.98 15:31:49---------------------------------------------------
-----------------------------------------------------------------------*/
void SAL_CALL
SwXFootnote::addEventListener(
const uno::Reference< lang::XEventListener > & xListener)
throw (uno::RuntimeException)
{
vos::OGuard g(Application::GetSolarMutex());
if (!m_pImpl->GetFootnoteFormat())
{
throw uno::RuntimeException();
}
m_pImpl->m_ListenerContainer.AddListener(xListener);
}
/*-- 10.12.98 15:31:50---------------------------------------------------
-----------------------------------------------------------------------*/
void SAL_CALL
SwXFootnote::removeEventListener(
const uno::Reference< lang::XEventListener > & xListener)
throw (uno::RuntimeException)
{
vos::OGuard g(Application::GetSolarMutex());
if (!m_pImpl->GetFootnoteFormat() ||
!m_pImpl->m_ListenerContainer.RemoveListener(xListener))
{
throw uno::RuntimeException();
}
}
/* -----------------06.05.99 15:31-------------------
*
* --------------------------------------------------*/
const SwStartNode *SwXFootnote::GetStartNode() const
{
SwFmtFtn const*const pFmt = m_pImpl->GetFootnoteFormat();
if(pFmt)
{
const SwTxtFtn* pTxtFtn = pFmt->GetTxtFtn();
if( pTxtFtn )
{
return pTxtFtn->GetStartNode()->GetNode().GetStartNode();
}
}
return 0;
}
uno::Reference< text::XTextCursor >
SwXFootnote::CreateCursor() throw (uno::RuntimeException)
{
return createTextCursor();
}
/*-- 10.12.98 15:31:50---------------------------------------------------
-----------------------------------------------------------------------*/
uno::Reference< text::XTextCursor > SAL_CALL
SwXFootnote::createTextCursor() throw (uno::RuntimeException)
{
vos::OGuard aGuard(Application::GetSolarMutex());
SwFmtFtn const& rFmt( m_pImpl->GetFootnoteFormatOrThrow() );
SwTxtFtn const*const pTxtFtn = rFmt.GetTxtFtn();
SwPosition aPos( *pTxtFtn->GetStartNode() );
SwXTextCursor *const pXCursor =
new SwXTextCursor(*GetDoc(), this, CURSOR_FOOTNOTE, aPos);
SwUnoCrsr *const pUnoCrsr = pXCursor->GetCursor();
pUnoCrsr->Move(fnMoveForward, fnGoNode);
const uno::Reference< text::XTextCursor > xRet =
static_cast<text::XWordCursor*>(pXCursor);
return xRet;
}
/*-- 10.12.98 15:31:51---------------------------------------------------
-----------------------------------------------------------------------*/
uno::Reference< text::XTextCursor > SAL_CALL
SwXFootnote::createTextCursorByRange(
const uno::Reference< text::XTextRange > & xTextPosition)
throw (uno::RuntimeException)
{
vos::OGuard aGuard(Application::GetSolarMutex());
SwFmtFtn const& rFmt( m_pImpl->GetFootnoteFormatOrThrow() );
SwUnoInternalPaM aPam(*GetDoc());
if (!::sw::XTextRangeToSwPaM(aPam, xTextPosition))
{
throw uno::RuntimeException();
}
SwTxtFtn const*const pTxtFtn = rFmt.GetTxtFtn();
SwNode const*const pFtnStartNode = &pTxtFtn->GetStartNode()->GetNode();
const SwNode* pStart = aPam.GetNode()->FindFootnoteStartNode();
if (pStart != pFtnStartNode)
{
throw uno::RuntimeException();
}
const uno::Reference< text::XTextCursor > xRet =
static_cast<text::XWordCursor*>(
new SwXTextCursor(*GetDoc(), this, CURSOR_FOOTNOTE,
*aPam.GetPoint(), aPam.GetMark()));
return xRet;
}
/*-- 13.06.00 14:28:23---------------------------------------------------
-----------------------------------------------------------------------*/
uno::Reference< container::XEnumeration > SAL_CALL
SwXFootnote::createEnumeration() throw (uno::RuntimeException)
{
vos::OGuard aGuard(Application::GetSolarMutex());
SwFmtFtn const& rFmt( m_pImpl->GetFootnoteFormatOrThrow() );
SwTxtFtn const*const pTxtFtn = rFmt.GetTxtFtn();
SwPosition aPos( *pTxtFtn->GetStartNode() );
::std::auto_ptr<SwUnoCrsr> pUnoCursor(
GetDoc()->CreateUnoCrsr(aPos, sal_False));
pUnoCursor->Move(fnMoveForward, fnGoNode);
const uno::Reference< container::XEnumeration > xRet =
new SwXParagraphEnumeration(this, pUnoCursor, CURSOR_FOOTNOTE);
return xRet;
}
/*-- 13.06.00 14:28:24---------------------------------------------------
-----------------------------------------------------------------------*/
uno::Type SAL_CALL SwXFootnote::getElementType() throw (uno::RuntimeException)
{
return text::XTextRange::static_type();
}
/*-- 13.06.00 14:28:24---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SAL_CALL SwXFootnote::hasElements() throw (uno::RuntimeException)
{
return sal_True;
}
/*-- 11.09.00 13:12:03---------------------------------------------------
-----------------------------------------------------------------------*/
uno::Reference< beans::XPropertySetInfo > SAL_CALL
SwXFootnote::getPropertySetInfo()
throw (uno::RuntimeException)
{
vos::OGuard g(Application::GetSolarMutex());
static uno::Reference< beans::XPropertySetInfo > xRet =
aSwMapProvider.GetPropertySet(PROPERTY_MAP_FOOTNOTE)
->getPropertySetInfo();
return xRet;
}
/*-- 11.09.00 13:12:04---------------------------------------------------
-----------------------------------------------------------------------*/
void SAL_CALL
SwXFootnote::setPropertyValue(const ::rtl::OUString&, const uno::Any&)
throw (beans::UnknownPropertyException, beans::PropertyVetoException,
lang::IllegalArgumentException, lang::WrappedTargetException,
uno::RuntimeException)
{
//no values to be set
throw lang::IllegalArgumentException();
}
/*-- 11.09.00 13:12:04---------------------------------------------------
-----------------------------------------------------------------------*/
uno::Any SAL_CALL
SwXFootnote::getPropertyValue(const OUString& rPropertyName)
throw (beans::UnknownPropertyException, lang::WrappedTargetException,
uno::RuntimeException)
{
vos::OGuard aGuard(Application::GetSolarMutex());
uno::Any aRet;
if (! ::sw::GetDefaultTextContentValue(aRet, rPropertyName))
{
if (rPropertyName.equalsAsciiL(SW_PROP_NAME(UNO_NAME_START_REDLINE)) ||
rPropertyName.equalsAsciiL(SW_PROP_NAME(UNO_NAME_END_REDLINE)))
{
//redline can only be returned if it's a living object
if (!m_pImpl->m_bIsDescriptor)
{
aRet = SwXText::getPropertyValue(rPropertyName);
}
}
else if (rPropertyName.equalsAsciiL(
SW_PROP_NAME(UNO_NAME_REFERENCE_ID)))
{
SwFmtFtn const*const pFmt = m_pImpl->GetFootnoteFormat();
if (pFmt)
{
SwTxtFtn const*const pTxtFtn = pFmt->GetTxtFtn();
DBG_ASSERT(pTxtFtn, "no TextNode?");
aRet <<= static_cast<sal_Int16>(pTxtFtn->GetSeqRefNo());
}
}
else
{
beans::UnknownPropertyException aExcept;
aExcept.Message = rPropertyName;
throw aExcept;
}
}
return aRet;
}
/*-- 11.09.00 13:12:04---------------------------------------------------
-----------------------------------------------------------------------*/
void SAL_CALL
SwXFootnote::addPropertyChangeListener(
const ::rtl::OUString& /*rPropertyName*/,
const uno::Reference< beans::XPropertyChangeListener >& /*xListener*/)
throw (beans::UnknownPropertyException, lang::WrappedTargetException,
uno::RuntimeException)
{
OSL_ENSURE(false,
"SwXFootnote::addPropertyChangeListener(): not implemented");
}
void SAL_CALL
SwXFootnote::removePropertyChangeListener(
const ::rtl::OUString& /*rPropertyName*/,
const uno::Reference< beans::XPropertyChangeListener >& /*xListener*/)
throw (beans::UnknownPropertyException, lang::WrappedTargetException,
uno::RuntimeException)
{
OSL_ENSURE(false,
"SwXFootnote::removePropertyChangeListener(): not implemented");
}
void SAL_CALL
SwXFootnote::addVetoableChangeListener(
const ::rtl::OUString& /*rPropertyName*/,
const uno::Reference< beans::XVetoableChangeListener >& /*xListener*/)
throw (beans::UnknownPropertyException, lang::WrappedTargetException,
uno::RuntimeException)
{
OSL_ENSURE(false,
"SwXFootnote::addVetoableChangeListener(): not implemented");
}
void SAL_CALL
SwXFootnote::removeVetoableChangeListener(
const ::rtl::OUString& /*rPropertyName*/,
const uno::Reference< beans::XVetoableChangeListener >& /*xListener*/)
throw (beans::UnknownPropertyException, lang::WrappedTargetException,
uno::RuntimeException)
{
OSL_ENSURE(false,
"SwXFootnote::removeVetoableChangeListener(): not implemented");
}