summaryrefslogtreecommitdiff
path: root/dbaccess
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-08-02 15:05:27 +0100
committerCaolán McNamara <caolanm@redhat.com>2020-08-04 21:40:44 +0200
commit67e5f16e53a05587c4f36518a56e931f4708e16b (patch)
treed5f250ce65195ef6937199c5715e9937915b774c /dbaccess
parentcd9c8851baf0f74f0f5044eedf8d2afaff895164 (diff)
weld OTableWindowListBox
Change-Id: Iae1d2da93fd150d2a333a55bd5b3c06aad0a308f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100030 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'dbaccess')
-rw-r--r--dbaccess/UIConfig_dbaccess.mk1
-rw-r--r--dbaccess/source/ui/inc/JoinExchange.hxx8
-rw-r--r--dbaccess/source/ui/inc/TableWindow.hxx2
-rw-r--r--dbaccess/source/ui/inc/TableWindowListBox.hxx67
-rw-r--r--dbaccess/source/ui/querydesign/ConnectionLine.cxx31
-rw-r--r--dbaccess/source/ui/querydesign/JoinExchange.cxx22
-rw-r--r--dbaccess/source/ui/querydesign/JoinTableView.cxx36
-rw-r--r--dbaccess/source/ui/querydesign/QTableWindow.cxx26
-rw-r--r--dbaccess/source/ui/querydesign/QTableWindow.hxx2
-rw-r--r--dbaccess/source/ui/querydesign/QueryTableView.cxx10
-rw-r--r--dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx7
-rw-r--r--dbaccess/source/ui/querydesign/TableWindow.cxx84
-rw-r--r--dbaccess/source/ui/querydesign/TableWindowAccess.cxx1
-rw-r--r--dbaccess/source/ui/querydesign/TableWindowListBox.cxx228
-rw-r--r--dbaccess/source/ui/querydesign/TableWindowTitle.cxx3
-rw-r--r--dbaccess/source/ui/relationdesign/RelationTableView.cxx6
-rw-r--r--dbaccess/uiconfig/ui/tablelistbox.ui71
17 files changed, 309 insertions, 296 deletions
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 <vcl/treelistbox.hxx>
-#include <vcl/timer.hxx>
+#include <vcl/transfer.hxx>
+#include <vcl/InterimItemWindow.hxx>
#include "callbacks.hxx"
struct AcceptDropEvent;
@@ -32,67 +32,88 @@ namespace dbaui
{
public:
VclPtr<OTableWindowListBox> 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<weld::TreeView> m_xTreeView;
+ std::unique_ptr<TableWindowListBoxHelper> 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<OJoinExchObj> m_xHelper;
VclPtr<OTableWindow> 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<css::datatransfer::dnd::XDropTarget>& 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<weld::TreeIter> 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<long>( 0.5 * nRowHeight ) );
+ _rNewConPos.AdjustY(nEntryPos);
}
else
+ {
+ const auto nRowHeight = rTreeView.get_height_rows(1);
_rNewConPos.AdjustY( -static_cast<long>( 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 <toolkit/helper/vclunohelper.hxx>
+#include <vcl/menu.hxx>
#include <vcl/svapp.hxx>
#include <vcl/settings.hxx>
#include <vcl/commandevent.hxx>
@@ -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<std::unique_ptr<OConnectionLine>>& 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<OTableFieldInfo*>(pEntry->GetUserData());
+ weld::TreeView& rTreeView = m_xListBox->get_widget();
+ OTableFieldInfo* pInf = reinterpret_cast<OTableFieldInfo*>(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<weld::TreeIter> xEntry(rTreeView.make_iterator());
+ bool bEntry = rTreeView.get_iter_first(*xEntry);
try
{
Reference<XDatabaseMetaData> 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<OTableFieldInfo*>(pEntry->GetUserData());
+ OTableFieldInfo* pInf = reinterpret_cast<OTableFieldInfo*>(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<OTableFieldInfo*>(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<OTableFieldInfo*>(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<sal_uInt64>(createUserData(nullptr,false))), OUString("*"));
}
Reference<XNameAccess> 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<XPropertySet> xColumn(xColumns->getByName(*pIter),UNO_QUERY);
- if ( xColumn.is() )
- pEntry->SetUserData( createUserData(xColumn,bPrimaryKeyColumn) );
+ if (xColumn.is())
+ sId = OUString::number(reinterpret_cast<sal_uInt64>(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<void*>(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<OTableWindowListBox>::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<weld::TreeIter> 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 <com/sun/star/accessibility/AccessibleRelationType.hpp>
#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
#include <comphelper/sequence.hxx>
+#include <vcl/vclevent.hxx>
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<TransferDataContainer> 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<OTableWindow*>(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<OJoinExchObj> 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<weld::TreeIter> 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<weld::TreeIter> 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<OTableWindow*>(pParent)->OnEntryDoubleClicked(GetHdlEntry());
+ std::unique_ptr<weld::TreeIter> xCurrent = m_xTreeView->make_iterator();
+ if (!m_xTreeView->get_cursor(xCurrent.get()))
+ return false;
+
+ static_cast<OTableWindow*>(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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.36.0 -->
+<interface domain="dba">
+ <requires lib="gtk+" version="3.18"/>
+ <object class="GtkTreeStore" id="liststore1">
+ <columns>
+ <!-- column-name expander -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkBox" id="TableListBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="border_width">0</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="model">liststore1</property>
+ <property name="headers_visible">False</property>
+ <property name="reorderable">True</property>
+ <property name="search_column">1</property>
+ <property name="enable_tree_lines">True</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="Macro Library List-selection1"/>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn2">
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCellRendererPixbuf" id="cellrenderertext4"/>
+ <attributes>
+ <attribute name="pixbuf">0</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext2"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+</interface>