diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /karbon/commands/vreplacingcmd.cc | |
download | koffice-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 'karbon/commands/vreplacingcmd.cc')
-rw-r--r-- | karbon/commands/vreplacingcmd.cc | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/karbon/commands/vreplacingcmd.cc b/karbon/commands/vreplacingcmd.cc new file mode 100644 index 00000000..c14ffa1d --- /dev/null +++ b/karbon/commands/vreplacingcmd.cc @@ -0,0 +1,145 @@ +/* This file is part of the KDE project + Copyright (C) 2002, The Karbon Developers + + 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 "vreplacingcmd.h" +#include "vselection.h" +#include "vdocument.h" + +VReplacingCmd::VReplacingCmd( VDocument* doc, const QString& name ) + : VCommand( doc, name ) +{ + // Set members. + m_oldObjects = doc ? document()->selection()->clone() : 0L; + m_newObjects = 0L; +} + +VReplacingCmd::~VReplacingCmd() +{ + delete( m_oldObjects ); + delete( m_newObjects ); +} + +void +VReplacingCmd::execute() +{ + // Did we have at least once a success? Otherwise we don't get inserted + // into the command history. + bool successful = false; + + + // Create new shapes if they don't exist yet. + if( !m_newObjects ) + { + m_newObjects = new VSelection(); + + // Pointer to temporary object. + VObject* newObject; + + VObjectListIterator itr( m_oldObjects->objects() ); + VObjectList rejects; + + for( ; itr.current(); ++itr ) + { + // Clone object and visit the clone. + newObject = itr.current()->clone(); + + // Success. + if( visit( *newObject ) ) + { + successful = true; + + // Insert new shape right before old shape. + itr.current()->parent()->insertInfrontOf( + newObject, itr.current() ); + + // Add new shape to list of new objects. + m_newObjects->append( newObject ); + } + // No success. + else + { + rejects.append( itr.current() ); + // Delete temporary object. + delete( newObject ); + } + } + VObjectListIterator jtr( rejects ); + for( ; jtr.current(); ++jtr ) + { + // Don't consider this object in the future anymore. + m_oldObjects->take( *jtr.current() ); + } + } + + // Nothing to do. + if( m_newObjects->objects().count() == 0 ) + return; + + + VObjectListIterator itr( m_oldObjects->objects() ); + + // Hide old objects. + for( ; itr.current(); ++itr ) + { + document()->selection()->take( *itr.current() ); + itr.current()->setState( VObject::deleted ); + } + + // Show new objects. + for( itr = m_newObjects->objects(); itr.current(); ++itr ) + { + itr.current()->setState( VObject::normal ); + document()->selection()->append( itr.current() ); + } + + + // Tell command history wether we had success at least once. + setSuccess( successful ); +} + +void +VReplacingCmd::unexecute() +{ + // Nothing to do. + if( m_newObjects->objects().count() == 0 ) + return; + + + VObjectListIterator itr( m_oldObjects->objects() ); + + // Show old objects. + for( ; itr.current(); ++itr ) + { + itr.current()->setState( VObject::normal ); + document()->selection()->append( itr.current() ); + } + + // Hide new objects. + for( itr = m_newObjects->objects(); itr.current(); ++itr ) + { + document()->selection()->take( *itr.current() ); + itr.current()->setState( VObject::deleted ); + } + + + // Reset success for command history. + setSuccess( false ); +} + |