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);

Reply via email to