diff options
-rw-r--r-- | include/vcl/fixed.hxx | 2 | ||||
-rw-r--r-- | vcl/source/control/fixed.cxx | 23 | ||||
-rw-r--r-- | vcl/source/window/builder.cxx | 20 |
3 files changed, 34 insertions, 11 deletions
diff --git a/include/vcl/fixed.hxx b/include/vcl/fixed.hxx index d8379e5be6ca..50f184ed99c2 100644 --- a/include/vcl/fixed.hxx +++ b/include/vcl/fixed.hxx @@ -201,6 +201,8 @@ public: sal_Bool SetModeImage( const Image& rImage ); const Image& GetModeImage( ) const; virtual bool set_property(const OString &rKey, const OString &rValue); + + static Image loadThemeImage(const OString &rFileName); }; #endif // _SV_FIXED_HXX diff --git a/vcl/source/control/fixed.cxx b/vcl/source/control/fixed.cxx index 267bdcc9eea7..70bfac2fb1b9 100644 --- a/vcl/source/control/fixed.cxx +++ b/vcl/source/control/fixed.cxx @@ -1213,19 +1213,24 @@ const Image& FixedImage::GetModeImage( ) const return maImage; } +Image FixedImage::loadThemeImage(const OString &rFileName) +{ + static ImplImageTreeSingletonRef aImageTree; + OUString sCurrentSymbolsStyle = + Application::GetSettings().GetStyleSettings().GetCurrentSymbolsStyleName(); + const OUString sFileName(OStringToOUString(rFileName, RTL_TEXTENCODING_UTF8)); + BitmapEx aBitmap; + bool bSuccess = aImageTree->loadImage(sFileName, sCurrentSymbolsStyle, aBitmap, true); + SAL_WARN_IF(!bSuccess, "vcl.layout", "Unable to load " << sFileName + << " from theme " << sCurrentSymbolsStyle); + return Image(aBitmap); +} + bool FixedImage::set_property(const OString &rKey, const OString &rValue) { if (rKey == "pixbuf") { - static ImplImageTreeSingletonRef aImageTree; - OUString sCurrentSymbolsStyle = - Application::GetSettings().GetStyleSettings().GetCurrentSymbolsStyleName(); - const OUString sFileName(OStringToOUString(rValue, RTL_TEXTENCODING_UTF8)); - BitmapEx aBitmap; - bool bSuccess = aImageTree->loadImage(sFileName, sCurrentSymbolsStyle, aBitmap, true); - SAL_WARN_IF(!bSuccess, "vcl.layout", "Unable to load " << sFileName - << " from theme " << sCurrentSymbolsStyle); - SetImage(Image(aBitmap)); + SetImage(FixedImage::loadThemeImage(rValue)); } else return Control::set_property(rKey, rValue); diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 8641ed2fbcd9..21d45b6431cf 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -585,6 +585,18 @@ namespace return bInconsistent; } + OString extractIconName(VclBuilder::stringmap &rMap) + { + OString sIconName; + VclBuilder::stringmap::iterator aFind = rMap.find(OString("icon-name")); + if (aFind != rMap.end()) + { + sIconName = aFind->second; + rMap.erase(aFind); + } + return sIconName; + } + OUString getStockText(const OString &rType) { if (rType == "gtk-ok") @@ -1452,9 +1464,13 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri pToolBox->SetHelpId(nItemId, m_sHelpRoot + id); } - OUString sTooltip(OStringToOUString(extractTooltipText(rMap), RTL_TEXTENCODING_UTF8)); + OString sTooltip(extractTooltipText(rMap)); if (!sTooltip.isEmpty()) - pToolBox->SetQuickHelpText(nItemId, sTooltip); + pToolBox->SetQuickHelpText(nItemId, OStringToOUString(sTooltip, RTL_TEXTENCODING_UTF8)); + + OString sIconName(extractIconName(rMap)); + if (!sIconName.isEmpty()) + pToolBox->SetItemImage(nItemId, FixedImage::loadThemeImage(sIconName)); return NULL; // no widget to be created } |