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