21#include <tqstringlist.h>
26#include <KoOasisStyles.h>
29#include "kspread_doc.h"
30#include "kspread_style.h"
31#include "kspread_style_manager.h"
35StyleManager::StyleManager()
40StyleManager::~StyleManager()
42 delete m_defaultStyle;
44 Styles::iterator iter = m_styles.begin();
45 Styles::iterator end = m_styles.end();
55void StyleManager::saveOasis( KoGenStyles &mainStyles )
57 kdDebug() <<
"StyleManager: Saving default cell style" << endl;
58 KoGenStyle defaultStyle = KoGenStyle( Doc::STYLE_CELL_USER,
"table-cell" );
59 m_defaultStyle->saveOasis( defaultStyle, mainStyles );
61 Styles::iterator iter = m_styles.begin();
62 Styles::iterator end = m_styles.end();
66 kdDebug() <<
"StyleManager: Saving common cell style " << iter.key() <<endl;
69 KoGenStyle customStyle = KoGenStyle( Doc::STYLE_CELL_USER,
"table-cell" );
70 styleData->
saveOasis( customStyle, mainStyles );
76void StyleManager::loadOasisStyleTemplate( KoOasisStyles& oasisStyles )
79 m_oasisStyles.clear();
82 const TQDomElement* defaultStyle = oasisStyles.defaultStyle(
"table-cell" );
85 kdDebug() <<
"StyleManager: Loading default cell style" << endl;
86 m_defaultStyle->loadOasis( oasisStyles, *defaultStyle,
"Default" );
91 delete m_defaultStyle;
95 m_oasisStyles[
"Default"] = m_defaultStyle;
97 uint nStyles = oasisStyles.userStyles().count();
98 for (
unsigned int item = 0; item < nStyles; item++) {
99 TQDomElement styleElem = oasisStyles.userStyles()[item];
102 const TQString oasisName = styleElem.attributeNS( KoXmlNS::style,
"name", TQString() );
105 const TQString name = styleElem.attributeNS( KoXmlNS::style,
"display-name", oasisName );
106 kdDebug() <<
" StyleManager: Loading common cell style: " << oasisName <<
" (display name: " << name <<
")" << endl;
108 if ( !name.isEmpty() )
111 if ( styleElem.hasAttributeNS( KoXmlNS::style,
"parent-style-name" ) )
119 style->
loadOasis( oasisStyles, styleElem, name );
120 m_styles[name] = style;
122 m_oasisStyles[oasisName] = style;
123 kdDebug() <<
"Style " << name <<
": " << style << endl;
128 Styles::iterator iter = m_styles.begin();
129 Styles::iterator end = m_styles.end();
130 while ( iter != end )
134 if ( styleData->name() !=
"Default" )
135 if ( !styleData->parent() && !styleData->parentName().isNull() )
136 styleData->setParent( m_oasisStyles[ styleData->parentName() ] );
142TQDomElement StyleManager::save( TQDomDocument & doc )
144 kdDebug() <<
"Saving styles" << endl;
145 TQDomElement styles = doc.createElement(
"styles" );
147 kdDebug() <<
"Saving default style" << endl;
148 m_defaultStyle->save( doc, styles );
150 Styles::iterator iter = m_styles.begin();
151 Styles::iterator end = m_styles.end();
153 while ( iter != end )
155 kdDebug() <<
"Saving style" << endl;
158 styleData->save( doc, styles );
163 kdDebug() <<
"End saving styles" << endl;
167bool StyleManager::loadXML( TQDomElement
const & styles )
169 TQDomElement e = styles.firstChild().toElement();
170 while ( !e.isNull() )
173 if ( e.hasAttribute(
"name" ) )
174 name = e.attribute(
"name" );
176 if ( name ==
"Default" )
178 if ( !m_defaultStyle->loadXML( e, name ) )
182 else if ( !name.isNull() )
185 if ( e.hasAttribute(
"parent" ) && e.attribute(
"parent" ) ==
"Default" )
190 if ( !style->loadXML( e, name ) )
198 m_styles[name] = style;
199 kdDebug() <<
"Style " << name <<
": " << style << endl;
202 e = e.nextSibling().toElement();
205 Styles::iterator iter = m_styles.begin();
206 Styles::iterator end = m_styles.end();
208 while ( iter != end )
212 if ( !styleData->parent() && !styleData->parentName().isNull() )
213 styleData->setParent( m_styles[ styleData->parentName() ] );
218 m_defaultStyle->setName(
"Default" );
224void StyleManager::createBuiltinStyles()
227 TQFont f( header1->font() );
229 f.setPointSize( f.pointSize() + 2 );
231 header1->changeFont( f );
233 m_styles[ header1->name() ] = header1;
236 TQColor color(
"#F0F0FF" );
237 header2->changeBgColor( color );
238 TQPen pen( TQt::black, 1, TQt::SolidLine );
239 header2->changeBottomBorderPen( pen );
242 m_styles[ header2->name() ] = header2;
245CustomStyle * StyleManager::style( TQString
const & name )
const
247 Styles::const_iterator iter( m_styles.find( name ) );
249 if ( iter != m_styles.end() )
252 if ( name ==
"Default" )
253 return m_defaultStyle;
262 Styles::iterator iter = m_styles.begin();
263 Styles::iterator end = m_styles.end();
265 while ( iter != end )
267 if ( iter.data()->parent() == style )
268 iter.data()->setParent( parent );
273 Styles::iterator i( m_styles.find( style->name() ) );
275 if ( i != m_styles.end() )
277 kdDebug() <<
"Erasing style entry for " << style->name() << endl;
282bool StyleManager::checkCircle( TQString
const & name, TQString
const & parent )
285 if ( !s || s->parent() == 0 )
287 if ( s->parentName() == name )
290 return checkCircle( name, s->parentName() );
293bool StyleManager::validateStyleName( TQString
const & name,
CustomStyle * style )
295 if ( m_defaultStyle->name() == name || name ==
"Default" )
298 Styles::const_iterator iter = m_styles.begin();
299 Styles::const_iterator end = m_styles.end();
301 while ( iter != end )
303 if ( iter.key() == name && iter.data() != style )
312void StyleManager::changeName( TQString
const & oldName, TQString
const & newName )
314 Styles::iterator iter = m_styles.begin();
315 Styles::iterator end = m_styles.end();
317 while ( iter != end )
319 if ( iter.data()->parentName() == oldName )
320 iter.data()->refreshParentName();
325 iter = m_styles.find( oldName );
329 m_styles.erase( iter );
330 m_styles[newName] = s;
334TQStringList StyleManager::styleNames()
const
338 list.push_back( i18n(
"Default") );
340 Styles::const_iterator iter = m_styles.begin();
341 Styles::const_iterator end = m_styles.end();
343 while ( iter != end )
345 list.push_back( iter.key() );
353TQDict<Style> StyleManager::loadOasisAutoStyles( KoOasisStyles& oasisStyles )
355 TQDictIterator<TQDomElement> it( oasisStyles.styles(
"table-cell") );
356 TQDict<Style> autoStyles;
357 for (;it.current();++it)
359 if ( it.current()->hasAttributeNS( KoXmlNS::style ,
"name" ) )
361 TQString name = it.current()->attributeNS( KoXmlNS::style ,
"name" , TQString() );
362 kdDebug() <<
"StyleManager: Preloading automatic cell style: " << name << endl;
363 autoStyles.insert( name ,
new Style());
364 autoStyles[name]->loadOasisStyle( oasisStyles , *(it.current()) );
366 if ( it.current()->hasAttributeNS( KoXmlNS::style,
"parent-style-name" ) )
368 TQString parentStyleName = it.current()->attributeNS( KoXmlNS::style,
"parent-style-name", TQString() );
369 if ( m_oasisStyles.contains( parentStyleName ) )
371 autoStyles[name]->setParent( m_oasisStyles[parentStyleName] );
373 kdDebug() <<
"\t parent-style-name:" << parentStyleName << endl;
377 autoStyles[name]->setParent( m_defaultStyle );
384void StyleManager::releaseUnusedAutoStyles( TQDict<Style> autoStyles )
386 TQDictIterator<Style> styleIt( autoStyles );
387 for (;styleIt.current();++styleIt)
389 Style* style = styleIt.current();
395 m_oasisStyles.clear();
Built-in or custom style defined in StyleManager dialog.
void loadOasis(KoOasisStyles &oasisStyles, const TQDomElement &style, const TQString &name)
Loads the style properties from style .
virtual TQString saveOasis(KoGenStyle &style, KoGenStyles &mainStyles)
The Style class represents a cell style.
bool release()
Releases this style.
@ BUILTIN
built-in style (the default style)
@ AUTO
automatically generated on cell format changes
@ CUSTOM
custom style (defined in the StyleManager dialog)