28#include <com/sun/star/io/XMarkableStream.hpp>
29#include <com/sun/star/util/Time.hpp>
30#include <com/sun/star/util/Date.hpp>
49 const sal_uInt16 DEFAULT_LONG = 0x0001;
50 const sal_uInt16 DEFAULT_DOUBLE = 0x0002;
51 const sal_uInt16 FILTERPROPOSAL = 0x0004;
52 const sal_uInt16 DEFAULT_TIME = 0x0008;
53 const sal_uInt16 DEFAULT_DATE = 0x0010;
58 const OUString& rDefault,
const bool _bSupportExternalBinding,
const bool _bSupportsValidation )
59 :OBoundControlModel( _rxFactory, rUnoControlModelName, rDefault, true, _bSupportExternalBinding, _bSupportsValidation )
60 ,m_nLastReadVersion(0)
62 ,m_bFilterProposal(false)
67OEditBaseModel::OEditBaseModel(
const OEditBaseModel* _pOriginal,
const Reference< XComponentContext >& _rxFactory )
68 :OBoundControlModel( _pOriginal, _rxFactory )
69 ,m_nLastReadVersion(0)
72 m_bFilterProposal = _pOriginal->m_bFilterProposal;
73 m_bEmptyIsNull = _pOriginal->m_bEmptyIsNull;
74 m_aDefault = _pOriginal->m_aDefault;
75 m_aDefaultText = _pOriginal->m_aDefaultText;
79OEditBaseModel::~OEditBaseModel( )
85void OEditBaseModel::write(
const Reference<XObjectOutputStream>& _rxOutStream)
87 OBoundControlModel::write(_rxOutStream);
90 sal_uInt16 nVersionId = 0x0006;
92 "OEditBaseModel::write : invalid special version flags !");
95 nVersionId |= getPersistenceFlags();
96 _rxOutStream->writeShort(nVersionId);
99 _rxOutStream->writeShort(0);
100 _rxOutStream << m_aDefaultText;
103 sal_uInt16 nAnyMask = 0;
104 if (m_aDefault.getValueType().getTypeClass() == TypeClass_LONG)
105 nAnyMask |= DEFAULT_LONG;
106 else if (m_aDefault.getValueType().getTypeClass() == TypeClass_DOUBLE)
107 nAnyMask |= DEFAULT_DOUBLE;
109 nAnyMask |= DEFAULT_TIME;
111 nAnyMask |= DEFAULT_DATE;
113 if (m_bFilterProposal)
114 nAnyMask |= FILTERPROPOSAL;
116 _rxOutStream->writeBoolean(m_bEmptyIsNull);
117 _rxOutStream->writeShort(nAnyMask);
119 if ((nAnyMask & DEFAULT_LONG) == DEFAULT_LONG)
120 _rxOutStream->writeLong(
getINT32(m_aDefault));
121 else if ((nAnyMask & DEFAULT_DOUBLE) == DEFAULT_DOUBLE)
122 _rxOutStream->writeDouble(
getDouble(m_aDefault));
123 else if ((nAnyMask & DEFAULT_TIME) == DEFAULT_TIME)
126 OSL_VERIFY(m_aDefault >>= aTime);
129 else if ((nAnyMask & DEFAULT_DATE) == DEFAULT_DATE)
132 OSL_VERIFY(m_aDefault >>= aDate);
133 _rxOutStream->writeLong(
::Date(aDate).GetDate());
137 writeHelpTextCompatibly(_rxOutStream);
147 writeCommonEditProperties(_rxOutStream);
153sal_uInt16 OEditBaseModel::getPersistenceFlags()
const
159void OEditBaseModel::read(
const Reference<XObjectInputStream>& _rxInStream)
161 OBoundControlModel::read(_rxInStream);
165 sal_uInt16
nVersion = _rxInStream->readShort();
172 _rxInStream->readShort();
174 _rxInStream >> m_aDefaultText;
178 m_bEmptyIsNull = _rxInStream->readBoolean();
180 sal_uInt16 nAnyMask = _rxInStream->readShort();
181 if ((nAnyMask & DEFAULT_LONG) == DEFAULT_LONG)
183 sal_Int32
nValue = _rxInStream->readLong();
186 else if ((nAnyMask & DEFAULT_DOUBLE) == DEFAULT_DOUBLE)
188 double fValue = _rxInStream->readDouble();
189 m_aDefault <<= fValue;
191 else if ((nAnyMask & DEFAULT_TIME) == DEFAULT_TIME)
195 else if ((nAnyMask & DEFAULT_DATE) == DEFAULT_DATE)
200 if ((nAnyMask & FILTERPROPOSAL) == FILTERPROPOSAL)
201 m_bFilterProposal =
true;
205 readHelpTextCompatibly(_rxInStream);
207 if (bHandleCommonProps)
208 readCommonEditProperties(_rxInStream);
211 if ( !getControlSource().isEmpty() )
217void OEditBaseModel::defaultCommonEditProperties()
219 OBoundControlModel::defaultCommonProperties();
224void OEditBaseModel::readCommonEditProperties(
const Reference<XObjectInputStream>& _rxInStream)
226 sal_Int32 nLen = _rxInStream->readLong();
228 Reference<XMarkableStream> xMark(_rxInStream, UNO_QUERY);
229 DBG_ASSERT(xMark.is(),
"OBoundControlModel::readCommonProperties : can only work with markable streams !");
230 sal_Int32 nMark = xMark->createMark();
233 OBoundControlModel::readCommonProperties(_rxInStream);
238 xMark->jumpToMark(nMark);
239 _rxInStream->skipBytes(nLen);
240 xMark->deleteMark(nMark);
244void OEditBaseModel::writeCommonEditProperties(
const Reference<XObjectOutputStream>& _rxOutStream)
246 Reference<XMarkableStream> xMark(_rxOutStream, UNO_QUERY);
247 DBG_ASSERT(xMark.is(),
"OEditBaseModel::writeCommonProperties : can only work with markable streams !");
248 sal_Int32 nMark = xMark->createMark();
252 _rxOutStream->writeLong(nLen);
255 OBoundControlModel::writeCommonProperties(_rxOutStream);
260 nLen = xMark->offsetToMark(nMark) -
sizeof(nLen);
261 xMark->jumpToMark(nMark);
262 _rxOutStream->writeLong(nLen);
263 xMark->jumpToFurthest();
264 xMark->deleteMark(nMark);
268void OEditBaseModel::getFastPropertyValue( Any& rValue, sal_Int32 nHandle )
const
273 rValue <<= m_bEmptyIsNull;
276 rValue <<= m_bFilterProposal;
279 rValue <<= m_aDefaultText;
287 OBoundControlModel::getFastPropertyValue(rValue,
nHandle);
291sal_Bool OEditBaseModel::convertFastPropertyValue( Any& rConvertedValue, Any& rOldValue,
292 sal_Int32 nHandle,
const Any& rValue )
294 bool bModified(
false);
298 bModified =
tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bEmptyIsNull);
301 bModified =
tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bFilterProposal);
304 bModified =
tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aDefaultText);
316 bModified = OBoundControlModel::convertFastPropertyValue(
325void OEditBaseModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle,
const Any& rValue )
330 DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_BOOLEAN,
"invalid type" );
331 m_bEmptyIsNull =
getBOOL(rValue);
334 DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_BOOLEAN,
"invalid type" );
335 m_bFilterProposal =
getBOOL(rValue);
339 DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_STRING,
"invalid type" );
340 rValue >>= m_aDefaultText;
350 OBoundControlModel::setFastPropertyValue_NoBroadcast(
nHandle, rValue );
356Any OEditBaseModel::getPropertyDefaultByHandle( sal_Int32 nHandle )
const
361 return Any(OUString());
369 return OBoundControlModel::getPropertyDefaultByHandle(
nHandle);
#define PF_HANDLE_COMMON_PROPS
css::util::Date GetUNODate() const
OEditBaseModel(const css::uno::Reference< css::uno::XComponentContext > &_rxFactory, const OUString &_rUnoControlModelTypeName, const OUString &_rDefault, const bool _bSupportExternalBinding, const bool _bSupportsValidation)
#define DBG_ASSERT(sCon, aError)
bool getBOOL(const Any &_rAny)
bool tryPropertyValue(Any &_rConvertedValue, Any &_rOldValue, const Any &_rValueToSet, const Any &_rCurrentValue, const Type &_rExpectedType)
double getDouble(const Any &_rAny)
sal_Int32 getINT32(const Any &_rAny)
ListBox is a bit confusing / different from other form components, so here are a few notes:
Any GetTime(const OUString &val)
#define PROPERTY_ID_DEFAULT_VALUE
#define PROPERTY_ID_FILTERPROPOSAL
#define PROPERTY_ID_EMPTY_IS_NULL
#define PROPERTY_ID_DEFAULT_TIME
#define PROPERTY_ID_DEFAULT_TEXT
#define PROPERTY_ID_DEFAULT_DATE