summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sd/source/core/sdpage.cxx108
-rw-r--r--sd/xml/layoutlist.xml2
2 files changed, 60 insertions, 50 deletions
diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx
index a75ade518b23..cf8651ca7184 100644
--- a/sd/source/core/sdpage.cxx
+++ b/sd/source/core/sdpage.cxx
@@ -1117,6 +1117,7 @@ Rectangle SdPage::GetLayoutRect() const
const int MAX_PRESOBJS = 7; // maximum number of presentation objects per layout
const int VERTICAL = 0x8000;
const int PRESOBJPROP = 4;
+std::vector<Reference<XNode>> layoutinfo; //temporarily at global scope
struct LayoutDescriptor
{
@@ -1317,6 +1318,9 @@ rtl::OUString enumtoString(AutoLayout aut)
case AUTOLAYOUT_TITLE_CONTENT_2CONTENT:
retstr="AUTOLAYOUT_TITLE_CONTENT_2CONTENT";
break;
+ case AUTOLAYOUT_TITLE_4CONTENT:
+ retstr="AUTOLAYOUT_TITLE_4CONTENT";
+ break;
default:
retstr="unknown";
break;
@@ -1325,6 +1329,19 @@ rtl::OUString enumtoString(AutoLayout aut)
return retstr;
}
+void parseXml()
+{
+ int layoutlistsize;
+ const Reference<XElement> root= getRootElement();//get the root element of my xml file
+ const Reference<XNodeList> layoutlist = root->getElementsByTagName("layout");
+ layoutlistsize=layoutlist->getLength();
+ for( long index=0; index<layoutlistsize ;index++)
+ {
+ Reference<XNode> layoutnode = layoutlist->item(index); //get i'th layout element
+ layoutinfo.push_back(layoutnode);
+ }
+}
+
static void CalcAutoLayoutRectangles( SdPage& rPage, int nLayout, Rectangle* rRectangle ,const rtl::OUString& autolayout)
{
Rectangle aTitleRect;
@@ -1333,7 +1350,6 @@ static void CalcAutoLayoutRectangles( SdPage& rPage, int nLayout, Rectangle* rRe
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 )
@@ -1376,61 +1392,55 @@ 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++)
+ parseXml(); //calling this for temporary reference,have to use it somewhere else.
+ for(int y=0; y < layoutinfo.size(); y++) //loop through vector of Xnodes
{
- 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)
+ Reference<XNode> layoutnode = layoutinfo[y]; //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)
+ rtl::OUString sLayoutType = autolayout;
- if(sLayoutAttName==sLayoutType)
+ if(sLayoutAttName==sLayoutType)
+ {
+ int count=0;
+ 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++)
{
- 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
{
- 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);
- }
+ Reference<XNamedNodeMap> presObjAttributes = presobj->getAttributes();
+
+ 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[count] = Rectangle (aLayoutPos, aLayoutSize);
+ count=count+1;
}
- bnoprop=false;
}
- }
- else
break;
+ }
}
switch( nLayout )
diff --git a/sd/xml/layoutlist.xml b/sd/xml/layoutlist.xml
index cfe1f1e58e85..88ec81192be0 100644
--- a/sd/xml/layoutlist.xml
+++ b/sd/xml/layoutlist.xml
@@ -22,7 +22,7 @@
<presobj kind="PRESOBJ_OUTLINE2" layout-pos-x="1400" layout-pos-y="11274" layout-size-height="5809" layout-size-width="12297"/>
<presobj kind="PRESOBJ_OUTLINE3" layout-pos-x="14311" layout-pos-y="11274" layout-size-height="5809" layout-size-width="12297"/>
</layout>
- <layout type="AUTOLAYOUT_TITLE_4SCONTENT">
+ <layout type="AUTOLAYOUT_TITLE_4CONTENT">
<presobj kind="PRESOBJ_TITLE" layout-pos-x="1400" layout-pos-y="837" layout-size-height="4400" layout-size-width="25600"/>
<presobj kind="PRESOBJ_OUTLINE1" layout-pos-x="1400" layout-pos-y="4914" layout-size-height="5809" layout-size-width="12297"/>
<presobj kind="PRESOBJ_OUTLINE2" layout-pos-x="14311" layout-pos-y="5914" layout-size-height="4509" layout-size-width="12297"/>