[Libreoffice-commits] core.git: Branch 'libreoffice-6-2' - basctl/source cui/inc cui/source cui/uiconfig include/vcl vcl/source vcl/unx

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Dec 4 08:51:45 UTC 2018


 basctl/source/basicide/bastype2.cxx |    2 
 cui/inc/strings.hrc                 |    7 
 cui/source/customize/cfgutil.cxx    |    8 
 cui/source/inc/autocdlg.hxx         |   17 -
 cui/source/inc/cfgutil.hxx          |    2 
 cui/source/tabpages/autocdlg.cxx    |  309 ++++++++++++++++--------------------
 cui/uiconfig/ui/applyautofmtpage.ui |  117 ++++++++-----
 include/vcl/headbar.hxx             |    2 
 include/vcl/weld.hxx                |   23 +-
 vcl/source/app/salvtables.cxx       |   88 +++++++++-
 vcl/source/window/builder.cxx       |   22 ++
 vcl/unx/gtk3/gtk3gtkinst.cxx        |   59 ++++++
 12 files changed, 399 insertions(+), 257 deletions(-)

New commits:
commit 57d706b1d1f6d9c7797c816a30879c237a443c51
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Dec 3 12:35:24 2018 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Dec 4 09:51:20 2018 +0100

    weld OfaSwAutoFmtOptionsPage
    
    Change-Id: Ia88fe2562dd87b33fdec0081a3adf27c8d10f407
    Reviewed-on: https://gerrit.libreoffice.org/64474
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/basctl/source/basicide/bastype2.cxx b/basctl/source/basicide/bastype2.cxx
index ee2caf7ad48a..bd1c88785cab 100644
--- a/basctl/source/basicide/bastype2.cxx
+++ b/basctl/source/basicide/bastype2.cxx
@@ -1377,7 +1377,7 @@ void SbTreeListBox::AddEntry(
     std::unique_ptr<Entry>&& rUserData)
 {
     OUString sId(OUString::number(reinterpret_cast<sal_uInt64>(rUserData.release())));
-    m_xControl->insert(pParent, -1, rText, &sId, nullptr, nullptr, &rImage, bChildrenOnDemand);
+    m_xControl->insert(pParent, -1, &rText, &sId, nullptr, nullptr, &rImage, bChildrenOnDemand);
 }
 
 void SbTreeListBox::SetEntryBitmaps(weld::TreeIter& rIter, const OUString& rImage)
diff --git a/cui/inc/strings.hrc b/cui/inc/strings.hrc
index 743c974caef4..c9da7de87511 100644
--- a/cui/inc/strings.hrc
+++ b/cui/inc/strings.hrc
@@ -352,9 +352,10 @@
 #define RID_SVXSTR_ORDINAL                          NC_("RID_SVXSTR_ORDINAL", "Format ordinal numbers suffixes (1st -> 1^st)")
 #define RID_SVXSTR_DEL_EMPTY_PARA                   NC_("RID_SVXSTR_DEL_EMPTY_PARA", "Remove blank paragraphs")
 #define RID_SVXSTR_USER_STYLE                       NC_("RID_SVXSTR_USER_STYLE", "Replace Custom Styles")
-#define RID_SVXSTR_BULLET                           NC_("RID_SVXSTR_BULLET", "Replace bullets with: ")
-#define RID_SVXSTR_RIGHT_MARGIN                     NC_("RID_SVXSTR_RIGHT_MARGIN", "Combine single line paragraphs if length greater than")
-#define RID_SVXSTR_NUM                              NC_("RID_SVXSTR_NUM", "Bulleted and numbered lists. Bullet symbol: ")
+#define RID_SVXSTR_BULLET                           NC_("RID_SVXSTR_BULLET", "Replace bullets with: %1")
+// To translators: %1 will be replaced with a percentage, e.g. "10%"
+#define RID_SVXSTR_RIGHT_MARGIN                     NC_("RID_SVXSTR_RIGHT_MARGIN", "Combine single line paragraphs if length greater than %1")
+#define RID_SVXSTR_NUM                              NC_("RID_SVXSTR_NUM", "Bulleted and numbered lists. Bullet symbol: %1")
 #define RID_SVXSTR_BORDER                           NC_("RID_SVXSTR_BORDER", "Apply border")
 #define RID_SVXSTR_CREATE_TABLE                     NC_("RID_SVXSTR_CREATE_TABLE", "Create table")
 #define RID_SVXSTR_REPLACE_TEMPLATES                NC_("RID_SVXSTR_REPLACE_TEMPLATES", "Apply Styles")
diff --git a/cui/source/customize/cfgutil.cxx b/cui/source/customize/cfgutil.cxx
index 9505873dc68c..ff44d903ecb5 100644
--- a/cui/source/customize/cfgutil.cxx
+++ b/cui/source/customize/cfgutil.cxx
@@ -1454,7 +1454,7 @@ void CuiConfigGroupListBox::FillScriptList(const css::uno::Reference< css::scrip
                             0, static_cast<void *>( theChild.get())));
 
                     OUString sId(OUString::number(reinterpret_cast<sal_Int64>(aArr.back().get())));
-                    m_xTreeView->insert(pParentEntry, -1, uiName, &sId, nullptr, nullptr, &aImage, bChildOnDemand);
+                    m_xTreeView->insert(pParentEntry, -1, &uiName, &sId, nullptr, nullptr, &aImage, bChildOnDemand);
                 }
             }
         }
@@ -1524,7 +1524,7 @@ void CuiConfigGroupListBox::Init(const css::uno::Reference< css::uno::XComponent
                     static_cast<void *>(rootNode.get())));
             OUString aTitle(xImp->m_sDlgMacros);
             OUString sId(OUString::number(reinterpret_cast<sal_Int64>(aArr.back().get())));
-            m_xTreeView->insert(nullptr, -1, aTitle, &sId, nullptr, nullptr, nullptr, true);
+            m_xTreeView->insert(nullptr, -1, &aTitle, &sId, nullptr, nullptr, nullptr, true);
         }
         else
         {
@@ -1540,7 +1540,7 @@ void CuiConfigGroupListBox::Init(const css::uno::Reference< css::uno::XComponent
         aArr.push_back( o3tl::make_unique<SfxGroupInfo_Impl>( SfxCfgKind::GROUP_STYLES, 0, nullptr ) ); // TODO last parameter should contain user data
         OUString sStyle(xImp->m_aStrGroupStyles);
         OUString sId(OUString::number(reinterpret_cast<sal_Int64>(aArr.back().get())));
-        m_xTreeView->insert(nullptr, -1, sStyle, &sId, nullptr, nullptr, nullptr, true);
+        m_xTreeView->insert(nullptr, -1, &sStyle, &sId, nullptr, nullptr, nullptr, true);
     }
 
     m_xTreeView->thaw();
@@ -1832,7 +1832,7 @@ IMPL_LINK(CuiConfigGroupListBox, ExpandingHdl, weld::TreeIter&, rIter, bool)
                     SfxStyleInfo_Impl* pFamily = new SfxStyleInfo_Impl(lStyleFamily);
                     aArr.push_back( o3tl::make_unique<SfxGroupInfo_Impl>( SfxCfgKind::GROUP_STYLES, 0, pFamily ));
                     OUString sId(OUString::number(reinterpret_cast<sal_Int64>(aArr.back().get())));
-                    m_xTreeView->insert(&rIter, -1, pFamily->sLabel, &sId, nullptr, nullptr, nullptr, false);
+                    m_xTreeView->insert(&rIter, -1, &pFamily->sLabel, &sId, nullptr, nullptr, nullptr, false);
                 }
             }
             break;
diff --git a/cui/source/inc/autocdlg.hxx b/cui/source/inc/autocdlg.hxx
index 81044a633eab..6dc3a39548f8 100644
--- a/cui/source/inc/autocdlg.hxx
+++ b/cui/source/inc/autocdlg.hxx
@@ -127,9 +127,6 @@ class OfaSwAutoFmtOptionsPage : public SfxTabPage
     friend class VclPtr<OfaSwAutoFmtOptionsPage>;
     using TabPage::ActivatePage;
 
-    VclPtr<OfaACorrCheckListBox>   m_pCheckLB;
-    VclPtr<PushButton>     m_pEditPB;
-
     OUString        sDeleteEmptyPara;
     OUString        sUseReplaceTbl;
     OUString        sCapitalStartWord;
@@ -157,16 +154,16 @@ class OfaSwAutoFmtOptionsPage : public SfxTabPage
     vcl::Font        aByInputBulletFont;
     sal_uInt16       nPercent;
 
-    std::unique_ptr<SvLBoxButtonData> m_xCheckButtonData;
+    std::unique_ptr<weld::TreeView> m_xCheckLB;
+    std::unique_ptr<weld::Button> m_xEditPB;
 
-    DECL_LINK(SelectHdl, SvTreeListBox*, void);
-    DECL_LINK(EditHdl, Button*, void);
-    DECL_LINK(DoubleClickEditHdl, SvTreeListBox*, bool);
-    SvTreeListEntry* CreateEntry(OUString& rTxt, sal_uInt16 nCol);
+    DECL_LINK(SelectHdl, weld::TreeView&, void);
+    DECL_LINK(EditHdl, weld::Button&, void);
+    DECL_LINK(DoubleClickEditHdl, weld::TreeView&, void);
 
+    void CreateEntry(const OUString& rTxt, sal_uInt16 nCol);
 
-    OfaSwAutoFmtOptionsPage( vcl::Window* pParent,
-                        const SfxItemSet& rSet );
+    OfaSwAutoFmtOptionsPage(TabPageParent pParent, const SfxItemSet& rSet);
     virtual ~OfaSwAutoFmtOptionsPage() override;
     virtual void dispose() override;
 
diff --git a/cui/source/inc/cfgutil.hxx b/cui/source/inc/cfgutil.hxx
index 1fb47405fd8f..7488dac3e8c6 100644
--- a/cui/source/inc/cfgutil.hxx
+++ b/cui/source/inc/cfgutil.hxx
@@ -141,7 +141,7 @@ public:
     void append(const OUString& rId, const OUString& rStr) { m_xTreeView->append(rId, rStr); }
     void append(const OUString& rId, const OUString& rStr, const OUString& rImage)
     {
-        m_xTreeView->insert(nullptr, -1, rStr, &rId, nullptr, nullptr, &rImage, false);
+        m_xTreeView->insert(nullptr, -1, &rStr, &rId, nullptr, nullptr, &rImage, false);
     }
     int n_children() const { return m_xTreeView->n_children(); }
     void select(int pos) { m_xTreeView->select(pos); }
diff --git a/cui/source/tabpages/autocdlg.cxx b/cui/source/tabpages/autocdlg.cxx
index 9adb259e66e1..27f0d3945c14 100644
--- a/cui/source/tabpages/autocdlg.cxx
+++ b/cui/source/tabpages/autocdlg.cxx
@@ -405,9 +405,9 @@ enum OfaAutoFmtOptions
     MERGE_SINGLE_LINE_PARA
 };
 
-OfaSwAutoFmtOptionsPage::OfaSwAutoFmtOptionsPage( vcl::Window* pParent,
-                                const SfxItemSet& rSet )
-    : SfxTabPage(pParent, "ApplyAutoFmtPage", "cui/ui/applyautofmtpage.ui", &rSet)
+OfaSwAutoFmtOptionsPage::OfaSwAutoFmtOptionsPage(TabPageParent pParent,
+                                                 const SfxItemSet& rSet )
+    : SfxTabPage(pParent, "cui/ui/applyautofmtpage.ui", "ApplyAutoFmtPage", &rSet)
     , sDeleteEmptyPara(CuiResId(RID_SVXSTR_DEL_EMPTY_PARA))
     , sUseReplaceTbl(CuiResId(RID_SVXSTR_USE_REPLACE))
     , sCapitalStartWord(CuiResId(RID_SVXSTR_CPTL_STT_WORD))
@@ -427,59 +427,30 @@ OfaSwAutoFmtOptionsPage::OfaSwAutoFmtOptionsPage( vcl::Window* pParent,
     , sDelSpaceAtSttEnd(CuiResId(RID_SVXSTR_DEL_SPACES_AT_STT_END))
     , sDelSpaceBetweenLines(CuiResId(RID_SVXSTR_DEL_SPACES_BETWEEN_LINES))
     , nPercent(50)
+    , m_xCheckLB(m_xBuilder->weld_tree_view("list"))
+    , m_xEditPB(m_xBuilder->weld_button("edit"))
 {
-    get(m_pEditPB, "edit");
+    m_xCheckLB->connect_changed(LINK(this, OfaSwAutoFmtOptionsPage, SelectHdl));
+    m_xCheckLB->connect_row_activated(LINK(this, OfaSwAutoFmtOptionsPage, DoubleClickEditHdl));
 
-    SvSimpleTableContainer* pCheckLBContainer(get<SvSimpleTableContainer>("list"));
-    Size aControlSize(248 , 149);
-    aControlSize = LogicToPixel(aControlSize, MapMode(MapUnit::MapAppFont));
-    pCheckLBContainer->set_width_request(aControlSize.Width());
-    pCheckLBContainer->set_height_request(aControlSize.Height());
-    m_pCheckLB = VclPtr<OfaACorrCheckListBox>::Create(*pCheckLBContainer);
-
-    m_pCheckLB->SetStyle(m_pCheckLB->GetStyle()|WB_HSCROLL| WB_VSCROLL);
-
-    m_pCheckLB->SetSelectHdl(LINK(this, OfaSwAutoFmtOptionsPage, SelectHdl));
-    m_pCheckLB->SetDoubleClickHdl(LINK(this, OfaSwAutoFmtOptionsPage, DoubleClickEditHdl));
-
-    static long const aStaticTabs[]=
-    {
-        0, 20, 40
-    };
-
-    m_pCheckLB->SvSimpleTable::SetTabs(SAL_N_ELEMENTS(aStaticTabs), aStaticTabs);
-    OUString sHeader = get<vcl::Window>("m")->GetText() + "\t"
-                     + get<vcl::Window>("t")->GetText() + "\t";
-    m_pCheckLB->InsertHeaderEntry(sHeader, HEADERBAR_APPEND,
-                        HeaderBarItemBits::CENTER | HeaderBarItemBits::VCENTER | HeaderBarItemBits::FIXEDPOS | HeaderBarItemBits::FIXED);
+    std::vector<int> aWidths;
+    aWidths.push_back(m_xCheckLB->get_pixel_size(m_xCheckLB->get_column_title(0)).Width() * 2);
+    aWidths.push_back(m_xCheckLB->get_pixel_size(m_xCheckLB->get_column_title(1)).Width() * 2);
+    m_xCheckLB->set_column_fixed_widths(aWidths);
 
-    m_pEditPB->SetClickHdl(LINK(this, OfaSwAutoFmtOptionsPage, EditHdl));
+    m_xEditPB->connect_clicked(LINK(this, OfaSwAutoFmtOptionsPage, EditHdl));
 }
 
-SvTreeListEntry* OfaSwAutoFmtOptionsPage::CreateEntry(OUString& rTxt, sal_uInt16 nCol)
+void OfaSwAutoFmtOptionsPage::CreateEntry(const OUString& rTxt, sal_uInt16 nCol)
 {
-    SvTreeListEntry* pEntry = new SvTreeListEntry;
-
-    if (!m_xCheckButtonData)
-    {
-        m_xCheckButtonData.reset(new SvLBoxButtonData(m_pCheckLB));
-        m_pCheckLB->SetCheckButtonData(m_xCheckButtonData.get());
-    }
-
-    pEntry->AddItem(o3tl::make_unique<SvLBoxContextBmp>(Image(), Image(), false));
-
-    if (nCol == CBCOL_SECOND)
-        pEntry->AddItem(o3tl::make_unique<SvLBoxString>(""));
-    else
-        pEntry->AddItem(o3tl::make_unique<SvLBoxButton>(SvLBoxButtonKind::EnabledCheckbox, m_xCheckButtonData.get()));
-
-    if (nCol == CBCOL_FIRST)
-        pEntry->AddItem(o3tl::make_unique<SvLBoxString>(""));
-    else
-        pEntry->AddItem(o3tl::make_unique<SvLBoxButton>(SvLBoxButtonKind::EnabledCheckbox, m_xCheckButtonData.get()));
-    pEntry->AddItem(o3tl::make_unique<OfaImpBrwString>(rTxt));
-
-    return pEntry;
+    m_xCheckLB->insert(nullptr, -1, nullptr, nullptr, nullptr,
+                       nullptr, nullptr, false);
+    const int nRow = m_xCheckLB->n_children() - 1;
+    if (nCol == CBCOL_FIRST || nCol == CBCOL_BOTH)
+        m_xCheckLB->set_toggle(nRow, false, CBCOL_FIRST);
+    if (nCol == CBCOL_SECOND || nCol == CBCOL_BOTH)
+        m_xCheckLB->set_toggle(nRow, false, CBCOL_SECOND);
+    m_xCheckLB->set_text(nRow, rTxt, 2);
 }
 
 OfaSwAutoFmtOptionsPage::~OfaSwAutoFmtOptionsPage()
@@ -487,24 +458,10 @@ OfaSwAutoFmtOptionsPage::~OfaSwAutoFmtOptionsPage()
     disposeOnce();
 }
 
-void OfaSwAutoFmtOptionsPage::dispose()
-{
-    if (m_pCheckLB)
-    {
-        delete static_cast<ImpUserData*>(m_pCheckLB->GetUserData( REPLACE_BULLETS ));
-        delete static_cast<ImpUserData*>(m_pCheckLB->GetUserData( APPLY_NUMBERING ));
-        delete static_cast<ImpUserData*>(m_pCheckLB->GetUserData( MERGE_SINGLE_LINE_PARA ));
-        m_xCheckButtonData.reset();
-    }
-    m_pCheckLB.disposeAndClear();
-    m_pEditPB.clear();
-    SfxTabPage::dispose();
-}
-
-VclPtr<SfxTabPage> OfaSwAutoFmtOptionsPage::Create( TabPageParent pParent,
-                                                    const SfxItemSet* rAttrSet)
+VclPtr<SfxTabPage> OfaSwAutoFmtOptionsPage::Create(TabPageParent pParent,
+                                                   const SfxItemSet* rAttrSet)
 {
-    return VclPtr<OfaSwAutoFmtOptionsPage>::Create(pParent.pParent, *rAttrSet);
+    return VclPtr<OfaSwAutoFmtOptionsPage>::Create(pParent, *rAttrSet);
 }
 
 bool OfaSwAutoFmtOptionsPage::FillItemSet( SfxItemSet*  )
@@ -514,51 +471,51 @@ bool OfaSwAutoFmtOptionsPage::FillItemSet( SfxItemSet*  )
     SvxSwAutoFormatFlags *pOpt = &pAutoCorrect->GetSwFlags();
     ACFlags nFlags = pAutoCorrect->GetFlags();
 
-    bool bCheck = m_pCheckLB->IsChecked(USE_REPLACE_TABLE);
+    bool bCheck = m_xCheckLB->get_toggle(USE_REPLACE_TABLE);
     bModified |= pOpt->bAutoCorrect != bCheck;
     pOpt->bAutoCorrect = bCheck;
     pAutoCorrect->SetAutoCorrFlag(ACFlags::Autocorrect,
-                        m_pCheckLB->IsChecked(USE_REPLACE_TABLE, CBCOL_SECOND));
+                        m_xCheckLB->get_toggle(USE_REPLACE_TABLE, CBCOL_SECOND));
 
-    bCheck = m_pCheckLB->IsChecked(CORR_UPPER);
+    bCheck = m_xCheckLB->get_toggle(CORR_UPPER);
     bModified |= pOpt->bCapitalStartWord != bCheck;
     pOpt->bCapitalStartWord = bCheck;
     pAutoCorrect->SetAutoCorrFlag(ACFlags::CapitalStartWord,
-                        m_pCheckLB->IsChecked(CORR_UPPER, CBCOL_SECOND));
+                        m_xCheckLB->get_toggle(CORR_UPPER, CBCOL_SECOND));
 
-    bCheck = m_pCheckLB->IsChecked(BEGIN_UPPER);
+    bCheck = m_xCheckLB->get_toggle(BEGIN_UPPER);
     bModified |= pOpt->bCapitalStartSentence != bCheck;
     pOpt->bCapitalStartSentence = bCheck;
     pAutoCorrect->SetAutoCorrFlag(ACFlags::CapitalStartSentence,
-                        m_pCheckLB->IsChecked(BEGIN_UPPER, CBCOL_SECOND));
+                        m_xCheckLB->get_toggle(BEGIN_UPPER, CBCOL_SECOND));
 
-    bCheck = m_pCheckLB->IsChecked(BOLD_UNDERLINE);
+    bCheck = m_xCheckLB->get_toggle(BOLD_UNDERLINE);
     bModified |= pOpt->bChgWeightUnderl != bCheck;
     pOpt->bChgWeightUnderl = bCheck;
     pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgWeightUnderl,
-                        m_pCheckLB->IsChecked(BOLD_UNDERLINE, CBCOL_SECOND));
+                        m_xCheckLB->get_toggle(BOLD_UNDERLINE, CBCOL_SECOND));
 
     pAutoCorrect->SetAutoCorrFlag(ACFlags::IgnoreDoubleSpace,
-                        m_pCheckLB->IsChecked(IGNORE_DBLSPACE, CBCOL_SECOND));
+                        m_xCheckLB->get_toggle(IGNORE_DBLSPACE, CBCOL_SECOND));
 
     pAutoCorrect->SetAutoCorrFlag(ACFlags::CorrectCapsLock,
-                        m_pCheckLB->IsChecked(CORRECT_CAPS_LOCK, CBCOL_SECOND));
+                        m_xCheckLB->get_toggle(CORRECT_CAPS_LOCK, CBCOL_SECOND));
 
-    bCheck = m_pCheckLB->IsChecked(DETECT_URL);
+    bCheck = m_xCheckLB->get_toggle(DETECT_URL);
     bModified |= pOpt->bSetINetAttr != bCheck;
     pOpt->bSetINetAttr = bCheck;
     pAutoCorrect->SetAutoCorrFlag(ACFlags::SetINetAttr,
-                        m_pCheckLB->IsChecked(DETECT_URL, CBCOL_SECOND));
+                        m_xCheckLB->get_toggle(DETECT_URL, CBCOL_SECOND));
 
-    bCheck = m_pCheckLB->IsChecked(DEL_EMPTY_NODE);
+    bCheck = m_xCheckLB->get_toggle(DEL_EMPTY_NODE);
     bModified |= pOpt->bDelEmptyNode != bCheck;
     pOpt->bDelEmptyNode = bCheck;
 
-    bCheck = m_pCheckLB->IsChecked(REPLACE_USER_COLL);
+    bCheck = m_xCheckLB->get_toggle(REPLACE_USER_COLL);
     bModified |= pOpt->bChgUserColl != bCheck;
     pOpt->bChgUserColl = bCheck;
 
-    bCheck = m_pCheckLB->IsChecked(REPLACE_BULLETS);
+    bCheck = m_xCheckLB->get_toggle(REPLACE_BULLETS);
     bModified |= pOpt->bChgEnumNum != bCheck;
     pOpt->bChgEnumNum = bCheck;
     bModified |= aBulletFont != pOpt->aBulletFont;
@@ -571,45 +528,45 @@ bool OfaSwAutoFmtOptionsPage::FillItemSet( SfxItemSet*  )
     pOpt->aByInputBulletFont = aByInputBulletFont;
     pOpt->cByInputBullet = sByInputBulletChar[0];
 
-    bCheck = m_pCheckLB->IsChecked(MERGE_SINGLE_LINE_PARA);
+    bCheck = m_xCheckLB->get_toggle(MERGE_SINGLE_LINE_PARA);
     bModified |= pOpt->bRightMargin != bCheck;
     pOpt->bRightMargin = bCheck;
     bModified |= nPercent != pOpt->nRightMargin;
     pOpt->nRightMargin = static_cast<sal_uInt8>(nPercent);
 
-    bCheck = m_pCheckLB->IsChecked(APPLY_NUMBERING, CBCOL_SECOND);
+    bCheck = m_xCheckLB->get_toggle(APPLY_NUMBERING, CBCOL_SECOND);
     bModified |= pOpt->bSetNumRule != bCheck;
     pOpt->bSetNumRule = bCheck;
 
-    bCheck = m_pCheckLB->IsChecked(INSERT_BORDER, CBCOL_SECOND);
+    bCheck = m_xCheckLB->get_toggle(INSERT_BORDER, CBCOL_SECOND);
     bModified |= pOpt->bSetBorder != bCheck;
     pOpt->bSetBorder = bCheck;
 
-    bCheck = m_pCheckLB->IsChecked(CREATE_TABLE, CBCOL_SECOND);
+    bCheck = m_xCheckLB->get_toggle(CREATE_TABLE, CBCOL_SECOND);
     bModified |= pOpt->bCreateTable != bCheck;
     pOpt->bCreateTable = bCheck;
 
-    bCheck = m_pCheckLB->IsChecked(REPLACE_STYLES, CBCOL_SECOND);
+    bCheck = m_xCheckLB->get_toggle(REPLACE_STYLES, CBCOL_SECOND);
     bModified |= pOpt->bReplaceStyles != bCheck;
     pOpt->bReplaceStyles = bCheck;
 
-    bCheck = m_pCheckLB->IsChecked(REPLACE_DASHES);
+    bCheck = m_xCheckLB->get_toggle(REPLACE_DASHES);
     bModified |= pOpt->bChgToEnEmDash != bCheck;
     pOpt->bChgToEnEmDash = bCheck;
     pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgToEnEmDash,
-                        m_pCheckLB->IsChecked(REPLACE_DASHES, CBCOL_SECOND));
+                        m_xCheckLB->get_toggle(REPLACE_DASHES, CBCOL_SECOND));
 
-    bCheck = m_pCheckLB->IsChecked(DEL_SPACES_AT_STT_END);
+    bCheck = m_xCheckLB->get_toggle(DEL_SPACES_AT_STT_END);
     bModified |= pOpt->bAFormatDelSpacesAtSttEnd != bCheck;
     pOpt->bAFormatDelSpacesAtSttEnd = bCheck;
-    bCheck = m_pCheckLB->IsChecked(DEL_SPACES_AT_STT_END, CBCOL_SECOND);
+    bCheck = m_xCheckLB->get_toggle(DEL_SPACES_AT_STT_END, CBCOL_SECOND);
     bModified |= pOpt->bAFormatByInpDelSpacesAtSttEnd != bCheck;
     pOpt->bAFormatByInpDelSpacesAtSttEnd = bCheck;
 
-    bCheck = m_pCheckLB->IsChecked(DEL_SPACES_BETWEEN_LINES);
+    bCheck = m_xCheckLB->get_toggle(DEL_SPACES_BETWEEN_LINES);
     bModified |= pOpt->bAFormatDelSpacesBetweenLines != bCheck;
     pOpt->bAFormatDelSpacesBetweenLines = bCheck;
-    bCheck = m_pCheckLB->IsChecked(DEL_SPACES_BETWEEN_LINES, CBCOL_SECOND);
+    bCheck = m_xCheckLB->get_toggle(DEL_SPACES_BETWEEN_LINES, CBCOL_SECOND);
     bModified |= pOpt->bAFormatByInpDelSpacesBetweenLines != bCheck;
     pOpt->bAFormatByInpDelSpacesBetweenLines = bCheck;
 
@@ -634,98 +591,99 @@ void OfaSwAutoFmtOptionsPage::Reset( const SfxItemSet* )
     SvxSwAutoFormatFlags *pOpt = &pAutoCorrect->GetSwFlags();
     const ACFlags nFlags = pAutoCorrect->GetFlags();
 
-    m_pCheckLB->SetUpdateMode(false);
-    m_pCheckLB->Clear();
+    aBulletFont = pOpt->aBulletFont;
+    sBulletChar = OUString(pOpt->cBullet);
+
+    aByInputBulletFont = pOpt->aByInputBulletFont;
+    sByInputBulletChar = OUString( pOpt->cByInputBullet );
+
+    nPercent = pOpt->nRightMargin;
+    sMargin = unicode::formatPercent(nPercent, Application::GetSettings().GetUILanguageTag());
+
+    m_xCheckLB->freeze();
+    m_xCheckLB->clear();
 
     // The following entries have to be inserted in the same order
     // as in the OfaAutoFmtOptions-enum!
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sUseReplaceTbl,     CBCOL_BOTH  ));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sCapitalStartWord,  CBCOL_BOTH  ));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sCapitalStartSentence, CBCOL_BOTH  ));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sBoldUnder,         CBCOL_BOTH  ));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sDetectURL,         CBCOL_BOTH  ));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sDash,              CBCOL_BOTH  ));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sDelSpaceAtSttEnd,  CBCOL_BOTH  ));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sDelSpaceBetweenLines, CBCOL_BOTH  ));
-
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sNoDblSpaces,       CBCOL_SECOND));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sCorrectCapsLock,   CBCOL_SECOND));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sNum,               CBCOL_SECOND));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sBorder,            CBCOL_SECOND));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sTable,             CBCOL_SECOND));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sReplaceTemplates,  CBCOL_SECOND));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sDeleteEmptyPara,   CBCOL_FIRST ));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sUserStyle,         CBCOL_FIRST ));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sBullet,            CBCOL_FIRST ));
-    m_pCheckLB->GetModel()->Insert(CreateEntry(sRightMargin,       CBCOL_FIRST ));
-
-    m_pCheckLB->CheckEntryPos( USE_REPLACE_TABLE,  CBCOL_FIRST,    pOpt->bAutoCorrect );
-    m_pCheckLB->CheckEntryPos( USE_REPLACE_TABLE,  CBCOL_SECOND,   bool(nFlags & ACFlags::Autocorrect));
-    m_pCheckLB->CheckEntryPos( CORR_UPPER,         CBCOL_FIRST,    pOpt->bCapitalStartWord );
-    m_pCheckLB->CheckEntryPos( CORR_UPPER,         CBCOL_SECOND,   bool(nFlags & ACFlags::CapitalStartWord) );
-    m_pCheckLB->CheckEntryPos( BEGIN_UPPER,        CBCOL_FIRST,    pOpt->bCapitalStartSentence );
-    m_pCheckLB->CheckEntryPos( BEGIN_UPPER,        CBCOL_SECOND,   bool(nFlags & ACFlags::CapitalStartSentence) );
-    m_pCheckLB->CheckEntryPos( BOLD_UNDERLINE,     CBCOL_FIRST,    pOpt->bChgWeightUnderl );
-    m_pCheckLB->CheckEntryPos( BOLD_UNDERLINE,     CBCOL_SECOND,   bool(nFlags & ACFlags::ChgWeightUnderl) );
-    m_pCheckLB->CheckEntryPos( IGNORE_DBLSPACE,    CBCOL_SECOND,   bool(nFlags & ACFlags::IgnoreDoubleSpace) );
-    m_pCheckLB->CheckEntryPos( CORRECT_CAPS_LOCK,  CBCOL_SECOND,   bool(nFlags & ACFlags::CorrectCapsLock) );
-    m_pCheckLB->CheckEntryPos( DETECT_URL,         CBCOL_FIRST,    pOpt->bSetINetAttr );
-    m_pCheckLB->CheckEntryPos( DETECT_URL,         CBCOL_SECOND,   bool(nFlags & ACFlags::SetINetAttr) );
-    m_pCheckLB->CheckEntryPos( REPLACE_DASHES,     CBCOL_FIRST,    pOpt->bChgToEnEmDash );
-    m_pCheckLB->CheckEntryPos( REPLACE_DASHES,     CBCOL_SECOND,   bool(nFlags & ACFlags::ChgToEnEmDash) );
-    m_pCheckLB->CheckEntryPos( DEL_SPACES_AT_STT_END,      CBCOL_FIRST,    pOpt->bAFormatDelSpacesAtSttEnd );
-    m_pCheckLB->CheckEntryPos( DEL_SPACES_AT_STT_END,      CBCOL_SECOND,   pOpt->bAFormatByInpDelSpacesAtSttEnd );
-    m_pCheckLB->CheckEntryPos( DEL_SPACES_BETWEEN_LINES,   CBCOL_FIRST,    pOpt->bAFormatDelSpacesBetweenLines );
-    m_pCheckLB->CheckEntryPos( DEL_SPACES_BETWEEN_LINES,   CBCOL_SECOND,   pOpt->bAFormatByInpDelSpacesBetweenLines );
-    m_pCheckLB->CheckEntryPos( DEL_EMPTY_NODE,     CBCOL_FIRST,    pOpt->bDelEmptyNode );
-    m_pCheckLB->CheckEntryPos( REPLACE_USER_COLL,  CBCOL_FIRST,    pOpt->bChgUserColl );
-    m_pCheckLB->CheckEntryPos( REPLACE_BULLETS,    CBCOL_FIRST,    pOpt->bChgEnumNum );
+    CreateEntry(sUseReplaceTbl,     CBCOL_BOTH  );
+    CreateEntry(sCapitalStartWord,  CBCOL_BOTH  );
+    CreateEntry(sCapitalStartSentence, CBCOL_BOTH  );
+    CreateEntry(sBoldUnder,         CBCOL_BOTH  );
+    CreateEntry(sDetectURL,         CBCOL_BOTH  );
+    CreateEntry(sDash,              CBCOL_BOTH  );
+    CreateEntry(sDelSpaceAtSttEnd,  CBCOL_BOTH  );
+    CreateEntry(sDelSpaceBetweenLines, CBCOL_BOTH  );
+
+    CreateEntry(sNoDblSpaces,       CBCOL_SECOND);
+    CreateEntry(sCorrectCapsLock,   CBCOL_SECOND);
+    CreateEntry(sNum.replaceFirst("%1", sBulletChar), CBCOL_SECOND);
+    CreateEntry(sBorder,            CBCOL_SECOND);
+    CreateEntry(sTable,             CBCOL_SECOND);
+    CreateEntry(sReplaceTemplates,  CBCOL_SECOND);
+    CreateEntry(sDeleteEmptyPara,   CBCOL_FIRST );
+    CreateEntry(sUserStyle,         CBCOL_FIRST );
+    CreateEntry(sBullet.replaceFirst("%1", sByInputBulletChar), CBCOL_FIRST);
+    CreateEntry(sRightMargin.replaceFirst("%1", sMargin), CBCOL_FIRST);
+
+    m_xCheckLB->set_toggle(USE_REPLACE_TABLE, pOpt->bAutoCorrect, CBCOL_FIRST);
+    m_xCheckLB->set_toggle(USE_REPLACE_TABLE, bool(nFlags & ACFlags::Autocorrect), CBCOL_SECOND);
+    m_xCheckLB->set_toggle(CORR_UPPER, pOpt->bCapitalStartWord, CBCOL_FIRST);
+    m_xCheckLB->set_toggle(CORR_UPPER, bool(nFlags & ACFlags::CapitalStartWord), CBCOL_SECOND);
+    m_xCheckLB->set_toggle(BEGIN_UPPER, pOpt->bCapitalStartSentence, CBCOL_FIRST);
+    m_xCheckLB->set_toggle(BEGIN_UPPER, bool(nFlags & ACFlags::CapitalStartSentence), CBCOL_SECOND);
+    m_xCheckLB->set_toggle(BOLD_UNDERLINE, pOpt->bChgWeightUnderl, CBCOL_FIRST);
+    m_xCheckLB->set_toggle(BOLD_UNDERLINE, bool(nFlags & ACFlags::ChgWeightUnderl), CBCOL_SECOND);
+    m_xCheckLB->set_toggle(DETECT_URL, pOpt->bSetINetAttr, CBCOL_FIRST);
+    m_xCheckLB->set_toggle(DETECT_URL, bool(nFlags & ACFlags::SetINetAttr), CBCOL_SECOND);
+    m_xCheckLB->set_toggle(REPLACE_DASHES, pOpt->bChgToEnEmDash, CBCOL_FIRST);
+    m_xCheckLB->set_toggle(REPLACE_DASHES, bool(nFlags & ACFlags::ChgToEnEmDash), CBCOL_SECOND);
+    m_xCheckLB->set_toggle(DEL_SPACES_AT_STT_END, pOpt->bAFormatDelSpacesAtSttEnd, CBCOL_FIRST);
+    m_xCheckLB->set_toggle(DEL_SPACES_AT_STT_END, pOpt->bAFormatByInpDelSpacesAtSttEnd, CBCOL_SECOND);
+    m_xCheckLB->set_toggle(DEL_SPACES_BETWEEN_LINES, pOpt->bAFormatDelSpacesBetweenLines, CBCOL_FIRST);
+    m_xCheckLB->set_toggle(DEL_SPACES_BETWEEN_LINES, pOpt->bAFormatByInpDelSpacesBetweenLines, CBCOL_SECOND);
+    m_xCheckLB->set_toggle(IGNORE_DBLSPACE, bool(nFlags & ACFlags::IgnoreDoubleSpace), CBCOL_SECOND);
+    m_xCheckLB->set_toggle(CORRECT_CAPS_LOCK, bool(nFlags & ACFlags::CorrectCapsLock), CBCOL_SECOND);
+    m_xCheckLB->set_toggle(APPLY_NUMBERING, pOpt->bSetNumRule, CBCOL_SECOND);
+    m_xCheckLB->set_toggle(INSERT_BORDER, pOpt->bSetBorder, CBCOL_SECOND);
+    m_xCheckLB->set_toggle(CREATE_TABLE, pOpt->bCreateTable, CBCOL_SECOND);
+    m_xCheckLB->set_toggle(REPLACE_STYLES, pOpt->bReplaceStyles, CBCOL_SECOND);
+    m_xCheckLB->set_toggle(DEL_EMPTY_NODE, pOpt->bDelEmptyNode, CBCOL_FIRST);
+    m_xCheckLB->set_toggle(REPLACE_USER_COLL, pOpt->bChgUserColl, CBCOL_FIRST);
+    m_xCheckLB->set_toggle(REPLACE_BULLETS, pOpt->bChgEnumNum, CBCOL_FIRST);
+    m_xCheckLB->set_toggle(MERGE_SINGLE_LINE_PARA, pOpt->bRightMargin, CBCOL_FIRST);
 
-    aBulletFont = pOpt->aBulletFont;
-    sBulletChar = OUString(pOpt->cBullet);
     ImpUserData* pUserData = new ImpUserData(&sBulletChar, &aBulletFont);
-    m_pCheckLB->SetUserData(  REPLACE_BULLETS, pUserData );
+    OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pUserData)));
+    m_xCheckLB->set_id(REPLACE_BULLETS, sId);
 
-    nPercent = pOpt->nRightMargin;
-    sMargin = " " +
-        unicode::formatPercent(nPercent, Application::GetSettings().GetUILanguageTag());
     pUserData = new ImpUserData(&sMargin, nullptr);
-    m_pCheckLB->SetUserData( MERGE_SINGLE_LINE_PARA, pUserData );
-
-    m_pCheckLB->CheckEntryPos( APPLY_NUMBERING,    CBCOL_SECOND,   pOpt->bSetNumRule );
+    sId = OUString::number(reinterpret_cast<sal_Int64>(pUserData));
+    m_xCheckLB->set_id(MERGE_SINGLE_LINE_PARA, sId);
 
-    aByInputBulletFont = pOpt->aByInputBulletFont;
-    sByInputBulletChar = OUString( pOpt->cByInputBullet );
     ImpUserData* pUserData2 = new ImpUserData(&sByInputBulletChar, &aByInputBulletFont);
-    m_pCheckLB->SetUserData( APPLY_NUMBERING , pUserData2 );
+    sId = OUString::number(reinterpret_cast<sal_Int64>(pUserData2));
+    m_xCheckLB->set_id(APPLY_NUMBERING, sId);
 
-    m_pCheckLB->CheckEntryPos( MERGE_SINGLE_LINE_PARA, CBCOL_FIRST, pOpt->bRightMargin );
-    m_pCheckLB->CheckEntryPos( INSERT_BORDER,      CBCOL_SECOND,   pOpt->bSetBorder );
-    m_pCheckLB->CheckEntryPos( CREATE_TABLE,       CBCOL_SECOND,   pOpt->bCreateTable );
-    m_pCheckLB->CheckEntryPos( REPLACE_STYLES,     CBCOL_SECOND,   pOpt->bReplaceStyles );
-
-    m_pCheckLB->SetUpdateMode(true);
+    m_xCheckLB->thaw();
 }
 
-IMPL_LINK(OfaSwAutoFmtOptionsPage, SelectHdl, SvTreeListBox*, pBox, void)
+IMPL_LINK(OfaSwAutoFmtOptionsPage, SelectHdl, weld::TreeView&, rBox, void)
 {
-    m_pEditPB->Enable(nullptr != pBox->FirstSelected()->GetUserData());
+    m_xEditPB->set_sensitive(rBox.get_selected_id().toInt64() != 0);
 }
 
-IMPL_LINK_NOARG(OfaSwAutoFmtOptionsPage, DoubleClickEditHdl, SvTreeListBox*, bool)
+IMPL_LINK_NOARG(OfaSwAutoFmtOptionsPage, DoubleClickEditHdl, weld::TreeView&, void)
 {
-    EditHdl(nullptr);
-    return false;
+    EditHdl(*m_xEditPB);
 }
 
-IMPL_LINK_NOARG(OfaSwAutoFmtOptionsPage, EditHdl, Button*, void)
+IMPL_LINK_NOARG(OfaSwAutoFmtOptionsPage, EditHdl, weld::Button&, void)
 {
-    sal_uLong nSelEntryPos = m_pCheckLB->GetSelectedEntryPos();
-    if( nSelEntryPos == REPLACE_BULLETS ||
-        nSelEntryPos == APPLY_NUMBERING)
+    int nSelEntryPos = m_xCheckLB->get_selected_index();
+    if (nSelEntryPos == REPLACE_BULLETS || nSelEntryPos == APPLY_NUMBERING)
     {
-        SvxCharacterMap aMapDlg(GetFrameWeld(), nullptr, false);
-        ImpUserData* pUserData = static_cast<ImpUserData*>(m_pCheckLB->FirstSelected()->GetUserData());
+        SvxCharacterMap aMapDlg(GetDialogFrameWeld(), nullptr, false);
+        ImpUserData* pUserData = reinterpret_cast<ImpUserData*>(m_xCheckLB->get_id(nSelEntryPos).toInt64());
         aMapDlg.SetCharFont(*pUserData->pFont);
         aMapDlg.SetChar( (*pUserData->pString)[0] );
         if (RET_OK == aMapDlg.run())
@@ -736,21 +694,24 @@ IMPL_LINK_NOARG(OfaSwAutoFmtOptionsPage, EditHdl, Button*, void)
             // using the UCS4 constructor
             OUString aOUStr( &aChar, 1 );
             *pUserData->pString = aOUStr;
+            if (nSelEntryPos == REPLACE_BULLETS)
+                m_xCheckLB->set_text(nSelEntryPos, sNum.replaceFirst("%1", aOUStr), 2);
+            else
+                m_xCheckLB->set_text(nSelEntryPos, sBullet.replaceFirst("%1", aOUStr), 2);
         }
     }
     else if( MERGE_SINGLE_LINE_PARA == nSelEntryPos )
     {
         // dialog for per cent settings
-        OfaAutoFmtPrcntSet aDlg(GetFrameWeld());
+        OfaAutoFmtPrcntSet aDlg(GetDialogFrameWeld());
         aDlg.GetPrcntFld().set_value(nPercent, FieldUnit::PERCENT);
         if (aDlg.run() == RET_OK)
         {
             nPercent = static_cast<sal_uInt16>(aDlg.GetPrcntFld().get_value(FieldUnit::PERCENT));
-            sMargin = " " +
-                unicode::formatPercent(nPercent, Application::GetSettings().GetUILanguageTag());
+            sMargin = unicode::formatPercent(nPercent, Application::GetSettings().GetUILanguageTag());
+            m_xCheckLB->set_text(nSelEntryPos, sRightMargin.replaceFirst("%1", sMargin), 2);
         }
     }
-    m_pCheckLB->Invalidate();
 }
 
 void OfaACorrCheckListBox::SetTabs()
@@ -2002,7 +1963,7 @@ IMPL_LINK( OfaQuoteTabPage, QuoteHdl, Button*, pBtn, void )
     else if (pBtn == m_pDblEndQuotePB)
         nMode = DBL_END;
     // start character selection dialog
-    SvxCharacterMap aMap(GetFrameWeld(), nullptr, false);
+    SvxCharacterMap aMap(GetDialogFrameWeld(), nullptr, false);
     aMap.SetCharFont( OutputDevice::GetDefaultFont(DefaultFontType::LATIN_TEXT,
                         LANGUAGE_ENGLISH_US, GetDefaultFontFlags::OnlyOne ));
     aMap.set_title(nMode < SGL_END ? CuiResId(RID_SVXSTR_STARTQUOTE)  : CuiResId(RID_SVXSTR_ENDQUOTE));
@@ -2169,6 +2130,14 @@ OfaAutoCompleteTabPage::~OfaAutoCompleteTabPage()
     disposeOnce();
 }
 
+void OfaSwAutoFmtOptionsPage::dispose()
+{
+    delete reinterpret_cast<ImpUserData*>(m_xCheckLB->get_id(REPLACE_BULLETS).toInt64());
+    delete reinterpret_cast<ImpUserData*>(m_xCheckLB->get_id(APPLY_NUMBERING).toInt64());
+    delete reinterpret_cast<ImpUserData*>(m_xCheckLB->get_id(MERGE_SINGLE_LINE_PARA).toInt64());
+    SfxTabPage::dispose();
+}
+
 VclPtr<SfxTabPage> OfaAutoCompleteTabPage::Create(TabPageParent pParent,
                                                   const SfxItemSet* rSet)
 {
diff --git a/cui/uiconfig/ui/applyautofmtpage.ui b/cui/uiconfig/ui/applyautofmtpage.ui
index 245d95c16bc2..35637dc88194 100644
--- a/cui/uiconfig/ui/applyautofmtpage.ui
+++ b/cui/uiconfig/ui/applyautofmtpage.ui
@@ -1,7 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
 <interface domain="cui">
   <requires lib="gtk+" version="3.18"/>
-  <requires lib="LibreOffice" version="1.0"/>
+  <object class="GtkTreeStore" id="liststore1">
+    <columns>
+      <!-- column-name check1 -->
+      <column type="gboolean"/>
+      <!-- column-name check2 -->
+      <column type="gboolean"/>
+      <!-- column-name text -->
+      <column type="gchararray"/>
+      <!-- column-name id -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
   <object class="GtkBox" id="ApplyAutoFmtPage">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -34,7 +46,6 @@
               <packing>
                 <property name="left_attach">0</property>
                 <property name="top_attach">0</property>
-                <property name="width">1</property>
                 <property name="height">2</property>
               </packing>
             </child>
@@ -42,36 +53,30 @@
               <object class="GtkLabel" id="label1">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="xalign">0</property>
                 <property name="label" translatable="yes" context="applyautofmtpage|label1">[M]: Replace while modifying existing text</property>
+                <property name="xalign">0</property>
               </object>
               <packing>
                 <property name="left_attach">1</property>
                 <property name="top_attach">0</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
               </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label2">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="xalign">0</property>
                 <property name="label" translatable="yes" context="applyautofmtpage|label2">[T]: AutoCorrect while typing</property>
+                <property name="xalign">0</property>
               </object>
               <packing>
                 <property name="left_attach">1</property>
                 <property name="top_attach">1</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
               </packing>
             </child>
           </object>
           <packing>
             <property name="left_attach">0</property>
             <property name="top_attach">1</property>
-            <property name="width">1</property>
-            <property name="height">1</property>
           </packing>
         </child>
         <child>
@@ -82,54 +87,78 @@
             <property name="vexpand">True</property>
             <property name="column_homogeneous">True</property>
             <child>
-              <object class="GtkLabel" id="m">
-                <property name="can_focus">False</property>
-                <property name="no_show_all">True</property>
-                <property name="label" translatable="yes" context="applyautofmtpage|m">[M]</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="t">
-                <property name="can_focus">False</property>
-                <property name="no_show_all">True</property>
-                <property name="label" translatable="yes" context="applyautofmtpage|t">[T]</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">0</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="svtlo-SvSimpleTableContainer" id="list">
+              <object class="GtkScrolledWindow">
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="can_focus">True</property>
                 <property name="hexpand">True</property>
                 <property name="vexpand">True</property>
-                <child internal-child="selection">
-                  <object class="GtkTreeSelection" id="Simple Table Container-selection1"/>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkTreeView" id="list">
+                    <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="search_column">0</property>
+                    <property name="show_expanders">False</property>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="Macro Library List-selection1"/>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+                        <property name="resizable">True</property>
+                        <property name="spacing">6</property>
+                        <property name="title" translatable="yes" context="applyautofmtpage|m">[M]</property>
+                        <property name="alignment">0.5</property>
+                        <child>
+                          <object class="GtkCellRendererToggle" id="cellrenderer1"/>
+                          <attributes>
+                            <attribute name="active">0</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn2">
+                        <property name="resizable">True</property>
+                        <property name="spacing">6</property>
+                        <property name="title" translatable="yes" context="applyautofmtpage|t">[T]</property>
+                        <property name="alignment">0.5</property>
+                        <child>
+                          <object class="GtkCellRendererToggle" id="cellrenderer2"/>
+                          <attributes>
+                            <attribute name="active">1</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn3">
+                        <property name="resizable">True</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="cellrenderer3"/>
+                          <attributes>
+                            <attribute name="text">0</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
                 </child>
               </object>
               <packing>
                 <property name="left_attach">0</property>
-                <property name="top_attach">1</property>
+                <property name="top_attach">0</property>
                 <property name="width">2</property>
-                <property name="height">1</property>
               </packing>
             </child>
           </object>
           <packing>
             <property name="left_attach">0</property>
             <property name="top_attach">0</property>
-            <property name="width">1</property>
-            <property name="height">1</property>
           </packing>
         </child>
       </object>
diff --git a/include/vcl/headbar.hxx b/include/vcl/headbar.hxx
index af6c99a56625..890d686d8b4a 100644
--- a/include/vcl/headbar.hxx
+++ b/include/vcl/headbar.hxx
@@ -75,7 +75,7 @@ HeaderBarItemBits::UPARROW         An arrow pointing upwards is displayed behind
                     a corresponding list is sorted in ascending order.
                     The status of the arrow can be set/reset with SetItemBits().
 HeaderBarItemBits::USERDRAW        For this item, the UserDraw handler is called as well.
-HeaderBarItemBits::STDSTYLE        (HeaderBarItemBits::LEFT | HeaderBarItemBits::LEFTIMAGE | HeaderBarItemBits::VCENTER | HeaderBarItemBits::CLICKABLE)
+HeaderBarItemBits::STDSTYLE        (HeaderBarItemBits::LEFT | HeaderBarItemBits::LEFTIMAGE | HeaderBarItemBits::CLICKABLE)
 
 --------------------------------------------------------------------------
 
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index e14c1b34ad45..00d8713d4fd1 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -410,7 +410,7 @@ protected:
     bool signal_expanding(TreeIter& rIter) { return m_aExpandingHdl.Call(rIter); }
 
 public:
-    virtual void insert(weld::TreeIter* pParent, int pos, const OUString& rStr, const OUString* pId,
+    virtual void insert(weld::TreeIter* pParent, int pos, const OUString* pStr, const OUString* pId,
                         const OUString* pIconName, VirtualDevice* pImageSurface,
                         const OUString* pExpanderName, bool bChildrenOnDemand)
         = 0;
@@ -420,32 +420,32 @@ public:
     void insert(int pos, const OUString& rStr, const OUString* pId, const OUString* pIconName,
                 VirtualDevice* pImageSurface)
     {
-        insert(nullptr, pos, rStr, pId, pIconName, pImageSurface, nullptr, false);
+        insert(nullptr, pos, &rStr, pId, pIconName, pImageSurface, nullptr, false);
     }
     void insert_text(int pos, const OUString& rStr)
     {
-        insert(nullptr, pos, rStr, nullptr, nullptr, nullptr, nullptr, false);
+        insert(nullptr, pos, &rStr, nullptr, nullptr, nullptr, nullptr, false);
     }
     void append_text(const OUString& rStr)
     {
-        insert(nullptr, -1, rStr, nullptr, nullptr, nullptr, nullptr, false);
+        insert(nullptr, -1, &rStr, nullptr, nullptr, nullptr, nullptr, false);
     }
     void append(const OUString& rId, const OUString& rStr)
     {
-        insert(nullptr, -1, rStr, &rId, nullptr, nullptr, nullptr, false);
+        insert(nullptr, -1, &rStr, &rId, nullptr, nullptr, nullptr, false);
     }
     void append(const OUString& rId, const OUString& rStr, const OUString& rImage)
     {
-        insert(nullptr, -1, rStr, &rId, &rImage, nullptr, nullptr, false);
+        insert(nullptr, -1, &rStr, &rId, &rImage, nullptr, nullptr, false);
     }
     void append(weld::TreeIter* pParent, const OUString& rId, const OUString& rStr,
                 const OUString& rImage)
     {
-        insert(pParent, -1, rStr, &rId, &rImage, nullptr, nullptr, false);
+        insert(pParent, -1, &rStr, &rId, &rImage, nullptr, nullptr, false);
     }
     void append(const OUString& rId, const OUString& rStr, VirtualDevice& rImage)
     {
-        insert(nullptr, -1, rStr, &rId, nullptr, &rImage, nullptr, false);
+        insert(nullptr, -1, &rStr, &rId, nullptr, &rImage, nullptr, false);
     }
 
     void connect_changed(const Link<TreeView&, void>& rLink) { m_aChangeHdl = rLink; }
@@ -456,6 +456,11 @@ public:
     virtual void select(int pos) = 0;
     virtual void unselect(int pos) = 0;
     virtual void remove(int pos) = 0;
+    virtual OUString get_text(int row, int col = -1) const = 0;
+    virtual void set_text(int row, const OUString& rText, int col = -1) = 0;
+    virtual void set_id(int row, const OUString& rId) = 0;
+    virtual void set_toggle(int row, bool bOn, int col = -1) = 0;
+    virtual bool get_toggle(int row, int col = -1) const = 0;
     virtual void set_top_entry(int pos) = 0;
     virtual std::vector<int> get_selected_rows() const = 0;
     virtual void set_font_color(int pos, const Color& rColor) const = 0;
@@ -463,8 +468,6 @@ public:
     virtual void set_cursor(int pos) = 0;
 
     //by text
-    virtual OUString get_text(int row, int col = -1) const = 0;
-    virtual void set_text(int row, const OUString& rText, int col = -1) = 0;
     virtual int find_text(const OUString& rText) const = 0;
     OUString get_selected_text() const
     {
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 431ee544d32f..c47745b99dcf 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -1822,6 +1822,7 @@ private:
     // owner for UserData
     std::vector<std::unique_ptr<OUString>> m_aUserData;
     VclPtr<SvTabListBox> m_xTreeView;
+    SvLBoxButtonData m_aCheckButtonData;
 
     DECL_LINK(SelectHdl, SvTreeListBox*, void);
     DECL_LINK(DoubleClickHdl, SvTreeListBox*, bool);
@@ -1832,6 +1833,7 @@ public:
     SalInstanceTreeView(SvTabListBox* pTreeView, bool bTakeOwnership)
         : SalInstanceContainer(pTreeView, bTakeOwnership)
         , m_xTreeView(pTreeView)
+        , m_aCheckButtonData(pTreeView)
     {
         m_xTreeView->SetNodeDefaultImages();
         m_xTreeView->SetSelectHdl(LINK(this, SalInstanceTreeView, SelectHdl));
@@ -1875,7 +1877,7 @@ public:
         return OUString();
     }
 
-    virtual void insert(weld::TreeIter* pParent, int pos, const OUString& rStr, const OUString* pId,
+    virtual void insert(weld::TreeIter* pParent, int pos, const OUString* pStr, const OUString* pId,
                         const OUString* pIconName, VirtualDevice* pImageSurface, const OUString* pExpanderName,
                         bool bChildrenOnDemand) override
     {
@@ -1891,15 +1893,25 @@ public:
         else
             pUserData = nullptr;
 
+        bool bSimple = !pIconName && !pImageSurface && pStr;
         SvTreeListEntry* pResult;
-        if (!pIconName && !pImageSurface)
-            pResult = m_xTreeView->InsertEntry(rStr, iter, false, nInsertPos, pUserData);
+        if (bSimple)
+            pResult = m_xTreeView->InsertEntry(*pStr, iter, false, nInsertPos, pUserData);
         else
         {
             SvTreeListEntry* pEntry = new SvTreeListEntry;
-            Image aImage(pIconName ? createImage(*pIconName) : createImage(*pImageSurface));
-            pEntry->AddItem(o3tl::make_unique<SvLBoxContextBmp>(aImage, aImage, false));
-            pEntry->AddItem(o3tl::make_unique<SvLBoxString>(rStr));
+            if (pIconName || pImageSurface)
+            {
+                Image aImage(pIconName ? createImage(*pIconName) : createImage(*pImageSurface));
+                pEntry->AddItem(o3tl::make_unique<SvLBoxContextBmp>(aImage, aImage, false));
+            }
+            else
+            {
+                Image aDummy;
+                pEntry->AddItem(o3tl::make_unique<SvLBoxContextBmp>(aDummy, aDummy, false));
+            }
+            if (pStr)
+                pEntry->AddItem(o3tl::make_unique<SvLBoxString>(*pStr));
             pEntry->SetUserData(pUserData);
             m_xTreeView->Insert(pEntry, iter, nInsertPos);
             pResult = pEntry;
@@ -2058,9 +2070,15 @@ public:
 
         ++col; //skip dummy/expander column
 
+        // blank out missing entries
+        for (int i = pEntry->ItemCount(); i < col ; ++i)
+            pEntry->AddItem(o3tl::make_unique<SvLBoxString>(""));
+
         if (static_cast<size_t>(col) == pEntry->ItemCount())
         {
             pEntry->AddItem(o3tl::make_unique<SvLBoxString>(rText));
+            SvViewDataEntry* pViewData = m_xTreeView->GetViewDataEntry(pEntry);
+            m_xTreeView->InitViewData(pViewData, pEntry);
         }
         else
         {
@@ -2072,6 +2090,57 @@ public:
         m_xTreeView->ModelHasEntryInvalidated(pEntry);
     }
 
+    virtual bool get_toggle(int pos, int col) const override
+    {
+        SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
+        if (col == -1)
+            return m_xTreeView->GetCheckButtonState(pEntry) == SvButtonState::Checked;
+
+        ++col; //skip dummy/expander column
+
+        if (static_cast<size_t>(col) == pEntry->ItemCount())
+            return false;
+
+        assert(col >= 0 && static_cast<size_t>(col) < pEntry->ItemCount());
+        SvLBoxItem& rItem = pEntry->GetItem(col);
+        assert(dynamic_cast<SvLBoxButton*>(&rItem));
+        return static_cast<SvLBoxButton&>(rItem).IsStateChecked();
+    }
+
+    virtual void set_toggle(int pos, bool bOn, int col) override
+    {
+        SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
+        if (col == -1)
+        {
+            m_xTreeView->SetCheckButtonState(pEntry, bOn ? SvButtonState::Checked : SvButtonState::Unchecked);
+            return;
+        }
+
+        ++col; //skip dummy/expander column
+
+        // blank out missing entries
+        for (int i = pEntry->ItemCount(); i < col ; ++i)
+            pEntry->AddItem(o3tl::make_unique<SvLBoxString>(""));
+
+        if (static_cast<size_t>(col) == pEntry->ItemCount())
+        {
+            pEntry->AddItem(o3tl::make_unique<SvLBoxButton>(SvLBoxButtonKind::EnabledCheckbox,
+                                                            &m_aCheckButtonData));
+            SvViewDataEntry* pViewData = m_xTreeView->GetViewDataEntry(pEntry);
+            m_xTreeView->InitViewData(pViewData, pEntry);
+        }
+
+        assert(col >= 0 && static_cast<size_t>(col) < pEntry->ItemCount());
+        SvLBoxItem& rItem = pEntry->GetItem(col);
+        assert(dynamic_cast<SvLBoxButton*>(&rItem));
+        if (bOn)
+            static_cast<SvLBoxButton&>(rItem).SetStateChecked();
+        else
+            static_cast<SvLBoxButton&>(rItem).SetStateUnchecked();
+
+        m_xTreeView->ModelHasEntryInvalidated(pEntry);
+    }
+
     const OUString* getEntryData(int index) const
     {
         SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, index);
@@ -2086,6 +2155,13 @@ public:
         return *pRet;
     }
 
+    virtual void set_id(int pos, const OUString& rId) override
+    {
+        SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
+        m_aUserData.emplace_back(o3tl::make_unique<OUString>(rId));
+        pEntry->SetUserData(m_aUserData.back().get());
+    }
+
     virtual int get_selected_index() const override
     {
         assert(m_xTreeView->IsUpdateMode() && "don't request selection when frozen");
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index c76abc3a1f1f..91f5cd915baa 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -1111,6 +1111,18 @@ namespace
         return sTooltipText;
     }
 
+    float extractAlignment(VclBuilder::stringmap &rMap)
+    {
+        float f = 0.0;
+        VclBuilder::stringmap::iterator aFind = rMap.find(OString("alignment"));
+        if (aFind != rMap.end())
+        {
+            f = aFind->second.toFloat();
+            rMap.erase(aFind);
+        }
+        return f;
+    }
+
     OUString extractTitle(VclBuilder::stringmap &rMap)
     {
         OUString sTitle;
@@ -1966,8 +1978,16 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString &
             if (HeaderBar* pHeaderBar = pTreeView ? pTreeView->GetHeaderBar() : nullptr)
             {
                 OUString sTitle(extractTitle(rMap));
+                HeaderBarItemBits nBits = (HeaderBarItemBits::LEFTIMAGE | HeaderBarItemBits::CLICKABLE);
+                float fAlign = extractAlignment(rMap);
+                if (fAlign == 0.0)
+                    nBits |= HeaderBarItemBits::LEFT;
+                else if (fAlign == 1.0)
+                    nBits |= HeaderBarItemBits::RIGHT;
+                else if (fAlign == 0.5)
+                    nBits |= HeaderBarItemBits::CENTER;
                 auto nItemId = pHeaderBar->GetItemCount() + 1;
-                pHeaderBar->InsertItem(nItemId, sTitle, 100);
+                pHeaderBar->InsertItem(nItemId, sTitle, 100, nBits);
             }
         }
     }
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 265cc49fd982..19ad71bfc4b4 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -4360,6 +4360,7 @@ private:
     GtkTreeStore* m_pTreeStore;
     std::unique_ptr<comphelper::string::NaturalStringSorter> m_xSorter;
     gint m_nTextCol;
+    gint m_nToggleCol;
     gint m_nImageCol;
     gint m_nExpanderImageCol;
     gint m_nIdCol;
@@ -4388,11 +4389,11 @@ private:
         pThis->signal_row_activated();
     }
 
-    void insert_row(GtkTreeIter& iter, GtkTreeIter* parent, int pos, const OUString* pId, const OUString& rText,
+    void insert_row(GtkTreeIter& iter, GtkTreeIter* parent, int pos, const OUString* pId, const OUString* pText,
                     const OUString* pIconName, VirtualDevice* pDevice, const OUString* pExpanderName)
     {
         gtk_tree_store_insert_with_values(m_pTreeStore, &iter, parent, pos,
-                                          m_nTextCol, OUStringToOString(rText, RTL_TEXTENCODING_UTF8).getStr(),
+                                          m_nTextCol, !pText ? nullptr : OUStringToOString(*pText, RTL_TEXTENCODING_UTF8).getStr(),
                                           m_nIdCol, !pId ? nullptr : OUStringToOString(*pId, RTL_TEXTENCODING_UTF8).getStr(),
                                           -1);
         if (pIconName)
@@ -4445,6 +4446,18 @@ private:
         return sRet;
     }
 
+    bool get_bool(int pos, int col) const
+    {
+        gboolean bRet(false);
+        GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+        GtkTreeIter iter;
+        if (gtk_tree_model_iter_nth_child(pModel, &iter, nullptr, pos))
+        {
+            gtk_tree_model_get(pModel, &iter, col, &bRet, -1);
+        }
+        return bRet;
+    }
+
     void set(int pos, int col, const OUString& rText)
     {
         GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
@@ -4456,6 +4469,16 @@ private:
         }
     }
 
+    void set(int pos, int col, bool bOn)
+    {
+        GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+        GtkTreeIter iter;
+        if (gtk_tree_model_iter_nth_child(pModel, &iter, nullptr, pos))
+        {
+            gtk_tree_store_set(m_pTreeStore, &iter, col, bOn, -1);
+        }
+    }
+
     static gboolean signalTestExpandRow(GtkTreeView*, GtkTreeIter* iter, GtkTreePath*, gpointer widget)
     {
         GtkInstanceTreeView* pThis = static_cast<GtkInstanceTreeView*>(widget);
@@ -4488,7 +4511,8 @@ private:
         if (!bRet && bPlaceHolder)
         {
             GtkTreeIter subiter;
-            insert_row(subiter, &iter, -1, nullptr, "<dummy>", nullptr, nullptr, nullptr);
+            OUString sDummy("<dummy>");
+            insert_row(subiter, &iter, -1, nullptr, &sDummy, nullptr, nullptr, nullptr);
         }
 
         return bRet;
@@ -4500,6 +4524,7 @@ public:
         , m_pTreeView(pTreeView)
         , m_pTreeStore(GTK_TREE_STORE(gtk_tree_view_get_model(m_pTreeView)))
         , m_nTextCol(-1)
+        , m_nToggleCol(-1)
         , m_nImageCol(-1)
         , m_nExpanderImageCol(-1)
         , m_nChangedSignalId(g_signal_connect(gtk_tree_view_get_selection(pTreeView), "changed",
@@ -4518,6 +4543,8 @@ public:
                 GtkCellRenderer* pCellRenderer = GTK_CELL_RENDERER(pRenderer->data);
                 if (m_nTextCol == -1 && GTK_IS_CELL_RENDERER_TEXT(pCellRenderer))
                     m_nTextCol = nIndex;
+                else if (m_nToggleCol == -1 && GTK_IS_CELL_RENDERER_TOGGLE(pCellRenderer))
+                    m_nToggleCol = nIndex;
                 else if (GTK_IS_CELL_RENDERER_PIXBUF(pCellRenderer))
                 {
                     const bool bExpander = g_list_next(pRenderer) != nullptr;
@@ -4559,17 +4586,18 @@ public:
         return sRet;
     }
 
-    virtual void insert(weld::TreeIter* pParent, int pos, const OUString& rText, const OUString* pId, const OUString* pIconName,
+    virtual void insert(weld::TreeIter* pParent, int pos, const OUString* pText, const OUString* pId, const OUString* pIconName,
                         VirtualDevice* pImageSurface, const OUString* pExpanderName, bool bChildrenOnDemand) override
     {
         disable_notify_events();
         GtkTreeIter iter;
         GtkInstanceTreeIter* pGtkIter = static_cast<GtkInstanceTreeIter*>(pParent);
-        insert_row(iter, pGtkIter ? &pGtkIter->iter : nullptr, pos, pId, rText, pIconName, pImageSurface, pExpanderName);
+        insert_row(iter, pGtkIter ? &pGtkIter->iter : nullptr, pos, pId, pText, pIconName, pImageSurface, pExpanderName);
         if (bChildrenOnDemand)
         {
             GtkTreeIter subiter;
-            insert_row(subiter, &iter, -1, nullptr, "<dummy>", nullptr, nullptr, nullptr);
+            OUString sDummy("<dummy>");
+            insert_row(subiter, &iter, -1, nullptr, &sDummy, nullptr, nullptr, nullptr);
         }
         enable_notify_events();
     }
@@ -4734,11 +4762,30 @@ public:
         return set(pos, col, rText);
     }
 
+    virtual bool get_toggle(int pos, int col) const override
+    {
+        if (col == -1)
+            return get_bool(pos, m_nToggleCol);
+        return get_bool(pos, col);
+    }
+
+    virtual void set_toggle(int pos, bool bOn, int col) override
+    {
+        if (col == -1)
+            return set(pos, m_nToggleCol, bOn);
+        return set(pos, col, bOn);
+    }
+
     virtual OUString get_id(int pos) const override
     {
         return get(pos, m_nIdCol);
     }
 
+    virtual void set_id(int pos, const OUString& rId) override
+    {
+        return set(pos, m_nIdCol, rId);
+    }
+
     virtual int get_selected_index() const override
     {
         assert(gtk_tree_view_get_model(m_pTreeView) && "don't request selection when frozen");


More information about the Libreoffice-commits mailing list