summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2013-01-19 17:14:21 +0000
committerCaolán McNamara <caolanm@redhat.com>2013-01-19 20:59:42 +0000
commit253e439c347fae54e6c4731d432eef842a889c9d (patch)
tree5905a5c7dbbefdceb9fe062d1b0d9ebb25df5890 /vcl
parente3dfe8905fc3d7ec1d0dd0fc20ac1189d2636e53 (diff)
implement custom images for radiobuttons via VclBuilder
Change-Id: I17e1956d0ff50e027c83ee7dbb85e3316bb88bd3
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/vcl/builder.hxx17
-rw-r--r--vcl/source/control/button.cxx4
-rw-r--r--vcl/source/window/builder.cxx43
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")