diff options
author | Jan Holesovsky <kendy@suse.cz> | 2013-01-01 22:30:18 +0100 |
---|---|---|
committer | Jan Holesovsky <kendy@suse.cz> | 2013-03-04 16:19:32 +0100 |
commit | 8d98580ec89a014721b64a952cc1c68def76f581 (patch) | |
tree | 0247910c55988687a83db0c5576ddbf637055917 /vcl/source | |
parent | 95951c4b9d83952b6b8f8c0969b801d70091cb52 (diff) |
Personas: Read the bitmaps in StyleSettings.
Conflicts:
cui/source/options/personalization.cxx
vcl/inc/vcl/settings.hxx
vcl/source/app/settings.cxx
Change-Id: I52b67c82f69059a7d2babf1b49e59f27062cc02c
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/app/settings.cxx | 82 |
1 files changed, 77 insertions, 5 deletions
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx index dfdfa9554d3c..936818c59633 100644 --- a/vcl/source/app/settings.cxx +++ b/vcl/source/app/settings.cxx @@ -26,8 +26,13 @@ * ************************************************************************/ +#include <officecfg/Office/Common.hxx> + #include <svsys.h> +#include "comphelper/processfactory.hxx" +#include <rtl/bootstrap.hxx> #include "tools/debug.hxx" +#include <vcl/graphicfilter.hxx> #include "i18npool/mslangid.hxx" @@ -46,7 +51,7 @@ #include "unotools/confignode.hxx" #include "unotools/syslocaleoptions.hxx" -using ::rtl::OUString; +using namespace ::com::sun::star; #include "svdata.hxx" #include "impimagetree.hxx" @@ -206,7 +211,10 @@ sal_Bool MouseSettings::operator ==( const MouseSettings& rSet ) const // ======================================================================= -ImplStyleData::ImplStyleData() +ImplStyleData::ImplStyleData() : + maPersonaHeaderFooter(), + mpPersonaHeaderBitmap( NULL ), + mpPersonaFooterBitmap( NULL ) { mnRefCount = 1; mnScrollBarSize = 16; @@ -302,7 +310,10 @@ ImplStyleData::ImplStyleData( const ImplStyleData& rData ) : maFieldFont( rData.maFieldFont ), maIconFont( rData.maIconFont ), maGroupFont( rData.maGroupFont ), - maWorkspaceGradient( rData.maWorkspaceGradient ) + maWorkspaceGradient( rData.maWorkspaceGradient ), + maPersonaHeaderFooter( rData.maPersonaHeaderFooter ), + mpPersonaHeaderBitmap( NULL ), + mpPersonaFooterBitmap( NULL ) { mnRefCount = 1; mnBorderSize = rData.mnBorderSize; @@ -678,6 +689,67 @@ sal_Bool StyleSettings::GetUseImagesInMenus() const // ----------------------------------------------------------------------- +static BitmapEx* readBitmapEx( const rtl::OUString& rPath ) +{ + rtl::OUString aPath( rPath ); + rtl::Bootstrap::expandMacros( aPath ); + + // import the image + Graphic aGraphic; + if ( GraphicFilter::LoadGraphic( aPath, String(), aGraphic ) != GRFILTER_OK ) + return NULL; + + const BitmapEx& rBitmap( aGraphic.GetBitmapEx() ); + if ( rBitmap.IsEmpty() ) + return NULL; + + return new BitmapEx( rBitmap ); +} + +enum WhichPersona { PERSONA_HEADER, PERSONA_FOOTER }; + +/** Update the setting of the Persona header / footer in ImplStyleData */ +static void setupPersonaHeaderFooter( WhichPersona eWhich, rtl::OUString& /*rHeaderFooter*/, BitmapEx*& pHeaderFooterBitmap ) +{ + rtl::OUString aName; + switch ( eWhich ) { + case PERSONA_HEADER: aName = "header.jpg"; break; + case PERSONA_FOOTER: aName = "footer.jpg"; break; + } + + delete pHeaderFooterBitmap; + pHeaderFooterBitmap = NULL; + + if ( !aName.isEmpty() ) + { + // try the gallery first, then edition, and the program path if + // everything else fails + rtl::OUString gallery = "${$BRAND_BASE_DIR/program/" SAL_CONFIGFILE( "bootstrap") "::UserInstallation}"; + rtl::Bootstrap::expandMacros( gallery ); + gallery += "/user/gallery/personas/"; + + if ( !pHeaderFooterBitmap ) + pHeaderFooterBitmap = readBitmapEx( "$BRAND_BASE_DIR/program/edition/" + aName ); + + if ( !pHeaderFooterBitmap ) + pHeaderFooterBitmap = readBitmapEx( "$BRAND_BASE_DIR/program/" + aName ); + } +} + +const BitmapEx* StyleSettings::GetPersonaHeader() const +{ + setupPersonaHeaderFooter( PERSONA_HEADER, mpData->maPersonaHeaderFooter, mpData->mpPersonaHeaderBitmap ); + return mpData->mpPersonaHeaderBitmap; +} + +const BitmapEx* StyleSettings::GetPersonaFooter() const +{ + setupPersonaHeaderFooter( PERSONA_FOOTER, mpData->maPersonaHeaderFooter, mpData->mpPersonaFooterBitmap ); + return mpData->mpPersonaFooterBitmap; +} + +// ----------------------------------------------------------------------- + void StyleSettings::SetStandardStyles() { CopyData(); @@ -1508,11 +1580,11 @@ bool AllSettings::GetLayoutRTL() const nUIMirroring = 0; // ask configuration only once utl::OConfigurationNode aNode = utl::OConfigurationTreeRoot::tryCreateWithServiceFactory( vcl::unohelper::GetMultiServiceFactory(), - OUString("org.openoffice.Office.Common/I18N/CTL") ); // note: case sensisitive ! + rtl::OUString("org.openoffice.Office.Common/I18N/CTL") ); // note: case sensisitive ! if ( aNode.isValid() ) { sal_Bool bTmp = sal_Bool(); - ::com::sun::star::uno::Any aValue = aNode.getNodeValue( OUString("UIMirroring") ); + ::com::sun::star::uno::Any aValue = aNode.getNodeValue( rtl::OUString("UIMirroring") ); if( aValue >>= bTmp ) { // found true or false; if it was nil, nothing is changed |