diff options
author | Eike Rathke <erack@redhat.com> | 2017-02-10 18:27:14 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2017-02-14 11:49:35 +0100 |
commit | 838fab822c8052dd9471e28a70b1907dfde111af (patch) | |
tree | 036311c563a47419f0c0dd3321872aa74ea868bb /forms/source/component/ListBox.cxx | |
parent | cdbec91da4931be72ed4f1b28f78d83a9a0d616f (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.cxx | 39 |
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& ) { |