include/vcl/weld/TreeView.hxx | 1 vcl/inc/qt5/QtInstanceTreeView.hxx | 1 vcl/inc/salvtables.hxx | 2 - vcl/qt5/QtInstanceTreeView.cxx | 41 ++++++++++++++++++++++++++++++++----- vcl/source/app/salvtables.cxx | 11 +++------ 5 files changed, 42 insertions(+), 14 deletions(-)
New commits: commit 33e8b6fd582a00536e4180173cfc116ea6362c8d Author: Michael Weghorn <[email protected]> AuthorDate: Mon Jan 12 22:11:21 2026 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Tue Jan 13 19:37:30 2026 +0100 tdf#130857 qt weld: Implement QtInstanceTreeView::{g,s}et_text_emphasis Like the GTK implementation in GtkInstanceTreeView::set_text_emphasis, set the text/font to bold when text emphasis is enabled. Do this by setting the Qt::FontRole [1], described as: > The font used for items rendered with the default delegate. (QFont) In weld::TreeView, document that a column index of -1 passed to that method means that this should be applied for all columns (as implemented in the vcl and GTK implementations). In a WIP branch to implement support for the "Tools" -> "Options" -> "Advanced" -> "Expert Configuration" dialog, this causes the font of rows whose value gets modified to be shown in bold for the qt6 VCL plugin with SAL_VCL_QT_USE_WELDED_WIDGETS=1, as is the case with the gtk3 VCL plugin. [1] https://doc.qt.io/qt-6/qt.html#ItemDataRole-enum Change-Id: I9d5a9640356f0201427a43239b4a5ab1d3a80e26 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197149 Reviewed-by: Michael Weghorn <[email protected]> Tested-by: Jenkins diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx index e4e0c5df04f5..194f770c89de 100644 --- a/include/vcl/weld/TreeView.hxx +++ b/include/vcl/weld/TreeView.hxx @@ -259,6 +259,7 @@ public: const css::uno::Reference<css::graphic::XGraphic>& rImage, int col = -1) = 0; + // col index -1 sets text emphasis for all columns void set_text_emphasis(int row, bool bOn, int col); virtual void set_text_emphasis(const TreeIter& rIter, bool bOn, int col) = 0; bool get_text_emphasis(int row, int col) const; diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx b/vcl/inc/qt5/QtInstanceTreeView.hxx index d3c9451b43cb..f8e0dbc7ff90 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -174,6 +174,7 @@ private: static QAbstractItemView::SelectionMode mapSelectionMode(SelectionMode eMode); void setImage(const weld::TreeIter& rIter, const QPixmap& rPixmap, int nCol); + void setTextEmphasis(const QModelIndex& rIndex, bool bOn); bool handleViewPortToolTipEvent(const QHelpEvent& rEvent); diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index 7439aad32c33..a53012aa76a4 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -308,15 +308,46 @@ bool QtInstanceTreeView::get_sensitive(const weld::TreeIter& rIter, int nCol) co return bSensitive; } -void QtInstanceTreeView::set_text_emphasis(const weld::TreeIter&, bool, int) +void QtInstanceTreeView::setTextEmphasis(const QModelIndex& rIndex, bool bOn) { - assert(false && "Not implemented yet"); + assert(GetQtInstance().IsMainThread()); + + QFont aFont = m_pTreeView->font(); + const QVariant aFontData = m_pModel->data(rIndex, Qt::FontRole); + if (aFontData.canConvert<QFont>()) + aFont = aFontData.value<QFont>(); + aFont.setBold(bOn); + m_pModel->setData(rIndex, aFont, Qt::FontRole); } -bool QtInstanceTreeView::get_text_emphasis(const weld::TreeIter&, int) const +void QtInstanceTreeView::set_text_emphasis(const weld::TreeIter& rIter, bool bOn, int nCol) { - assert(false && "Not implemented yet"); - return false; + SolarMutexGuard g; + + GetQtInstance().RunInMainThread([&] { + // column index -1 means "all columns" + if (nCol == -1) + { + for (int i = 0; i < m_pModel->columnCount(); ++i) + setTextEmphasis(modelIndex(rIter, i), bOn); + return; + } + + setTextEmphasis(modelIndex(rIter, nCol), bOn); + }); +} + +bool QtInstanceTreeView::get_text_emphasis(const weld::TreeIter& rIter, int nCol) const +{ + SolarMutexGuard g; + + bool bEmphasis = false; + GetQtInstance().RunInMainThread([&] { + const QVariant aFontData = m_pModel->data(modelIndex(rIter, nCol), Qt::FontRole); + bEmphasis = aFontData.canConvert<bool>() && aFontData.toBool(); + }); + + return bEmphasis; } void QtInstanceTreeView::set_text_align(const weld::TreeIter& rIter, TxtAlign eAlign, int nCol) commit 14144996b216c751622f34ec549b52109a04f8e4 Author: Michael Weghorn <[email protected]> AuthorDate: Mon Jan 12 21:29:35 2026 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Tue Jan 13 19:37:21 2026 +0100 vcl weld: Merge both SalInstanceTreeView::set_text_emphasis the one taking a SvTreeListEntry* param is only called by the other one, so move the logic into that one. Change-Id: If796c4d2c3949697c0af2510e3eecd9c712755b4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197148 Tested-by: Jenkins Reviewed-by: Michael Weghorn <[email protected]> diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index 30f6c9d1499d..3ee33a7b0434 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1693,8 +1693,6 @@ public: virtual void set_extra_row_indent(const weld::TreeIter& rIter, int nIndentLevel) override; - void set_text_emphasis(SvTreeListEntry* pEntry, bool bOn, int col = -1); - virtual void set_text_emphasis(const weld::TreeIter& rIter, bool bOn, int col) override; virtual bool get_text_emphasis(const weld::TreeIter& rIter, int col) const override; diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index e9ac8ade121a..30b33ca1d1f7 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -4358,8 +4358,11 @@ void SalInstanceTreeView::set_extra_row_indent(const weld::TreeIter& rIter, int rVclIter.iter->SetExtraIndent(nIndentLevel); } -void SalInstanceTreeView::set_text_emphasis(SvTreeListEntry* pEntry, bool bOn, int col) +void SalInstanceTreeView::set_text_emphasis(const weld::TreeIter& rIter, bool bOn, int col) { + const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter); + SvTreeListEntry* pEntry = rVclIter.iter; + if (col == -1) { for (size_t nCur = 0; nCur < pEntry->ItemCount(); ++nCur) @@ -4383,12 +4386,6 @@ void SalInstanceTreeView::set_text_emphasis(SvTreeListEntry* pEntry, bool bOn, i InvalidateModelEntry(pEntry); } -void SalInstanceTreeView::set_text_emphasis(const weld::TreeIter& rIter, bool bOn, int col) -{ - const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter); - set_text_emphasis(rVclIter.iter, bOn, col); -} - bool SalInstanceTreeView::get_text_emphasis(const weld::TreeIter& rIter, int col) const { const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
