Kaydet (Commit) 63114e6d authored tarafından Kohei Yoshida's avatar Kohei Yoshida

Create SvxFieldData instance directly from the UNO textfield object.

Change-Id: Ifa8210ffdf29624689f547b436fd687a2de82eb1
üst aac15b63
...@@ -37,6 +37,12 @@ ...@@ -37,6 +37,12 @@
#include <com/sun/star/text/textfield/Type.hpp> #include <com/sun/star/text/textfield/Type.hpp>
namespace com { namespace sun { namespace star { namespace text {
class XTextContent;
}}}}
class SvNumberFormatter; class SvNumberFormatter;
class MetaAction; class MetaAction;
...@@ -47,6 +53,8 @@ class MetaAction; ...@@ -47,6 +53,8 @@ class MetaAction;
class EDITENG_DLLPUBLIC SvxFieldData : public SvPersistBase class EDITENG_DLLPUBLIC SvxFieldData : public SvPersistBase
{ {
public: public:
static SvxFieldData* Create(const com::sun::star::uno::Reference<com::sun::star::text::XTextContent>& xContent);
SV_DECL_PERSIST1( SvxFieldData, SvPersistBase, -1 ) SV_DECL_PERSIST1( SvxFieldData, SvPersistBase, -1 )
SvxFieldData(); SvxFieldData();
...@@ -92,7 +100,7 @@ public: ...@@ -92,7 +100,7 @@ public:
// ================================================================= // =================================================================
enum SvxDateType { SVXDATETYPE_FIX, SVXDATETYPE_VAR }; enum SvxDateType { SVXDATETYPE_FIX, SVXDATETYPE_VAR };
enum SvxDateFormat { SVXDATEFORMAT_APPDEFAULT, // Set as in App enum SvxDateFormat { SVXDATEFORMAT_APPDEFAULT = 0, // Set as in App
SVXDATEFORMAT_SYSTEM, // Set as in System SVXDATEFORMAT_SYSTEM, // Set as in System
SVXDATEFORMAT_STDSMALL, SVXDATEFORMAT_STDSMALL,
SVXDATEFORMAT_STDBIG, SVXDATEFORMAT_STDBIG,
...@@ -139,7 +147,7 @@ public: ...@@ -139,7 +147,7 @@ public:
}; };
enum SvxURLFormat { SVXURLFORMAT_APPDEFAULT, // Set as in App enum SvxURLFormat { SVXURLFORMAT_APPDEFAULT = 0, // Set as in App
SVXURLFORMAT_URL, // Represent URL SVXURLFORMAT_URL, // Represent URL
SVXURLFORMAT_REPR // Constitute repraesentation SVXURLFORMAT_REPR // Constitute repraesentation
}; };
...@@ -237,7 +245,7 @@ public: ...@@ -237,7 +245,7 @@ public:
enum SvxTimeType { SVXTIMETYPE_FIX, SVXTIMETYPE_VAR }; enum SvxTimeType { SVXTIMETYPE_FIX, SVXTIMETYPE_VAR };
enum SvxTimeFormat { SVXTIMEFORMAT_APPDEFAULT, // Set as in App enum SvxTimeFormat { SVXTIMEFORMAT_APPDEFAULT = 0, // Set as in App
SVXTIMEFORMAT_SYSTEM, // Set as in System SVXTIMEFORMAT_SYSTEM, // Set as in System
SVXTIMEFORMAT_STANDARD, SVXTIMEFORMAT_STANDARD,
SVXTIMEFORMAT_24_HM, // 13:49 SVXTIMEFORMAT_24_HM, // 13:49
...@@ -287,7 +295,7 @@ public: ...@@ -287,7 +295,7 @@ public:
enum SvxFileType { SVXFILETYPE_FIX, SVXFILETYPE_VAR }; enum SvxFileType { SVXFILETYPE_FIX, SVXFILETYPE_VAR };
enum SvxFileFormat { SVXFILEFORMAT_NAME_EXT, // File name with Extension enum SvxFileFormat { SVXFILEFORMAT_NAME_EXT = 0, // File name with Extension
SVXFILEFORMAT_FULLPATH, // full path SVXFILEFORMAT_FULLPATH, // full path
SVXFILEFORMAT_PATH, // only path SVXFILEFORMAT_PATH, // only path
SVXFILEFORMAT_NAME // only file name SVXFILEFORMAT_NAME // only file name
...@@ -326,7 +334,7 @@ public: ...@@ -326,7 +334,7 @@ public:
enum SvxAuthorType { SVXAUTHORTYPE_FIX, SVXAUTHORTYPE_VAR }; enum SvxAuthorType { SVXAUTHORTYPE_FIX, SVXAUTHORTYPE_VAR };
enum SvxAuthorFormat { SVXAUTHORFORMAT_FULLNAME, // full name enum SvxAuthorFormat { SVXAUTHORFORMAT_FULLNAME = 0, // full name
SVXAUTHORFORMAT_NAME, // Only Last name SVXAUTHORFORMAT_NAME, // Only Last name
SVXAUTHORFORMAT_FIRSTNAME, // Only first name SVXAUTHORFORMAT_FIRSTNAME, // Only first name
SVXAUTHORFORMAT_SHORTNAME // Initials SVXAUTHORFORMAT_SHORTNAME // Initials
......
...@@ -26,7 +26,36 @@ ...@@ -26,7 +26,36 @@
* instead of those above. * instead of those above.
*/ */
#define UNO_TC_PROP_ANCHOR "Anchor" // Common across fields
#define UNO_TC_PROP_ANCHOR "Anchor"
#define UNO_TC_PROP_TEXTFIELD_TYPE "TextFieldType"
#define UNO_TC_PROP_IS_FIXED "IsFixed"
#define UNO_TC_PROP_CURRENT_PRESENTATION "CurrentPresentation"
// Date & Time
#define UNO_TC_PROP_IS_DATE "IsDate"
#define UNO_TC_PROP_DATE_TIME "DateTime"
#define UNO_TC_PROP_NUMFORMAT "NumberFormat"
// URL
#define UNO_TC_PROP_URL_FORMAT "Format"
#define UNO_TC_PROP_URL_REPRESENTATION "Representation"
#define UNO_TC_PROP_URL_TARGET "Target"
#define UNO_TC_PROP_URL "URL"
// Table
#define UNO_TC_PROP_TABLE_POSITION "TablePosition"
// File
#define UNO_TC_PROP_FILE_FORMAT "FileFormat"
// Author
#define UNO_TC_PROP_AUTHOR_CONTENT "Content"
#define UNO_TC_PROP_AUTHOR_FORMAT "AuthorFormat"
#define UNO_TC_PROP_AUTHOR_FULLNAME "FullName"
// Measure
#define UNO_TC_PROP_MEASURE_KIND "Kind"
#define UNO_TR_PROP_SELECTION "Selection" #define UNO_TR_PROP_SELECTION "Selection"
......
...@@ -34,15 +34,192 @@ ...@@ -34,15 +34,192 @@
#include <unotools/localfilehelper.hxx> #include <unotools/localfilehelper.hxx>
#include <editeng/flditem.hxx> #include <editeng/flditem.hxx>
#include <editeng/measfld.hxx> #include <editeng/measfld.hxx>
#include "editeng/unonames.hxx"
#include <tools/tenccvt.hxx> #include <tools/tenccvt.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/text/XTextContent.hpp>
#include <com/sun/star/text/FilenameDisplayFormat.hpp>
#include <com/sun/star/util/DateTime.hpp>
using namespace com::sun::star;
#define FRAME_MARKER (sal_uInt32)0x21981357 #define FRAME_MARKER (sal_uInt32)0x21981357
#define CHARSET_MARKER (FRAME_MARKER+1) #define CHARSET_MARKER (FRAME_MARKER+1)
// ----------------------------------------------------------------------- SvxFieldData* SvxFieldData::Create(const uno::Reference<text::XTextContent>& xTextContent)
{
uno::Reference<beans::XPropertySet> xPropSet(xTextContent, uno::UNO_QUERY);
if (!xPropSet.is())
return NULL;
uno::Any aAny = xPropSet->getPropertyValue(UNO_TC_PROP_TEXTFIELD_TYPE);
sal_Int32 nFieldType = aAny.get<sal_Int32>();
switch (nFieldType)
{
case text::textfield::Type::TIME:
case text::textfield::Type::EXTENDED_TIME:
case text::textfield::Type::DATE:
case text::textfield::Type::EXTENDED_DATE:
{
sal_Bool bIsDate = false;
xPropSet->getPropertyValue(UNO_TC_PROP_IS_DATE) >>= bIsDate;
if (bIsDate)
{
util::DateTime aDateTime = xPropSet->getPropertyValue(UNO_TC_PROP_DATE_TIME).get<util::DateTime>();
Date aDate(aDateTime.Day, aDateTime.Month, aDateTime.Year);
sal_Bool bIsFixed = false;
xPropSet->getPropertyValue(UNO_TC_PROP_IS_FIXED) >>= bIsFixed;
SvxDateField* pData = new SvxDateField(aDate, bIsFixed ? SVXDATETYPE_FIX : SVXDATETYPE_VAR);
sal_Int32 nNumFmt = -1;
xPropSet->getPropertyValue(UNO_TC_PROP_NUMFORMAT) >>= nNumFmt;
if (nNumFmt >= SVXDATEFORMAT_APPDEFAULT && nNumFmt <= SVXDATEFORMAT_F)
pData->SetFormat(static_cast<SvxDateFormat>(nNumFmt));
return pData;
}
if (nFieldType != text::textfield::Type::TIME && nFieldType != text::textfield::Type::DATE)
{
util::DateTime aDateTime = xPropSet->getPropertyValue(UNO_TC_PROP_DATE_TIME).get<util::DateTime>();
Time aTime(aDateTime.Hours, aDateTime.Minutes, aDateTime.Seconds, aDateTime.HundredthSeconds);
sal_Bool bIsFixed = false;
xPropSet->getPropertyValue(UNO_TC_PROP_IS_FIXED) >>= bIsFixed;
SvxExtTimeField* pData = new SvxExtTimeField(aTime, bIsFixed ? SVXTIMETYPE_FIX : SVXTIMETYPE_VAR);
sal_Int32 nNumFmt = -1;
xPropSet->getPropertyValue(UNO_TC_PROP_NUMFORMAT) >>= nNumFmt;
if (nNumFmt >= SVXTIMEFORMAT_APPDEFAULT && nNumFmt <= SVXTIMEFORMAT_AM_HMSH)
pData->SetFormat(static_cast<SvxTimeFormat>(nNumFmt));
return pData;
}
return new SvxTimeField();
}
case text::textfield::Type::URL:
{
rtl::OUString aRep, aTarget, aURL;
sal_Int16 nFmt = -1;
xPropSet->getPropertyValue(UNO_TC_PROP_URL_REPRESENTATION) >>= aRep;
xPropSet->getPropertyValue(UNO_TC_PROP_URL_TARGET) >>= aTarget;
xPropSet->getPropertyValue(UNO_TC_PROP_URL) >>= aURL;
xPropSet->getPropertyValue(UNO_TC_PROP_URL_FORMAT) >>= nFmt;
SvxURLField* pData = new SvxURLField(aURL, aRep, aRep.isEmpty() ? SVXURLFORMAT_URL : SVXURLFORMAT_REPR);
pData->SetTargetFrame(aTarget);
if (nFmt >= SVXURLFORMAT_APPDEFAULT && nFmt <= SVXURLFORMAT_REPR)
pData->SetFormat(static_cast<SvxURLFormat>(nFmt));
return pData;
}
case text::textfield::Type::PAGE:
return new SvxPageField();
case text::textfield::Type::PAGES:
return new SvxPagesField();
case text::textfield::Type::FILE:
return new SvxFileField();
case text::textfield::Type::TABLE:
{
sal_Int32 nTab = 0;
xPropSet->getPropertyValue(UNO_TC_PROP_TABLE_POSITION) >>= nTab;
return new SvxTableField(nTab);
}
case text::textfield::Type::EXTENDED_FILE:
{
rtl::OUString aPresentation;
sal_Bool bIsFixed = false;
sal_Int16 nFmt = text::FilenameDisplayFormat::FULL;
xPropSet->getPropertyValue(UNO_TC_PROP_IS_FIXED) >>= bIsFixed;
xPropSet->getPropertyValue(UNO_TC_PROP_CURRENT_PRESENTATION) >>= aPresentation;
xPropSet->getPropertyValue(UNO_TC_PROP_FILE_FORMAT) >>= nFmt;
SvxFileFormat eFmt = SVXFILEFORMAT_NAME_EXT;
switch (nFmt)
{
case text::FilenameDisplayFormat::FULL: eFmt = SVXFILEFORMAT_FULLPATH; break;
case text::FilenameDisplayFormat::PATH: eFmt = SVXFILEFORMAT_PATH; break;
case text::FilenameDisplayFormat::NAME: eFmt = SVXFILEFORMAT_NAME; break;
default:;
}
// pass fixed attribute to constructor
return new SvxExtFileField(
aPresentation, bIsFixed ? SVXFILETYPE_FIX : SVXFILETYPE_VAR, eFmt);
}
case text::textfield::Type::AUTHOR:
{
sal_Bool bIsFixed = false;
sal_Bool bFullName = false;
sal_Int16 nFmt = -1;
rtl::OUString aPresentation, aContent, aFirstName, aLastName;
xPropSet->getPropertyValue(UNO_TC_PROP_IS_FIXED) >>= bIsFixed;
xPropSet->getPropertyValue(UNO_TC_PROP_AUTHOR_FULLNAME) >>= bFullName;
xPropSet->getPropertyValue(UNO_TC_PROP_CURRENT_PRESENTATION) >>= aPresentation;
xPropSet->getPropertyValue(UNO_TC_PROP_AUTHOR_CONTENT) >>= aContent;
xPropSet->getPropertyValue(UNO_TC_PROP_AUTHOR_FORMAT) >>= nFmt;
// do we have CurrentPresentation given? Mimic behaviour of
// writer, which means: prefer CurrentPresentation over Content
// if both are given.
if (!aPresentation.isEmpty())
aContent = aPresentation;
sal_Int32 nPos = aContent.lastIndexOf(sal_Unicode(' '), 0);
if (nPos > 0)
{
aFirstName = aContent.copy(0, nPos);
aLastName = aContent.copy(nPos + 1);
}
else
{
aLastName = aContent;
}
// #92009# pass fixed attribute to constructor
SvxAuthorField* pData = new SvxAuthorField(
aFirstName, aLastName, rtl::OUString(), bIsFixed ? SVXAUTHORTYPE_FIX : SVXAUTHORTYPE_VAR);
if (!bFullName)
{
pData->SetFormat(SVXAUTHORFORMAT_SHORTNAME);
}
else if (nFmt >= SVXAUTHORFORMAT_FULLNAME || nFmt <= SVXAUTHORFORMAT_SHORTNAME)
{
pData->SetFormat(static_cast<SvxAuthorFormat>(nFmt));
}
return pData;
}
case text::textfield::Type::MEASURE:
{
SdrMeasureFieldKind eKind = SDRMEASUREFIELD_VALUE;
sal_Int16 nTmp = -1;
xPropSet->getPropertyValue(UNO_TC_PROP_MEASURE_KIND) >>= nTmp;
if (nTmp == static_cast<sal_Int16>(SDRMEASUREFIELD_UNIT) ||
nTmp == static_cast<sal_Int16>(SDRMEASUREFIELD_ROTA90BLANCS))
eKind = static_cast<SdrMeasureFieldKind>(nTmp);
return new SdrMeasureField(eKind);
}
case text::textfield::Type::HEADER:
return new SvxHeaderField();
case text::textfield::Type::FOOTER:
return new SvxFooterField();
case text::textfield::Type::DATE_TIME:
return new SvxDateTimeField();
default:
;
};
return NULL;
}
TYPEINIT1( SvxFieldItem, SfxPoolItem ); TYPEINIT1( SvxFieldItem, SfxPoolItem );
......
...@@ -90,7 +90,7 @@ const SfxItemPropertySet* ImplGetFieldItemPropertySet( sal_Int32 mnId ) ...@@ -90,7 +90,7 @@ const SfxItemPropertySet* ImplGetFieldItemPropertySet( sal_Int32 mnId )
{ MAP_CHAR_LEN("DateTime"), WID_DATE, &::getCppuType((const util::DateTime*)0), 0, 0 }, { MAP_CHAR_LEN("DateTime"), WID_DATE, &::getCppuType((const util::DateTime*)0), 0, 0 },
{ MAP_CHAR_LEN("IsFixed"), WID_BOOL1, &::getBooleanCppuType(), 0, 0 }, { MAP_CHAR_LEN("IsFixed"), WID_BOOL1, &::getBooleanCppuType(), 0, 0 },
{ MAP_CHAR_LEN("IsDate"), WID_BOOL2, &::getBooleanCppuType(), 0, 0 }, { MAP_CHAR_LEN("IsDate"), WID_BOOL2, &::getBooleanCppuType(), 0, 0 },
{ MAP_CHAR_LEN("NumberFormat"), WID_INT32, &::getCppuType((const sal_Int16*)0), 0, 0 }, { MAP_CHAR_LEN("NumberFormat"), WID_INT32, &::getCppuType((const sal_Int32*)0), 0, 0 },
{0,0,0,0,0,0} {0,0,0,0,0,0}
}; };
static SfxItemPropertySet aExDateTimeFieldPropertySet_Impl(aExDateTimeFieldPropertyMap_Impl); static SfxItemPropertySet aExDateTimeFieldPropertySet_Impl(aExDateTimeFieldPropertyMap_Impl);
...@@ -849,6 +849,9 @@ uno::Any SAL_CALL SvxUnoTextField::getPropertyValue( const OUString& PropertyNam ...@@ -849,6 +849,9 @@ uno::Any SAL_CALL SvxUnoTextField::getPropertyValue( const OUString& PropertyNam
if (PropertyName == UNO_TC_PROP_ANCHOR) if (PropertyName == UNO_TC_PROP_ANCHOR)
return uno::makeAny(mxAnchor); return uno::makeAny(mxAnchor);
if (PropertyName == UNO_TC_PROP_TEXTFIELD_TYPE)
return uno::makeAny(mnServiceId);
uno::Any aValue; uno::Any aValue;
const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMap().getByName( PropertyName ); const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMap().getByName( PropertyName );
......
...@@ -1799,11 +1799,6 @@ void SAL_CALL SvxUnoTextBase::insertTextContent( const uno::Reference< text::XTe ...@@ -1799,11 +1799,6 @@ void SAL_CALL SvxUnoTextBase::insertTextContent( const uno::Reference< text::XTe
if (!pForwarder) if (!pForwarder)
return; return;
SvxUnoTextField* pField = SvxUnoTextField::getImplementation( xContent );
if (pField == NULL)
throw lang::IllegalArgumentException();
uno::Reference<beans::XPropertySet> xPropSet(xRange, uno::UNO_QUERY); uno::Reference<beans::XPropertySet> xPropSet(xRange, uno::UNO_QUERY);
if (!xPropSet.is()) if (!xPropSet.is())
throw lang::IllegalArgumentException(); throw lang::IllegalArgumentException();
...@@ -1813,8 +1808,8 @@ void SAL_CALL SvxUnoTextBase::insertTextContent( const uno::Reference< text::XTe ...@@ -1813,8 +1808,8 @@ void SAL_CALL SvxUnoTextBase::insertTextContent( const uno::Reference< text::XTe
if (!bAbsorb) if (!bAbsorb)
aSel.Start = aSel.End; aSel.Start = aSel.End;
SvxFieldData* pFieldData = pField->CreateFieldData(); SvxFieldData* pFieldData = SvxFieldData::Create(xContent);
if( pFieldData == NULL ) if (!pFieldData)
throw lang::IllegalArgumentException(); throw lang::IllegalArgumentException();
SvxFieldItem aField( *pFieldData, EE_FEATURE_FIELD ); SvxFieldItem aField( *pFieldData, EE_FEATURE_FIELD );
......
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