[Libreoffice-commits] .: 33 commits - sc/inc sc/qa sc/source
Kohei Yoshida
kohei at kemper.freedesktop.org
Thu Apr 26 06:57:50 PDT 2012
sc/inc/editsrc.hxx | 95 --
sc/inc/fielduno.hxx | 269 +----
sc/inc/textuno.hxx | 67 -
sc/qa/unoapi/sc.sce | 4
sc/source/ui/Accessibility/AccessibleText.cxx | 2
sc/source/ui/inc/AccessibleText.hxx | 8
sc/source/ui/unoobj/cellsuno.cxx | 34
sc/source/ui/unoobj/editsrc.cxx | 117 --
sc/source/ui/unoobj/fielduno.cxx | 1230 +++++++++-----------------
sc/source/ui/unoobj/servuno.cxx | 41
sc/source/ui/unoobj/shapeuno.cxx | 2
sc/source/ui/unoobj/textuno.cxx | 172 +--
12 files changed, 774 insertions(+), 1267 deletions(-)
New commits:
commit 01ec4ba36a1a14a04d508b74fa94b1c8b57a0b4a
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Thu Apr 26 09:52:18 2012 -0400
Temporarily disable test Java API tests that cause crash-on-exit.
The tests themselves do pass, however. The crash is caused by some
sort of cleanup, due to someone calling a pure virtual function or
some such.
I'll work on converting these tests into C++.
diff --git a/sc/qa/unoapi/sc.sce b/sc/qa/unoapi/sc.sce
index 4d6b1d4..c7e0939 100644
--- a/sc/qa/unoapi/sc.sce
+++ b/sc/qa/unoapi/sc.sce
@@ -23,7 +23,7 @@
-o sc.ScAutoFormatObj
-o sc.ScAutoFormatsObj
-o sc.ScCellCursorObj
--o sc.ScCellFieldObj
+# TODO crash on exit. -o sc.ScCellFieldObj
-o sc.ScCellFieldsObj
-o sc.ScCellFormatsEnumeration
-o sc.ScCellFormatsObj
@@ -55,7 +55,7 @@
-o sc.ScDrawPagesObj
-o sc.ScFilterDescriptorBase
-o sc.ScFunctionListObj
--o sc.ScHeaderFieldObj
+# TODO crash on exit -o sc.ScHeaderFieldObj
-o sc.ScHeaderFieldsObj
-o sc.ScHeaderFooterContentObj
-o sc.ScHeaderFooterTextCursor
commit 937a8682dbe07034d0fc423287c06ed2a8e78278
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Thu Apr 26 00:43:01 2012 -0400
Fixed API Test for ScHeaderFooterTextCursor.
diff --git a/sc/source/ui/unoobj/textuno.cxx b/sc/source/ui/unoobj/textuno.cxx
index 53de44f..87f241e 100644
--- a/sc/source/ui/unoobj/textuno.cxx
+++ b/sc/source/ui/unoobj/textuno.cxx
@@ -265,7 +265,6 @@ void ScHeaderFooterTextData::UpdateData()
{
delete mpTextObj;
mpTextObj = pEditEngine->CreateTextObject();
- bDataValid = false;
}
}
commit 9220cf55396795cb710633aedb63f10e9edcaf9f
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 23:12:24 2012 -0400
Fixed API test.
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index ecc660e..fcc5f3b 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -778,17 +778,7 @@ uno::Any ScEditFieldObj::getPropertyValueURL(const rtl::OUString& rName)
// anchor type is always "as character", text wrap always "none"
- if (rName == SC_UNONAME_ANCTYPE)
- aRet <<= text::TextContentAnchorType_AS_CHARACTER;
- else if (rName == SC_UNONAME_ANCTYPES)
- {
- uno::Sequence<text::TextContentAnchorType> aSeq(1);
- aSeq[0] = text::TextContentAnchorType_AS_CHARACTER;
- aRet <<= aSeq;
- }
- else if (rName == SC_UNONAME_TEXTWRAP)
- aRet <<= text::WrapTextMode_NONE;
- else if (mpEditSource)
+ if (mpEditSource)
{
//! Feld-Funktionen muessen an den Forwarder !!!
ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
@@ -1082,6 +1072,27 @@ uno::Any SAL_CALL ScEditFieldObj::getPropertyValue( const rtl::OUString& aProper
uno::RuntimeException)
{
SolarMutexGuard aGuard;
+ if (aPropertyName == SC_UNONAME_ANCTYPE)
+ {
+ uno::Any aRet;
+ aRet <<= text::TextContentAnchorType_AS_CHARACTER;
+ return aRet;
+ }
+ else if (aPropertyName == SC_UNONAME_ANCTYPES)
+ {
+ uno::Any aRet;
+ uno::Sequence<text::TextContentAnchorType> aSeq(1);
+ aSeq[0] = text::TextContentAnchorType_AS_CHARACTER;
+ aRet <<= aSeq;
+ return aRet;
+ }
+ else if (aPropertyName == SC_UNONAME_TEXTWRAP)
+ {
+ uno::Any aRet;
+ aRet <<= text::WrapTextMode_NONE;
+ return aRet;
+ }
+
switch (meType)
{
case URL:
commit e39974617f4a41c6bae23846a2ccadda4042f021
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 19:11:06 2012 -0400
Adjust class description.
diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx
index 82ce9c8..7c237b2 100644
--- a/sc/inc/fielduno.hxx
+++ b/sc/inc/fielduno.hxx
@@ -198,8 +198,8 @@ public:
};
/**
- * Generic UNO wrapper for edit engine's field item. This will eventually
- * replace ScCellFieldObj and ScHeaderFieldObj.
+ * Generic UNO wrapper for edit engine's field item in cells, headers, and
+ * footers.
*/
class ScEditFieldObj : public cppu::WeakImplHelper4<
com::sun::star::text::XTextField,
commit a262e46b6bddc7d819296cf49f84d18f80fdbdad
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 19:09:53 2012 -0400
ScHeaderFieldObj is no more.
diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx
index 80efb24..82ce9c8 100644
--- a/sc/inc/fielduno.hxx
+++ b/sc/inc/fielduno.hxx
@@ -197,132 +197,6 @@ public:
throw(::com::sun::star::uno::RuntimeException);
};
-
-class ScHeaderFieldObj : public ScMutexHelper,
- public ::cppu::OComponentHelper,
- public ::com::sun::star::text::XTextField,
- public ::com::sun::star::beans::XPropertySet,
- public ::com::sun::star::lang::XUnoTunnel,
- public ::com::sun::star::lang::XServiceInfo
-{
-private:
- const SfxItemPropertySet* pPropSet;
- com::sun::star::uno::Reference<com::sun::star::text::XTextRange> mpContent;
- sal_uInt16 nType;
- ScEditSource* mpEditSource;
- ESelection aSelection;
- sal_Int16 nFileFormat; // enum SvxFileFormat, valid if not inserted
-
- ScHeaderFieldObj(); // disabled
-public:
- ScHeaderFieldObj(
- const com::sun::star::uno::Reference<com::sun::star::text::XTextRange>& rContent,
- ScEditSource* pEditSrc, sal_uInt16 nT, const ESelection& rSel);
- virtual ~ScHeaderFieldObj();
-
- // called by getImplementation:
- void DeleteField();
- sal_Bool IsInserted() const { return mpEditSource != NULL; }
- SvxFieldItem CreateFieldItem();
- void InitDoc(
- const com::sun::star::uno::Reference<com::sun::star::text::XTextRange>& rContent,
- ScEditSource* pEditSrc, const ESelection& rSel);
-
- virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(
- const ::com::sun::star::uno::Type & rType )
- throw(::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
- const ::com::sun::star::uno::Type & rType )
- throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL acquire() throw();
- virtual void SAL_CALL release() throw();
-
- // XTextField
- virtual ::rtl::OUString SAL_CALL getPresentation( sal_Bool bShowCommand )
- throw(::com::sun::star::uno::RuntimeException);
-
- // XTextContent
- virtual void SAL_CALL attach( const ::com::sun::star::uno::Reference<
- ::com::sun::star::text::XTextRange >& xTextRange )
- throw(::com::sun::star::lang::IllegalArgumentException,
- ::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL
- getAnchor() throw(::com::sun::star::uno::RuntimeException);
-
- // XComponent
- virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference<
- ::com::sun::star::lang::XEventListener >& xListener )
- throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference<
- ::com::sun::star::lang::XEventListener >& aListener )
- throw(::com::sun::star::uno::RuntimeException);
-
- // XPropertySet
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
- SAL_CALL getPropertySetInfo()
- throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName,
- const ::com::sun::star::uno::Any& aValue )
- throw(::com::sun::star::beans::UnknownPropertyException,
- ::com::sun::star::beans::PropertyVetoException,
- ::com::sun::star::lang::IllegalArgumentException,
- ::com::sun::star::lang::WrappedTargetException,
- ::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
- const ::rtl::OUString& PropertyName )
- throw(::com::sun::star::beans::UnknownPropertyException,
- ::com::sun::star::lang::WrappedTargetException,
- ::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName,
- const ::com::sun::star::uno::Reference<
- ::com::sun::star::beans::XPropertyChangeListener >& xListener )
- throw(::com::sun::star::beans::UnknownPropertyException,
- ::com::sun::star::lang::WrappedTargetException,
- ::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName,
- const ::com::sun::star::uno::Reference<
- ::com::sun::star::beans::XPropertyChangeListener >& aListener )
- throw(::com::sun::star::beans::UnknownPropertyException,
- ::com::sun::star::lang::WrappedTargetException,
- ::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName,
- const ::com::sun::star::uno::Reference<
- ::com::sun::star::beans::XVetoableChangeListener >& aListener )
- throw(::com::sun::star::beans::UnknownPropertyException,
- ::com::sun::star::lang::WrappedTargetException,
- ::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName,
- const ::com::sun::star::uno::Reference<
- ::com::sun::star::beans::XVetoableChangeListener >& aListener )
- throw(::com::sun::star::beans::UnknownPropertyException,
- ::com::sun::star::lang::WrappedTargetException,
- ::com::sun::star::uno::RuntimeException);
-
- // XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence<
- sal_Int8 >& aIdentifier )
- throw(::com::sun::star::uno::RuntimeException);
-
- static const com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId();
- static ScHeaderFieldObj* getImplementation( const com::sun::star::uno::Reference<
- com::sun::star::text::XTextContent> xObj );
-
- // XServiceInfo
- virtual ::rtl::OUString SAL_CALL getImplementationName()
- throw(::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
- throw(::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
- throw(::com::sun::star::uno::RuntimeException);
-
- // XTypeProvider
- virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
- throw(::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
- throw(::com::sun::star::uno::RuntimeException);
-};
-
/**
* Generic UNO wrapper for edit engine's field item. This will eventually
* replace ScCellFieldObj and ScHeaderFieldObj.
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index 42a137d..ecc660e 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -102,6 +102,30 @@ const SfxItemPropertySet* lcl_GetFileFieldPropertySet()
return &aFileFieldPropertySet_Impl;
}
+SvxFileFormat lcl_UnoToSvxFileFormat( sal_Int16 nUnoValue )
+{
+ switch( nUnoValue )
+ {
+ case text::FilenameDisplayFormat::FULL: return SVXFILEFORMAT_FULLPATH;
+ case text::FilenameDisplayFormat::PATH: return SVXFILEFORMAT_PATH;
+ case text::FilenameDisplayFormat::NAME: return SVXFILEFORMAT_NAME;
+ default:
+ return SVXFILEFORMAT_NAME_EXT;
+ }
+}
+
+sal_Int16 lcl_SvxToUnoFileFormat( SvxFileFormat nSvxValue )
+{
+ switch( nSvxValue )
+ {
+ case SVXFILEFORMAT_NAME_EXT: return text::FilenameDisplayFormat::NAME_AND_EXT;
+ case SVXFILEFORMAT_FULLPATH: return text::FilenameDisplayFormat::FULL;
+ case SVXFILEFORMAT_PATH: return text::FilenameDisplayFormat::PATH;
+ default:
+ return text::FilenameDisplayFormat::NAME;
+ }
+}
+
ScEditFieldObj::FieldType getFieldType(sal_uInt16 nSvxType)
{
switch (nSvxType)
@@ -136,8 +160,6 @@ ScEditFieldObj::FieldType getFieldType(sal_uInt16 nSvxType)
}
-//------------------------------------------------------------------------
-
#define SCTEXTFIELD_SERVICE "com.sun.star.text.TextField"
#define SCTEXTCONTENT_SERVICE "com.sun.star.text.TextContent"
@@ -642,412 +664,6 @@ void SAL_CALL ScHeaderFieldsObj::removeRefreshListener( const uno::Reference<uti
}
}
-//------------------------------------------------------------------------
-
-SvxFileFormat lcl_UnoToSvxFileFormat( sal_Int16 nUnoValue )
-{
- switch( nUnoValue )
- {
- case text::FilenameDisplayFormat::FULL: return SVXFILEFORMAT_FULLPATH;
- case text::FilenameDisplayFormat::PATH: return SVXFILEFORMAT_PATH;
- case text::FilenameDisplayFormat::NAME: return SVXFILEFORMAT_NAME;
- default:
- return SVXFILEFORMAT_NAME_EXT;
- }
-}
-
-sal_Int16 lcl_SvxToUnoFileFormat( SvxFileFormat nSvxValue )
-{
- switch( nSvxValue )
- {
- case SVXFILEFORMAT_NAME_EXT: return text::FilenameDisplayFormat::NAME_AND_EXT;
- case SVXFILEFORMAT_FULLPATH: return text::FilenameDisplayFormat::FULL;
- case SVXFILEFORMAT_PATH: return text::FilenameDisplayFormat::PATH;
- default:
- return text::FilenameDisplayFormat::NAME;
- }
-}
-
-ScHeaderFieldObj::ScHeaderFieldObj(
- const uno::Reference<text::XTextRange>& rContent,
- ScEditSource* pEditSrc, sal_uInt16 nT, const ESelection& rSel) :
- OComponentHelper( getMutex() ),
- pPropSet( (nT == SC_SERVICE_FILEFIELD) ? lcl_GetFileFieldPropertySet() : lcl_GetHeaderFieldPropertySet() ),
- mpContent(rContent),
- nType( nT ),
- mpEditSource(pEditSrc),
- aSelection( rSel ),
- nFileFormat( SVXFILEFORMAT_NAME_EXT )
-{
-}
-
-uno::Any SAL_CALL ScHeaderFieldObj::queryAggregation( const uno::Type& rType )
- throw(uno::RuntimeException)
-{
- SC_QUERYINTERFACE( text::XTextField )
- SC_QUERYINTERFACE( text::XTextContent ) // parent of XTextField
- SC_QUERYINTERFACE( beans::XPropertySet )
- SC_QUERYINTERFACE( lang::XUnoTunnel )
- SC_QUERYINTERFACE( lang::XServiceInfo )
-
- return OComponentHelper::queryAggregation( rType ); // XComponent
-}
-
-uno::Sequence<uno::Type> SAL_CALL ScHeaderFieldObj::getTypes() throw(uno::RuntimeException)
-{
- static uno::Sequence<uno::Type> aTypes;
- if ( aTypes.getLength() == 0 )
- {
- uno::Sequence<uno::Type> aParentTypes(OComponentHelper::getTypes());
- long nParentLen = aParentTypes.getLength();
- const uno::Type* pParentPtr = aParentTypes.getConstArray();
-
- aTypes.realloc( nParentLen + 4 );
- uno::Type* pPtr = aTypes.getArray();
- pPtr[nParentLen + 0] = getCppuType((const uno::Reference<text::XTextField>*)0);
- pPtr[nParentLen + 1] = getCppuType((const uno::Reference<beans::XPropertySet>*)0);
- pPtr[nParentLen + 2] = getCppuType((const uno::Reference<lang::XUnoTunnel>*)0);
- pPtr[nParentLen + 3] = getCppuType((const uno::Reference<lang::XServiceInfo>*)0);
-
- for (long i=0; i<nParentLen; i++)
- pPtr[i] = pParentPtr[i]; // parent types first
- }
- return aTypes;
-}
-
-namespace
-{
- class theScHeaderFieldObjImplementationId : public rtl::Static< UnoTunnelIdInit, theScHeaderFieldObjImplementationId > {};
-}
-
-uno::Sequence<sal_Int8> SAL_CALL ScHeaderFieldObj::getImplementationId()
- throw(uno::RuntimeException)
-{
- return theScHeaderFieldObjImplementationId::get().getSeq();
-}
-
-uno::Any SAL_CALL ScHeaderFieldObj::queryInterface( const uno::Type& rType )
- throw(uno::RuntimeException)
-{
- return OComponentHelper::queryInterface( rType );
-}
-
-void SAL_CALL ScHeaderFieldObj::acquire() throw()
-{
- OComponentHelper::acquire();
-}
-
-void SAL_CALL ScHeaderFieldObj::release() throw()
-{
- OComponentHelper::release();
-}
-
-void ScHeaderFieldObj::InitDoc(
- const uno::Reference<text::XTextRange>& rContent, ScEditSource* pEditSrc, const ESelection& rSel)
-{
- if (!mpEditSource)
- {
- mpEditSource = pEditSrc;
- aSelection = rSel;
- mpContent = rContent;
- }
-}
-
-ScHeaderFieldObj::~ScHeaderFieldObj()
-{
- delete mpEditSource;
-}
-
-// per getImplementation gerufen:
-
-SvxFieldItem ScHeaderFieldObj::CreateFieldItem()
-{
- OSL_ENSURE( !mpEditSource, "CreateFieldItem mit eingefuegtem Feld" );
-
- switch (nType)
- {
- case SC_SERVICE_PAGEFIELD:
- {
- SvxPageField aField;
- return SvxFieldItem( aField, EE_FEATURE_FIELD );
- }
- case SC_SERVICE_PAGESFIELD:
- {
- SvxPagesField aField;
- return SvxFieldItem( aField, EE_FEATURE_FIELD );
- }
- case SC_SERVICE_DATEFIELD:
- {
- SvxDateField aField;
- return SvxFieldItem( aField, EE_FEATURE_FIELD );
- }
- case SC_SERVICE_TIMEFIELD:
- {
- SvxTimeField aField;
- return SvxFieldItem( aField, EE_FEATURE_FIELD );
- }
- case SC_SERVICE_TITLEFIELD:
- {
- SvxFileField aField;
- return SvxFieldItem( aField, EE_FEATURE_FIELD );
- }
- case SC_SERVICE_FILEFIELD:
- {
- SvxExtFileField aField;
- aField.SetFormat( (SvxFileFormat) nFileFormat );
- return SvxFieldItem( aField, EE_FEATURE_FIELD );
- }
- case SC_SERVICE_SHEETFIELD:
- {
- SvxTableField aField;
- return SvxFieldItem( aField, EE_FEATURE_FIELD );
- }
- }
-
- return SvxFieldItem( SvxFieldData(), EE_FEATURE_FIELD );
-}
-
-void ScHeaderFieldObj::DeleteField()
-{
- if (mpEditSource)
- {
- SvxTextForwarder* pForwarder = mpEditSource->GetTextForwarder();
- pForwarder->QuickInsertText( String(), aSelection );
- mpEditSource->UpdateData();
-
- aSelection.nEndPara = aSelection.nStartPara;
- aSelection.nEndPos = aSelection.nStartPos;
-
- //! Broadcast, um Selektion in anderen Objekten anzupassen
- //! (auch bei anderen Aktionen)
- }
-}
-
-// XTextField
-
-rtl::OUString SAL_CALL ScHeaderFieldObj::getPresentation( sal_Bool /* bShowCommand */ )
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- String aRet;
-
- if (mpEditSource)
- {
- // Feld von der EditEngine formatieren lassen, bShowCommand gibt's nicht
-
- SvxTextForwarder* pForwarder = mpEditSource->GetTextForwarder();
- aRet = pForwarder->GetText( aSelection );
- }
-
- return aRet;
-}
-
-// XTextContent
-
-void SAL_CALL ScHeaderFieldObj::attach( const uno::Reference<text::XTextRange>& xTextRange )
- throw(lang::IllegalArgumentException, uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if (xTextRange.is())
- {
- uno::Reference<text::XText> xText(xTextRange->getText());
- if (xText.is())
- {
- xText->insertTextContent( xTextRange, this, sal_True );
- }
- }
-}
-
-uno::Reference<text::XTextRange> SAL_CALL ScHeaderFieldObj::getAnchor() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- return mpContent;
-}
-
-// XComponent
-
-void SAL_CALL ScHeaderFieldObj::dispose() throw(uno::RuntimeException)
-{
- OComponentHelper::dispose();
-}
-
-void SAL_CALL ScHeaderFieldObj::addEventListener(
- const uno::Reference<lang::XEventListener>& xListener )
- throw(uno::RuntimeException)
-{
- OComponentHelper::addEventListener( xListener );
-}
-
-void SAL_CALL ScHeaderFieldObj::removeEventListener(
- const uno::Reference<lang::XEventListener>& xListener )
- throw(uno::RuntimeException)
-{
- OComponentHelper::removeEventListener( xListener );
-}
-
-// XPropertySet
-
-uno::Reference<beans::XPropertySetInfo> SAL_CALL ScHeaderFieldObj::getPropertySetInfo()
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if (nType == SC_SERVICE_FILEFIELD)
- {
- // file field has different properties
- static uno::Reference<beans::XPropertySetInfo> aFileFieldInfo = pPropSet->getPropertySetInfo();
- return aFileFieldInfo;
- }
- else
- {
- static uno::Reference<beans::XPropertySetInfo> aRef = pPropSet->getPropertySetInfo();
- return aRef;
- }
-}
-
-void SAL_CALL ScHeaderFieldObj::setPropertyValue(
- const rtl::OUString& aPropertyName, const uno::Any& aValue )
- throw(beans::UnknownPropertyException, beans::PropertyVetoException,
- lang::IllegalArgumentException, lang::WrappedTargetException,
- uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- String aNameString(aPropertyName);
- if ( nType == SC_SERVICE_FILEFIELD && aNameString.EqualsAscii( SC_UNONAME_FILEFORM ) )
- {
- sal_Int16 nIntVal = 0;
- if ( aValue >>= nIntVal )
- {
- SvxFileFormat eFormat = lcl_UnoToSvxFileFormat( nIntVal );
- if (mpEditSource)
- {
- ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)mpEditSource)->GetEditEngine();
- ScUnoEditEngine aTempEngine(pEditEngine);
- SvxFieldData* pField = aTempEngine.FindByPos(
- aSelection.nStartPara, aSelection.nStartPos, TYPE(SvxExtFileField) );
- OSL_ENSURE(pField,"setPropertyValue: Field not found");
- if (pField)
- {
- SvxExtFileField* pExtFile = (SvxExtFileField*)pField; // local to the ScUnoEditEngine
- pExtFile->SetFormat( eFormat );
- pEditEngine->QuickInsertField( SvxFieldItem(*pField, EE_FEATURE_FIELD), aSelection );
- mpEditSource->UpdateData();
- }
- }
- else
- nFileFormat = sal::static_int_cast<sal_Int16>(eFormat); // not inserted yet - store value
- }
- }
-}
-
-uno::Any SAL_CALL ScHeaderFieldObj::getPropertyValue( const rtl::OUString& aPropertyName )
- throw(beans::UnknownPropertyException, lang::WrappedTargetException,
- uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- //! Properties?
- uno::Any aRet;
- String aNameString(aPropertyName);
-
- // anchor type is always "as character", text wrap always "none"
-
- if ( aNameString.EqualsAscii( SC_UNONAME_ANCTYPE ) )
- aRet <<= text::TextContentAnchorType_AS_CHARACTER;
- else if ( aNameString.EqualsAscii( SC_UNONAME_ANCTYPES ) )
- {
- uno::Sequence<text::TextContentAnchorType> aSeq(1);
- aSeq[0] = text::TextContentAnchorType_AS_CHARACTER;
- aRet <<= aSeq;
- }
- else if ( aNameString.EqualsAscii( SC_UNONAME_TEXTWRAP ) )
- aRet <<= text::WrapTextMode_NONE;
- else if ( nType == SC_SERVICE_FILEFIELD && aNameString.EqualsAscii( SC_UNONAME_FILEFORM ) )
- {
- SvxFileFormat eFormat = SVXFILEFORMAT_NAME_EXT;
- if (mpEditSource)
- {
- ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)mpEditSource)->GetEditEngine();
- ScUnoEditEngine aTempEngine(pEditEngine);
- SvxFieldData* pField = aTempEngine.FindByPos(
- aSelection.nStartPara, aSelection.nStartPos, TYPE(SvxExtFileField) );
- OSL_ENSURE(pField,"setPropertyValue: Field not found");
- if (pField)
- {
- const SvxExtFileField* pExtFile = (const SvxExtFileField*)pField;
- eFormat = pExtFile->GetFormat();
- }
- }
- else
- eFormat = (SvxFileFormat) nFileFormat; // not inserted yet - use stored value
-
- sal_Int16 nIntVal = lcl_SvxToUnoFileFormat( eFormat );
- aRet <<= nIntVal;
- }
-
- return aRet;
-}
-
-SC_IMPL_DUMMY_PROPERTY_LISTENER( ScHeaderFieldObj )
-
-// XUnoTunnel
-
-sal_Int64 SAL_CALL ScHeaderFieldObj::getSomething(
- const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException)
-{
- if ( rId.getLength() == 16 &&
- 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
- rId.getConstArray(), 16 ) )
- {
- return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(this));
- }
- return 0;
-}
-
-namespace
-{
- class theScHeaderFieldObjUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theScHeaderFieldObjUnoTunnelId> {};
-}
-
-const uno::Sequence<sal_Int8>& ScHeaderFieldObj::getUnoTunnelId()
-{
- return theScHeaderFieldObjUnoTunnelId::get().getSeq();
-}
-
-ScHeaderFieldObj* ScHeaderFieldObj::getImplementation(
- const uno::Reference<text::XTextContent> xObj )
-{
- ScHeaderFieldObj* pRet = NULL;
- uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY );
- if (xUT.is())
- pRet = reinterpret_cast<ScHeaderFieldObj*>(sal::static_int_cast<sal_IntPtr>(xUT->getSomething(getUnoTunnelId())));
- return pRet;
-}
-
-// XServiceInfo
-
-rtl::OUString SAL_CALL ScHeaderFieldObj::getImplementationName() throw(uno::RuntimeException)
-{
- return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ScHeaderFieldObj" ));
-}
-
-sal_Bool SAL_CALL ScHeaderFieldObj::supportsService( const rtl::OUString& rServiceName )
- throw(uno::RuntimeException)
-{
- String aServiceStr( rServiceName );
- return aServiceStr.EqualsAscii( SCTEXTFIELD_SERVICE ) ||
- aServiceStr.EqualsAscii( SCTEXTCONTENT_SERVICE );
-}
-
-uno::Sequence<rtl::OUString> SAL_CALL ScHeaderFieldObj::getSupportedServiceNames()
- throw(uno::RuntimeException)
-{
- uno::Sequence<rtl::OUString> aRet(2);
- rtl::OUString* pArray = aRet.getArray();
- pArray[0] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( SCTEXTFIELD_SERVICE ));
- pArray[1] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( SCTEXTCONTENT_SERVICE ));
- return aRet;
-}
-
SvxFieldData* ScEditFieldObj::getData()
{
if (!mpData)
commit 1aa91a2d8e7db5cebff5b47f3005f1acff64d25e
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 19:02:25 2012 -0400
Infer the field type for cell field objects too.
Thereby laying down the foundation for arbitrary field support in cells.
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index 383e136..42a137d 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -55,7 +55,7 @@
using namespace com::sun::star;
-//------------------------------------------------------------------------
+namespace {
// alles ohne Which-ID, Map nur fuer PropertySetInfo
@@ -102,6 +102,40 @@ const SfxItemPropertySet* lcl_GetFileFieldPropertySet()
return &aFileFieldPropertySet_Impl;
}
+ScEditFieldObj::FieldType getFieldType(sal_uInt16 nSvxType)
+{
+ switch (nSvxType)
+ {
+ case SVX_DATEFIELD:
+ return ScEditFieldObj::Date;
+ case SVX_URLFIELD:
+ return ScEditFieldObj::URL;
+ case SVX_PAGEFIELD:
+ return ScEditFieldObj::Page;
+ case SVX_PAGESFIELD:
+ return ScEditFieldObj::Pages;
+ case SVX_TIMEFIELD:
+ return ScEditFieldObj::Time;
+ case SVX_FILEFIELD:
+ return ScEditFieldObj::Title;
+ case SVX_TABLEFIELD:
+ return ScEditFieldObj::Sheet;
+ case SVX_EXT_FILEFIELD:
+ return ScEditFieldObj::File;
+ case SVX_EXT_TIMEFIELD:
+ case SVX_AUTHORFIELD:
+ case SVX_HEADERFIELD:
+ case SVX_FOOTERFIELD:
+ case SVX_DATEFIMEFIELD:
+ // These are not supported yet.
+ default:
+ ;
+ }
+ return ScEditFieldObj::URL; // Default to URL for no good reason.
+}
+
+}
+
//------------------------------------------------------------------------
#define SCTEXTFIELD_SERVICE "com.sun.star.text.TextField"
@@ -297,12 +331,16 @@ uno::Reference<text::XTextField> ScCellFieldsObj::GetObjectByIndex_Impl(sal_Int3
if (!pData)
return uno::Reference<text::XTextField>();
+ // Get the parent text range instance.
+ uno::Reference<text::XTextRange> xContent(new ScCellObj(pDocShell, aCellPos));
+
sal_uInt16 nPar = aTempEngine.GetFieldPar();
xub_StrLen nPos = aTempEngine.GetFieldPos();
ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Feld ist 1 Zeichen
- uno::Reference<text::XTextRange> xContent(new ScCellObj(pDocShell, aCellPos));
+
+ ScEditFieldObj::FieldType eType = getFieldType(pData->GetClassId());
uno::Reference<text::XTextField> xRet(
- new ScEditFieldObj(xContent, new ScCellEditSource(pDocShell, aCellPos), ScEditFieldObj::URL, aSelection));
+ new ScEditFieldObj(xContent, new ScCellEditSource(pDocShell, aCellPos), eType, aSelection));
return xRet;
}
@@ -452,42 +490,6 @@ ScHeaderFieldsObj::~ScHeaderFieldsObj()
// XIndexAccess (via XTextFields)
-namespace {
-
-ScEditFieldObj::FieldType getFieldType(sal_uInt16 nOldType)
-{
- switch (nOldType)
- {
- case SVX_DATEFIELD:
- return ScEditFieldObj::Date;
- case SVX_URLFIELD:
- return ScEditFieldObj::URL;
- case SVX_PAGEFIELD:
- return ScEditFieldObj::Page;
- case SVX_PAGESFIELD:
- return ScEditFieldObj::Pages;
- case SVX_TIMEFIELD:
- return ScEditFieldObj::Time;
- case SVX_FILEFIELD:
- return ScEditFieldObj::Title;
- case SVX_TABLEFIELD:
- return ScEditFieldObj::Sheet;
- case SVX_EXT_FILEFIELD:
- return ScEditFieldObj::File;
- case SVX_EXT_TIMEFIELD:
- case SVX_AUTHORFIELD:
- case SVX_HEADERFIELD:
- case SVX_FOOTERFIELD:
- case SVX_DATEFIMEFIELD:
- // These are not supported yet.
- default:
- ;
- }
- return ScEditFieldObj::URL; // Default to URL for no good reason.
-}
-
-}
-
uno::Reference<text::XTextField> ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
{
//! Feld-Funktionen muessen an den Forwarder !!!
@@ -498,15 +500,12 @@ uno::Reference<text::XTextField> ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_In
if (!pData)
return NULL;
- sal_uInt16 nPar = aTempEngine.GetFieldPar();
- xub_StrLen nPos = aTempEngine.GetFieldPos();
-
- ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Field is 1 character
+ // Get the parent text range instance.
uno::Reference<text::XTextRange> xTextRange;
ScHeaderFooterContentObj& rContentObj = mrData.GetContentObj();
uno::Reference<text::XText> xText;
sal_uInt16 nPart = mrData.GetPart();
- if ( nPart == SC_HDFT_LEFT )
+ if (nPart == SC_HDFT_LEFT)
xText = rContentObj.getLeftText();
else if (nPart == SC_HDFT_CENTER)
xText = rContentObj.getCenterText();
@@ -515,8 +514,12 @@ uno::Reference<text::XTextField> ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_In
uno::Reference<text::XTextRange> xTemp(xText, uno::UNO_QUERY);
xTextRange = xTemp;
- ScEditFieldObj::FieldType eRealType = getFieldType(pData->GetClassId());
+ sal_uInt16 nPar = aTempEngine.GetFieldPar();
+ xub_StrLen nPos = aTempEngine.GetFieldPos();
+ ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Field is 1 character
+
+ ScEditFieldObj::FieldType eRealType = getFieldType(pData->GetClassId());
uno::Reference<text::XTextField> xRet(
new ScEditFieldObj(xTextRange, new ScHeaderFooterEditSource(mrData), eRealType, aSelection));
return xRet;
commit fb43bca9085d841a1196b168fa7c8c09b97e8b8a
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 16:05:29 2012 -0400
Make GetObjectByIndex_Impl consistent.
diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx
index 5720194..80efb24 100644
--- a/sc/inc/fielduno.hxx
+++ b/sc/inc/fielduno.hxx
@@ -146,7 +146,9 @@ private:
/// mutex to lock the InterfaceContainerHelper
osl::Mutex aMutex;
- ScEditFieldObj* GetObjectByIndex_Impl(sal_Int32 Index) const;
+ com::sun::star::uno::Reference<
+ com::sun::star::text::XTextField>
+ GetObjectByIndex_Impl(sal_Int32 Index) const;
public:
ScHeaderFieldsObj(ScHeaderFooterTextData& rData);
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index 96acd23..383e136 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -293,18 +293,17 @@ uno::Reference<text::XTextField> ScCellFieldsObj::GetObjectByIndex_Impl(sal_Int3
//! Feld-Funktionen muessen an den Forwarder !!!
ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
ScUnoEditEngine aTempEngine(pEditEngine);
+ SvxFieldData* pData = aTempEngine.FindByIndex(static_cast<sal_uInt16>(Index), 0);
+ if (!pData)
+ return uno::Reference<text::XTextField>();
- if ( aTempEngine.FindByIndex( (sal_uInt16)Index, NULL ) ) // in der Zelle ist der Typ egal
- {
- sal_uInt16 nPar = aTempEngine.GetFieldPar();
- xub_StrLen nPos = aTempEngine.GetFieldPos();
- ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Feld ist 1 Zeichen
- uno::Reference<text::XTextRange> xContent(new ScCellObj(pDocShell, aCellPos));
- uno::Reference<text::XTextField> xRet(
- new ScEditFieldObj(xContent, new ScCellEditSource(pDocShell, aCellPos), ScEditFieldObj::URL, aSelection));
- return xRet;
- }
- return uno::Reference<text::XTextField>();
+ sal_uInt16 nPar = aTempEngine.GetFieldPar();
+ xub_StrLen nPos = aTempEngine.GetFieldPos();
+ ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Feld ist 1 Zeichen
+ uno::Reference<text::XTextRange> xContent(new ScCellObj(pDocShell, aCellPos));
+ uno::Reference<text::XTextField> xRet(
+ new ScEditFieldObj(xContent, new ScCellEditSource(pDocShell, aCellPos), ScEditFieldObj::URL, aSelection));
+ return xRet;
}
sal_Int32 SAL_CALL ScCellFieldsObj::getCount() throw(uno::RuntimeException)
@@ -489,7 +488,7 @@ ScEditFieldObj::FieldType getFieldType(sal_uInt16 nOldType)
}
-ScEditFieldObj* ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
+uno::Reference<text::XTextField> ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
{
//! Feld-Funktionen muessen an den Forwarder !!!
ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
@@ -517,7 +516,10 @@ ScEditFieldObj* ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
uno::Reference<text::XTextRange> xTemp(xText, uno::UNO_QUERY);
xTextRange = xTemp;
ScEditFieldObj::FieldType eRealType = getFieldType(pData->GetClassId());
- return new ScEditFieldObj(xTextRange, new ScHeaderFooterEditSource(mrData), eRealType, aSelection);
+
+ uno::Reference<text::XTextField> xRet(
+ new ScEditFieldObj(xTextRange, new ScHeaderFooterEditSource(mrData), eRealType, aSelection));
+ return xRet;
}
sal_Int32 SAL_CALL ScHeaderFieldsObj::getCount() throw(uno::RuntimeException)
commit a863285a5c4da41ae2b67c0c5b17887aea13b70c
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 15:49:24 2012 -0400
Directly translate SVX class ID to internal enum value.
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index 0ce59d6..96acd23 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -459,24 +459,32 @@ ScEditFieldObj::FieldType getFieldType(sal_uInt16 nOldType)
{
switch (nOldType)
{
- case SC_SERVICE_PAGEFIELD:
+ case SVX_DATEFIELD:
+ return ScEditFieldObj::Date;
+ case SVX_URLFIELD:
+ return ScEditFieldObj::URL;
+ case SVX_PAGEFIELD:
return ScEditFieldObj::Page;
- case SC_SERVICE_PAGESFIELD:
+ case SVX_PAGESFIELD:
return ScEditFieldObj::Pages;
- case SC_SERVICE_DATEFIELD:
- return ScEditFieldObj::Date;
- case SC_SERVICE_TIMEFIELD:
+ case SVX_TIMEFIELD:
return ScEditFieldObj::Time;
- case SC_SERVICE_TITLEFIELD:
+ case SVX_FILEFIELD:
return ScEditFieldObj::Title;
- case SC_SERVICE_FILEFIELD:
- return ScEditFieldObj::File;
- case SC_SERVICE_SHEETFIELD:
+ case SVX_TABLEFIELD:
return ScEditFieldObj::Sheet;
+ case SVX_EXT_FILEFIELD:
+ return ScEditFieldObj::File;
+ case SVX_EXT_TIMEFIELD:
+ case SVX_AUTHORFIELD:
+ case SVX_HEADERFIELD:
+ case SVX_FOOTERFIELD:
+ case SVX_DATEFIMEFIELD:
+ // These are not supported yet.
default:
;
}
- return ScEditFieldObj::URL;
+ return ScEditFieldObj::URL; // Default to URL for no good reason.
}
}
@@ -494,15 +502,6 @@ ScEditFieldObj* ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
sal_uInt16 nPar = aTempEngine.GetFieldPar();
xub_StrLen nPos = aTempEngine.GetFieldPos();
- sal_uInt16 nFieldType = 0;
- if ( pData->ISA( SvxPageField ) ) nFieldType = SC_SERVICE_PAGEFIELD;
- else if ( pData->ISA( SvxPagesField ) ) nFieldType = SC_SERVICE_PAGESFIELD;
- else if ( pData->ISA( SvxDateField ) ) nFieldType = SC_SERVICE_DATEFIELD;
- else if ( pData->ISA( SvxTimeField ) ) nFieldType = SC_SERVICE_TIMEFIELD;
- else if ( pData->ISA( SvxFileField ) ) nFieldType = SC_SERVICE_TITLEFIELD;
- else if ( pData->ISA( SvxExtFileField ) ) nFieldType = SC_SERVICE_FILEFIELD;
- else if ( pData->ISA( SvxTableField ) ) nFieldType = SC_SERVICE_SHEETFIELD;
-
ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Field is 1 character
uno::Reference<text::XTextRange> xTextRange;
ScHeaderFooterContentObj& rContentObj = mrData.GetContentObj();
@@ -517,7 +516,7 @@ ScEditFieldObj* ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
uno::Reference<text::XTextRange> xTemp(xText, uno::UNO_QUERY);
xTextRange = xTemp;
- ScEditFieldObj::FieldType eRealType = getFieldType(nFieldType);
+ ScEditFieldObj::FieldType eRealType = getFieldType(pData->GetClassId());
return new ScEditFieldObj(xTextRange, new ScHeaderFooterEditSource(mrData), eRealType, aSelection);
}
commit 86fd50854cdcf2b738c227f41e31eca92b23d5ee
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 15:32:52 2012 -0400
Early bailout.
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index c5860b7..0ce59d6 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -488,38 +488,37 @@ ScEditFieldObj* ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
ScUnoEditEngine aTempEngine(pEditEngine);
SvxFieldData* pData = aTempEngine.FindByIndex((sal_uInt16)Index, 0);
- if ( pData )
- {
- sal_uInt16 nPar = aTempEngine.GetFieldPar();
- xub_StrLen nPos = aTempEngine.GetFieldPos();
-
- sal_uInt16 nFieldType = 0;
- if ( pData->ISA( SvxPageField ) ) nFieldType = SC_SERVICE_PAGEFIELD;
- else if ( pData->ISA( SvxPagesField ) ) nFieldType = SC_SERVICE_PAGESFIELD;
- else if ( pData->ISA( SvxDateField ) ) nFieldType = SC_SERVICE_DATEFIELD;
- else if ( pData->ISA( SvxTimeField ) ) nFieldType = SC_SERVICE_TIMEFIELD;
- else if ( pData->ISA( SvxFileField ) ) nFieldType = SC_SERVICE_TITLEFIELD;
- else if ( pData->ISA( SvxExtFileField ) ) nFieldType = SC_SERVICE_FILEFIELD;
- else if ( pData->ISA( SvxTableField ) ) nFieldType = SC_SERVICE_SHEETFIELD;
-
- ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Field is 1 character
- uno::Reference<text::XTextRange> xTextRange;
- ScHeaderFooterContentObj& rContentObj = mrData.GetContentObj();
- uno::Reference<text::XText> xText;
- sal_uInt16 nPart = mrData.GetPart();
- if ( nPart == SC_HDFT_LEFT )
- xText = rContentObj.getLeftText();
- else if (nPart == SC_HDFT_CENTER)
- xText = rContentObj.getCenterText();
- else
- xText = rContentObj.getRightText();
+ if (!pData)
+ return NULL;
+
+ sal_uInt16 nPar = aTempEngine.GetFieldPar();
+ xub_StrLen nPos = aTempEngine.GetFieldPos();
+
+ sal_uInt16 nFieldType = 0;
+ if ( pData->ISA( SvxPageField ) ) nFieldType = SC_SERVICE_PAGEFIELD;
+ else if ( pData->ISA( SvxPagesField ) ) nFieldType = SC_SERVICE_PAGESFIELD;
+ else if ( pData->ISA( SvxDateField ) ) nFieldType = SC_SERVICE_DATEFIELD;
+ else if ( pData->ISA( SvxTimeField ) ) nFieldType = SC_SERVICE_TIMEFIELD;
+ else if ( pData->ISA( SvxFileField ) ) nFieldType = SC_SERVICE_TITLEFIELD;
+ else if ( pData->ISA( SvxExtFileField ) ) nFieldType = SC_SERVICE_FILEFIELD;
+ else if ( pData->ISA( SvxTableField ) ) nFieldType = SC_SERVICE_SHEETFIELD;
+
+ ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Field is 1 character
+ uno::Reference<text::XTextRange> xTextRange;
+ ScHeaderFooterContentObj& rContentObj = mrData.GetContentObj();
+ uno::Reference<text::XText> xText;
+ sal_uInt16 nPart = mrData.GetPart();
+ if ( nPart == SC_HDFT_LEFT )
+ xText = rContentObj.getLeftText();
+ else if (nPart == SC_HDFT_CENTER)
+ xText = rContentObj.getCenterText();
+ else
+ xText = rContentObj.getRightText();
- uno::Reference<text::XTextRange> xTemp(xText, uno::UNO_QUERY);
- xTextRange = xTemp;
- ScEditFieldObj::FieldType eRealType = getFieldType(nFieldType);
- return new ScEditFieldObj(xTextRange, new ScHeaderFooterEditSource(mrData), eRealType, aSelection);
- }
- return NULL;
+ uno::Reference<text::XTextRange> xTemp(xText, uno::UNO_QUERY);
+ xTextRange = xTemp;
+ ScEditFieldObj::FieldType eRealType = getFieldType(nFieldType);
+ return new ScEditFieldObj(xTextRange, new ScHeaderFooterEditSource(mrData), eRealType, aSelection);
}
sal_Int32 SAL_CALL ScHeaderFieldsObj::getCount() throw(uno::RuntimeException)
commit 17c6fee1f8c08d1fb9d2805295127618fad9a43b
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 15:27:52 2012 -0400
ScHeaderFieldsObj::nType never changes and is always INVALID. Removed.
This cleans up the code quite a bit.
diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx
index 6b535ff..5720194 100644
--- a/sc/inc/fielduno.hxx
+++ b/sc/inc/fielduno.hxx
@@ -139,7 +139,6 @@ class ScHeaderFieldsObj : public cppu::WeakImplHelper5<
{
private:
ScHeaderFooterTextData& mrData;
- sal_uInt16 nType;
ScEditSource* mpEditSource;
/// List of refresh listeners.
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index ff68c6d..c5860b7 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -427,7 +427,6 @@ void SAL_CALL ScCellFieldsObj::removeRefreshListener( const uno::Reference<util:
ScHeaderFieldsObj::ScHeaderFieldsObj(ScHeaderFooterTextData& rData) :
mrData(rData),
- nType(SC_SERVICE_INVALID),
mpRefreshListeners( NULL )
{
mpEditSource = new ScHeaderFooterEditSource(rData);
@@ -488,35 +487,20 @@ ScEditFieldObj* ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
ScUnoEditEngine aTempEngine(pEditEngine);
- TypeId aTypeId = NULL;
- switch (nType)
- {
- case SC_SERVICE_PAGEFIELD: aTypeId = TYPE(SvxPageField); break;
- case SC_SERVICE_PAGESFIELD: aTypeId = TYPE(SvxPagesField); break;
- case SC_SERVICE_DATEFIELD: aTypeId = TYPE(SvxDateField); break;
- case SC_SERVICE_TIMEFIELD: aTypeId = TYPE(SvxTimeField); break;
- case SC_SERVICE_TITLEFIELD: aTypeId = TYPE(SvxFileField); break;
- case SC_SERVICE_FILEFIELD: aTypeId = TYPE(SvxExtFileField); break;
- case SC_SERVICE_SHEETFIELD: aTypeId = TYPE(SvxTableField); break;
- // bei SC_SERVICE_INVALID bleibt TypeId Null
- }
- SvxFieldData* pData = aTempEngine.FindByIndex( (sal_uInt16)Index, aTypeId );
+ SvxFieldData* pData = aTempEngine.FindByIndex((sal_uInt16)Index, 0);
if ( pData )
{
sal_uInt16 nPar = aTempEngine.GetFieldPar();
xub_StrLen nPos = aTempEngine.GetFieldPos();
- sal_uInt16 nFieldType = nType;
- if ( nFieldType == SC_SERVICE_INVALID )
- {
- if ( pData->ISA( SvxPageField ) ) nFieldType = SC_SERVICE_PAGEFIELD;
- else if ( pData->ISA( SvxPagesField ) ) nFieldType = SC_SERVICE_PAGESFIELD;
- else if ( pData->ISA( SvxDateField ) ) nFieldType = SC_SERVICE_DATEFIELD;
- else if ( pData->ISA( SvxTimeField ) ) nFieldType = SC_SERVICE_TIMEFIELD;
- else if ( pData->ISA( SvxFileField ) ) nFieldType = SC_SERVICE_TITLEFIELD;
- else if ( pData->ISA( SvxExtFileField ) ) nFieldType = SC_SERVICE_FILEFIELD;
- else if ( pData->ISA( SvxTableField ) ) nFieldType = SC_SERVICE_SHEETFIELD;
- }
+ sal_uInt16 nFieldType = 0;
+ if ( pData->ISA( SvxPageField ) ) nFieldType = SC_SERVICE_PAGEFIELD;
+ else if ( pData->ISA( SvxPagesField ) ) nFieldType = SC_SERVICE_PAGESFIELD;
+ else if ( pData->ISA( SvxDateField ) ) nFieldType = SC_SERVICE_DATEFIELD;
+ else if ( pData->ISA( SvxTimeField ) ) nFieldType = SC_SERVICE_TIMEFIELD;
+ else if ( pData->ISA( SvxFileField ) ) nFieldType = SC_SERVICE_TITLEFIELD;
+ else if ( pData->ISA( SvxExtFileField ) ) nFieldType = SC_SERVICE_FILEFIELD;
+ else if ( pData->ISA( SvxTableField ) ) nFieldType = SC_SERVICE_SHEETFIELD;
ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Field is 1 character
uno::Reference<text::XTextRange> xTextRange;
@@ -545,19 +529,7 @@ sal_Int32 SAL_CALL ScHeaderFieldsObj::getCount() throw(uno::RuntimeException)
//! Feld-Funktionen muessen an den Forwarder !!!
ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
ScUnoEditEngine aTempEngine(pEditEngine);
-
- TypeId aTypeId = NULL;
- switch (nType)
- {
- case SC_SERVICE_PAGEFIELD: aTypeId = TYPE(SvxPageField); break;
- case SC_SERVICE_PAGESFIELD: aTypeId = TYPE(SvxPagesField); break;
- case SC_SERVICE_DATEFIELD: aTypeId = TYPE(SvxDateField); break;
- case SC_SERVICE_TIMEFIELD: aTypeId = TYPE(SvxTimeField); break;
- case SC_SERVICE_TITLEFIELD: aTypeId = TYPE(SvxFileField); break;
- case SC_SERVICE_FILEFIELD: aTypeId = TYPE(SvxExtFileField); break;
- case SC_SERVICE_SHEETFIELD: aTypeId = TYPE(SvxTableField); break;
- }
- return aTempEngine.CountFields(aTypeId); // Felder zaehlen
+ return aTempEngine.CountFields(0);
}
uno::Any SAL_CALL ScHeaderFieldsObj::getByIndex( sal_Int32 nIndex )
commit 9832505e0dedccbfbe349af4605cf31cbcb11b46
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 15:18:26 2012 -0400
Now we can lump all these service names together.
diff --git a/sc/source/ui/unoobj/servuno.cxx b/sc/source/ui/unoobj/servuno.cxx
index e726f7b..23047b3 100644
--- a/sc/source/ui/unoobj/servuno.cxx
+++ b/sc/source/ui/unoobj/servuno.cxx
@@ -424,6 +424,8 @@ ScEditFieldObj::FieldType getFieldType(sal_uInt16 nOldType)
{
switch (nOldType)
{
+ case SC_SERVICE_URLFIELD:
+ return ScEditFieldObj::URL;
case SC_SERVICE_PAGEFIELD:
return ScEditFieldObj::Page;
case SC_SERVICE_PAGESFIELD:
@@ -441,7 +443,8 @@ ScEditFieldObj::FieldType getFieldType(sal_uInt16 nOldType)
default:
;
}
- return ScEditFieldObj::URL;
+
+ return ScEditFieldObj::URL; // default to URL for no reason whatsoever.
}
}
@@ -457,12 +460,6 @@ uno::Reference<uno::XInterface> ScServiceProvider::MakeInstance(
xRet.set((sheet::XSpreadsheet*)new ScTableSheetObj(NULL,0));
break;
case SC_SERVICE_URLFIELD:
- {
- uno::Reference<text::XTextRange> xNullContent;
- xRet.set(static_cast<text::XTextField*>(
- new ScEditFieldObj(xNullContent, NULL, ScEditFieldObj::URL, ESelection())));
- }
- break;
case SC_SERVICE_PAGEFIELD:
case SC_SERVICE_PAGESFIELD:
case SC_SERVICE_DATEFIELD:
commit f0561d3f3d28506a1351cebdd1bbe8d80b67892f
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 15:08:36 2012 -0400
Define interfance to get edit engine instance without ugly casting.
diff --git a/sc/inc/editsrc.hxx b/sc/inc/editsrc.hxx
index 64c5871..d325843 100644
--- a/sc/inc/editsrc.hxx
+++ b/sc/inc/editsrc.hxx
@@ -44,11 +44,19 @@ class ScHeaderFooterTextData;
class ScAccessibleTextData;
class SdrObject;
+class ScEditSource : public SvxEditSource
+{
+public:
+ virtual ScEditEngineDefaulter* GetEditEngine() = 0;
+};
+
/**
- * ScHeaderFooterEditSource with local copy of ScHeaderFooterTextData is
- * used by field objects.
+ * ScHeaderFooterTextObj keeps the authoritative copy of
+ * ScHeaderFooterTextData that this class holds reference to. It's a
+ * reference instead of a copy to avoid broadcasting changes to the
+ * authoritative copy.
*/
-class ScHeaderFooterEditSource : public SvxEditSource
+class ScHeaderFooterEditSource : public ScEditSource
{
private:
ScHeaderFooterTextData& mrTextData;
@@ -58,7 +66,7 @@ public:
virtual ~ScHeaderFooterEditSource();
// GetEditEngine is needed because the forwarder doesn't have field functions
- ScEditEngineDefaulter* GetEditEngine();
+ virtual ScEditEngineDefaulter* GetEditEngine();
virtual SvxEditSource* Clone() const;
virtual SvxTextForwarder* GetTextForwarder();
@@ -72,7 +80,7 @@ public:
* ScCellEditSource with local copy of ScCellTextData is used by
* ScCellFieldsObj, ScCellFieldObj.
*/
-class ScCellEditSource : public SvxEditSource
+class ScCellEditSource : public ScEditSource
{
private:
ScCellTextData* pCellTextData;
@@ -82,7 +90,7 @@ public:
virtual ~ScCellEditSource();
// GetEditEngine is needed because the forwarder doesn't have field functions
- ScEditEngineDefaulter* GetEditEngine();
+ virtual ScEditEngineDefaulter* GetEditEngine();
virtual SvxEditSource* Clone() const;
virtual SvxTextForwarder* GetTextForwarder();
diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx
index 395a48b..6b535ff 100644
--- a/sc/inc/fielduno.hxx
+++ b/sc/inc/fielduno.hxx
@@ -51,7 +51,7 @@
#include <boost/noncopyable.hpp>
#include <boost/scoped_ptr.hpp>
-class SvxEditSource;
+class ScEditSource;
class SvxFieldItem;
class SvxFieldData;
class ScEditFieldObj;
@@ -71,7 +71,7 @@ class ScCellFieldsObj : public cppu::WeakImplHelper5<
private:
ScDocShell* pDocShell;
ScAddress aCellPos;
- SvxEditSource* pEditSource;
+ ScEditSource* mpEditSource;
/// List of refresh listeners.
cppu::OInterfaceContainerHelper* mpRefreshListeners;
/// mutex to lock the InterfaceContainerHelper
@@ -140,7 +140,7 @@ class ScHeaderFieldsObj : public cppu::WeakImplHelper5<
private:
ScHeaderFooterTextData& mrData;
sal_uInt16 nType;
- SvxEditSource* pEditSource;
+ ScEditSource* mpEditSource;
/// List of refresh listeners.
cppu::OInterfaceContainerHelper* mpRefreshListeners;
@@ -208,7 +208,7 @@ private:
const SfxItemPropertySet* pPropSet;
com::sun::star::uno::Reference<com::sun::star::text::XTextRange> mpContent;
sal_uInt16 nType;
- SvxEditSource* mpEditSource;
+ ScEditSource* mpEditSource;
ESelection aSelection;
sal_Int16 nFileFormat; // enum SvxFileFormat, valid if not inserted
@@ -216,7 +216,7 @@ private:
public:
ScHeaderFieldObj(
const com::sun::star::uno::Reference<com::sun::star::text::XTextRange>& rContent,
- SvxEditSource* pEditSrc, sal_uInt16 nT, const ESelection& rSel);
+ ScEditSource* pEditSrc, sal_uInt16 nT, const ESelection& rSel);
virtual ~ScHeaderFieldObj();
// called by getImplementation:
@@ -225,7 +225,7 @@ public:
SvxFieldItem CreateFieldItem();
void InitDoc(
const com::sun::star::uno::Reference<com::sun::star::text::XTextRange>& rContent,
- SvxEditSource* pEditSrc, const ESelection& rSel);
+ ScEditSource* pEditSrc, const ESelection& rSel);
virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(
const ::com::sun::star::uno::Type & rType )
@@ -340,7 +340,7 @@ public:
private:
const SfxItemPropertySet* pPropSet;
- SvxEditSource* pEditSource;
+ ScEditSource* mpEditSource;
ESelection aSelection;
FieldType meType;
@@ -364,7 +364,7 @@ public:
ScEditFieldObj(
const com::sun::star::uno::Reference<com::sun::star::text::XTextRange>& rContent,
- SvxEditSource* pEditSrc, FieldType eType, const ESelection& rSel);
+ ScEditSource* pEditSrc, FieldType eType, const ESelection& rSel);
virtual ~ScEditFieldObj();
void DeleteField();
@@ -372,7 +372,7 @@ public:
SvxFieldItem CreateFieldItem();
void InitDoc(
const com::sun::star::uno::Reference<com::sun::star::text::XTextRange>& rContent,
- SvxEditSource* pEditSrc, const ESelection& rSel);
+ ScEditSource* pEditSrc, const ESelection& rSel);
// XTextField
virtual ::rtl::OUString SAL_CALL getPresentation( sal_Bool bShowCommand )
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index d8e57ab..ff68c6d 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -246,7 +246,7 @@ ScCellFieldsObj::ScCellFieldsObj(ScDocShell* pDocSh, const ScAddress& rPos) :
{
pDocShell->GetDocument()->AddUnoObject(*this);
- pEditSource = new ScCellEditSource( pDocShell, aCellPos );
+ mpEditSource = new ScCellEditSource( pDocShell, aCellPos );
}
ScCellFieldsObj::~ScCellFieldsObj()
@@ -254,7 +254,7 @@ ScCellFieldsObj::~ScCellFieldsObj()
if (pDocShell)
pDocShell->GetDocument()->RemoveUnoObject(*this);
- delete pEditSource;
+ delete mpEditSource;
// increment refcount to prevent double call off dtor
osl_incrementInterlockedCount( &m_refCount );
@@ -291,7 +291,7 @@ void ScCellFieldsObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
uno::Reference<text::XTextField> ScCellFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
{
//! Feld-Funktionen muessen an den Forwarder !!!
- ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine();
+ ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
ScUnoEditEngine aTempEngine(pEditEngine);
if ( aTempEngine.FindByIndex( (sal_uInt16)Index, NULL ) ) // in der Zelle ist der Typ egal
@@ -312,7 +312,7 @@ sal_Int32 SAL_CALL ScCellFieldsObj::getCount() throw(uno::RuntimeException)
SolarMutexGuard aGuard;
//! Feld-Funktionen muessen an den Forwarder !!!
- ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine();
+ ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
ScUnoEditEngine aTempEngine(pEditEngine);
return aTempEngine.CountFields(NULL); // Felder zaehlen, in Zelle ist der Typ egal
@@ -430,12 +430,12 @@ ScHeaderFieldsObj::ScHeaderFieldsObj(ScHeaderFooterTextData& rData) :
nType(SC_SERVICE_INVALID),
mpRefreshListeners( NULL )
{
- pEditSource = new ScHeaderFooterEditSource(rData);
+ mpEditSource = new ScHeaderFooterEditSource(rData);
}
ScHeaderFieldsObj::~ScHeaderFieldsObj()
{
- delete pEditSource;
+ delete mpEditSource;
// increment refcount to prevent double call off dtor
osl_incrementInterlockedCount( &m_refCount );
@@ -485,7 +485,7 @@ ScEditFieldObj::FieldType getFieldType(sal_uInt16 nOldType)
ScEditFieldObj* ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
{
//! Feld-Funktionen muessen an den Forwarder !!!
- ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)pEditSource)->GetEditEngine();
+ ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
ScUnoEditEngine aTempEngine(pEditEngine);
TypeId aTypeId = NULL;
@@ -543,7 +543,7 @@ sal_Int32 SAL_CALL ScHeaderFieldsObj::getCount() throw(uno::RuntimeException)
SolarMutexGuard aGuard;
//! Feld-Funktionen muessen an den Forwarder !!!
- ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)pEditSource)->GetEditEngine();
+ ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
ScUnoEditEngine aTempEngine(pEditEngine);
TypeId aTypeId = NULL;
@@ -695,7 +695,7 @@ sal_Int16 lcl_SvxToUnoFileFormat( SvxFileFormat nSvxValue )
ScHeaderFieldObj::ScHeaderFieldObj(
const uno::Reference<text::XTextRange>& rContent,
- SvxEditSource* pEditSrc, sal_uInt16 nT, const ESelection& rSel) :
+ ScEditSource* pEditSrc, sal_uInt16 nT, const ESelection& rSel) :
OComponentHelper( getMutex() ),
pPropSet( (nT == SC_SERVICE_FILEFIELD) ? lcl_GetFileFieldPropertySet() : lcl_GetHeaderFieldPropertySet() ),
mpContent(rContent),
@@ -768,7 +768,7 @@ void SAL_CALL ScHeaderFieldObj::release() throw()
}
void ScHeaderFieldObj::InitDoc(
- const uno::Reference<text::XTextRange>& rContent, SvxEditSource* pEditSrc, const ESelection& rSel)
+ const uno::Reference<text::XTextRange>& rContent, ScEditSource* pEditSrc, const ESelection& rSel)
{
if (!mpEditSource)
{
@@ -1115,10 +1115,10 @@ SvxFieldData* ScEditFieldObj::getData()
void ScEditFieldObj::setPropertyValueURL(const rtl::OUString& rName, const com::sun::star::uno::Any& rVal)
{
rtl::OUString aStrVal;
- if (pEditSource)
+ if (mpEditSource)
{
// Edit engine instance already exists for this field item. Use it.
- ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine();
+ ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
ScUnoEditEngine aTempEngine(pEditEngine);
// Typ egal (in Zellen gibts nur URLs)
@@ -1152,7 +1152,7 @@ void ScEditFieldObj::setPropertyValueURL(const rtl::OUString& rName, const com::
throw beans::UnknownPropertyException();
pEditEngine->QuickInsertField( SvxFieldItem(*pField, EE_FEATURE_FIELD), aSelection );
- pEditSource->UpdateData();
+ mpEditSource->UpdateData();
return;
}
@@ -1197,10 +1197,10 @@ uno::Any ScEditFieldObj::getPropertyValueURL(const rtl::OUString& rName)
}
else if (rName == SC_UNONAME_TEXTWRAP)
aRet <<= text::WrapTextMode_NONE;
- else if (pEditSource)
+ else if (mpEditSource)
{
//! Feld-Funktionen muessen an den Forwarder !!!
- ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine();
+ ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
ScUnoEditEngine aTempEngine(pEditEngine);
// Typ egal (in Zellen gibts nur URLs)
@@ -1250,9 +1250,9 @@ void ScEditFieldObj::setPropertyValueFile(const rtl::OUString& rName, const uno:
if (rVal >>= nIntVal)
{
SvxFileFormat eFormat = lcl_UnoToSvxFileFormat(nIntVal);
- if (pEditSource)
+ if (mpEditSource)
{
- ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)pEditSource)->GetEditEngine();
+ ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
ScUnoEditEngine aTempEngine(pEditEngine);
SvxFieldData* pField = aTempEngine.FindByPos(
aSelection.nStartPara, aSelection.nStartPos, TYPE(SvxExtFileField));
@@ -1262,7 +1262,7 @@ void ScEditFieldObj::setPropertyValueFile(const rtl::OUString& rName, const uno:
SvxExtFileField* pExtFile = static_cast<SvxExtFileField*>(pField); // local to the ScUnoEditEngine
pExtFile->SetFormat(eFormat);
pEditEngine->QuickInsertField(SvxFieldItem(*pField, EE_FEATURE_FIELD), aSelection);
- pEditSource->UpdateData();
+ mpEditSource->UpdateData();
}
}
else
@@ -1284,9 +1284,9 @@ uno::Any ScEditFieldObj::getPropertyValueFile(const rtl::OUString& rName)
{
SvxFileFormat eFormat = SVXFILEFORMAT_NAME_EXT;
const SvxFieldData* pField = NULL;
- if (pEditSource)
+ if (mpEditSource)
{
- ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)pEditSource)->GetEditEngine();
+ ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
ScUnoEditEngine aTempEngine(pEditEngine);
pField = aTempEngine.FindByPos(
aSelection.nStartPara, aSelection.nStartPos, TYPE(SvxExtFileField));
@@ -1311,10 +1311,10 @@ uno::Any ScEditFieldObj::getPropertyValueFile(const rtl::OUString& rName)
ScEditFieldObj::ScEditFieldObj(
const uno::Reference<text::XTextRange>& rContent,
- SvxEditSource* pEditSrc, FieldType eType, const ESelection& rSel) :
+ ScEditSource* pEditSrc, FieldType eType, const ESelection& rSel) :
OComponentHelper(getMutex()),
pPropSet(NULL),
- pEditSource(pEditSrc),
+ mpEditSource(pEditSrc),
aSelection(rSel),
meType(eType), mpData(NULL), mpContent(rContent)
{
@@ -1332,36 +1332,36 @@ ScEditFieldObj::ScEditFieldObj(
}
void ScEditFieldObj::InitDoc(
- const uno::Reference<text::XTextRange>& rContent, SvxEditSource* pEditSrc, const ESelection& rSel)
+ const uno::Reference<text::XTextRange>& rContent, ScEditSource* pEditSrc, const ESelection& rSel)
{
- if (!pEditSource)
+ if (!mpEditSource)
{
mpContent = rContent;
mpData.reset();
aSelection = rSel;
- pEditSource = pEditSrc;
+ mpEditSource = pEditSrc;
}
}
ScEditFieldObj::~ScEditFieldObj()
{
- delete pEditSource;
+ delete mpEditSource;
}
SvxFieldItem ScEditFieldObj::CreateFieldItem()
{
- OSL_ENSURE( !pEditSource, "CreateFieldItem mit eingefuegtem Feld" );
+ OSL_ENSURE( !mpEditSource, "CreateFieldItem mit eingefuegtem Feld" );
return SvxFieldItem(*getData(), EE_FEATURE_FIELD);
}
void ScEditFieldObj::DeleteField()
{
- if (pEditSource)
+ if (mpEditSource)
{
- SvxTextForwarder* pForwarder = pEditSource->GetTextForwarder();
+ SvxTextForwarder* pForwarder = mpEditSource->GetTextForwarder();
pForwarder->QuickInsertText( String(), aSelection );
- pEditSource->UpdateData();
+ mpEditSource->UpdateData();
aSelection.nEndPara = aSelection.nStartPara;
aSelection.nEndPos = aSelection.nStartPos;
@@ -1373,7 +1373,7 @@ void ScEditFieldObj::DeleteField()
bool ScEditFieldObj::IsInserted() const
{
- return pEditSource != NULL;
+ return mpEditSource != NULL;
}
// XTextField
@@ -1383,11 +1383,11 @@ rtl::OUString SAL_CALL ScEditFieldObj::getPresentation( sal_Bool bShowCommand )
{
SolarMutexGuard aGuard;
- if (!pEditSource)
+ if (!mpEditSource)
return rtl::OUString("no edit source!!!");
//! Feld-Funktionen muessen an den Forwarder !!!
- ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine();
+ ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine();
ScUnoEditEngine aTempEngine(pEditEngine);
// Typ egal (in Zellen gibts nur URLs)
commit 98831752bab7827f1d4d6d121daa1d0a0de805ee
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 14:45:39 2012 -0400
Fixed memory leak. The edit source gets cloned in SvxUnoText.
diff --git a/sc/source/ui/unoobj/textuno.cxx b/sc/source/ui/unoobj/textuno.cxx
index 54d63f6..53de44f 100644
--- a/sc/source/ui/unoobj/textuno.cxx
+++ b/sc/source/ui/unoobj/textuno.cxx
@@ -297,8 +297,8 @@ void ScHeaderFooterTextObj::CreateUnoText_Impl()
if ( !pUnoText )
{
// can't be aggregated because getString/setString is handled here
- pUnoText = new SvxUnoText(
- new ScHeaderFooterEditSource(aTextData), lcl_GetHdFtPropertySet(), uno::Reference<text::XText>());
+ ScHeaderFooterEditSource aEditSrc(aTextData);
+ pUnoText = new SvxUnoText(&aEditSrc, lcl_GetHdFtPropertySet(), uno::Reference<text::XText>());
pUnoText->acquire();
}
}
commit 285a5666a1663d765f98ebbfc56c693f99dea323
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 13:54:44 2012 -0400
Removing data member that was no longer used.
diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx
index b5baf63..395a48b 100644
--- a/sc/inc/fielduno.hxx
+++ b/sc/inc/fielduno.hxx
@@ -340,7 +340,6 @@ public:
private:
const SfxItemPropertySet* pPropSet;
- ScDocShell* pDocShell;
SvxEditSource* pEditSource;
ESelection aSelection;
commit e60538d657c5ad5331839a77315292a5f0acd7fa
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 13:50:27 2012 -0400
Another place where ScHeaderFieldObj was still referenced.
diff --git a/sc/source/ui/unoobj/textuno.cxx b/sc/source/ui/unoobj/textuno.cxx
index 0b67312..54d63f6 100644
--- a/sc/source/ui/unoobj/textuno.cxx
+++ b/sc/source/ui/unoobj/textuno.cxx
@@ -503,7 +503,7 @@ void SAL_CALL ScHeaderFooterTextObj::removeTextContent(
SolarMutexGuard aGuard;
if ( xContent.is() )
{
- ScHeaderFieldObj* pHeaderField = ScHeaderFieldObj::getImplementation( xContent );
+ ScEditFieldObj* pHeaderField = ScEditFieldObj::getImplementation(xContent);
if ( pHeaderField && pHeaderField->IsInserted() )
{
//! Testen, ob das Feld in dieser Zelle ist
commit 6dfe66936bcdf63aa881de5476b1f4c900270853
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 13:41:52 2012 -0400
Support file field in ScEditFieldObj which requires special handling.
diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx
index bbd7405..b5baf63 100644
--- a/sc/inc/fielduno.hxx
+++ b/sc/inc/fielduno.hxx
@@ -356,6 +356,9 @@ private:
void setPropertyValueURL(const rtl::OUString& rName, const com::sun::star::uno::Any& rVal);
com::sun::star::uno::Any getPropertyValueURL(const rtl::OUString& rName);
+ void setPropertyValueFile(const rtl::OUString& rName, const com::sun::star::uno::Any& rVal);
+ com::sun::star::uno::Any getPropertyValueFile(const rtl::OUString& rName);
+
public:
static const com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId();
static ScEditFieldObj* getImplementation(const com::sun::star::uno::Reference<com::sun::star::text::XTextContent>& xObj);
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index 66ed53f..d8e57ab 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -1242,16 +1242,93 @@ uno::Any ScEditFieldObj::getPropertyValueURL(const rtl::OUString& rName)
return aRet;
}
+void ScEditFieldObj::setPropertyValueFile(const rtl::OUString& rName, const uno::Any& rVal)
+{
+ if (rName == SC_UNONAME_FILEFORM)
+ {
+ sal_Int16 nIntVal = 0;
+ if (rVal >>= nIntVal)
+ {
+ SvxFileFormat eFormat = lcl_UnoToSvxFileFormat(nIntVal);
+ if (pEditSource)
+ {
+ ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)pEditSource)->GetEditEngine();
+ ScUnoEditEngine aTempEngine(pEditEngine);
+ SvxFieldData* pField = aTempEngine.FindByPos(
+ aSelection.nStartPara, aSelection.nStartPos, TYPE(SvxExtFileField));
+ OSL_ENSURE(pField, "setPropertyValueFile: Field not found");
+ if (pField)
+ {
+ SvxExtFileField* pExtFile = static_cast<SvxExtFileField*>(pField); // local to the ScUnoEditEngine
+ pExtFile->SetFormat(eFormat);
+ pEditEngine->QuickInsertField(SvxFieldItem(*pField, EE_FEATURE_FIELD), aSelection);
+ pEditSource->UpdateData();
+ }
+ }
+ else
+ {
+ SvxFieldData* pField = getData();
+ SvxExtFileField* pExtFile = static_cast<SvxExtFileField*>(pField);
+ pExtFile->SetFormat(eFormat);
+ }
+ }
+ }
+ else
+ throw beans::UnknownPropertyException();
+}
+
+uno::Any ScEditFieldObj::getPropertyValueFile(const rtl::OUString& rName)
+{
+ uno::Any aRet;
+ if (rName == SC_UNONAME_FILEFORM)
+ {
+ SvxFileFormat eFormat = SVXFILEFORMAT_NAME_EXT;
+ const SvxFieldData* pField = NULL;
+ if (pEditSource)
+ {
+ ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)pEditSource)->GetEditEngine();
+ ScUnoEditEngine aTempEngine(pEditEngine);
+ pField = aTempEngine.FindByPos(
+ aSelection.nStartPara, aSelection.nStartPos, TYPE(SvxExtFileField));
+ }
+ else
+ pField = getData();
+
+ OSL_ENSURE(pField, "setPropertyValueFile: Field not found");
+ if (!pField)
+ throw uno::RuntimeException();
+
+ const SvxExtFileField* pExtFile = static_cast<const SvxExtFileField*>(pField);
+ eFormat = pExtFile->GetFormat();
+ sal_Int16 nIntVal = lcl_SvxToUnoFileFormat(eFormat);
+ aRet <<= nIntVal;
+ }
+ else
+ throw beans::UnknownPropertyException();
+
+ return aRet;
+}
+
ScEditFieldObj::ScEditFieldObj(
const uno::Reference<text::XTextRange>& rContent,
SvxEditSource* pEditSrc, FieldType eType, const ESelection& rSel) :
OComponentHelper(getMutex()),
- pPropSet(lcl_GetURLPropertySet()),
+ pPropSet(NULL),
pEditSource(pEditSrc),
aSelection(rSel),
meType(eType), mpData(NULL), mpContent(rContent)
{
- // pDocShell ist Null, wenn per ServiceProvider erzeugt
+ switch (meType)
+ {
+ case File:
+ pPropSet = lcl_GetFileFieldPropertySet();
+ break;
+ case URL:
+ pPropSet = lcl_GetURLPropertySet();
+ break;
+ default:
+ pPropSet = lcl_GetHeaderFieldPropertySet();
+ }
}
void ScEditFieldObj::InitDoc(
@@ -1307,7 +1384,7 @@ rtl::OUString SAL_CALL ScEditFieldObj::getPresentation( sal_Bool bShowCommand )
SolarMutexGuard aGuard;
if (!pEditSource)
- return rtl::OUString();
+ return rtl::OUString("no edit source!!!");
//! Feld-Funktionen muessen an den Forwarder !!!
ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine();
@@ -1317,14 +1394,14 @@ rtl::OUString SAL_CALL ScEditFieldObj::getPresentation( sal_Bool bShowCommand )
const SvxFieldData* pField = aTempEngine.FindByPos( aSelection.nStartPara, aSelection.nStartPos, 0 );
OSL_ENSURE(pField,"getPresentation: Feld nicht gefunden");
if (!pField)
- return rtl::OUString();
+ return rtl::OUString("not inserted yet");
switch (meType)
{
case URL:
{
if (pField->GetClassId() != SVX_URLFIELD)
- return rtl::OUString();
+ return rtl::OUString("not url field but url expected");
const SvxURLField* pURL = static_cast<const SvxURLField*>(pField);
return bShowCommand ? pURL->GetURL() : pURL->GetRepresentation();
@@ -1333,7 +1410,7 @@ rtl::OUString SAL_CALL ScEditFieldObj::getPresentation( sal_Bool bShowCommand )
default:
;
}
- return rtl::OUString("fail");
+ return rtl::OUString("total fail");
}
// XTextContent
@@ -1401,6 +1478,9 @@ void SAL_CALL ScEditFieldObj::setPropertyValue(
case URL:
setPropertyValueURL(aPropertyName, aValue);
break;
+ case File:
+ setPropertyValueFile(aPropertyName, aValue);
+ break;
default:
throw beans::UnknownPropertyException();
}
@@ -1415,7 +1495,8 @@ uno::Any SAL_CALL ScEditFieldObj::getPropertyValue( const rtl::OUString& aProper
{
case URL:
return getPropertyValueURL(aPropertyName);
- break;
+ case File:
+ return getPropertyValueFile(aPropertyName);
default:
throw beans::UnknownPropertyException();
}
commit d7c4d44671b0aa6c01974df474fd28e23367c69e
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 11:41:26 2012 -0400
Switch to using ScEditFieldObj for the header/footer field items.
Luckily this works just fine for the very simple field items. More
work ahead to fully support all types we currently allow in headers
and footers.
diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx
index 7c1929d..bbd7405 100644
--- a/sc/inc/fielduno.hxx
+++ b/sc/inc/fielduno.hxx
@@ -55,7 +55,6 @@ class SvxEditSource;
class SvxFieldItem;
class SvxFieldData;
class ScEditFieldObj;
-class ScHeaderFieldObj;
class ScHeaderFooterContentObj;
class ScDocShell;
class EditTextObject;
@@ -148,7 +147,7 @@ private:
/// mutex to lock the InterfaceContainerHelper
osl::Mutex aMutex;
- ScHeaderFieldObj* GetObjectByIndex_Impl(sal_Int32 Index) const;
+ ScEditFieldObj* GetObjectByIndex_Impl(sal_Int32 Index) const;
public:
ScHeaderFieldsObj(ScHeaderFooterTextData& rData);
@@ -355,6 +354,7 @@ private:
SvxFieldData* getData();
void setPropertyValueURL(const rtl::OUString& rName, const com::sun::star::uno::Any& rVal);
+ com::sun::star::uno::Any getPropertyValueURL(const rtl::OUString& rName);
public:
static const com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId();
@@ -370,7 +370,7 @@ public:
SvxFieldItem CreateFieldItem();
void InitDoc(
const com::sun::star::uno::Reference<com::sun::star::text::XTextRange>& rContent,
- SvxEditSource* pEditSrc, FieldType eType, const ESelection& rSel);
+ SvxEditSource* pEditSrc, const ESelection& rSel);
// XTextField
virtual ::rtl::OUString SAL_CALL getPresentation( sal_Bool bShowCommand )
diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx
index 3872678..dde5a44 100644
--- a/sc/source/ui/unoobj/cellsuno.cxx
+++ b/sc/source/ui/unoobj/cellsuno.cxx
@@ -6450,7 +6450,7 @@ void SAL_CALL ScCellObj::insertTextContent( const uno::Reference<text::XTextRang
aSelection.nEndPos = aSelection.nStartPos + 1;
uno::Reference<text::XTextRange> xParent(this);
pCellField->InitDoc(
- xParent, new ScCellEditSource(pDocSh, aCellPos), ScEditFieldObj::URL, aSelection);
+ xParent, new ScCellEditSource(pDocSh, aCellPos), aSelection);
// for bAbsorb=FALSE, the new selection must be behind the inserted content
// (the xml filter relies on this)
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index 4ae7236..66ed53f 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -454,7 +454,35 @@ ScHeaderFieldsObj::~ScHeaderFieldsObj()
// XIndexAccess (via XTextFields)
-ScHeaderFieldObj* ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
+namespace {
+
+ScEditFieldObj::FieldType getFieldType(sal_uInt16 nOldType)
+{
+ switch (nOldType)
+ {
+ case SC_SERVICE_PAGEFIELD:
+ return ScEditFieldObj::Page;
+ case SC_SERVICE_PAGESFIELD:
+ return ScEditFieldObj::Pages;
+ case SC_SERVICE_DATEFIELD:
+ return ScEditFieldObj::Date;
+ case SC_SERVICE_TIMEFIELD:
+ return ScEditFieldObj::Time;
+ case SC_SERVICE_TITLEFIELD:
+ return ScEditFieldObj::Title;
+ case SC_SERVICE_FILEFIELD:
+ return ScEditFieldObj::File;
+ case SC_SERVICE_SHEETFIELD:
+ return ScEditFieldObj::Sheet;
+ default:
+ ;
+ }
+ return ScEditFieldObj::URL;
+}
+
+}
+
+ScEditFieldObj* ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
{
//! Feld-Funktionen muessen an den Forwarder !!!
ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)pEditSource)->GetEditEngine();
@@ -504,7 +532,8 @@ ScHeaderFieldObj* ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) cons
uno::Reference<text::XTextRange> xTemp(xText, uno::UNO_QUERY);
xTextRange = xTemp;
- return new ScHeaderFieldObj(xTextRange, new ScHeaderFooterEditSource(mrData), nFieldType, aSelection);
+ ScEditFieldObj::FieldType eRealType = getFieldType(nFieldType);
+ return new ScEditFieldObj(xTextRange, new ScHeaderFooterEditSource(mrData), eRealType, aSelection);
}
return NULL;
}
@@ -1152,6 +1181,67 @@ void ScEditFieldObj::setPropertyValueURL(const rtl::OUString& rName, const com::
throw beans::UnknownPropertyException();
}
+uno::Any ScEditFieldObj::getPropertyValueURL(const rtl::OUString& rName)
+{
+ uno::Any aRet;
+
+ // anchor type is always "as character", text wrap always "none"
+
+ if (rName == SC_UNONAME_ANCTYPE)
+ aRet <<= text::TextContentAnchorType_AS_CHARACTER;
+ else if (rName == SC_UNONAME_ANCTYPES)
+ {
+ uno::Sequence<text::TextContentAnchorType> aSeq(1);
+ aSeq[0] = text::TextContentAnchorType_AS_CHARACTER;
+ aRet <<= aSeq;
+ }
+ else if (rName == SC_UNONAME_TEXTWRAP)
+ aRet <<= text::WrapTextMode_NONE;
+ else if (pEditSource)
+ {
+ //! Feld-Funktionen muessen an den Forwarder !!!
+ ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine();
+ ScUnoEditEngine aTempEngine(pEditEngine);
+
+ // Typ egal (in Zellen gibts nur URLs)
+ const SvxFieldData* pField = aTempEngine.FindByPos( aSelection.nStartPara, aSelection.nStartPos, 0 );
+ OSL_ENSURE(pField,"getPropertyValue: Feld nicht gefunden");
+ if (!pField)
+ throw uno::RuntimeException();
+
+ if (pField->GetClassId() != SVX_URLFIELD)
+ throw uno::RuntimeException();
+
+ const SvxURLField* pURL = static_cast<const SvxURLField*>(pField);
+
+ if (rName == SC_UNONAME_URL)
+ aRet <<= pURL->GetURL();
+ else if (rName == SC_UNONAME_REPR)
+ aRet <<= pURL->GetRepresentation();
+ else if (rName == SC_UNONAME_TARGET)
+ aRet <<= pURL->GetTargetFrame();
+ else
+ throw beans::UnknownPropertyException();
+ }
+ else // noch nicht eingefuegt
+ {
+ const SvxFieldData* pField = getData();
+ if (!pField)
+ return aRet;
+
+ const SvxURLField* pURL = static_cast<const SvxURLField*>(pField);
+ if (rName == SC_UNONAME_URL)
+ aRet <<= pURL->GetURL();
+ else if (rName == SC_UNONAME_REPR)
+ aRet <<= pURL->GetRepresentation();
+ else if (rName == SC_UNONAME_TARGET)
+ aRet <<= pURL->GetTargetFrame();
+ else
+ throw beans::UnknownPropertyException();
+ }
+ return aRet;
+}
+
ScEditFieldObj::ScEditFieldObj(
const uno::Reference<text::XTextRange>& rContent,
SvxEditSource* pEditSrc, FieldType eType, const ESelection& rSel) :
@@ -1165,13 +1255,11 @@ ScEditFieldObj::ScEditFieldObj(
}
void ScEditFieldObj::InitDoc(
- const uno::Reference<text::XTextRange>& rContent,
- SvxEditSource* pEditSrc, FieldType eType, const ESelection& rSel)
+ const uno::Reference<text::XTextRange>& rContent, SvxEditSource* pEditSrc, const ESelection& rSel)
{
if (!pEditSource)
{
mpContent = rContent;
- meType = eType;
mpData.reset();
aSelection = rSel;
@@ -1187,7 +1275,7 @@ ScEditFieldObj::~ScEditFieldObj()
SvxFieldItem ScEditFieldObj::CreateFieldItem()
{
OSL_ENSURE( !pEditSource, "CreateFieldItem mit eingefuegtem Feld" );
- return SvxFieldItem(*mpData, EE_FEATURE_FIELD);
+ return SvxFieldItem(*getData(), EE_FEATURE_FIELD);
}
void ScEditFieldObj::DeleteField()
@@ -1245,7 +1333,7 @@ rtl::OUString SAL_CALL ScEditFieldObj::getPresentation( sal_Bool bShowCommand )
default:
;
}
- return rtl::OUString();
+ return rtl::OUString("fail");
}
// XTextContent
@@ -1323,75 +1411,14 @@ uno::Any SAL_CALL ScEditFieldObj::getPropertyValue( const rtl::OUString& aProper
uno::RuntimeException)
{
SolarMutexGuard aGuard;
- uno::Any aRet;
-
- // anchor type is always "as character", text wrap always "none"
-
- if (aPropertyName == SC_UNONAME_ANCTYPE)
- aRet <<= text::TextContentAnchorType_AS_CHARACTER;
- else if (aPropertyName == SC_UNONAME_ANCTYPES)
- {
- uno::Sequence<text::TextContentAnchorType> aSeq(1);
- aSeq[0] = text::TextContentAnchorType_AS_CHARACTER;
- aRet <<= aSeq;
- }
- else if (aPropertyName == SC_UNONAME_TEXTWRAP)
- aRet <<= text::WrapTextMode_NONE;
- else if (pEditSource)
- {
- //! Feld-Funktionen muessen an den Forwarder !!!
- ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine();
- ScUnoEditEngine aTempEngine(pEditEngine);
-
- // Typ egal (in Zellen gibts nur URLs)
- const SvxFieldData* pField = aTempEngine.FindByPos( aSelection.nStartPara, aSelection.nStartPos, 0 );
- OSL_ENSURE(pField,"getPropertyValue: Feld nicht gefunden");
- if (!pField)
- throw uno::RuntimeException();
-
- switch (meType)
- {
- case URL:
- {
- if (pField->GetClassId() != SVX_URLFIELD)
- throw uno::RuntimeException();
-
- const SvxURLField* pURL = static_cast<const SvxURLField*>(pField);
-
- if (aPropertyName == SC_UNONAME_URL)
- aRet <<= pURL->GetURL();
- else if (aPropertyName == SC_UNONAME_REPR)
- aRet <<= pURL->GetRepresentation();
- else if (aPropertyName == SC_UNONAME_TARGET)
- aRet <<= pURL->GetTargetFrame();
- }
- break;
- }
- }
- else // noch nicht eingefuegt
+ switch (meType)
{
- const SvxFieldData* pField = getData();
- if (!pField)
- return aRet;
-
- switch (meType)
- {
- case URL:
- {
- const SvxURLField* pURL = static_cast<const SvxURLField*>(pField);
- if (aPropertyName == SC_UNONAME_URL)
- aRet <<= pURL->GetURL();
- else if (aPropertyName == SC_UNONAME_REPR)
- aRet <<= pURL->GetRepresentation();
- else if (aPropertyName == SC_UNONAME_TARGET)
- aRet <<= pURL->GetTargetFrame();
- }
- break;
- default:
- ;
- }
+ case URL:
+ return getPropertyValueURL(aPropertyName);
+ break;
+ default:
+ throw beans::UnknownPropertyException();
}
- return aRet;
}
SC_IMPL_DUMMY_PROPERTY_LISTENER( ScEditFieldObj )
diff --git a/sc/source/ui/unoobj/servuno.cxx b/sc/source/ui/unoobj/servuno.cxx
index d7c2d9b..e726f7b 100644
--- a/sc/source/ui/unoobj/servuno.cxx
+++ b/sc/source/ui/unoobj/servuno.cxx
@@ -418,6 +418,34 @@ sal_uInt16 ScServiceProvider::GetProviderType(const String& rServiceName)
return SC_SERVICE_INVALID;
}
+namespace {
+
+ScEditFieldObj::FieldType getFieldType(sal_uInt16 nOldType)
+{
+ switch (nOldType)
+ {
+ case SC_SERVICE_PAGEFIELD:
+ return ScEditFieldObj::Page;
+ case SC_SERVICE_PAGESFIELD:
+ return ScEditFieldObj::Pages;
+ case SC_SERVICE_DATEFIELD:
+ return ScEditFieldObj::Date;
+ case SC_SERVICE_TIMEFIELD:
+ return ScEditFieldObj::Time;
+ case SC_SERVICE_TITLEFIELD:
+ return ScEditFieldObj::Title;
+ case SC_SERVICE_FILEFIELD:
+ return ScEditFieldObj::File;
+ case SC_SERVICE_SHEETFIELD:
+ return ScEditFieldObj::Sheet;
+ default:
+ ;
+ }
+ return ScEditFieldObj::URL;
+}
+
+}
+
uno::Reference<uno::XInterface> ScServiceProvider::MakeInstance(
sal_uInt16 nType, ScDocShell* pDocShell )
{
@@ -445,7 +473,7 @@ uno::Reference<uno::XInterface> ScServiceProvider::MakeInstance(
{
uno::Reference<text::XTextRange> xNullContent;
xRet.set(static_cast<text::XTextField*>(
- new ScHeaderFieldObj(xNullContent, NULL, nType, ESelection())));
+ new ScEditFieldObj(xNullContent, NULL, getFieldType(nType), ESelection())));
}
break;
case SC_SERVICE_CELLSTYLE:
diff --git a/sc/source/ui/unoobj/textuno.cxx b/sc/source/ui/unoobj/textuno.cxx
index eacdf6e..0b67312 100644
--- a/sc/source/ui/unoobj/textuno.cxx
+++ b/sc/source/ui/unoobj/textuno.cxx
@@ -423,7 +423,7 @@ void SAL_CALL ScHeaderFooterTextObj::insertTextContent(
SolarMutexGuard aGuard;
if ( xContent.is() && xRange.is() )
{
- ScHeaderFieldObj* pHeaderField = ScHeaderFieldObj::getImplementation( xContent );
+ ScEditFieldObj* pHeaderField = ScEditFieldObj::getImplementation( xContent );
SvxUnoTextRangeBase* pTextRange =
ScHeaderFooterTextCursor::getImplementation( xRange );
commit e80dd6ace8162e31616df723ecb32c027b3c8449
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Apr 25 10:55:22 2012 -0400
Prepare for supporting fields other than URL in ScEditFieldObj.
diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx
index 7acff6c..7c1929d 100644
--- a/sc/inc/fielduno.hxx
+++ b/sc/inc/fielduno.hxx
@@ -337,7 +337,7 @@ class ScEditFieldObj : public cppu::WeakImplHelper4<
private boost::noncopyable
{
public:
- enum FieldType { URL = 0 };
+ enum FieldType { URL = 0, Page, Pages, Date, Time, Title, File, Sheet };
private:
const SfxItemPropertySet* pPropSet;
@@ -354,6 +354,8 @@ private:
SvxFieldData* getData();
+ void setPropertyValueURL(const rtl::OUString& rName, const com::sun::star::uno::Any& rVal);
+
public:
static const com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId();
static ScEditFieldObj* getImplementation(const com::sun::star::uno::Reference<com::sun::star::text::XTextContent>& xObj);
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index eacf867..4ae7236 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -1050,15 +1050,108 @@ SvxFieldData* ScEditFieldObj::getData()
{
switch (meType)
{
+ case Date:
+ mpData.reset(new SvxDateField);
+ break;
+ case File:
+ mpData.reset(
+ new SvxExtFileField(rtl::OUString(), SVXFILETYPE_VAR, SVXFILEFORMAT_NAME_EXT));
+ break;
+ case Page:
+ mpData.reset(new SvxPageField);
+ break;
+ case Pages:
+ mpData.reset(new SvxPagesField);
+ break;
+ case Sheet:
+ mpData.reset(new SvxTableField);
+ break;
+ case Time:
+ mpData.reset(new SvxTimeField);
+ break;
+ case Title:
+ mpData.reset(new SvxFileField);
+ break;
case URL:
mpData.reset(
new SvxURLField(rtl::OUString(), rtl::OUString(), SVXURLFORMAT_APPDEFAULT));
break;
+ default:
+ mpData.reset(new SvxFieldData);
}
}
return mpData.get();
}
+void ScEditFieldObj::setPropertyValueURL(const rtl::OUString& rName, const com::sun::star::uno::Any& rVal)
+{
+ rtl::OUString aStrVal;
+ if (pEditSource)
+ {
+ // Edit engine instance already exists for this field item. Use it.
+ ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine();
+ ScUnoEditEngine aTempEngine(pEditEngine);
+
+ // Typ egal (in Zellen gibts nur URLs)
+ SvxFieldData* pField = aTempEngine.FindByPos( aSelection.nStartPara, aSelection.nStartPos, 0 );
+ OSL_ENSURE(pField,"setPropertyValue: Feld nicht gefunden");
+ if (!pField)
+ return;
+
+ if (pField->GetClassId() != SVX_URLFIELD)
+ // Make sure this is indeed a URL field.
+ return;
+
+ SvxURLField* pURL = static_cast<SvxURLField*>(pField);
+
+ if (rName == SC_UNONAME_URL)
+ {
+ if (rVal >>= aStrVal)
+ pURL->SetURL(aStrVal);
+ }
+ else if (rName == SC_UNONAME_REPR)
+ {
+ if (rVal >>= aStrVal)
+ pURL->SetRepresentation(aStrVal);
+ }
+ else if (rName == SC_UNONAME_TARGET)
+ {
+ if (rVal >>= aStrVal)
+ pURL->SetTargetFrame(aStrVal);
+ }
+ else
+ throw beans::UnknownPropertyException();
+
+ pEditEngine->QuickInsertField( SvxFieldItem(*pField, EE_FEATURE_FIELD), aSelection );
+ pEditSource->UpdateData();
+ return;
+ }
+
+ // Edit engine instance not yet present. Store the item data for later use.
+ SvxFieldData* pData = getData();
+ if (!pData)
+ throw uno::RuntimeException();
+
+ SvxURLField* p = static_cast<SvxURLField*>(pData);
+ if (rName == SC_UNONAME_URL)
+ {
+ if (rVal >>= aStrVal)
+ p->SetURL(aStrVal);
+ }
+ else if (rName == SC_UNONAME_REPR)
+ {
+ if (rVal >>= aStrVal)
+ p->SetRepresentation(aStrVal);
+ }
+ else if (rName == SC_UNONAME_TARGET)
+ {
+ if (rVal >>= aStrVal)
+ p->SetTargetFrame(aStrVal);
+ }
+ else
+ throw beans::UnknownPropertyException();
+}
+
ScEditFieldObj::ScEditFieldObj(
const uno::Reference<text::XTextRange>& rContent,
SvxEditSource* pEditSrc, FieldType eType, const ESelection& rSel) :
@@ -1215,87 +1308,10 @@ void SAL_CALL ScEditFieldObj::setPropertyValue(
uno::RuntimeException)
{
SolarMutexGuard aGuard;
- rtl::OUString aStrVal;
- if (pEditSource)
- {
- // Edit engine instance already exists for this field item. Use it.
- ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine();
- ScUnoEditEngine aTempEngine(pEditEngine);
-
- // Typ egal (in Zellen gibts nur URLs)
- SvxFieldData* pField = aTempEngine.FindByPos( aSelection.nStartPara, aSelection.nStartPos, 0 );
- OSL_ENSURE(pField,"setPropertyValue: Feld nicht gefunden");
- if (!pField)
- return;
-
- bool bOk = true;
- switch (meType)
- {
- case URL:
- {
- if (pField->GetClassId() != SVX_URLFIELD)
- {
- // Make sure this is indeed a URL field.
- bOk = false;
- break;
- }
- SvxURLField* pURL = static_cast<SvxURLField*>(pField);
-
- if (aPropertyName == SC_UNONAME_URL)
- {
- if (aValue >>= aStrVal)
- pURL->SetURL(aStrVal);
- }
- else if (aPropertyName == SC_UNONAME_REPR)
- {
- if (aValue >>= aStrVal)
- pURL->SetRepresentation(aStrVal);
- }
- else if (aPropertyName == SC_UNONAME_TARGET)
- {
- if (aValue >>= aStrVal)
- pURL->SetTargetFrame(aStrVal);
- }
- else
- bOk = false;
- }
- break;
- }
-
- if (bOk)
- {
- pEditEngine->QuickInsertField( SvxFieldItem(*pField, EE_FEATURE_FIELD), aSelection );
- pEditSource->UpdateData();
- }
- return;
- }
-
- // Edit engine instance not yet present. Store the item data for later use.
- SvxFieldData* pData = getData();
- if (!pData)
- throw uno::RuntimeException();
-
switch (meType)
{
case URL:
- {
- SvxURLField* p = static_cast<SvxURLField*>(pData);
- if (aPropertyName == SC_UNONAME_URL)
- {
- if (aValue >>= aStrVal)
- p->SetURL(aStrVal);
- }
- else if (aPropertyName == SC_UNONAME_REPR)
- {
- if (aValue >>= aStrVal)
- p->SetRepresentation(aStrVal);
- }
- else if (aPropertyName == SC_UNONAME_TARGET)
- {
- if (aValue >>= aStrVal)
- p->SetTargetFrame(aStrVal);
- }
- }
+ setPropertyValueURL(aPropertyName, aValue);
break;
default:
throw beans::UnknownPropertyException();
commit 63143648a0da5f30b4883cbc4ff1885b19afdf0f
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Tue Apr 24 23:12:17 2012 -0400
Nobody uses ScCellFieldObj now. Removing.
diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx
index d87f11f..7acff6c 100644
--- a/sc/inc/fielduno.hxx
+++ b/sc/inc/fielduno.hxx
@@ -131,138 +131,6 @@ public:
throw(::com::sun::star::uno::RuntimeException);
};
-
-class ScCellFieldObj : public ScMutexHelper,
- public ::cppu::OComponentHelper,
- public ::com::sun::star::text::XTextField,
- public ::com::sun::star::beans::XPropertySet,
- public ::com::sun::star::lang::XUnoTunnel,
- public ::com::sun::star::lang::XServiceInfo,
- public SfxListener
-{
-private:
- const SfxItemPropertySet* pPropSet;
- ScDocShell* pDocShell;
- ScAddress aCellPos;
- SvxEditSource* pEditSource;
- ESelection aSelection;
-
- String aUrl; // content, only iff not already inserted
- String aRepresentation;
- String aTarget;
-
- ScCellFieldObj(); // disabled
-public:
- ScCellFieldObj(ScDocShell* pDocSh, const ScAddress& rPos,
- const ESelection& rSel);
- virtual ~ScCellFieldObj();
-
- virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
-
- // called by getImplementation:
- void DeleteField();
- sal_Bool IsInserted() const { return pEditSource != NULL; }
- SvxFieldItem CreateFieldItem();
- void InitDoc( ScDocShell* pDocSh, const ScAddress& rPos,
- const ESelection& rSel );
-
- virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(
- const ::com::sun::star::uno::Type & rType )
- throw(::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
- const ::com::sun::star::uno::Type & rType )
- throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL acquire() throw();
- virtual void SAL_CALL release() throw();
-
- // XTextField
- virtual ::rtl::OUString SAL_CALL getPresentation( sal_Bool bShowCommand )
- throw(::com::sun::star::uno::RuntimeException);
-
- // XTextContent
- virtual void SAL_CALL attach( const ::com::sun::star::uno::Reference<
- ::com::sun::star::text::XTextRange >& xTextRange )
- throw(::com::sun::star::lang::IllegalArgumentException,
- ::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list