summaryrefslogtreecommitdiffstats
path: root/kword/KWCommand.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
commit8362bf63dea22bbf6736609b0f49c152f975eb63 (patch)
tree0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kword/KWCommand.cpp
downloadkoffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz
koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kword/KWCommand.cpp')
-rw-r--r--kword/KWCommand.cpp2094
1 files changed, 2094 insertions, 0 deletions
diff --git a/kword/KWCommand.cpp b/kword/KWCommand.cpp
new file mode 100644
index 000000000..52383db4f
--- /dev/null
+++ b/kword/KWCommand.cpp
@@ -0,0 +1,2094 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 David Faure <faure@kde.org>
+ Copyright (C) 2005 Thomas Zander <zander@kde.org>
+
+ 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 "KWCommand.h"
+#include "KWDocument.h"
+#include "KWTextFrameSet.h"
+#include "KWTableStyle.h"
+#include "KWTableTemplate.h"
+#include "KWTableFrameSet.h"
+#include "KWPartFrameSet.h"
+#include "KWTextDocument.h"
+#include "KWTextParag.h"
+#include "KWAnchor.h"
+#include "KWVariable.h"
+#include "KWOasisLoader.h"
+#include "KWFrameList.h"
+#include "KWFrameSet.h"
+#include "KWPictureFrameSet.h"
+#include "KWPageManager.h"
+#include "KWPage.h"
+
+#include <KoTextObject.h>
+#include <KoOasisStyles.h>
+#include <KoOasisContext.h>
+#include <KoXmlNS.h>
+#include <KoDom.h>
+#include <KoStore.h>
+#include <KoOasisStore.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+
+#include <qxml.h>
+#include <qbuffer.h>
+#include <algorithm>
+
+// Helper class for deleting all custom items
+// (KWTextFrameset::removeSelectedText and readFormats do that already,
+// but with undo/redo, and copying all formatting etc.)
+class KWDeleteCustomItemVisitor : public KoParagVisitor // see kotextdocument.h
+{
+public:
+ KWDeleteCustomItemVisitor() : KoParagVisitor() { }
+ virtual bool visit( KoTextParag *parag, int start, int end )
+ {
+ kdDebug(32001) << "KWPasteTextCommand::execute " << parag->paragId() << " " << start << " " << end << endl;
+ for ( int i = start ; i < end ; ++i )
+ {
+ KoTextStringChar * ch = parag->at( i );
+ if ( ch->isCustom() ) {
+ KoTextCustomItem* item = ch->customItem();
+ item->setDeleted( true );
+ parag->removeCustomItem(i);
+ KCommand* itemCmd = item->deleteCommand();
+ if ( itemCmd )
+ itemCmd->execute();
+ }
+ }
+ return true;
+ }
+};
+
+#if 0 // kept for comparison with KWOasisPasteCommand
+KWPasteTextCommand::KWPasteTextCommand( KoTextDocument *d, int parag, int idx,
+ const QCString & data )
+ : KoTextDocCommand( d ), m_parag( parag ), m_idx( idx ), m_data( data ), m_oldParagLayout( 0 )
+{
+}
+
+KoTextCursor * KWPasteTextCommand::execute( KoTextCursor *c )
+{
+ KoTextParag *firstParag = doc->paragAt( m_parag );
+ if ( !firstParag ) {
+ qWarning( "can't locate parag at %d, last parag: %d", m_parag, doc->lastParag()->paragId() );
+ return 0;
+ }
+ //kdDebug() << "KWPasteTextCommand::execute m_parag=" << m_parag << " m_idx=" << m_idx
+ // << " firstParag=" << firstParag << " " << firstParag->paragId() << endl;
+ cursor.setParag( firstParag );
+ cursor.setIndex( m_idx );
+ c->setParag( firstParag );
+ c->setIndex( m_idx );
+ QDomDocument domDoc;
+ domDoc.setContent( m_data );
+ QDomElement elem = domDoc.documentElement();
+ KWTextDocument * textdoc = static_cast<KWTextDocument *>(doc);
+ KWTextFrameSet * textFs = textdoc->textFrameSet();
+ // We iterate twice over the list of paragraphs.
+ // First time to gather the text,
+ // second time to apply the character & paragraph formatting
+ QString text;
+
+ QValueList<QDomElement> listParagraphs;
+ QDomElement paragraph = elem.firstChild().toElement();
+ for ( ; !paragraph.isNull() ; paragraph = paragraph.nextSibling().toElement() )
+ {
+ if ( paragraph.tagName() == "PARAGRAPH" )
+ {
+ QString s = paragraph.namedItem( "TEXT" ).toElement().text();
+ //kdDebug() << "KWPasteTextCommand::execute Inserting text: '" << s << "'" << endl;
+ c->insert( s, false /*newline=linebreak, not new parag*/ );
+
+ if ( !paragraph.nextSibling().isNull() ) // Not for last parag
+ {
+ // Create new parag
+ // Lowlevel method:
+ c->splitAndInsertEmptyParag( FALSE, TRUE );
+ // Highlevel method:
+ //c->insert( "\n", true );
+ }
+ listParagraphs.append( paragraph );
+ }
+ }
+
+ // Redo the parag lookup because if firstParag was empty, insert() has
+ // shifted it down (side effect of splitAndInsertEmptyParag)
+ firstParag = doc->paragAt( m_parag );
+ KWTextParag * parag = static_cast<KWTextParag *>(firstParag);
+ //kdDebug() << "KWPasteTextCommand::execute starting at parag " << parag << " " << parag->paragId() << endl;
+ uint count = listParagraphs.count();
+ QValueList<QDomElement>::Iterator it = listParagraphs.begin();
+ QValueList<QDomElement>::Iterator end = listParagraphs.end();
+ for ( uint item = 0 ; it != end ; ++it, ++item )
+ {
+ if (!parag)
+ {
+ kdWarning() << "KWPasteTextCommand: parag==0L ! KWord bug, please report." << endl;
+ break;
+ }
+ QDomElement paragElem = *it;
+ // First line (if appending to non-empty line) : apply offset to formatting, don't apply parag layout
+ if ( item == 0 && m_idx > 0 )
+ {
+ // First load the default format, but only apply it to our new chars
+ QDomElement layout = paragElem.namedItem( "LAYOUT" ).toElement();
+ if ( !layout.isNull() )
+ {
+ QDomElement formatElem = layout.namedItem( "FORMAT" ).toElement();
+ if ( !formatElem.isNull() )
+ {
+ KoTextFormat f = parag->loadFormat( formatElem, 0L, QFont(), KGlobal::locale()->language(),false );
+ KoTextFormat * defaultFormat = doc->formatCollection()->format( &f );
+ // Last paragraph (i.e. only one in all) : some of the text might be from before the paste
+ int endIndex = (item == count-1) ? c->index() : parag->string()->length() - 1;
+ parag->setFormat( m_idx, endIndex - m_idx, defaultFormat, TRUE );
+ }
+ }
+
+ parag->loadFormatting( paragElem, m_idx, (textFs->isMainFrameset()));
+ }
+ else
+ {
+ if ( item == 0 ) // This paragraph existed, store its parag layout
+ {
+ delete m_oldParagLayout;
+ m_oldParagLayout = new KoParagLayout( parag->paragLayout() );
+ }
+ parag->loadLayout( paragElem );
+ // Last paragraph: some of the text might be from before the paste
+ int len = (item == count-1) ? c->index() : parag->string()->length();
+ // Apply default format
+ parag->setFormat( 0, len, parag->paragFormat(), TRUE );
+ parag->loadFormatting( paragElem, 0, (textFs->isMainFrameset()) );
+ }
+ parag->invalidate(0); // the formatting will be done by caller (either KWTextFrameSet::pasteOasis or KoTextObject::undo/redo)
+ parag->setChanged( TRUE );
+ parag = static_cast<KWTextParag *>(parag->next());
+ //kdDebug() << "KWPasteTextCommand::execute going to next parag: " << parag << endl;
+ }
+ textFs->textObject()->setNeedSpellCheck( true );
+ // In case loadFormatting queued any image request
+ KWDocument * doc = textFs->kWordDocument();
+ doc->processPictureRequests();
+
+ //kdDebug() << "KWPasteTextCommand::execute calling doc->pasteFrames" << endl;
+ // In case of any inline frameset
+ doc->pasteFrames( elem, 0,
+ true /*don't change footnote attribute*/ ,
+ (textFs->isMainFrameset()) /*load footnotes if mainframeset*/,
+ false /*don't select frames*/ );
+ doc->completePasting();
+
+ m_lastParag = c->parag()->paragId();
+ m_lastIndex = c->index();
+ return c;
+}
+
+KoTextCursor * KWPasteTextCommand::unexecute( KoTextCursor *c )
+{
+ KoTextParag *firstParag = doc->paragAt( m_parag );
+ if ( !firstParag ) {
+ qWarning( "can't locate parag at %d, last parag: %d", m_parag, doc->lastParag()->paragId() );
+ return 0;
+ }
+ cursor.setParag( firstParag );
+ cursor.setIndex( m_idx );
+ doc->setSelectionStart( KoTextDocument::Temp, &cursor );
+
+ KoTextParag *lastParag = doc->paragAt( m_lastParag );
+ if ( !lastParag ) {
+ qWarning( "can't locate parag at %d, last parag: %d", m_lastParag, doc->lastParag()->paragId() );
+ return 0;
+ }
+ Q_ASSERT( lastParag->document() );
+ KWTextDocument * textdoc = static_cast<KWTextDocument *>(doc);
+
+ //kdDebug() << "Undoing paste: deleting from (" << firstParag->paragId() << "," << m_idx << ")"
+ // << " to (" << lastParag->paragId() << "," << m_lastIndex << ")" << endl;
+
+ cursor.setParag( lastParag );
+ cursor.setIndex( m_lastIndex );
+ doc->setSelectionEnd( KoTextDocument::Temp, &cursor );
+ // Delete all custom items
+ KWDeleteCustomItemVisitor visitor;
+ doc->visitSelection( KoTextDocument::Temp, &visitor );
+
+ doc->removeSelectedText( KoTextDocument::Temp, c /* sets c to the correct position */ );
+
+ KWTextFrameSet * textFs = textdoc->textFrameSet();
+
+ textFs->renumberFootNotes();
+ if ( m_idx == 0 ) {
+ Q_ASSERT( m_oldParagLayout );
+ if ( m_oldParagLayout )
+ firstParag->setParagLayout( *m_oldParagLayout );
+ }
+ return c;
+}
+#endif
+
+KWOasisPasteCommand::KWOasisPasteCommand( KoTextDocument *d, int parag, int idx,
+ const QByteArray& data )
+ : KoTextDocCommand( d ), m_parag( parag ), m_idx( idx ), m_data( data ), m_oldParagLayout( 0 )
+{
+}
+
+KoTextCursor * KWOasisPasteCommand::execute( KoTextCursor *c )
+{
+ KoTextParag *firstParag = doc->paragAt( m_parag );
+ if ( !firstParag ) {
+ qWarning( "can't locate parag at %d, last parag: %d", m_parag, doc->lastParag()->paragId() );
+ return c;
+ }
+ //kdDebug() << "KWOasisPasteCommand::execute m_parag=" << m_parag << " m_idx=" << m_idx
+ // << " firstParag=" << firstParag << " " << firstParag->paragId() << endl;
+ cursor.setParag( firstParag );
+ cursor.setIndex( m_idx );
+ c->setParag( firstParag );
+ c->setIndex( m_idx );
+
+ KWTextDocument * textdoc = static_cast<KWTextDocument *>(doc);
+
+ QBuffer buffer( m_data );
+
+ KoStore * store = KoStore::createStore( &buffer, KoStore::Read );
+ KWDocument* kwdoc = textdoc->textFrameSet()->kWordDocument();
+ KWOasisLoader loader( kwdoc );
+ loader.insertOasisData( store, c );
+
+ delete store;
+
+ m_lastParag = c->parag()->paragId();
+ m_lastIndex = c->index();
+ return c;
+}
+
+KoTextCursor * KWOasisPasteCommand::unexecute( KoTextCursor *c )
+{
+ KoTextParag *firstParag = doc->paragAt( m_parag );
+ if ( !firstParag ) {
+ qWarning( "can't locate parag at %d, last parag: %d", m_parag, doc->lastParag()->paragId() );
+ return 0;
+ }
+ cursor.setParag( firstParag );
+ cursor.setIndex( m_idx );
+ doc->setSelectionStart( KoTextDocument::Temp, &cursor );
+
+ KoTextParag *lastParag = doc->paragAt( m_lastParag );
+ if ( !lastParag ) {
+ qWarning( "can't locate parag at %d, last parag: %d", m_lastParag, doc->lastParag()->paragId() );
+ return 0;
+ }
+ Q_ASSERT( lastParag->document() );
+ // Get hold of the document before deleting the parag
+ KWTextDocument * textdoc = static_cast<KWTextDocument *>(doc);
+
+ //kdDebug() << "Undoing paste: deleting from (" << firstParag->paragId() << "," << m_idx << ")"
+ // << " to (" << lastParag->paragId() << "," << m_lastIndex << ")" << endl;
+
+ cursor.setParag( lastParag );
+ cursor.setIndex( m_lastIndex );
+ doc->setSelectionEnd( KoTextDocument::Temp, &cursor );
+ // Delete all custom items
+ KWDeleteCustomItemVisitor visitor;
+ doc->visitSelection( KoTextDocument::Temp, &visitor );
+
+ doc->removeSelectedText( KoTextDocument::Temp, c /* sets c to the correct position */ );
+
+ KWTextFrameSet * textFs = textdoc->textFrameSet();
+
+ textFs->renumberFootNotes();
+#if 0
+ if ( m_idx == 0 ) {
+ Q_ASSERT( m_oldParagLayout );
+ if ( m_oldParagLayout )
+ firstParag->setParagLayout( *m_oldParagLayout );
+ }
+#endif
+ return c;
+}
+
+
+KWTextDeleteCommand::KWTextDeleteCommand( KoTextDocument *d, int i, int idx, const QMemArray<KoTextStringChar> &str,
+ const CustomItemsMap & customItemsMap,
+ const QValueList<KoParagLayout> & oldParagLayouts )
+ :KoTextDeleteCommand(d, i, idx, str, customItemsMap, oldParagLayouts)
+{
+ //createBookmarkList();
+}
+
+void KWTextDeleteCommand::createBookmarkList()
+{
+#if 0
+ KoTextParag *s = doc ? doc->paragAt( id ) : parag;
+ if ( !s ) {
+ qWarning( "can't locate parag at %d, last parag: %d", id, doc->lastParag()->paragId() );
+ return;
+ }
+
+ // Now restore the parag layouts (i.e. libkotext specific stuff)
+ QValueList<KoParagLayout>::Iterator lit = m_oldParagLayouts.begin();
+ kdDebug(32500) << "KWTextDeleteCommand::createBookmarkList " << m_oldParagLayouts.count() << " parag layouts. First parag=" << s->paragId() << endl;
+ Q_ASSERT( id == s->paragId() );
+ KoTextParag *p = s;
+ while ( p ) {
+ if ( lit != m_oldParagLayouts.end() )
+ {
+ kdDebug(32500) << "KWTextDeleteCommand::unexecute find bookmark in parag " << p->paragId() << endl;
+ //p->setParagLayout( *lit );
+ }
+ else
+ break;
+ p = p->next();
+ ++lit;
+ }
+#endif
+}
+
+KoTextCursor *KWTextDeleteCommand::execute( KoTextCursor *c )
+{
+ return KoTextDeleteCommand::execute( c );
+}
+
+KoTextCursor *KWTextDeleteCommand::unexecute( KoTextCursor *c )
+{
+ return KoTextDeleteCommand::unexecute( c );
+}
+
+////////////////////////// Frame commands ////////////////////////////////
+
+FrameIndex::FrameIndex( KWFrame *frame )
+{
+ m_pFrameSet=frame->frameSet();
+ m_iFrameIndex=m_pFrameSet->frameFromPtr(frame);
+}
+
+KWFrameBorderCommand::KWFrameBorderCommand( const QString &name, QPtrList<FrameIndex> &_listFrameIndex, QPtrList<FrameBorderTypeStruct> &_frameTypeBorder,const KoBorder & _newBorder):
+ KNamedCommand(name),
+ m_indexFrame(_listFrameIndex),
+ m_oldBorderFrameType(_frameTypeBorder),
+ m_newBorder( _newBorder)
+{
+}
+
+KWFrameBorderCommand::~KWFrameBorderCommand()
+{
+ m_indexFrame.setAutoDelete( true);
+ m_oldBorderFrameType.setAutoDelete( true);
+}
+
+void KWFrameBorderCommand::execute()
+{
+ FrameIndex *tmp;
+ KWDocument *doc = 0L;
+ for ( tmp=m_indexFrame.first(); tmp != 0; tmp=m_indexFrame.next() )
+ {
+ KWFrameSet *frameSet =tmp->m_pFrameSet;
+ doc = frameSet->kWordDocument();
+ KWFrame *frame=frameSet->frame(tmp->m_iFrameIndex);
+ KWTableFrameSet::Cell *cell = dynamic_cast<KWTableFrameSet::Cell *>(frame->frameSet());
+ FrameBorderTypeStruct *tmpFrameStruct=m_oldBorderFrameType.at(m_indexFrame.find(tmp));
+
+ switch( tmpFrameStruct->m_EFrameType)
+ {
+ case KoBorder::LeftBorder:
+ if(cell) // is a table cell
+ cell->setLeftBorder(m_newBorder);
+ else
+ frame->setLeftBorder(m_newBorder);
+ break;
+ case KoBorder::RightBorder:
+ if(cell) // is a table cell
+ cell->setRightBorder(m_newBorder);
+ else
+ frame->setRightBorder(m_newBorder);
+ break;
+ case KoBorder::TopBorder:
+ if(cell) // is a table cell
+ cell->setTopBorder(m_newBorder);
+ else
+ frame->setTopBorder(m_newBorder);
+ break;
+ case KoBorder::BottomBorder:
+ if(cell) // is a table cell
+ cell->setBottomBorder(m_newBorder);
+ else
+ frame->setBottomBorder(m_newBorder);
+ break;
+ default:
+ break;
+ }
+
+ if (!cell) {
+ frame->frameBordersChanged();
+ //fixme frameBorderChanged for table cells here too ?
+ }
+ }
+
+
+ if ( doc )
+ {
+ doc->repaintAllViews();
+ }
+}
+
+void KWFrameBorderCommand::unexecute()
+{
+ FrameIndex *tmp;
+ KWDocument *doc = 0L;
+ for ( tmp=m_indexFrame.first(); tmp != 0; tmp=m_indexFrame.next() )
+ {
+ KWFrameSet *frameSet =tmp->m_pFrameSet;
+ doc = frameSet->kWordDocument();
+ KWFrame *frame=frameSet->frame(tmp->m_iFrameIndex);
+ KWTableFrameSet::Cell *cell = dynamic_cast<KWTableFrameSet::Cell *>(frame->frameSet());
+ FrameBorderTypeStruct *tmpFrameStruct=m_oldBorderFrameType.at(m_indexFrame.find(tmp));
+ switch(tmpFrameStruct->m_EFrameType)
+ {
+ case KoBorder::LeftBorder:
+ if(cell) // is a table cell
+ cell->setLeftBorder(tmpFrameStruct->m_OldBorder);
+ else
+ frame->setLeftBorder(tmpFrameStruct->m_OldBorder);
+ break;
+ case KoBorder::RightBorder:
+ if(cell) // is a table cell
+ cell->setRightBorder(tmpFrameStruct->m_OldBorder);
+ else
+ frame->setRightBorder(tmpFrameStruct->m_OldBorder);
+ break;
+ case KoBorder::TopBorder:
+ if(cell) // is a table cell
+ cell->setTopBorder(tmpFrameStruct->m_OldBorder);
+ else
+ frame->setTopBorder(tmpFrameStruct->m_OldBorder);
+ break;
+ case KoBorder::BottomBorder:
+ if(cell) // is a table cell
+ cell->setBottomBorder(tmpFrameStruct->m_OldBorder);
+ else
+ frame->setBottomBorder(tmpFrameStruct->m_OldBorder);
+ break;
+ default:
+ break;
+ }
+ if (!cell) {
+ frame->frameBordersChanged();
+ //fixme frameBorderChanged for table cells here too ?
+ }
+ }
+
+
+
+ if ( doc )
+ {
+ //update frames
+ doc->repaintAllViews();
+ }
+}
+
+KWFrameBackGroundColorCommand::KWFrameBackGroundColorCommand( const QString &name, QPtrList<FrameIndex> &_listFrameIndex, QPtrList<QBrush> &_oldBrush,const QBrush & _newColor ):
+ KNamedCommand(name),
+ m_indexFrame(_listFrameIndex),
+ m_oldBackGroundColor(_oldBrush),
+ m_newColor( _newColor)
+{
+}
+
+KWFrameBackGroundColorCommand::~KWFrameBackGroundColorCommand()
+{
+ m_indexFrame.setAutoDelete(true);
+ m_oldBackGroundColor.setAutoDelete(true);
+}
+
+
+void KWFrameBackGroundColorCommand::execute()
+{
+ FrameIndex *tmp;
+ KWDocument * doc = 0L;
+ for ( tmp=m_indexFrame.first(); tmp != 0; tmp=m_indexFrame.next() )
+ {
+ KWFrameSet *frameSet =tmp->m_pFrameSet;
+ if ( frameSet && (frameSet->type() != FT_PICTURE) && (frameSet->type() != FT_PART))
+ {
+ doc = frameSet->kWordDocument();
+ KWFrame *frame=frameSet->frame(tmp->m_iFrameIndex);
+ frame->setBackgroundColor(m_newColor);
+ }
+ }
+ //update frame
+ if ( doc )
+ doc->repaintAllViews();
+}
+
+void KWFrameBackGroundColorCommand::unexecute()
+{
+ FrameIndex *tmp;
+ KWDocument * doc = 0L;
+ for ( tmp=m_indexFrame.first(); tmp != 0; tmp=m_indexFrame.next() )
+ {
+ KWFrameSet *frameSet =tmp->m_pFrameSet;
+ if ( frameSet && (frameSet->type() != FT_PICTURE) && (frameSet->type() != FT_PART) )
+ {
+ doc = frameSet->kWordDocument();
+ KWFrame *frame=frameSet->frame(tmp->m_iFrameIndex);
+ QBrush *tmpFrameStruct=m_oldBackGroundColor.at(m_indexFrame.find(tmp));
+ frame->setBackgroundColor(*tmpFrameStruct);
+ }
+ }
+
+ //update frames
+ if ( doc )
+ doc->repaintAllViews();
+}
+
+KWFrameStyleCommand::KWFrameStyleCommand( const QString &name, KWFrame *_frame, KWFrameStyle *_fs, bool _repaintViews ) :
+ KNamedCommand( name )
+{
+ m_frame = _frame;
+ m_fs = _fs;
+ repaintViews = _repaintViews;
+
+ m_oldValues = new KWFrameStyle( "Old", m_frame );
+}
+
+void KWFrameStyleCommand::execute()
+{
+ applyFrameStyle( m_fs);
+}
+
+void KWFrameStyleCommand::unexecute()
+{
+ applyFrameStyle( m_oldValues);
+}
+
+void KWFrameStyleCommand::applyFrameStyle( KWFrameStyle * _sty )
+{
+ if ( m_frame->frameSet() && (m_frame->frameSet()->type() != FT_PICTURE)&& (m_frame->frameSet()->type() != FT_PART))
+ m_frame->setBackgroundColor( _sty->backgroundColor() );
+ m_frame->setLeftBorder( _sty->leftBorder() );
+ m_frame->setRightBorder( _sty->rightBorder() );
+ m_frame->setTopBorder( _sty->topBorder() );
+ m_frame->setBottomBorder( _sty->bottomBorder() );
+
+ m_frame->frameBordersChanged();
+ if ( repaintViews )
+ m_frame->frameSet()->kWordDocument()->repaintAllViews();
+}
+
+
+KWTableStyleCommand::KWTableStyleCommand( const QString &name, KWFrame *_frame, KWTableStyle *_ts, bool _repaintViews ) :
+ KNamedCommand( name )
+{
+ m_frame = _frame;
+ m_ts = _ts;
+ repaintViews = _repaintViews;
+
+ // No need for i18n because it will never be displayed.
+ m_fsc = new KWFrameStyleCommand( "Apply Framestyle to Frame", m_frame, m_ts->frameStyle(), repaintViews );
+ m_sc = 0L;
+}
+
+KWTableStyleCommand::~KWTableStyleCommand()
+{
+ delete m_fsc;
+ delete m_sc;
+}
+
+void KWTableStyleCommand::execute()
+{
+ if (m_fsc)
+ m_fsc->execute();
+
+ if ( (m_ts) && ( m_frame->frameSet()->type() == FT_TEXT ) && ( m_ts->paragraphStyle() ) )
+ {
+ KoTextObject *textObject = ((KWTextFrameSet*)m_frame->frameSet())->textObject();
+ textObject->textDocument()->selectAll( KoTextDocument::Temp );
+ m_sc = textObject->applyStyleCommand( 0L, m_ts->paragraphStyle(), KoTextDocument::Temp, KoParagLayout::All, KoTextFormat::Format, true, false );
+ textObject->textDocument()->removeSelection( KoTextDocument::Temp );
+ }
+
+ m_frame->frameBordersChanged();
+ if ( repaintViews )
+ m_frame->frameSet()->kWordDocument()->repaintAllViews();
+
+}
+
+void KWTableStyleCommand::unexecute()
+{
+ if (m_fsc)
+ m_fsc->unexecute();
+ if (m_sc)
+ m_sc->unexecute();
+
+ m_frame->frameBordersChanged();
+ if ( repaintViews )
+ m_frame->frameSet()->kWordDocument()->repaintAllViews();
+}
+
+KWTableTemplateCommand::KWTableTemplateCommand( const QString &name, KWTableFrameSet *_table, KWTableTemplate *_tt ) :
+ KNamedCommand( name )
+{
+ m_table = _table;
+ m_tt = _tt;
+
+ // No need for i18n because it will never be displayed.
+ m_tableCommands = new KMacroCommand( "Apply Tablestyles to Table" );
+
+
+ KWTableStyle *cell = 0L;
+ unsigned int rows = m_table->getRows();
+ unsigned int cols = m_table->getColumns();
+
+ for ( unsigned int i = 0; i < rows; i++ )
+ {
+ for ( unsigned int j = 0; j < cols; j++ )
+ {
+ if ( (i==0) && (j==0) ) // TOP LEFT CORNER
+ cell = m_tt->pTopLeftCorner();
+ else
+ if ( (i==0) && ( j==(cols-1) ) ) // TOP RIGHT CORNER
+ cell = m_tt->pTopRightCorner();
+ else
+ if ( ( i==(rows-1) ) && (j==0) ) // BOTTOM LEFT CORNER
+ cell = m_tt->pBottomLeftCorner();
+ else
+ if ( ( i==(rows-1) ) && ( j==(cols-1) ) ) // BOTTOM RIGHT CORNER
+ cell = m_tt->pBottomRightCorner();
+ else
+ if ( ( i==0 ) && ( j>0 ) && ( j<(cols-1) ) ) // FIRST ROW
+ cell = m_tt->pFirstRow();
+ else
+ if ( ( j==0 ) && ( i>0 ) && ( i<(rows-1) ) ) // FIRST COL
+ cell = m_tt->pFirstCol();
+ else
+ if ( ( i==(rows-1) ) && ( j>0 ) && ( j<(cols-1) ) ) // LAST ROW
+ cell = m_tt->pLastRow();
+ else
+ if ( ( j==(cols-1) ) && ( i>0 ) && ( i<(rows-1) ) ) // LAST COL
+ cell = m_tt->pLastCol();
+ else
+ if ( (i>0) && (j>0) && (i<(rows-1)) && (j<(cols-1)) ) // BODY
+ cell = m_tt->pBodyCell();
+
+ m_tableCommands->addCommand( new KWTableStyleCommand( "Apply tablestyle to cell", m_table->cell(i,j)->frame(0),cell, false ) );
+ }
+ }
+}
+
+KWTableTemplateCommand::~KWTableTemplateCommand()
+{
+ delete m_tableCommands;
+}
+
+void KWTableTemplateCommand::execute()
+{
+ m_tableCommands->execute();
+ m_table->kWordDocument()->repaintAllViews();
+}
+
+void KWTableTemplateCommand::unexecute()
+{
+ m_tableCommands->unexecute();
+ m_table->kWordDocument()->repaintAllViews();
+}
+
+
+KWFrameResizeCommand::KWFrameResizeCommand(const QString &name, const QValueList<FrameIndex> &frameIndex, const QValueList<FrameResizeStruct> &frameResize )
+ : KNamedCommand(name), m_indexFrame(frameIndex), m_frameResize(frameResize) {
+ Q_ASSERT(m_indexFrame.count() == m_frameResize.count());
+}
+KWFrameResizeCommand::KWFrameResizeCommand(const QString &name, FrameIndex frameIndex, const FrameResizeStruct &frameResize )
+ : KNamedCommand(name) {
+ m_indexFrame.append(frameIndex);
+ m_frameResize.append(frameResize);
+}
+
+void KWFrameResizeCommand::execute()
+{
+ QValueList<FrameResizeStruct>::Iterator resizeIter = m_frameResize.begin();
+ QValueList<FrameIndex>::Iterator iter = m_indexFrame.begin();
+ for(; iter != m_indexFrame.end() && resizeIter != m_frameResize.end(); ++resizeIter, ++iter ) {
+ FrameIndex index = *iter;
+ FrameResizeStruct frs = *resizeIter;
+
+ KWFrameSet *frameSet = index.m_pFrameSet;
+ Q_ASSERT( frameSet );
+ KWFrame *frame = frameSet->frame(index.m_iFrameIndex);
+ Q_ASSERT( frame );
+ frame->setCoords(frs.newRect.left(),frs.newRect.top(),frs.newRect.right(),frs.newRect.bottom());
+ frame->setMinimumFrameHeight(frs.newMinHeight);
+ KWTableFrameSet *table = frameSet->groupmanager();
+ if (table) {
+ KWTableFrameSet::Cell *cell=dynamic_cast<KWTableFrameSet::Cell *>(frameSet);
+ if(cell) {
+ table->recalcCols(cell->firstColumn(), cell->firstRow());
+ table->recalcRows(cell->firstColumn(), cell->firstRow());
+ }
+ else {
+ table->recalcCols(0, 0);
+ table->recalcRows(0, 0);
+ }
+ }
+
+ KWDocument * doc = frameSet->kWordDocument();
+ if ( frameSet->frameSetInfo() != KWFrameSet::FI_BODY ) // header/footer/footnote
+ doc->recalcFrames();
+
+ //update frames
+ doc->frameChanged( frame );
+ }
+}
+
+void KWFrameResizeCommand::unexecute()
+{
+ QValueList<FrameResizeStruct>::Iterator resizeIter = m_frameResize.begin();
+ QValueList<FrameIndex>::Iterator iter = m_indexFrame.begin();
+ for(; iter != m_indexFrame.end() && resizeIter != m_frameResize.end(); ++resizeIter, ++iter ) {
+ FrameIndex index = *iter;
+ FrameResizeStruct frs = *resizeIter;
+ KWFrameSet *frameSet =index.m_pFrameSet;
+ Q_ASSERT( frameSet );
+ KWFrame *frame=frameSet->frame(index.m_iFrameIndex);
+ Q_ASSERT( frame );
+ frame->setCoords(frs.oldRect.left(),frs.oldRect.top(),frs.oldRect.right(),frs.oldRect.bottom());
+ frame->setMinimumFrameHeight(frs.oldMinHeight);
+ KWTableFrameSet *table = frameSet->groupmanager();
+ if (table) {
+ KWTableFrameSet::Cell *cell=dynamic_cast<KWTableFrameSet::Cell *>(frameSet);
+ if(cell) {
+ table->recalcCols(cell->firstColumn(), cell->firstRow());
+ table->recalcRows(cell->firstColumn(), cell->firstRow());
+ }
+ else {
+ table->recalcCols(0, 0);
+ table->recalcRows(0, 0);
+ }
+ }
+ KWDocument * doc = frameSet->kWordDocument();
+ if ( frameSet->frameSetInfo() != KWFrameSet::FI_BODY ) // header/footer/footnote
+ doc->recalcFrames();
+
+ frame->updateRulerHandles();
+
+ //update frames
+ doc->frameChanged( frame );
+ }
+}
+
+KWFrameChangePictureCommand::KWFrameChangePictureCommand( const QString &name, FrameIndex _frameIndex, const KoPictureKey & _oldKey, const KoPictureKey & _newKey ) :
+ KNamedCommand(name),
+ m_indexFrame(_frameIndex),
+ m_oldKey(_oldKey),
+ m_newKey(_newKey)
+{
+}
+
+void KWFrameChangePictureCommand::execute()
+{
+ KWFrameSet *frameSet = m_indexFrame.m_pFrameSet;
+ Q_ASSERT( frameSet );
+ KWFrame *frame = frameSet->frame(m_indexFrame.m_iFrameIndex);
+ Q_ASSERT( frame );
+ KWDocument * doc = frameSet->kWordDocument();
+ KWPictureFrameSet *frameset = static_cast<KWPictureFrameSet *>(frame->frameSet());
+ frameset->reloadPicture( m_newKey );
+ frameSet->kWordDocument()->refreshDocStructure( frameSet->type() );
+ doc->frameChanged( frame );
+}
+
+void KWFrameChangePictureCommand::unexecute()
+{
+ KWFrameSet *frameSet =m_indexFrame.m_pFrameSet;
+ KWFrame *frame=frameSet->frame(m_indexFrame.m_iFrameIndex);
+ KWDocument * doc = frameSet->kWordDocument();
+ KWPictureFrameSet *frameset = static_cast<KWPictureFrameSet *>(frame->frameSet());
+ frameset->reloadPicture( m_oldKey );
+ frameSet->kWordDocument()->refreshDocStructure( frameSet->type() );
+ doc->frameChanged( frame );
+}
+
+
+KWFramePartMoveCommand::KWFramePartMoveCommand( const QString &name, FrameIndex _frameIndex, FrameResizeStruct _frameMove ) :
+ KNamedCommand(name),
+ m_indexFrame(_frameIndex),
+ m_frameMove(_frameMove)
+{
+}
+
+void KWFramePartMoveCommand::execute()
+{
+ KWFrameSet *frameSet = m_indexFrame.m_pFrameSet;
+ Q_ASSERT( frameSet );
+ KWFrame *frame = frameSet->frame(m_indexFrame.m_iFrameIndex);
+ Q_ASSERT( frame );
+ frame->setCoords(m_frameMove.newRect.left(),m_frameMove.newRect.top(),m_frameMove.newRect.right(),m_frameMove.newRect.bottom());
+
+ KWDocument * doc = frameSet->kWordDocument();
+
+ frame->updateRulerHandles();
+ doc->frameChanged( frame );
+}
+
+void KWFramePartMoveCommand::unexecute()
+{
+ KWFrameSet *frameSet =m_indexFrame.m_pFrameSet;
+ KWFrame *frame=frameSet->frame(m_indexFrame.m_iFrameIndex);
+ frame->setCoords(m_frameMove.oldRect.left(),m_frameMove.oldRect.top(),m_frameMove.oldRect.right(),m_frameMove.oldRect.bottom());
+
+ KWDocument * doc = frameSet->kWordDocument();
+ frame->updateRulerHandles();
+
+ //update frames
+ doc->frameChanged( frame );
+}
+
+bool KWFramePartMoveCommand::frameMoved()
+{
+ return (m_frameMove.oldRect!=m_frameMove.newRect);
+}
+
+KWFramePartInternalCommand::KWFramePartInternalCommand( const QString &name, KWPartFrameSet *part ) :
+ KNamedCommand(name),
+ m_part(part)
+{
+ m_url = m_part->getChild()->document()->url();
+}
+
+void KWFramePartInternalCommand::execute()
+{
+ m_part->getChild()->document()->setStoreInternal(true);
+}
+
+void KWFramePartInternalCommand::unexecute()
+{
+ m_part->getChild()->document()->setStoreInternal(false);
+ m_part->getChild()->document()->setURL( m_url );
+}
+
+
+KWFramePartExternalCommand::KWFramePartExternalCommand( const QString &name, KWPartFrameSet *part ) :
+ KNamedCommand(name),
+ m_part(part)
+{
+}
+
+void KWFramePartExternalCommand::execute()
+{
+ m_part->getChild()->document()->setStoreInternal(false);
+}
+
+void KWFramePartExternalCommand::unexecute()
+{
+ m_part->getChild()->document()->setStoreInternal(true);
+}
+
+
+KWFrameMoveCommand::KWFrameMoveCommand( const QString &name,
+ const QValueList<FrameIndex> & _frameIndex,
+ const QValueList<FrameMoveStruct> & _frameMove ) :
+ KNamedCommand(name),
+ m_indexFrame(_frameIndex),
+ m_frameMove(_frameMove)
+{
+}
+
+void KWFrameMoveCommand::execute()
+{
+ bool needRelayout = false;
+ KWDocument * doc = 0L;
+ QValueList<FrameMoveStruct>::Iterator moveIt = m_frameMove.begin();
+ QValueList<FrameIndex>::Iterator tmp = m_indexFrame.begin();
+ for( ; tmp != m_indexFrame.end() && moveIt != m_frameMove.end(); ++tmp, ++moveIt )
+ {
+ KWFrameSet *frameSet = (*tmp).m_pFrameSet;
+ doc = frameSet->kWordDocument();
+ KWFrame *frame = frameSet->frame((*tmp).m_iFrameIndex);
+ frame->moveTopLeft( (*moveIt).newPos );
+
+ frame->updateRulerHandles();
+ needRelayout = needRelayout || ( frame->runAround() != KWFrame::RA_NO );
+ }
+ if ( doc )
+ {
+ doc->updateAllFrames();
+ if ( needRelayout )
+ doc->layout();
+
+ doc->updateRulerFrameStartEnd();
+ doc->repaintAllViews();
+ }
+}
+
+void KWFrameMoveCommand::unexecute()
+{
+ bool needRelayout = false;
+ KWDocument * doc = 0L;
+ QValueList<FrameMoveStruct>::Iterator moveIt = m_frameMove.begin();
+ QValueList<FrameIndex>::Iterator tmp = m_indexFrame.begin();
+ for( ; tmp != m_indexFrame.end() && moveIt != m_frameMove.end(); ++tmp, ++moveIt )
+ {
+ KWFrameSet *frameSet = (*tmp).m_pFrameSet;
+ doc = frameSet->kWordDocument();
+ KWFrame *frame = frameSet->frame((*tmp).m_iFrameIndex);
+ frame->moveTopLeft( (*moveIt).oldPos );
+
+ frame->updateRulerHandles();
+ needRelayout = needRelayout || ( frame->runAround() != KWFrame::RA_NO );
+ }
+
+ if ( doc )
+ {
+ doc->updateAllFrames();
+ if ( needRelayout )
+ doc->layout();
+ doc->updateRulerFrameStartEnd();
+ doc->repaintAllViews();
+ }
+}
+
+KWFramePropertiesCommand::KWFramePropertiesCommand( const QString &name, KWFrame *_frameBefore, KWFrame *_frameAfter ) :
+ KNamedCommand(name),
+ m_frameIndex( _frameAfter ),
+ m_frameBefore(_frameBefore),
+ m_frameAfter(_frameAfter->getCopy())
+{
+}
+
+KWFramePropertiesCommand::~KWFramePropertiesCommand()
+{
+ delete m_frameBefore;
+ delete m_frameAfter;
+}
+
+void KWFramePropertiesCommand::execute()
+{
+ kdDebug(32001) << "KWFrameChangeParamCommand::execute" << endl;
+ KWFrameSet *frameSet = m_frameIndex.m_pFrameSet;
+ Q_ASSERT( frameSet );
+
+ KWFrame *frame = frameSet->frame( m_frameIndex.m_iFrameIndex );
+ Q_ASSERT( frame );
+ frame->copySettings(m_frameAfter);
+ frame->frameStack()->update();
+
+ KWDocument * doc = frameSet->kWordDocument();
+ if(doc)
+ {
+ doc->frameChanged( frame );
+ doc->updateAllFrames();
+ doc->layout();
+ doc->repaintAllViews();
+ doc->updateRulerFrameStartEnd();
+ }
+}
+
+void KWFramePropertiesCommand::unexecute()
+{
+ kdDebug(32001) << "KWFrameChangeParamCommand::unexecute" << endl;
+ KWFrameSet *frameSet = m_frameIndex.m_pFrameSet;
+ Q_ASSERT( frameSet );
+
+ KWFrame *frame = frameSet->frame( m_frameIndex.m_iFrameIndex );
+ Q_ASSERT( frame );
+ frame->copySettings(m_frameBefore);
+ frame->frameStack()->update();
+ KWDocument * doc = frameSet->kWordDocument();
+ if(doc)
+ {
+ doc->frameChanged( frame );
+ doc->updateAllFrames();
+ doc->layout();
+ doc->repaintAllViews();
+ doc->updateRulerFrameStartEnd();
+ }
+}
+
+
+KWFrameSetInlineCommand::KWFrameSetInlineCommand( const QString &name, KWFrameSet *frameset, bool value ) :
+ KNamedCommand(name),
+ m_pFrameSet( frameset ),
+ m_value( value )
+{
+ m_oldValue = m_pFrameSet->isFloating();
+}
+
+void KWFrameSetInlineCommand::setValue( bool value )
+{
+ kdDebug(32001) << "KWFrameSetInlineCommand::execute" << endl;
+ if ( value )
+ {
+ // Make frame(set) floating
+ m_pFrameSet->setFloating();
+ // ## We might want to store a list of anchors in the command, and reuse them
+ // in execute/unexecute. Currently setFixed forgets the anchors and setFloating recreates new ones...
+ }
+ else
+ {
+ // Make frame(set) non-floating
+ m_pFrameSet->setFixed();
+ }
+
+ m_pFrameSet->kWordDocument()->updateAllFrames();
+}
+
+void KWFrameSetInlineCommand::execute()
+{
+ setValue( m_value );
+}
+
+void KWFrameSetInlineCommand::unexecute()
+{
+ setValue( m_oldValue );
+}
+
+KWPageLayoutCommand::KWPageLayoutCommand( const QString &name,KWDocument *_doc,KWPageLayoutStruct &_oldLayout, KWPageLayoutStruct &_newLayout ) :
+ KNamedCommand(name),
+ m_pDoc(_doc),
+ m_oldLayout(_oldLayout),
+ m_newLayout(_newLayout)
+{
+}
+
+void KWPageLayoutCommand::execute()
+{
+ m_pDoc->setPageLayout( m_newLayout._pgLayout, m_newLayout._cl, m_newLayout._hf );
+}
+
+void KWPageLayoutCommand::unexecute()
+{
+ m_pDoc->setPageLayout( m_oldLayout._pgLayout, m_oldLayout._cl, m_oldLayout._hf);
+}
+
+
+KWDeleteFrameCommand::KWDeleteFrameCommand( const QString &name, KWFrame * frame ):
+ KNamedCommand(name),
+ m_frameIndex( frame ),
+ m_copyFrame( frame->getCopy() )
+{
+}
+
+KWDeleteFrameCommand::KWDeleteFrameCommand( const FrameIndex &frameIndex) :
+ KNamedCommand("")
+{
+ m_frameIndex = frameIndex;
+ m_copyFrame = m_frameIndex.m_pFrameSet->frame(m_frameIndex.m_iFrameIndex)->getCopy();
+}
+
+KWDeleteFrameCommand::~KWDeleteFrameCommand()
+{
+ delete m_copyFrame;
+}
+
+
+void KWDeleteFrameCommand::execute()
+{
+ KWFrameSet *frameSet = m_frameIndex.m_pFrameSet;
+ Q_ASSERT( frameSet );
+
+ KWFrame *frame = frameSet->frame( m_frameIndex.m_iFrameIndex );
+ Q_ASSERT( frame );
+
+kdDebug() << "delete frame " << m_frameIndex.m_iFrameIndex << " of " << frameSet->name() << endl;
+ KWDocument* doc = frameSet->kWordDocument();
+ doc->terminateEditing( frameSet );
+ doc->frameChanged( frame );
+ frameSet->deleteFrame( m_frameIndex.m_iFrameIndex );
+
+/* KWTextFrameSet * textfs = dynamic_cast<KWTextFrameSet *>(fs);
+ if(textfs) { TODO
+ // if content does not fit; change properties of previous frame to be 'do not show'
+ }
+*/
+
+ doc->refreshDocStructure( frameSet->type() );
+ doc->updateTextFrameSetEdit();
+}
+
+void KWDeleteFrameCommand::unexecute()
+{
+ KWFrameSet *frameSet = m_frameIndex.m_pFrameSet;
+ KWFrame * frame = m_copyFrame->getCopy();
+ frame->setFrameSet( frameSet );
+ frameSet->addFrame( frame );
+
+ KWPartFrameSet * partfs = dynamic_cast<KWPartFrameSet *>( frameSet );
+ if ( partfs )
+ partfs->setDeleted( false );
+
+ KWTextFrameSet * textfs = dynamic_cast<KWTextFrameSet *>( frameSet );
+ if ( textfs )
+ textfs->textObject()->formatMore( 2 );
+ KWDocument* doc = frameSet->kWordDocument();
+ doc->frameChanged( frame );
+ // could have been the last frame on a page, so undeleting it needs to recreate the page
+ doc->recalcFrames( frame->pageNumber() );
+ doc->refreshDocStructure(frameSet->type());
+ doc->updateRulerFrameStartEnd();
+}
+
+KWCreateFrameCommand::KWCreateFrameCommand( const QString &name, KWFrame * frame ) :
+ KWDeleteFrameCommand( name, frame )
+{}
+
+
+KWUngroupTableCommand::KWUngroupTableCommand( const QString &name, KWTableFrameSet * _table ):
+ KNamedCommand(name),
+ m_pTable(_table)
+{
+ m_ListFrame.clear();
+ for ( KWTableFrameSet::TableIter i(m_pTable); i ; ++i ) {
+ m_ListFrame.append( i.current() );
+ }
+}
+
+void KWUngroupTableCommand::execute()
+{
+ KWDocument * doc = m_pTable->kWordDocument();
+ for ( KWTableFrameSet::TableIter i(m_pTable) ; i ; ++i ) {
+ i->setGroupManager( 0L );
+ doc->addFrameSet( i.current() );
+ }
+ m_pTable->ungroup();
+ doc->removeFrameSet(m_pTable);
+
+ //when you ungroup a table
+ // you must remove table item in docstruct
+ // create items in text item in docstruct
+
+ int refresh=0;
+ refresh |=Tables;
+ refresh |=TextFrames;
+ doc->refreshDocStructure(refresh);
+
+ doc->updateAllFrames();
+ doc->repaintAllViews();
+}
+
+void KWUngroupTableCommand::unexecute()
+{
+ Q_ASSERT(m_pTable);
+ m_pTable->group();
+ KWDocument * doc = m_pTable->kWordDocument();
+ KWFrameSet *tmp;
+ for ( tmp=m_ListFrame.first(); tmp != 0; tmp=m_ListFrame.next() )
+ {
+ tmp->setGroupManager(m_pTable);
+ doc->removeFrameSet(tmp);
+ KWTableFrameSet::Cell *cell=static_cast<KWTableFrameSet::Cell *>(tmp);
+ Q_ASSERT(cell);
+ m_pTable->addCell( cell );
+ }
+ doc->addFrameSet(m_pTable);
+
+ int refresh=0;
+ refresh |=Tables;
+ refresh |=TextFrames;
+ doc->refreshDocStructure(refresh);
+
+
+ doc->updateAllFrames();
+ doc->repaintAllViews();
+}
+
+
+KWDeleteTableCommand::KWDeleteTableCommand( const QString &name, KWTableFrameSet * _table ):
+ KNamedCommand(name),
+ m_pTable(_table)
+{
+ Q_ASSERT(m_pTable);
+}
+
+void KWDeleteTableCommand::execute()
+{
+ kdDebug(32001) << "KWDeleteTableCommand::execute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ doc->removeFrameSet(m_pTable);
+ m_pTable->setVisible( false );
+ doc->refreshDocStructure((int)Tables);
+ doc->updateAllFrames();
+ m_pTable->updateFrames(); // not in the doc list anymore, so the above call didn't do it!
+ doc->layout();
+ doc->repaintAllViews();
+ doc->updateRulerFrameStartEnd();
+
+}
+
+void KWDeleteTableCommand::unexecute()
+{
+ kdDebug(32001) << "KWDeleteTableCommand::unexecute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ m_pTable->setVisible( true );
+ doc->addFrameSet(m_pTable);
+ doc->refreshDocStructure((int)Tables);
+ doc->updateAllFrames();
+ doc->layout();
+ doc->repaintAllViews();
+ doc->updateRulerFrameStartEnd();
+}
+
+
+KWInsertColumnCommand::KWInsertColumnCommand( const QString &name, KWTableFrameSet * _table, int _col, double _maxRight ):
+ KNamedCommand(name),
+ m_pTable(_table),
+ m_rc(new RemovedColumn()),
+ m_colPos(_col),
+ m_maxRight(_maxRight),
+ m_oldWidth(0)
+{
+ Q_ASSERT(m_pTable);
+}
+
+KWInsertColumnCommand::~KWInsertColumnCommand()
+{
+ delete m_rc;
+}
+
+void KWInsertColumnCommand::execute()
+{
+ kdDebug(32001) << "KWInsertColumnCommand::execute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ // a insert column = KWTableFrameSet::m_sDefaultColWidth, see kwtableframeset.cc
+ if (m_pTable->boundingRect().right() + KWTableFrameSet::m_sDefaultColWidth >= static_cast<int>(m_maxRight))
+ { // must create space (resize the table)
+ m_oldWidth = m_pTable->boundingRect().width();
+ // here we calculate the new table size for a table that would take the
+ // entire width of the page, which what the user wants 99% of the time.
+ double newTableWidth =m_maxRight - m_pTable->boundingRect().left();
+ double newColSize = newTableWidth / (m_pTable->getColumns()+1);
+ double resizeTableWidth = m_maxRight - m_pTable->boundingRect().left();
+ m_pTable->resizeWidth(resizeTableWidth - newColSize);
+ m_pTable->insertNewColumn(m_colPos, newColSize);
+ }
+ else
+ { // simply insert the column without asking for a specific size :
+ m_pTable->insertNewColumn(m_colPos);
+ }
+ Q_ASSERT(m_pTable->boundingRect().right() <= m_maxRight);
+ doc->updateAllFrames();
+ doc->layout();
+ doc->repaintAllViews();
+}
+
+void KWInsertColumnCommand::unexecute()
+{
+ kdDebug(32001) << "KWInsertColumnCommand::unexecute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ doc->terminateEditing(m_pTable);
+ m_pTable->deleteColumn(m_colPos, *m_rc);
+ // now undo the resize of the table if necessary:
+ if (m_oldWidth) {
+ // yes, the table was resized, let's undo that :
+ m_pTable->resizeWidth(m_oldWidth);
+ }
+ doc->updateAllFrames();
+ doc->layout();
+ doc->repaintAllViews();
+}
+
+
+
+KWInsertRowCommand::KWInsertRowCommand( const QString &name, KWTableFrameSet * _table, int _row ):
+ KNamedCommand(name),
+ m_pTable(_table),
+ m_rr(new RemovedRow()),
+ m_rowPos(_row),
+ m_inserted(false)
+{
+ Q_ASSERT(m_pTable);
+}
+
+KWInsertRowCommand::~KWInsertRowCommand()
+{
+ delete m_rr;
+}
+
+void KWInsertRowCommand::execute()
+{
+ kdDebug(32001) << "KWInsertRowCommand::execute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ if(m_inserted)
+ m_pTable->reInsertRow(*m_rr);
+ else {
+ m_inserted = true;
+ m_pTable->insertNewRow(m_rowPos); //only happens the first time
+ }
+ doc->updateAllFrames();
+ doc->layout();
+ doc->repaintAllViews();
+}
+
+void KWInsertRowCommand::unexecute()
+{
+ kdDebug(32001) << "KWInsertRowCommand::unexecute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+
+ doc->terminateEditing(m_pTable);
+ m_pTable->deleteRow( m_rowPos, *m_rr);
+
+ doc->updateAllFrames();
+ doc->layout();
+}
+
+
+KWRemoveRowCommand::KWRemoveRowCommand( const QString &name, KWTableFrameSet * _table, int _row ):
+ KNamedCommand(name),
+ m_pTable(_table),
+ m_rr(new RemovedRow()),
+ m_rowPos(_row)
+{
+ Q_ASSERT(m_pTable);
+}
+
+KWRemoveRowCommand::~KWRemoveRowCommand()
+{
+ delete m_rr;
+}
+
+void KWRemoveRowCommand::execute()
+{
+ kdDebug(32001) << "KWRemoveRowCommand::execute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ doc->terminateEditing(m_pTable);
+
+ m_pTable->deleteRow( m_rowPos, *m_rr);
+
+ doc->updateAllFrames();
+ doc->layout();
+}
+
+void KWRemoveRowCommand::unexecute()
+{
+ kdDebug(32001) << "KWRemoveRowCommand::unexecute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ m_pTable->reInsertRow(*m_rr);
+ doc->updateAllFrames();
+ doc->layout();
+ doc->repaintAllViews();
+}
+
+KWRemoveColumnCommand::KWRemoveColumnCommand( const QString &name, KWTableFrameSet * _table, int _col ):
+ KNamedCommand(name),
+ m_pTable(_table),
+ m_rc(new RemovedColumn()),
+ m_colPos(_col)
+{
+ Q_ASSERT(m_pTable);
+}
+
+KWRemoveColumnCommand::~KWRemoveColumnCommand()
+{
+ delete m_rc;
+}
+
+void KWRemoveColumnCommand::execute()
+{
+ kdDebug(32001) << "KWRemoveColumnCommand::execute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ doc->terminateEditing(m_pTable);
+
+ m_pTable->deleteColumn( m_colPos, *m_rc);
+ doc->updateAllFrames();
+ doc->layout();
+}
+
+void KWRemoveColumnCommand::unexecute()
+{
+ kdDebug(32001) << "KWRemoveColumnCommand::unexecute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ m_pTable->reInsertColumn(*m_rc);
+ doc->updateAllFrames();
+ doc->layout();
+ doc->repaintAllViews();
+}
+
+
+
+KWSplitCellCommand::KWSplitCellCommand( const QString &name, KWTableFrameSet * _table,unsigned int colBegin,unsigned int rowBegin, unsigned int colEnd,unsigned int rowEnd ):
+ KNamedCommand(name),
+ m_pTable(_table),
+ m_colBegin(colBegin),
+ m_rowBegin(rowBegin),
+ m_colEnd(colEnd),
+ m_rowEnd(rowEnd)
+{
+ Q_ASSERT(m_pTable);
+}
+
+void KWSplitCellCommand::execute()
+{
+ kdDebug(32001) << "KWSplitCellCommand::execute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ doc->terminateEditing(m_pTable);
+ //kdDebug()<<"split Cell m_colBegin :"<<m_colBegin<<" m_colEnd :"<<m_colEnd<<" m_rowBegin :"<<m_rowBegin<<" m_colEnd :"<<m_colEnd<<endl;
+ m_pTable->splitCell(m_rowEnd, m_colEnd,m_colBegin,m_rowBegin,m_ListFrameSet);
+ doc->updateAllFrames();
+ doc->layout();
+}
+
+void KWSplitCellCommand::unexecute()
+{
+ kdDebug(32001) << "KWSplitCellCommand::unexecute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ doc->terminateEditing(m_pTable);
+
+ //kdDebug()<<"Join Cell m_colBegin :"<<m_colBegin<<" m_colEnd :"<<m_colBegin+m_colEnd-1<<" m_rowBegin :"<<m_rowBegin<<" m_rowEnd :"<<m_rowBegin+m_rowEnd-1<<endl;
+
+ if(m_ListFrameSet.isEmpty())
+ {
+ for ( unsigned int i = 0; i < m_pTable->getColumns(); i++ )
+ {
+ for ( unsigned int j = 0; j < m_pTable->getRows(); j++ )
+ {
+ if(j>=m_rowBegin && j<=(m_rowBegin+m_rowEnd-1)
+ && i>=m_colBegin && i<=(m_colEnd+m_colBegin-1))
+ {
+ //don't store first cell
+ if( !(j==m_rowBegin && i==m_colBegin))
+ {
+ kdDebug(32001)<<"store cell row :"<<j<<" col :"<<i<<endl;
+ KWTableFrameSet::Cell *cell=static_cast<KWTableFrameSet::Cell *>(m_pTable->cell( j,i ));
+ m_ListFrameSet.append(cell);
+ }
+ }
+
+ }
+ }
+ }
+ KWTableFrameSet::Cell *cell=static_cast<KWTableFrameSet::Cell *>(m_pTable->cell( m_rowBegin,m_colBegin ));
+ m_pTable->joinCells(m_colBegin, m_rowBegin, m_colEnd+m_colBegin-1+cell->columnSpan()-1,
+ m_rowBegin+m_rowEnd-1+cell->rowSpan()-1);
+
+ doc->updateAllFrames();
+ doc->layout();
+}
+
+
+
+KWJoinCellCommand::KWJoinCellCommand( const QString &name, KWTableFrameSet * _table,unsigned int colBegin,unsigned int rowBegin, unsigned int colEnd,unsigned int rowEnd, QPtrList<KWFrameSet> listFrameSet,QPtrList<KWFrame> listCopyFrame):
+ KNamedCommand(name),
+ m_pTable(_table),
+ m_colBegin(colBegin),
+ m_rowBegin(rowBegin),
+ m_colEnd(colEnd),
+ m_rowEnd(rowEnd),
+ m_ListFrameSet(listFrameSet),
+ m_copyFrame(listCopyFrame)
+{
+ Q_ASSERT(m_pTable);
+}
+KWJoinCellCommand::~KWJoinCellCommand()
+{
+ m_copyFrame.setAutoDelete( true );
+}
+
+void KWJoinCellCommand::execute()
+{
+ kdDebug(32001) << "KWJoinCellCommand::execute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ doc->terminateEditing(m_pTable);
+ m_pTable->joinCells(m_colBegin,m_rowBegin,m_colEnd,m_rowEnd);
+ doc->updateAllFrames();
+ doc->layout();
+}
+
+void KWJoinCellCommand::unexecute()
+{
+ kdDebug(32001) << "KWJoinCellCommand::unexecute" << endl;
+ KWDocument * doc = m_pTable->kWordDocument();
+ doc->terminateEditing(m_pTable);
+ m_pTable->splitCell(m_rowEnd-m_rowBegin+1, m_colEnd-m_colBegin+1,m_colBegin,m_rowBegin,m_ListFrameSet,m_copyFrame);
+ doc->updateAllFrames();
+ doc->layout();
+}
+
+
+KWChangeStartingPageCommand::KWChangeStartingPageCommand( const QString &name, KWDocument *_doc, int _oldStartingPage, int _newStartingPage):
+ KNamedCommand(name),
+ m_doc(_doc),
+ oldStartingPage(_oldStartingPage),
+ newStartingPage(_newStartingPage)
+{
+}
+
+void KWChangeStartingPageCommand::execute()
+{
+ m_doc->variableCollection()->variableSetting()->setStartingPageNumber(newStartingPage);
+ m_doc->recalcVariables( VT_PGNUM );
+}
+
+void KWChangeStartingPageCommand::unexecute()
+{
+ m_doc->variableCollection()->variableSetting()->setStartingPageNumber(oldStartingPage);
+ m_doc->recalcVariables( VT_PGNUM );
+}
+
+KWChangeVariableSettingsCommand::KWChangeVariableSettingsCommand( const QString &name, KWDocument *_doc, bool _oldValue, bool _newValue, VariableProperties _type):
+ KNamedCommand(name),
+ m_doc(_doc),
+ type(_type),
+ m_bOldValue(_oldValue),
+ m_bNewValue(_newValue)
+{
+}
+
+void KWChangeVariableSettingsCommand::changeValue( bool b )
+{
+ switch(type)
+ {
+ case VS_DISPLAYLINK:
+ m_doc->variableCollection()->variableSetting()->setDisplayLink(b);
+ m_doc->recalcVariables( VT_LINK );
+ break;
+ case VS_UNDERLINELINK:
+ m_doc->variableCollection()->variableSetting()->setUnderlineLink(b);
+ m_doc->recalcVariables( VT_LINK );
+ break;
+ case VS_DISPLAYCOMMENT:
+ m_doc->variableCollection()->variableSetting()->setDisplayComment(b);
+ m_doc->recalcVariables( VT_NOTE );
+ break;
+ case VS_DISPLAYFIELDCODE:
+ m_doc->variableCollection()->variableSetting()->setDisplayFieldCode(b);
+ //hack necessary otherwise footnote frameset is not refreshing
+ //and footnote is not resize.
+ m_doc->displayFootNoteFieldCode();
+ m_doc->recalcVariables( VT_ALL );
+ break;
+ }
+}
+
+void KWChangeVariableSettingsCommand::execute()
+{
+ changeValue(m_bNewValue);
+}
+
+void KWChangeVariableSettingsCommand::unexecute()
+{
+ changeValue(m_bOldValue);
+}
+
+KWChangeCustomVariableValue::KWChangeCustomVariableValue( const QString &name, KWDocument *_doc,const QString & _oldValue, const QString & _newValue,KoCustomVariable *var):
+ KNamedCommand(name),
+ m_doc(_doc),
+ newValue(_newValue),
+ oldValue(_oldValue),
+ m_var(var)
+{
+}
+
+KWChangeCustomVariableValue::~KWChangeCustomVariableValue()
+{
+}
+
+void KWChangeCustomVariableValue::execute()
+{
+ Q_ASSERT(m_var);
+ m_var->setValue(newValue);
+ m_doc->recalcVariables( VT_CUSTOM );
+}
+
+void KWChangeCustomVariableValue::unexecute()
+{
+ Q_ASSERT(m_var);
+ m_var->setValue(oldValue);
+ m_doc->recalcVariables( VT_CUSTOM );
+}
+
+KWChangeVariableNoteText::KWChangeVariableNoteText( const QString &name, KWDocument *_doc,
+ const QString &_oldValue,const QString &_newValue,
+ KoNoteVariable *var):
+ KNamedCommand(name),
+ m_doc(_doc),
+ newValue(_newValue),
+ oldValue(_oldValue),
+ m_var(var)
+{
+}
+
+KWChangeVariableNoteText::~KWChangeVariableNoteText()
+{
+}
+
+void KWChangeVariableNoteText::execute()
+{
+ Q_ASSERT(m_var);
+ m_var->setNote(newValue);
+}
+
+void KWChangeVariableNoteText::unexecute()
+{
+ Q_ASSERT(m_var);
+ m_var->setNote(oldValue);
+}
+
+// TODO: move to libkotext to remove code duplication with kpresenter
+KWChangeLinkVariable::KWChangeLinkVariable( const QString &name, KWDocument *_doc,const QString & _oldHref, const QString & _newHref, const QString & _oldLink,const QString &_newLink, KoLinkVariable *var):
+ KNamedCommand(name),
+ m_doc(_doc),
+ oldHref(_oldHref),
+ newHref(_newHref),
+ oldLink(_oldLink),
+ newLink(_newLink),
+ m_var(var)
+{
+}
+
+
+void KWChangeLinkVariable::execute()
+{
+ m_var->setLink(newLink,newHref);
+ m_doc->recalcVariables(VT_LINK);
+}
+
+void KWChangeLinkVariable::unexecute()
+{
+ m_var->setLink(oldLink,oldHref);
+ m_doc->recalcVariables(VT_LINK);
+}
+
+KWHideShowHeader::KWHideShowHeader( const QString &name, KWDocument *_doc, bool _newValue):
+ KNamedCommand(name),
+ m_doc(_doc),
+ newValue(_newValue)
+{
+}
+
+
+void KWHideShowHeader::execute()
+{
+ m_doc->setHeaderVisible(newValue );
+ m_doc->updateHeaderButton();
+
+}
+
+void KWHideShowHeader::unexecute()
+{
+ m_doc->setHeaderVisible(!newValue );
+ m_doc->updateHeaderButton();
+}
+
+KWHideShowFooter::KWHideShowFooter( const QString &name, KWDocument *_doc, bool _newValue):
+ KNamedCommand(name),
+ m_doc(_doc),
+ newValue(_newValue)
+{
+}
+
+
+void KWHideShowFooter::execute()
+{
+ m_doc->setFooterVisible( newValue );
+ m_doc->updateFooterButton();
+}
+
+void KWHideShowFooter::unexecute()
+{
+ m_doc->setFooterVisible( !newValue );
+ m_doc->updateFooterButton();
+}
+
+
+KWProtectContentCommand::KWProtectContentCommand( const QString &name, KWTextFrameSet*frameset, bool _protect):
+ KNamedCommand(name),
+ m_pFrameSet(frameset),
+ m_bProtect(_protect)
+{
+}
+
+
+void KWProtectContentCommand::execute()
+{
+ m_pFrameSet->setProtectContent(m_bProtect);
+ m_pFrameSet->kWordDocument()->updateTextFrameSetEdit();
+ m_pFrameSet->kWordDocument()->testAndCloseAllFrameSetProtectedContent();
+ m_pFrameSet->kWordDocument()->updateRulerInProtectContentMode();
+
+}
+
+void KWProtectContentCommand::unexecute()
+{
+ m_pFrameSet->setProtectContent(!m_bProtect);
+ m_pFrameSet->kWordDocument()->updateTextFrameSetEdit();
+ m_pFrameSet->kWordDocument()->testAndCloseAllFrameSetProtectedContent();
+ m_pFrameSet->kWordDocument()->updateRulerInProtectContentMode();
+
+}
+
+KWInsertRemovePageCommand::KWInsertRemovePageCommand( KWDocument *_doc, Command cmd, int pgNum)
+ : KCommand(), m_doc(_doc), m_cmd(cmd), m_pgNum(pgNum)
+{}
+
+KWInsertRemovePageCommand::~KWInsertRemovePageCommand() {
+ QValueListIterator<KCommand*> cmdIter = childCommands.begin();
+ for(;cmdIter != childCommands.end(); ++ cmdIter)
+ delete (*cmdIter);
+}
+
+QString KWInsertRemovePageCommand::name() const
+{
+ return m_cmd == Insert ? i18n("Insert Page") // problem with after/before page
+ : i18n("Delete Page %1").arg(m_pgNum);
+}
+
+void KWInsertRemovePageCommand::execute() {
+ if ( m_cmd == Insert )
+ doInsert(m_pgNum);
+ else
+ doRemove(m_pgNum);
+}
+
+void KWInsertRemovePageCommand::unexecute() {
+ if ( m_cmd == Insert )
+ // remove the page that was inserted
+ doRemove(m_pgNum+1);
+ else
+ // Re-insert the page that was deleted
+ doInsert(m_pgNum-1);
+}
+
+void KWInsertRemovePageCommand::doRemove(int pageNumber) {
+ bool firstRun = childCommands.count() == 0;
+ if(firstRun) {
+ QValueVector<FrameIndex> indexes;
+ QPtrList<KWFrame> frames = m_doc->framesInPage(pageNumber, false);
+ QPtrListIterator<KWFrame> framesIter(frames);
+ for(; framesIter.current(); ++framesIter)
+ indexes.append(FrameIndex(*framesIter));
+
+ // we sort them to make sure frames are deleted in order and indexes are not going
+ // to get mixed up when there is more then one frame of a frameset on the page
+ std::sort(indexes.begin(), indexes.end(), compareIndex);
+
+ QValueVector<FrameIndex>::iterator iter = indexes.begin();
+ for(; iter != indexes.end(); ++iter)
+ childCommands.append(new KWDeleteFrameCommand(*iter));
+ }
+ QValueListIterator<KCommand*> cmdIter = childCommands.begin();
+ for(;cmdIter != childCommands.end(); ++ cmdIter)
+ (*cmdIter)->execute();
+
+ // next move all frames up that are on higher pagenumbers
+ KWPage* page = m_doc->pageManager()->page(pageNumber);
+ Q_ASSERT(page);
+ if(! page) return; // hack to work around bug #125998
+ const double pageHeight = page->height();
+ const double topOfPage = m_doc->pageManager()->topOfPage(pageNumber);
+ m_doc->pageManager()->removePage( pageNumber );
+
+ if(firstRun && m_doc->lastPage() >= pageNumber) { // only walk frames when there was a page
+ // after the deleted one
+ QValueList<FrameIndex> indexes;
+ QValueList<FrameMoveStruct> moveStructs;
+ QPtrListIterator<KWFrameSet> fss = m_doc->framesetsIterator();
+ for(;fss.current(); ++fss) {
+ KWFrameSet *fs = *fss;
+ if(fs->isMainFrameset()) continue;
+ if(fs->isHeaderOrFooter()) continue;
+ if(fs->isFootEndNote()) continue;
+ if(! fs->isVisible()) continue;
+ QPtrList<KWFrame> frames = fs->frameIterator();
+ QPtrListIterator<KWFrame> framesIter(frames);
+ for(; framesIter.current(); ++framesIter) {
+ KWFrame *frame = *framesIter;
+ if(frame->top() > topOfPage) {
+ indexes.append(FrameIndex(frame));
+ KoPoint before = frame->topLeft();
+ frame->moveBy(0, -pageHeight);
+ moveStructs.append(FrameMoveStruct(before, frame->topLeft()));
+ }
+ }
+ }
+ KCommand *cmd = new KWFrameMoveCommand("", indexes, moveStructs);
+ childCommands.append(cmd);
+ }
+ m_doc->afterRemovePages();
+}
+
+bool KWInsertRemovePageCommand::compareIndex(const FrameIndex &index1, const FrameIndex &index2) {
+ if(index1.m_pFrameSet == index2.m_pFrameSet)
+ return index1.m_iFrameIndex >= index2.m_iFrameIndex;
+ return index1.m_pFrameSet >= index2.m_pFrameSet; // I don't care about frameset order,
+ // so just sort on pointers..
+}
+
+void KWInsertRemovePageCommand::doInsert(int pageNumber) {
+ m_doc->pageManager()->insertPage( pageNumber );
+ for(int i=childCommands.count()-1; i > 0; i--) // reverse order
+ childCommands[i]->unexecute();
+ m_doc->afterInsertPage( pageNumber );
+}
+
+FramePaddingStruct::FramePaddingStruct( KWFrame *frame )
+{
+ topPadding = frame->paddingTop();
+ bottomPadding= frame->paddingBottom();
+ leftPadding = frame->paddingLeft();
+ rightPadding= frame->paddingRight();
+}
+
+FramePaddingStruct::FramePaddingStruct( double _left, double _top, double _right, double _bottom ):
+ topPadding(_top),
+ bottomPadding(_bottom),
+ leftPadding(_left),
+ rightPadding(_right)
+{
+}
+
+
+KWFrameChangeFramePaddingCommand::KWFrameChangeFramePaddingCommand( const QString &name, FrameIndex _frameIndex, FramePaddingStruct _framePaddingBegin, FramePaddingStruct _framePaddingEnd ) :
+ KNamedCommand(name),
+ m_indexFrame(_frameIndex),
+ m_framePaddingBegin(_framePaddingBegin),
+ m_framePaddingEnd(_framePaddingEnd)
+{
+}
+
+void KWFrameChangeFramePaddingCommand::execute()
+{
+ KWFrameSet *frameSet = m_indexFrame.m_pFrameSet;
+ Q_ASSERT( frameSet );
+ KWFrame *frame = frameSet->frame(m_indexFrame.m_iFrameIndex);
+ Q_ASSERT( frame );
+ frame->setFramePadding( m_framePaddingEnd.leftPadding,m_framePaddingEnd.topPadding , m_framePaddingEnd.rightPadding, m_framePaddingEnd.bottomPadding);
+ frameSet->kWordDocument()->frameChanged( frame );
+}
+
+void KWFrameChangeFramePaddingCommand::unexecute()
+{
+ KWFrameSet *frameSet = m_indexFrame.m_pFrameSet;
+ Q_ASSERT( frameSet );
+ KWFrame *frame = frameSet->frame(m_indexFrame.m_iFrameIndex);
+ Q_ASSERT( frame );
+ frame->setFramePadding( m_framePaddingBegin.leftPadding,m_framePaddingBegin.topPadding , m_framePaddingBegin.rightPadding, m_framePaddingBegin.bottomPadding);
+ frameSet->kWordDocument()->frameChanged( frame );
+}
+
+KWChangeFootEndNoteSettingsCommand::KWChangeFootEndNoteSettingsCommand( const QString &name, KoParagCounter _oldCounter, KoParagCounter _newCounter ,bool _footNote ,KWDocument *_doc):
+ KNamedCommand(name),
+ m_oldCounter(_oldCounter),
+ m_newCounter(_newCounter),
+ m_footNote( _footNote ),
+ m_doc(_doc)
+{
+}
+
+void KWChangeFootEndNoteSettingsCommand::execute()
+{
+ changeCounter( m_newCounter);
+}
+
+void KWChangeFootEndNoteSettingsCommand::unexecute()
+{
+ changeCounter( m_oldCounter);
+}
+
+void KWChangeFootEndNoteSettingsCommand::changeCounter( KoParagCounter counter)
+{
+ if (m_footNote )
+ {
+ static_cast<KWVariableSettings*>(m_doc->variableCollection()->variableSetting())->changeFootNoteCounter(counter );
+ }
+ else
+ {
+ static_cast<KWVariableSettings*>(m_doc->variableCollection()->variableSetting())->changeEndNoteCounter(counter );
+ }
+ m_doc->changeFootNoteConfig();
+}
+
+
+KWChangeTabStopValueCommand::KWChangeTabStopValueCommand( const QString &name, double _oldValue, double _newValue, KWDocument *_doc):
+ KNamedCommand(name),
+ m_doc( _doc ),
+ m_oldValue(_oldValue),
+ m_newValue(_newValue)
+{
+}
+
+void KWChangeTabStopValueCommand::execute()
+{
+ m_doc->setTabStopValue ( m_newValue );
+}
+
+void KWChangeTabStopValueCommand::unexecute()
+{
+ m_doc->setTabStopValue ( m_oldValue );
+}
+
+
+
+FootNoteParameter::FootNoteParameter( KWFootNoteVariable *_var )
+{
+ noteType = _var->noteType();
+ numberingType = _var->numberingType();
+ manualString = _var->manualString();
+}
+
+FootNoteParameter::FootNoteParameter( NoteType _noteType, KWFootNoteVariable::Numbering _numberingType, const QString &_manualString)
+{
+ noteType= _noteType;
+ numberingType = _numberingType;
+ manualString = _manualString;
+}
+
+KWChangeFootNoteParametersCommand::KWChangeFootNoteParametersCommand( const QString &name, KWFootNoteVariable * _var, FootNoteParameter _oldParameter, FootNoteParameter _newParameter, KWDocument *_doc):
+ KNamedCommand(name),
+ m_doc( _doc ),
+ m_var( _var ),
+ m_oldParameter( _oldParameter ),
+ m_newParameter( _newParameter)
+{
+}
+
+void KWChangeFootNoteParametersCommand::execute()
+{
+ changeVariableParameter( m_newParameter );
+}
+
+void KWChangeFootNoteParametersCommand::unexecute()
+{
+ changeVariableParameter( m_oldParameter );
+}
+
+void KWChangeFootNoteParametersCommand::changeVariableParameter( FootNoteParameter _param )
+{
+ m_var->setNoteType( _param.noteType );
+ m_var->setNumberingType( _param.numberingType );
+ m_var->setManualString( _param.manualString );
+ m_var->setNumDisplay( -1 ); // force renumberFootNotes to recalc
+ if ( m_var->numberingType()== KWFootNoteVariable::Manual)
+ {
+ m_var->resize();
+ m_var->paragraph()->invalidate(0);
+ m_var->paragraph()->setChanged( true );
+ }
+
+ KWTextFrameSet * frameset = dynamic_cast<KWTextFrameSet *>( m_doc->frameSet( 0 ));
+ Q_ASSERT( frameset );
+ if ( frameset)
+ frameset->renumberFootNotes();
+
+ // Re-layout the footnote/endnote frame
+ KWFrame* footNoteFrame = m_var->frameSet()->frame( 0 );
+ int framePage = footNoteFrame->pageNumber();
+ m_doc->recalcFrames( framePage, -1 );
+
+ // Repaint
+ m_doc->delayedRepaintAllViews();
+}
+
+
+KWChangeFootNoteLineSeparatorParametersCommand::KWChangeFootNoteLineSeparatorParametersCommand( const QString &name, SeparatorLinePos _oldValuePos, SeparatorLinePos _newValuePos, int _oldLength, int _newLength, double _oldWidth, double _newWidth, SeparatorLineLineType _oldLineType, SeparatorLineLineType _newLineType, KWDocument *_doc):
+ KNamedCommand(name),
+ m_doc( _doc ),
+ m_oldValuePos(_oldValuePos),
+ m_newValuePos(_newValuePos),
+ m_oldLength(_oldLength),
+ m_newLength(_newLength),
+ m_oldWidth(_oldWidth),
+ m_newWidth(_newWidth),
+ m_oldLineType(_oldLineType),
+ m_newLineType(_newLineType)
+
+{
+}
+
+void KWChangeFootNoteLineSeparatorParametersCommand::execute()
+{
+ changeLineSeparatorParameter( m_newValuePos, m_newLength, m_newWidth,m_newLineType );
+}
+
+void KWChangeFootNoteLineSeparatorParametersCommand::unexecute()
+{
+ changeLineSeparatorParameter( m_oldValuePos, m_oldLength, m_oldWidth, m_oldLineType);
+}
+
+void KWChangeFootNoteLineSeparatorParametersCommand::changeLineSeparatorParameter( SeparatorLinePos _pos, int _length, double _width, SeparatorLineLineType _type)
+{
+ m_doc->setFootNoteSeparatorLinePosition( _pos );
+ m_doc->setFootNoteSeparatorLineLength( _length);
+ m_doc->setFootNoteSeparatorLineWidth(_width );
+ m_doc->setFootNoteSeparatorLineType( _type );
+ m_doc->repaintAllViews();
+}
+
+
+KWRenameBookmarkCommand::KWRenameBookmarkCommand( const QString &name, const QString & _oldname, const QString & _newName, KWDocument *_doc):
+ KNamedCommand(name),
+ m_doc( _doc ),
+ m_oldName( _oldname),
+ m_newName( _newName)
+{
+}
+
+void KWRenameBookmarkCommand::execute()
+{
+ m_doc->renameBookmark( m_oldName, m_newName);
+}
+
+void KWRenameBookmarkCommand::unexecute()
+{
+ m_doc->renameBookmark( m_newName, m_oldName);
+}
+
+KWResizeColumnCommand::KWResizeColumnCommand( KWTableFrameSet *table, int col, double oldSize, double newSize ):
+ KNamedCommand( i18n("Resize Column") ),
+ m_table( table ),
+ m_oldSize( oldSize ),
+ m_newSize( newSize ),
+ m_col( col )
+{
+}
+
+void KWResizeColumnCommand::execute()
+{
+ m_table->resizeColumn(m_col, m_newSize);
+ m_table->kWordDocument()->layout();
+ m_table->kWordDocument()->repaintAllViews();
+}
+
+void KWResizeColumnCommand::unexecute()
+{
+ m_table->resizeColumn(m_col, m_oldSize);
+ m_table->kWordDocument()->layout();
+ m_table->kWordDocument()->repaintAllViews();
+}
+
+KWResizeRowCommand::KWResizeRowCommand( KWTableFrameSet *table, int row, double oldSize, double newSize ):
+ KNamedCommand( i18n("Resize Row") ),
+ m_table( table ),
+ m_oldSize( oldSize ),
+ m_newSize( newSize ),
+ m_row( row )
+{
+}
+
+void KWResizeRowCommand::execute()
+{
+ m_table->resizeRow( m_row, m_newSize );
+ m_table->kWordDocument()->repaintAllViews();
+}
+
+void KWResizeRowCommand::unexecute()
+{
+ m_table->resizeRow( m_row, m_oldSize );
+ m_table->kWordDocument()->repaintAllViews();
+}