Kaydet (Commit) 1aa91a2d authored tarafından Kohei Yoshida's avatar Kohei Yoshida

Infer the field type for cell field objects too.

Thereby laying down the foundation for arbitrary field support in cells.
üst fb43bca9
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
using namespace com::sun::star; using namespace com::sun::star;
//------------------------------------------------------------------------ namespace {
// alles ohne Which-ID, Map nur fuer PropertySetInfo // alles ohne Which-ID, Map nur fuer PropertySetInfo
...@@ -102,6 +102,40 @@ const SfxItemPropertySet* lcl_GetFileFieldPropertySet() ...@@ -102,6 +102,40 @@ const SfxItemPropertySet* lcl_GetFileFieldPropertySet()
return &aFileFieldPropertySet_Impl; 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" #define SCTEXTFIELD_SERVICE "com.sun.star.text.TextField"
...@@ -297,12 +331,16 @@ uno::Reference<text::XTextField> ScCellFieldsObj::GetObjectByIndex_Impl(sal_Int3 ...@@ -297,12 +331,16 @@ uno::Reference<text::XTextField> ScCellFieldsObj::GetObjectByIndex_Impl(sal_Int3
if (!pData) if (!pData)
return uno::Reference<text::XTextField>(); 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(); sal_uInt16 nPar = aTempEngine.GetFieldPar();
xub_StrLen nPos = aTempEngine.GetFieldPos(); xub_StrLen nPos = aTempEngine.GetFieldPos();
ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Feld ist 1 Zeichen 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( 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; return xRet;
} }
...@@ -452,42 +490,6 @@ ScHeaderFieldsObj::~ScHeaderFieldsObj() ...@@ -452,42 +490,6 @@ ScHeaderFieldsObj::~ScHeaderFieldsObj()
// XIndexAccess (via XTextFields) // 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 uno::Reference<text::XTextField> ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_Int32 Index) const
{ {
//! Feld-Funktionen muessen an den Forwarder !!! //! Feld-Funktionen muessen an den Forwarder !!!
...@@ -498,15 +500,12 @@ uno::Reference<text::XTextField> ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_In ...@@ -498,15 +500,12 @@ uno::Reference<text::XTextField> ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_In
if (!pData) if (!pData)
return NULL; return NULL;
sal_uInt16 nPar = aTempEngine.GetFieldPar(); // Get the parent text range instance.
xub_StrLen nPos = aTempEngine.GetFieldPos();
ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Field is 1 character
uno::Reference<text::XTextRange> xTextRange; uno::Reference<text::XTextRange> xTextRange;
ScHeaderFooterContentObj& rContentObj = mrData.GetContentObj(); ScHeaderFooterContentObj& rContentObj = mrData.GetContentObj();
uno::Reference<text::XText> xText; uno::Reference<text::XText> xText;
sal_uInt16 nPart = mrData.GetPart(); sal_uInt16 nPart = mrData.GetPart();
if ( nPart == SC_HDFT_LEFT ) if (nPart == SC_HDFT_LEFT)
xText = rContentObj.getLeftText(); xText = rContentObj.getLeftText();
else if (nPart == SC_HDFT_CENTER) else if (nPart == SC_HDFT_CENTER)
xText = rContentObj.getCenterText(); xText = rContentObj.getCenterText();
...@@ -515,8 +514,12 @@ uno::Reference<text::XTextField> ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_In ...@@ -515,8 +514,12 @@ uno::Reference<text::XTextField> ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_In
uno::Reference<text::XTextRange> xTemp(xText, uno::UNO_QUERY); uno::Reference<text::XTextRange> xTemp(xText, uno::UNO_QUERY);
xTextRange = xTemp; 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( uno::Reference<text::XTextField> xRet(
new ScEditFieldObj(xTextRange, new ScHeaderFooterEditSource(mrData), eRealType, aSelection)); new ScEditFieldObj(xTextRange, new ScHeaderFooterEditSource(mrData), eRealType, aSelection));
return xRet; return xRet;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment