include/vcl/builder.hxx       |   28 ++++++++++++---------
 vcl/source/window/builder.cxx |   55 ++++++++++++++++++++++++------------------
 2 files changed, 49 insertions(+), 34 deletions(-)

New commits:
commit 393b1a5de4e113336ca5fa87cc77555679fa8e03
Author:     Michael Weghorn <[email protected]>
AuthorDate: Tue Sep 17 22:09:27 2024 +0200
Commit:     Michael Weghorn <[email protected]>
CommitDate: Wed Sep 18 07:33:05 2024 +0200

    tdf#130857 VclBuilder: Move m_sHelpRoot member to base class
    
    Add a protected getter, `getHelpRoot()` to access it.
    
    Change-Id: Idb2f6834e13f6b7d04abe0a3c607444383e6ee1a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173577
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/include/vcl/builder.hxx b/include/vcl/builder.hxx
index 9f8f9269cb2e..1f92ff0cd708 100644
--- a/include/vcl/builder.hxx
+++ b/include/vcl/builder.hxx
@@ -74,7 +74,7 @@ public:
     typedef stringmap TextBuffer;
 
 protected:
-    BuilderBase(bool bLegacy);
+    BuilderBase(const OUString& rUIFile, bool bLegacy);
 
     struct ListStore
     {
@@ -102,6 +102,7 @@ protected:
     static OUString getStyleClass(xmlreader::XmlReader &reader);
     static bool hasOrientationVertical(stringmap &rMap);
 
+    OUString getHelpRoot() { return m_sHelpRoot; }
     bool isLegacy() { return m_bLegacy; }
     const std::locale& getResLocale() const;
     const std::vector<SizeGroup>& getSizeGroups() const;
@@ -140,6 +141,8 @@ private:
     };
 
     std::unique_ptr<ParserState> m_pParserState;
+
+    OUString m_sHelpRoot;
     bool m_bLegacy;
 };
 
@@ -326,7 +329,6 @@ private:
     };
 
     OUString    m_sID;
-    OUString    m_sHelpRoot;
     VclPtr<vcl::Window> m_pParent;
     bool        m_bToplevelHasDeferredInit;
     bool        m_bToplevelHasDeferredProperties;
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 057f5077b893..1f1cca6688c8 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -445,10 +445,15 @@ namespace weld
     }
 }
 
-BuilderBase::BuilderBase(bool bLegacy)
+BuilderBase::BuilderBase(const OUString& rUIFile, bool bLegacy)
     : m_pParserState(new ParserState)
+    , m_sHelpRoot(rUIFile)
     , m_bLegacy(bLegacy)
 {
+    const sal_Int32 nIdx = m_sHelpRoot.lastIndexOf('.');
+    if (nIdx != -1)
+        m_sHelpRoot = m_sHelpRoot.copy(0, nIdx);
+    m_sHelpRoot += "/";
 }
 
 const std::locale& BuilderBase::getResLocale() const
@@ -486,12 +491,11 @@ void BuilderBase::resetParserState() { 
m_pParserState.reset(); }
 VclBuilder::VclBuilder(vcl::Window* pParent, const OUString& sUIDir, const 
OUString& sUIFile,
                        OUString sID, css::uno::Reference<css::frame::XFrame> 
xFrame,
                        bool bLegacy, const NotebookBarAddonsItem* 
pNotebookBarAddonsItem)
-    : BuilderBase(bLegacy)
+    : BuilderBase(sUIFile, bLegacy)
     , m_pNotebookBarAddonsItem(pNotebookBarAddonsItem
                                    ? new 
NotebookBarAddonsItem(*pNotebookBarAddonsItem)
                                    : new NotebookBarAddonsItem{})
     , m_sID(std::move(sID))
-    , m_sHelpRoot(sUIFile)
     , m_pParent(pParent)
     , m_bToplevelParentFound(false)
     , m_pVclParserState(new VclParserState)
@@ -502,11 +506,6 @@ VclBuilder::VclBuilder(vcl::Window* pParent, const 
OUString& sUIDir, const OUStr
          (pParent->IsDockingWindow() && 
static_cast<DockingWindow*>(pParent)->isDeferredInit()));
     m_bToplevelHasDeferredProperties = m_bToplevelHasDeferredInit;
 
-    sal_Int32 nIdx = m_sHelpRoot.lastIndexOf('.');
-    if (nIdx != -1)
-        m_sHelpRoot = m_sHelpRoot.copy(0, nIdx);
-    m_sHelpRoot += "/";
-
     try
     {
         xmlreader::XmlReader reader(sUIDir + sUIFile);
@@ -1653,7 +1652,7 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window 
*pParent, const OUString
                         "-page" +
                         OUString::number(nNewPageCount);
                     m_aChildren.emplace_back(sTabPageId, pPage, false);
-                    pPage->SetHelpId(m_sHelpRoot + sTabPageId);
+                    pPage->SetHelpId(getHelpRoot() + sTabPageId);
 
                     pParent = pPage;
 
@@ -1968,13 +1967,13 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window 
*pParent, const OUString
             {
                 VclPtr<VclVBox> xContainer = 
VclPtr<VclVBox>::Create(pRealParent);
                 OUString containerid(id + "-container");
-                xContainer->SetHelpId(m_sHelpRoot + containerid);
+                xContainer->SetHelpId(getHelpRoot() + containerid);
                 m_aChildren.emplace_back(containerid, xContainer, true);
 
                 VclPtrInstance<HeaderBar> xHeader(xContainer, WB_BUTTONSTYLE | 
WB_BORDER | WB_TABSTOP | WB_3DLOOK);
                 xHeader->set_width_request(0); // let the headerbar width not 
affect the size request
                 OUString headerid(id + "-header");
-                xHeader->SetHelpId(m_sHelpRoot + headerid);
+                xHeader->SetHelpId(getHelpRoot() + headerid);
                 m_aChildren.emplace_back(headerid, xHeader, true);
 
                 VclPtr<LclHeaderTabListBox> xHeaderBox = 
VclPtr<LclHeaderTabListBox>::Create(xContainer, nWinStyle);
@@ -2174,7 +2173,7 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window 
*pParent, const OUString
                 pToolBox->InsertItem(nItemId, extractLabel(rMap), aCommand, 
nBits);
             }
 
-            pToolBox->SetHelpId(nItemId, m_sHelpRoot + id);
+            pToolBox->SetHelpId(nItemId, getHelpRoot() + id);
             OUString sTooltip(extractTooltipText(rMap));
             if (!sTooltip.isEmpty())
                 pToolBox->SetQuickHelpText(nItemId, sTooltip);
@@ -2241,7 +2240,7 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window 
*pParent, const OUString
         WindowImpl *pWindowImpl = xWindow->ImplGetWindowImpl();
         pWindowImpl->mbDisabled = false;
 
-        xWindow->SetHelpId(m_sHelpRoot + id);
+        xWindow->SetHelpId(getHelpRoot() + id);
         SAL_INFO("vcl.builder", "for name '" << name << "' and id '" << id <<
             "', created " << xWindow.get() << " child of " <<
             pParent << "(" << xWindow->ImplGetWindowImpl()->mpParent.get() << 
"/" <<
@@ -2539,7 +2538,7 @@ VclPtr<vcl::Window> VclBuilder::insertObject(vcl::Window 
*pParent, const OUStrin
 
         if (pCurrentChild->GetHelpId().isEmpty())
         {
-            pCurrentChild->SetHelpId(m_sHelpRoot + m_sID);
+            pCurrentChild->SetHelpId(getHelpRoot() + m_sID);
             SAL_INFO("vcl.builder", "for toplevel dialog " << this << " " <<
                 rID << ", set helpid " << pCurrentChild->GetHelpId());
         }
@@ -3535,7 +3534,7 @@ void VclBuilder::insertMenuObject(Menu *pParent, 
PopupMenu *pSubMenu, const OUSt
 
     if (nOldCount != pParent->GetItemCount())
     {
-        pParent->SetHelpId(nNewId, m_sHelpRoot + rID);
+        pParent->SetHelpId(nNewId, getHelpRoot() + rID);
         if (!extractVisible(rProps))
             pParent->HideItem(nNewId);
 
commit 5cb3f13e3d5e11d7deba3e0d9750a941d19ba1a3
Author:     Michael Weghorn <[email protected]>
AuthorDate: Tue Sep 17 19:53:56 2024 +0200
Commit:     Michael Weghorn <[email protected]>
CommitDate: Wed Sep 18 07:32:58 2024 +0200

    tdf#130857 VclBuilder: Move TextBuffer bookkeeping to base class
    
    This is basically the same as
    
        Change-Id: Iba98406817906e36fb8dc723c8e9b4b554eb2258
        Author: Michael Weghorn <[email protected]>
        Date:   Tue Sep 17 19:35:22 2024 +0200
    
            tdf#130857 VclBuilder: Move adjustment bookkeeping to base class
    
    , but for the `TextBuffer`s instead of the `Adjustment`s.
    
    Change-Id: I0f53718892f70a285a7f8b0d8e9e112d48dedb50
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173575
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/include/vcl/builder.hxx b/include/vcl/builder.hxx
index 573fcf66946b..9f8f9269cb2e 100644
--- a/include/vcl/builder.hxx
+++ b/include/vcl/builder.hxx
@@ -71,6 +71,7 @@ public:
     typedef std::map<OUString, std::pair<OUString, OUString>> accelmap;
 
     typedef stringmap Adjustment;
+    typedef stringmap TextBuffer;
 
 protected:
     BuilderBase(bool bLegacy);
@@ -116,6 +117,10 @@ protected:
 
     void addAdjustment(const OUString& sID, const Adjustment& rAdjustment);
     const Adjustment* get_adjustment_by_name(const OUString& sID) const;
+
+    void addTextBuffer(const OUString& sID, const TextBuffer& rTextBuffer);
+    const TextBuffer* get_buffer_by_name(const OUString& sID) const;
+
     const ListStore* get_model_by_name(const OUString& sID) const;
 
     void handleSizeGroup(xmlreader::XmlReader& reader);
@@ -131,6 +136,7 @@ private:
         std::vector<SizeGroup> m_aSizeGroups;
 
         std::map<OUString, Adjustment> m_aAdjustments;
+        std::map<OUString, TextBuffer> m_aTextBuffers;
     };
 
     std::unique_ptr<ParserState> m_pParserState;
@@ -273,9 +279,6 @@ private:
     void     mungeModel(ComboBox &rTarget, const ListStore &rStore, sal_uInt16 
nActiveId);
     void     mungeModel(SvTabListBox &rTarget, const ListStore &rStore, 
sal_uInt16 nActiveId);
 
-    typedef stringmap TextBuffer;
-    const TextBuffer* get_buffer_by_name(const OUString& sID) const;
-
     static void     mungeTextBuffer(VclMultiLineEdit &rTarget, const 
TextBuffer &rTextBuffer);
 
     static void     mungeAdjustment(NumericFormatter &rTarget, const 
Adjustment &rAdjustment);
@@ -294,7 +297,6 @@ private:
         std::vector<ComboBoxModelMap> m_aModelMaps;
 
         std::vector<TextBufferMap> m_aTextBufferMaps;
-        std::map<OUString, TextBuffer> m_aTextBuffers;
 
         std::vector<WidgetAdjustmentMap> m_aNumericFormatterAdjustmentMaps;
         std::vector<WidgetAdjustmentMap> m_aFormattedFormatterAdjustmentMaps;
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index e352396f9b11..057f5077b893 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -3751,7 +3751,7 @@ VclPtr<vcl::Window> VclBuilder::handleObject(vcl::Window 
*pParent, stringmap *pA
     }
     else if (sClass == "GtkTextBuffer")
     {
-        m_pVclParserState->m_aTextBuffers[sID] = aProperties;
+        addTextBuffer(sID, aProperties);
         return nullptr;
     }
 
@@ -4246,10 +4246,15 @@ const BuilderBase::ListStore* 
BuilderBase::get_model_by_name(const OUString& sID
     return nullptr;
 }
 
-const VclBuilder::TextBuffer *VclBuilder::get_buffer_by_name(const OUString& 
sID) const
+void BuilderBase::addTextBuffer(const OUString& sID, const TextBuffer& 
rTextBuffer)
 {
-    const auto aI = m_pVclParserState->m_aTextBuffers.find(sID);
-    if (aI != m_pVclParserState->m_aTextBuffers.end())
+    m_pParserState->m_aTextBuffers[sID] = rTextBuffer;
+}
+
+const BuilderBase::TextBuffer* BuilderBase::get_buffer_by_name(const OUString& 
sID) const
+{
+    const auto aI = m_pParserState->m_aTextBuffers.find(sID);
+    if (aI != m_pParserState->m_aTextBuffers.end())
         return &(aI->second);
     return nullptr;
 }
commit 24406f5ae529e355474b43d4770617ecb264ccff
Author:     Michael Weghorn <[email protected]>
AuthorDate: Tue Sep 17 19:35:22 2024 +0200
Commit:     Michael Weghorn <[email protected]>
CommitDate: Wed Sep 18 07:32:50 2024 +0200

    tdf#130857 VclBuilder: Move Adjustment bookkeeping to base class
    
    A GtkAdjustment represents a value with an upper and
    lower bound. Move bookkeeping of the adjustments from
    `VclBuilder` to the base class `BuilderBase`, so this
    can be reused by other subclasses in the future.
    
    For now, adding adjustments by calling
    `BuilderBase::addAdjustment` only happens in the
    (currently still) VclBuilder-specific `VclBuilder::handleObject`,
    but this is one step towards making it useful outside of it.
    
    Change-Id: Iba98406817906e36fb8dc723c8e9b4b554eb2258
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173574
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/include/vcl/builder.hxx b/include/vcl/builder.hxx
index 0ceb8aca68a6..573fcf66946b 100644
--- a/include/vcl/builder.hxx
+++ b/include/vcl/builder.hxx
@@ -70,6 +70,8 @@ public:
     typedef std::map<OUString, OUString> stringmap;
     typedef std::map<OUString, std::pair<OUString, OUString>> accelmap;
 
+    typedef stringmap Adjustment;
+
 protected:
     BuilderBase(bool bLegacy);
 
@@ -111,6 +113,9 @@ protected:
     std::vector<ComboBoxTextItem> handleItems(xmlreader::XmlReader& reader) 
const;
     void handleListStore(xmlreader::XmlReader& reader, const OUString& rID, 
std::u16string_view rClass);
     void handleRow(xmlreader::XmlReader& reader, const OUString& rID);
+
+    void addAdjustment(const OUString& sID, const Adjustment& rAdjustment);
+    const Adjustment* get_adjustment_by_name(const OUString& sID) const;
     const ListStore* get_model_by_name(const OUString& sID) const;
 
     void handleSizeGroup(xmlreader::XmlReader& reader);
@@ -124,6 +129,8 @@ private:
 
         std::map<OUString, ListStore> m_aModels;
         std::vector<SizeGroup> m_aSizeGroups;
+
+        std::map<OUString, Adjustment> m_aAdjustments;
     };
 
     std::unique_ptr<ParserState> m_pParserState;
@@ -271,9 +278,6 @@ private:
 
     static void     mungeTextBuffer(VclMultiLineEdit &rTarget, const 
TextBuffer &rTextBuffer);
 
-    typedef stringmap Adjustment;
-    const Adjustment* get_adjustment_by_name(const OUString& sID) const;
-
     static void     mungeAdjustment(NumericFormatter &rTarget, const 
Adjustment &rAdjustment);
     static void     mungeAdjustment(FormattedField &rTarget, const Adjustment 
&rAdjustment);
     static void     mungeAdjustment(ScrollBar &rTarget, const Adjustment 
&rAdjustment);
@@ -297,8 +301,6 @@ private:
         std::vector<WidgetAdjustmentMap> m_aScrollAdjustmentMaps;
         std::vector<WidgetAdjustmentMap> m_aSliderAdjustmentMaps;
 
-        std::map<OUString, Adjustment> m_aAdjustments;
-
         std::vector<ButtonImageWidgetMap> m_aButtonImageWidgetMaps;
         ImageSizeMap m_aImageSizeMap;
 
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 2e4c6a20f563..e352396f9b11 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -3746,7 +3746,7 @@ VclPtr<vcl::Window> VclBuilder::handleObject(vcl::Window 
*pParent, stringmap *pA
 
     if (sClass == "GtkAdjustment")
     {
-        m_pVclParserState->m_aAdjustments[sID] = aProperties;
+        addAdjustment(sID, aProperties);
         return nullptr;
     }
     else if (sClass == "GtkTextBuffer")
@@ -4254,10 +4254,15 @@ const VclBuilder::TextBuffer 
*VclBuilder::get_buffer_by_name(const OUString& sID
     return nullptr;
 }
 
-const VclBuilder::Adjustment *VclBuilder::get_adjustment_by_name(const 
OUString& sID) const
+void BuilderBase::addAdjustment(const OUString& sID, const Adjustment& 
rAdjustment)
 {
-    const auto aI = m_pVclParserState->m_aAdjustments.find(sID);
-    if (aI != m_pVclParserState->m_aAdjustments.end())
+    m_pParserState->m_aAdjustments[sID] = rAdjustment;
+}
+
+const BuilderBase::Adjustment* BuilderBase::get_adjustment_by_name(const 
OUString& sID) const
+{
+    const auto aI = m_pParserState->m_aAdjustments.find(sID);
+    if (aI != m_pParserState->m_aAdjustments.end())
         return &(aI->second);
     return nullptr;
 }

Reply via email to