summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVishv Brahmbhatt <vishvbrahmbhatt19@gmail.com>2013-07-28 12:33:45 +0530
committerThorsten Behrens <tbehrens@suse.com>2013-08-26 14:47:23 +0200
commit84bfb880e17e6e38e24e8554a7ffdd7938432b8b (patch)
treeffe419e05b44b5dca79933d949acad3de2d9e27d
parent8089be8358ed1d4b48e57a061d4cf223d39061ca (diff)
Changed the logic of parsing
Have added a vector list of XNode to store the parse XML and referring it instead of XML eveytime. Need to make scope level changes for vector and parseXml() in the next commit. Change-Id: I2f270fc18058772fbf30a2a44e564c8290c316c4
-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"/>