include/vcl/toolkit/treelistbox.hxx  |    1 +
 vcl/inc/jsdialog/jsdialogbuilder.hxx |    5 +++++
 vcl/jsdialog/jsdialogbuilder.cxx     |   20 ++++++++++++++++++++
 vcl/source/treelist/svtabbx.cxx      |    1 +
 vcl/source/treelist/treelistbox.cxx  |   12 ++++++++++++
 5 files changed, 39 insertions(+)

New commits:
commit 2815d11bb608a933e14b799cc802825423426d28
Author:     Jaume Pujantell <[email protected]>
AuthorDate: Tue Jul 30 16:45:31 2024 +0200
Commit:     Miklos Vajna <[email protected]>
CommitDate: Tue Aug 6 08:25:51 2024 +0200

    cool#9704 calc jsdialog autofilter send disabled entry information
    
    Added the code necessary to disable already filtered entries on
    jsdialog autofilter, like it is done on desktop UI.
    
    Change-Id: I095b7fe0054efcaff2717d05a2ab7bd1d8248b29
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171246
    Reviewed-by: Miklos Vajna <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/include/vcl/toolkit/treelistbox.hxx 
b/include/vcl/toolkit/treelistbox.hxx
index ecbd489fd853..007c119c5257 100644
--- a/include/vcl/toolkit/treelistbox.hxx
+++ b/include/vcl/toolkit/treelistbox.hxx
@@ -561,6 +561,7 @@ public:
 
     void            SetCheckButtonState( SvTreeListEntry*, SvButtonState );
     SvButtonState   GetCheckButtonState( SvTreeListEntry* ) const;
+    bool GetCheckButtonEnabled(SvTreeListEntry* pEntry) const;
 
     void            SetEntryText(SvTreeListEntry*, const OUString& );
     void            SetExpandedEntryBmp( SvTreeListEntry* _pEntry, const 
Image& _rImage );
diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 58f8d431d258..0008f9f5fda9 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -771,6 +771,11 @@ public:
     virtual void set_toggle(int pos, TriState eState, int col = -1) override;
     virtual void set_toggle(const weld::TreeIter& rIter, TriState bOn, int col 
= -1) override;
 
+    using SalInstanceTreeView::set_sensitive;
+    /// pos is used differently here, it defines how many steps of iterator we 
need to perform to take entry
+    virtual void set_sensitive(int pos, bool bSensitive, int col = -1) 
override;
+    virtual void set_sensitive(const weld::TreeIter& rIter, bool bSensitive, 
int col = -1) override;
+
     using SalInstanceTreeView::select;
     /// pos is used differently here, it defines how many steps of iterator we 
need to perform to take entry
     virtual void select(int pos) override;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 7a38aff47873..d68a52b7e441 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -2060,6 +2060,26 @@ void JSTreeView::set_toggle(const weld::TreeIter& rIter, 
TriState bOn, int col)
     sendUpdate();
 }
 
+void JSTreeView::set_sensitive(int pos, bool bSensitive, int col)
+{
+    SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, 0);
+
+    while (pEntry && pos--)
+        pEntry = m_xTreeView->Next(pEntry);
+
+    if (pEntry)
+    {
+        SalInstanceTreeView::set_sensitive(pEntry, bSensitive, col);
+        sendUpdate();
+    }
+}
+
+void JSTreeView::set_sensitive(const weld::TreeIter& rIter, bool bSensitive, 
int col)
+{
+    SalInstanceTreeView::set_sensitive(rIter, bSensitive, col);
+    sendUpdate();
+}
+
 void JSTreeView::select(int pos)
 {
     assert(m_xTreeView->IsUpdateMode() && "don't select when frozen");
diff --git a/vcl/source/treelist/svtabbx.cxx b/vcl/source/treelist/svtabbx.cxx
index feb4f0b2011f..658584650e15 100644
--- a/vcl/source/treelist/svtabbx.cxx
+++ b/vcl/source/treelist/svtabbx.cxx
@@ -161,6 +161,7 @@ static void lcl_DumpEntryAndSiblings(tools::JsonWriter& 
rJsonWriter,
                 rJsonWriter.put("state", false);
             else if (eCheckState == SvButtonState::Checked)
                 rJsonWriter.put("state", true);
+            rJsonWriter.put("enabled", 
pTabListBox->GetCheckButtonEnabled(pEntry));
         }
 
         if (pTabListBox->IsSelected(pEntry))
diff --git a/vcl/source/treelist/treelistbox.cxx 
b/vcl/source/treelist/treelistbox.cxx
index 6dd915e23996..67292505671f 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -1707,6 +1707,18 @@ SvButtonState SvTreeListBox::GetCheckButtonState( 
SvTreeListEntry* pEntry ) cons
     return eState;
 }
 
+bool SvTreeListBox::GetCheckButtonEnabled(SvTreeListEntry* pEntry) const
+{
+    if (pEntry && (nTreeFlags & SvTreeFlags::CHKBTN))
+    {
+        SvLBoxButton* pItem
+            = 
static_cast<SvLBoxButton*>(pEntry->GetFirstItem(SvLBoxItemType::Button));
+        if (pItem)
+            return pItem->isEnable();
+    }
+    return false;
+}
+
 void SvTreeListBox::CheckButtonHdl()
 {
     if ( pCheckButtonData )

Reply via email to