Author: fschmid
Date: Sun Jul 28 10:23:19 2013
New Revision: 18401

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=18401
Log:
More fixes for #11685: Insufficient text and vector import of IDML file
+ correct placement for master page items on double sided documents.

Modified:
    trunk/Scribus/scribus/plugins/import/idml/importidml.cpp
    trunk/Scribus/scribus/plugins/import/idml/importidml.h

Modified: trunk/Scribus/scribus/plugins/import/idml/importidml.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=18401&path=/trunk/Scribus/scribus/plugins/import/idml/importidml.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/import/idml/importidml.cpp (original)
+++ trunk/Scribus/scribus/plugins/import/idml/importidml.cpp Sun Jul 28 
10:23:19 2013
@@ -486,6 +486,8 @@
        def_TextColumnCount = 1;
        def_TextColumnGutter = 0;
        def_TextColumnFixedWidth = 0;
+       def_LeftLineEnd = "None";
+       def_RightLineEnd = "None";
        frameLinks.clear();
        frameTargets.clear();
        importedColors.clear();
@@ -968,6 +970,8 @@
        nstyle.TextColumnCount = def_TextColumnCount;
        nstyle.TextColumnGutter = def_TextColumnGutter;
        nstyle.TextFlow = def_TextFlow;
+       nstyle.LeftLineEnd = def_LeftLineEnd;
+       nstyle.RightLineEnd = def_RightLineEnd;
        for(QDomNode itp = styleElem.firstChild(); !itp.isNull(); itp = 
itp.nextSibling() )
        {
                QDomElement itpr = itp.toElement();
@@ -1103,6 +1107,10 @@
                nstyle.gradientStrokeLength = 
styleElem.attribute("GradientStrokeLength").toDouble();
        if (styleElem.hasAttribute("GradientStrokeAngle"))
                nstyle.gradientStrokeAngle = 
styleElem.attribute("GradientStrokeAngle").toDouble();
+       if (styleElem.hasAttribute("RightLineEnd"))
+               nstyle.RightLineEnd = styleElem.attribute("RightLineEnd");
+       if (styleElem.hasAttribute("LeftLineEnd"))
+               nstyle.LeftLineEnd = styleElem.attribute("LeftLineEnd");
        QString itemName = styleElem.attribute("Self");
        ObjectStyles.insert(itemName, nstyle);
 }
@@ -1403,6 +1411,10 @@
                        else
                                def_fillTint = 100;
                        def_lineWidth = e.attribute("StrokeWeight", 
"0").toDouble();
+                       if (e.hasAttribute("RightLineEnd"))
+                               def_RightLineEnd = e.attribute("RightLineEnd");
+                       if (e.hasAttribute("LeftLineEnd"))
+                               def_LeftLineEnd = e.attribute("LeftLineEnd");
                }
                if (e.tagName() == "TextWrapPreference")
                {
@@ -1584,44 +1596,52 @@
                        m_Doc->setMasterPageMode(true);
                        QString pageNam = e.attribute("Self");
                        QStringList pages;
+                       ScPage *oldCur = m_Doc->currentPage();
                        for(QDomNode sp = e.firstChild(); !sp.isNull(); sp = 
sp.nextSibling() )
                        {
                                QDomElement spe = sp.toElement();
                                if (spe.tagName() == "Page")
                                {
-                                       m_Doc->addMasterPage(mpagecount, 
pageNam + "_" + spe.attribute("Self"));
+                                       QString itemTrans = 
spe.attribute("ItemTransform");
+                                       ScTextStream list(&itemTrans, 
QIODevice::ReadOnly);
+                                       double a, b, c, d, e1, f;
+                                       list >> a >> b >> c >> d >> e1 >> f;
+                                       /* Adding the values directly */
+                                       QTransform transformation(a, b, c, d, 
e1, f);
+                                       ScPage *addedPage = 
m_Doc->addMasterPage(mpagecount, pageNam + "_" + spe.attribute("Self"));
+                                       m_Doc->setCurrentPage(addedPage);
                                        pages.append(spe.attribute("Self"));
-                                       m_Doc->currentPage()->MPageNam = "";
+                                       addedPage->MPageNam = "";
                                        m_Doc->view()->addPage(mpagecount, 
true);
+                                       baseX = addedPage->xOffset();
+                                       baseY = addedPage->yOffset() + 
addedPage->height() / 2.0;
+                                       if (!facingPages)
+                                               baseX = addedPage->xOffset() + 
addedPage->width() / 2.0;
+                                       else
+                                               baseX = addedPage->xOffset() - 
transformation.dx();
+                                       for(QDomNode spp = e.firstChild(); 
!spp.isNull(); spp = spp.nextSibling() )
+                                       {
+                                               QDomElement spe = 
spp.toElement();
+                                               if ((spe.tagName() == 
"Rectangle") || (spe.tagName() == "Oval") || (spe.tagName() == "GraphicLine") 
|| (spe.tagName() == "Polygon") || (spe.tagName() == "TextFrame") || 
(spe.tagName() == "Group") || (spe.tagName() == "Button"))
+                                               {
+                                                       QList<PageItem*> el = 
parseItemXML(spe);
+                                                       for (int ec = 0; ec < 
el.count(); ++ec)
+                                                       {
+                                                               PageItem* ite = 
el.at(ec);
+                                                               int pgi = 
m_Doc->OnPage(ite);
+                                                               if (pgi != -1)
+                                                               {
+                                                                       
m_Doc->Items->append(ite);
+                                                                       
Elements.append(ite);
+                                                               }
+                                                       }
+                                               }
+                                       }
                                        mpagecount++;
-                                       baseX = m_Doc->currentPage()->xOffset();
-                                       baseY = m_Doc->currentPage()->yOffset() 
+ m_Doc->currentPage()->height() / 2.0;
                                }
                        }
                        masterSpreads.insert(pageNam, pages);
-                       if ((facingPages) && (mpagecount % 2 == 0))
-                       {
-                               baseX = m_Doc->currentPage()->xOffset() + 
m_Doc->currentPage()->width();
-                               baseY = m_Doc->currentPage()->yOffset() + 
m_Doc->currentPage()->height() / 2.0;
-                       }
-                       if (!facingPages)
-                       {
-                               baseX = m_Doc->currentPage()->xOffset() + 
m_Doc->currentPage()->width() / 2.0;
-                               baseY = m_Doc->currentPage()->yOffset() + 
m_Doc->currentPage()->height() / 2.0;
-                       }
-                       for(QDomNode sp = e.firstChild(); !sp.isNull(); sp = 
sp.nextSibling() )
-                       {
-                               QDomElement spe = sp.toElement();
-                               if ((spe.tagName() == "Rectangle") || 
(spe.tagName() == "Oval") || (spe.tagName() == "GraphicLine") || (spe.tagName() 
== "Polygon") || (spe.tagName() == "TextFrame") || (spe.tagName() == "Group") 
|| (spe.tagName() == "Button"))
-                               {
-                                       QList<PageItem*> el = parseItemXML(spe);
-                                       for (int ec = 0; ec < el.count(); ++ec)
-                                       {
-                                               m_Doc->Items->append(el.at(ec));
-                                               Elements.append(el.at(ec));
-                                       }
-                               }
-                       }
+                       m_Doc->setCurrentPage(oldCur);
                        m_Doc->setMasterPageMode(false);
                }
        }
@@ -1667,6 +1687,8 @@
        int TextColumnCount = def_TextColumnCount;
        double TextColumnGutter = def_TextColumnGutter;
        double TextColumnFixedWidth = def_TextColumnFixedWidth;
+       QString LeftLineEnd = def_LeftLineEnd;
+       QString RightLineEnd = def_RightLineEnd;
        QString imageFit = "None";
        PageItem::TextFlowMode textFlow = def_TextFlow;
        if (itElem.hasAttribute("AppliedObjectStyle"))
@@ -1733,6 +1755,8 @@
                        TextColumnGutter = nstyle.TextColumnGutter;
                        TextColumnFixedWidth = nstyle.TextColumnFixedWidth;
                        textFlow = nstyle.TextFlow;
+                       LeftLineEnd = nstyle.LeftLineEnd;
+                       RightLineEnd = nstyle.RightLineEnd;
                }
        }
        if (itElem.hasAttribute("FillColor"))
@@ -1795,6 +1819,10 @@
        }
        if (strokeShade < 0)
                strokeShade = 100;
+       if (itElem.hasAttribute("RightLineEnd"))
+               RightLineEnd = itElem.attribute("RightLineEnd");
+       if (itElem.hasAttribute("LeftLineEnd"))
+               LeftLineEnd = itElem.attribute("LeftLineEnd");
        QString forLayer = itElem.attribute("ItemLayer");
        if (layerTranslate.contains(forLayer))
                forLayer = layerTranslate[forLayer];
@@ -2211,6 +2239,59 @@
                                }
                                item->OldB2 = item->width();
                                item->OldH2 = item->height();
+                               if (item->isPolyLine())
+                               {
+                                       if (LeftLineEnd != "None")
+                                       {
+                                               if (LeftLineEnd == 
"SimpleArrowHead")
+                                                       
item->setStartArrowIndex(2);
+                                               else if (LeftLineEnd == 
"SimpleWideArrowHead")
+                                                       
item->setStartArrowIndex(2);
+                                               else if (LeftLineEnd == 
"TriangleArrowHead")
+                                                       
item->setStartArrowIndex(8);
+                                               else if (LeftLineEnd == 
"TriangleWideArrowHead")
+                                                       
item->setStartArrowIndex(8);
+                                               else if (LeftLineEnd == 
"BarbedArrowHead")
+                                                       
item->setStartArrowIndex(23);
+                                               else if (LeftLineEnd == 
"CurvedArrowHead")
+                                                       
item->setStartArrowIndex(26);
+                                               else if (LeftLineEnd == 
"CircleArrowHead")
+                                                       
item->setStartArrowIndex(17);
+                                               else if (LeftLineEnd == 
"CircleSolidArrowHead")
+                                                       
item->setStartArrowIndex(17);
+                                               else if (LeftLineEnd == 
"Square-ArrowHead")
+                                                       
item->setStartArrowIndex(5);
+                                               else if (LeftLineEnd == 
"SquareSolid-ArrowHead")
+                                                       
item->setStartArrowIndex(5);
+                                               else if (LeftLineEnd == 
"BarArrowHead")
+                                                       
item->setStartArrowIndex(35);
+                                       }
+                                       if (RightLineEnd != "None")
+                                       {
+                                               if (RightLineEnd == 
"SimpleArrowHead")
+                                                       
item->setEndArrowIndex(2);
+                                               else if (RightLineEnd == 
"SimpleWideArrowHead")
+                                                       
item->setEndArrowIndex(2);
+                                               else if (RightLineEnd == 
"TriangleArrowHead")
+                                                       
item->setEndArrowIndex(8);
+                                               else if (RightLineEnd == 
"TriangleWideArrowHead")
+                                                       
item->setEndArrowIndex(8);
+                                               else if (RightLineEnd == 
"BarbedArrowHead")
+                                                       
item->setEndArrowIndex(23);
+                                               else if (RightLineEnd == 
"CurvedArrowHead")
+                                                       
item->setEndArrowIndex(26);
+                                               else if (RightLineEnd == 
"CircleArrowHead")
+                                                       
item->setEndArrowIndex(17);
+                                               else if (RightLineEnd == 
"CircleSolidArrowHead")
+                                                       
item->setEndArrowIndex(17);
+                                               else if (RightLineEnd == 
"Square-ArrowHead")
+                                                       
item->setEndArrowIndex(7);
+                                               else if (RightLineEnd == 
"SquareSolid-ArrowHead")
+                                                       
item->setEndArrowIndex(7);
+                                               else if (RightLineEnd == 
"BarArrowHead")
+                                                       
item->setEndArrowIndex(35);
+                                       }
+                               }
                                item->updateClip();
                                item->setItemName(itemName);
                                if (importerFlags & LoadSavePlugin::lfCreateDoc)
@@ -2399,6 +2480,59 @@
                        item->setRotation(-rot, true);
                        item->OldB2 = item->width();
                        item->OldH2 = item->height();
+                       if (item->isPolyLine())
+                       {
+                               if (LeftLineEnd != "None")
+                               {
+                                       if (LeftLineEnd == "SimpleArrowHead")
+                                               item->setStartArrowIndex(2);
+                                       else if (LeftLineEnd == 
"SimpleWideArrowHead")
+                                               item->setStartArrowIndex(2);
+                                       else if (LeftLineEnd == 
"TriangleArrowHead")
+                                               item->setStartArrowIndex(8);
+                                       else if (LeftLineEnd == 
"TriangleWideArrowHead")
+                                               item->setStartArrowIndex(8);
+                                       else if (LeftLineEnd == 
"BarbedArrowHead")
+                                               item->setStartArrowIndex(23);
+                                       else if (LeftLineEnd == 
"CurvedArrowHead")
+                                               item->setStartArrowIndex(26);
+                                       else if (LeftLineEnd == 
"CircleArrowHead")
+                                               item->setStartArrowIndex(17);
+                                       else if (LeftLineEnd == 
"CircleSolidArrowHead")
+                                               item->setStartArrowIndex(17);
+                                       else if (LeftLineEnd == 
"Square-ArrowHead")
+                                               item->setStartArrowIndex(5);
+                                       else if (LeftLineEnd == 
"SquareSolid-ArrowHead")
+                                               item->setStartArrowIndex(5);
+                                       else if (LeftLineEnd == "BarArrowHead")
+                                               item->setStartArrowIndex(35);
+                               }
+                               if (RightLineEnd != "None")
+                               {
+                                       if (RightLineEnd == "SimpleArrowHead")
+                                               item->setEndArrowIndex(2);
+                                       else if (RightLineEnd == 
"SimpleWideArrowHead")
+                                               item->setEndArrowIndex(2);
+                                       else if (RightLineEnd == 
"TriangleArrowHead")
+                                               item->setEndArrowIndex(8);
+                                       else if (RightLineEnd == 
"TriangleWideArrowHead")
+                                               item->setEndArrowIndex(8);
+                                       else if (RightLineEnd == 
"BarbedArrowHead")
+                                               item->setEndArrowIndex(23);
+                                       else if (RightLineEnd == 
"CurvedArrowHead")
+                                               item->setEndArrowIndex(26);
+                                       else if (RightLineEnd == 
"CircleArrowHead")
+                                               item->setEndArrowIndex(17);
+                                       else if (RightLineEnd == 
"CircleSolidArrowHead")
+                                               item->setEndArrowIndex(17);
+                                       else if (RightLineEnd == 
"Square-ArrowHead")
+                                               item->setEndArrowIndex(7);
+                                       else if (RightLineEnd == 
"SquareSolid-ArrowHead")
+                                               item->setEndArrowIndex(7);
+                                       else if (RightLineEnd == "BarArrowHead")
+                                               item->setEndArrowIndex(35);
+                               }
+                       }
                        item->updateClip();
                        item->setItemName(itemName);
                        item->OwnPage = m_Doc->OnPage(item);
@@ -3084,6 +3218,10 @@
                        nstyle.TextColumnFixedWidth = 
style.TextColumnFixedWidth;
                if (style.TextFlow != def_TextFlow)
                        nstyle.TextFlow = style.TextFlow;
+               if (style.LeftLineEnd != def_LeftLineEnd)
+                       nstyle.LeftLineEnd = style.LeftLineEnd;
+               if (style.RightLineEnd != def_RightLineEnd)
+                       nstyle.RightLineEnd = style.RightLineEnd;
        }
 }
 

Modified: trunk/Scribus/scribus/plugins/import/idml/importidml.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=18401&path=/trunk/Scribus/scribus/plugins/import/idml/importidml.h
==============================================================================
--- trunk/Scribus/scribus/plugins/import/idml/importidml.h (original)
+++ trunk/Scribus/scribus/plugins/import/idml/importidml.h Sun Jul 28 10:23:19 
2013
@@ -91,6 +91,8 @@
                double TextColumnGutter;
                double TextColumnFixedWidth;
                PageItem::TextFlowMode TextFlow;
+               QString LeftLineEnd;
+               QString RightLineEnd;
        };
        QString getNodeValue(QDomNode &baseNode, QString path);
        bool convert(QString fn);
@@ -153,6 +155,8 @@
        QString def_fillGradient;
        QString def_strokeColor;
        QString def_strokeGradient;
+       QString def_LeftLineEnd;
+       QString def_RightLineEnd;
        int def_Blendmode;
        int def_fillBlendmode;
        int def_strokeBlendmode;


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to