dbaccess/source/ui/control/RelationControl.cxx | 71 ++++++++++++++--- dbaccess/source/ui/inc/RelationControl.hxx | 2 dbaccess/source/ui/inc/TableConnectionData.hxx | 14 ++- dbaccess/source/ui/querydesign/TableConnectionData.cxx | 21 ++--- 4 files changed, 82 insertions(+), 26 deletions(-)
New commits: commit 058deb4a4c422dea78b9a39bd294b7b50965d10d Author: Lionel Elie Mamane <lio...@mamane.lu> Date: Wed Dec 12 16:33:31 2012 +0100 fdo#32958 join editor: remove empty lines Change-Id: If150261bae55cf91c8a344f34c79194ad29db903 diff --git a/dbaccess/source/ui/control/RelationControl.cxx b/dbaccess/source/ui/control/RelationControl.cxx index 316e8a7..5a810f5 100644 --- a/dbaccess/source/ui/control/RelationControl.cxx +++ b/dbaccess/source/ui/control/RelationControl.cxx @@ -36,6 +36,11 @@ #include <osl/diagnose.h> #include <algorithm> +#include <list> +using std::list; +#include <utility> +using std::pair; +using std::make_pair; #define SOURCE_COLUMN 1 #define DEST_COLUMN 2 @@ -60,6 +65,9 @@ namespace dbaui long m_nDataPos; Reference< XPropertySet> m_xSourceDef; Reference< XPropertySet> m_xDestDef; + enum opcode { DELETE, INSERT, MODIFY }; + typedef list< pair < opcode, pair < OConnectionLineDataVec::size_type, OConnectionLineDataVec::size_type> > > ops_type; + ops_type m_ops; void fillListBox(const Reference< XPropertySet>& _xDest,long nRow,sal_uInt16 nColumnId); @@ -230,15 +238,17 @@ namespace dbaui sal_Bool ORelationControl::SaveModified() { DBG_CHKTHIS(ORelationControl,NULL); - sal_Int32 nRow = GetCurRow(); + long nRow = GetCurRow(); if ( nRow != BROWSER_ENDOFSELECTION ) { String sFieldName(m_pListCell->GetSelectEntry()); OConnectionLineDataVec* pLines = m_pConnData->GetConnLineDataList(); - if ( pLines->size() <= static_cast<sal_uInt32>(nRow) ) + if ( pLines->size() <= static_cast<OConnectionLineDataVec::size_type>(nRow) ) { pLines->push_back(new OConnectionLineData()); nRow = pLines->size() - 1; + // add new past-pLines row + m_ops.push_back(make_pair(INSERT, make_pair(nRow+1, nRow+2))); } OConnectionLineDataRef pConnLineData = (*pLines)[nRow]; @@ -252,8 +262,18 @@ namespace dbaui pConnLineData->SetDestFieldName( sFieldName ); break; } + // the modification we just did does *not* need to be registered in m_ops; + // it is already taken into account (by the codepath that called us) + //m_ops.push_back(make_pair(MODIFY, make_pair(nRow, nRow+1))); } + const OConnectionLineDataVec::size_type oldSize = m_pConnData->GetConnLineDataList()->size(); + OConnectionLineDataVec::size_type line = m_pConnData->normalizeLines(); + const OConnectionLineDataVec::size_type newSize = m_pConnData->GetConnLineDataList()->size(); + assert(newSize <= oldSize); + m_ops.push_back(make_pair(MODIFY, make_pair(line, newSize))); + m_ops.push_back(make_pair(DELETE, make_pair(newSize, oldSize))); + return sal_True; } //------------------------------------------------------------------------------ @@ -636,12 +656,27 @@ OTableListBoxControl::OTableListBoxControl( Window* _pParent } m_pParentDialog->setValid(bValid); - if ( pLines->size() >= static_cast<sal_uInt32>(m_pRC_Tables->GetRowCount()) ) + ORelationControl::ops_type::iterator i (m_pRC_Tables->m_ops.begin()); + const ORelationControl::ops_type::const_iterator e (m_pRC_Tables->m_ops.end()); + m_pRC_Tables->DeactivateCell(); + for(; i != e; ++i) { - m_pRC_Tables->DeactivateCell(); - m_pRC_Tables->RowInserted(m_pRC_Tables->GetRowCount(), pLines->size() - static_cast<sal_uInt32>(m_pRC_Tables->GetRowCount()) + 1, sal_True); - m_pRC_Tables->ActivateCell(); + switch(i->first) + { + case ORelationControl::DELETE: + m_pRC_Tables->RowRemoved(i->second.first, i->second.second - i->second.first); + break; + case ORelationControl::INSERT: + m_pRC_Tables->RowInserted(i->second.first, i->second.second - i->second.first); + break; + case ORelationControl::MODIFY: + for(OConnectionLineDataVec::size_type j = i->second.first; j < i->second.second; ++j) + m_pRC_Tables->RowModified(j); + break; + } } + m_pRC_Tables->ActivateCell(); + m_pRC_Tables->m_ops.clear(); } // ----------------------------------------------------------------------------- void fillEntryAndDisable(ListBox& _rListBox,const String& _sEntry) @@ -696,9 +731,7 @@ OTableListBoxControl::OTableListBoxControl( Window* _pParent // ----------------------------------------------------------------------------- sal_Bool OTableListBoxControl::SaveModified() { - sal_Bool bRet = m_pRC_Tables->SaveModified(); - m_pRC_Tables->getData()->normalizeLines(); - return bRet; + return m_pRC_Tables->SaveModified(); } // ----------------------------------------------------------------------------- TTableWindowData::value_type OTableListBoxControl::getReferencingTable() const diff --git a/dbaccess/source/ui/inc/TableConnectionData.hxx b/dbaccess/source/ui/inc/TableConnectionData.hxx index 4af28d8..400a8a7 100644 --- a/dbaccess/source/ui/inc/TableConnectionData.hxx +++ b/dbaccess/source/ui/inc/TableConnectionData.hxx @@ -77,8 +77,13 @@ namespace dbaui void ResetConnLines(); /** moves the empty lines to the back + removes duplicated empty lines + + caller is responsible for repainting them + + @return infex of first changed line, or one-past-the-end if no change */ - void normalizeLines(); + OConnectionLineDataVec::size_type normalizeLines(); const OConnectionLineDataVec* GetConnLineDataList() const { return &m_vConnLineData; } OConnectionLineDataVec* GetConnLineDataList() { return &m_vConnLineData; } diff --git a/dbaccess/source/ui/querydesign/TableConnectionData.cxx b/dbaccess/source/ui/querydesign/TableConnectionData.cxx index e813cd5..bf38ab7 100644 --- a/dbaccess/source/ui/querydesign/TableConnectionData.cxx +++ b/dbaccess/source/ui/querydesign/TableConnectionData.cxx @@ -162,22 +162,25 @@ OTableConnectionData* OTableConnectionData::NewInstance() const return new OTableConnectionData(); } // ----------------------------------------------------------------------------- -void OTableConnectionData::normalizeLines() +OConnectionLineDataVec::size_type OTableConnectionData::normalizeLines() { - // noch ein wenig Normalisierung auf den LineDatas : leere Lines vom Anfang an das Ende verschieben - sal_Int32 nCount = m_vConnLineData.size(); - for(sal_Int32 i=0;i<nCount;) + // remove empty lines + OConnectionLineDataVec::size_type nCount = m_vConnLineData.size(); + OConnectionLineDataVec::size_type nRet = nCount; + for(OConnectionLineDataVec::size_type i = 0; i < nCount;) { - if(m_vConnLineData[i]->GetSourceFieldName().isEmpty() || m_vConnLineData[i]->GetDestFieldName().isEmpty()) + if(m_vConnLineData[i]->GetSourceFieldName().isEmpty() && m_vConnLineData[i]->GetDestFieldName().isEmpty()) { OConnectionLineDataRef pData = m_vConnLineData[i]; m_vConnLineData.erase(m_vConnLineData.begin()+i); - m_vConnLineData.push_back(pData); --nCount; + if (i < nRet) + nRet=i; } else ++i; } + return nRet; } // ----------------------------------------------------------------------------- commit 6e41b5204b9574046e34bd65a009c059b5a43743 Author: Lionel Elie Mamane <lio...@mamane.lu> Date: Wed Dec 12 16:27:08 2012 +0100 typo in comment Change-Id: I0e6dd24e2cd65a35886f75cde9197c5b957c6d57 diff --git a/dbaccess/source/ui/inc/RelationControl.hxx b/dbaccess/source/ui/inc/RelationControl.hxx index 2369df4..5926d48 100644 --- a/dbaccess/source/ui/inc/RelationControl.hxx +++ b/dbaccess/source/ui/inc/RelationControl.hxx @@ -67,7 +67,7 @@ namespace dbaui */ void enableRelation(bool _bEnable); - /** NotifyCellChange notifies the browse control that the conenction data has changed + /** NotifyCellChange notifies the browse control that the connection data has changed */ void NotifyCellChange(); commit 9503a458f9bf6e422710d30db617d42d7eaea02d Author: Lionel Elie Mamane <lio...@mamane.lu> Date: Wed Dec 12 16:24:45 2012 +0100 query design / edit join: valid only iif column names everywhere Change-Id: Idfb0e16c4cc2581a46e26fe97948897dc4b11dc0 diff --git a/dbaccess/source/ui/control/RelationControl.cxx b/dbaccess/source/ui/control/RelationControl.cxx index 771e1b2..316e8a7 100644 --- a/dbaccess/source/ui/control/RelationControl.cxx +++ b/dbaccess/source/ui/control/RelationControl.cxx @@ -624,7 +624,17 @@ OTableListBoxControl::OTableListBoxControl( Window* _pParent // Enable/disable the OK button, depending on having a valid situation TTableConnectionData::value_type pConnData = m_pRC_Tables->getData(); const OConnectionLineDataVec* pLines = pConnData->GetConnLineDataList(); - m_pParentDialog->setValid(!pLines->empty()); + bool bValid = !pLines->empty(); + if (bValid) + { + OConnectionLineDataVec::const_iterator l(pLines->begin()); + const OConnectionLineDataVec::const_iterator le(pLines->end()); + for (; bValid && l!=le; ++l) + { + bValid = ! ((*l)->GetSourceFieldName().isEmpty() || (*l)->GetDestFieldName().isEmpty()); + } + } + m_pParentDialog->setValid(bValid); if ( pLines->size() >= static_cast<sal_uInt32>(m_pRC_Tables->GetRowCount()) ) { commit 84bcb75ee0190c3199f03de1ac79cf016b2770bf Author: Lionel Elie Mamane <lio...@mamane.lu> Date: Wed Dec 12 16:12:02 2012 +0100 be more cautious in debug mode Change-Id: I46b89b10287ac755e2b727b46d6fdd19f44bcdd3 diff --git a/dbaccess/source/ui/control/RelationControl.cxx b/dbaccess/source/ui/control/RelationControl.cxx index 47c0155..771e1b2 100644 --- a/dbaccess/source/ui/control/RelationControl.cxx +++ b/dbaccess/source/ui/control/RelationControl.cxx @@ -437,7 +437,13 @@ namespace dbaui DBG_CHKTHIS(ORelationControl,NULL); EditBrowseBox::CellModified(); SaveModified(); - static_cast<OTableListBoxControl*>(GetParent())->NotifyCellChange(); +#if OSL_DEBUG_LEVEL > 0 + OTableListBoxControl *parent = dynamic_cast<OTableListBoxControl*>(GetParent()); +#else + OTableListBoxControl *parent = static_cast<OTableListBoxControl*>(GetParent()); +#endif + assert(parent); + parent->NotifyCellChange(); } //======================================================================== // class OTableListBoxControl commit 3e3dbd1411878e5f83e35567f1f62a1e2f3d7986 Author: Lionel Elie Mamane <lio...@mamane.lu> Date: Wed Dec 12 09:11:12 2012 +0100 argument has no effect anymore -> remove Change-Id: I91f8f552b1324b57ce75e96b858b7a3379decb20 diff --git a/dbaccess/source/ui/inc/TableConnectionData.hxx b/dbaccess/source/ui/inc/TableConnectionData.hxx index e3e45db..4af28d8 100644 --- a/dbaccess/source/ui/inc/TableConnectionData.hxx +++ b/dbaccess/source/ui/inc/TableConnectionData.hxx @@ -72,10 +72,9 @@ namespace dbaui sal_Bool SetConnLine( sal_uInt16 nIndex, const String& rSourceFieldName, const String& rDestFieldName ); sal_Bool AppendConnLine( const ::rtl::OUString& rSourceFieldName, const ::rtl::OUString& rDestFieldName ); - /** Deletes list of ConnLines; if bUseDefaults == true - MAX_CONN_COUNT new dummy lines will be inserted. + /** Deletes list of ConnLines */ - void ResetConnLines( sal_Bool bUseDefaults = sal_True ); + void ResetConnLines(); /** moves the empty lines to the back */ diff --git a/dbaccess/source/ui/querydesign/TableConnectionData.cxx b/dbaccess/source/ui/querydesign/TableConnectionData.cxx index b64da5f..e813cd5 100644 --- a/dbaccess/source/ui/querydesign/TableConnectionData.cxx +++ b/dbaccess/source/ui/querydesign/TableConnectionData.cxx @@ -51,7 +51,7 @@ void OTableConnectionData::Init() ////////////////////////////////////////////////////////////////////// // LineDataList mit Defaults initialisieren OSL_ENSURE(m_vConnLineData.empty(), "OTableConnectionData::Init() : nur mit leere Linienliste aufzurufen !"); - ResetConnLines(sal_True); + ResetConnLines(); // das legt Defaults an } //------------------------------------------------------------------------ @@ -86,7 +86,7 @@ OTableConnectionData& OTableConnectionData::operator=( const OTableConnectionDat m_aConnName = rConnData.GetConnName(); // clear line list - ResetConnLines(sal_False); + ResetConnLines(); // und kopieren OConnectionLineDataVec* pLineData = const_cast<OTableConnectionData*>(&rConnData)->GetConnLineDataList(); @@ -140,7 +140,7 @@ sal_Bool OTableConnectionData::AppendConnLine( const ::rtl::OUString& rSourceFie } //------------------------------------------------------------------------ -void OTableConnectionData::ResetConnLines( sal_Bool /*bUseDefaults*/ ) +void OTableConnectionData::ResetConnLines() { OConnectionLineDataVec().swap(m_vConnLineData); } commit 236be16a385832258f38fbd19bd1b32ddc538fd4 Author: Lionel Elie Mamane <lio...@mamane.lu> Date: Wed Dec 12 09:06:01 2012 +0100 Move comment to its rightful place Change-Id: I72803b26a79804cdc1b590a7fb4bc99ff831963e diff --git a/dbaccess/source/ui/inc/TableConnectionData.hxx b/dbaccess/source/ui/inc/TableConnectionData.hxx index 728978d..e3e45db 100644 --- a/dbaccess/source/ui/inc/TableConnectionData.hxx +++ b/dbaccess/source/ui/inc/TableConnectionData.hxx @@ -72,13 +72,13 @@ namespace dbaui sal_Bool SetConnLine( sal_uInt16 nIndex, const String& rSourceFieldName, const String& rDestFieldName ); sal_Bool AppendConnLine( const ::rtl::OUString& rSourceFieldName, const ::rtl::OUString& rDestFieldName ); + /** Deletes list of ConnLines; if bUseDefaults == true + MAX_CONN_COUNT new dummy lines will be inserted. + */ void ResetConnLines( sal_Bool bUseDefaults = sal_True ); /** moves the empty lines to the back - - Deletes list of ConnLines; if bUseDefaults == true - MAX_CONN_COUNT new dummy lines will be inserted. - */ + */ void normalizeLines(); const OConnectionLineDataVec* GetConnLineDataList() const { return &m_vConnLineData; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits