From 9f53172abd921d03bb7b1c5b0e5cf29f2cd65965 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Tue, 22 Jan 2013 13:26:27 +0000 Subject: implement loading Mnemonic Widgets via VclBuilder Change-Id: I62677c1140e58fbf4f27750389200eca78c9ba7e --- vcl/inc/vcl/builder.hxx | 4 ++++ vcl/source/window/builder.cxx | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx index ab0b1f64f064..220e5b194d05 100644 --- a/vcl/inc/vcl/builder.hxx +++ b/vcl/inc/vcl/builder.hxx @@ -98,6 +98,7 @@ private: typedef StringPair TextBufferMap; typedef StringPair WidgetAdjustmentMap; typedef StringPair ButtonMenuMap; + typedef StringPair MnemonicWidgetMap; struct ComboBoxModelMap { @@ -180,6 +181,8 @@ private: std::vector m_aSizeGroups; AtkMap m_aAtkInfo; + + std::vector m_aMnemonicWidgetMaps; }; void loadTranslations(const com::sun::star::lang::Locale &rLocale, const OUString &rUri); @@ -262,6 +265,7 @@ private: bool extractScrollAdjustment(const OString &id, stringmap &rVec); bool extractButtonImage(const OString &id, stringmap &rMap, bool bRadio); bool extractStock(const OString &id, stringmap &rMap); + void extractMnemonicWidget(const OString &id, stringmap &rMap); void handleTranslations(xmlreader::XmlReader &reader); diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index c5cef79384da..e56482374367 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -160,6 +160,17 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri handleChild(pParent, reader); + //Set Mnemonic widgets when everything has been imported + for (std::vector::iterator aI = m_pParserState->m_aMnemonicWidgetMaps.begin(), + aEnd = m_pParserState->m_aMnemonicWidgetMaps.end(); aI != aEnd; ++aI) + { + FixedText *pOne = get(aI->m_sID); + Window *pOther = get(aI->m_sValue); + SAL_WARN_IF(!pOne || !pOther, "vcl", "missing member of Mnemonic Widget Mapping"); + if (pOne && pOther) + pOne->set_mnemonic_widget(pOther); + } + //Set a11y relations when everything has been imported for (AtkMap::iterator aI = m_pParserState->m_aAtkInfo.begin(), aEnd = m_pParserState->m_aAtkInfo.end(); aI != aEnd; ++aI) @@ -781,6 +792,16 @@ bool VclBuilder::extractButtonImage(const OString &id, stringmap &rMap, bool bRa return false; } +void VclBuilder::extractMnemonicWidget(const OString &id, stringmap &rMap) +{ + VclBuilder::stringmap::iterator aFind = rMap.find(OString("mnemonic-widget")); + if (aFind != rMap.end()) + { + m_pParserState->m_aMnemonicWidgetMaps.push_back(MnemonicWidgetMap(id, aFind->second)); + rMap.erase(aFind); + } +} + Window* VclBuilder::prepareWidgetOwnScrolling(Window *pParent, WinBits &rWinStyle) { //For Widgets that manage their own scrolling, if one appears as a child of @@ -1011,6 +1032,7 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri } else if (name == "GtkLabel") { + extractMnemonicWidget(id, rMap); if (extractSelectable(rMap)) pWindow = new SelectableFixedText(pParent, WB_CENTER|WB_VCENTER|WB_3DLOOK); else -- cgit