File indexing completed on 2024-12-08 04:00:43
0001 /*************************************************************************** 0002 kimecommands.cpp - description 0003 ------------------- 0004 begin : Fri May 25 2001 0005 copyright : (C) 2001 by Jan Schäfer 0006 email : j_schaef@informatik.uni-kl.de 0007 ***************************************************************************/ 0008 0009 /*************************************************************************** 0010 * * 0011 * This program is free software; you can redistribute it and/or modify * 0012 * it under the terms of the GNU General Public License as published by * 0013 * the Free Software Foundation; either version 2 of the License, or * 0014 * (at your option) any later version. * 0015 * * 0016 ***************************************************************************/ 0017 #include "kimecommands.h" 0018 0019 #include <QString> 0020 #include "kimagemapeditor_debug.h" 0021 #include <KLocalizedString> 0022 0023 #include "drawzone.h" 0024 0025 CutCommand::CutCommand(KImageMapEditor * document, const AreaSelection & a) 0026 : QUndoCommand(i18n( "Cut %1", a.typeString() )) 0027 { 0028 _document=document; 0029 _cutAreaSelection=new AreaSelection(); 0030 _cutAreaSelection->setAreaList( a.getAreaList() ); 0031 _cutted=true; 0032 } 0033 0034 0035 CutCommand::~CutCommand() 0036 { 0037 if (_cutted) 0038 { 0039 AreaListIterator it(_cutAreaSelection->getAreaList()); 0040 while (it.hasNext()) { 0041 delete it.next(); 0042 } 0043 } 0044 0045 delete _cutAreaSelection; 0046 } 0047 0048 void CutCommand::redo() 0049 { 0050 // The Area won't be really delete 0051 // it only gets removed from the AreaList 0052 _document->deleteArea(_cutAreaSelection ); 0053 _document->updateActionAccess(); 0054 _cutted=true; 0055 } 0056 0057 void CutCommand::undo() 0058 { 0059 if (_document) { 0060 _document->addArea( _cutAreaSelection ); 0061 _document->select( _cutAreaSelection ); 0062 _document->slotAreaChanged( _cutAreaSelection ); 0063 _cutted=false; 0064 } 0065 } 0066 0067 DeleteCommand::DeleteCommand(KImageMapEditor * document, const AreaSelection & a) 0068 : CutCommand(document,a) 0069 { 0070 setText(i18n( "Delete %1", a.typeString() )); 0071 } 0072 0073 PasteCommand::PasteCommand(KImageMapEditor *document, const AreaSelection & a) 0074 : QUndoCommand(i18n( "Paste %1", a.typeString() )) 0075 { 0076 _document=document; 0077 _pasteAreaSelection=new AreaSelection(); 0078 _pasteAreaSelection->setAreaList( a.getAreaList() ); 0079 _pasted=true; 0080 _wasUndoed=false; 0081 } 0082 0083 PasteCommand::~PasteCommand () 0084 { 0085 if ( ! _pasted ) { 0086 AreaListIterator it(_pasteAreaSelection->getAreaList()); 0087 while (it.hasNext()) { 0088 delete it.next(); 0089 } 0090 } 0091 0092 delete _pasteAreaSelection; 0093 } 0094 0095 void PasteCommand::redo() 0096 { 0097 _document->deselectAll(); 0098 _document->addArea( _pasteAreaSelection ); 0099 _document->select( _pasteAreaSelection ); 0100 _document->slotAreaChanged( _pasteAreaSelection ); 0101 _pasted=true; 0102 } 0103 0104 void PasteCommand::undo() 0105 { 0106 _document->deleteArea(_pasteAreaSelection ); 0107 _pasted=false; 0108 _wasUndoed=true; 0109 } 0110 0111 0112 MoveCommand::MoveCommand (KImageMapEditor *document, AreaSelection * a, const QPoint & oldPoint) 0113 : QUndoCommand(i18n( "Move %1", a->typeString() )) 0114 { 0115 _document=document; 0116 _areaSelection=new AreaSelection(); 0117 _areaSelection->setAreaList( a->getAreaList() ); 0118 _oldPoint.setX(oldPoint.x()); 0119 _oldPoint.setY(oldPoint.y()); 0120 0121 _newPoint.setX(a->rect().left()); 0122 _newPoint.setY(a->rect().top()); 0123 } 0124 0125 MoveCommand::~MoveCommand () { 0126 delete _areaSelection; 0127 } 0128 0129 void MoveCommand::redo() 0130 { 0131 // only for repainting reasons 0132 Area* tempArea = _areaSelection->clone(); 0133 0134 _areaSelection->moveTo( _newPoint.x(), _newPoint.y() ); 0135 0136 if (!_areaSelection->allAreasWithin(_document->getDrawZone()->getImageRect())) 0137 _areaSelection->moveTo( _oldPoint.x(), _oldPoint.y() ); 0138 0139 _document->selected()->invalidate(); 0140 0141 0142 _document->slotAreaChanged( tempArea ); 0143 _document->slotAreaChanged( _areaSelection ); 0144 0145 delete tempArea; 0146 0147 } 0148 0149 void MoveCommand::undo() 0150 { 0151 // only to erase the old Area 0152 Area* tempArea = _areaSelection->clone(); 0153 0154 _areaSelection->setMoving(true); 0155 _areaSelection->moveTo( _oldPoint.x(), _oldPoint.y() ); 0156 _areaSelection->setMoving(false); 0157 0158 _document->selected()->invalidate(); 0159 0160 _document->slotAreaChanged( tempArea ); 0161 _document->slotAreaChanged( _areaSelection ); 0162 0163 delete tempArea; 0164 0165 } 0166 0167 0168 ResizeCommand::ResizeCommand (KImageMapEditor *document, AreaSelection *a, Area *oldArea) 0169 :QUndoCommand(i18n( "Resize %1", a->typeString() )) 0170 { 0171 _areaSelection=new AreaSelection(); 0172 _areaSelection->setAreaList( a->getAreaList() ); 0173 0174 _newArea = a->clone(); 0175 _oldArea = oldArea->clone(); 0176 _document=document; 0177 } 0178 0179 ResizeCommand::~ResizeCommand () 0180 { 0181 delete _newArea; 0182 delete _oldArea; 0183 delete _areaSelection; 0184 } 0185 0186 void ResizeCommand::redo() 0187 { 0188 _areaSelection->setArea ( *_newArea); 0189 _areaSelection->setMoving(false); 0190 0191 _document->slotAreaChanged( _areaSelection ); 0192 _document->slotAreaChanged( _oldArea ); 0193 0194 0195 } 0196 0197 void ResizeCommand::undo() 0198 { 0199 _areaSelection->setArea ( *_oldArea); 0200 _areaSelection->setMoving(false); 0201 0202 _document->slotAreaChanged( _areaSelection ); 0203 _document->slotAreaChanged( _newArea ); 0204 0205 } 0206 0207 0208 0209 AddPointCommand::AddPointCommand (KImageMapEditor *document, AreaSelection *a, const QPoint & p) 0210 :QUndoCommand(i18n( "Add point to %1", a->typeString() )) 0211 { 0212 if (a->type()!=Area::Polygon) 0213 { 0214 qCDebug(KIMAGEMAPEDITOR_LOG) << "trying to add a point to a " << a->typeString(); 0215 return; 0216 } 0217 0218 _areaSelection=new AreaSelection(); 0219 _areaSelection->setAreaList( a->getAreaList() ); 0220 0221 _point = p; 0222 _document=document; 0223 } 0224 0225 AddPointCommand::~AddPointCommand () 0226 { 0227 delete _areaSelection; 0228 } 0229 0230 void AddPointCommand::redo() 0231 { 0232 _coordpos = _areaSelection->addCoord(_point); 0233 _areaSelection->setMoving(false); 0234 0235 _document->slotAreaChanged( _areaSelection ); 0236 } 0237 0238 void AddPointCommand::undo() 0239 { 0240 // QRect *selectionPoint = _areaSelection->onSelectionPoint(_point); 0241 Area* repaintArea = _areaSelection->clone(); 0242 0243 _areaSelection->removeCoord(_coordpos); 0244 _areaSelection->setMoving(false); 0245 0246 _document->slotAreaChanged( _areaSelection ); 0247 _document->slotAreaChanged( repaintArea ); 0248 0249 delete repaintArea; 0250 } 0251 0252 RemovePointCommand::RemovePointCommand(KImageMapEditor *document, 0253 AreaSelection *a, Area *oldArea) 0254 : QUndoCommand(i18n( "Remove point from %1", a->typeString() )) 0255 { 0256 if (a->type()!=Area::Polygon) 0257 { 0258 qCDebug(KIMAGEMAPEDITOR_LOG) << "trying to remove a point to a " << a->typeString(); 0259 return; 0260 } 0261 0262 _areaSelection=new AreaSelection(); 0263 _areaSelection->setAreaList( a->getAreaList() ); 0264 0265 _newArea = a->clone(); 0266 _oldArea = oldArea->clone(); 0267 _document=document; 0268 } 0269 0270 RemovePointCommand::~RemovePointCommand () 0271 { 0272 delete _newArea; 0273 delete _oldArea; 0274 delete _areaSelection; 0275 } 0276 0277 void RemovePointCommand::redo() 0278 { 0279 _areaSelection->setArea ( *_newArea); 0280 _areaSelection->setMoving(false); 0281 0282 _document->slotAreaChanged( _areaSelection ); 0283 _document->slotAreaChanged( _oldArea ); 0284 0285 0286 } 0287 0288 void RemovePointCommand::undo() 0289 { 0290 _areaSelection->setArea ( *_oldArea); 0291 _areaSelection->setMoving(false); 0292 0293 _document->slotAreaChanged( _areaSelection ); 0294 _document->slotAreaChanged( _newArea ); 0295 0296 } 0297 0298 0299 0300 CreateCommand::CreateCommand (KImageMapEditor *document, Area *area) 0301 : QUndoCommand(i18n( "Create %1", area->typeString() )) 0302 { 0303 _document=document; 0304 _area=area; 0305 _created=true; 0306 _wasUndoed=false; 0307 0308 } 0309 0310 CreateCommand::~CreateCommand () 0311 { 0312 if ( ! _created) 0313 delete _area; 0314 } 0315 0316 void CreateCommand::redo() 0317 { 0318 if (_document) { 0319 0320 if ( _wasUndoed ) { 0321 _document->addArea( _area ); 0322 _document->deselectAll(); 0323 _document->select( _area ); 0324 _document->slotAreaChanged( _area ); 0325 } 0326 else 0327 _document->addAreaAndEdit( _area ); 0328 0329 _created=true; 0330 } 0331 0332 } 0333 0334 void CreateCommand::undo() 0335 { 0336 if (_document) { 0337 _document->deleteArea( _area ); 0338 _created=false; 0339 _wasUndoed=true; 0340 } 0341 0342 }