toolkit: Use TableControl_Impl directly instead of ITableModelListener

TableControl_Impl is the only class implementing/subclassing the
ITableModelListener interface/base class.

Switch to using TableControl_Impl directly instead of the
abstract base class. This also requires that TableControl_Impl
now needs to subclass std::enable_shared_from_this instead
of ITableModelListener doing so.

This commmit prepares for merging TableControl and TableControl_Impl
in an upcoming commit, at which point the std::shared_ptr will
be replaced by a VclPtr as TableControl is a vcl::Window subclass.

Change-Id: I74b9b29f03d03571709d1c8a7b416b0a6a12319a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211156
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
This commit is contained in:
Michael Weghorn
2026-09-19 16:15:14 +02:00
parent 3636f27982
commit bf6891fefa
5 changed files with 19 additions and 12 deletions
@@ -73,7 +73,8 @@ class TableFunctionSet;
//= TableControl_Impl
class TableControl_Impl : public ITableModelListener
class TableControl_Impl : public ITableModelListener,
public std::enable_shared_from_this<TableControl_Impl>
{
friend class TableGeometry;
friend class TableRowGeometry;
+5 -4
View File
@@ -78,7 +78,7 @@ namespace svt::table
/** declares an interface to be implemented by components interested in
changes in an ->ITableModel
*/
class SAL_NO_VTABLE ITableModelListener : public std::enable_shared_from_this< ITableModelListener >
class SAL_NO_VTABLE ITableModelListener
{
public:
/** notifies the listener that one or more rows have been inserted into
@@ -147,7 +147,6 @@ namespace svt::table
/// deletes the listener instance
virtual ~ITableModelListener(){};
};
typedef std::shared_ptr< ITableModelListener > PTableModelListener;
//= IColumnModel
@@ -329,11 +328,13 @@ namespace svt::table
/** adds a listener to be notified of changes in the table model
*/
virtual void addTableModelListener( const PTableModelListener& i_listener ) = 0;
virtual void addTableModelListener(const std::shared_ptr<TableControl_Impl>& i_listener)
= 0;
/** remove a listener to be notified of changes in the table model
*/
virtual void removeTableModelListener( const PTableModelListener& i_listener ) = 0;
virtual void removeTableModelListener(const std::shared_ptr<TableControl_Impl>& i_listener)
= 0;
/** retrieves the content of the given cell
*/
@@ -111,8 +111,8 @@ public:
{
return ScrollbarShowNever;
}
virtual void addTableModelListener(const PTableModelListener&) override {}
virtual void removeTableModelListener(const PTableModelListener&) override {}
virtual void addTableModelListener(const std::shared_ptr<TableControl_Impl>&) override {}
virtual void removeTableModelListener(const std::shared_ptr<TableControl_Impl>&) override {}
virtual ::std::optional<::Color> getLineColor() const override
{
return ::std::optional<::Color>();
@@ -22,6 +22,7 @@
#include <controls/table/defaultinputhandler.hxx>
#include <controls/table/gridtablerenderer.hxx>
#include <controls/table/tablecontrol_impl.hxx>
#include <com/sun/star/awt/grid/XSortableGridData.hpp>
#include <com/sun/star/util/Color.hpp>
@@ -305,14 +306,16 @@ ScrollbarVisibility UnoControlTableModel::getHorizontalScrollbarVisibility() con
return eHScrollMode;
}
void UnoControlTableModel::addTableModelListener(const PTableModelListener& i_listener)
void UnoControlTableModel::addTableModelListener(
const std::shared_ptr<TableControl_Impl>& i_listener)
{
DBG_TESTSOLARMUTEX();
ENSURE_OR_RETURN_VOID(!!i_listener, "illegal NULL listener");
m_aListeners.push_back(i_listener);
}
void UnoControlTableModel::removeTableModelListener(const PTableModelListener& i_listener)
void UnoControlTableModel::removeTableModelListener(
const std::shared_ptr<TableControl_Impl>& i_listener)
{
DBG_TESTSOLARMUTEX();
auto lookup = std::find(m_aListeners.begin(), m_aListeners.end(), i_listener);
@@ -55,8 +55,10 @@ public:
virtual TableMetrics getRowHeaderWidth() const override;
virtual ScrollbarVisibility getVerticalScrollbarVisibility() const override;
virtual ScrollbarVisibility getHorizontalScrollbarVisibility() const override;
virtual void addTableModelListener(const PTableModelListener& i_listener) override;
virtual void removeTableModelListener(const PTableModelListener& i_listener) override;
virtual void
addTableModelListener(const std::shared_ptr<TableControl_Impl>& i_listener) override;
virtual void
removeTableModelListener(const std::shared_ptr<TableControl_Impl>& i_listener) override;
virtual void getCellContent(ColPos const i_col, RowPos const i_row,
css::uno::Any& o_cellContent) override;
virtual void getCellToolTip(ColPos const i_col, RowPos const i_row,
@@ -141,7 +143,7 @@ public:
private:
void impl_notifyTableMetricsChanged() const;
typedef ::std::vector<PTableModelListener> ModellListeners;
typedef ::std::vector<std::shared_ptr<TableControl_Impl>> ModellListeners;
typedef ::std::vector<PColumnModel> ColumnModels;
ColumnModels aColumns;