[Libreoffice-commits] core.git: 3 commits - forms/source
Lionel Elie Mamane
lionel at mamane.lu
Tue Jan 13 05:59:36 PST 2015
forms/source/component/FormComponent.cxx | 1
forms/source/component/ListBox.cxx | 37 +++++++++++++++++++++----------
forms/source/component/ListBox.hxx | 5 +++-
3 files changed, 30 insertions(+), 13 deletions(-)
New commits:
commit 0331fa6a904d3f923cb80d7104e74ea6f2958179
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date: Tue Jan 13 14:56:23 2015 +0100
ListBox with value list: consider first empty value as NULL
Change-Id: I15c040b481b7f03720d0227ba5d2fcd2ccc78386
diff --git a/forms/source/component/ListBox.cxx b/forms/source/component/ListBox.cxx
index d6eb7cf..72ce587 100644
--- a/forms/source/component/ListBox.cxx
+++ b/forms/source/component/ListBox.cxx
@@ -79,6 +79,8 @@ namespace frm
using ::connectivity::ORowSetValue;
+ const ::connectivity::ORowSetValue OListBoxModel::s_aEmptyValue;
+ const ::connectivity::ORowSetValue OListBoxModel::s_aEmptyStringValue = OUString();
//= helper
@@ -1007,12 +1009,12 @@ namespace frm
void OListBoxModel::onDisconnectedDbColumn()
{
+ clearBoundValues();
+ m_nNULLPos = -1;
+ m_nBoundColumnType = DataType::SQLNULL;
+
if ( m_eListSourceType != ListSourceType_VALUELIST )
{
- clearBoundValues();
- m_nNULLPos = -1;
- m_nBoundColumnType = DataType::SQLNULL;
-
if ( !hasExternalListSource() )
setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( StringSequence() ) );
@@ -1037,13 +1039,25 @@ namespace frm
void OListBoxModel::convertBoundValues(const sal_Int32 nFieldType) const
{
+ assert(s_aEmptyValue.isNull());
+ m_nNULLPos = -1;
m_aConvertedBoundValues.resize(m_aBoundValues.size());
ValueList::const_iterator src = m_aBoundValues.begin();
const ValueList::const_iterator end = m_aBoundValues.end();
ValueList::iterator dst = m_aConvertedBoundValues.begin();
for (; src != end; ++src, ++dst )
{
- *dst = *src;
+ if(m_nNULLPos == -1 &&
+ !isRequired() &&
+ (*src == s_aEmptyStringValue || *src == s_aEmptyValue || src->isNull()) )
+ {
+ m_nNULLPos = src - m_aBoundValues.begin();
+ dst->setNull();
+ }
+ else
+ {
+ *dst = *src;
+ }
dst->setTypeKind(nFieldType);
}
m_nConvertedBoundValuesType = nFieldType;
@@ -1090,21 +1104,19 @@ namespace frm
ORowSetValue OListBoxModel::getFirstSelectedValue() const
{
- static const ORowSetValue s_aEmptyVaue;
-
DBG_ASSERT( m_xAggregateFastSet.is(), "OListBoxModel::getFirstSelectedValue: invalid aggregate!" );
if ( !m_xAggregateFastSet.is() )
- return s_aEmptyVaue;
+ return s_aEmptyValue;
Sequence< sal_Int16 > aSelectedIndices;
OSL_VERIFY( m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) >>= aSelectedIndices );
if ( !aSelectedIndices.getLength() )
// nothing selected at all
- return s_aEmptyVaue;
+ return s_aEmptyValue;
if ( ( m_nNULLPos != -1 ) && ( aSelectedIndices[0] == m_nNULLPos ) )
// the dedicated "NULL" entry is selected
- return s_aEmptyVaue;
+ return s_aEmptyValue;
ValueList aValues( impl_getValues() );
@@ -1112,7 +1124,7 @@ namespace frm
if ( selectedValue >= aValues.size() )
{
SAL_WARN( "forms.component", "OListBoxModel::getFirstSelectedValue: inconsistent selection/valuelist!" );
- return s_aEmptyVaue;
+ return s_aEmptyValue;
}
return aValues[ selectedValue ];
diff --git a/forms/source/component/ListBox.hxx b/forms/source/component/ListBox.hxx
index 85b380c..a1217e8 100644
--- a/forms/source/component/ListBox.hxx
+++ b/forms/source/component/ListBox.hxx
@@ -114,7 +114,7 @@ class OListBoxModel :public OBoundControlModel
::com::sun::star::uno::Sequence<sal_Int16> m_aDefaultSelectSeq; // DefaultSelected
// </properties>
- sal_Int16 m_nNULLPos; // position of the NULL value in our list
+ mutable sal_Int16 m_nNULLPos; // position of the NULL value in our list
sal_Int32 m_nBoundColumnType;
private:
@@ -145,6 +145,9 @@ public:
throw (::com::sun::star::lang::IllegalArgumentException) SAL_OVERRIDE;
protected:
+ static const ::connectivity::ORowSetValue s_aEmptyValue;
+ static const ::connectivity::ORowSetValue s_aEmptyStringValue;
+
// XMultiPropertySet
virtual void SAL_CALL setPropertyValues(const ::com::sun::star::uno::Sequence< OUString >& PropertyNames, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& Values) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
commit 1cc29a04adb721205655091854f5ea828bb8eb11
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date: Tue Jan 13 14:49:07 2015 +0100
ListBox: refuse to give values before we are loaded
If we are not loaded,
we don't know our field type,
so cannot give values with the right type
Change-Id: I372b77647ec8ff7428b67cca72fdd89e5e147a32
diff --git a/forms/source/component/ListBox.cxx b/forms/source/component/ListBox.cxx
index 3235ffe..d6eb7cf 100644
--- a/forms/source/component/ListBox.cxx
+++ b/forms/source/component/ListBox.cxx
@@ -1058,6 +1058,9 @@ namespace frm
ValueList OListBoxModel::impl_getValues() const
{
+ if (!isLoaded())
+ return ValueList();
+
const sal_Int32 nFieldType = getValueType();
if ( !m_aConvertedBoundValues.empty() && m_nConvertedBoundValuesType == nFieldType )
commit 5cd4ab7f5cf8a288ae7941d5a1dd752bf2fc852d
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date: Tue Jan 13 14:46:37 2015 +0100
janitorial
Change-Id: If0fcad97538556ef7be5fe5f8405ca171696502d
diff --git a/forms/source/component/FormComponent.cxx b/forms/source/component/FormComponent.cxx
index c152c7a..4fa30d5 100644
--- a/forms/source/component/FormComponent.cxx
+++ b/forms/source/component/FormComponent.cxx
@@ -1984,7 +1984,6 @@ bool OBoundControlModel::connectToField(const Reference<XRowSet>& rForm)
m_bRequired = (ColumnValue::NO_NULLS == nNullableFlag);
// we're optimistic: in case of ColumnValue_NULLABLE_UNKNOWN we assume nullability...
}
-
else
{
SAL_WARN("forms.component", "OBoundControlModel::connectToField: property " PROPERTY_VALUE " not supported!");
More information about the Libreoffice-commits
mailing list