00001 /****************************************************************************** 00002 * This file is part of the Gluon Development Platform 00003 * Copyright (C) 2010 Arjen Hiemstra <ahiemstra@heimr.nl> 00004 * 00005 * This library is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU Lesser General Public 00007 * License as published by the Free Software Foundation; either 00008 * version 2.1 of the License, or (at your option) any later version. 00009 * 00010 * This library is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 * Lesser General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU Lesser General Public 00016 * License along with this library; if not, write to the Free Software 00017 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00018 */ 00019 00020 #include "deleteobjectcommand.h" 00021 00022 #include <engine/gameobject.h> 00023 00024 #include <core/debughelper.h> 00025 00026 using namespace GluonCreator; 00027 00028 class DeleteObjectCommand::DeleteObjectCommandPrivate 00029 { 00030 public: 00031 DeleteObjectCommandPrivate() : object( 0 ), parent( 0 ), applied( false ) { } 00032 00033 GluonEngine::GameObject* object; 00034 GluonEngine::GameObject* parent; 00035 bool applied; 00036 }; 00037 00038 DeleteObjectCommand::DeleteObjectCommand( GluonEngine::GameObject* object, GluonEngine::GameObject* parent ) 00039 : d( new DeleteObjectCommandPrivate ) 00040 { 00041 d->object = object; 00042 d->parent = parent; 00043 00044 setObject( object ); 00045 setCommandName( "DeleteObjectCommand" ); 00046 } 00047 00048 DeleteObjectCommand::~DeleteObjectCommand() 00049 { 00050 if( !d->applied ) 00051 delete d->object; 00052 00053 delete d; 00054 } 00055 00056 void DeleteObjectCommand::undo() 00057 { 00058 setCommandDirection( "undo" ); 00059 if( d->parent ) 00060 { 00061 if( d->parent->childIndex( d->object ) == -1 ) 00062 d->parent->addChild( d->object ); 00063 } 00064 00065 d->applied = true; 00066 } 00067 00068 void DeleteObjectCommand::redo() 00069 { 00070 setCommandDirection( "redo" ); 00071 if( d->parent ) 00072 { 00073 if( d->parent->childIndex( d->object ) != -1 ) 00074 d->parent->removeChild( d->object ); 00075 } 00076 00077 d->applied = false; 00078 } 00079