diff options
author | Caolán McNamara <caolanm@redhat.com> | 2013-01-19 17:14:21 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-01-19 20:59:42 +0000 |
commit | 253e439c347fae54e6c4731d432eef842a889c9d (patch) | |
tree | 5905a5c7dbbefdceb9fe062d1b0d9ebb25df5890 /vcl | |
parent | e3dfe8905fc3d7ec1d0dd0fc20ac1189d2636e53 (diff) |
implement custom images for radiobuttons via VclBuilder
Change-Id: I17e1956d0ff50e027c83ee7dbb85e3316bb88bd3
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/vcl/builder.hxx | 17 | ||||
-rw-r--r-- | vcl/source/control/button.cxx | 4 | ||||
-rw-r--r-- | vcl/source/window/builder.cxx | 43 |
3 files changed, 54 insertions, 10 deletions
diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx index 96f588095e88..3bc96420055f 100644 --- a/vcl/inc/vcl/builder.hxx +++ b/vcl/inc/vcl/builder.hxx @@ -81,7 +81,20 @@ private: }; typedef StringPair RadioButtonGroupMap; - typedef StringPair ButtonImageWidgetMap; + + struct ButtonImageWidgetMap + { + OString m_sID; + OString m_sValue; + bool m_bRadio; + ButtonImageWidgetMap(const OString &rId, const OString &rValue, bool bRadio) + : m_sID(rId) + , m_sValue(rValue) + , m_bRadio(bRadio) + { + } + }; + typedef StringPair TextBufferMap; typedef StringPair WidgetAdjustmentMap; typedef StringPair ButtonMenuMap; @@ -242,7 +255,7 @@ private: bool extractBuffer(const OString &id, stringmap &rVec); bool extractSpinAdjustment(const OString &id, stringmap &rVec); bool extractScrollAdjustment(const OString &id, stringmap &rVec); - bool extractImage(const OString &id, stringmap &rMap); + bool extractButtonImage(const OString &id, stringmap &rMap, bool bRadio); bool extractStock(const OString &id, stringmap &rMap); void handleTranslations(xmlreader::XmlReader &reader); diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx index 16190b482913..d99c6cc64129 100644 --- a/vcl/source/control/button.cxx +++ b/vcl/source/control/button.cxx @@ -166,14 +166,15 @@ XubString Button::GetStandardHelpText( StandardButtonType /* eButton */ ) XubString aHelpText; return aHelpText; } + // ----------------------------------------------------------------------- sal_Bool Button::SetModeImage( const Image& rImage ) { if ( rImage != mpButtonData->maImage ) { mpButtonData->maImage = rImage; - StateChanged( STATE_CHANGE_DATA ); + queue_resize(); } return sal_True; } @@ -2815,6 +2816,7 @@ sal_Bool RadioButton::SetModeRadioImage( const Image& rImage ) { maImage = rImage; StateChanged( STATE_CHANGE_DATA ); + queue_resize(); } return sal_True; } diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 79a6204f6ce2..a18d0b286a68 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -242,7 +242,21 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri for (std::vector<ButtonImageWidgetMap>::iterator aI = m_pParserState->m_aButtonImageWidgetMaps.begin(), aEnd = m_pParserState->m_aButtonImageWidgetMaps.end(); aI != aEnd; ++aI) { - PushButton *pTarget = get<PushButton>(aI->m_sID); + PushButton *pTargetButton = NULL; + RadioButton *pTargetRadio = NULL; + Button *pTarget = NULL; + + if (!aI->m_bRadio) + { + pTargetButton = get<PushButton>(aI->m_sID); + pTarget = pTargetButton; + } + else + { + pTargetRadio = get<RadioButton>(aI->m_sID); + pTarget = pTargetRadio; + } + FixedImage *pImage = get<FixedImage>(aI->m_sValue); SAL_WARN_IF(!pTarget || !pImage, "vcl", "missing elements of button/image/stock"); @@ -252,7 +266,12 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri VclBuilder::StockMap::iterator aFind = m_pParserState->m_aStockMap.find(aI->m_sValue); if (aFind == m_pParserState->m_aStockMap.end()) - pTarget->SetModeImage(pImage->GetImage()); + { + if (!aI->m_bRadio) + pTargetButton->SetModeImage(pImage->GetImage()); + else + pTargetRadio->SetModeRadioImage(pImage->GetImage()); + } else { const stockinfo &rImageInfo = aFind->second; @@ -260,9 +279,18 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri SAL_WARN_IF(eType == SYMBOL_NOSYMBOL, "vcl", "missing stock image element for button"); if (eType == SYMBOL_NOSYMBOL) continue; - pTarget->SetSymbol(eType); + if (!aI->m_bRadio) + pTargetButton->SetSymbol(eType); + else + SAL_WARN_IF(eType != SYMBOL_IMAGE, "vcl.layout", "inimplemented symbol type for radiobuttons"); if (eType == SYMBOL_IMAGE) - pTarget->SetModeImage(Bitmap(VclResId(mapStockToImageResource(rImageInfo.m_sStock)))); + { + Bitmap aBitmap(VclResId(mapStockToImageResource(rImageInfo.m_sStock))); + if (!aI->m_bRadio) + pTargetButton->SetModeImage(aBitmap); + else + pTargetRadio->SetModeRadioImage(aBitmap); + } switch (rImageInfo.m_nSize) { case 1: @@ -712,12 +740,12 @@ bool VclBuilder::extractStock(const OString &id, stringmap &rMap) return false; } -bool VclBuilder::extractImage(const OString &id, stringmap &rMap) +bool VclBuilder::extractButtonImage(const OString &id, stringmap &rMap, bool bRadio) { VclBuilder::stringmap::iterator aFind = rMap.find(OString("image")); if (aFind != rMap.end()) { - m_pParserState->m_aButtonImageWidgetMaps.push_back(ButtonImageWidgetMap(id, aFind->second)); + m_pParserState->m_aButtonImageWidgetMaps.push_back(ButtonImageWidgetMap(id, aFind->second, bRadio)); rMap.erase(aFind); return true; } @@ -841,7 +869,7 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri pWindow = new VclAlignment(pParent); else if (name == "GtkButton") { - extractImage(id, rMap); + extractButtonImage(id, rMap, false); OString sMenu = extractCustomProperty(rMap); if (sMenu.isEmpty()) pWindow = extractStockAndBuildPushButton(pParent, rMap); @@ -854,6 +882,7 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri else if (name == "GtkRadioButton") { extractGroup(id, rMap); + extractButtonImage(id, rMap, true); pWindow = new RadioButton(pParent, WB_CENTER|WB_VCENTER|WB_3DLOOK); } else if (name == "GtkCheckButton") |