@ -16,6 +16,7 @@
# include <QSvgGenerator>
# include <QSvgRenderer>
# include <QPixmap>
# include <QMap>
# include "core/UBPersistenceManager.h"
@ -373,6 +374,29 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolygon(const QDomElement &e
brush . setColor ( fillColor ) ;
brush . setStyle ( Qt : : SolidPattern ) ;
QUuid itemUuid ( element . attribute ( aId ) . right ( QUuid ( ) . toString ( ) . length ( ) ) ) ;
QUuid itemGroupUuid ( element . attribute ( aId ) . left ( QUuid ( ) . toString ( ) . length ( ) - 1 ) ) ;
if ( ! itemUuid . isNull ( ) & & ( itemGroupUuid ! = itemUuid ) ) // reimported from UBZ
{
UBGraphicsPolygonItem * graphicsPolygon = new UBGraphicsPolygonItem ( polygon ) ;
graphicsPolygon - > setBrush ( brush ) ;
QTransform transform ;
QString textTransform = element . attribute ( aTransform ) ;
graphicsPolygon - > resetTransform ( ) ;
if ( ! textTransform . isNull ( ) ) {
transform = transformFromString ( textTransform , graphicsPolygon ) ;
}
mCurrentScene - > addItem ( graphicsPolygon ) ;
graphicsPolygon - > setUuid ( itemUuid ) ;
}
else // single CFF
{
QSvgGenerator * generator = createSvgGenerator ( width + pen . width ( ) , height + pen . width ( ) ) ;
QPainter painter ;
@ -403,7 +427,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolygon(const QDomElement &e
}
delete generator ;
}
return true ;
}
bool UBCFFSubsetAdaptor : : UBCFFSubsetReader : : parseSvgPolyline ( const QDomElement & element )
@ -441,6 +465,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolyline(const QDomElement &
//bounding rect lef top corner coordinates
qreal x1 = polygon . boundingRect ( ) . topLeft ( ) . x ( ) ;
qreal y1 = polygon . boundingRect ( ) . topLeft ( ) . y ( ) ;
//bounding rect dimensions
qreal width = polygon . boundingRect ( ) . width ( ) ;
qreal height = polygon . boundingRect ( ) . height ( ) ;
@ -458,14 +483,41 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolyline(const QDomElement &
pen . setColor ( strokeColor ) ;
pen . setWidth ( strokeWidth ) ;
QBrush brush ;
brush . setColor ( strokeColor ) ;
brush . setStyle ( Qt : : SolidPattern ) ;
QUuid itemUuid ( element . attribute ( aId ) . right ( QUuid ( ) . toString ( ) . length ( ) ) ) ;
QUuid itemGroupUuid ( element . attribute ( aId ) . left ( QUuid ( ) . toString ( ) . length ( ) - 1 ) ) ;
if ( ! itemUuid . isNull ( ) & & ( itemGroupUuid ! = itemUuid ) ) // reimported from UBZ
{
UBGraphicsPolygonItem * graphicsPolygon = new UBGraphicsPolygonItem ( polygon ) ;
UBGraphicsStroke * stroke = new UBGraphicsStroke ( ) ;
graphicsPolygon - > setStroke ( stroke ) ;
graphicsPolygon - > setBrush ( brush ) ;
QTransform transform ;
QString textTransform = element . attribute ( aTransform ) ;
graphicsPolygon - > resetTransform ( ) ;
if ( ! textTransform . isNull ( ) ) {
transform = transformFromString ( textTransform , graphicsPolygon ) ;
}
mCurrentScene - > addItem ( graphicsPolygon ) ;
}
else // simple CFF
{
QSvgGenerator * generator = createSvgGenerator ( width + pen . width ( ) , height + pen . width ( ) ) ;
QPainter painter ;
painter . begin ( generator ) ; //drawing to svg tmp file
painter . translate ( pen . widthF ( ) / 2 - x1 , pen . widthF ( ) / 2 - y1 ) ;
painter . translate ( pen . widthF ( ) / 2 - x1 , pen . widthF ( ) / 2 - y1 ) ;
painter . setBrush ( brush ) ;
painter . setPen ( pen ) ;
painter . drawPolyline ( polygon ) ;
painter . drawPolygon ( polygon ) ;
painter . end ( ) ;
@ -478,7 +530,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolyline(const QDomElement &
if ( ! textTransform . isNull ( ) ) {
transform = transformFromString ( textTransform , svgItem ) ;
}
repositionSvgItem ( svgItem , width + strokeWidth , height + strokeWidth , x1 + transform . m31 ( ) - strokeWidth / 2 , y1 + transform . m32 ( ) + strokeWidth / 2 , transform ) ;
repositionSvgItem ( svgItem , width + strokeWidth , height + strokeWidth , x1 - strokeWidth / 2 + transform . m31 ( ) , y1 + strokeWidth / 2 + transform . m32 ( ) , transform ) ;
hashSceneItem ( element , svgItem ) ;
if ( mGSectionContainer )
@ -487,6 +539,8 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolyline(const QDomElement &
}
delete generator ;
}
return true ;
}
@ -980,8 +1034,8 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgElement(const QDomElement &p
{
QString tagName = parent . tagName ( ) ;
if ( parent . namespaceURI ( ) ! = svgNS ) {
qDebu g ( ) < < " Incorrect namespace, error at content file, line number " < < parent . lineNumber ( ) ;
return false ;
qWarnin g ( ) < < " Incorrect namespace, error at content file, line number " < < parent . lineNumber ( ) ;
//return false;
}
if ( tagName = = tG & & ! parseGSection ( parent ) ) return false ;
@ -1027,8 +1081,8 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPageset(const QDomElement &p
bool UBCFFSubsetAdaptor : : UBCFFSubsetReader : : parseIwbMeta ( const QDomElement & element )
{
if ( element . namespaceURI ( ) ! = iwbNS ) {
qDebu g ( ) < < " incorrect meta namespace, incorrect document " ;
return false ;
qWarnin g ( ) < < " incorrect meta namespace, incorrect document " ;
//return false;
}
return true ;
@ -1036,8 +1090,8 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseIwbMeta(const QDomElement &elem
bool UBCFFSubsetAdaptor : : UBCFFSubsetReader : : parseSvg ( const QDomElement & svgSection )
{
if ( svgSection . namespaceURI ( ) ! = svgNS ) {
qDebu g ( ) < < " incorrect svg namespace, incorrect document " ;
return false ;
qWarnin g ( ) < < " incorrect svg namespace, incorrect document " ;
// return false;
}
parseSvgSectionAttr ( svgSection ) ;
@ -1052,15 +1106,86 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvg(const QDomElement &svgSecti
return true ;
}
bool UBCFFSubsetAdaptor : : UBCFFSubsetReader : : parseIwbGroup ( QDomElement & parent )
UBGraphicsGroupContainerItem * UBCFFSubsetAdaptor : : UBCFFSubsetReader : : parseIwbGroup ( QDomElement & parent )
{
//TODO. Create groups from elements parsed by parseIwbElement() function
if ( parent . namespaceURI ( ) ! = iwbNS ) {
qDebu g ( ) < < " incorrect iwb group namespace, incorrect document " ;
return false ;
qWarnin g ( ) < < " incorrect iwb group namespace, incorrect document " ;
// return false;
}
return true ;
UBGraphicsGroupContainerItem * group = new UBGraphicsGroupContainerItem ( ) ;
QMultiMap < QString , UBGraphicsPolygonItem * > strokesGroupsContainer ;
QList < QGraphicsItem * > groupContainer ;
QString currentStrokeIdentifier ;
QDomElement currentStrokeElement = parent . firstChildElement ( ) ;
while ( ! currentStrokeElement . isNull ( ) )
{
if ( tGroup = = currentStrokeElement . tagName ( ) )
group - > addToGroup ( parseIwbGroup ( currentStrokeElement ) ) ;
else
{
QString uuid = currentStrokeElement . attribute ( aRef ) ;
if ( ! uuid . isEmpty ( ) )
{
if ( uuid . size ( ) > QUuid ( ) . toString ( ) . length ( ) ) // create stroke group
{
currentStrokeIdentifier = uuid . left ( QUuid ( ) . toString ( ) . length ( ) - 1 ) ;
UBGraphicsPolygonItem * strokeByUuid = qgraphicsitem_cast < UBGraphicsPolygonItem * > ( mCurrentScene - > itemForUuid ( QUuid ( uuid . right ( QUuid ( ) . toString ( ) . length ( ) ) ) ) ) ;
if ( strokeByUuid )
strokesGroupsContainer . insert ( currentStrokeIdentifier , strokeByUuid ) ;
}
else // single elements in group
groupContainer . append ( mCurrentScene - > itemForUuid ( QUuid ( uuid ) ) ) ;
}
}
currentStrokeElement = currentStrokeElement . nextSiblingElement ( ) ;
}
foreach ( QString key , strokesGroupsContainer . keys ( ) )
{
UBGraphicsStrokesGroup * pStrokesGroup = new UBGraphicsStrokesGroup ( ) ;
UBGraphicsStroke * currentStroke = new UBGraphicsStroke ( ) ;
foreach ( UBGraphicsPolygonItem * poly , strokesGroupsContainer . values ( key ) )
{
if ( poly )
{
mCurrentScene - > removeItem ( poly ) ;
mCurrentScene - > removeItemFromDeletion ( poly ) ;
poly - > setStrokesGroup ( pStrokesGroup ) ;
poly - > setStroke ( currentStroke ) ;
pStrokesGroup - > addToGroup ( poly ) ;
}
}
if ( currentStroke - > polygons ( ) . empty ( ) )
delete currentStroke ;
if ( pStrokesGroup - > childItems ( ) . count ( ) )
mCurrentScene - > addItem ( pStrokesGroup ) ;
else
delete pStrokesGroup ;
if ( pStrokesGroup )
group - > addToGroup ( pStrokesGroup ) ;
}
foreach ( QGraphicsItem * item , groupContainer )
group - > addToGroup ( item ) ;
if ( group - > childItems ( ) . count ( ) )
{
mCurrentScene - > addItem ( group ) ;
if ( ! groupContainer . count ( ) )
{
group - > destroy ( false ) ;
}
}
return group ;
}
bool UBCFFSubsetAdaptor : : UBCFFSubsetReader : : strToBool ( QString str )
@ -1071,8 +1196,8 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::strToBool(QString str)
bool UBCFFSubsetAdaptor : : UBCFFSubsetReader : : parseIwbElement ( QDomElement & element )
{
if ( element . namespaceURI ( ) ! = iwbNS ) {
qDebu g ( ) < < " incorrect iwb element namespace, incorrect document " ;
return false ;
qWarnin g ( ) < < " incorrect iwb element namespace, incorrect document " ;
// return false;
}
bool locked = false ;