summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sd/source/core/sdpage.cxx96
1 files changed, 93 insertions, 3 deletions
diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx
index 906137080fd1..a75ade518b23 100644
--- a/sd/source/core/sdpage.cxx
+++ b/sd/source/core/sdpage.cxx
@@ -1261,7 +1261,8 @@ void readLayoutPropFromFile(const Reference<XElement>& root, const rtl::OUString
Reference<XNodeList> layoutchildrens = layoutnode->getChildNodes();
presobjsize = layoutchildrens->getLength(); //get the length of that of the layout(number of pres objects)
for( long j=0; j< presobjsize ; j++)
- { rtl::OUString nodename;
+ {
+ rtl::OUString nodename;
Reference<XNode> presobj = layoutchildrens->item(j); //get the j'th presobj for that layout
nodename=presobj->getNodeName();
if(nodename=="presobj")//check whether children is blank 'text-node' or 'presobj' node
@@ -1299,10 +1300,40 @@ void readLayoutPropFromFile(const Reference<XElement>& root, const rtl::OUString
}
}
-static void CalcAutoLayoutRectangles( SdPage& rPage, int nLayout, Rectangle* rRectangle )
+rtl::OUString enumtoString(AutoLayout aut)
+{
+ rtl::OUString retstr;
+ switch (aut)
+ {
+ case AUTOLAYOUT_TITLE_CONTENT:
+ retstr="AUTOLAYOUT_TITLE_CONTENT";
+ break;
+ case AUTOLAYOUT_TITLE_2VTEXT:
+ retstr="AUTOLAYOUT_TITLE_2VTEXT";
+ break;
+ case AUTOLAYOUT_TITLE_CONTENT_OVER_CONTENT:
+ retstr="AUTOLAYOUT_TITLE_CONTENT_OVER_CONTENT";
+ break;
+ case AUTOLAYOUT_TITLE_CONTENT_2CONTENT:
+ retstr="AUTOLAYOUT_TITLE_CONTENT_2CONTENT";
+ break;
+ default:
+ retstr="unknown";
+ break;
+ // case AUTOLAYOUT_TITLE_4SCONTENT: return "AUTOLAYOUT_TITLE_4SCONTENT";
+ }
+ return retstr;
+}
+
+static void CalcAutoLayoutRectangles( SdPage& rPage, int nLayout, Rectangle* rRectangle ,const rtl::OUString& autolayout)
{
Rectangle aTitleRect;
Rectangle aLayoutRect;
+ long presobjsize;
+ long layoutlistsize;
+ rtl::OUString sLayoutAttName;
+ rtl::OUString sPresObjKindAttName;
+ bool bnoprop=true; //use it to skip the remaining loop ,once propvalue is obtained
double propvalue[4];
if( rPage.GetPageKind() != PK_HANDOUT )
@@ -1345,6 +1376,63 @@ static void CalcAutoLayoutRectangles( SdPage& rPage, int nLayout, Rectangle* rRe
sal_Bool bRightToLeft = ( rPage.GetModel() && static_cast< SdDrawDocument* >( rPage.GetModel() )->GetDefaultWritingMode() == ::com::sun::star::text::WritingMode_RL_TB );
+ const Reference<XNodeList> layoutlist = root->getElementsByTagName("layout");
+ layoutlistsize=layoutlist->getLength();
+ rtl::OUString sLayoutType = autolayout;
+ for( long index=0; index<layoutlistsize ;index++)
+ {
+ if(bnoprop)
+ {
+ Reference<XNode> layoutnode = layoutlist->item(index); //get i'th layout element
+ Reference<XNamedNodeMap> layoutattrlist =layoutnode->getAttributes();
+ Reference<XNode> layoutattr = layoutattrlist->getNamedItem("type");
+ sLayoutAttName=layoutattr->getNodeValue(); //get the attribute value of layout(i.e it's type)
+
+ if(sLayoutAttName==sLayoutType)
+ {
+ Reference<XNodeList> layoutchildrens = layoutnode->getChildNodes();
+ presobjsize = layoutchildrens->getLength(); //get the length of that of the layout(number of pres objects)
+ for( long j=1; j< presobjsize ; j++)
+ {
+ rtl::OUString nodename;
+ Reference<XNode> presobj = layoutchildrens->item(j); //get the j'th presobj for that layout
+ nodename=presobj->getNodeName();
+ if(nodename=="presobj")//check whether children is blank 'text-node' or 'presobj' node
+ {
+ Reference<XNamedNodeMap> presObjAttributes = presobj->getAttributes();
+ Reference<XNode> presObjKindAttr = presObjAttributes->getNamedItem("kind");
+ sPresObjKindAttName = presObjKindAttr->getNodeValue(); //get the value of it's presobj kind
+
+ Reference<XNode> presObjPosX = presObjAttributes->getNamedItem("layout-pos-x");
+ rtl::OUString sValue = presObjPosX->getNodeValue();
+ propvalue[0] = sValue.toDouble();
+
+ Reference<XNode> presObjPosY = presObjAttributes->getNamedItem("layout-pos-y");
+ sValue = presObjPosY->getNodeValue();
+ propvalue[1] = sValue.toDouble();
+
+ Reference<XNode> presObjSizeHeight = presObjAttributes->getNamedItem("layout-size-height");
+ sValue = presObjSizeHeight->getNodeValue();
+ propvalue[2] = sValue.toDouble();
+
+ Reference<XNode> presObjSizeWidth = presObjAttributes->getNamedItem("layout-size-width");
+ sValue = presObjSizeWidth->getNodeValue();
+ propvalue[3] = sValue.toDouble();
+
+ aLayoutPos.X() = propvalue[0];
+ aLayoutPos.Y() = propvalue[1];
+ aLayoutSize.Height() = propvalue[2];
+ aLayoutSize.Width() = propvalue[3];
+ rRectangle[j] = Rectangle (aLayoutPos, aLayoutSize);
+ }
+ }
+ bnoprop=false;
+ }
+ }
+ else
+ break;
+ }
+
switch( nLayout )
{
case 0: // default layout using only the title and layout area
@@ -1736,6 +1824,7 @@ void findAutoLayoutShapesImpl( SdPage& rPage, const LayoutDescriptor& rDescripto
void SdPage::SetAutoLayout(AutoLayout eLayout, sal_Bool bInit, sal_Bool bCreate )
{
+ rtl::OUString autolayout;
sd::ScopeLockGuard aGuard( maLockAutoLayoutArrangement );
const bool bSwitchLayout = eLayout != GetAutoLayout();
@@ -1756,7 +1845,8 @@ void SdPage::SetAutoLayout(AutoLayout eLayout, sal_Bool bInit, sal_Bool bCreate
Rectangle aRectangle[MAX_PRESOBJS];
const LayoutDescriptor& aDescriptor = GetLayoutDescriptor( meAutoLayout );
- CalcAutoLayoutRectangles( *this, aDescriptor.mnLayout, aRectangle );
+ autolayout=enumtoString(meAutoLayout);
+ CalcAutoLayoutRectangles( *this, aDescriptor.mnLayout, aRectangle, autolayout);
std::set< SdrObject* > aUsedPresentationObjects;