summaryrefslogtreecommitdiff
path: root/forms/source/component/ListBox.cxx
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2017-02-10 18:27:14 +0100
committerEike Rathke <erack@redhat.com>2017-02-14 11:49:35 +0100
commit838fab822c8052dd9471e28a70b1907dfde111af (patch)
tree036311c563a47419f0c0dd3321872aa74ea868bb /forms/source/component/ListBox.cxx
parentcdbec91da4931be72ed4f1b28f78d83a9a0d616f (diff)
Resolves: tdf#79250 add typed list to form control listbox
... so numeric and text data can be distinguished input. Change-Id: I63280a93c272ccc6f5e7ca06a1a1fcbfb3db8455
Diffstat (limited to 'forms/source/component/ListBox.cxx')
-rw-r--r--forms/source/component/ListBox.cxx39
1 files changed, 38 insertions, 1 deletions
diff --git a/forms/source/component/ListBox.cxx b/forms/source/component/ListBox.cxx
index 2b5426f23a6c..2e1d52ccaf95 100644
--- a/forms/source/component/ListBox.cxx
+++ b/forms/source/component/ListBox.cxx
@@ -147,6 +147,7 @@ namespace frm
void OListBoxModel::init()
{
startAggregatePropertyListening( PROPERTY_STRINGITEMLIST );
+ startAggregatePropertyListening( PROPERTY_TYPEDITEMLIST );
}
@@ -286,6 +287,10 @@ namespace frm
_rValue <<= comphelper::containerToSequence(getStringItemList());
break;
+ case PROPERTY_ID_TYPEDITEMLIST:
+ _rValue <<= getTypedItemList();
+ break;
+
default:
OBoundControlModel::getFastPropertyValue(_rValue, _nHandle);
}
@@ -505,6 +510,7 @@ namespace frm
// <----- SYNCHRONIZED
return;
}
+ // XXX NOTE: PROPERTY_TYPEDITEMLIST not handled, used only with external list source.
OBoundControlModel::_propertyChanged( i_rEvent );
}
@@ -515,6 +521,7 @@ namespace frm
// superseded properties:
RemoveProperty( _rAggregateProps, PROPERTY_STRINGITEMLIST );
+ RemoveProperty( _rAggregateProps, PROPERTY_TYPEDITEMLIST );
}
@@ -669,6 +676,7 @@ namespace frm
)
{
setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( css::uno::Sequence<OUString>() ) );
+ setFastPropertyValue( PROPERTY_ID_TYPEDITEMLIST, makeAny( css::uno::Sequence<css::uno::Any>() ) );
}
if (nVersion > 3)
@@ -991,6 +999,7 @@ namespace frm
setBoundValues(aValueList);
setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( lcl_convertToStringSequence( aDisplayList ) ) );
+ setFastPropertyValue( PROPERTY_ID_TYPEDITEMLIST, makeAny( css::uno::Sequence<css::uno::Any>() ) );
}
@@ -1456,6 +1465,26 @@ namespace frm
};
+ Any lcl_getSingleSelectedEntryTyped( const Sequence< sal_Int16 >& _rSelectSequence, const Sequence<Any>& _rTypedList )
+ {
+ Any aReturn;
+
+ // by definition, multiple selected entries are transferred as NULL if the
+ // binding does not support lists
+ if ( _rSelectSequence.getLength() <= 1 )
+ {
+ if ( _rSelectSequence.getLength() == 1 )
+ {
+ sal_Int32 nIndex = _rSelectSequence[0];
+ if (0 <= nIndex && nIndex < _rTypedList.getLength())
+ aReturn = _rTypedList[nIndex];
+ }
+ }
+
+ return aReturn;
+ }
+
+
Any lcl_getSingleSelectedEntry( const Sequence< sal_Int16 >& _rSelectSequence, const std::vector< OUString >& _rStringList )
{
Any aReturn;
@@ -1586,7 +1615,14 @@ namespace frm
break;
case eEntry:
- aReturn = lcl_getSingleSelectedEntry( aSelectSequence, getStringItemList() );
+ {
+ const std::vector<OUString>& rStrings = getStringItemList();
+ const Sequence<Any>& rValues = getTypedItemList();
+ if (rStrings.size() == static_cast<size_t>(rValues.getLength()))
+ aReturn = lcl_getSingleSelectedEntryTyped( aSelectSequence, rValues );
+ else
+ aReturn = lcl_getSingleSelectedEntry( aSelectSequence, rStrings );
+ }
break;
}
@@ -1689,6 +1725,7 @@ namespace frm
try
{
m_xAggregateSet->setPropertyValue( PROPERTY_STRINGITEMLIST, makeAny( comphelper::containerToSequence(getStringItemList()) ) );
+ m_xAggregateSet->setPropertyValue( PROPERTY_TYPEDITEMLIST, makeAny( getTypedItemList() ) );
}
catch( const Exception& )
{