]> Creatis software - cpPlugins.git/blobdiff - appli/ImageMPR/ImageMPR.cxx
undo redo for images in viewer
[cpPlugins.git] / appli / ImageMPR / ImageMPR.cxx
index 0100a138a5faadb54c3841b5c0fb0baa299c5435..0823bb2fca37a7d3aef576b2d42b0c060e63855b 100644 (file)
@@ -1,8 +1,10 @@
 #include "ImageMPR.h"
+#include "MementoState.h"
 #include "ui_ImageMPR.h"
 
 #include <vtkProperty.h>
 #include <vtkRenderWindow.h>
+#include <vtkMetaImageReader.h>
 
 #include <QFileDialog>
 #include <QMessageBox>
@@ -26,7 +28,8 @@ ImageMPR::ImageMPR( QWidget* parent )
     m_MeshReaderClass( "" ),
     m_MeshWriterClass( "" ),
     m_MeshCutterClass( "" ),
-    m_Image( NULL )
+    m_Image( NULL ),
+       m_state(1)
 {
   this->m_UI->setupUi( this );
 
@@ -56,6 +59,14 @@ ImageMPR::ImageMPR( QWidget* parent )
     this->m_UI->actionOpenInputPolyData, SIGNAL( triggered( ) ),
     this, SLOT( _triggered_actionOpenInputPolyData( ) )
     );
+  QObject::connect(
+       this->m_UI->actionUndo, SIGNAL(triggered()),
+       this, SLOT(_triggered_actionUndo())
+       );
+  QObject::connect(
+       this->m_UI->actionRedo, SIGNAL(triggered()),
+       this, SLOT(_triggered_actionRedo())
+       );
 
   // Start: load all disponible plugins
   this->_LoadPlugins(
@@ -272,6 +283,8 @@ _triggered_actionOpenInputImage( )
       this->m_MPRObjects->ActivateInteractors( );
       this->m_MPRObjects->ResetCameras( );
       this->m_MPRObjects->RenderAll( );
+
+         MementoState(m_state, this->m_Image);   
     }
     else
       QMessageBox::critical(
@@ -417,7 +430,10 @@ _triggered_actionImageToImage( )
     if( this->m_Image.IsNotNull( ) )
       this->m_MPRObjects->SetImage(
         this->m_Image->GetVTK< vtkImageData >( )
-        );
+
+               );
+       m_state++;
+       MementoState(m_state, this->m_Image);
   }
   else
     QMessageBox::critical(
@@ -477,4 +493,50 @@ _triggered_actionImageToMesh( )
       );
 }
 
+// -------------------------------------------------------------------------
+void ImageMPR::
+_triggered_actionUndo()
+{
+       MementoState memento = MementoState();
+    
+       if (this->m_state>1)
+       {
+               this->m_state--;
+               this->m_MPRObjects->SetImage(
+                       memento.getMemento(this->m_state)->GetOutput()
+                       );
+       } else
+       {
+               QMessageBox::critical(
+                       this,
+                       tr("Error message"),
+                       tr("No history to undo")
+                       );
+       }
+
+}
+
+// -------------------------------------------------------------------------
+void ImageMPR::
+_triggered_actionRedo()
+{
+       MementoState memento = MementoState();
+       try
+       {
+               this->m_state++;
+               this->m_MPRObjects->SetImage(
+                       memento.getMemento(this->m_state)->GetOutput()
+                       );
+       }
+       catch (int err)
+       {
+               QMessageBox::critical(
+                       this,
+                       tr("Error message"),
+                       tr("No history to redo")
+                       );
+       }
+}
+       
+
 // eof - $RCSfile$