summaryrefslogtreecommitdiffstats
path: root/kimagemapeditor/kimecommands.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kimagemapeditor/kimecommands.cpp')
-rw-r--r--kimagemapeditor/kimecommands.cpp384
1 files changed, 384 insertions, 0 deletions
diff --git a/kimagemapeditor/kimecommands.cpp b/kimagemapeditor/kimecommands.cpp
new file mode 100644
index 00000000..e061a463
--- /dev/null
+++ b/kimagemapeditor/kimecommands.cpp
@@ -0,0 +1,384 @@
+/***************************************************************************
+ kimecommands.cpp - description
+ -------------------
+ begin : Fri May 25 2001
+ copyright : (C) 2001 by Jan Schäfer
+ email : j_schaef@informatik.uni-kl.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#include <qstring.h>
+#include <kdebug.h>
+#include <klocale.h>
+
+#include "kimagemapeditor.h"
+#include "kimecommands.h"
+#include "drawzone.h"
+
+CutCommand::CutCommand(KImageMapEditor * document, const AreaSelection & a)
+ :
+
+#if KDE_VERSION < 300
+KCommand
+#else
+KNamedCommand
+#endif
+ (i18n( "Cut %1" ).arg( a.typeString() ))
+{
+ _document=document;
+ _cutAreaSelection=new AreaSelection();
+ _cutAreaSelection->setAreaList( a.getAreaList() );
+ _cutted=true;
+}
+
+
+CutCommand::~CutCommand()
+{
+ if (_cutted)
+ {
+ AreaList list = _cutAreaSelection->getAreaList();
+ for ( Area *a=list.first(); a != 0; a=list.next() ) {
+ delete a;
+ }
+ }
+
+ delete _cutAreaSelection;
+}
+
+void CutCommand::execute()
+{
+ // The Area won't be really delete
+ // it only gets removed from the AreaList
+ _document->deleteArea(_cutAreaSelection );
+ _document->updateActionAccess();
+ _cutted=true;
+}
+
+void CutCommand::unexecute()
+{
+ if (_document) {
+ _document->addArea( _cutAreaSelection );
+ _document->select( _cutAreaSelection );
+ _document->slotAreaChanged( _cutAreaSelection );
+ _cutted=false;
+ }
+}
+
+DeleteCommand::DeleteCommand(KImageMapEditor * document, const AreaSelection & a)
+ : CutCommand(document,a)
+{
+ setName(i18n( "Delete %1" ).arg( a.typeString() ));
+}
+
+PasteCommand::PasteCommand(KImageMapEditor *document, const AreaSelection & a)
+ :
+#if KDE_VERSION < 300
+KCommand
+#else
+KNamedCommand
+#endif
+ (i18n( "Paste %1" ).arg( a.typeString() ))
+{
+ _document=document;
+ _pasteAreaSelection=new AreaSelection();
+ _pasteAreaSelection->setAreaList( a.getAreaList() );
+ _pasted=true;
+ _wasUndoed=false;
+}
+
+PasteCommand::~PasteCommand ()
+{
+ if ( ! _pasted ) {
+ AreaList list=_pasteAreaSelection->getAreaList();
+ for (Area* a=list.first(); a != 0; a=list.next() ) {
+ delete a;
+ }
+ }
+
+ delete _pasteAreaSelection;
+}
+
+void PasteCommand::execute()
+{
+ _document->deselectAll();
+ _document->addArea( _pasteAreaSelection );
+ _document->select( _pasteAreaSelection );
+ _document->slotAreaChanged( _pasteAreaSelection );
+ _pasted=true;
+}
+
+void PasteCommand::unexecute()
+{
+ _document->deleteArea(_pasteAreaSelection );
+ _pasted=false;
+ _wasUndoed=true;
+}
+
+
+MoveCommand::MoveCommand (KImageMapEditor *document, AreaSelection * a, const QPoint & oldPoint)
+ :
+#if KDE_VERSION < 300
+KCommand
+#else
+KNamedCommand
+#endif
+(i18n( "Move %1" ).arg( a->typeString() ))
+{
+ _document=document;
+ _areaSelection=new AreaSelection();
+ _areaSelection->setAreaList( a->getAreaList() );
+ _oldPoint.setX(oldPoint.x());
+ _oldPoint.setY(oldPoint.y());
+
+ _newPoint.setX(a->rect().left());
+ _newPoint.setY(a->rect().top());
+}
+
+MoveCommand::~MoveCommand () {
+ delete _areaSelection;
+}
+
+void MoveCommand::execute()
+{
+ // only for repainting reasons
+ Area* tempArea = _areaSelection->clone();
+
+ _areaSelection->moveTo( _newPoint.x(), _newPoint.y() );
+
+ if (!_areaSelection->allAreasWithin(_document->getDrawZone()->getImageRect()))
+ _areaSelection->moveTo( _oldPoint.x(), _oldPoint.y() );
+
+ _document->selected()->invalidate();
+
+
+ _document->slotAreaChanged( tempArea );
+ _document->slotAreaChanged( _areaSelection );
+
+ delete tempArea;
+
+}
+
+void MoveCommand::unexecute()
+{
+ // only to erase the old Area
+ Area* tempArea = _areaSelection->clone();
+
+ _areaSelection->setMoving(true);
+ _areaSelection->moveTo( _oldPoint.x(), _oldPoint.y() );
+ _areaSelection->setMoving(false);
+
+ _document->selected()->invalidate();
+
+ _document->slotAreaChanged( tempArea );
+ _document->slotAreaChanged( _areaSelection );
+
+ delete tempArea;
+
+}
+
+
+ResizeCommand::ResizeCommand (KImageMapEditor *document, AreaSelection *a, Area *oldArea)
+ :
+#if KDE_VERSION < 300
+KCommand
+#else
+KNamedCommand
+#endif
+(i18n( "Resize %1" ).arg( a->typeString() ))
+{
+ _areaSelection=new AreaSelection();
+ _areaSelection->setAreaList( a->getAreaList() );
+
+ _newArea = a->clone();
+ _oldArea = oldArea->clone();
+ _document=document;
+}
+
+ResizeCommand::~ResizeCommand ()
+{
+ delete _newArea;
+ delete _oldArea;
+ delete _areaSelection;
+}
+
+void ResizeCommand::execute()
+{
+ _areaSelection->setArea ( *_newArea);
+ _areaSelection->setMoving(false);
+
+ _document->slotAreaChanged( _areaSelection );
+ _document->slotAreaChanged( _oldArea );
+
+
+}
+
+void ResizeCommand::unexecute()
+{
+ _areaSelection->setArea ( *_oldArea);
+ _areaSelection->setMoving(false);
+
+ _document->slotAreaChanged( _areaSelection );
+ _document->slotAreaChanged( _newArea );
+
+}
+
+
+
+AddPointCommand::AddPointCommand (KImageMapEditor *document, AreaSelection *a, const QPoint & p)
+ :
+#if KDE_VERSION < 300
+KCommand
+#else
+KNamedCommand
+#endif
+(i18n( "Add point to %1" ).arg( a->typeString() ))
+{
+ if (a->type()!=Area::Polygon)
+ {
+ kdDebug() << "trying to add a point to a " << a->typeString() << endl;
+ return;
+ }
+
+ _areaSelection=new AreaSelection();
+ _areaSelection->setAreaList( a->getAreaList() );
+
+ _point = p;
+ _document=document;
+}
+
+AddPointCommand::~AddPointCommand ()
+{
+ delete _areaSelection;
+}
+
+void AddPointCommand::execute()
+{
+ _coordpos = _areaSelection->addCoord(_point);
+ _areaSelection->setMoving(false);
+
+ _document->slotAreaChanged( _areaSelection );
+}
+
+void AddPointCommand::unexecute()
+{
+// QRect *selectionPoint = _areaSelection->onSelectionPoint(_point);
+ Area* repaintArea = _areaSelection->clone();
+
+ _areaSelection->removeCoord(_coordpos);
+ _areaSelection->setMoving(false);
+
+ _document->slotAreaChanged( _areaSelection );
+ _document->slotAreaChanged( repaintArea );
+
+ delete repaintArea;
+}
+
+RemovePointCommand::RemovePointCommand (KImageMapEditor *document, AreaSelection *a, Area *oldArea)
+ :
+#if KDE_VERSION < 300
+KCommand
+#else
+KNamedCommand
+#endif
+(i18n( "Remove point from %1" ).arg( a->typeString() ))
+{
+ if (a->type()!=Area::Polygon)
+ {
+ kdDebug() << "trying to remove a point to a " << a->typeString() << endl;
+ return;
+ }
+
+ _areaSelection=new AreaSelection();
+ _areaSelection->setAreaList( a->getAreaList() );
+
+ _newArea = a->clone();
+ _oldArea = oldArea->clone();
+ _document=document;
+}
+
+RemovePointCommand::~RemovePointCommand ()
+{
+ delete _newArea;
+ delete _oldArea;
+ delete _areaSelection;
+}
+
+void RemovePointCommand::execute()
+{
+ _areaSelection->setArea ( *_newArea);
+ _areaSelection->setMoving(false);
+
+ _document->slotAreaChanged( _areaSelection );
+ _document->slotAreaChanged( _oldArea );
+
+
+}
+
+void RemovePointCommand::unexecute()
+{
+ _areaSelection->setArea ( *_oldArea);
+ _areaSelection->setMoving(false);
+
+ _document->slotAreaChanged( _areaSelection );
+ _document->slotAreaChanged( _newArea );
+
+}
+
+
+
+CreateCommand::CreateCommand (KImageMapEditor *document, Area *area)
+ :
+#if KDE_VERSION < 300
+KCommand
+#else
+KNamedCommand
+#endif
+(i18n( "Create %1" ).arg( area->typeString() ))
+{
+ _document=document;
+ _area=area;
+ _created=true;
+ _wasUndoed=false;
+
+}
+
+CreateCommand::~CreateCommand ()
+{
+ if ( ! _created)
+ delete _area;
+}
+
+void CreateCommand::execute()
+{
+ if (_document) {
+
+ if ( _wasUndoed ) {
+ _document->addArea( _area );
+ _document->deselectAll();
+ _document->select( _area );
+ _document->slotAreaChanged( _area );
+ }
+ else
+ _document->addAreaAndEdit( _area );
+
+ _created=true;
+ }
+
+}
+
+void CreateCommand::unexecute()
+{
+ if (_document) {
+ _document->deleteArea( _area );
+ _created=false;
+ _wasUndoed=true;
+ }
+
+}