summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2012-04-25 19:02:25 -0400
committerKohei Yoshida <kohei.yoshida@gmail.com>2012-04-26 09:58:06 -0400
commit1aa91a2d8e7db5cebff5b47f3005f1acff64d25e (patch)
treeb4d3ccefb3b5a95da62ec769d8cb66da85a2a8f3 /sc
parentfb43bca9085d841a1196b168fa7c8c09b97e8b8a (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.cxx93
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;