summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2013-01-22 13:26:27 +0000
committerCaolán McNamara <caolanm@redhat.com>2013-01-22 16:29:40 +0000
commit9f53172abd921d03bb7b1c5b0e5cf29f2cd65965 (patch)
tree930060a9f0e02d77176518b28d4553b8c5eb6440 /vcl
parent9975c632c3bd142f295fc1d9b1fd6059c3a2dbcb (diff)
implement loading Mnemonic Widgets via VclBuilder
Change-Id: I62677c1140e58fbf4f27750389200eca78c9ba7e
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/vcl/builder.hxx4
-rw-r--r--vcl/source/window/builder.cxx22
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