From 67e5f16e53a05587c4f36518a56e931f4708e16b Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Sun, 2 Aug 2020 15:05:27 +0100 Subject: weld OTableWindowListBox MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Iae1d2da93fd150d2a333a55bd5b3c06aad0a308f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100030 Tested-by: Jenkins Reviewed-by: Caolán McNamara --- dbaccess/UIConfig_dbaccess.mk | 1 + dbaccess/source/ui/inc/JoinExchange.hxx | 8 +- dbaccess/source/ui/inc/TableWindow.hxx | 2 +- dbaccess/source/ui/inc/TableWindowListBox.hxx | 67 +++--- dbaccess/source/ui/querydesign/ConnectionLine.cxx | 31 +-- dbaccess/source/ui/querydesign/JoinExchange.cxx | 22 +- dbaccess/source/ui/querydesign/JoinTableView.cxx | 36 ++-- dbaccess/source/ui/querydesign/QTableWindow.cxx | 26 +-- dbaccess/source/ui/querydesign/QTableWindow.hxx | 2 +- dbaccess/source/ui/querydesign/QueryTableView.cxx | 10 +- .../source/ui/querydesign/SelectionBrowseBox.cxx | 7 +- dbaccess/source/ui/querydesign/TableWindow.cxx | 84 ++++---- .../source/ui/querydesign/TableWindowAccess.cxx | 1 + .../source/ui/querydesign/TableWindowListBox.cxx | 228 ++++++--------------- .../source/ui/querydesign/TableWindowTitle.cxx | 3 +- .../source/ui/relationdesign/RelationTableView.cxx | 6 +- dbaccess/uiconfig/ui/tablelistbox.ui | 71 +++++++ 17 files changed, 309 insertions(+), 296 deletions(-) create mode 100644 dbaccess/uiconfig/ui/tablelistbox.ui (limited to 'dbaccess') diff --git a/dbaccess/UIConfig_dbaccess.mk b/dbaccess/UIConfig_dbaccess.mk index d2d30dd9b7fd..74ba080879d8 100644 --- a/dbaccess/UIConfig_dbaccess.mk +++ b/dbaccess/UIConfig_dbaccess.mk @@ -70,6 +70,7 @@ $(eval $(call gb_UIConfig_add_uifiles,dbaccess, \ dbaccess/uiconfig/ui/sqlexception \ dbaccess/uiconfig/ui/tabledesignrowmenu \ dbaccess/uiconfig/ui/tabledesignsavemodifieddialog \ + dbaccess/uiconfig/ui/tablelistbox \ dbaccess/uiconfig/ui/tablesfilterdialog \ dbaccess/uiconfig/ui/tablesfilterpage \ dbaccess/uiconfig/ui/tablesjoindialog \ diff --git a/dbaccess/source/ui/inc/JoinExchange.hxx b/dbaccess/source/ui/inc/JoinExchange.hxx index a1a73595ae5c..2412c64c365f 100644 --- a/dbaccess/source/ui/inc/JoinExchange.hxx +++ b/dbaccess/source/ui/inc/JoinExchange.hxx @@ -30,7 +30,7 @@ namespace dbaui // OJoinExchObj: Additional data to create Joins in the JoinShell typedef ::cppu::ImplHelper1< css::lang::XUnoTunnel > OJoinExchObj_Base; - class OJoinExchObj final : public TransferableHelper, public OJoinExchObj_Base + class OJoinExchObj final : public TransferDataContainer, public OJoinExchObj_Base { bool m_bFirstEntry; @@ -40,8 +40,8 @@ namespace dbaui virtual ~OJoinExchObj() override; public: - OJoinExchObj(const OJoinExchangeData& jxdSource, bool _bFirstEntry); - + OJoinExchObj(); + void setDescriptors(const OJoinExchangeData& jxdSource, bool _bFirstEntry); // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) override; @@ -61,8 +61,6 @@ namespace dbaui virtual void AddSupportedFormats() override; virtual bool GetData( const css::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ) override; virtual void DragFinished( sal_Int8 nDropAction ) override; - - using TransferableHelper::StartDrag; }; } #endif diff --git a/dbaccess/source/ui/inc/TableWindow.hxx b/dbaccess/source/ui/inc/TableWindow.hxx index e356a5a265f7..83baf38e53fd 100644 --- a/dbaccess/source/ui/inc/TableWindow.hxx +++ b/dbaccess/source/ui/inc/TableWindow.hxx @@ -90,7 +90,7 @@ namespace dbaui void FillListBox(); // called at EACH Init - virtual void OnEntryDoubleClicked(SvTreeListEntry* /*pEntry*/) { } + virtual void OnEntryDoubleClicked(weld::TreeIter& /*rEntry*/) { } // called from the DoubleClickHdl of the ListBox /** HandleKeyInput tries to handle the KeyEvent. Movement or deletion diff --git a/dbaccess/source/ui/inc/TableWindowListBox.hxx b/dbaccess/source/ui/inc/TableWindowListBox.hxx index 249a1dedf330..5ca01098266b 100644 --- a/dbaccess/source/ui/inc/TableWindowListBox.hxx +++ b/dbaccess/source/ui/inc/TableWindowListBox.hxx @@ -19,8 +19,8 @@ #ifndef INCLUDED_DBACCESS_SOURCE_UI_INC_TABLEWINDOWLISTBOX_HXX #define INCLUDED_DBACCESS_SOURCE_UI_INC_TABLEWINDOWLISTBOX_HXX -#include -#include +#include +#include #include "callbacks.hxx" struct AcceptDropEvent; @@ -32,67 +32,88 @@ namespace dbaui { public: VclPtr pListBox; // the ListBox inside the same (you can get the TabWin and the WinName out of it) - SvTreeListEntry* pEntry; // the entry, which was dragged or to which was dropped on + int nEntry; // the entry, which was dragged or to which was dropped on OJoinExchangeData(OTableWindowListBox* pBox); - OJoinExchangeData() : pListBox(nullptr), pEntry(nullptr) { } + OJoinExchangeData() : pListBox(nullptr), nEntry(-1) { } }; + struct OJoinDropData { OJoinExchangeData aSource; OJoinExchangeData aDest; }; + class OJoinExchObj; class OTableWindow; + class TableWindowListBoxHelper; + class OTableWindowListBox - :public SvTreeListBox - ,public IDragTransferableListener + : public InterimItemWindow + , public IDragTransferableListener { - DECL_LINK( OnDoubleClick, SvTreeListBox*, bool ); - DECL_LINK( ScrollUpHdl, Timer*, void ); - DECL_LINK( ScrollDownHdl, Timer*, void ); + std::unique_ptr m_xTreeView; + std::unique_ptr m_xDragDropTargetHelper; + + DECL_LINK( OnDoubleClick, weld::TreeView&, bool ); DECL_LINK( DropHdl, void*, void ); DECL_LINK( LookForUiHdl, void*, void ); + DECL_LINK( DragBeginHdl, bool&, bool ); + DECL_LINK( ScrollHdl, weld::TreeView&, void ); - Timer m_aScrollTimer; - Point m_aMousePos; + rtl::Reference m_xHelper; VclPtr m_pTabWin; ImplSVEvent * m_nDropEvent; ImplSVEvent * m_nUiEvent; OJoinDropData m_aDropInfo; - bool m_bReallyScrolled : 1; - protected: virtual void LoseFocus() override; virtual void GetFocus() override; - virtual void NotifyScrolled() override; - virtual void NotifyEndScroll() override; - - virtual bool PreNotify(NotifyEvent& rNEvt) override; virtual void dragFinished( ) override; - public: OTableWindowListBox(OTableWindow* pParent); virtual ~OTableWindowListBox() override; virtual void dispose() override; + const weld::TreeView& get_widget() const { return *m_xTreeView; } + weld::TreeView& get_widget() { return *m_xTreeView; } + // DnD stuff - virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ) override; - virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ) override; - virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ) override; + sal_Int8 AcceptDrop(const AcceptDropEvent& rEvt); + sal_Int8 ExecuteDrop(const ExecuteDropEvent& rEvt); // window virtual void Command(const CommandEvent& rEvt) override; OTableWindow* GetTabWin(){ return m_pTabWin; } - SvTreeListEntry* GetEntryFromText( const OUString& rEntryText ); + int GetEntryFromText( const OUString& rEntryText ); + }; + class TableWindowListBoxHelper : public DropTargetHelper + { private: - using SvTreeListBox::ExecuteDrop; + OTableWindowListBox& m_rParent; + + virtual sal_Int8 AcceptDrop(const AcceptDropEvent& rEvt) override + { + return m_rParent.AcceptDrop(rEvt); + } + + virtual sal_Int8 ExecuteDrop(const ExecuteDropEvent& rEvt) override + { + return m_rParent.ExecuteDrop(rEvt); + } + + public: + TableWindowListBoxHelper(OTableWindowListBox& rParent, const css::uno::Reference& rDropTarget) + : DropTargetHelper(rDropTarget) + , m_rParent(rParent) + { + } }; } #endif // INCLUDED_DBACCESS_SOURCE_UI_INC_TABLEWINDOWLISTBOX_HXX diff --git a/dbaccess/source/ui/querydesign/ConnectionLine.cxx b/dbaccess/source/ui/querydesign/ConnectionLine.cxx index cf5af7def510..791f89247a52 100644 --- a/dbaccess/source/ui/querydesign/ConnectionLine.cxx +++ b/dbaccess/source/ui/querydesign/ConnectionLine.cxx @@ -55,7 +55,7 @@ namespace tools::Rectangle aReturn; if ( pListBox ) { - const long nRowHeight = pListBox->GetEntryHeight(); + const long nRowHeight = pListBox->get_widget().get_height_rows(1); aReturn.SetTop( _aConnPos.Y() - nRowHeight ); aReturn.SetBottom( aReturn.Top() + nRowHeight ); if (_aDescrLinePos.X() < _aConnPos.X()) @@ -74,27 +74,32 @@ namespace } /** calcPointsYValue calculate the points Y value in relation to the listbox entry @param _pWin the corresponding window - @param _pEntry the source or dest entry + @param _nEntry the source or dest entry @param _rNewConPos (in/out) the connection pos @param _rNewDescrPos (in/out) the description pos */ - void calcPointsYValue(const OTableWindow* _pWin,SvTreeListEntry* _pEntry,Point& _rNewConPos,Point& _rNewDescrPos) + void calcPointsYValue(const OTableWindow* _pWin, int _nEntry, Point& _rNewConPos, Point& _rNewDescrPos) { const OTableWindowListBox* pListBox = _pWin->GetListBox(); _rNewConPos.setY( _pWin->GetPosPixel().Y() ); - if ( _pEntry ) + if (_nEntry != -1) { - const long nRowHeight = pListBox->GetEntryHeight(); _rNewConPos.AdjustY(pListBox->GetPosPixel().Y() ); - long nEntryPos = pListBox->GetEntryPosition( _pEntry ).Y(); + const weld::TreeView& rTreeView = pListBox->get_widget(); + std::unique_ptr xEntry = rTreeView.make_iterator(); + rTreeView.get_iter_first(*xEntry); + rTreeView.iter_nth_sibling(*xEntry, _nEntry); + auto nEntryPos = rTreeView.get_row_area(*xEntry).Center().Y(); if( nEntryPos >= 0 ) { - _rNewConPos.AdjustY(nEntryPos ); - _rNewConPos.AdjustY(static_cast( 0.5 * nRowHeight ) ); + _rNewConPos.AdjustY(nEntryPos); } else + { + const auto nRowHeight = rTreeView.get_height_rows(1); _rNewConPos.AdjustY( -static_cast( 0.5 * nRowHeight ) ); + } long nListBoxBottom = _pWin->GetPosPixel().Y() + pListBox->GetPosPixel().Y() @@ -213,8 +218,8 @@ bool OConnectionLine::RecalcLine() if( !pSourceWin || !pDestWin ) return false; - SvTreeListEntry* pSourceEntry = pSourceWin->GetListBox()->GetEntryFromText( GetData()->GetSourceFieldName() ); - SvTreeListEntry* pDestEntry = pDestWin->GetListBox()->GetEntryFromText( GetData()->GetDestFieldName() ); + int nSourceEntry = pSourceWin->GetListBox()->GetEntryFromText( GetData()->GetSourceFieldName() ); + int nDestEntry = pDestWin->GetListBox()->GetEntryFromText( GetData()->GetDestFieldName() ); // determine X-coordinates Point aSourceCenter( 0, 0 ); @@ -239,17 +244,17 @@ bool OConnectionLine::RecalcLine() pSecondDescrPos = &m_aDestDescrLinePos; } - if ( pFirstWin == pSecondWin && pSourceEntry != pDestEntry ) + if (pFirstWin == pSecondWin && nSourceEntry != nDestEntry) calcPointX2(pFirstWin,*pFirstConPos,*pFirstDescrPos); else calcPointX1(pFirstWin,*pFirstConPos,*pFirstDescrPos); calcPointX2(pSecondWin,*pSecondConPos,*pSecondDescrPos); // determine aSourceConnPosY - calcPointsYValue(pSourceWin,pSourceEntry,m_aSourceConnPos,m_aSourceDescrLinePos); + calcPointsYValue(pSourceWin, nSourceEntry, m_aSourceConnPos,m_aSourceDescrLinePos); // determine aDestConnPosY - calcPointsYValue(pDestWin,pDestEntry,m_aDestConnPos,m_aDestDescrLinePos); + calcPointsYValue(pDestWin, nDestEntry, m_aDestConnPos,m_aDestDescrLinePos); return true; } diff --git a/dbaccess/source/ui/querydesign/JoinExchange.cxx b/dbaccess/source/ui/querydesign/JoinExchange.cxx index 312c9d8e9958..7aec24766901 100644 --- a/dbaccess/source/ui/querydesign/JoinExchange.cxx +++ b/dbaccess/source/ui/querydesign/JoinExchange.cxx @@ -28,12 +28,16 @@ namespace dbaui using namespace ::com::sun::star::lang; using namespace ::com::sun::star::datatransfer; - OJoinExchObj::OJoinExchObj(const OJoinExchangeData& jxdSource,bool _bFirstEntry) - :m_bFirstEntry(_bFirstEntry) - ,m_jxdSourceDescription(jxdSource) - ,m_pDragListener(nullptr) + void OJoinExchObj::setDescriptors(const OJoinExchangeData& jxdSource,bool _bFirstEntry) + { + m_bFirstEntry = _bFirstEntry; + m_jxdSourceDescription = jxdSource; + } + + OJoinExchObj::OJoinExchObj() + : m_bFirstEntry(false) + , m_pDragListener(nullptr) { - // add available types to list } OJoinExchObj::~OJoinExchObj() @@ -43,7 +47,7 @@ namespace dbaui void OJoinExchObj::StartDrag( vcl::Window* _pWindow, sal_Int8 _nDragSourceActions, IDragTransferableListener* _pListener ) { m_pDragListener = _pListener; - TransferableHelper::StartDrag(_pWindow, _nDragSourceActions); + TransferDataContainer::StartDrag(_pWindow, _nDragSourceActions); } void OJoinExchObj::DragFinished( sal_Int8 /*nDropAction*/ ) @@ -108,7 +112,7 @@ namespace dbaui Any SAL_CALL OJoinExchObj::queryInterface( const Type& _rType ) { - Any aReturn = TransferableHelper::queryInterface(_rType); + Any aReturn = TransferDataContainer::queryInterface(_rType); if (!aReturn.hasValue()) aReturn = OJoinExchObj_Base::queryInterface(_rType); return aReturn; @@ -116,12 +120,12 @@ namespace dbaui void SAL_CALL OJoinExchObj::acquire( ) throw() { - TransferableHelper::acquire( ); + TransferDataContainer::acquire( ); } void SAL_CALL OJoinExchObj::release( ) throw() { - TransferableHelper::release( ); + TransferDataContainer::release( ); } } // namespace dbaui diff --git a/dbaccess/source/ui/querydesign/JoinTableView.cxx b/dbaccess/source/ui/querydesign/JoinTableView.cxx index 9f3df281d774..5ef30e19aeda 100644 --- a/dbaccess/source/ui/querydesign/JoinTableView.cxx +++ b/dbaccess/source/ui/querydesign/JoinTableView.cxx @@ -33,6 +33,7 @@ #include "QueryMoveTabWinUndoAct.hxx" #include "QuerySizeTabWinUndoAct.hxx" #include +#include #include #include #include @@ -861,11 +862,11 @@ void OJoinTableView::DeselectConn(OTableConnection* pConn) // deselect the corresponding entries in the ListBox of the table window OTableWindow* pWin = pConn->GetSourceWin(); if (pWin && pWin->GetListBox()) - pWin->GetListBox()->SelectAll(false); + pWin->GetListBox()->get_widget().unselect_all(); pWin = pConn->GetDestWin(); if (pWin && pWin->GetListBox()) - pWin->GetListBox()->SelectAll(false); + pWin->GetListBox()->get_widget().unselect_all(); pConn->Deselect(); m_pSelectedConn = nullptr; @@ -890,11 +891,10 @@ void OJoinTableView::SelectConn(OTableConnection* pConn) if (!(pSourceBox && pDestBox)) return; - pSourceBox->SelectAll(false); - pDestBox->SelectAll(false); + pSourceBox->get_widget().unselect_all(); + pDestBox->get_widget().unselect_all(); - SvTreeListEntry* pFirstSourceVisible = pSourceBox->GetFirstEntryInView(); - SvTreeListEntry* pFirstDestVisible = pDestBox->GetFirstEntryInView(); + bool bScrolled = false; const std::vector>& rLines = pConn->GetConnLineList(); auto aIter = rLines.rbegin(); @@ -902,27 +902,29 @@ void OJoinTableView::SelectConn(OTableConnection* pConn) { if ((*aIter)->IsValid()) { - SvTreeListEntry* pSourceEntry = pSourceBox->GetEntryFromText((*aIter)->GetData()->GetSourceFieldName()); - if (pSourceEntry) + int nSourceEntry = pSourceBox->GetEntryFromText((*aIter)->GetData()->GetSourceFieldName()); + if (nSourceEntry != -1) { - pSourceBox->Select(pSourceEntry); - pSourceBox->MakeVisible(pSourceEntry); + pSourceBox->get_widget().select(nSourceEntry); + pSourceBox->get_widget().scroll_to_row(nSourceEntry); + bScrolled = true; } - SvTreeListEntry* pDestEntry = pDestBox->GetEntryFromText((*aIter)->GetData()->GetDestFieldName()); - if (pDestEntry) + int nDestEntry = pDestBox->GetEntryFromText((*aIter)->GetData()->GetDestFieldName()); + if (nDestEntry != -1) { - pDestBox->Select(pDestEntry); - pDestBox->MakeVisible(pDestEntry); + pDestBox->get_widget().select(nDestEntry); + pDestBox->get_widget().scroll_to_row(nDestEntry); + bScrolled = true; } - } } - if ((pFirstSourceVisible != pSourceBox->GetFirstEntryInView()) - || (pFirstDestVisible != pDestBox->GetFirstEntryInView())) + if (bScrolled) + { // scrolling was done -> redraw Invalidate(InvalidateFlags::NoChildren); + } } void OJoinTableView::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) diff --git a/dbaccess/source/ui/querydesign/QTableWindow.cxx b/dbaccess/source/ui/querydesign/QTableWindow.cxx index 6d2916683db9..754c6e169636 100644 --- a/dbaccess/source/ui/querydesign/QTableWindow.cxx +++ b/dbaccess/source/ui/querydesign/QTableWindow.cxx @@ -105,22 +105,20 @@ void OQueryTableWindow::deleteUserData(void*& _pUserData) _pUserData = nullptr; } -void OQueryTableWindow::OnEntryDoubleClicked(SvTreeListEntry* pEntry) +void OQueryTableWindow::OnEntryDoubleClicked(weld::TreeIter& rEntry) { - OSL_ENSURE(pEntry != nullptr, "OQueryTableWindow::OnEntryDoubleClicked : pEntry must not be NULL !"); - // you could also scan that and then return, but like this it could possibly hint to faults at the caller - if (getTableView()->getDesignView()->getController().isReadOnly()) return; - OTableFieldInfo* pInf = static_cast(pEntry->GetUserData()); + weld::TreeView& rTreeView = m_xListBox->get_widget(); + OTableFieldInfo* pInf = reinterpret_cast(rTreeView.get_id(rEntry).toUInt64()); OSL_ENSURE(pInf != nullptr, "OQueryTableWindow::OnEntryDoubleClicked : field doesn't have FieldInfo !"); // build up DragInfo - OTableFieldDescRef aInfo = new OTableFieldDesc(GetTableName(), m_xListBox->GetEntryText(pEntry)); + OTableFieldDescRef aInfo = new OTableFieldDesc(GetTableName(), rTreeView.get_text(rEntry)); aInfo->SetTabWindow(this); aInfo->SetAlias(GetAliasName()); - aInfo->SetFieldIndex(m_xListBox->GetModel()->GetAbsPos(pEntry)); + aInfo->SetFieldIndex(rTreeView.get_iter_index_in_parent(rEntry)); aInfo->SetDataType(pInf->GetDataType()); // and insert corresponding field @@ -135,29 +133,31 @@ bool OQueryTableWindow::ExistsField(const OUString& strFieldName, OTableFieldDes bool bExists = false; if(xConnection.is()) { - SvTreeListEntry* pEntry = m_xListBox->First(); + weld::TreeView& rTreeView = m_xListBox->get_widget(); + std::unique_ptr xEntry(rTreeView.make_iterator()); + bool bEntry = rTreeView.get_iter_first(*xEntry); try { Reference xMeta = xConnection->getMetaData(); ::comphelper::UStringMixEqual bCase(xMeta.is() && xMeta->supportsMixedCaseQuotedIdentifiers()); - while (pEntry) + while (bEntry) { - if (bCase(strFieldName,m_xListBox->GetEntryText(pEntry))) + if (bCase(strFieldName, rTreeView.get_text(*xEntry))) { - OTableFieldInfo* pInf = static_cast(pEntry->GetUserData()); + OTableFieldInfo* pInf = reinterpret_cast(rTreeView.get_id(*xEntry).toUInt64()); assert(pInf && "OQueryTableWindow::ExistsField : field doesn't have FieldInfo !"); rInfo->SetTabWindow(this); rInfo->SetField(strFieldName); rInfo->SetTable(GetTableName()); rInfo->SetAlias(GetAliasName()); - rInfo->SetFieldIndex(m_xListBox->GetModel()->GetAbsPos(pEntry)); + rInfo->SetFieldIndex(rTreeView.get_iter_index_in_parent(*xEntry)); rInfo->SetDataType(pInf->GetDataType()); bExists = true; break; } - pEntry = m_xListBox->Next(pEntry); + bEntry = rTreeView.iter_next(*xEntry); } } catch(SQLException&) diff --git a/dbaccess/source/ui/querydesign/QTableWindow.hxx b/dbaccess/source/ui/querydesign/QTableWindow.hxx index e64fd2e85b7a..536bc65d2431 100644 --- a/dbaccess/source/ui/querydesign/QTableWindow.hxx +++ b/dbaccess/source/ui/querydesign/QTableWindow.hxx @@ -51,7 +51,7 @@ namespace dbaui protected: - virtual void OnEntryDoubleClicked(SvTreeListEntry* pEntry) override; + virtual void OnEntryDoubleClicked(weld::TreeIter& rEntry) override; // is called from DoubleClickHdl of the ListBox /** delete the user data with the equal type as created within createUserData @param _pUserData diff --git a/dbaccess/source/ui/querydesign/QueryTableView.cxx b/dbaccess/source/ui/querydesign/QueryTableView.cxx index 1847cfe7b5ee..22a456e81ea9 100644 --- a/dbaccess/source/ui/querydesign/QueryTableView.cxx +++ b/dbaccess/source/ui/querydesign/QueryTableView.cxx @@ -528,8 +528,10 @@ void OQueryTableView::AddConnection(const OJoinExchangeData& jxdSource, const OJ OQueryTableWindow* pDestWin = static_cast< OQueryTableWindow*>(jxdDest.pListBox->GetTabWin()); OUString aSourceFieldName, aDestFieldName; - aSourceFieldName = jxdSource.pListBox->GetEntryText(jxdSource.pEntry); - aDestFieldName = jxdDest.pListBox->GetEntryText(jxdDest.pEntry); + weld::TreeView& rSourceTreeView = jxdSource.pListBox->get_widget(); + aSourceFieldName = rSourceTreeView.get_text(jxdSource.nEntry); + weld::TreeView& rDestTreeView = jxdDest.pListBox->get_widget(); + aDestFieldName = rDestTreeView.get_text(jxdDest.nEntry); OTableConnection* pConn = GetTabConn(pSourceWin,pDestWin,true); if ( !pConn ) @@ -541,9 +543,9 @@ void OQueryTableView::AddConnection(const OJoinExchangeData& jxdSource, const OJ // Get name/position of both affected fields ... // Source - nSourceFieldIndex = jxdSource.pListBox->GetModel()->GetAbsPos(jxdSource.pEntry); + nSourceFieldIndex = jxdSource.nEntry; // Dest - nDestFieldIndex = jxdDest.pListBox->GetModel()->GetAbsPos(jxdDest.pEntry); + nDestFieldIndex = jxdDest.nEntry; // ... and set them xNewConnectionData->SetFieldIndex(JTCS_FROM, nSourceFieldIndex); diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx index 5a42aec9c842..2b23a3eb226c 100644 --- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx +++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx @@ -1546,9 +1546,10 @@ OTableFieldDescRef OSelectionBrowseBox::InsertField(const OJoinExchangeData& jxd return nullptr; // name and position of the selected field - OUString aFieldName = jxdSource.pListBox->GetEntryText(jxdSource.pEntry); - sal_uInt32 nFieldIndex = jxdSource.pListBox->GetModel()->GetAbsPos(jxdSource.pEntry); - OTableFieldInfo* pInf = static_cast(jxdSource.pEntry->GetUserData()); + weld::TreeView& rTreeView = jxdSource.pListBox->get_widget(); + OUString aFieldName = rTreeView.get_text(jxdSource.nEntry); + sal_uInt32 nFieldIndex = jxdSource.nEntry; + OTableFieldInfo* pInf = reinterpret_cast(rTreeView.get_id(jxdSource.nEntry).toUInt64()); // construct DragInfo, such that I use the other InsertField OTableFieldDescRef aInfo = new OTableFieldDesc(pSourceWin->GetTableName(),aFieldName); diff --git a/dbaccess/source/ui/querydesign/TableWindow.cxx b/dbaccess/source/ui/querydesign/TableWindow.cxx index 05ea3e744281..cdf27c775608 100644 --- a/dbaccess/source/ui/querydesign/TableWindow.cxx +++ b/dbaccess/source/ui/querydesign/TableWindow.cxx @@ -123,7 +123,7 @@ void OTableWindow::dispose() { if (m_xListBox) { - OSL_ENSURE(m_xListBox->GetEntryCount()==0,"Forgot to call EmptyListbox()!"); + OSL_ENSURE(m_xListBox->get_widget().n_children()==0,"Forgot to call EmptyListbox()!"); } m_xListBox.disposeAndClear(); if ( m_pContainerListener.is() ) @@ -179,7 +179,10 @@ void OTableWindow::SetPosSizePixel( const Point& rNewPos, const Size& rNewSize ) void OTableWindow::FillListBox() { - m_xListBox->Clear(); + clearListBox(); + weld::TreeView& rTreeView = m_xListBox->get_widget(); + assert(!rTreeView.n_children()); + if ( !m_pContainerListener.is() ) { Reference< XContainer> xContainer(m_pData->getColumns(),UNO_QUERY); @@ -188,12 +191,11 @@ void OTableWindow::FillListBox() } // mark all primary keys with special image - Image aPrimKeyImage(StockImage::Yes, BMP_PRIMARY_KEY); + OUString aPrimKeyImage(BMP_PRIMARY_KEY); if (GetData()->IsShowAll()) { - SvTreeListEntry* pEntry = m_xListBox->InsertEntry( OUString("*") ); - pEntry->SetUserData( createUserData(nullptr,false) ); + rTreeView.append(OUString::number(reinterpret_cast(createUserData(nullptr,false))), OUString("*")); } Reference xPKeyColumns; @@ -214,20 +216,22 @@ void OTableWindow::FillListBox() const OUString* pIter = aColumns.getConstArray(); const OUString* pEnd = pIter + aColumns.getLength(); - SvTreeListEntry* pEntry = nullptr; for (; pIter != pEnd; ++pIter) { bool bPrimaryKeyColumn = xPKeyColumns.is() && xPKeyColumns->hasByName( *pIter ); - // is this column in the primary key - if ( bPrimaryKeyColumn ) - pEntry = m_xListBox->InsertEntry(*pIter, aPrimKeyImage, aPrimKeyImage); - else - pEntry = m_xListBox->InsertEntry(*pIter); + OUString sId; Reference xColumn(xColumns->getByName(*pIter),UNO_QUERY); - if ( xColumn.is() ) - pEntry->SetUserData( createUserData(xColumn,bPrimaryKeyColumn) ); + if (xColumn.is()) + sId = OUString::number(reinterpret_cast(createUserData(xColumn, bPrimaryKeyColumn))); + + rTreeView.append(sId, *pIter); + + // is this column in the primary key + if ( bPrimaryKeyColumn ) + rTreeView.set_image(rTreeView.n_children() - 1, aPrimKeyImage); } + } } catch(Exception&) @@ -252,16 +256,14 @@ void OTableWindow::clearListBox() if ( !m_xListBox ) return; - SvTreeListEntry* pEntry = m_xListBox->First(); - - while(pEntry) - { - void* pUserData = pEntry->GetUserData(); + weld::TreeView& rTreeView = m_xListBox->get_widget(); + rTreeView.all_foreach([this, &rTreeView](weld::TreeIter& rEntry){ + void* pUserData = reinterpret_cast(rTreeView.get_id(rEntry).toUInt64()); deleteUserData(pUserData); - SvTreeListEntry* pNextEntry = m_xListBox->Next(pEntry); - m_xListBox->GetModel()->Remove(pEntry); - pEntry = pNextEntry; - } + return false; + }); + + rTreeView.clear(); } void OTableWindow::impl_updateImage() @@ -287,8 +289,8 @@ bool OTableWindow::Init() if ( !m_xListBox ) { m_xListBox = VclPtr::Create(this); - OSL_ENSURE( m_xListBox != nullptr, "OTableWindow::Init() : CreateListBox returned NULL !" ); - m_xListBox->SetSelectionMode( SelectionMode::Multiple ); + assert(m_xListBox && "OTableWindow::Init() : CreateListBox returned NULL !"); + m_xListBox->get_widget().set_selection_mode(SelectionMode::Multiple); } // Set the title @@ -298,9 +300,8 @@ bool OTableWindow::Init() m_xListBox->Show(); // add the fields to the ListBox - clearListBox(); FillListBox(); - m_xListBox->SelectAll( false ); + m_xListBox->get_widget().unselect_all(); impl_updateImage(); @@ -475,8 +476,12 @@ void OTableWindow::GetFocus() void OTableWindow::setActive(bool _bActive) { SetBoldTitle( _bActive ); - if (!_bActive && m_xListBox && m_xListBox->GetSelectionCount() != 0) - m_xListBox->SelectAll(false); + if (_bActive || !m_xListBox) + return; + + weld::TreeView& rTreeView = m_xListBox->get_widget(); + if (rTreeView.get_selected_index() != -1) + rTreeView.unselect_all(); } void OTableWindow::Remove() @@ -513,17 +518,13 @@ bool OTableWindow::ExistsAConn() const void OTableWindow::EnumValidFields(std::vector< OUString>& arrstrFields) { arrstrFields.clear(); + weld::TreeView& rTreeView = m_xListBox->get_widget(); + // This default implementation counts every item in the ListBox ... for any other behaviour it must be over-written - if ( m_xListBox ) - { - arrstrFields.reserve(m_xListBox->GetEntryCount()); - SvTreeListEntry* pEntryLoop = m_xListBox->First(); - while (pEntryLoop) - { - arrstrFields.push_back(m_xListBox->GetEntryText(pEntryLoop)); - pEntryLoop = m_xListBox->Next(pEntryLoop); - } - } + rTreeView.all_foreach([&rTreeView, &arrstrFields](weld::TreeIter& rEntry){ + arrstrFields.push_back(rTreeView.get_text(rEntry)); + return false; + }); } void OTableWindow::StateChanged( StateChangedType nType ) @@ -567,9 +568,10 @@ void OTableWindow::Command(const CommandEvent& rEvt) ptWhere = rEvt.GetMousePosPixel(); else { - SvTreeListEntry* pCurrent = m_xListBox->GetCurEntry(); - if ( pCurrent ) - ptWhere = m_xListBox->GetEntryPosition(pCurrent); + weld::TreeView& rTreeView = m_xListBox->get_widget(); + std::unique_ptr xCurrent = rTreeView.make_iterator(); + if (rTreeView.get_cursor(xCurrent.get())) + ptWhere = rTreeView.get_row_area(*xCurrent).Center(); else ptWhere = m_xTitle->GetPosPixel(); } diff --git a/dbaccess/source/ui/querydesign/TableWindowAccess.cxx b/dbaccess/source/ui/querydesign/TableWindowAccess.cxx index 3cd87ded7a61..1dc69e763d5d 100644 --- a/dbaccess/source/ui/querydesign/TableWindowAccess.cxx +++ b/dbaccess/source/ui/querydesign/TableWindowAccess.cxx @@ -25,6 +25,7 @@ #include #include #include +#include namespace dbaui { diff --git a/dbaccess/source/ui/querydesign/TableWindowListBox.cxx b/dbaccess/source/ui/querydesign/TableWindowListBox.cxx index a4ba5f0022ae..4224fe1a88a9 100644 --- a/dbaccess/source/ui/querydesign/TableWindowListBox.cxx +++ b/dbaccess/source/ui/querydesign/TableWindowListBox.cxx @@ -37,25 +37,25 @@ using namespace ::com::sun::star::datatransfer; OJoinExchangeData::OJoinExchangeData(OTableWindowListBox* pBox) : pListBox(pBox) - , pEntry(pBox->FirstSelected()) -{ } + , nEntry(pBox->get_widget().get_selected_index()) +{ +} -const sal_uLong SCROLLING_TIMESPAN = 500; -const long LISTBOX_SCROLLING_AREA = 6; OTableWindowListBox::OTableWindowListBox( OTableWindow* pParent ) - :SvTreeListBox( pParent, WB_HASBUTTONS | WB_BORDER) - ,m_aMousePos( Point(0,0) ) - ,m_pTabWin( pParent ) - ,m_nDropEvent(nullptr) - ,m_nUiEvent(nullptr) - ,m_bReallyScrolled( false ) + : InterimItemWindow(pParent, "dbaccess/ui/tablelistbox.ui", "TableListBox") + , m_xTreeView(m_xBuilder->weld_tree_view("treeview")) + , m_xDragDropTargetHelper(new TableWindowListBoxHelper(*this, m_xTreeView->get_drop_target())) + , m_pTabWin( pParent ) + , m_nDropEvent(nullptr) + , m_nUiEvent(nullptr) { - m_aScrollTimer.SetTimeout( SCROLLING_TIMESPAN ); - SetDoubleClickHdl( LINK(this, OTableWindowListBox, OnDoubleClick) ); - - SetSelectionMode(SelectionMode::Single); + m_xTreeView->connect_row_activated(LINK(this, OTableWindowListBox, OnDoubleClick)); + m_xTreeView->connect_visible_range_changed(LINK(this, OTableWindowListBox, ScrollHdl)); - SetHighlightRange( ); + m_xHelper.set(new OJoinExchObj); + rtl::Reference xHelper(m_xHelper.get()); + m_xTreeView->enable_drag_source(xHelper, DND_ACTION_LINK); + m_xTreeView->connect_drag_begin(LINK(this, OTableWindowListBox, DragBeginHdl)); } void OTableWindowListBox::dragFinished( ) @@ -79,17 +79,15 @@ void OTableWindowListBox::dispose() Application::RemoveUserEvent(m_nDropEvent); if (m_nUiEvent) Application::RemoveUserEvent(m_nUiEvent); - if( m_aScrollTimer.IsActive() ) - m_aScrollTimer.Stop(); m_pTabWin.clear(); - SvTreeListBox::dispose(); + m_xDragDropTargetHelper.reset(); + m_xTreeView.reset(); + InterimItemWindow::dispose(); } -SvTreeListEntry* OTableWindowListBox::GetEntryFromText( const OUString& rEntryText ) +int OTableWindowListBox::GetEntryFromText( const OUString& rEntryText ) { // iterate through the list - SvTreeList* pTreeList = GetModel(); - SvTreeListEntry* pEntry = pTreeList->First(); OJoinDesignView* pView = m_pTabWin->getDesignView(); OJoinController& rController = pView->getController(); @@ -103,172 +101,76 @@ SvTreeListEntry* OTableWindowListBox::GetEntryFromText( const OUString& rEntryTe if(xMeta.is()) bCase = xMeta->supportsMixedCaseQuotedIdentifiers(); } - while( pEntry ) + for (int nEntry = 0, nCount = m_xTreeView->n_children(); nEntry < nCount; ++nEntry) { - if(bCase ? rEntryText == GetEntryText(pEntry) : rEntryText.equalsIgnoreAsciiCase(GetEntryText(pEntry))) - { - return pEntry; - } - pEntry = pTreeList->Next(pEntry); + if (bCase ? rEntryText == m_xTreeView->get_text(nEntry) : rEntryText.equalsIgnoreAsciiCase(m_xTreeView->get_text(nEntry))) + return nEntry; } } catch(SQLException&) { } - return nullptr; -} - -void OTableWindowListBox::NotifyScrolled() -{ - m_bReallyScrolled = true; -} - -void OTableWindowListBox::NotifyEndScroll() -{ - if (m_bReallyScrolled) - // connections of this table, if any, should be redrawn - m_pTabWin->getTableView()->Invalidate(InvalidateFlags::NoChildren); - - // without InvalidateFlags::NoChildren all tables would be redrawn, - // so: flickering - m_bReallyScrolled = false; -} - -bool OTableWindowListBox::PreNotify(NotifyEvent& rNEvt) -{ - bool bHandled = false; - switch (rNEvt.GetType()) - { - case MouseNotifyEvent::KEYINPUT: - { - const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent(); - const vcl::KeyCode& rCode = pKeyEvent->GetKeyCode(); - - if (rCode.GetCode() != KEY_RETURN) - { - if(m_pTabWin) - { - bHandled = m_pTabWin->HandleKeyInput(*pKeyEvent); - } - break; - } - - if (rCode.IsMod1() || rCode.IsMod2() || rCode.IsShift()) - break; - if (FirstSelected()) - static_cast(Window::GetParent())->OnEntryDoubleClicked(FirstSelected()); - break; - } - default: - break; - } - - if (!bHandled) - return SvTreeListBox::PreNotify(rNEvt); - return true; + return -1; } -IMPL_LINK_NOARG( OTableWindowListBox, ScrollUpHdl, Timer*, void ) +IMPL_LINK_NOARG(OTableWindowListBox, ScrollHdl, weld::TreeView&, void) { - SvTreeListEntry* pEntry = GetEntry( m_aMousePos ); - if( !pEntry ) - return; - - if( pEntry != Last() ) - { - ScrollOutputArea( -1 ); - pEntry = GetEntry( m_aMousePos ); - Select( pEntry ); - } + // connections of this table, if any, should be redrawn + m_pTabWin->getTableView()->Invalidate(InvalidateFlags::NoChildren); } -IMPL_LINK_NOARG( OTableWindowListBox, ScrollDownHdl, Timer*, void ) +IMPL_LINK(OTableWindowListBox, DragBeginHdl, bool&, rUnsetDragIcon, bool) { - SvTreeListEntry* pEntry = GetEntry( m_aMousePos ); - if( !pEntry ) - return; - - if( pEntry != Last() ) + rUnsetDragIcon = false; + if (m_xTreeView->get_selected_index() == -1) { - ScrollOutputArea( 1 ); - pEntry = GetEntry( m_aMousePos ); - Select( pEntry ); + // no drag without a field + return true; } -} -void OTableWindowListBox::StartDrag( sal_Int8 /*nAction*/, const Point& /*rPosPixel*/ ) -{ OJoinTableView* pCont = m_pTabWin->getTableView(); if (!pCont->getDesignView()->getController().isReadOnly() && pCont->getDesignView()->getController().isConnected()) { // asterisk was not allowed to be copied to selection browsebox - bool bFirstNotAllowed = FirstSelected() == First() && m_pTabWin->GetData()->IsShowAll(); - EndSelection(); + bool bFirstNotAllowed = m_xTreeView->is_selected(0) && m_pTabWin->GetData()->IsShowAll(); // create a description of the source OJoinExchangeData jxdSource(this); - // put it into an exchange object - rtl::Reference pJoin = new OJoinExchObj(jxdSource,bFirstNotAllowed); - pJoin->StartDrag(this, DND_ACTION_LINK, this); + // update the exchange object + m_xHelper->setDescriptors(jxdSource, bFirstNotAllowed); + + return false; } + + return true; } sal_Int8 OTableWindowListBox::AcceptDrop( const AcceptDropEvent& _rEvt ) { + // to enable the autoscroll when we're close to the edges + std::unique_ptr xEntry(m_xTreeView->make_iterator()); + bool bHasDestRow = m_xTreeView->get_dest_row_at_pos(_rEvt.maPosPixel, xEntry.get(), true); + sal_Int8 nDND_Action = DND_ACTION_NONE; // check the format - if ( !OJoinExchObj::isFormatAvailable(GetDataFlavorExVector(),SotClipboardFormatId::SBA_TABID) // this means that the first entry is to be dragged - && OJoinExchObj::isFormatAvailable(GetDataFlavorExVector()) ) + if ( !OJoinExchObj::isFormatAvailable(m_xDragDropTargetHelper->GetDataFlavorExVector(),SotClipboardFormatId::SBA_TABID) // this means that the first entry is to be dragged + && OJoinExchObj::isFormatAvailable(m_xDragDropTargetHelper->GetDataFlavorExVector()) ) { // don't drop into the window if it's the drag source itself // remove the selection if the dragging operation is leaving the window if (_rEvt.mbLeaving) - SelectAll(false); + m_xTreeView->unselect_all(); else { - // hit test - m_aMousePos = _rEvt.maPosPixel; - Size aOutputSize = GetOutputSizePixel(); - SvTreeListEntry* pEntry = GetEntry( m_aMousePos ); - if( !pEntry ) + if (!bHasDestRow) return DND_ACTION_NONE; - // Scrolling Areas - tools::Rectangle aBottomScrollArea( Point(0, aOutputSize.Height()-LISTBOX_SCROLLING_AREA), - Size(aOutputSize.Width(), LISTBOX_SCROLLING_AREA) ); - tools::Rectangle aTopScrollArea( Point(0,0), Size(aOutputSize.Width(), LISTBOX_SCROLLING_AREA) ); - - // scroll up if the pointer is on the upper scroll area - if( aBottomScrollArea.IsInside(m_aMousePos) ) - { - if( !m_aScrollTimer.IsActive() ) - { - m_aScrollTimer.SetInvokeHandler( LINK(this, OTableWindowListBox, ScrollUpHdl) ); - ScrollUpHdl( nullptr ); - } - } - // scroll down if the pointer is on the lower scroll area - else if( aTopScrollArea.IsInside(m_aMousePos) ) - { - if( !m_aScrollTimer.IsActive() ) - { - m_aScrollTimer.SetInvokeHandler( LINK(this, OTableWindowListBox, ScrollDownHdl) ); - ScrollDownHdl( nullptr ); - } - } - else - { - if( m_aScrollTimer.IsActive() ) - m_aScrollTimer.Stop(); - } - // automatically select right entry when dragging - if ((FirstSelected() != pEntry) || NextSelected(FirstSelected())) - SelectAll(false); - Select(pEntry); + m_xTreeView->unselect_all(); + m_xTreeView->select(*xEntry); // one cannot drop on the first (*) entry - if(!( m_pTabWin->GetData()->IsShowAll() && (pEntry==First()) )) + if(!( m_pTabWin->GetData()->IsShowAll() && (m_xTreeView->get_iter_index_in_parent(*xEntry) == 0) )) nDND_Action = DND_ACTION_LINK; } } @@ -318,37 +220,37 @@ sal_Int8 OTableWindowListBox::ExecuteDrop( const ExecuteDropEvent& _rEvt ) void OTableWindowListBox::LoseFocus() { - if(m_pTabWin) + if (m_pTabWin) m_pTabWin->setActive(false); - SvTreeListBox::LoseFocus(); + InterimItemWindow::LoseFocus(); } void OTableWindowListBox::GetFocus() { - if(m_pTabWin) + if (m_pTabWin) m_pTabWin->setActive(); - if (GetCurEntry() != nullptr) + std::unique_ptr xCurrent = m_xTreeView->make_iterator(); + if (m_xTreeView->get_cursor(xCurrent.get())) { - if ( GetSelectionCount() == 0 || GetCurEntry() != FirstSelected() ) - { - if ( FirstSelected() ) - Select(FirstSelected(), false); - Select(GetCurEntry()); - } - else - ShowFocusRect(FirstSelected()); + m_xTreeView->unselect_all(); + m_xTreeView->select(*xCurrent); } - SvTreeListBox::GetFocus(); + + InterimItemWindow::GetFocus(); } -IMPL_LINK_NOARG( OTableWindowListBox, OnDoubleClick, SvTreeListBox *, bool ) +IMPL_LINK_NOARG(OTableWindowListBox, OnDoubleClick, weld::TreeView&, bool) { // tell my parent vcl::Window* pParent = Window::GetParent(); OSL_ENSURE(pParent != nullptr, "OTableWindowListBox::OnDoubleClick : have no Parent !"); - static_cast(pParent)->OnEntryDoubleClicked(GetHdlEntry()); + std::unique_ptr xCurrent = m_xTreeView->make_iterator(); + if (!m_xTreeView->get_cursor(xCurrent.get())) + return false; + + static_cast(pParent)->OnEntryDoubleClicked(*xCurrent); return false; } @@ -363,7 +265,7 @@ void OTableWindowListBox::Command(const CommandEvent& rEvt) break; } default: - SvTreeListBox::Command(rEvt); + InterimItemWindow::Command(rEvt); } } diff --git a/dbaccess/source/ui/querydesign/TableWindowTitle.cxx b/dbaccess/source/ui/querydesign/TableWindowTitle.cxx index 952063d5d3cc..5157db77eda4 100644 --- a/dbaccess/source/ui/querydesign/TableWindowTitle.cxx +++ b/dbaccess/source/ui/querydesign/TableWindowTitle.cxx @@ -127,7 +127,8 @@ void OTableWindowTitle::MouseButtonDown( const MouseEvent& rEvt ) Size aSize(GetTextWidth(GetText()) + 20, m_pTabWin->GetSizePixel().Height() - m_pTabWin->GetListBox()->GetSizePixel().Height()); - aSize.AdjustHeight((m_pTabWin->GetListBox()->GetEntryCount() + 2) * m_pTabWin->GetListBox()->GetEntryHeight() ); + weld::TreeView& rTreeView = m_pTabWin->GetListBox()->get_widget(); + aSize.AdjustHeight(rTreeView.get_height_rows(rTreeView.n_children() + 2)); if(m_pTabWin->GetSizePixel() != aSize) { m_pTabWin->SetSizePixel(aSize); diff --git a/dbaccess/source/ui/relationdesign/RelationTableView.cxx b/dbaccess/source/ui/relationdesign/RelationTableView.cxx index a55222096368..9423d1a8470c 100644 --- a/dbaccess/source/ui/relationdesign/RelationTableView.cxx +++ b/dbaccess/source/ui/relationdesign/RelationTableView.cxx @@ -178,8 +178,10 @@ void ORelationTableView::AddConnection(const OJoinExchangeData& jxdSource, const pDestWin->GetData()); // the names of the affected fields - OUString sSourceFieldName = jxdSource.pListBox->GetEntryText(jxdSource.pEntry); - OUString sDestFieldName = jxdDest.pListBox->GetEntryText(jxdDest.pEntry); + weld::TreeView& rSourceTreeView = jxdSource.pListBox->get_widget(); + OUString sSourceFieldName = rSourceTreeView.get_text(jxdSource.nEntry); + weld::TreeView& rDestTreeView = jxdDest.pListBox->get_widget(); + OUString sDestFieldName = rDestTreeView.get_text(jxdDest.nEntry); // the number of PKey-Fields in the source const Reference< XNameAccess> xPrimaryKeyColumns = getPrimaryKeyColumns_throw(pSourceWin->GetData()->getTable()); diff --git a/dbaccess/uiconfig/ui/tablelistbox.ui b/dbaccess/uiconfig/ui/tablelistbox.ui new file mode 100644 index 000000000000..f84e011006e3 --- /dev/null +++ b/dbaccess/uiconfig/ui/tablelistbox.ui @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + True + False + True + True + 0 + 12 + + + True + True + True + True + in + + + True + True + True + True + True + liststore1 + False + True + 1 + True + + + + + + 6 + + + + 0 + + + + + + 1 + + + + + + + + + False + True + 0 + + + + -- cgit v1.2.3