]> Creatis software - cpPlugins.git/blobdiff - appli/ImageMPR/ImageMPR.cxx
update: undo/redo for image to image filters
[cpPlugins.git] / appli / ImageMPR / ImageMPR.cxx
index 0100a138a5faadb54c3841b5c0fb0baa299c5435..402baff2c1b1c4a074f6da2af00f34b50fe3692b 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,9 @@ ImageMPR::ImageMPR( QWidget* parent )
     m_MeshReaderClass( "" ),
     m_MeshWriterClass( "" ),
     m_MeshCutterClass( "" ),
-    m_Image( NULL )
+    m_Image( NULL ),
+       m_state(0),
+       m_max_state(0)
 {
   this->m_UI->setupUi( this );
 
@@ -56,6 +60,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 +284,9 @@ _triggered_actionOpenInputImage( )
       this->m_MPRObjects->ActivateInteractors( );
       this->m_MPRObjects->ResetCameras( );
       this->m_MPRObjects->RenderAll( );
+
+         MementoState(m_state, this->m_Image);  
+         this->m_state++;
     }
     else
       QMessageBox::critical(
@@ -417,7 +432,16 @@ _triggered_actionImageToImage( )
     if( this->m_Image.IsNotNull( ) )
       this->m_MPRObjects->SetImage(
         this->m_Image->GetVTK< vtkImageData >( )
-        );
+
+               );
+       
+       
+       MementoState(this->m_state, this->m_Image);
+       this->m_state++;
+       if (this->m_state > this->m_max_state)
+       {
+               this->m_max_state = this->m_state;
+       }
   }
   else
     QMessageBox::critical(
@@ -477,4 +501,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::warning(
+                       this,
+                       tr("message"),
+                       tr("No history to undo")
+                       );
+       }
+
+}
+
+// -------------------------------------------------------------------------
+void ImageMPR::
+_triggered_actionRedo()
+{
+       MementoState memento = MementoState();
+               if (this->m_state + 1 <= m_max_state)
+               {
+                       this->m_state++;
+                       this->m_MPRObjects->SetImage(
+                               memento.getMemento(this->m_state)->GetOutput()
+                               );
+               } else
+               {
+                       QMessageBox::warning(
+                               this,
+                               tr("message"),
+                               tr("No history to redo")
+                               );
+               }
+       
+}
+       
+
 // eof - $RCSfile$