diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2012-04-25 19:02:25 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2012-04-26 09:58:06 -0400 |
commit | 1aa91a2d8e7db5cebff5b47f3005f1acff64d25e (patch) | |
tree | b4d3ccefb3b5a95da62ec769d8cb66da85a2a8f3 /sc | |
parent | fb43bca9085d841a1196b168fa7c8c09b97e8b8a (diff) |
Infer the field type for cell field objects too.
Thereby laying down the foundation for arbitrary field support in cells.
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/unoobj/fielduno.cxx | 93 |
1 files changed, 48 insertions, 45 deletions
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx index 383e136e0efb..42a137d1e9a7 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; |