summaryrefslogtreecommitdiff
path: root/sdext/source/presenter/PresenterTheme.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sdext/source/presenter/PresenterTheme.cxx')
-rw-r--r--sdext/source/presenter/PresenterTheme.cxx1417
1 files changed, 0 insertions, 1417 deletions
diff --git a/sdext/source/presenter/PresenterTheme.cxx b/sdext/source/presenter/PresenterTheme.cxx
deleted file mode 100644
index f3d7dcb..0000000
--- a/sdext/source/presenter/PresenterTheme.cxx
+++ /dev/null
@@ -1,1417 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sdext.hxx"
-
-#include "PresenterTheme.hxx"
-#include "PresenterBitmapContainer.hxx"
-#include "PresenterCanvasHelper.hxx"
-#include "PresenterComponent.hxx"
-#include "PresenterConfigurationAccess.hxx"
-#include "PresenterHelper.hxx"
-#include <com/sun/star/awt/Point.hpp>
-#include <com/sun/star/beans/UnknownPropertyException.hpp>
-#include <com/sun/star/deployment/XPackageInformationProvider.hpp>
-#include <com/sun/star/drawing/XPresenterHelper.hpp>
-#include <com/sun/star/lang/IllegalArgumentException.hpp>
-#include <com/sun/star/rendering/PanoseWeight.hpp>
-#include <com/sun/star/rendering/XBitmap.hpp>
-#include <com/sun/star/util/Color.hpp>
-#include <boost/bind.hpp>
-#include <map>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::std;
-using ::rtl::OUString;
-
-#define A2S(s) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)))
-
-namespace sdext { namespace presenter {
-
-namespace {
-
-class BorderSize
-{
-public:
- const static sal_Int32 mnInvalidValue = -10000;
-
- BorderSize (void) : mnLeft(mnInvalidValue),
- mnTop(mnInvalidValue),
- mnRight(mnInvalidValue),
- mnBottom(mnInvalidValue) {}
-
- sal_Int32 mnLeft;
- sal_Int32 mnTop;
- sal_Int32 mnRight;
- sal_Int32 mnBottom;
-
- vector<sal_Int32> ToVector (void)
- {
- vector<sal_Int32> aSequence (4);
- aSequence[0] = mnLeft == mnInvalidValue ? 0 : mnLeft;
- aSequence[1] = mnTop == mnInvalidValue ? 0 : mnTop;
- aSequence[2] = mnRight == mnInvalidValue ? 0 : mnRight;
- aSequence[3] = mnBottom == mnInvalidValue ? 0 : mnBottom;
- return aSequence;
- };
-
-
- void Merge (const BorderSize& rBorderSize)
- {
- if (mnLeft == mnInvalidValue)
- mnLeft = rBorderSize.mnLeft;
- if (mnTop == mnInvalidValue)
- mnTop = rBorderSize.mnTop;
- if (mnRight == mnInvalidValue)
- mnRight = rBorderSize.mnRight;
- if (mnBottom == mnInvalidValue)
- mnBottom = rBorderSize.mnBottom;
- }
-};
-
-
-/** Reading a theme from the configurations is done in various classes. The
- ReadContext gives access to frequently used objects and functions to make
- the configuration handling easier.
-*/
-class ReadContext
-{
-public:
- Reference<XComponentContext> mxComponentContext;
- Reference<rendering::XCanvas> mxCanvas;
- Reference<drawing::XPresenterHelper> mxPresenterHelper;
- OUString msBasePath;
-
- ReadContext (
- const Reference<XComponentContext>& rxContext,
- const Reference<rendering::XCanvas>& rxCanvas);
- ~ReadContext (void);
-
- /** Read data describing a font from the node that can be reached from
- the given root via the given path.
- @param rsFontPath
- May be empty.
- */
- static PresenterTheme::SharedFontDescriptor ReadFont (
- const css::uno::Reference<css::container::XHierarchicalNameAccess>& rxTheme,
- const ::rtl::OUString& rsFontPath,
- const PresenterTheme::SharedFontDescriptor& rpDefault);
- static PresenterTheme::SharedFontDescriptor ReadFont (
- const Reference<beans::XPropertySet>& rxFontProperties,
- const PresenterTheme::SharedFontDescriptor& rpDefault);
-
- ::boost::shared_ptr<PresenterTheme::Theme> ReadTheme (
- PresenterConfigurationAccess& rConfiguration,
- const OUString& rsThemeName);
-
- BorderSize ReadBorderSize (const Reference<container::XNameAccess>& rxNode);
-
- void SetBitmapSourceExtension (const OUString& rsExtensionName);
-
-private:
- Any GetByName (
- const Reference<container::XNameAccess>& rxNode,
- const OUString& rsName) const;
-};
-
-
-
-
-/** A PaneStyle describes how a pane is rendered.
-*/
-class PaneStyle
-{
-public:
- PaneStyle (void);
- ~PaneStyle (void);
-
- const SharedBitmapDescriptor GetBitmap (const OUString& sBitmapName) const;
-
- OUString msStyleName;
- ::boost::shared_ptr<PaneStyle> mpParentStyle;
- PresenterTheme::SharedFontDescriptor mpFont;
- BorderSize maInnerBorderSize;
- BorderSize maOuterBorderSize;
- ::boost::shared_ptr<PresenterBitmapContainer> mpBitmaps;
-
- PresenterTheme::SharedFontDescriptor GetFont (void) const;
-
-private:
-
- void UpdateBorderSize (BorderSize& rBorderSize, bool bInner);
-};
-
-typedef ::boost::shared_ptr<PaneStyle> SharedPaneStyle;
-
-
-
-
-class PaneStyleContainer : vector<SharedPaneStyle>
-{
-public:
- void Read (
- ReadContext& rReadContext,
- const Reference<container::XHierarchicalNameAccess>& rThemeRoot);
-
- SharedPaneStyle GetPaneStyle (const OUString& rsStyleName) const;
-
-private:
- void ProcessPaneStyle (
- ReadContext& rReadContext,
- const ::rtl::OUString& rsKey,
- const ::std::vector<css::uno::Any>& rValues);
-};
-
-
-
-
-/** A ViewStyle describes how a view is displayed.
-*/
-class ViewStyle
-{
-public:
- ViewStyle (void);
- ~ViewStyle (void);
-
- const SharedBitmapDescriptor GetBitmap (const OUString& sBitmapName) const;
-
- PresenterTheme::SharedFontDescriptor GetFont (void) const;
-
- OUString msStyleName;
- ::boost::shared_ptr<ViewStyle> mpParentStyle;
- PresenterTheme::SharedFontDescriptor mpFont;
- ::boost::shared_ptr<PresenterBitmapContainer> mpBitmaps;
- SharedBitmapDescriptor mpBackground;
-};
-
-typedef ::boost::shared_ptr<ViewStyle> SharedViewStyle;
-
-
-
-
-class ViewStyleContainer : vector<SharedViewStyle>
-{
-public:
- void Read (
- ReadContext& rReadContext,
- const Reference<container::XHierarchicalNameAccess>& rThemeRoot);
-
- SharedViewStyle GetViewStyle (const OUString& rsStyleName) const;
-
-private:
- void ProcessViewStyle(
- ReadContext& rReadContext,
- const Reference<beans::XPropertySet>& rxProperties);
-};
-
-
-
-
-class ViewDescriptor
-{
-};
-typedef ::boost::shared_ptr<ViewDescriptor> SharedViewDescriptor;
-typedef ::std::vector<SharedViewDescriptor> ViewDescriptorContainer;
-
-
-
-class StyleAssociationContainer
-{
-public:
- void Read (
- ReadContext& rReadContext,
- const Reference<container::XHierarchicalNameAccess>& rThemeRoot);
-
- OUString GetStyleName (const OUString& rsResourceName) const;
-
-private:
- typedef map<OUString, OUString> StyleAssociations;
- StyleAssociations maStyleAssociations;
-
- void ProcessStyleAssociation(
- ReadContext& rReadContext,
- const ::rtl::OUString& rsKey,
- const ::std::vector<css::uno::Any>& rValues);
-};
-
-} // end of anonymous namespace
-
-
-class PresenterTheme::Theme
-{
-public:
- Theme (
- const OUString& rsName,
- const Reference<container::XHierarchicalNameAccess>& rThemeRoot,
- const OUString& rsNodeName);
- ~Theme (void);
-
- void Read (
- PresenterConfigurationAccess& rConfiguration,
- ReadContext& rReadContext);
-
- OUString msThemeName;
- OUString msConfigurationNodeName;
- ::boost::shared_ptr<Theme> mpParentTheme;
- SharedBitmapDescriptor mpBackground;
- PaneStyleContainer maPaneStyles;
- ViewStyleContainer maViewStyles;
- ViewDescriptorContainer maViewDescriptors;
- StyleAssociationContainer maStyleAssociations;
- Reference<container::XHierarchicalNameAccess> mxThemeRoot;
- ::boost::shared_ptr<PresenterBitmapContainer> mpIconContainer;
- typedef map<rtl::OUString,SharedFontDescriptor> FontContainer;
- FontContainer maFontContainer;
-
- SharedPaneStyle GetPaneStyle (const OUString& rsStyleName) const;
- SharedViewStyle GetViewStyle (const OUString& rsStyleName) const;
-
-private:
- void ProcessFont(
- ReadContext& rReadContext,
- const OUString& rsKey,
- const Reference<beans::XPropertySet>& rxProperties);
-};
-
-
-
-
-//===== PresenterTheme ========================================================
-
-PresenterTheme::PresenterTheme (
- const css::uno::Reference<css::uno::XComponentContext>& rxContext,
- const rtl::OUString& rsThemeName,
- const css::uno::Reference<css::rendering::XCanvas>& rxCanvas)
- : mxContext(rxContext),
- msThemeName(rsThemeName),
- mpTheme(),
- mpBitmapContainer(),
- mxCanvas(rxCanvas)
-{
- mpTheme = ReadTheme();
-}
-
-
-
-
-PresenterTheme::~PresenterTheme (void)
-{
-}
-
-
-
-
-void SAL_CALL PresenterTheme::disposing (void)
-{
-}
-
-
-
-
-::boost::shared_ptr<PresenterTheme::Theme> PresenterTheme::ReadTheme (void)
-{
- ReadContext aReadContext(mxContext, mxCanvas);
-
- PresenterConfigurationAccess aConfiguration (
- mxContext,
- OUString(RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Office.extension.PresenterScreen/")),
- PresenterConfigurationAccess::READ_ONLY);
-
- return aReadContext.ReadTheme(aConfiguration, msThemeName);
-}
-
-
-
-
-bool PresenterTheme::HasCanvas (void) const
-{
- return mxCanvas.is();
-}
-
-
-
-
-void PresenterTheme::ProvideCanvas (const Reference<rendering::XCanvas>& rxCanvas)
-{
- if ( ! mxCanvas.is() && rxCanvas.is())
- {
- mxCanvas = rxCanvas;
- ReadTheme();
- }
-}
-
-
-
-
-OUString PresenterTheme::GetStyleName (const ::rtl::OUString& rsResourceURL) const
-{
- OUString sStyleName;
- ::boost::shared_ptr<Theme> pTheme (mpTheme);
- while (sStyleName.getLength()==0 && pTheme.get()!=NULL)
- {
- sStyleName = pTheme->maStyleAssociations.GetStyleName(rsResourceURL);
- pTheme = pTheme->mpParentTheme;
- }
- return sStyleName;
-}
-
-
-
-
-::std::vector<sal_Int32> PresenterTheme::GetBorderSize (
- const ::rtl::OUString& rsStyleName,
- const bool bOuter) const
-{
- OSL_ASSERT(mpTheme.get() != NULL);
-
- SharedPaneStyle pPaneStyle (mpTheme->GetPaneStyle(rsStyleName));
- if (pPaneStyle.get() != NULL)
- if (bOuter)
- return pPaneStyle->maOuterBorderSize.ToVector();
- else
- return pPaneStyle->maInnerBorderSize.ToVector();
- else
- {
- return ::std::vector<sal_Int32>(4,0);
- }
-}
-
-
-
-
-PresenterTheme::SharedFontDescriptor PresenterTheme::ReadFont (
- const Reference<container::XHierarchicalNameAccess>& rxNode,
- const OUString& rsFontPath,
- const PresenterTheme::SharedFontDescriptor& rpDefault)
-{
- return ReadContext::ReadFont(rxNode, rsFontPath, rpDefault);
-}
-
-
-
-
-bool PresenterTheme::ConvertToColor (
- const Any& rColorSequence,
- sal_uInt32& rColor)
-{
- Sequence<sal_Int8> aByteSequence;
- if (rColorSequence >>= aByteSequence)
- {
- const sal_Int32 nByteCount (aByteSequence.getLength());
- const sal_uInt8* pArray = reinterpret_cast<const sal_uInt8*>(aByteSequence.getConstArray());
- rColor = 0;
- for (sal_Int32 nIndex=0; nIndex<nByteCount; ++nIndex)
- {
- rColor = (rColor << 8) | *pArray++;
- }
- return true;
- }
- else
- return false;
-}
-
-
-
-
-::boost::shared_ptr<PresenterConfigurationAccess> PresenterTheme::GetNodeForViewStyle (
- const ::rtl::OUString& rsStyleName,
- const PresenterConfigurationAccess::WriteMode) const
-{
- if (mpTheme.get() == NULL)
- return ::boost::shared_ptr<PresenterConfigurationAccess>();
-
- // Open configuration for writing.
- ::boost::shared_ptr<PresenterConfigurationAccess> pConfiguration (
- new PresenterConfigurationAccess(
- mxContext,
- OUString(RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Office.extension.PresenterScreen/")),
- PresenterConfigurationAccess::READ_WRITE));
-
- // Get configuration node for the view style container of the current
- // theme.
- if (pConfiguration->GoToChild(
- A2S("Presenter/Themes/") + mpTheme->msConfigurationNodeName + A2S("/ViewStyles")))
- {
- pConfiguration->GoToChild(
- ::boost::bind(&PresenterConfigurationAccess::IsStringPropertyEqual,
- rsStyleName,
- A2S("StyleName"),
- _2));
- }
- return pConfiguration;
-}
-
-
-
-
-::rtl::OUString PresenterTheme::GetThemeName (void) const
-{
- if (mpTheme.get() != NULL)
- return mpTheme->msThemeName;
- else
- return OUString();
-}
-
-
-
-
-SharedBitmapDescriptor PresenterTheme::GetBitmap (
- const OUString& rsStyleName,
- const OUString& rsBitmapName) const
-{
- if (mpTheme.get() != NULL)
- {
- if (rsStyleName.getLength() == 0)
- {
- if (rsBitmapName == A2S("Background"))
- {
- ::boost::shared_ptr<Theme> pTheme (mpTheme);
- while (pTheme.get()!=NULL && pTheme->mpBackground.get()==NULL)
- pTheme = pTheme->mpParentTheme;
- if (pTheme.get() != NULL)
- return pTheme->mpBackground;
- else
- return SharedBitmapDescriptor();
- }
- }
- else
- {
- SharedPaneStyle pPaneStyle (mpTheme->GetPaneStyle(rsStyleName));
- if (pPaneStyle.get() != NULL)
- {
- SharedBitmapDescriptor pBitmap (pPaneStyle->GetBitmap(rsBitmapName));
- if (pBitmap.get() != NULL)
- return pBitmap;
- }
-
- SharedViewStyle pViewStyle (mpTheme->GetViewStyle(rsStyleName));
- if (pViewStyle.get() != NULL)
- {
- SharedBitmapDescriptor pBitmap (pViewStyle->GetBitmap(rsBitmapName));
- if (pBitmap.get() != NULL)
- return pBitmap;
- }
- }
- }
-
- return SharedBitmapDescriptor();
-}
-
-
-
-
-SharedBitmapDescriptor PresenterTheme::GetBitmap (
- const OUString& rsBitmapName) const
-{
- if (mpTheme.get() != NULL)
- {
- if (rsBitmapName == A2S("Background"))
- {
- ::boost::shared_ptr<Theme> pTheme (mpTheme);
- while (pTheme.get()!=NULL && pTheme->mpBackground.get()==NULL)
- pTheme = pTheme->mpParentTheme;
- if (pTheme.get() != NULL)
- return pTheme->mpBackground;
- else
- return SharedBitmapDescriptor();
- }
- else
- {
- if (mpTheme->mpIconContainer.get() != NULL)
- return mpTheme->mpIconContainer->GetBitmap(rsBitmapName);
- }
- }
-
- return SharedBitmapDescriptor();
-}
-
-
-
-
-::boost::shared_ptr<PresenterBitmapContainer> PresenterTheme::GetBitmapContainer (void) const
-{
- if (mpTheme.get() != NULL)
- return mpTheme->mpIconContainer;
- else
- return ::boost::shared_ptr<PresenterBitmapContainer>();
-}
-
-
-
-
-PresenterTheme::SharedFontDescriptor PresenterTheme::GetFont (
- const OUString& rsStyleName) const
-{
- if (mpTheme.get() != NULL)
- {
- SharedPaneStyle pPaneStyle (mpTheme->GetPaneStyle(rsStyleName));
- if (pPaneStyle.get() != NULL)
- return pPaneStyle->GetFont();
-
- SharedViewStyle pViewStyle (mpTheme->GetViewStyle(rsStyleName));
- if (pViewStyle.get() != NULL)
- return pViewStyle->GetFont();
-
- ::boost::shared_ptr<Theme> pTheme (mpTheme);
- while (pTheme.get() != NULL)
- {
- Theme::FontContainer::const_iterator iFont (pTheme->maFontContainer.find(rsStyleName));
- if (iFont != pTheme->maFontContainer.end())
- return iFont->second;
-
- pTheme = pTheme->mpParentTheme;
- }
- }
-
- return SharedFontDescriptor();
-}
-
-
-
-
-//===== FontDescriptor ========================================================
-
-PresenterTheme::FontDescriptor::FontDescriptor (void)
- : msFamilyName(),
- msStyleName(),
- mnSize(12),
- mnColor(0x00000000),
- msAnchor(OUString(RTL_CONSTASCII_USTRINGPARAM("Left"))),
- mnXOffset(0),
- mnYOffset(0)
-{
-}
-
-
-
-
-PresenterTheme::FontDescriptor::FontDescriptor (
- const ::boost::shared_ptr<FontDescriptor>& rpDescriptor)
- : msFamilyName(),
- msStyleName(),
- mnSize(12),
- mnColor(0x00000000),
- msAnchor(OUString(RTL_CONSTASCII_USTRINGPARAM("Left"))),
- mnXOffset(0),
- mnYOffset(0)
-{
- if (rpDescriptor.get() != NULL)
- {
- msFamilyName = rpDescriptor->msFamilyName;
- msStyleName = rpDescriptor->msStyleName;
- mnSize = rpDescriptor->mnSize;
- mnColor = rpDescriptor->mnColor;
- msAnchor = rpDescriptor->msAnchor;
- mnXOffset = rpDescriptor->mnXOffset;
- mnYOffset = rpDescriptor->mnYOffset;
- }
-}
-
-
-
-
-bool PresenterTheme::FontDescriptor::PrepareFont (
- const Reference<rendering::XCanvas>& rxCanvas)
-{
- if (mxFont.is())
- return true;
-
- if ( ! rxCanvas.is())
- return false;
-
-
- const double nCellSize (GetCellSizeForDesignSize(rxCanvas, mnSize));
- mxFont = CreateFont(rxCanvas, nCellSize);
-
- return mxFont.is();
-}
-
-
-
-
-Reference<rendering::XCanvasFont> PresenterTheme::FontDescriptor::CreateFont (
- const Reference<rendering::XCanvas>& rxCanvas,
- const double nCellSize) const
-{
- rendering::FontRequest aFontRequest;
- aFontRequest.FontDescription.FamilyName = msFamilyName;
- if (msFamilyName.getLength() == 0)
- aFontRequest.FontDescription.FamilyName = A2S("Tahoma");
- aFontRequest.FontDescription.StyleName = msStyleName;
- aFontRequest.CellSize = nCellSize;
-
- // Make an attempt at translating the style name(s)into a corresponding
- // font description.
- if (msStyleName == A2S("Bold"))
- aFontRequest.FontDescription.FontDescription.Weight = rendering::PanoseWeight::HEAVY;
-
- return rxCanvas->createFont(
- aFontRequest,
- Sequence<beans::PropertyValue>(),
- geometry::Matrix2D(1,0,0,1));
-}
-
-
-
-
-double PresenterTheme::FontDescriptor::GetCellSizeForDesignSize (
- const Reference<rendering::XCanvas>& rxCanvas,
- const double nDesignSize) const
-{
- // Use the given design size as initial value in calculating the cell
- // size.
- double nCellSize (nDesignSize);
-
- if ( ! rxCanvas.is())
- {
- // We need the canvas to do the conversion. Return the design size,
- // it is the our best guess in this circumstance.
- return nDesignSize;
- }
-
- Reference<rendering::XCanvasFont> xFont (CreateFont(rxCanvas, nCellSize));
- if ( ! xFont.is())
- return nDesignSize;
-
- geometry::RealRectangle2D aBox (PresenterCanvasHelper::GetTextBoundingBox (xFont, A2S("X")));
-
- const double nAscent (-aBox.Y1);
- const double nDescent (aBox.Y2);
- const double nScale = (nAscent+nDescent) / nAscent;
- return nDesignSize * nScale;
-}
-
-
-
-
-//===== Theme =================================================================
-
-PresenterTheme::Theme::Theme (
- const OUString& rsName,
- const Reference<container::XHierarchicalNameAccess>& rxThemeRoot,
- const OUString& rsNodeName)
- : msThemeName(rsName),
- msConfigurationNodeName(rsNodeName),
- mpParentTheme(),
- maPaneStyles(),
- maViewStyles(),
- maStyleAssociations(),
- mxThemeRoot(rxThemeRoot),
- mpIconContainer()
-{
-}
-
-
-
-
-PresenterTheme::Theme::~Theme (void)
-{
-}
-
-
-
-
-void PresenterTheme::Theme::Read (
- PresenterConfigurationAccess& rConfiguration,
- ReadContext& rReadContext)
-{
- PresenterConfigurationAccess::GetConfigurationNode(mxThemeRoot, A2S("ThemeName"))
- >>= msThemeName;
-
- // Parent theme name.
- OUString sParentThemeName;
- if ((PresenterConfigurationAccess::GetConfigurationNode(mxThemeRoot, A2S("ParentTheme"))
- >>= sParentThemeName)
- && sParentThemeName.getLength()>0)
- {
- mpParentTheme = rReadContext.ReadTheme(rConfiguration, sParentThemeName);
- }
-
- // Read the extension that contains the bitmaps referenced in this
- // theme.
- OUString sBitmapSourceExtension;
- if ((PresenterConfigurationAccess::GetConfigurationNode(
- mxThemeRoot, A2S("BitmapSourceExtension")) >>= sBitmapSourceExtension)
- && sBitmapSourceExtension.getLength()>0)
- {
- rReadContext.SetBitmapSourceExtension(sBitmapSourceExtension);
- }
- else
- {
- rReadContext.SetBitmapSourceExtension(PresenterComponent::gsExtensionIdentifier);
- }
-
- // Background.
- mpBackground = PresenterBitmapContainer::LoadBitmap(
- mxThemeRoot,
- A2S("Background"),
- rReadContext.mxPresenterHelper,
- rReadContext.msBasePath,
- rReadContext.mxCanvas,
- SharedBitmapDescriptor());
-
- // Style associations.
- maStyleAssociations.Read(rReadContext, mxThemeRoot);
-
- // Pane styles.
- maPaneStyles.Read(rReadContext, mxThemeRoot);
-
- // View styles.
- maViewStyles.Read(rReadContext, mxThemeRoot);
-
- // Read bitmaps.
- mpIconContainer.reset(
- new PresenterBitmapContainer(
- Reference<container::XNameAccess>(
- PresenterConfigurationAccess::GetConfigurationNode(mxThemeRoot, A2S("Bitmaps")),
- UNO_QUERY),
- mpParentTheme.get()!=NULL
- ? mpParentTheme->mpIconContainer
- : ::boost::shared_ptr<PresenterBitmapContainer>(),
- rReadContext.mxComponentContext,
- rReadContext.mxCanvas,
- rReadContext.msBasePath));
-
- // Read fonts.
- Reference<container::XNameAccess> xFontNode(
- PresenterConfigurationAccess::GetConfigurationNode(mxThemeRoot, A2S("Fonts")),
- UNO_QUERY);
- PresenterConfigurationAccess::ForAll(
- xFontNode,
- ::boost::bind(&PresenterTheme::Theme::ProcessFont,
- this, ::boost::ref(rReadContext), _1, _2));
-}
-
-
-
-
-SharedPaneStyle PresenterTheme::Theme::GetPaneStyle (const OUString& rsStyleName) const
-{
- SharedPaneStyle pPaneStyle (maPaneStyles.GetPaneStyle(rsStyleName));
- if (pPaneStyle.get() != NULL)
- return pPaneStyle;
- else if (mpParentTheme.get() != NULL)
- return mpParentTheme->GetPaneStyle(rsStyleName);
- else
- return SharedPaneStyle();
-}
-
-
-
-
-SharedViewStyle PresenterTheme::Theme::GetViewStyle (const OUString& rsStyleName) const
-{
- SharedViewStyle pViewStyle (maViewStyles.GetViewStyle(rsStyleName));
- if (pViewStyle.get() != NULL)
- return pViewStyle;
- else if (mpParentTheme.get() != NULL)
- return mpParentTheme->GetViewStyle(rsStyleName);
- else
- return SharedViewStyle();
-}
-
-
-
-
-void PresenterTheme::Theme::ProcessFont(
- ReadContext& rReadContext,
- const OUString& rsKey,
- const Reference<beans::XPropertySet>& rxProperties)
-{
- (void)rReadContext;
- maFontContainer[rsKey] = ReadContext::ReadFont(rxProperties, SharedFontDescriptor());
-}
-
-
-
-
-namespace {
-
-//===== ReadContext ===========================================================
-
-ReadContext::ReadContext (
- const css::uno::Reference<css::uno::XComponentContext>& rxContext,
- const Reference<rendering::XCanvas>& rxCanvas)
- : mxComponentContext(rxContext),
- mxCanvas(rxCanvas),
- mxPresenterHelper(),
- msBasePath()
-{
- Reference<lang::XMultiComponentFactory> xFactory (rxContext->getServiceManager());
- if (xFactory.is())
- {
- mxPresenterHelper = Reference<drawing::XPresenterHelper>(
- xFactory->createInstanceWithContext(
- OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Draw.PresenterHelper")),
- rxContext),
- UNO_QUERY_THROW);
- }
-
- // Get base path to bitmaps.
- SetBitmapSourceExtension(PresenterComponent::gsExtensionIdentifier);
-}
-
-
-
-
-ReadContext::~ReadContext (void)
-{
-}
-
-
-
-
-PresenterTheme::SharedFontDescriptor ReadContext::ReadFont (
- const Reference<container::XHierarchicalNameAccess>& rxNode,
- const OUString& rsFontPath,
- const PresenterTheme::SharedFontDescriptor& rpDefault)
-{
- if ( ! rxNode.is())
- return PresenterTheme::SharedFontDescriptor();
-
- try
- {
- Reference<container::XHierarchicalNameAccess> xFont (
- PresenterConfigurationAccess::GetConfigurationNode(
- rxNode,
- rsFontPath),
- UNO_QUERY_THROW);
-
- Reference<beans::XPropertySet> xProperties (xFont, UNO_QUERY_THROW);
- return ReadFont(xProperties, rpDefault);
- }
- catch (Exception&)
- {
- OSL_ASSERT(false);
- }
-
- return PresenterTheme::SharedFontDescriptor();
-}
-
-
-
-
-PresenterTheme::SharedFontDescriptor ReadContext::ReadFont (
- const Reference<beans::XPropertySet>& rxProperties,
- const PresenterTheme::SharedFontDescriptor& rpDefault)
-{
- ::boost::shared_ptr<PresenterTheme::FontDescriptor> pDescriptor (
- new PresenterTheme::FontDescriptor(rpDefault));
-
- PresenterConfigurationAccess::GetProperty(rxProperties, A2S("FamilyName")) >>= pDescriptor->msFamilyName;
- PresenterConfigurationAccess::GetProperty(rxProperties, A2S("Style")) >>= pDescriptor->msStyleName;
- PresenterConfigurationAccess::GetProperty(rxProperties, A2S("Size")) >>= pDescriptor->mnSize;
- PresenterTheme::ConvertToColor(
- PresenterConfigurationAccess::GetProperty(rxProperties, A2S("Color")),
- pDescriptor->mnColor);
- PresenterConfigurationAccess::GetProperty(rxProperties, A2S("Anchor")) >>= pDescriptor->msAnchor;
- PresenterConfigurationAccess::GetProperty(rxProperties, A2S("XOffset")) >>= pDescriptor->mnXOffset;
- PresenterConfigurationAccess::GetProperty(rxProperties, A2S("YOffset")) >>= pDescriptor->mnYOffset;
-
- return pDescriptor;
-}
-
-
-
-
-Any ReadContext::GetByName (
- const Reference<container::XNameAccess>& rxNode,
- const OUString& rsName) const
-{
- OSL_ASSERT(rxNode.is());
- if (rxNode->hasByName(rsName))
- return rxNode->getByName(rsName);
- else
- return Any();
-}
-
-
-
-
-::boost::shared_ptr<PresenterTheme::Theme> ReadContext::ReadTheme (
- PresenterConfigurationAccess& rConfiguration,
- const OUString& rsThemeName)
-{
- ::boost::shared_ptr<PresenterTheme::Theme> pTheme;
-
- OUString sCurrentThemeName (rsThemeName);
- if (sCurrentThemeName.getLength() == 0)
- {
- // No theme name given. Look up the CurrentTheme property.
- rConfiguration.GetConfigurationNode(A2S("Presenter/CurrentTheme")) >>= sCurrentThemeName;
- if (sCurrentThemeName.getLength() == 0)
- {
- // Still no name. Use "DefaultTheme".
- sCurrentThemeName = A2S("DefaultTheme");
- }
- }
-
- Reference<container::XNameAccess> xThemes (
- rConfiguration.GetConfigurationNode(A2S("Presenter/Themes")),
- UNO_QUERY);
- if (xThemes.is())
- {
- // Iterate over all themes and search the one with the given name.
- Sequence<OUString> aKeys (xThemes->getElementNames());
- for (sal_Int32 nItemIndex=0; nItemIndex<aKeys.getLength(); ++nItemIndex)
- {
- const OUString& rsKey (aKeys[nItemIndex]);
- Reference<container::XHierarchicalNameAccess> xTheme (
- xThemes->getByName(rsKey), UNO_QUERY);
- if (xTheme.is())
- {
- OUString sThemeName;
- PresenterConfigurationAccess::GetConfigurationNode(xTheme, A2S("ThemeName"))
- >>= sThemeName;
- if (sThemeName == sCurrentThemeName)
- {
- pTheme.reset(new PresenterTheme::Theme(sThemeName,xTheme,rsKey));
- break;
- }
- }
- }
- }
-
- if (pTheme.get() != NULL)
- {
- pTheme->Read(rConfiguration, *this);
- }
-
- return pTheme;
-}
-
-
-
-
-BorderSize ReadContext::ReadBorderSize (const Reference<container::XNameAccess>& rxNode)
-{
- BorderSize aBorderSize;
-
- if (rxNode.is())
- {
- GetByName(rxNode, A2S("Left")) >>= aBorderSize.mnLeft;
- GetByName(rxNode, A2S("Top")) >>= aBorderSize.mnTop;
- GetByName(rxNode, A2S("Right")) >>= aBorderSize.mnRight;
- GetByName(rxNode, A2S("Bottom")) >>= aBorderSize.mnBottom;
- }
-
- return aBorderSize;
-}
-
-
-
-
-void ReadContext::SetBitmapSourceExtension (const OUString& rsExtensionIdentifier)
-{
- // Get base path to bitmaps.
- msBasePath = PresenterComponent::GetBasePath(mxComponentContext, rsExtensionIdentifier);
-}
-
-
-
-
-//===== PaneStyleContainer ====================================================
-
-void PaneStyleContainer::Read (
- ReadContext& rReadContext,
- const Reference<container::XHierarchicalNameAccess>& rxThemeRoot)
-{
- Reference<container::XNameAccess> xPaneStyleList (
- PresenterConfigurationAccess::GetConfigurationNode(
- rxThemeRoot,
- A2S("PaneStyles")),
- UNO_QUERY);
- if (xPaneStyleList.is())
- {
- ::std::vector<rtl::OUString> aProperties;
- aProperties.reserve(6);
- aProperties.push_back(A2S("StyleName"));
- aProperties.push_back(A2S("ParentStyle"));
- aProperties.push_back(A2S("TitleFont"));
- aProperties.push_back(A2S("InnerBorderSize"));
- aProperties.push_back(A2S("OuterBorderSize"));
- aProperties.push_back(A2S("BorderBitmapList"));
- PresenterConfigurationAccess::ForAll(
- xPaneStyleList,
- aProperties,
- ::boost::bind(&PaneStyleContainer::ProcessPaneStyle,
- this, ::boost::ref(rReadContext), _1, _2));
- }
-}
-
-
-
-
-void PaneStyleContainer::ProcessPaneStyle(
- ReadContext& rReadContext,
- const OUString& rsKey,
- const ::std::vector<Any>& rValues)
-{
- (void)rsKey;
-
- if (rValues.size() != 6)
- return;
-
- ::boost::shared_ptr<PaneStyle> pStyle (new PaneStyle());
-
- rValues[0] >>= pStyle->msStyleName;
-
- OUString sParentStyleName;
- if (rValues[1] >>= sParentStyleName)
- {
- // Find parent style.
- PaneStyleContainer::const_iterator iStyle;
- for (iStyle=begin(); iStyle!=end(); ++iStyle)
- if ((*iStyle)->msStyleName.equals(sParentStyleName))
- {
- pStyle->mpParentStyle = *iStyle;
- break;
- }
- }
-
- Reference<container::XHierarchicalNameAccess> xFontNode (rValues[2], UNO_QUERY);
- pStyle->mpFont = rReadContext.ReadFont(
- xFontNode, A2S(""), PresenterTheme::SharedFontDescriptor());
-
- Reference<container::XNameAccess> xInnerBorderSizeNode (rValues[3], UNO_QUERY);
- pStyle->maInnerBorderSize = rReadContext.ReadBorderSize(xInnerBorderSizeNode);
- Reference<container::XNameAccess> xOuterBorderSizeNode (rValues[4], UNO_QUERY);
- pStyle->maOuterBorderSize = rReadContext.ReadBorderSize(xOuterBorderSizeNode);
-
- if (pStyle->mpParentStyle.get() != NULL)
- {
- pStyle->maInnerBorderSize.Merge(pStyle->mpParentStyle->maInnerBorderSize);
- pStyle->maOuterBorderSize.Merge(pStyle->mpParentStyle->maOuterBorderSize);
- }
-
- if (rReadContext.mxCanvas.is())
- {
- Reference<container::XNameAccess> xBitmapsNode (rValues[5], UNO_QUERY);
- pStyle->mpBitmaps.reset(new PresenterBitmapContainer(
- xBitmapsNode,
- pStyle->mpParentStyle.get()!=NULL
- ? pStyle->mpParentStyle->mpBitmaps
- : ::boost::shared_ptr<PresenterBitmapContainer>(),
- rReadContext.mxComponentContext,
- rReadContext.mxCanvas,
- rReadContext.msBasePath,
- rReadContext.mxPresenterHelper));
- }
-
- push_back(pStyle);
-}
-
-
-
-
-SharedPaneStyle PaneStyleContainer::GetPaneStyle (const OUString& rsStyleName) const
-{
- const_iterator iEnd (end());
- for (const_iterator iStyle=begin(); iStyle!=iEnd; ++iStyle)
- if ((*iStyle)->msStyleName == rsStyleName)
- return *iStyle;
- return SharedPaneStyle();
-}
-
-
-
-
-//===== PaneStyle =============================================================
-
-PaneStyle::PaneStyle (void)
- : msStyleName(),
- mpParentStyle(),
- mpFont(),
- maInnerBorderSize(),
- maOuterBorderSize(),
- mpBitmaps()
-{
-}
-
-
-
-
-PaneStyle::~PaneStyle (void)
-{
-}
-
-
-
-
-void PaneStyle::UpdateBorderSize (BorderSize& rBorderSize, bool bInner)
-{
- if (mpParentStyle.get() != NULL)
- mpParentStyle->UpdateBorderSize(rBorderSize, bInner);
-
- BorderSize& rThisBorderSize (bInner ? maInnerBorderSize : maOuterBorderSize);
- if (rThisBorderSize.mnLeft >= 0)
- rBorderSize.mnLeft = rThisBorderSize.mnLeft;
- if (rThisBorderSize.mnTop >= 0)
- rBorderSize.mnTop = rThisBorderSize.mnTop;
- if (rThisBorderSize.mnRight >= 0)
- rBorderSize.mnRight = rThisBorderSize.mnRight;
- if (rThisBorderSize.mnBottom >= 0)
- rBorderSize.mnBottom = rThisBorderSize.mnBottom;
-}
-
-
-
-
-const SharedBitmapDescriptor PaneStyle::GetBitmap (const OUString& rsBitmapName) const
-{
- if (mpBitmaps.get() != NULL)
- {
- const SharedBitmapDescriptor pBitmap = mpBitmaps->GetBitmap(rsBitmapName);
- if (pBitmap.get() != NULL)
- return pBitmap;
- }
-
- if (mpParentStyle.get() != NULL)
- return mpParentStyle->GetBitmap(rsBitmapName);
- else
- return SharedBitmapDescriptor();
-}
-
-
-
-
-PresenterTheme::SharedFontDescriptor PaneStyle::GetFont (void) const
-{
- if (mpFont.get() != NULL)
- return mpFont;
- else if (mpParentStyle.get() != NULL)
- return mpParentStyle->GetFont();
- else
- return PresenterTheme::SharedFontDescriptor();
-}
-
-
-
-
-//===== ViewStyleContainer ====================================================
-
-void ViewStyleContainer::Read (
- ReadContext& rReadContext,
- const Reference<container::XHierarchicalNameAccess>& rxThemeRoot)
-{
- (void)rReadContext;
-
- Reference<container::XNameAccess> xViewStyleList (
- PresenterConfigurationAccess::GetConfigurationNode(
- rxThemeRoot,
- A2S("ViewStyles")),
- UNO_QUERY);
- if (xViewStyleList.is())
- {
- PresenterConfigurationAccess::ForAll(
- xViewStyleList,
- ::boost::bind(&ViewStyleContainer::ProcessViewStyle,
- this, ::boost::ref(rReadContext), _2));
- }
-}
-
-
-
-
-void ViewStyleContainer::ProcessViewStyle(
- ReadContext& rReadContext,
- const Reference<beans::XPropertySet>& rxProperties)
-{
- ::boost::shared_ptr<ViewStyle> pStyle (new ViewStyle());
-
- PresenterConfigurationAccess::GetProperty(rxProperties, A2S("StyleName"))
- >>= pStyle->msStyleName;
-
- OUString sParentStyleName;
- if (PresenterConfigurationAccess::GetProperty(rxProperties, A2S("ParentStyle"))
- >>= sParentStyleName)
- {
- // Find parent style.
- ViewStyleContainer::const_iterator iStyle;
- for (iStyle=begin(); iStyle!=end(); ++iStyle)
- if ((*iStyle)->msStyleName.equals(sParentStyleName))
- {
- pStyle->mpParentStyle = *iStyle;
- pStyle->mpFont = (*iStyle)->mpFont;
- pStyle->mpBackground = (*iStyle)->mpBackground;
- break;
- }
- }
-
- const OUString sPathToFont; // empty string
- Reference<container::XHierarchicalNameAccess> xFontNode (
- PresenterConfigurationAccess::GetProperty(rxProperties, A2S("Font")), UNO_QUERY);
- PresenterTheme::SharedFontDescriptor pFont (
- rReadContext.ReadFont(xFontNode, sPathToFont, PresenterTheme::SharedFontDescriptor()));
- if (pFont.get() != NULL)
- pStyle->mpFont = pFont;
-
- Reference<container::XHierarchicalNameAccess> xBackgroundNode (
- PresenterConfigurationAccess::GetProperty(rxProperties, A2S("Background")),
- UNO_QUERY);
- SharedBitmapDescriptor pBackground (PresenterBitmapContainer::LoadBitmap(
- xBackgroundNode,
- OUString(),
- rReadContext.mxPresenterHelper,
- rReadContext.msBasePath,
- rReadContext.mxCanvas,
- SharedBitmapDescriptor()));
- if (pBackground.get() != NULL && pBackground->GetNormalBitmap().is())
- pStyle->mpBackground = pBackground;
-
- push_back(pStyle);
-}
-
-
-
-
-SharedViewStyle ViewStyleContainer::GetViewStyle (const OUString& rsStyleName) const
-{
- const_iterator iEnd (end());
- for (const_iterator iStyle=begin(); iStyle!=iEnd; ++iStyle)
- if ((*iStyle)->msStyleName == rsStyleName)
- return *iStyle;
- return SharedViewStyle();
-}
-
-
-
-
-//===== ViewStyle =============================================================
-
-ViewStyle::ViewStyle (void)
- : msStyleName(),
- mpParentStyle(),
- mpFont(),
- mpBackground()
-{
-}
-
-
-
-
-ViewStyle::~ViewStyle (void)
-{
-}
-
-
-
-
-const SharedBitmapDescriptor ViewStyle::GetBitmap (const OUString& rsBitmapName) const
-{
- if (rsBitmapName == A2S("Background"))
- return mpBackground;
- else
- return SharedBitmapDescriptor();
-}
-
-
-
-
-PresenterTheme::SharedFontDescriptor ViewStyle::GetFont (void) const
-{
- if (mpFont.get() != NULL)
- return mpFont;
- else if (mpParentStyle.get() != NULL)
- return mpParentStyle->GetFont();
- else
- return PresenterTheme::SharedFontDescriptor();
-}
-
-
-
-
-//===== StyleAssociationContainer =============================================
-
-void StyleAssociationContainer::Read (
- ReadContext& rReadContext,
- const Reference<container::XHierarchicalNameAccess>& rxThemeRoot)
-{
- Reference<container::XNameAccess> xStyleAssociationList (
- PresenterConfigurationAccess::GetConfigurationNode(
- rxThemeRoot,
- A2S("StyleAssociations")),
- UNO_QUERY);
- if (xStyleAssociationList.is())
- {
- ::std::vector<rtl::OUString> aProperties (2);
- aProperties[0] = A2S("ResourceURL");
- aProperties[1] = A2S("StyleName");
- PresenterConfigurationAccess::ForAll(
- xStyleAssociationList,
- aProperties,
- ::boost::bind(&StyleAssociationContainer::ProcessStyleAssociation,
- this, ::boost::ref(rReadContext), _1, _2));
- }
-}
-
-
-
-
-OUString StyleAssociationContainer::GetStyleName (const OUString& rsResourceName) const
-{
- StyleAssociations::const_iterator iAssociation (maStyleAssociations.find(rsResourceName));
- if (iAssociation != maStyleAssociations.end())
- return iAssociation->second;
- else
- return OUString();
-}
-
-
-
-
-void StyleAssociationContainer::ProcessStyleAssociation(
- ReadContext& rReadContext,
- const OUString& rsKey,
- const ::std::vector<Any>& rValues)
-{
- (void)rReadContext;
- (void)rsKey;
-
- if (rValues.size() != 2)
- return;
-
- OUString sResourceURL;
- OUString sStyleName;
- if ((rValues[0] >>= sResourceURL)
- && (rValues[1] >>= sStyleName))
- {
- maStyleAssociations[sResourceURL] = sStyleName;
- }
-}
-
-
-
-
-} // end of anonymous namespace
-
-} } // end of namespace ::sdext::presenter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */