summaryrefslogtreecommitdiff
path: root/forms
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2017-06-14 13:33:33 +0200
committerEike Rathke <erack@redhat.com>2017-06-14 13:34:01 +0200
commit96ef5d50da2c0c5a1edb279c413f73754d400537 (patch)
tree6359f04190aa1d8ba58f3138a6182e70ce4284d7 /forms
parentada8891af95e5caf623bafe68b1aabbf58a74375 (diff)
Handle TypedItemList property in models, tdf#108413 follow-up
Now that the TypedItemList property is somewhat exposed at OListBoxModel and OComboBoxModel also handle that something could want to set it, even if it was meant to be used with external sources. Change-Id: Iae8ce2a50dbbb2166d9a67dbf55900beeb9192d2
Diffstat (limited to 'forms')
-rw-r--r--forms/source/component/ComboBox.cxx17
-rw-r--r--forms/source/component/ListBox.cxx26
-rw-r--r--forms/source/component/entrylisthelper.cxx14
-rw-r--r--forms/source/component/entrylisthelper.hxx11
4 files changed, 63 insertions, 5 deletions
diff --git a/forms/source/component/ComboBox.cxx b/forms/source/component/ComboBox.cxx
index 240c4179febd..54da60a79dc3 100644
--- a/forms/source/component/ComboBox.cxx
+++ b/forms/source/component/ComboBox.cxx
@@ -251,10 +251,13 @@ void OComboBoxModel::setFastPropertyValue_NoBroadcast(sal_Int32 _nHandle, const
}
break;
- // XXX NOTE: PROPERTY_ID_TYPEDITEMLIST not handled here because only
- // set for external sources in which case not even
- // setNewStringItemList() for PROPERTY_ID_STRINGITEMLIST above should
- // had been called ...
+ case PROPERTY_ID_TYPEDITEMLIST:
+ {
+ ControlModelLock aLock( *this );
+ setNewTypedItemList( _rValue, aLock );
+ // Same FIXME as above.
+ }
+ break;
default:
OBoundControlModel::setFastPropertyValue_NoBroadcast(_nHandle, _rValue);
@@ -287,6 +290,12 @@ sal_Bool OComboBoxModel::convertFastPropertyValue(
bModified = convertNewListSourceProperty( _rConvertedValue, _rOldValue, _rValue );
break;
+ case PROPERTY_ID_TYPEDITEMLIST :
+ if (hasExternalListSource())
+ throw IllegalArgumentException();
+ bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, getTypedItemList());
+ break;
+
default:
bModified = OBoundControlModel::convertFastPropertyValue(_rConvertedValue, _rOldValue, _nHandle, _rValue);
break;
diff --git a/forms/source/component/ListBox.cxx b/forms/source/component/ListBox.cxx
index 60de8e2f7468..59e416451b96 100644
--- a/forms/source/component/ListBox.cxx
+++ b/forms/source/component/ListBox.cxx
@@ -387,6 +387,15 @@ namespace frm
resetNoBroadcast();
break;
+ case PROPERTY_ID_TYPEDITEMLIST:
+ {
+ ControlModelLock aLock( *this );
+ setNewTypedItemList( _rValue, aLock );
+ // Same TODO as above.
+ }
+ resetNoBroadcast();
+ break;
+
default:
OBoundControlModel::setFastPropertyValue_NoBroadcast(_nHandle, _rValue);
}
@@ -439,6 +448,12 @@ namespace frm
bModified = convertNewListSourceProperty( _rConvertedValue, _rOldValue, _rValue );
break;
+ case PROPERTY_ID_TYPEDITEMLIST :
+ if (hasExternalListSource())
+ throw IllegalArgumentException();
+ bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, getTypedItemList());
+ break;
+
default:
return OBoundControlModel::convertFastPropertyValue(_rConvertedValue, _rOldValue, _nHandle, _rValue);
}
@@ -511,7 +526,16 @@ namespace frm
// <----- SYNCHRONIZED
return;
}
- // XXX NOTE: PROPERTY_TYPEDITEMLIST not handled, used only with external list source.
+ else if ( i_rEvent.PropertyName == PROPERTY_TYPEDITEMLIST )
+ {
+ ControlModelLock aLock( *this );
+ // SYNCHRONIZED ----->
+ // our aggregate internally changed its TypedItemList property - reflect this in our "overridden"
+ // version of the property
+ setNewTypedItemList( i_rEvent.NewValue, aLock );
+ // <----- SYNCHRONIZED
+ return;
+ }
OBoundControlModel::_propertyChanged( i_rEvent );
}
diff --git a/forms/source/component/entrylisthelper.cxx b/forms/source/component/entrylisthelper.cxx
index 508ccfd833e9..1e75a98846b1 100644
--- a/forms/source/component/entrylisthelper.cxx
+++ b/forms/source/component/entrylisthelper.cxx
@@ -320,6 +320,20 @@ namespace frm
}
+ void OEntryListHelper::setNewTypedItemList( const css::uno::Any& _rValue, ControlModelLock& _rInstanceLock )
+ {
+ OSL_PRECOND( !hasExternalListSource(), "OEntryListHelper::setNewTypedItemList: this should never have survived convertNewListSourceProperty!" );
+ if (!(_rValue >>= m_aTypedItems ))
+ {
+ OSL_VERIFY(false);
+ if (m_aTypedItems.getLength())
+ m_aTypedItems = Sequence<Any>(); // doesn't match anymore
+ }
+ // Sets both properties, assuming that TypedItemList belongs to StringItemList.
+ stringItemListChanged( _rInstanceLock );
+ }
+
+
} // namespace frm
diff --git a/forms/source/component/entrylisthelper.hxx b/forms/source/component/entrylisthelper.hxx
index b8e3e6504d9e..be2759410e86 100644
--- a/forms/source/component/entrylisthelper.hxx
+++ b/forms/source/component/entrylisthelper.hxx
@@ -112,6 +112,17 @@ namespace frm
*/
void setNewStringItemList( const css::uno::Any& _rValue, ControlModelLock& _rInstanceLock );
+ /** helper for implementing setFastPropertyValueNoBroadcast
+
+ <p>Will internally call stringItemListChanged after the new item list
+ has been set.</p>
+
+ @precond
+ not to be called when we have an external list source
+ @see hasExternalListSource
+ */
+ void setNewTypedItemList( const css::uno::Any& _rValue, ControlModelLock& _rInstanceLock );
+
/** announces that the list of entries has changed.
<p>Derived classes have to override this. Most probably, they'll set the new