summaryrefslogtreecommitdiffstats
path: root/sdext
diff options
context:
space:
mode:
authorVladimir Glazounov <vg@openoffice.org>2008-05-13 13:39:05 +0000
committerVladimir Glazounov <vg@openoffice.org>2008-05-13 13:39:05 +0000
commitfdc701b1e152dfce94f880099b8d1a04f36671d6 (patch)
treed3a51289b81fddff05a032a8461c8658c9126d78 /sdext
parentINTEGRATION: CWS presenterscreen (1.2.4); FILE MERGED (diff)
downloadcore-fdc701b1e152dfce94f880099b8d1a04f36671d6.tar.gz
core-fdc701b1e152dfce94f880099b8d1a04f36671d6.zip
INTEGRATION: CWS presenterscreen (1.2.4); FILE MERGED
2008/04/30 08:36:10 af 1.2.4.5: #i88858# Added GetNodeForViewStyle() method. 2008/04/22 13:06:47 af 1.2.4.4: #i18486# Made extension identifier platform specific. 2008/04/22 08:25:39 af 1.2.4.3: RESYNC: (1.2-1.3); FILE MERGED 2008/04/16 16:59:13 af 1.2.4.2: #i18486# Fixed some Linux build problems. 2008/04/16 16:10:07 af 1.2.4.1: #i18486# Exporting FontDescriptor sub class.
Diffstat (limited to 'sdext')
-rw-r--r--sdext/source/presenter/PresenterTheme.cxx1120
1 files changed, 606 insertions, 514 deletions
diff --git a/sdext/source/presenter/PresenterTheme.cxx b/sdext/source/presenter/PresenterTheme.cxx
index e72a321c678f..176a5fdaf7c3 100644
--- a/sdext/source/presenter/PresenterTheme.cxx
+++ b/sdext/source/presenter/PresenterTheme.cxx
@@ -8,7 +8,7 @@
*
* $RCSfile: PresenterTheme.cxx,v $
*
- * $Revision: 1.3 $
+ * $Revision: 1.4 $
*
* This file is part of OpenOffice.org.
*
@@ -30,6 +30,8 @@
************************************************************************/
#include "PresenterTheme.hxx"
+#include "PresenterBitmapContainer.hxx"
+#include "PresenterCanvasHelper.hxx"
#include "PresenterComponent.hxx"
#include "PresenterConfigurationAccess.hxx"
#include "PresenterHelper.hxx"
@@ -38,6 +40,7 @@
#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>
@@ -48,9 +51,7 @@ using namespace ::com::sun::star::uno;
using namespace ::std;
using ::rtl::OUString;
-namespace {
-OUString A2S (const sal_Char* pString) { return OUString::createFromAscii(pString); }
-}
+#define A2S(s) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)))
namespace sdext { namespace presenter {
@@ -59,15 +60,41 @@ namespace {
class BorderSize
{
public:
- BorderSize (void) : mnLeft(0),mnTop(0),mnRight(0),mnBottom(0) {}
+ 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
@@ -77,70 +104,41 @@ public:
class ReadContext
{
public:
- PresenterConfigurationAccess& mrConfiguration;
+ Reference<XComponentContext> mxComponentContext;
Reference<rendering::XCanvas> mxCanvas;
- ::boost::shared_ptr<PresenterTheme::PropertyMap> mpPropertyMap;
Reference<drawing::XPresenterHelper> mxPresenterHelper;
OUString msBasePath;
ReadContext (
- const css::uno::Reference<css::uno::XComponentContext>& rxContext,
- PresenterConfigurationAccess& rConfiguration,
+ const Reference<XComponentContext>& rxContext,
const Reference<rendering::XCanvas>& rxCanvas);
~ReadContext (void);
- /** Read one bitmap from a file and store this and the other given data
- into a new BitmapDescriptor object.
- */
- ::boost::shared_ptr<PresenterTheme::BitmapDescriptor> ReadBitmap (
- const ::rtl::OUString& rsKey,
- const ::rtl::OUString& rsFileName,
- const sal_Int32 nXOffset,
- const sal_Int32 nYOffset,
- const util::Color nColor);
-
/** 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.
*/
- ::boost::shared_ptr<PresenterTheme::FontDescriptor> ReadFont (
+ static PresenterTheme::SharedFontDescriptor ReadFont (
const css::uno::Reference<css::container::XHierarchicalNameAccess>& rxTheme,
- const ::rtl::OUString& rsFontPath);
-
- /** Read a single bitmap, that typically is not member of a set, and
- return a new BitmapDescriptor with the data describing the bitmap.
- */
- ::boost::shared_ptr<PresenterTheme::BitmapDescriptor> ReadSingleBitmap (
- const ::rtl::OUString& rsKey,
- const css::uno::Reference<css::container::XHierarchicalNameAccess>& rxNode,
- const ::rtl::OUString& rsRelativePath);
-
- /** Read a set of bitmaps from the given node and return a new
- BitmapContainer that contains them.
- */
- ::boost::shared_ptr<PresenterTheme::BitmapContainer> ReadBorderBitmaps (
- const css::uno::Reference<css::container::XHierarchicalNameAccess>& rxNode);
+ 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:
- /** Used by ReadBorderBitmaps to read a single bitmap.
- @param rpContainer
- The container to insert the new bitmap into.
- @param rsKey
- The key of the configuration node that contains the bitmap data.
- @param rValues
- A set of Anys that contain Strings, nodes, and other data that
- describe a bitmap.
- */
- void ProcessBitmap (
- const ::boost::shared_ptr<PresenterTheme::BitmapContainer>& rpContainer,
- const ::rtl::OUString& rsKey,
- const ::std::vector<css::uno::Any>& rValues);
+ Any GetByName (
+ const Reference<container::XNameAccess>& rxNode,
+ const OUString& rsName) const;
};
@@ -154,31 +152,35 @@ public:
PaneStyle (void);
~PaneStyle (void);
- void AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap);
+ const SharedBitmapDescriptor GetBitmap (const OUString& sBitmapName) const;
OUString msStyleName;
::boost::shared_ptr<PaneStyle> mpParentStyle;
- ::boost::shared_ptr<PresenterTheme::FontDescriptor> mpFont;
+ PresenterTheme::SharedFontDescriptor mpFont;
BorderSize maInnerBorderSize;
BorderSize maOuterBorderSize;
- ::boost::shared_ptr<PresenterTheme::BitmapContainer> mpBitmaps;
+ ::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<boost::shared_ptr<PaneStyle> >
+
+class PaneStyleContainer : vector<SharedPaneStyle>
{
public:
void Read (
ReadContext& rReadContext,
const Reference<container::XHierarchicalNameAccess>& rThemeRoot);
- void AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap);
+ SharedPaneStyle GetPaneStyle (const OUString& rsStyleName) const;
private:
void ProcessPaneStyle (
@@ -198,64 +200,61 @@ public:
ViewStyle (void);
~ViewStyle (void);
- void AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap);
+ const SharedBitmapDescriptor GetBitmap (const OUString& sBitmapName) const;
+
+ PresenterTheme::SharedFontDescriptor GetFont (void) const;
OUString msStyleName;
::boost::shared_ptr<ViewStyle> mpParentStyle;
- ::boost::shared_ptr<PresenterTheme::FontDescriptor> mpFont;
- ::boost::shared_ptr<PresenterTheme::BitmapDescriptor> mpBackground;
+ PresenterTheme::SharedFontDescriptor mpFont;
+ ::boost::shared_ptr<PresenterBitmapContainer> mpBitmaps;
+ SharedBitmapDescriptor mpBackground;
};
+typedef ::boost::shared_ptr<ViewStyle> SharedViewStyle;
-class ViewStyleContainer : vector<boost::shared_ptr<ViewStyle> >
+
+class ViewStyleContainer : vector<SharedViewStyle>
{
public:
void Read (
ReadContext& rReadContext,
const Reference<container::XHierarchicalNameAccess>& rThemeRoot);
- void AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap);
+
+ SharedViewStyle GetViewStyle (const OUString& rsStyleName) const;
private:
void ProcessViewStyle(
ReadContext& rReadContext,
- const ::rtl::OUString& rsKey,
- const ::std::vector<css::uno::Any>& rValues);
+ const Reference<beans::XPropertySet>& rxProperties);
};
-class StyleAssociation
+class ViewDescriptor
{
-public:
- StyleAssociation (
- const OUString& rsResourceURL,
- const OUString& rsStyleName);
- ~StyleAssociation (void);
- OUString msResourceURL;
- OUString msStyleName;
};
+typedef ::boost::shared_ptr<ViewDescriptor> SharedViewDescriptor;
+typedef ::std::vector<SharedViewDescriptor> ViewDescriptorContainer;
-
-class StyleAssociationContainer : vector<StyleAssociation>
+class StyleAssociationContainer
{
public:
void Read (
ReadContext& rReadContext,
const Reference<container::XHierarchicalNameAccess>& rThemeRoot);
- void AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap);
+
+ OUString GetStyleName (const OUString& rsResourceName) const;
private:
+ typedef map<OUString, OUString> StyleAssociations;
+ StyleAssociations maStyleAssociations;
+
void ProcessStyleAssociation(
ReadContext& rReadContext,
const ::rtl::OUString& rsKey,
@@ -270,88 +269,35 @@ class PresenterTheme::Theme
public:
Theme (
const OUString& rsName,
- const Reference<container::XHierarchicalNameAccess>& rThemeRoot);
+ const Reference<container::XHierarchicalNameAccess>& rThemeRoot,
+ const OUString& rsNodeName);
~Theme (void);
void Read (
+ PresenterConfigurationAccess& rConfiguration,
ReadContext& rReadContext);
- void AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap);
-private:
OUString msThemeName;
+ OUString msConfigurationNodeName;
::boost::shared_ptr<Theme> mpParentTheme;
- ::boost::shared_ptr<BitmapDescriptor> mpBackground;
+ SharedBitmapDescriptor mpBackground;
PaneStyleContainer maPaneStyles;
ViewStyleContainer maViewStyles;
+ ViewDescriptorContainer maViewDescriptors;
StyleAssociationContainer maStyleAssociations;
Reference<container::XHierarchicalNameAccess> mxThemeRoot;
-};
-
-
-
-
-class PresenterTheme::BitmapDescriptor
-{
-public:
- explicit BitmapDescriptor (void);
- void SetBitmap (const Reference<rendering::XBitmap>& rxBitmap);
-
- sal_Int32 mnWidth;
- sal_Int32 mnHeight;
- sal_Int32 mnXOffset;
- sal_Int32 mnYOffset;
- util::Color maReplacementColor;
- uno::Reference<rendering::XBitmap> mxBitmap;
-
- void AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap);
-};
-
-
-
-
-class PresenterTheme::BitmapContainer
- : public ::std::map<OUString,::boost::shared_ptr<BitmapDescriptor> >
-{
-public:
- BitmapContainer (void);
-
- void AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap);
-};
+ ::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;
-
-
-typedef ::boost::function<Any(const OUString&)> PropertyProviderFunction;
-
-class PresenterTheme::PropertyMap : public ::std::map<OUString,Any>
-{
-public:
- PropertyMap (void);
-
- void Set (const OUString& rsKey, const Any& rValue);
-};
-
-
-
-
-class PresenterTheme::FontDescriptor
-{
-public:
- FontDescriptor (void);
- ::rtl::OUString msName;
- sal_Int32 mnSize;
- sal_uInt32 mnColor;
- ::rtl::OUString msAnchor;
-
- void AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap);
+private:
+ void ProcessFont(
+ ReadContext& rReadContext,
+ const OUString& rsKey,
+ const Reference<beans::XPropertySet>& rxProperties);
};
@@ -365,11 +311,11 @@ PresenterTheme::PresenterTheme (
const css::uno::Reference<css::rendering::XCanvas>& rxCanvas)
: mxContext(rxContext),
msThemeName(rsThemeName),
- mpBitmapContainer(new BitmapContainer()),
- mxCanvas(rxCanvas),
- mpPropertyMap(new PropertyMap())
+ mpTheme(),
+ mpBitmapContainer(),
+ mxCanvas(rxCanvas)
{
- ReadTheme();
+ mpTheme = ReadTheme();
}
@@ -389,21 +335,16 @@ void SAL_CALL PresenterTheme::disposing (void)
-void PresenterTheme::ReadTheme (void)
+::boost::shared_ptr<PresenterTheme::Theme> PresenterTheme::ReadTheme (void)
{
+ ReadContext aReadContext(mxContext, mxCanvas);
+
PresenterConfigurationAccess aConfiguration (
mxContext,
OUString::createFromAscii("/org.openoffice.Office.extension.PresenterScreen/"),
PresenterConfigurationAccess::READ_ONLY);
- // Read the theme and properties.
- ReadContext aReadContext(mxContext, aConfiguration, mxCanvas);
- ::boost::shared_ptr<Theme> pTheme (aReadContext.ReadTheme(msThemeName));
- if (pTheme.get() != NULL)
- {
- pTheme->Read(aReadContext);
- pTheme->AddProperties(msThemeName, mpPropertyMap);
- }
+ return aReadContext.ReadTheme(aConfiguration, msThemeName);
}
@@ -429,133 +370,227 @@ void PresenterTheme::ProvideCanvas (const Reference<rendering::XCanvas>& rxCanva
-Any PresenterTheme::getPropertyValue (const OUString& rsPropertyName)
+OUString PresenterTheme::GetStyleName (const ::rtl::OUString& rsResourceURL) const
{
- PropertyMap::const_iterator iProperty (mpPropertyMap->find(rsPropertyName));
- if (iProperty != mpPropertyMap->end())
- return iProperty->second;
- else
- throw beans::UnknownPropertyException();
+ 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;
}
-OUString PresenterTheme::GetPaneStyle (const ::rtl::OUString& rsResourceURL) const
+::std::vector<sal_Int32> PresenterTheme::GetBorderSize (
+ const ::rtl::OUString& rsStyleName,
+ const bool bOuter) const
{
- OUString sStyleName (PresenterHelper::msDefaultPaneStyle);
- PropertyMap::const_iterator iProperty (mpPropertyMap->find(rsResourceURL));
- if (iProperty != mpPropertyMap->end())
- iProperty->second >>= sStyleName;
- return sStyleName;
+ 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);
+ }
}
-OUString PresenterTheme::GetViewStyle (const ::rtl::OUString& rsResourceURL) const
+PresenterTheme::SharedFontDescriptor PresenterTheme::ReadFont (
+ const Reference<container::XHierarchicalNameAccess>& rxNode,
+ const OUString& rsFontPath,
+ const PresenterTheme::SharedFontDescriptor& rpDefault)
{
- OUString sStyleName (PresenterHelper::msDefaultViewStyle);
- PropertyMap::const_iterator iProperty (mpPropertyMap->find(rsResourceURL));
- if (iProperty != mpPropertyMap->end())
- iProperty->second >>= sStyleName;
- return sStyleName;
+ return ReadContext::ReadFont(rxNode, rsFontPath, rpDefault);
}
-//===== BitmapDescriptor ======================================================
-
-PresenterTheme::BitmapDescriptor::BitmapDescriptor (void)
- : mnWidth(0),
- mnHeight(0),
- mnXOffset(0),
- mnYOffset(0),
- maReplacementColor(0x00000000),
- mxBitmap()
+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;
}
-void PresenterTheme::BitmapDescriptor::SetBitmap (const Reference<rendering::XBitmap>& rxBitmap)
+::boost::shared_ptr<PresenterConfigurationAccess> PresenterTheme::GetNodeForViewStyle (
+ const ::rtl::OUString& rsStyleName,
+ const PresenterConfigurationAccess::WriteMode) const
{
- mxBitmap = rxBitmap;
- if (mxBitmap.is())
+ if (mpTheme.get() == NULL)
+ return ::boost::shared_ptr<PresenterConfigurationAccess>();
+
+ // Open configuration for writing.
+ ::boost::shared_ptr<PresenterConfigurationAccess> pConfiguration (
+ new PresenterConfigurationAccess(
+ mxContext,
+ OUString::createFromAscii("/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")))
{
- mnWidth = mxBitmap->getSize().Width;
- mnHeight = mxBitmap->getSize().Height;
- }
- else
- {
- mnWidth = 0;
- mnHeight = 0;
+ pConfiguration->GoToChild(
+ ::boost::bind(&PresenterConfigurationAccess::IsStringPropertyEqual,
+ rsStyleName,
+ A2S("StyleName"),
+ _2));
}
+ return pConfiguration;
}
-void PresenterTheme::BitmapDescriptor::AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap)
+::rtl::OUString PresenterTheme::GetThemeName (void) const
{
- rpPropertyMap->Set(rsPropertyPrefix + A2S("Bitmap"), Any(mxBitmap));
- rpPropertyMap->Set(rsPropertyPrefix + A2S("Offset"), Any(awt::Point(mnXOffset,mnYOffset)));
- rpPropertyMap->Set(rsPropertyPrefix + A2S("Color"), Any(maReplacementColor));
+ if (mpTheme.get() != NULL)
+ return mpTheme->msThemeName;
+ else
+ return OUString();
}
-//===== BitmapContainer =======================================================
-
-PresenterTheme::BitmapContainer::BitmapContainer (void)
+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();
}
-void PresenterTheme::BitmapContainer::AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap)
+SharedBitmapDescriptor PresenterTheme::GetBitmap (
+ const OUString& rsBitmapName) const
{
- const_iterator iDescriptor;
- for (iDescriptor=begin(); iDescriptor!=end(); ++iDescriptor)
+ if (mpTheme.get() != NULL)
{
- if (iDescriptor->second.get() == NULL)
+ if (rsBitmapName == A2S("Background"))
{
- OSL_ASSERT(false);
- continue;
+ ::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);
}
- iDescriptor->second->AddProperties(
- rsPropertyPrefix+iDescriptor->first+A2S("_"),
- rpPropertyMap);
}
-}
+ return SharedBitmapDescriptor();
+}
-//===== PropertyMap ===========================================================
-PresenterTheme::PropertyMap::PropertyMap (void)
+::boost::shared_ptr<PresenterBitmapContainer> PresenterTheme::GetBitmapContainer (void) const
{
+ if (mpTheme.get() != NULL)
+ return mpTheme->mpIconContainer;
+ else
+ return ::boost::shared_ptr<PresenterBitmapContainer>();
}
-void PresenterTheme::PropertyMap::Set (const OUString& rsKey, const Any& rValue)
+PresenterTheme::SharedFontDescriptor PresenterTheme::GetFont (
+ const OUString& rsStyleName) const
{
- iterator iItem (find(rsKey));
- if (iItem == end())
- insert(value_type(rsKey,rValue));
- else
- iItem->second = rValue;
+ 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();
}
@@ -564,24 +599,71 @@ void PresenterTheme::PropertyMap::Set (const OUString& rsKey, const Any& rValue)
//===== FontDescriptor ========================================================
PresenterTheme::FontDescriptor::FontDescriptor (void)
- : msName(OUString::createFromAscii("Albany")),
+ : msFamilyName(),
+ msStyleName(),
mnSize(12),
mnColor(0x00000000),
- msAnchor(OUString::createFromAscii("Left"))
+ msAnchor(OUString::createFromAscii("Left")),
+ mnXOffset(0),
+ mnYOffset(0)
{
}
-void PresenterTheme::FontDescriptor::AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap)
+PresenterTheme::FontDescriptor::FontDescriptor (
+ const ::boost::shared_ptr<FontDescriptor>& rpDescriptor)
+ : msFamilyName(),
+ msStyleName(),
+ mnSize(12),
+ mnColor(0x00000000),
+ msAnchor(OUString::createFromAscii("Left")),
+ mnXOffset(0),
+ mnYOffset(0)
{
- rpPropertyMap->Set(rsPropertyPrefix+A2S("Name"), Any(msName));
- rpPropertyMap->Set(rsPropertyPrefix+A2S("Size"), Any(mnSize));
- rpPropertyMap->Set(rsPropertyPrefix+A2S("Color"), Any(mnColor));
- rpPropertyMap->Set(rsPropertyPrefix+A2S("Anchor"), Any(msAnchor));
+ 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;
+
+ rendering::FontRequest aFontRequest;
+ aFontRequest.FontDescription.FamilyName = msFamilyName;
+ if (msFamilyName.getLength() == 0)
+ aFontRequest.FontDescription.FamilyName = A2S("Tahoma");
+ aFontRequest.FontDescription.StyleName = msStyleName;
+ aFontRequest.CellSize = mnSize;
+
+ // 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;
+
+ mxFont = rxCanvas->createFont(
+ aFontRequest,
+ Sequence<beans::PropertyValue>(),
+ geometry::Matrix2D(1,0,0,1));
+
+ return mxFont.is();
}
@@ -591,13 +673,16 @@ void PresenterTheme::FontDescriptor::AddProperties (
PresenterTheme::Theme::Theme (
const OUString& rsName,
- const Reference<container::XHierarchicalNameAccess>& rxThemeRoot)
+ const Reference<container::XHierarchicalNameAccess>& rxThemeRoot,
+ const OUString& rsNodeName)
: msThemeName(rsName),
+ msConfigurationNodeName(rsNodeName),
mpParentTheme(),
maPaneStyles(),
maViewStyles(),
maStyleAssociations(),
- mxThemeRoot(rxThemeRoot)
+ mxThemeRoot(rxThemeRoot),
+ mpIconContainer()
{
}
@@ -611,7 +696,9 @@ PresenterTheme::Theme::~Theme (void)
-void PresenterTheme::Theme::Read (ReadContext& rReadContext)
+void PresenterTheme::Theme::Read (
+ PresenterConfigurationAccess& rConfiguration,
+ ReadContext& rReadContext)
{
PresenterConfigurationAccess::GetConfigurationNode(mxThemeRoot, A2S("ThemeName"))
>>= msThemeName;
@@ -622,12 +709,31 @@ void PresenterTheme::Theme::Read (ReadContext& rReadContext)
>>= sParentThemeName)
&& sParentThemeName.getLength()>0)
{
- mpParentTheme = rReadContext.ReadTheme(sParentThemeName);
+ 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
- = rReadContext.ReadSingleBitmap(A2S("Background"), mxThemeRoot, A2S("Background"));
+ mpBackground = PresenterBitmapContainer::LoadBitmap(
+ mxThemeRoot,
+ A2S("Background"),
+ rReadContext.mxPresenterHelper,
+ rReadContext.msBasePath,
+ rReadContext.mxCanvas,
+ SharedBitmapDescriptor());
// Style associations.
maStyleAssociations.Read(rReadContext, mxThemeRoot);
@@ -638,30 +744,67 @@ void PresenterTheme::Theme::Read (ReadContext& rReadContext)
// 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));
}
-void PresenterTheme::Theme::AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap)
+SharedPaneStyle PresenterTheme::Theme::GetPaneStyle (const OUString& rsStyleName) const
{
- if (mpParentTheme.get() != NULL)
- mpParentTheme->AddProperties(rsPropertyPrefix, rpPropertyMap);
+ SharedPaneStyle pPaneStyle (maPaneStyles.GetPaneStyle(rsStyleName));
+ if (pPaneStyle.get() != NULL)
+ return pPaneStyle;
+ else if (mpParentTheme.get() != NULL)
+ return mpParentTheme->GetPaneStyle(rsStyleName);
+ else
+ return SharedPaneStyle();
+}
- // Background.
- if (mpBackground.get() != NULL)
- mpBackground->AddProperties(rsPropertyPrefix+A2S("Background_"), rpPropertyMap);
- // Style associations.
- maStyleAssociations.AddProperties(rsPropertyPrefix, rpPropertyMap);
- // Pane styles.
- maPaneStyles.AddProperties(rsPropertyPrefix, rpPropertyMap);
- // View styles.
- maViewStyles.AddProperties(rsPropertyPrefix, rpPropertyMap);
+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());
}
@@ -673,9 +816,8 @@ namespace {
ReadContext::ReadContext (
const css::uno::Reference<css::uno::XComponentContext>& rxContext,
- PresenterConfigurationAccess& rConfiguration,
const Reference<rendering::XCanvas>& rxCanvas)
- : mrConfiguration(rConfiguration),
+ : mxComponentContext(rxContext),
mxCanvas(rxCanvas),
mxPresenterHelper(),
msBasePath()
@@ -691,13 +833,7 @@ ReadContext::ReadContext (
}
// Get base path to bitmaps.
- Reference<deployment::XPackageInformationProvider> xInformationProvider (
- rxContext->getValueByName(OUString::createFromAscii(
- "/singletons/com.sun.star.deployment.PackageInformationProvider")),
- UNO_QUERY_THROW);
- if (xInformationProvider.is())
- msBasePath = xInformationProvider->getPackageLocation(gsExtensionIdentifier);
- msBasePath += OUString::createFromAscii("/");
+ SetBitmapSourceExtension(PresenterComponent::gsExtensionIdentifier);
}
@@ -710,50 +846,13 @@ ReadContext::~ReadContext (void)
-::boost::shared_ptr<PresenterTheme::BitmapDescriptor> ReadContext::ReadBitmap (
- const OUString& rsKey,
- const OUString& rsFileName,
- const sal_Int32 nXOffset,
- const sal_Int32 nYOffset,
- const util::Color nColor)
-{
- (void)rsKey;
-
- ::boost::shared_ptr<PresenterTheme::BitmapDescriptor> pDescriptor(
- new PresenterTheme::BitmapDescriptor());
-
- if ( ! mxCanvas.is())
- return pDescriptor;
-
- if (mxPresenterHelper.is())
- {
-
- pDescriptor->mnXOffset = nXOffset;
- pDescriptor->mnYOffset = nYOffset;
- pDescriptor->maReplacementColor = nColor;
- pDescriptor->mxBitmap = mxPresenterHelper->loadBitmap(
- msBasePath + rsFileName,
- mxCanvas);
- }
- else
- {
- OSL_ASSERT(mxPresenterHelper.is());
- }
- return pDescriptor;
-}
-
-
-
-
-::boost::shared_ptr<PresenterTheme::FontDescriptor> ReadContext::ReadFont (
+PresenterTheme::SharedFontDescriptor ReadContext::ReadFont (
const Reference<container::XHierarchicalNameAccess>& rxNode,
- const OUString& rsFontPath)
+ const OUString& rsFontPath,
+ const PresenterTheme::SharedFontDescriptor& rpDefault)
{
- ::boost::shared_ptr<PresenterTheme::FontDescriptor> pDescriptor (
- new PresenterTheme::FontDescriptor());
-
if ( ! rxNode.is())
- return pDescriptor;
+ return PresenterTheme::SharedFontDescriptor();
try
{
@@ -763,121 +862,59 @@ ReadContext::~ReadContext (void)
rsFontPath),
UNO_QUERY_THROW);
- PresenterConfigurationAccess::GetConfigurationNode(
- xFont,
- OUString::createFromAscii("FamilyName")) >>= pDescriptor->msName;
-
- PresenterConfigurationAccess::GetConfigurationNode(
- xFont,
- OUString::createFromAscii("Size")) >>= pDescriptor->mnSize;
-
- PresenterConfigurationAccess::GetConfigurationNode(
- xFont,
- OUString::createFromAscii("Color")) >>= pDescriptor->mnColor;
-
- PresenterConfigurationAccess::GetConfigurationNode(
- xFont,
- OUString::createFromAscii("Anchor")) >>= pDescriptor->msAnchor;
+ Reference<beans::XPropertySet> xProperties (xFont, UNO_QUERY_THROW);
+ return ReadFont(xProperties, rpDefault);
}
catch (Exception&)
{
OSL_ASSERT(false);
}
- return pDescriptor;
+ return PresenterTheme::SharedFontDescriptor();
}
-::boost::shared_ptr<PresenterTheme::BitmapContainer> ReadContext::ReadBorderBitmaps (
- const Reference<container::XHierarchicalNameAccess>& rxNode)
+PresenterTheme::SharedFontDescriptor ReadContext::ReadFont (
+ const Reference<beans::XPropertySet>& rxProperties,
+ const PresenterTheme::SharedFontDescriptor& rpDefault)
{
- ::boost::shared_ptr<PresenterTheme::BitmapContainer> pContainer (
- new PresenterTheme::BitmapContainer());
- Reference<container::XNameAccess> xBitmapList (rxNode, UNO_QUERY);
- ::std::vector<rtl::OUString> aProperties (4);
- aProperties[0] = OUString::createFromAscii("FileName");
- aProperties[1] = OUString::createFromAscii("XOffset");
- aProperties[2] = OUString::createFromAscii("YOffset");
- aProperties[3] = OUString::createFromAscii("ReplacementColor");
- PresenterConfigurationAccess::ForAll(
- xBitmapList,
- aProperties,
- ::boost::bind(&ReadContext::ProcessBitmap, this, pContainer, _1, _2));
- return pContainer;
-}
-
-
-
-
-void ReadContext::ProcessBitmap (
- const ::boost::shared_ptr<PresenterTheme::BitmapContainer>& rpContainer,
- const OUString& rsKey,
- const ::std::vector<Any>& rValues)
-{
- if (rValues.size() != 4)
- return;
+ ::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;
- OUString sFileName;
- sal_Int32 nXOffset (0);
- sal_Int32 nYOffset (0);
- sal_uInt32 nColor (0);
- rValues[0] >>= sFileName;
- rValues[1] >>= nXOffset;
- rValues[2] >>= nYOffset;
- rValues[3] >>= nColor;
-
- rpContainer->insert(
- PresenterTheme::BitmapContainer::value_type(
- rsKey,
- ReadBitmap(rsKey, sFileName, nXOffset, nYOffset, nColor)));
+ return pDescriptor;
}
-::boost::shared_ptr<PresenterTheme::BitmapDescriptor> ReadContext::ReadSingleBitmap (
- const OUString& rsKey,
- const Reference<container::XHierarchicalNameAccess>& rxTheme,
- const OUString& rsRelativeNodePath)
+Any ReadContext::GetByName (
+ const Reference<container::XNameAccess>& rxNode,
+ const OUString& rsName) const
{
- if ( ! mxCanvas.is())
- return ::boost::shared_ptr<PresenterTheme::BitmapDescriptor>();
-
- Reference<container::XHierarchicalNameAccess> xBitmapNode(
- PresenterConfigurationAccess::GetConfigurationNode(
- rxTheme,
- rsRelativeNodePath),
- UNO_QUERY);
- if (xBitmapNode.is())
- {
- OUString sFileName;
- sal_Int32 nXOffset (0);
- sal_Int32 nYOffset (0);
- util::Color nColor (0);
- PresenterConfigurationAccess::GetConfigurationNode(xBitmapNode,A2S("FileName"))
- >>= sFileName;
- PresenterConfigurationAccess::GetConfigurationNode(xBitmapNode,A2S("XOffset"))
- >>= nXOffset;
- PresenterConfigurationAccess::GetConfigurationNode(xBitmapNode,A2S("YOffset"))
- >>= nYOffset;
- PresenterConfigurationAccess::GetConfigurationNode(xBitmapNode,A2S("ReplacementColor"))
- >>= nColor;
- return ReadBitmap(
- rsKey,
- sFileName,
- nXOffset,
- nYOffset,
- nColor);
- }
- return ::boost::shared_ptr<PresenterTheme::BitmapDescriptor>();
+ 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;
@@ -886,7 +923,7 @@ void ReadContext::ProcessBitmap (
if (sCurrentThemeName.getLength() == 0)
{
// No theme name given. Look up the CurrentTheme property.
- mrConfiguration.GetConfigurationNode(A2S("Presenter/CurrentTheme")) >>= sCurrentThemeName;
+ rConfiguration.GetConfigurationNode(A2S("Presenter/CurrentTheme")) >>= sCurrentThemeName;
if (sCurrentThemeName.getLength() == 0)
{
// Still no name. Use "DefaultTheme".
@@ -895,7 +932,7 @@ void ReadContext::ProcessBitmap (
}
Reference<container::XNameAccess> xThemes (
- mrConfiguration.GetConfigurationNode(OUString::createFromAscii("Presenter/Themes")),
+ rConfiguration.GetConfigurationNode(A2S("Presenter/Themes")),
UNO_QUERY);
if (xThemes.is())
{
@@ -913,13 +950,18 @@ void ReadContext::ProcessBitmap (
>>= sThemeName;
if (sThemeName == sCurrentThemeName)
{
- pTheme.reset(new PresenterTheme::Theme(sThemeName,xTheme));
+ pTheme.reset(new PresenterTheme::Theme(sThemeName,xTheme,rsKey));
break;
}
}
}
}
+ if (pTheme.get() != NULL)
+ {
+ pTheme->Read(rConfiguration, *this);
+ }
+
return pTheme;
}
@@ -932,11 +974,10 @@ BorderSize ReadContext::ReadBorderSize (const Reference<container::XNameAccess>&
if (rxNode.is())
{
- Any aValue;
- rxNode->getByName(A2S("Left")) >>= aBorderSize.mnLeft;
- rxNode->getByName(A2S("Top")) >>= aBorderSize.mnTop;
- rxNode->getByName(A2S("Right")) >>= aBorderSize.mnRight;
- rxNode->getByName(A2S("Bottom")) >>= aBorderSize.mnBottom;
+ 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;
@@ -945,6 +986,15 @@ BorderSize ReadContext::ReadBorderSize (const Reference<container::XNameAccess>&
+void ReadContext::SetBitmapSourceExtension (const OUString& rsExtensionIdentifier)
+{
+ // Get base path to bitmaps.
+ msBasePath = PresenterComponent::GetBasePath(mxComponentContext, rsExtensionIdentifier);
+}
+
+
+
+
//===== PaneStyleContainer ====================================================
void PaneStyleContainer::Read (
@@ -954,7 +1004,7 @@ void PaneStyleContainer::Read (
Reference<container::XNameAccess> xPaneStyleList (
PresenterConfigurationAccess::GetConfigurationNode(
rxThemeRoot,
- OUString::createFromAscii("PaneStyles")),
+ A2S("PaneStyles")),
UNO_QUERY);
if (xPaneStyleList.is())
{
@@ -998,23 +1048,39 @@ void PaneStyleContainer::ProcessPaneStyle(
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(""));
+ 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::XHierarchicalNameAccess> xBitmapsNode (rValues[5], UNO_QUERY);
- ::boost::shared_ptr<PresenterTheme::BitmapContainer> pBitmaps;
- pBitmaps = rReadContext.ReadBorderBitmaps(xBitmapsNode);
- pStyle->mpBitmaps = pBitmaps;
+ 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);
@@ -1023,14 +1089,13 @@ void PaneStyleContainer::ProcessPaneStyle(
-void PaneStyleContainer::AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap)
+SharedPaneStyle PaneStyleContainer::GetPaneStyle (const OUString& rsStyleName) const
{
- for (const_iterator iStyle=begin(); iStyle!=end(); ++iStyle)
- (*iStyle)->AddProperties(
- rsPropertyPrefix+(*iStyle)->msStyleName+A2S("_"),
- rpPropertyMap);
+ const_iterator iEnd (end());
+ for (const_iterator iStyle=begin(); iStyle!=iEnd; ++iStyle)
+ if ((*iStyle)->msStyleName == rsStyleName)
+ return *iStyle;
+ return SharedPaneStyle();
}
@@ -1040,10 +1105,11 @@ void PaneStyleContainer::AddProperties (
PaneStyle::PaneStyle (void)
: msStyleName(),
+ mpParentStyle(),
mpFont(),
maInnerBorderSize(),
maOuterBorderSize(),
- mpBitmaps(new PresenterTheme::BitmapContainer())
+ mpBitmaps()
{
}
@@ -1057,32 +1123,51 @@ PaneStyle::~PaneStyle (void)
-void PaneStyle::AddProperties(
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap)
+void PaneStyle::UpdateBorderSize (BorderSize& rBorderSize, bool bInner)
{
if (mpParentStyle.get() != NULL)
- mpParentStyle->AddProperties(rsPropertyPrefix, rpPropertyMap);
- if (mpFont.get() != NULL)
- mpFont->AddProperties(rsPropertyPrefix+A2S("Font_"), rpPropertyMap);
+ 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)
- mpBitmaps->AddProperties(rsPropertyPrefix+A2S("Border_"), rpPropertyMap);
-
- Sequence<sal_Int32> aBorderSize (4);
- aBorderSize[0] = maInnerBorderSize.mnLeft;
- aBorderSize[1] = maInnerBorderSize.mnTop;
- aBorderSize[2] = maInnerBorderSize.mnRight;
- aBorderSize[3] = maInnerBorderSize.mnBottom;
- rpPropertyMap->Set(
- rsPropertyPrefix+A2S("InnerBorderSize"),
- Any(aBorderSize));
- aBorderSize[0] = maOuterBorderSize.mnLeft;
- aBorderSize[1] = maOuterBorderSize.mnTop;
- aBorderSize[2] = maOuterBorderSize.mnRight;
- aBorderSize[3] = maOuterBorderSize.mnBottom;
- rpPropertyMap->Set(
- rsPropertyPrefix+A2S("OuterBorderSize"),
- Any(aBorderSize));
+ {
+ 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();
}
@@ -1094,23 +1179,19 @@ void ViewStyleContainer::Read (
ReadContext& rReadContext,
const Reference<container::XHierarchicalNameAccess>& rxThemeRoot)
{
+ (void)rReadContext;
+
Reference<container::XNameAccess> xViewStyleList (
PresenterConfigurationAccess::GetConfigurationNode(
rxThemeRoot,
- OUString::createFromAscii("ViewStyles")),
+ A2S("ViewStyles")),
UNO_QUERY);
if (xViewStyleList.is())
{
- ::std::vector<rtl::OUString> aProperties (4);
- aProperties[0] = OUString::createFromAscii("StyleName");
- aProperties[1] = OUString::createFromAscii("ParentStyle");
- aProperties[2] = OUString::createFromAscii("Font");
- aProperties[3] = OUString::createFromAscii("Background");
PresenterConfigurationAccess::ForAll(
xViewStyleList,
- aProperties,
::boost::bind(&ViewStyleContainer::ProcessViewStyle,
- this, ::boost::ref(rReadContext), _1, _2));
+ this, ::boost::ref(rReadContext), _2));
}
}
@@ -1119,25 +1200,49 @@ void ViewStyleContainer::Read (
void ViewStyleContainer::ProcessViewStyle(
ReadContext& rReadContext,
- const OUString& rsKey,
- const ::std::vector<Any>& rValues)
+ const Reference<beans::XPropertySet>& rxProperties)
{
- (void)rsKey;
-
- if (rValues.size() != 4)
- return;
-
::boost::shared_ptr<ViewStyle> pStyle (new ViewStyle());
- rValues[0] >>= pStyle->msStyleName;
+ PresenterConfigurationAccess::GetProperty(rxProperties, A2S("StyleName"))
+ >>= pStyle->msStyleName;
- const OUString sPathToFont; // empty string
- Reference<container::XHierarchicalNameAccess> xFontNode (rValues[2], UNO_QUERY);
- pStyle->mpFont = rReadContext.ReadFont(xFontNode, sPathToFont);
+ 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;
+ }
+ }
- Reference<container::XHierarchicalNameAccess> xBackgroundNode (rValues[3], UNO_QUERY);
- pStyle->mpBackground = rReadContext.ReadSingleBitmap(
- A2S("Background"), xBackgroundNode, A2S(""));
+ 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);
}
@@ -1145,23 +1250,23 @@ void ViewStyleContainer::ProcessViewStyle(
-void ViewStyleContainer::AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap)
+SharedViewStyle ViewStyleContainer::GetViewStyle (const OUString& rsStyleName) const
{
- for (const_iterator iStyle=begin(); iStyle!=end(); ++iStyle)
- (*iStyle)->AddProperties(
- rsPropertyPrefix+(*iStyle)->msStyleName+A2S("_"),
- rpPropertyMap);
+ const_iterator iEnd (end());
+ for (const_iterator iStyle=begin(); iStyle!=iEnd; ++iStyle)
+ if ((*iStyle)->msStyleName == rsStyleName)
+ return *iStyle;
+ return SharedViewStyle();
}
-//===== PaneStyle =============================================================
+//===== ViewStyle =============================================================
ViewStyle::ViewStyle (void)
: msStyleName(),
+ mpParentStyle(),
mpFont(),
mpBackground()
{
@@ -1177,16 +1282,25 @@ ViewStyle::~ViewStyle (void)
-void ViewStyle::AddProperties(
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap)
+const SharedBitmapDescriptor ViewStyle::GetBitmap (const OUString& rsBitmapName) const
+{
+ if (rsBitmapName == A2S("Background"))
+ return mpBackground;
+ else
+ return SharedBitmapDescriptor();
+}
+
+
+
+
+PresenterTheme::SharedFontDescriptor ViewStyle::GetFont (void) const
{
- if (mpParentStyle.get() != NULL)
- mpParentStyle->AddProperties(rsPropertyPrefix, rpPropertyMap);
if (mpFont.get() != NULL)
- mpFont->AddProperties(rsPropertyPrefix+A2S("Font_"), rpPropertyMap);
- if (mpBackground.get() != NULL)
- mpBackground->AddProperties(rsPropertyPrefix+A2S("Background_"), rpPropertyMap);
+ return mpFont;
+ else if (mpParentStyle.get() != NULL)
+ return mpParentStyle->GetFont();
+ else
+ return PresenterTheme::SharedFontDescriptor();
}
@@ -1201,13 +1315,13 @@ void StyleAssociationContainer::Read (
Reference<container::XNameAccess> xStyleAssociationList (
PresenterConfigurationAccess::GetConfigurationNode(
rxThemeRoot,
- OUString::createFromAscii("StyleAssociations")),
+ A2S("StyleAssociations")),
UNO_QUERY);
if (xStyleAssociationList.is())
{
::std::vector<rtl::OUString> aProperties (2);
- aProperties[0] = OUString::createFromAscii("ResourceURL");
- aProperties[1] = OUString::createFromAscii("StyleName");
+ aProperties[0] = A2S("ResourceURL");
+ aProperties[1] = A2S("StyleName");
PresenterConfigurationAccess::ForAll(
xStyleAssociationList,
aProperties,
@@ -1219,15 +1333,13 @@ void StyleAssociationContainer::Read (
-void StyleAssociationContainer::AddProperties (
- const OUString& rsPropertyPrefix,
- const ::boost::shared_ptr<PresenterTheme::PropertyMap>& rpPropertyMap)
+OUString StyleAssociationContainer::GetStyleName (const OUString& rsResourceName) const
{
- (void)rsPropertyPrefix;
- for (const_iterator iAssociation=begin(); iAssociation!=end(); ++iAssociation)
- rpPropertyMap->Set(
- iAssociation->msResourceURL,
- Any(iAssociation->msStyleName));
+ StyleAssociations::const_iterator iAssociation (maStyleAssociations.find(rsResourceName));
+ if (iAssociation != maStyleAssociations.end())
+ return iAssociation->second;
+ else
+ return OUString();
}
@@ -1249,33 +1361,13 @@ void StyleAssociationContainer::ProcessStyleAssociation(
if ((rValues[0] >>= sResourceURL)
&& (rValues[1] >>= sStyleName))
{
- push_back(StyleAssociation(sResourceURL, sStyleName));
+ maStyleAssociations[sResourceURL] = sStyleName;
}
}
-//===== StyleAssociation ======================================================
-
-StyleAssociation::StyleAssociation (
- const OUString& rsResourceURL,
- const OUString& rsStyleName)
- : msResourceURL(rsResourceURL),
- msStyleName(rsStyleName)
-{
-}
-
-
-
-
-StyleAssociation::~StyleAssociation (void)
-{
-}
-
-
-
-
} // end of anonymous namespace
} } // end of namespace ::sdext::presenter