[Libreoffice-commits] .: 4 commits - connectivity/source forms/source
Lionel Elie Mamane
lmamane at kemper.freedesktop.org
Thu Feb 16 04:39:01 PST 2012
connectivity/source/commontools/FValue.cxx | 8 +--
forms/source/component/ListBox.cxx | 76 ++++++++++++++++++++++-------
forms/source/component/ListBox.hxx | 11 +++-
3 files changed, 74 insertions(+), 21 deletions(-)
New commits:
commit c55d050400139a270f5b3b620db4845001db017d
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date: Thu Feb 16 13:24:58 2012 +0100
fdo#46163 convert bound values to bound column's type
diff --git a/forms/source/component/ListBox.cxx b/forms/source/component/ListBox.cxx
index 2453ebc..eb8c6c9 100644
--- a/forms/source/component/ListBox.cxx
+++ b/forms/source/component/ListBox.cxx
@@ -326,7 +326,7 @@ namespace frm
// propagate
if ( m_eListSourceType == ListSourceType_VALUELIST )
{
- m_aBoundValues = m_aListSourceValues;
+ setBoundValues(m_aListSourceValues);
}
else
{
@@ -556,7 +556,7 @@ namespace frm
OSL_FAIL("OListBoxModel::read : invalid (means unknown) version !");
ValueList().swap(m_aListSourceValues);
m_aBoundColumn <<= (sal_Int16)0;
- ValueList().swap(m_aBoundValues);
+ clearBoundValues();
m_eListSourceType = ListSourceType_VALUELIST;
m_aDefaultSelectSeq.realloc(0);
defaultCommonProperties();
@@ -674,7 +674,7 @@ namespace frm
// outta here if we don't have all pre-requisites
if ( !xConnection.is() || sListSource.isEmpty() )
{
- ValueList().swap(m_aBoundValues);
+ clearBoundValues();
return;
}
@@ -924,7 +924,7 @@ namespace frm
m_nNULLPos = 0;
}
- m_aBoundValues = aValueList;
+ setBoundValues(aValueList);
setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( lcl_convertToStringSequence( aDisplayList ) ) );
}
@@ -948,7 +948,7 @@ namespace frm
{
if ( m_eListSourceType != ListSourceType_VALUELIST )
{
- ValueList().swap(m_aBoundValues);
+ clearBoundValues();
m_nNULLPos = -1;
m_nBoundColumnType = DataType::SQLNULL;
@@ -960,19 +960,63 @@ namespace frm
}
//------------------------------------------------------------------------------
+ void OListBoxModel::setBoundValues(const ValueList &l)
+ {
+ m_aConvertedBoundValues.clear();
+ m_aBoundValues = l;
+ }
+
+ //------------------------------------------------------------------------------
+ void OListBoxModel::clearBoundValues()
+ {
+ ValueList().swap(m_aConvertedBoundValues);
+ ValueList().swap(m_aBoundValues);
+ }
+
+ //------------------------------------------------------------------------------
+ void OListBoxModel::convertBoundValues(const sal_Int32 nFieldType) const
+ {
+ 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;
+ dst->setTypeKind(nFieldType);
+ }
+ m_nConvertedBoundValuesType = nFieldType;
+ OSL_ENSURE(dst == m_aConvertedBoundValues.end(), "OListBoxModel::convertBoundValues expected to have overwritten all of m_aConvertedBoundValues, but did not.");
+ }
+ //------------------------------------------------------------------------------
+ sal_Int32 OListBoxModel::getValueType() const
+ {
+ return impl_hasBoundComponent() ? m_nBoundColumnType : getFieldType();
+ }
+ //------------------------------------------------------------------------------
ValueList OListBoxModel::impl_getValues() const
{
+ const sal_Int32 nFieldType = getValueType();
+
+ if ( !m_aConvertedBoundValues.empty() && m_nConvertedBoundValuesType == nFieldType )
+ return m_aConvertedBoundValues;
+
if ( !m_aBoundValues.empty() )
- return m_aBoundValues;
+ {
+ convertBoundValues(nFieldType);
+ return m_aConvertedBoundValues;
+ }
Sequence< ::rtl::OUString > aStringItems( getStringItemList() );
ValueList aValues( aStringItems.getLength() );
- ::std::copy(
- aStringItems.getConstArray(),
- aStringItems.getConstArray() + aStringItems.getLength(),
- aValues.begin()
- );
-
+ ValueList::iterator dst = aValues.begin();
+ const ::rtl::OUString *src (aStringItems.getConstArray());
+ const ::rtl::OUString * const end = src + aStringItems.getLength();
+ for (; src < end; ++src, ++dst )
+ {
+ *dst = *src;
+ dst->setTypeKind(nFieldType);
+ }
return aValues;
}
//------------------------------------------------------------------------------
@@ -1045,7 +1089,7 @@ namespace frm
Sequence< sal_Int16 > aSelectionIndicies;
ORowSetValue aCurrentValue;
- aCurrentValue.fill( impl_hasBoundComponent() ? m_nBoundColumnType : getFieldType(), m_xColumn );
+ aCurrentValue.fill( getValueType(), m_xColumn );
// reset selection for NULL values
if ( aCurrentValue.isNull() )
diff --git a/forms/source/component/ListBox.hxx b/forms/source/component/ListBox.hxx
index cd1302c..d64a5a8 100644
--- a/forms/source/component/ListBox.hxx
+++ b/forms/source/component/ListBox.hxx
@@ -79,7 +79,9 @@ class OListBoxModel :public OBoundControlModel
::com::sun::star::form::ListSourceType m_eListSourceType; // type der list source
::com::sun::star::uno::Any m_aBoundColumn;
ValueList m_aListSourceValues;
- ValueList m_aBoundValues;
+ ValueList m_aBoundValues; // do not write directly; use setBoundValues()
+ mutable ValueList m_aConvertedBoundValues;
+ mutable sal_Int32 m_nConvertedBoundValuesType;
::com::sun::star::uno::Sequence<sal_Int16> m_aDefaultSelectSeq; // DefaultSelected
// </properties>
@@ -181,8 +183,15 @@ private:
*/
void impl_refreshDbEntryList( bool _bForce );
+ void setBoundValues(const ValueList&);
+ void clearBoundValues();
+
ValueList impl_getValues() const;
+ sal_Int32 getValueType() const;
+
+ void convertBoundValues(sal_Int32 nType) const;
+
bool impl_hasBoundComponent() const { return m_nBoundColumnType != ::com::sun::star::sdbc::DataType::SQLNULL; }
};
commit fc593ac601469a5d69274bbec539e58ad466fd67
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date: Thu Feb 16 09:29:54 2012 +0100
correct indentation
diff --git a/forms/source/component/ListBox.cxx b/forms/source/component/ListBox.cxx
index 9d947aa..2453ebc 100644
--- a/forms/source/component/ListBox.cxx
+++ b/forms/source/component/ListBox.cxx
@@ -896,9 +896,9 @@ namespace frm
}
}
break;
- default:
- OSL_FAIL( "OListBoxModel::loadData: unreachable!" );
- break;
+ default:
+ OSL_FAIL( "OListBoxModel::loadData: unreachable!" );
+ break;
}
}
catch(const SQLException& eSQL)
commit aef29c37fbe2bf2d248048c699972fb9e0ac2b4e
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date: Thu Feb 16 09:06:26 2012 +0100
ORowSetValue::setTypeKind: correctly convert to (C)LOB/OBJECT/OTHER
as opposed to crashing
diff --git a/connectivity/source/commontools/FValue.cxx b/connectivity/source/commontools/FValue.cxx
index 93a8c9d..acd1ef0 100644
--- a/connectivity/source/commontools/FValue.cxx
+++ b/connectivity/source/commontools/FValue.cxx
@@ -254,10 +254,10 @@ void ORowSetValue::setTypeKind(sal_Int32 _eType)
case DataType::CLOB:
case DataType::OBJECT:
case DataType::OTHER:
- (*this) = getAny();
+ (*this) = makeAny();
break;
default:
- (*this) = getAny();
+ (*this) = makeAny();
OSL_FAIL("ORowSetValue::setTypeKind(): UNSUPPORTED TYPE!");
}
}
commit 05b294cbc14422f9c5897c0830eda57d141f78a3
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date: Thu Feb 16 09:11:08 2012 +0100
typo & copy/paste error in error message
diff --git a/connectivity/source/commontools/FValue.cxx b/connectivity/source/commontools/FValue.cxx
index bfa3b12..93a8c9d 100644
--- a/connectivity/source/commontools/FValue.cxx
+++ b/connectivity/source/commontools/FValue.cxx
@@ -258,7 +258,7 @@ void ORowSetValue::setTypeKind(sal_Int32 _eType)
break;
default:
(*this) = getAny();
- OSL_FAIL("ORowSetValue:operator==(): UNSPUPPORTED TYPE!");
+ OSL_FAIL("ORowSetValue::setTypeKind(): UNSUPPORTED TYPE!");
}
}
@@ -895,7 +895,7 @@ bool ORowSetValue::operator==(const ORowSetValue& _rRH) const
break;
default:
bRet = false;
- OSL_FAIL("ORowSetValue::operator==(): UNSPUPPORTED TYPE!");
+ OSL_FAIL("ORowSetValue::operator==(): UNSUPPORTED TYPE!");
break;
}
return bRet;
More information about the Libreoffice-commits
mailing list