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