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.
300 lines
10 KiB
300 lines
10 KiB
/* This file is part of the KDE project
|
|
Copyright (C) 2002 Nash Hoogwater <nrhoogwater@wanadoo.nl>
|
|
|
|
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; using
|
|
version 2 of the License.
|
|
|
|
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 "KWTableTemplate.h"
|
|
|
|
#include "KWDocument.h"
|
|
#include "KWFrameStyle.h"
|
|
#include "KoParagStyle.h"
|
|
|
|
#include <kdebug.h>
|
|
#include <klocale.h>
|
|
#include <qdom.h>
|
|
|
|
|
|
/******************************************************************/
|
|
/* Class: KWTableTemplateCollection */
|
|
/******************************************************************/
|
|
|
|
KWTableTemplateCollection::KWTableTemplateCollection()
|
|
{
|
|
m_templateList.setAutoDelete( false );
|
|
m_deletedTemplates.setAutoDelete( true );
|
|
m_lastTemplate = 0L;
|
|
}
|
|
|
|
KWTableTemplateCollection::~KWTableTemplateCollection()
|
|
{
|
|
//kdDebug() << "KWTableTemplateCollection::destructor" << endl;
|
|
clear();
|
|
}
|
|
|
|
void KWTableTemplateCollection::clear()
|
|
{
|
|
m_templateList.setAutoDelete( true );
|
|
m_templateList.clear();
|
|
m_deletedTemplates.clear();
|
|
m_lastTemplate = 0;
|
|
}
|
|
|
|
KWTableTemplate* KWTableTemplateCollection::findTableTemplate( const QString & _name )
|
|
{
|
|
// Caching, to speed things up
|
|
if ( m_lastTemplate && m_lastTemplate->name() == _name )
|
|
return m_lastTemplate;
|
|
|
|
QPtrListIterator<KWTableTemplate> templateIt( m_templateList );
|
|
for ( ; templateIt.current(); ++templateIt )
|
|
{
|
|
if ( templateIt.current()->name() == _name ) {
|
|
m_lastTemplate = templateIt.current();
|
|
return m_lastTemplate;
|
|
}
|
|
}
|
|
|
|
// if(_name == "Plain") return m_styleList.at(0); // fallback..
|
|
|
|
return 0L;
|
|
}
|
|
|
|
|
|
KWTableTemplate* KWTableTemplateCollection::addTableTemplate( KWTableTemplate * tt )
|
|
{
|
|
// First check for duplicates.
|
|
for ( KWTableTemplate* p = m_templateList.first(); p != 0L; p = m_templateList.next() )
|
|
{
|
|
if ( p->name() == tt->name() ) {
|
|
// Replace existing template
|
|
if ( tt != p )
|
|
{
|
|
*p = *tt;
|
|
delete tt;
|
|
}
|
|
return p;
|
|
}
|
|
}
|
|
m_templateList.append( tt );
|
|
return tt;
|
|
}
|
|
|
|
void KWTableTemplateCollection::removeTableTemplate ( KWTableTemplate *tt )
|
|
{
|
|
if( m_templateList.removeRef( tt )) {
|
|
if ( m_lastTemplate == tt )
|
|
m_lastTemplate = 0L;
|
|
// Remember to delete this template when deleting the document
|
|
m_deletedTemplates.append( tt );
|
|
}
|
|
}
|
|
|
|
/******************************************************************/
|
|
/* Class: KWTableTemplate */
|
|
/******************************************************************/
|
|
|
|
KWTableTemplate::KWTableTemplate( const QString & name, KWTableStyle * _firstRow, KWTableStyle * _firstCol,
|
|
KWTableStyle *_lastRow, KWTableStyle *_lastCol, KWTableStyle *_bodyCell,
|
|
KWTableStyle *_topLeftCorner, KWTableStyle *_topRightCorner,
|
|
KWTableStyle *_bottomLeftCorner, KWTableStyle *_bottomRightCorner )
|
|
{
|
|
m_name = name;
|
|
m_firstRow = _firstRow;
|
|
m_firstCol = _firstCol;
|
|
m_lastRow = _lastRow;
|
|
m_lastCol = _lastCol;
|
|
m_bodyCell = _bodyCell;
|
|
m_topLeftCorner = _topLeftCorner;
|
|
m_topRightCorner = _topRightCorner;
|
|
m_bottomRightCorner = _bottomRightCorner;
|
|
m_bottomLeftCorner = _bottomLeftCorner;
|
|
}
|
|
|
|
KWTableTemplate::KWTableTemplate( QDomElement & parentElem, KWDocument *_doc, int /*docVersion*/ )
|
|
{
|
|
m_topRightCorner = 0L;
|
|
m_topLeftCorner = 0L;
|
|
m_bottomRightCorner = 0L;
|
|
m_bottomLeftCorner = 0L;
|
|
|
|
QDomElement element = parentElem.namedItem( "NAME" ).toElement();
|
|
if ( ( !element.isNull() ) && ( element.hasAttribute("value") ) )
|
|
m_name = element.attribute( "value" );
|
|
|
|
element = parentElem.namedItem( "BODYCELL" ).toElement();
|
|
if ( ( !element.isNull() ) && ( element.hasAttribute("name") )
|
|
&& ( _doc->tableStyleCollection()->findStyle( element.attribute( "name" ) ) ) )
|
|
m_bodyCell = _doc->tableStyleCollection()->findStyle( element.attribute( "name" ) );
|
|
else {
|
|
KWTableStyle *ts = _doc->tableStyleCollection()->findStyle( "Plain" );
|
|
if (ts) {
|
|
setBodyCell( ts );
|
|
}
|
|
else {
|
|
ts = new KWTableStyle( "Plain", 0L, 0L );
|
|
KWFrameStyle *fs = _doc->frameStyleCollection()->findStyle( "Plain" );
|
|
KoParagStyle *s = _doc->styleCollection()->findStyle( "Standard" );
|
|
if ( fs )
|
|
ts->setFrameStyle( fs );
|
|
else {
|
|
KWFrameStyle * standardFrameStyle = new KWFrameStyle( "Plain" );
|
|
standardFrameStyle->setBackgroundColor(QColor("white"));
|
|
standardFrameStyle->setTopBorder(KoBorder(QColor("black"),KoBorder::SOLID,0));
|
|
standardFrameStyle->setRightBorder(KoBorder(QColor("black"),KoBorder::SOLID,0));
|
|
standardFrameStyle->setLeftBorder(KoBorder(QColor("black"),KoBorder::SOLID,0));
|
|
standardFrameStyle->setBottomBorder(KoBorder(QColor("black"),KoBorder::SOLID,0));
|
|
_doc->frameStyleCollection()->addStyle( standardFrameStyle );
|
|
ts->setFrameStyle( fs );
|
|
}
|
|
|
|
if ( s )
|
|
ts->setParagraphStyle( s );
|
|
else {
|
|
KoParagStyle * standardStyle = new KoParagStyle( "Standard" );
|
|
standardStyle->format().setFont( _doc->defaultFont() );
|
|
_doc->styleCollection()->addStyle( standardStyle );
|
|
ts->setParagraphStyle( s );
|
|
}
|
|
setBodyCell ( ts );
|
|
}
|
|
}
|
|
element = parentElem.namedItem( "FIRSTROW" ).toElement();
|
|
if ( ( !element.isNull() ) && ( element.hasAttribute("name") )
|
|
&& ( _doc->tableStyleCollection()->findStyle( element.attribute( "name" ) ) ) )
|
|
{
|
|
m_firstRow = _doc->tableStyleCollection()->findStyle( element.attribute( "name" ) );
|
|
|
|
if ( element.hasAttribute("topleftcorner") )
|
|
m_topLeftCorner = m_firstRow;
|
|
if ( element.hasAttribute("toprightcorner") )
|
|
m_topRightCorner = m_firstRow;
|
|
}
|
|
else
|
|
m_firstRow = m_bodyCell;
|
|
|
|
element = parentElem.namedItem( "FIRSTCOL" ).toElement();
|
|
if ( ( !element.isNull() ) && ( element.hasAttribute("name") )
|
|
&& ( _doc->tableStyleCollection()->findStyle( element.attribute( "name" ) ) ) )
|
|
{
|
|
m_firstCol = _doc->tableStyleCollection()->findStyle( element.attribute( "name" ) );
|
|
|
|
if ( element.hasAttribute("topleftcorner") )
|
|
m_topLeftCorner = m_firstCol;
|
|
if ( element.hasAttribute("bottomleftcorner") )
|
|
m_bottomLeftCorner = m_firstCol;
|
|
}
|
|
else
|
|
m_firstCol = m_bodyCell;
|
|
|
|
element = parentElem.namedItem( "LASTROW" ).toElement();
|
|
if ( ( !element.isNull() ) && ( element.hasAttribute("name") )
|
|
&& ( _doc->tableStyleCollection()->findStyle( element.attribute( "name" ) ) ) )
|
|
{
|
|
m_lastRow = _doc->tableStyleCollection()->findStyle( element.attribute( "name" ) );
|
|
|
|
if ( ( !element.isNull() ) && ( element.hasAttribute("bottomrightcorner") ) )
|
|
m_bottomRightCorner = m_lastRow;
|
|
if ( ( !element.isNull() ) && ( element.hasAttribute("bottomleftcorner") ) )
|
|
m_bottomLeftCorner = m_lastRow;
|
|
}
|
|
else
|
|
m_lastRow = m_bodyCell;
|
|
|
|
element = parentElem.namedItem( "LASTCOL" ).toElement();
|
|
if ( ( !element.isNull() ) && ( element.hasAttribute("name") )
|
|
&& ( _doc->tableStyleCollection()->findStyle( element.attribute( "name" ) ) ) )
|
|
{
|
|
m_lastCol = _doc->tableStyleCollection()->findStyle( element.attribute( "name" ) );
|
|
|
|
if ( element.hasAttribute("toprightcorner") )
|
|
m_topRightCorner = m_lastCol;
|
|
if ( element.hasAttribute("bottomrightcorner") )
|
|
m_bottomRightCorner = m_lastCol;
|
|
}
|
|
else
|
|
m_lastCol = m_bodyCell;
|
|
|
|
if (!m_topRightCorner) m_topRightCorner = m_bodyCell;
|
|
if (!m_topLeftCorner) m_topLeftCorner = m_bodyCell;
|
|
if (!m_bottomRightCorner) m_bottomRightCorner = m_bodyCell;
|
|
if (!m_bottomLeftCorner) m_bottomLeftCorner = m_bodyCell;
|
|
}
|
|
|
|
void KWTableTemplate::operator=( const KWTableTemplate &rhs )
|
|
{
|
|
m_name = rhs.m_name;
|
|
m_firstRow = rhs.pFirstRow();
|
|
m_firstCol = rhs.pFirstCol();
|
|
m_lastRow = rhs.pLastRow();
|
|
m_lastCol = rhs.pLastCol();
|
|
m_bodyCell = rhs.pBodyCell();
|
|
m_topLeftCorner = rhs.pTopLeftCorner();
|
|
m_topRightCorner = rhs.pTopRightCorner();
|
|
m_bottomRightCorner = rhs.pBottomRightCorner();
|
|
m_bottomLeftCorner = rhs.pBottomLeftCorner();
|
|
}
|
|
|
|
QString KWTableTemplate::displayName() const
|
|
{
|
|
return i18n( "Style name", name().utf8() );
|
|
}
|
|
|
|
// TODO
|
|
void KWTableTemplate::saveTableTemplate( QDomElement & parentElem )
|
|
{
|
|
QDomDocument doc = parentElem.ownerDocument();
|
|
QDomElement element = doc.createElement( "NAME" );
|
|
parentElem.appendChild( element );
|
|
element.setAttribute( "value", name() );
|
|
|
|
if (m_bodyCell)
|
|
{
|
|
element = doc.createElement( "BODYCELL" );
|
|
parentElem.appendChild( element );
|
|
element.setAttribute( "name", m_bodyCell->name() );
|
|
}
|
|
if (m_firstRow)
|
|
{
|
|
element = doc.createElement( "FIRSTROW" );
|
|
parentElem.appendChild( element );
|
|
element.setAttribute( "name", m_firstRow->name() );
|
|
}
|
|
if (m_firstCol)
|
|
{
|
|
element = doc.createElement( "FIRSTCOL" );
|
|
parentElem.appendChild( element );
|
|
element.setAttribute( "name", m_firstCol->name() );
|
|
}
|
|
if (m_lastRow)
|
|
{
|
|
element = doc.createElement( "LASTROW" );
|
|
parentElem.appendChild( element );
|
|
element.setAttribute( "name", m_lastRow->name() );
|
|
}
|
|
if (m_lastCol)
|
|
{
|
|
element = doc.createElement( "LASTCOL" );
|
|
parentElem.appendChild( element );
|
|
element.setAttribute( "name", m_lastCol->name() );
|
|
}
|
|
}
|
|
|
|
KWTableTemplate *KWTableTemplate::loadTemplate( QDomElement & parentElem, KWDocument *_doc, int docVersion )
|
|
{
|
|
return new KWTableTemplate(parentElem, _doc, docVersion);
|
|
}
|