You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1630 lines
57 KiB
1630 lines
57 KiB
/* This file is part of the KDE project
|
|
Copyright (C) 2003 Percy Leonhardt
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "stylefactory.h"
|
|
|
|
#include <tqcolor.h>
|
|
#include <tqdatetime.h>
|
|
#include <KoUnit.h>
|
|
#include <kdebug.h>
|
|
|
|
StyleFactory::StyleFactory()
|
|
{
|
|
m_strokeDashStyles.setAutoDelete( true );
|
|
m_gradientStyles.setAutoDelete( true );
|
|
m_hatchStyles.setAutoDelete( true );
|
|
m_markerStyles.setAutoDelete( true );
|
|
m_fillImageStyles.setAutoDelete( true );
|
|
m_listStyles.setAutoDelete( true );
|
|
m_pageStyles.setAutoDelete( true );
|
|
m_textStyles.setAutoDelete( true );
|
|
m_graphicStyles.setAutoDelete( true );
|
|
m_paragraphStyles.setAutoDelete( true );
|
|
m_pageMasterStyles.setAutoDelete( true );
|
|
|
|
// create standard graphic style
|
|
GraphicStyle * graphicStyle;
|
|
graphicStyle = new GraphicStyle ( "standard", "solid", "0cm", "0x000000",
|
|
"hidden", "0.3cm", "0.3cm", "0x808080",
|
|
"0cm", "0cm", "0cm", "0cm", "0x000000",
|
|
"false", "none", "Thorndale", "24pt",
|
|
"normal", "none", "none", "normal",
|
|
"100%", "start", "solid", "0x00b8ff",
|
|
"false" );
|
|
|
|
m_graphicStyles.append( graphicStyle );
|
|
}
|
|
|
|
StyleFactory::~StyleFactory()
|
|
{
|
|
}
|
|
|
|
void StyleFactory::addOfficeStyles( TQDomDocument & doc, TQDomElement & styles )
|
|
{
|
|
StrokeDashStyle * sd;
|
|
for ( sd = m_strokeDashStyles.first(); sd ; sd = m_strokeDashStyles.next() )
|
|
sd->toXML( doc, styles );
|
|
|
|
GradientStyle * g;
|
|
for ( g = m_gradientStyles.first(); g ; g = m_gradientStyles.next() )
|
|
g->toXML( doc, styles );
|
|
|
|
MarkerStyle * m;
|
|
for ( m = m_markerStyles.first(); m ; m = m_markerStyles.next() )
|
|
m->toXML( doc, styles );
|
|
|
|
HatchStyle * h;
|
|
for ( h = m_hatchStyles.first(); h ; h = m_hatchStyles.next() )
|
|
h->toXML( doc, styles );
|
|
|
|
GraphicStyle * gr;
|
|
gr = m_graphicStyles.first(); // skip the "standard" style
|
|
gr->toXML( doc, styles );
|
|
}
|
|
|
|
void StyleFactory::addOfficeMaster( TQDomDocument & doc, TQDomElement & master )
|
|
{
|
|
PageMasterStyle * p;
|
|
for ( p = m_pageMasterStyles.first(); p ; p = m_pageMasterStyles.next() )
|
|
{
|
|
TQDomElement masterPage = doc.createElement( "style:master-page" );
|
|
masterPage.setAttribute( "style:name", p->style() );
|
|
masterPage.setAttribute( "style:page-master-name", p->name() );
|
|
masterPage.setAttribute( "draw:style-name", "dp1" );
|
|
master.appendChild( masterPage );
|
|
}
|
|
}
|
|
|
|
void StyleFactory::addOfficeAutomatic( TQDomDocument & doc, TQDomElement & automatic )
|
|
{
|
|
PageMasterStyle * p;
|
|
for ( p = m_pageMasterStyles.first(); p ; p = m_pageMasterStyles.next() )
|
|
{
|
|
p->toXML( doc, automatic );
|
|
}
|
|
}
|
|
|
|
void StyleFactory::addAutomaticStyles( TQDomDocument & doc, TQDomElement & autoStyles )
|
|
{
|
|
ListStyle * l;
|
|
for ( l = m_listStyles.first(); l ; l = m_listStyles.next() )
|
|
l->toXML( doc, autoStyles );
|
|
|
|
PageStyle * p;
|
|
for ( p = m_pageStyles.first(); p ; p = m_pageStyles.next() )
|
|
p->toXML( doc, autoStyles );
|
|
|
|
TextStyle * t;
|
|
for ( t = m_textStyles.first(); t ; t = m_textStyles.next() )
|
|
t->toXML( doc, autoStyles );
|
|
|
|
GraphicStyle * g;
|
|
g = m_graphicStyles.first(); // skip the "standard" style
|
|
for ( g = m_graphicStyles.next(); g ; g = m_graphicStyles.next() )
|
|
g->toXML( doc, autoStyles );
|
|
|
|
ParagraphStyle * pg;
|
|
for ( pg = m_paragraphStyles.first(); pg ; pg = m_paragraphStyles.next() )
|
|
pg->toXML( doc, autoStyles );
|
|
}
|
|
|
|
TQString StyleFactory::createStrokeDashStyle( int style )
|
|
{
|
|
StrokeDashStyle * newStrokeDashStyle, * sd;
|
|
newStrokeDashStyle = new StrokeDashStyle( style );
|
|
for ( sd = m_strokeDashStyles.first(); sd ; sd = m_strokeDashStyles.next() )
|
|
{
|
|
if ( sd->name() == newStrokeDashStyle->name() )
|
|
{
|
|
delete newStrokeDashStyle;
|
|
return sd->name();
|
|
}
|
|
}
|
|
|
|
m_strokeDashStyles.append( newStrokeDashStyle );
|
|
return newStrokeDashStyle->name();
|
|
}
|
|
|
|
TQString StyleFactory::createGradientStyle( TQDomElement & gradient )
|
|
{
|
|
GradientStyle * newGradientStyle, * g;
|
|
newGradientStyle = new GradientStyle( gradient, m_gradientStyles.count() + 1 );
|
|
for ( g = m_gradientStyles.first(); g ; g = m_gradientStyles.next() )
|
|
{
|
|
if ( g->name() == newGradientStyle->name() )
|
|
{
|
|
delete newGradientStyle;
|
|
return g->name();
|
|
}
|
|
}
|
|
|
|
m_gradientStyles.append( newGradientStyle );
|
|
return newGradientStyle->name();
|
|
}
|
|
|
|
TQString StyleFactory::createMarkerStyle( int style )
|
|
{
|
|
MarkerStyle * newMarkerStyle, * m;
|
|
newMarkerStyle = new MarkerStyle( style );
|
|
for ( m = m_markerStyles.first(); m ; m = m_markerStyles.next() )
|
|
{
|
|
if ( m->name() == newMarkerStyle->name() )
|
|
{
|
|
delete newMarkerStyle;
|
|
return m->name();
|
|
}
|
|
}
|
|
|
|
m_markerStyles.append( newMarkerStyle );
|
|
return newMarkerStyle->name();
|
|
}
|
|
|
|
TQString StyleFactory::createHatchStyle( int style, TQString & color )
|
|
{
|
|
HatchStyle * newHatchStyle, * h;
|
|
newHatchStyle = new HatchStyle( style, color );
|
|
for ( h = m_hatchStyles.first(); h ; h = m_hatchStyles.next() )
|
|
{
|
|
if ( h->name() == newHatchStyle->name() )
|
|
{
|
|
delete newHatchStyle;
|
|
return h->name();
|
|
}
|
|
}
|
|
|
|
m_hatchStyles.append( newHatchStyle );
|
|
return newHatchStyle->name();
|
|
}
|
|
|
|
TQString StyleFactory::createListStyle( TQDomElement & e )
|
|
{
|
|
ListStyle * newListStyle, * l;
|
|
newListStyle = new ListStyle( e, m_listStyles.count() + 1 );
|
|
for ( l = m_listStyles.first(); l ; l = m_listStyles.next() )
|
|
{
|
|
if ( *l == *newListStyle )
|
|
{
|
|
delete newListStyle;
|
|
return l->name();
|
|
}
|
|
}
|
|
|
|
m_listStyles.append( newListStyle );
|
|
return newListStyle->name();
|
|
}
|
|
|
|
TQString StyleFactory::createPageStyle( TQDomElement & e )
|
|
{
|
|
PageStyle * newPageStyle, * p;
|
|
newPageStyle = new PageStyle( this, e, m_pageStyles.count() + 1 );
|
|
for ( p = m_pageStyles.first(); p ; p = m_pageStyles.next() )
|
|
{
|
|
if ( *p == *newPageStyle )
|
|
{
|
|
delete newPageStyle;
|
|
return p->name();
|
|
}
|
|
}
|
|
|
|
m_pageStyles.append( newPageStyle );
|
|
return newPageStyle->name();
|
|
}
|
|
|
|
TQString StyleFactory::createTextStyle( TQDomElement & e )
|
|
{
|
|
TextStyle * newTextStyle, * t;
|
|
newTextStyle = new TextStyle( e, m_textStyles.count() + 1 );
|
|
for ( t = m_textStyles.first(); t ; t = m_textStyles.next() )
|
|
{
|
|
if ( *t == *newTextStyle )
|
|
{
|
|
delete newTextStyle;
|
|
return t->name();
|
|
}
|
|
}
|
|
|
|
m_textStyles.append( newTextStyle );
|
|
return newTextStyle->name();
|
|
}
|
|
|
|
TQString StyleFactory::createGraphicStyle( TQDomElement & e )
|
|
{
|
|
GraphicStyle * newGraphicStyle, * g;
|
|
newGraphicStyle = new GraphicStyle( this, e, m_graphicStyles.count() );
|
|
for ( g = m_graphicStyles.first(); g ; g = m_graphicStyles.next() )
|
|
{
|
|
if ( *g == *newGraphicStyle )
|
|
{
|
|
delete newGraphicStyle;
|
|
return g->name();
|
|
}
|
|
}
|
|
|
|
m_graphicStyles.append( newGraphicStyle );
|
|
return newGraphicStyle->name();
|
|
}
|
|
|
|
TQString StyleFactory::createParagraphStyle( TQDomElement & e )
|
|
{
|
|
ParagraphStyle * newParagraphStyle, * p;
|
|
newParagraphStyle = new ParagraphStyle( e, m_paragraphStyles.count() + 1 );
|
|
for ( p = m_paragraphStyles.first(); p ; p = m_paragraphStyles.next() )
|
|
{
|
|
if ( *p == *newParagraphStyle )
|
|
{
|
|
delete newParagraphStyle;
|
|
return p->name();
|
|
}
|
|
}
|
|
|
|
m_paragraphStyles.append( newParagraphStyle );
|
|
return newParagraphStyle->name();
|
|
}
|
|
|
|
TQString StyleFactory::createPageMasterStyle( TQDomElement & e )
|
|
{
|
|
PageMasterStyle * newPMStyle, * p;
|
|
newPMStyle = new PageMasterStyle( e, m_pageMasterStyles.count() );
|
|
for ( p = m_pageMasterStyles.first(); p ; p = m_pageMasterStyles.next() )
|
|
{
|
|
if ( *p == *newPMStyle )
|
|
{
|
|
delete newPMStyle;
|
|
return p->style();
|
|
}
|
|
}
|
|
|
|
m_pageMasterStyles.append( newPMStyle );
|
|
return newPMStyle->style();
|
|
}
|
|
|
|
TQString StyleFactory::toCM( const TQString & point )
|
|
{
|
|
double pt = point.toFloat();
|
|
double cm = KoUnit::toCM( pt );
|
|
return TQString( "%1cm" ).arg ( cm );
|
|
}
|
|
|
|
StrokeDashStyle::StrokeDashStyle( int style )
|
|
{
|
|
switch ( style )
|
|
{
|
|
case 2:
|
|
m_name = "Fine Dashed";
|
|
m_style = "rect";
|
|
m_dots1 = "1";
|
|
m_dots1_length = "0.508cm";
|
|
m_dots2 = "1";
|
|
m_dots2_length = "0.508cm";
|
|
m_distance = "0.508cm";
|
|
break;
|
|
case 3:
|
|
m_name = "Fine Dotted";
|
|
m_style = "rect";
|
|
m_dots1 = "1";
|
|
m_distance = "0.257cm";
|
|
break;
|
|
case 4:
|
|
m_name = "Ultrafine 1 Dot 1 Dash";
|
|
m_style = "rect";
|
|
m_dots1 = "1";
|
|
m_dots1_length = "0.051cm";
|
|
m_dots2 = "1";
|
|
m_dots2_length = "0.254cm";
|
|
m_distance = "0.127cm";
|
|
break;
|
|
case 5:
|
|
m_name = "2 Dots 1 Dash";
|
|
m_style = "rect";
|
|
m_dots1 = "2";
|
|
m_dots2 = "1";
|
|
m_dots2_length = "0.203cm";
|
|
m_distance = "0.203cm";
|
|
break;
|
|
}
|
|
}
|
|
|
|
void StrokeDashStyle::toXML( TQDomDocument & doc, TQDomElement & e ) const
|
|
{
|
|
TQDomElement strokeDash = doc.createElement( "draw:stroke-dash" );
|
|
strokeDash.setAttribute( "draw:name", m_name );
|
|
if ( !m_style.isNull() )
|
|
strokeDash.setAttribute( "draw:style", m_style );
|
|
if ( !m_dots1.isNull() )
|
|
strokeDash.setAttribute( "draw:dots1", m_dots1 );
|
|
if ( !m_dots1_length.isNull() )
|
|
strokeDash.setAttribute( "draw:dots1-length", m_dots1_length );
|
|
if ( !m_dots2.isNull() )
|
|
strokeDash.setAttribute( "draw:dots2", m_dots2 );
|
|
if ( !m_dots2_length.isNull() )
|
|
strokeDash.setAttribute( "draw:dots2-length", m_dots2_length );
|
|
if ( !m_distance.isNull() )
|
|
strokeDash.setAttribute( "draw:distance", m_distance );
|
|
|
|
e.appendChild( strokeDash );
|
|
}
|
|
|
|
GradientStyle::GradientStyle( TQDomElement & gradient, int index )
|
|
{
|
|
m_name = TQString( "Gradient %1" ).tqarg( index );
|
|
m_start_intensity = "100%";
|
|
m_end_intensity = "100%";
|
|
m_border = "0%";
|
|
|
|
int type = 1;
|
|
if ( gradient.nodeName() == "PAGE" )
|
|
{
|
|
// gradient from page background
|
|
TQDomElement backColor1 = gradient.namedItem( "BACKCOLOR1" ).toElement();
|
|
TQDomElement backColor2 = gradient.namedItem( "BACKCOLOR2" ).toElement();
|
|
TQDomElement bcType = gradient.namedItem( "BCTYPE" ).toElement();
|
|
TQDomElement bGradient = gradient.namedItem( "BGRADIENT" ).toElement();
|
|
|
|
if ( !backColor1.isNull() )
|
|
m_start_color = backColor1.attribute( "color" );
|
|
if ( !backColor2.isNull() )
|
|
m_end_color = backColor2.attribute( "color" );
|
|
if ( !bcType.isNull() )
|
|
type = bcType.attribute( "value" ).toInt();
|
|
if ( !bGradient.isNull() )
|
|
{
|
|
if ( bGradient.attribute( "unbalanced" ) == "0" )
|
|
{
|
|
m_cx = "50%";
|
|
m_cy = "50%";
|
|
}
|
|
else
|
|
{
|
|
int cx = bGradient.attribute( "xfactor" ).toInt();
|
|
int cy = bGradient.attribute( "yfactor" ).toInt();
|
|
m_cx = TQString( "%1%" ).tqarg( cx / 4 + 50 );
|
|
m_cy = TQString( "%1%" ).tqarg( cy / 4 + 50 );
|
|
}
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
// gradient from object
|
|
if ( gradient.hasAttribute( "color1" ) )
|
|
m_start_color = gradient.attribute( "color1" );
|
|
if ( gradient.hasAttribute( "color2" ) )
|
|
m_end_color = gradient.attribute( "color2" );
|
|
if ( gradient.hasAttribute( "type" ) )
|
|
type = gradient.attribute( "type" ).toInt();
|
|
if ( gradient.hasAttribute( "unbalanced" ) )
|
|
{
|
|
if ( gradient.attribute( "unbalanced" ) == "0" )
|
|
{
|
|
m_cx = "50%";
|
|
m_cy = "50%";
|
|
}
|
|
else
|
|
{
|
|
int cx = gradient.attribute( "xfactor" ).toInt();
|
|
int cy = gradient.attribute( "yfactor" ).toInt();
|
|
m_cx = TQString( "%1%" ).tqarg( cx / 4 + 50 );
|
|
m_cy = TQString( "%1%" ).tqarg( cy / 4 + 50 );
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
switch ( type )
|
|
{
|
|
case 1:
|
|
m_style = "linear";
|
|
m_angle = "0";
|
|
break;
|
|
case 2:
|
|
m_style = "linear";
|
|
m_angle = "900";
|
|
break;
|
|
case 3:
|
|
m_style = "linear";
|
|
m_angle = "450";
|
|
break;
|
|
case 4:
|
|
m_style = "linear";
|
|
m_angle = "135";
|
|
break;
|
|
case 5:
|
|
m_style = "radial";
|
|
m_angle = "0";
|
|
break;
|
|
case 6:
|
|
m_style = "square";
|
|
m_angle = "0";
|
|
break;
|
|
case 7:
|
|
m_style = "axial";
|
|
m_angle = "0";
|
|
break;
|
|
}
|
|
}
|
|
|
|
void GradientStyle::toXML( TQDomDocument & doc, TQDomElement & e ) const
|
|
{
|
|
TQDomElement gradient = doc.createElement( "draw:gradient" );
|
|
gradient.setAttribute( "draw:name", m_name );
|
|
if ( !m_style.isNull() )
|
|
gradient.setAttribute( "draw:style", m_style );
|
|
if ( !m_start_color.isNull() )
|
|
gradient.setAttribute( "draw:start-color", m_start_color );
|
|
if ( !m_end_color.isNull() )
|
|
gradient.setAttribute( "draw:end-color", m_end_color );
|
|
if ( !m_start_intensity.isNull() )
|
|
gradient.setAttribute( "draw:start-intensity", m_start_intensity );
|
|
if ( !m_end_intensity.isNull() )
|
|
gradient.setAttribute( "draw:end-intensity", m_end_intensity );
|
|
if ( !m_angle.isNull() )
|
|
gradient.setAttribute( "draw:angle", m_angle );
|
|
if ( !m_border.isNull() )
|
|
gradient.setAttribute( "draw:border", m_border );
|
|
if ( !m_cx.isNull() )
|
|
gradient.setAttribute( "draw:cx", m_cx );
|
|
if ( !m_cy.isNull() )
|
|
gradient.setAttribute( "draw:cy", m_cy );
|
|
|
|
e.appendChild( gradient );
|
|
}
|
|
|
|
MarkerStyle::MarkerStyle( int style )
|
|
{
|
|
// Markers are not working because OOImpress depends on the sequence
|
|
// of the attributes in the draw:marker tag. svg:ViewBox has to be in
|
|
// front of svg:d in order to work.
|
|
|
|
switch ( style )
|
|
{
|
|
case 1:
|
|
m_name = "Arrow";
|
|
m_viewBox = "0 0 20 30";
|
|
m_d = "m10 0-10 30h20z";
|
|
break;
|
|
case 2:
|
|
m_name = "Square";
|
|
m_viewBox = "0 0 10 10";
|
|
m_d = "m0 0h10v10h-10z";
|
|
break;
|
|
case 3:
|
|
m_name = "Circle";
|
|
m_viewBox = "0 0 1131 1131";
|
|
m_d = "m462 1118-102-29-102-51-93-72-72-93-51-102-29-102-13-105 13-102 29-106 51-102 72-89 93-72 102-50 102-34 106-9 101 9 106 34 98 50 93 72 72 89 51 102 29 106 13 102-13 105-29 102-51 102-72 93-93 72-98 51-106 29-101 13z";
|
|
break;
|
|
case 4:
|
|
m_name = "Line Arrow";
|
|
m_viewBox = "0 0 1122 2243";
|
|
m_d = "m0 2108v17 17l12 42 30 34 38 21 43 4 29-8 30-21 25-26 13-34 343-1532 339 1520 13 42 29 34 39 21 42 4 42-12 34-30 21-42v-39-12l-4 4-440-1998-9-42-25-39-38-25-43-8-42 8-38 25-26 39-8 42z";
|
|
break;
|
|
case 5:
|
|
m_name = "Dimension Lines";
|
|
m_viewBox = "0 0 836 110";
|
|
m_d = "m0 0h278 278 280v36 36 38h-278-278-280v-36-36z";
|
|
break;
|
|
case 6:
|
|
case 7:
|
|
m_name = "Double Arrow";
|
|
m_viewBox = "0 0 1131 1918";
|
|
m_d = "m737 1131h394l-564-1131-567 1131h398l-398 787h1131z";
|
|
break;
|
|
}
|
|
}
|
|
|
|
void MarkerStyle::toXML( TQDomDocument & doc, TQDomElement & e ) const
|
|
{
|
|
TQDomElement marker = doc.createElement( "draw:marker" );
|
|
marker.setAttribute( "draw:name", m_name );
|
|
if ( !m_viewBox.isNull() )
|
|
marker.setAttribute( "svg:viewBox", m_viewBox );
|
|
if ( !m_d.isNull() )
|
|
marker.setAttribute( "svg:d", m_d );
|
|
|
|
e.appendChild( marker );
|
|
}
|
|
|
|
HatchStyle::HatchStyle( int style, TQString & color )
|
|
{
|
|
m_color = color;
|
|
|
|
switch ( style )
|
|
{
|
|
case 9:
|
|
m_name = m_color + " 0 Degrees";
|
|
m_style = "single";
|
|
m_distance = "0.102cm";
|
|
m_rotation = "0";
|
|
break;
|
|
case 10:
|
|
m_name = m_color + " 90 Degrees";
|
|
m_style = "single";
|
|
m_distance = "0.102cm";
|
|
m_rotation = "900";
|
|
break;
|
|
case 11:
|
|
m_name = m_color + " Crossed 0 Degrees";
|
|
m_style = "double";
|
|
m_distance = "0.076cm";
|
|
m_rotation = "900";
|
|
break;
|
|
case 12:
|
|
m_name = m_color + " 45 Degrees";
|
|
m_style = "single";
|
|
m_distance = "0.102cm";
|
|
m_rotation = "450";
|
|
break;
|
|
case 13:
|
|
m_name = m_color + " -45 Degrees";
|
|
m_style = "single";
|
|
m_distance = "0.102cm";
|
|
m_rotation = "3150";
|
|
break;
|
|
case 14:
|
|
m_name = m_color + " Crossed 45 Degrees";
|
|
m_style = "double";
|
|
m_distance = "0.076cm";
|
|
m_rotation = "450";
|
|
break;
|
|
}
|
|
}
|
|
|
|
void HatchStyle::toXML( TQDomDocument & doc, TQDomElement & e ) const
|
|
{
|
|
TQDomElement hatch = doc.createElement( "draw:hatch" );
|
|
hatch.setAttribute( "draw:name", m_name );
|
|
if ( !m_style.isNull() )
|
|
hatch.setAttribute( "draw:style", m_style );
|
|
if ( !m_color.isNull() )
|
|
hatch.setAttribute( "draw:color", m_color );
|
|
if ( !m_distance.isNull() )
|
|
hatch.setAttribute( "draw:distance", m_distance );
|
|
if ( !m_rotation.isNull() )
|
|
hatch.setAttribute( "draw:rotation", m_rotation );
|
|
|
|
e.appendChild( hatch );
|
|
}
|
|
|
|
FillImageStyle::FillImageStyle( TQString & name )
|
|
{
|
|
|
|
}
|
|
|
|
void FillImageStyle::toXML( TQDomDocument & doc, TQDomElement & e ) const
|
|
{
|
|
|
|
}
|
|
|
|
PageMasterStyle::PageMasterStyle( TQDomElement & e, const uint index )
|
|
{
|
|
TQDomNode borders = e.namedItem( "PAPERBORDERS" );
|
|
TQDomElement b = borders.toElement();
|
|
|
|
m_name = TQString( "PM%1" ).tqarg( index );
|
|
m_style = TQString( "Default%1" ).tqarg( index );
|
|
m_margin_top = StyleFactory::toCM( b.attribute( "ptTop" ) );
|
|
m_margin_bottom = StyleFactory::toCM( b.attribute( "ptBottom" ) );
|
|
m_margin_left = StyleFactory::toCM( b.attribute( "ptLeft" ) );
|
|
m_margin_right = StyleFactory::toCM( b.attribute( "ptRight" ) );
|
|
m_page_width = StyleFactory::toCM( e.attribute( "ptWidth" ) );
|
|
m_page_height = StyleFactory::toCM( e.attribute( "ptHeight" ) );
|
|
m_orientation = "landscape";
|
|
}
|
|
|
|
void PageMasterStyle::toXML( TQDomDocument & doc, TQDomElement & e ) const
|
|
{
|
|
TQDomElement style = doc.createElement( "style:page-master" );
|
|
style.setAttribute( "style:name", "PM0" );
|
|
|
|
TQDomElement properties = doc.createElement( "style:properties" );
|
|
properties.setAttribute( "fo:margin-top", m_margin_top );
|
|
properties.setAttribute( "fo:margin-bottom", m_margin_bottom );
|
|
properties.setAttribute( "fo:margin-left", m_margin_left );
|
|
properties.setAttribute( "fo:margin-right", m_margin_right );
|
|
properties.setAttribute( "fo:page-width", m_page_width );
|
|
properties.setAttribute( "fo:page-height", m_page_height );
|
|
properties.setAttribute( "fo:print-orientation", m_orientation );
|
|
|
|
style.appendChild( properties );
|
|
e.appendChild( style );
|
|
}
|
|
|
|
bool PageMasterStyle::operator==( const PageMasterStyle & pageMasterStyle ) const
|
|
{
|
|
return ( m_margin_top == pageMasterStyle.m_margin_top &&
|
|
m_margin_bottom == pageMasterStyle.m_margin_bottom &&
|
|
m_margin_left == pageMasterStyle.m_margin_left &&
|
|
m_margin_right == pageMasterStyle.m_margin_right &&
|
|
m_page_width == pageMasterStyle.m_page_width &&
|
|
m_page_height == pageMasterStyle.m_page_height &&
|
|
m_orientation == pageMasterStyle.m_orientation );
|
|
}
|
|
|
|
PageStyle::PageStyle( StyleFactory * styleFactory, TQDomElement & e, const uint index )
|
|
{
|
|
TQDomElement backMaster = e.namedItem( "BACKMASTER" ).toElement();
|
|
if( !backMaster.isNull())
|
|
{
|
|
int tmp=0;
|
|
if(backMaster.hasAttribute("displayBackground"))
|
|
tmp = backMaster.attribute("displayBackground").toInt();
|
|
m_bg_visible = (tmp==1) ? "true" : "false";
|
|
tmp = 0;
|
|
if(backMaster.hasAttribute("displayMasterPageObject"))
|
|
tmp = backMaster.attribute("displayMasterPageObject").toInt();
|
|
m_bg_objects_visible = (tmp==1) ? "true" : "false";
|
|
}
|
|
else
|
|
{
|
|
m_bg_visible = "true";
|
|
m_bg_objects_visible = "true";
|
|
}
|
|
|
|
m_name = TQString( "dp%1" ).tqarg( index );
|
|
|
|
// check if this is an empty page tag
|
|
if ( !e.hasChildNodes() )
|
|
return;
|
|
|
|
TQDomElement backType = e.namedItem( "BACKTYPE" ).toElement();
|
|
if ( backType.isNull() || backType.attribute( "value" ) == "0" )
|
|
{
|
|
// color
|
|
TQDomElement bcType = e.namedItem( "BCTYPE" ).toElement();
|
|
if ( bcType.isNull() || bcType.attribute( "value" ) == "0" )
|
|
{
|
|
// plain
|
|
TQDomElement backColor = e.namedItem( "BACKCOLOR1" ).toElement();
|
|
m_fill = "solid";
|
|
m_fill_color = backColor.attribute( "color" );
|
|
}
|
|
else
|
|
{
|
|
// gradient
|
|
m_fill = "gradient";
|
|
m_fill_gradient_name = styleFactory->createGradientStyle( e );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// picture
|
|
}
|
|
|
|
TQDomElement pageDuration = e.namedItem( "PGTIMER" ).toElement();
|
|
if ( !pageDuration.isNull() )
|
|
{
|
|
|
|
TQTime time;
|
|
time = time.addSecs( pageDuration.attribute("timer").toInt() );
|
|
TQString hours( TQString::number( time.hour() ).rightJustify( 2, '0' ) );
|
|
TQString ms( TQString::number( time.minute() ).rightJustify( 2, '0' ) );
|
|
TQString sec( TQString::number( time.second() ).rightJustify( 2, '0' ) );
|
|
|
|
|
|
//ISO8601 chapter 5.5.3.2
|
|
//TQDate doesn't encode it as this format.
|
|
m_page_duration = TQString( "PT%1H%2M%3S" ).tqarg( hours ).tqarg( ms ).tqarg( sec );
|
|
}
|
|
|
|
TQDomElement pageEffect = e.namedItem( "PGEFFECT" ).toElement();
|
|
if ( !pageEffect.isNull() )
|
|
{
|
|
int tmp=0;
|
|
if(pageEffect.hasAttribute("value"))
|
|
tmp=pageEffect.attribute("value").toInt();
|
|
kdDebug(30518)<<" tmp :"<<tmp<<endl;
|
|
switch( tmp )
|
|
{
|
|
case -1:
|
|
m_page_effect = "random";
|
|
break;
|
|
case 1:
|
|
m_page_effect = "close-vertical";
|
|
break;
|
|
case 2:
|
|
m_page_effect = "close-horizontal";
|
|
break;
|
|
case 3:
|
|
m_page_effect = "fade-to-center";
|
|
break;
|
|
case 4:
|
|
m_page_effect = "open-vertical";
|
|
break;
|
|
case 5:
|
|
m_page_effect = "open-horizontal";
|
|
break;
|
|
case 6:
|
|
m_page_effect = "fade-from-center";
|
|
break;
|
|
case 7:
|
|
case 8:
|
|
case 9:
|
|
case 10:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 11:
|
|
m_page_effect = "spiralin-left";
|
|
break;
|
|
case 12:
|
|
case 13:
|
|
case 14:
|
|
case 15:
|
|
case 16:
|
|
case 17:
|
|
case 18:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 19:
|
|
m_page_effect = "fade-from-top";
|
|
break;
|
|
case 20:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 21:
|
|
m_page_effect = "fade-from-bottom";
|
|
break;
|
|
case 22:
|
|
m_page_effect = "roll-from-bottom";
|
|
break;
|
|
case 23:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 24:
|
|
m_page_effect = "roll-from-right";
|
|
break;
|
|
case 25:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 26:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 27:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 28:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 29:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 30:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 31:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 32:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 33:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 34:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
case 35:
|
|
m_page_effect = "dissolve";
|
|
break;
|
|
case 36:
|
|
m_page_effect = "fade-from-lowerright";
|
|
break;
|
|
case 37:
|
|
m_page_effect = "fade-from-upperright";
|
|
break;
|
|
case 38:
|
|
m_page_effect = "fade-from-lowerleft";
|
|
break;
|
|
case 39:
|
|
m_page_effect = "fade-from-upperleft";
|
|
break;
|
|
case 40:
|
|
kdDebug(30518)<<" this style is not defined :"<<tmp<<endl;
|
|
break;
|
|
default:
|
|
kdDebug(30518)<<" style page effect not define : "<<tmp<<endl;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void PageStyle::toXML( TQDomDocument & doc, TQDomElement & e ) const
|
|
{
|
|
TQDomElement style = doc.createElement( "style:style" );
|
|
style.setAttribute( "style:name", m_name );
|
|
style.setAttribute( "style:family", "drawing-page" );
|
|
|
|
TQDomElement properties = doc.createElement( "style:properties" );
|
|
properties.setAttribute( "presentation:background-visible", m_bg_visible );
|
|
properties.setAttribute( "presentation:background-objects-visible",
|
|
m_bg_objects_visible );
|
|
if ( !m_page_duration.isEmpty() )
|
|
{
|
|
properties.setAttribute( "presentation:duration", m_page_duration );
|
|
properties.setAttribute( "presentation:transition-type", "automatic" );
|
|
}
|
|
if ( !m_page_effect.isEmpty() )
|
|
properties.setAttribute( "presentation:transition-style",
|
|
m_page_effect );
|
|
if ( !m_fill.isNull() )
|
|
properties.setAttribute( "draw:fill", m_fill );
|
|
if ( !m_fill_color.isNull() )
|
|
properties.setAttribute( "draw:fill-color", m_fill_color );
|
|
if ( !m_fill_image_name.isNull() )
|
|
properties.setAttribute( "draw:fill-image-name", m_fill_image_name );
|
|
if ( !m_fill_image_width.isNull() )
|
|
properties.setAttribute( "draw:fill-image-width", m_fill_image_width );
|
|
if ( !m_fill_image_height.isNull() )
|
|
properties.setAttribute( "draw:fill-image-height", m_fill_image_height );
|
|
if ( !m_fill_image_ref_point.isNull() )
|
|
properties.setAttribute( "draw:fill-image-ref-point", m_fill_image_ref_point );
|
|
if ( !m_fill_gradient_name.isNull() )
|
|
properties.setAttribute( "draw:fill-gradient-name", m_fill_gradient_name );
|
|
if ( !m_repeat.isNull() )
|
|
properties.setAttribute( "style:repeat", m_repeat );
|
|
|
|
style.appendChild( properties );
|
|
e.appendChild( style );
|
|
}
|
|
|
|
bool PageStyle::operator==( const PageStyle & pageStyle ) const
|
|
{
|
|
return ( m_bg_visible == pageStyle.m_bg_visible &&
|
|
m_bg_objects_visible == pageStyle.m_bg_objects_visible &&
|
|
m_fill == pageStyle.m_fill &&
|
|
m_fill_color == pageStyle.m_fill_color &&
|
|
m_fill_image_name == pageStyle.m_fill_image_name &&
|
|
m_fill_image_width == pageStyle.m_fill_image_width &&
|
|
m_fill_image_height == pageStyle.m_fill_image_height &&
|
|
m_fill_image_ref_point == pageStyle.m_fill_image_ref_point &&
|
|
m_fill_gradient_name == pageStyle.m_fill_gradient_name &&
|
|
m_repeat == pageStyle.m_repeat &&
|
|
m_page_effect == pageStyle.m_page_effect &&
|
|
m_page_duration == pageStyle.m_page_duration );
|
|
}
|
|
|
|
TextStyle::TextStyle( TQDomElement & e, const uint index )
|
|
{
|
|
m_name = TQString( "T%1" ).tqarg( index );
|
|
if ( e.hasAttribute( "family" ) )
|
|
m_font_family = e.attribute( "family" );
|
|
if ( e.hasAttribute( "pointSize" ) )
|
|
m_font_size = TQString( "%1pt" ).tqarg( e.attribute( "pointSize" ) );
|
|
if ( e.hasAttribute( "color" ) )
|
|
m_color = e.attribute( "color" );
|
|
if ( e.hasAttribute( "bold" ) && e.attribute( "bold" ) == "1" )
|
|
m_font_weight = "bold";
|
|
if ( e.hasAttribute( "italic" ) && e.attribute( "italic" ) == "1" )
|
|
m_font_style = "italic";
|
|
if ( e.hasAttribute( "strikeOut" ) )
|
|
{
|
|
if ( e.attribute( "strikeOut" ) == "single" )
|
|
m_text_crossing_out = "single-line";
|
|
else if ( e.attribute( "strikeOut" ) == "single-bold" )
|
|
m_text_crossing_out = "thick-line";
|
|
else if ( e.attribute( "strikeOut" ) == "double" )
|
|
m_text_crossing_out = "double-line";
|
|
}
|
|
if ( e.hasAttribute( "underline" ) )
|
|
{
|
|
TQString underline = e.attribute( "underline" );
|
|
TQString style = e.attribute( "underlinestyleline" );
|
|
m_text_underline_color = e.attribute( "underlinecolor" );
|
|
|
|
if ( style == "solid" )
|
|
{
|
|
if ( underline == "1" )
|
|
m_text_underline = "single";
|
|
else if ( underline == "single-bold" )
|
|
m_text_underline = "bold";
|
|
else if ( underline == "double" )
|
|
m_text_underline = "double";
|
|
else if ( underline == "wave" )
|
|
m_text_underline = "wave";
|
|
}
|
|
else if ( style == "dot" )
|
|
{
|
|
if ( underline == "1" )
|
|
m_text_underline = "dotted";
|
|
else if ( underline == "single-bold" )
|
|
m_text_underline = "bold-dotted";
|
|
}
|
|
else if ( style == "dash" )
|
|
m_text_underline = "dash";
|
|
}
|
|
}
|
|
|
|
void TextStyle::toXML( TQDomDocument & doc, TQDomElement & e ) const
|
|
{
|
|
TQDomElement style = doc.createElement( "style:style" );
|
|
style.setAttribute( "style:name", m_name );
|
|
style.setAttribute( "style:family", "text" );
|
|
|
|
TQDomElement properties = doc.createElement( "style:properties" );
|
|
if ( !m_font_size.isNull() )
|
|
properties.setAttribute( "fo:font-size", m_font_size );
|
|
if ( !m_font_family.isNull() )
|
|
properties.setAttribute( "fo:font-family", m_font_family );
|
|
if ( !m_font_family_generic.isNull() )
|
|
properties.setAttribute( "fo:font-family-generic", m_font_family_generic );
|
|
if ( !m_color.isNull() )
|
|
properties.setAttribute( "fo:color", m_color );
|
|
if ( !m_font_pitch.isNull() )
|
|
properties.setAttribute( "style:font-pitch", m_font_pitch );
|
|
if ( !m_font_style.isNull() )
|
|
properties.setAttribute( "fo:font-style", m_font_style );
|
|
if ( !m_font_weight.isNull() )
|
|
properties.setAttribute( "fo:font-weight", m_font_weight );
|
|
if ( !m_text_shadow.isNull() )
|
|
properties.setAttribute( "fo:text-shadow", m_text_shadow );
|
|
if ( !m_text_underline.isNull() )
|
|
properties.setAttribute( "style:text-underline", m_text_underline );
|
|
if ( !m_text_underline_color.isNull() )
|
|
properties.setAttribute( "style:text-underline-color", m_text_underline_color );
|
|
if ( !m_text_crossing_out.isNull() )
|
|
properties.setAttribute( "style:text-crossing-out", m_text_crossing_out );
|
|
|
|
style.appendChild( properties );
|
|
e.appendChild( style );
|
|
}
|
|
|
|
bool TextStyle::operator==( const TextStyle & textStyle ) const
|
|
{
|
|
return ( m_font_size == textStyle.m_font_size &&
|
|
m_font_family == textStyle.m_font_family &&
|
|
m_font_family_generic == textStyle.m_font_family_generic &&
|
|
m_color == textStyle.m_color &&
|
|
m_font_pitch == textStyle.m_font_pitch &&
|
|
m_font_style == textStyle.m_font_style &&
|
|
m_font_weight == textStyle.m_font_weight &&
|
|
m_text_shadow == textStyle.m_text_shadow &&
|
|
m_text_underline == textStyle.m_text_underline &&
|
|
m_text_underline_color == textStyle.m_text_underline_color &&
|
|
m_text_crossing_out == textStyle.m_text_crossing_out );
|
|
}
|
|
|
|
GraphicStyle::GraphicStyle( StyleFactory * styleFactory, TQDomElement & e, const uint index )
|
|
{
|
|
TQDomNode pen = e.namedItem( "PEN" );
|
|
TQDomNode brush = e.namedItem( "BRUSH" );
|
|
TQDomNode linebegin = e.namedItem( "LINEBEGIN" );
|
|
TQDomNode lineend = e.namedItem( "LINEEND" );
|
|
TQDomNode gradient = e.namedItem( "GRADIENT" );
|
|
TQDomNode shadow = e.namedItem( "SHADOW" );
|
|
TQDomNode textObject = e.namedItem( "TEXTOBJ" );
|
|
if ( !textObject.isNull() )
|
|
{
|
|
TQDomElement textObjectElement = textObject.toElement();
|
|
if ( textObjectElement.hasAttribute( "verticalAlign" ) )
|
|
{
|
|
m_textAlignment = textObjectElement.attribute("verticalAlign");
|
|
if ( m_textAlignment == "center" )
|
|
m_textAlignment = "middle";
|
|
}
|
|
if ( textObjectElement.hasAttribute( "bleftpt" ) )
|
|
{
|
|
m_textMarginLeft = TQString( "%1pt" ).tqarg( textObjectElement.attribute( "bleftpt" ) );
|
|
}
|
|
if ( textObjectElement.hasAttribute( "bbottompt" ) )
|
|
{
|
|
m_textMarginBottom = TQString( "%1pt" ).tqarg( textObjectElement.attribute( "bbottompt" ) );
|
|
}
|
|
if ( textObjectElement.hasAttribute( "btoppt" ) )
|
|
{
|
|
m_textMarginTop = TQString( "%1pt" ).tqarg( textObjectElement.attribute( "btoppt" ) );
|
|
}
|
|
if ( textObjectElement.hasAttribute( "brightpt" ) )
|
|
{
|
|
m_textMarginRight = TQString( "%1pt" ).tqarg( textObjectElement.attribute( "brightpt" ) );
|
|
}
|
|
|
|
}
|
|
kdDebug(30518)<<" tqalignment :"<<m_textAlignment<<endl;
|
|
|
|
m_name = TQString( "gr%1" ).tqarg( index );
|
|
if ( !pen.isNull() )
|
|
{
|
|
TQDomElement p = pen.toElement();
|
|
m_stroke_width = StyleFactory::toCM( p.attribute( "width" ) );
|
|
m_stroke_color = p.attribute( "color" );
|
|
|
|
int style = p.attribute( "style" ).toInt();
|
|
if ( style == 1 )
|
|
m_stroke = "solid";
|
|
else if ( style >= 2 && style <= 5 )
|
|
{
|
|
m_stroke = "dash";
|
|
m_stroke_dash = styleFactory->createStrokeDashStyle( style );
|
|
}
|
|
else
|
|
m_stroke = "none";
|
|
}
|
|
|
|
if ( !brush.isNull() )
|
|
{
|
|
TQDomElement b = brush.toElement();
|
|
m_fill_color = b.attribute( "color" );
|
|
|
|
int style = b.attribute( "style" ).toInt();
|
|
if ( style == 1 )
|
|
m_fill = "solid";
|
|
else if ( style >= 9 && style <= 14 )
|
|
{
|
|
m_fill = "hatch";
|
|
m_fill_hatch_name = styleFactory->createHatchStyle( style, m_fill_color );
|
|
}
|
|
else if ( style >= 2 && style <= 8 )
|
|
{
|
|
if ( style == 2 )
|
|
m_transparency = "94%";
|
|
else if ( style == 3 )
|
|
m_transparency = "88%";
|
|
else if ( style == 4 )
|
|
m_transparency = "63%";
|
|
else if ( style == 5 )
|
|
m_transparency = "50%";
|
|
else if ( style == 6 )
|
|
m_transparency = "37%";
|
|
else if ( style == 7 )
|
|
m_transparency = "12%";
|
|
else if ( style == 8 )
|
|
m_transparency = "6%";
|
|
}
|
|
}
|
|
else if ( !gradient.isNull() )
|
|
{
|
|
TQDomElement g = gradient.toElement();
|
|
m_fill = "gradient";
|
|
m_fill_gradient_name = styleFactory->createGradientStyle( g );
|
|
}
|
|
else
|
|
m_fill = "none";
|
|
|
|
if ( !linebegin.isNull() )
|
|
{
|
|
TQDomElement lb = linebegin.toElement();
|
|
m_marker_start_width = "0.25cm";
|
|
|
|
int style = lb.attribute( "value" ).toInt();
|
|
m_marker_start = styleFactory->createMarkerStyle( style );
|
|
}
|
|
|
|
if ( !lineend.isNull() )
|
|
{
|
|
TQDomElement le = lineend.toElement();
|
|
m_marker_end_width = "0.25cm";
|
|
|
|
int style = le.attribute( "value" ).toInt();
|
|
m_marker_end = styleFactory->createMarkerStyle( style );
|
|
}
|
|
|
|
if ( !shadow.isNull() )
|
|
{
|
|
TQDomElement s = shadow.toElement();
|
|
m_shadow = "visible";
|
|
m_shadow_color = s.attribute( "color" );
|
|
|
|
int direction = s.attribute( "direction" ).toInt();
|
|
TQString distance = StyleFactory::toCM( s.attribute( "distance" ) );
|
|
switch ( direction )
|
|
{
|
|
case 1:
|
|
m_shadow_offset_x = "-" + distance;
|
|
m_shadow_offset_y = "-" + distance;
|
|
break;
|
|
case 2:
|
|
m_shadow_offset_x = "0cm";
|
|
m_shadow_offset_y = "-" + distance;
|
|
break;
|
|
case 3:
|
|
m_shadow_offset_x = distance;
|
|
m_shadow_offset_y = "-" + distance;
|
|
break;
|
|
case 4:
|
|
m_shadow_offset_x = distance;
|
|
m_shadow_offset_y = "0cm";
|
|
break;
|
|
case 5:
|
|
m_shadow_offset_x = distance;
|
|
m_shadow_offset_y = distance;
|
|
break;
|
|
case 6:
|
|
m_shadow_offset_x = "0cm";
|
|
m_shadow_offset_y = distance;
|
|
break;
|
|
case 7:
|
|
m_shadow_offset_x = "-" + distance;
|
|
m_shadow_offset_y = distance;
|
|
break;
|
|
case 8:
|
|
m_shadow_offset_x = "-" + distance;
|
|
m_shadow_offset_y = "0cm";
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
GraphicStyle::GraphicStyle( const char * name,
|
|
const char * stroke, const char * stroke_color,
|
|
const char * stroke_width, const char * shadow,
|
|
const char * shadow_offset_x, const char * shadow_offset_y,
|
|
const char * shadow_color, const char * margin_left,
|
|
const char * margin_right, const char * margin_top,
|
|
const char * margin_bottom, const char * color,
|
|
const char * text_outline, const char * text_crossing_out,
|
|
const char * font_family, const char * font_size,
|
|
const char * font_style, const char * text_shadow,
|
|
const char * text_underline, const char * font_weight,
|
|
const char * line_height, const char * text_align,
|
|
const char * fill, const char * fill_color,
|
|
const char * enable_numbering )
|
|
: m_name( name )
|
|
, m_stroke( stroke )
|
|
, m_stroke_color( stroke_color )
|
|
, m_stroke_width( stroke_width )
|
|
, m_shadow( shadow )
|
|
, m_shadow_offset_x( shadow_offset_x )
|
|
, m_shadow_offset_y( shadow_offset_y )
|
|
, m_shadow_color( shadow_color )
|
|
, m_margin_left( margin_left )
|
|
, m_margin_right( margin_right )
|
|
, m_margin_top( margin_top )
|
|
, m_margin_bottom( margin_bottom )
|
|
, m_color( color )
|
|
, m_text_outline( text_outline )
|
|
, m_text_crossing_out( text_crossing_out )
|
|
, m_font_family( font_family )
|
|
, m_font_size( font_size )
|
|
, m_font_style( font_style )
|
|
, m_text_shadow( text_shadow )
|
|
, m_text_underline( text_underline )
|
|
, m_font_weight( font_weight )
|
|
, m_line_height( line_height )
|
|
, m_text_align( text_align )
|
|
, m_fill( fill )
|
|
, m_fill_color( fill_color )
|
|
, m_enable_numbering( enable_numbering )
|
|
{
|
|
}
|
|
|
|
|
|
void GraphicStyle::toXML( TQDomDocument & doc, TQDomElement & e ) const
|
|
{
|
|
TQDomElement style = doc.createElement( "style:style" );
|
|
style.setAttribute( "style:name", m_name );
|
|
style.setAttribute( "style:family", "graphics" );
|
|
if ( m_name != "standard" )
|
|
style.setAttribute( "style:tqparent-style-name", "standard" );
|
|
|
|
TQDomElement properties = doc.createElement( "style:properties" );
|
|
if ( !m_stroke.isNull() )
|
|
properties.setAttribute( "draw:stroke", m_stroke );
|
|
if ( !m_stroke_dash.isNull() )
|
|
properties.setAttribute( "draw:stroke-dash", m_stroke_dash );
|
|
if ( !m_stroke_color.isNull() )
|
|
properties.setAttribute( "svg:stroke-color", m_stroke_color );
|
|
if ( !m_stroke_width.isNull() )
|
|
properties.setAttribute( "svg:stroke-width", m_stroke_width );
|
|
if ( !m_shadow.isNull() )
|
|
properties.setAttribute( "draw:shadow", m_shadow );
|
|
if ( !m_shadow_offset_x.isNull() )
|
|
properties.setAttribute( "draw:shadow-offset-x", m_shadow_offset_x );
|
|
if ( !m_shadow_offset_y.isNull() )
|
|
properties.setAttribute( "draw:shadow-offset-y", m_shadow_offset_y );
|
|
if ( !m_shadow_color.isNull() )
|
|
properties.setAttribute( "draw:shadow-color", m_shadow_color );
|
|
if ( !m_margin_left.isNull() )
|
|
properties.setAttribute( "fo:margin-left", m_margin_left );
|
|
if ( !m_margin_right.isNull() )
|
|
properties.setAttribute( "fo:margin-right", m_margin_right );
|
|
if ( !m_margin_top.isNull() )
|
|
properties.setAttribute( "fo:margin-top", m_margin_top );
|
|
if ( !m_margin_bottom.isNull() )
|
|
properties.setAttribute( "fo:margin-bottom", m_margin_bottom );
|
|
if ( !m_color.isNull() )
|
|
properties.setAttribute( "fo:color", m_color );
|
|
if ( !m_text_outline.isNull() )
|
|
properties.setAttribute( "style:text-outline", m_text_outline );
|
|
if ( !m_text_crossing_out.isNull() )
|
|
properties.setAttribute( "style:text-crossing-out", m_text_crossing_out );
|
|
if ( !m_font_family.isNull() )
|
|
properties.setAttribute( "fo:font-family", m_font_family );
|
|
if ( !m_font_size.isNull() )
|
|
properties.setAttribute( "fo:font-size", m_font_size );
|
|
if ( !m_font_style.isNull() )
|
|
properties.setAttribute( "fo:font-style", m_font_style );
|
|
if ( !m_text_shadow.isNull() )
|
|
properties.setAttribute( "fo:text-shadow", m_text_shadow );
|
|
if ( !m_text_underline.isNull() )
|
|
properties.setAttribute( "style:text-underline", m_text_underline );
|
|
if ( !m_font_weight.isNull() )
|
|
properties.setAttribute( "fo:font-weight", m_font_weight );
|
|
if ( !m_line_height.isNull() )
|
|
properties.setAttribute( "fo:line-height", m_line_height );
|
|
if ( !m_text_align.isNull() )
|
|
properties.setAttribute( "fo:text-align", m_text_align );
|
|
if ( !m_fill.isNull() )
|
|
properties.setAttribute( "draw:fill", m_fill );
|
|
if ( !m_fill_color.isNull() )
|
|
properties.setAttribute( "draw:fill-color", m_fill_color );
|
|
if ( !m_fill_hatch_name.isNull() )
|
|
properties.setAttribute( "draw:fill-hatch-name", m_fill_hatch_name );
|
|
if ( !m_enable_numbering.isNull() )
|
|
properties.setAttribute( "text:enable-numbering", m_enable_numbering );
|
|
if ( !m_marker_start.isNull() )
|
|
properties.setAttribute( "draw:marker-start", m_marker_start );
|
|
if ( !m_marker_start_width.isNull() )
|
|
properties.setAttribute( "draw:marker-start-width", m_marker_start_width );
|
|
if ( !m_marker_end.isNull() )
|
|
properties.setAttribute( "draw:marker-end", m_marker_end );
|
|
if ( !m_marker_end_width.isNull() )
|
|
properties.setAttribute( "draw:marker-end-width", m_marker_end_width );
|
|
if ( !m_fill_gradient_name.isNull() )
|
|
properties.setAttribute( "draw:fill-gradient-name", m_fill_gradient_name );
|
|
if ( !m_transparency.isNull() )
|
|
properties.setAttribute( "draw:transparency", m_transparency );
|
|
if ( !m_textAlignment.isNull() )
|
|
properties.setAttribute( "draw:textarea-vertical-align", m_textAlignment );
|
|
if ( !m_textMarginLeft.isNull() )
|
|
properties.setAttribute( "fo:padding-left", m_textMarginLeft );
|
|
if ( !m_textMarginBottom.isNull() )
|
|
properties.setAttribute( "fo:padding-bottom", m_textMarginBottom );
|
|
if ( !m_textMarginTop.isNull() )
|
|
properties.setAttribute( "fo:padding-top", m_textMarginTop );
|
|
if ( !m_textMarginRight.isNull() )
|
|
properties.setAttribute( "fo:padding-right", m_textMarginRight );
|
|
|
|
|
|
style.appendChild( properties );
|
|
e.appendChild( style );
|
|
}
|
|
|
|
bool GraphicStyle::operator==( const GraphicStyle & graphicStyle ) const
|
|
{
|
|
return ( m_stroke == graphicStyle.m_stroke &&
|
|
m_stroke_dash == graphicStyle.m_stroke_dash &&
|
|
m_stroke_color == graphicStyle.m_stroke_color &&
|
|
m_stroke_width == graphicStyle.m_stroke_width &&
|
|
m_shadow == graphicStyle.m_shadow &&
|
|
m_shadow_offset_x == graphicStyle.m_shadow_offset_x &&
|
|
m_shadow_offset_y == graphicStyle.m_shadow_offset_y &&
|
|
m_shadow_color == graphicStyle.m_shadow_color &&
|
|
m_margin_left == graphicStyle.m_margin_left &&
|
|
m_margin_right == graphicStyle.m_margin_right &&
|
|
m_margin_top == graphicStyle.m_margin_top &&
|
|
m_margin_bottom == graphicStyle.m_margin_bottom &&
|
|
m_color == graphicStyle.m_color &&
|
|
m_text_outline == graphicStyle.m_text_outline &&
|
|
m_text_crossing_out == graphicStyle.m_text_crossing_out &&
|
|
m_font_family == graphicStyle.m_font_family &&
|
|
m_font_size == graphicStyle.m_font_size &&
|
|
m_font_style == graphicStyle.m_font_style &&
|
|
m_text_shadow == graphicStyle.m_text_shadow &&
|
|
m_text_underline == graphicStyle.m_text_underline &&
|
|
m_font_weight == graphicStyle.m_font_weight &&
|
|
m_line_height == graphicStyle.m_line_height &&
|
|
m_text_align == graphicStyle.m_text_align &&
|
|
m_fill == graphicStyle.m_fill &&
|
|
m_fill_color == graphicStyle.m_fill_color &&
|
|
m_fill_hatch_name == graphicStyle.m_fill_hatch_name &&
|
|
m_enable_numbering == graphicStyle.m_enable_numbering &&
|
|
m_marker_start == graphicStyle.m_marker_start &&
|
|
m_marker_start_width == graphicStyle.m_marker_start_width &&
|
|
m_marker_end == graphicStyle.m_marker_end &&
|
|
m_marker_end_width == graphicStyle.m_marker_end_width &&
|
|
m_fill_gradient_name == graphicStyle.m_fill_gradient_name &&
|
|
m_transparency == graphicStyle.m_transparency &&
|
|
m_textAlignment == graphicStyle.m_textAlignment &&
|
|
m_textMarginLeft == graphicStyle.m_textMarginLeft &&
|
|
m_textMarginBottom == graphicStyle.m_textMarginBottom &&
|
|
m_textMarginTop == graphicStyle.m_textMarginTop &&
|
|
m_textMarginRight == graphicStyle.m_textMarginRight);
|
|
}
|
|
|
|
ParagraphStyle::ParagraphStyle( TQDomElement & e, const uint index )
|
|
{
|
|
// some defaults that may be overwritten
|
|
m_margin_left = "0cm";
|
|
m_margin_right = "0cm";
|
|
m_text_indent = "0cm";
|
|
|
|
TQDomNode shadow = e.namedItem( "SHADOW" );
|
|
TQDomNode indents = e.namedItem( "INDENTS" );
|
|
TQDomNode offsets = e.namedItem( "OFFSETS" );
|
|
TQDomNode leftBorder = e.namedItem( "LEFTBORDER" );
|
|
TQDomNode rightBorder = e.namedItem( "RIGHTBORDER" );
|
|
TQDomNode topBorder = e.namedItem( "TOPBORDER" );
|
|
TQDomNode bottomBorder = e.namedItem( "BOTTOMBORDER" );
|
|
TQDomNode lineSpacing = e.namedItem( "LINESPACING" );
|
|
TQDomNode counter = e.namedItem( "COUNTER" );
|
|
|
|
m_name = TQString( "P%1" ).tqarg( index );
|
|
if ( e.hasAttribute( "align" ) )
|
|
{
|
|
int align = e.attribute( "align" ).toInt();
|
|
switch ( align )
|
|
{
|
|
case 0: // left
|
|
m_text_align = "start";
|
|
break;
|
|
case 2: // right
|
|
m_text_align = "end";
|
|
break;
|
|
case 4: // center
|
|
m_text_align = "center";
|
|
break;
|
|
case 8: // justify
|
|
m_text_align = "justify";
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( !shadow.isNull() )
|
|
{
|
|
TQDomElement s = shadow.toElement();
|
|
TQString distance = TQString( "%1pt" ).tqarg( s.attribute( "distance" ) );
|
|
m_text_shadow = distance + " " + distance;
|
|
}
|
|
|
|
if ( !indents.isNull() )
|
|
{
|
|
TQDomElement i = indents.toElement();
|
|
m_margin_left = StyleFactory::toCM( i.attribute( "left" ) );
|
|
m_margin_right = StyleFactory::toCM( i.attribute( "right" ) );
|
|
m_text_indent = StyleFactory::toCM( i.attribute( "first" ) );
|
|
}
|
|
|
|
if ( !offsets.isNull() )
|
|
{
|
|
TQDomElement o = offsets.toElement();
|
|
m_margin_top = StyleFactory::toCM( o.attribute( "before" ) );
|
|
m_margin_bottom = StyleFactory::toCM( o.attribute( "after" ) );
|
|
}
|
|
|
|
if ( !leftBorder.isNull() )
|
|
m_border_left = parseBorder( leftBorder.toElement() );
|
|
if ( !rightBorder.isNull() )
|
|
m_border_right = parseBorder( rightBorder.toElement() );
|
|
if ( !topBorder.isNull() )
|
|
m_border_top = parseBorder( topBorder.toElement() );
|
|
if ( !bottomBorder.isNull() )
|
|
m_border_bottom = parseBorder( bottomBorder.toElement() );
|
|
|
|
if ( !lineSpacing.isNull() )
|
|
{
|
|
TQDomElement l = lineSpacing.toElement();
|
|
TQString type = l.attribute( "type" );
|
|
|
|
if ( type == "single" )
|
|
m_line_height = "100%";
|
|
else if ( type == "oneandhalf" )
|
|
m_line_height = "150%";
|
|
else if ( type == "double" )
|
|
m_line_height = "200%";
|
|
else if ( type == "multiple" )
|
|
m_line_height = TQString( "%1%" ).tqarg( l.attribute( "spacingvalue" ).toInt() * 100 );
|
|
else if ( type == "custom" )
|
|
m_line_spacing = StyleFactory::toCM( l.attribute( "spacingvalue" ) );
|
|
else if ( type == "atleast" )
|
|
m_line_height_at_least = StyleFactory::toCM( l.attribute( "spacingvalue" ) );
|
|
}
|
|
|
|
if ( !counter.isNull() )
|
|
m_enable_numbering = "true";
|
|
}
|
|
|
|
void ParagraphStyle::toXML( TQDomDocument & doc, TQDomElement & e ) const
|
|
{
|
|
TQDomElement style = doc.createElement( "style:style" );
|
|
style.setAttribute( "style:name", m_name );
|
|
style.setAttribute( "style:family", "paragraph" );
|
|
|
|
TQDomElement properties = doc.createElement( "style:properties" );
|
|
if ( !m_margin_left.isNull() )
|
|
properties.setAttribute( "fo:margin-left", m_margin_left );
|
|
if ( !m_margin_right.isNull() )
|
|
properties.setAttribute( "fo:margin-right", m_margin_right );
|
|
if ( !m_text_indent.isNull() )
|
|
properties.setAttribute( "fo:text-indent", m_text_indent );
|
|
if ( !m_text_align.isNull() )
|
|
properties.setAttribute( "fo:text-align", m_text_align );
|
|
if ( !m_enable_numbering.isNull() )
|
|
properties.setAttribute( "text:enable-numbering", m_enable_numbering );
|
|
if ( !m_text_shadow.isNull() )
|
|
properties.setAttribute( "fo:text-shadow", m_text_shadow );
|
|
if ( !m_margin_top.isNull() )
|
|
properties.setAttribute( "fo:margin-top", m_margin_top );
|
|
if ( !m_margin_bottom.isNull() )
|
|
properties.setAttribute( "fo:margin-bottom", m_margin_bottom );
|
|
if ( !m_border_left.isNull() )
|
|
properties.setAttribute( "fo:border-left", m_border_left );
|
|
if ( !m_border_right.isNull() )
|
|
properties.setAttribute( "fo:border-right", m_border_right );
|
|
if ( !m_border_top.isNull() )
|
|
properties.setAttribute( "fo:border-top", m_border_top );
|
|
if ( !m_border_bottom.isNull() )
|
|
properties.setAttribute( "fo:border-bottom", m_border_bottom );
|
|
if ( !m_line_height.isNull() )
|
|
properties.setAttribute( "fo:line-height", m_line_height );
|
|
if ( !m_line_height_at_least.isNull() )
|
|
properties.setAttribute( "style:line-height-at-least", m_line_height_at_least );
|
|
if ( !m_line_spacing.isNull() )
|
|
properties.setAttribute( "style:line-spacing", m_line_spacing );
|
|
|
|
style.appendChild( properties );
|
|
e.appendChild( style );
|
|
}
|
|
|
|
bool ParagraphStyle::operator==( const ParagraphStyle & paragraphStyle ) const
|
|
{
|
|
return ( m_margin_left == paragraphStyle.m_margin_left &&
|
|
m_margin_right == paragraphStyle.m_margin_right &&
|
|
m_text_indent == paragraphStyle.m_text_indent &&
|
|
m_text_align == paragraphStyle.m_text_align &&
|
|
m_enable_numbering == paragraphStyle.m_enable_numbering &&
|
|
m_text_shadow == paragraphStyle.m_text_shadow &&
|
|
m_margin_top == paragraphStyle.m_margin_top &&
|
|
m_margin_bottom == paragraphStyle.m_margin_bottom &&
|
|
m_border_left == paragraphStyle.m_border_left &&
|
|
m_border_right == paragraphStyle.m_border_right &&
|
|
m_border_top == paragraphStyle.m_border_top &&
|
|
m_border_bottom == paragraphStyle.m_border_bottom &&
|
|
m_line_height == paragraphStyle.m_line_height &&
|
|
m_line_height_at_least == paragraphStyle.m_line_height_at_least &&
|
|
m_line_spacing == paragraphStyle.m_line_spacing );
|
|
}
|
|
|
|
TQString ParagraphStyle::parseBorder( TQDomElement e )
|
|
{
|
|
TQString style;
|
|
int _style = e.attribute( "style" ).toInt();
|
|
if ( _style == 5 )
|
|
style = "double";
|
|
else
|
|
style = "solid";
|
|
|
|
TQString width = StyleFactory::toCM( e.attribute( "width" ) );
|
|
|
|
TQColor color( e.attribute( "red" ).toInt(),
|
|
e.attribute( "green" ).toInt(),
|
|
e.attribute( "blue" ).toInt() );
|
|
|
|
return TQString( "%1 %2 %3" ).tqarg( width ).tqarg( style ).tqarg( color.name() );
|
|
}
|
|
|
|
ListStyle::ListStyle( TQDomElement & e, const uint index )
|
|
{
|
|
// setting some default values
|
|
m_min_label_width = 0.6;
|
|
m_color = "#000000";
|
|
m_font_size = "100%";
|
|
|
|
m_name = TQString( "L%1" ).tqarg( index );
|
|
|
|
if ( e.hasAttribute( "type" ) )
|
|
{
|
|
int type = e.attribute( "type" ).toInt();
|
|
switch ( type )
|
|
{
|
|
case 1: // arabic numbers
|
|
m_listLevelStyle = LLS_NUMBER;
|
|
m_num_suffix = ".";
|
|
m_num_format = "1";
|
|
break;
|
|
case 2: // lower alphabetical
|
|
m_listLevelStyle = LLS_NUMBER;
|
|
m_num_suffix = ".";
|
|
m_num_format = "a";
|
|
break;
|
|
case 3: // upper alphabetical
|
|
m_listLevelStyle = LLS_NUMBER;
|
|
m_num_suffix = ".";
|
|
m_num_format = "A";
|
|
break;
|
|
case 4: // lower roman
|
|
m_listLevelStyle = LLS_NUMBER;
|
|
m_num_suffix = ".";
|
|
m_num_format = "i";
|
|
break;
|
|
case 5: // upper roman
|
|
m_listLevelStyle = LLS_NUMBER;
|
|
m_num_suffix = ".";
|
|
m_num_format = "I";
|
|
break;
|
|
case 6: // custom
|
|
m_listLevelStyle = LLS_BULLET;
|
|
if ( e.hasAttribute( "text" ) )
|
|
m_bullet_char = e.attribute( "text" );
|
|
break;
|
|
case 8: // circle bullet
|
|
m_listLevelStyle = LLS_BULLET;
|
|
break;
|
|
case 9: // square bullet
|
|
m_listLevelStyle = LLS_BULLET;
|
|
break;
|
|
case 10: // disc bullet
|
|
m_listLevelStyle = LLS_BULLET;
|
|
break;
|
|
case 11: // box bullet
|
|
m_listLevelStyle = LLS_BULLET;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( e.hasAttribute( "bulletfont" ) )
|
|
m_font_family = e.attribute( "bulletfont" );
|
|
}
|
|
|
|
void ListStyle::toXML( TQDomDocument & doc, TQDomElement & e ) const
|
|
{
|
|
TQDomElement style = doc.createElement( "text:list-style" );
|
|
style.setAttribute( "style:name", m_name );
|
|
|
|
for ( int level = 1; level <= 10; level++ )
|
|
{
|
|
TQDomElement listLevelStyle;
|
|
if ( m_listLevelStyle == LLS_NUMBER )
|
|
{
|
|
listLevelStyle = doc.createElement( "text:list-level-style-number" );
|
|
listLevelStyle.setAttribute( "text:level", level );
|
|
if ( !m_num_suffix.isNull() )
|
|
listLevelStyle.setAttribute( "style:num-suffix", m_num_suffix );
|
|
if ( !m_num_format.isNull() )
|
|
listLevelStyle.setAttribute( "style:num-format", m_num_format );
|
|
}
|
|
else
|
|
{
|
|
listLevelStyle = doc.createElement( "text:list-level-style-bullet" );
|
|
listLevelStyle.setAttribute( "text:level", level );
|
|
if ( !m_bullet_char.isNull() )
|
|
listLevelStyle.setAttribute( "text:bullet-char", m_bullet_char );
|
|
}
|
|
|
|
TQDomElement properties = doc.createElement( "style:properties" );
|
|
if ( level > 1 )
|
|
{
|
|
properties.setAttribute( "text:min-label-width",
|
|
TQString( "%1cm" ).tqarg( m_min_label_width ) );
|
|
properties.setAttribute( "text:space-before",
|
|
TQString( "%1cm" ).tqarg( m_min_label_width * ( level - 1 ) ) );
|
|
}
|
|
|
|
if ( !m_color.isNull() )
|
|
properties.setAttribute( "fo:color", m_color );
|
|
if ( !m_font_size.isNull() )
|
|
properties.setAttribute( "fo:font-size", m_font_size );
|
|
if ( !m_font_family.isNull() )
|
|
properties.setAttribute( "fo:font-family", m_font_family );
|
|
|
|
listLevelStyle.appendChild( properties );
|
|
style.appendChild( listLevelStyle );
|
|
}
|
|
e.appendChild( style );
|
|
}
|
|
|
|
bool ListStyle::operator==( const ListStyle & listStyle ) const
|
|
{
|
|
return ( m_listLevelStyle == listStyle.m_listLevelStyle &&
|
|
m_num_suffix == listStyle.m_num_suffix &&
|
|
m_num_format == listStyle.m_num_format &&
|
|
m_bullet_char == listStyle.m_bullet_char &&
|
|
m_min_label_width == listStyle.m_min_label_width &&
|
|
m_color == listStyle.m_color &&
|
|
m_font_size == listStyle.m_font_size &&
|
|
m_font_family == listStyle.m_font_family );
|
|
}
|