diff options
author | Caolán McNamara <caolanm@redhat.com> | 2013-01-22 13:26:27 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-01-22 16:29:40 +0000 |
commit | 9f53172abd921d03bb7b1c5b0e5cf29f2cd65965 (patch) | |
tree | 930060a9f0e02d77176518b28d4553b8c5eb6440 | |
parent | 9975c632c3bd142f295fc1d9b1fd6059c3a2dbcb (diff) |
implement loading Mnemonic Widgets via VclBuilder
Change-Id: I62677c1140e58fbf4f27750389200eca78c9ba7e
-rw-r--r-- | vcl/inc/vcl/builder.hxx | 4 | ||||
-rw-r--r-- | vcl/source/window/builder.cxx | 22 |
2 files changed, 26 insertions, 0 deletions
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<SizeGroup> m_aSizeGroups; AtkMap m_aAtkInfo; + + std::vector<MnemonicWidgetMap> 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<MnemonicWidgetMap>::iterator aI = m_pParserState->m_aMnemonicWidgetMaps.begin(), + aEnd = m_pParserState->m_aMnemonicWidgetMaps.end(); aI != aEnd; ++aI) + { + FixedText *pOne = get<FixedText>(aI->m_sID); + Window *pOther = get<Window>(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 |