]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/imageUndoRedo/image3DDequeUR.cxx
DFCH: ManualPaint + imageUndoRedo: Undo/Redo functionality its now working =) =)
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / imageUndoRedo / image3DDequeUR.cxx
index d1d959d251faa709fb5cc9dd2728293ab9b615a3..c010cb9e69b28709e5081700c245eff657eb3fca 100755 (executable)
@@ -3,7 +3,7 @@
 #include <sstream>
 
 Image3DDequeUR::Image3DDequeUR() {
-       this->m_GlobalPath = "/home/pechan/temporal/";
+       this->m_GlobalPath = "/home/caceres/temporal/";
        this->m_CurrentURPos = -1;
 }
 //virtual
@@ -16,8 +16,7 @@ void Image3DDequeUR::AddImagesToURContainer(VTKImageDataPointerType imgUndo,
        this->CleanURContainerFromIndex(this->m_CurrentURPos + 1);
        //Adding image
        ImageInfoUR* imageInfo = new ImageInfoUR();
-       imageInfo->SetImageName(
-                       this->GetImageName(this->m_ImgURDeque.size(), true));
+       imageInfo->SetImageName(this->GetImageName(this->m_ImgURDeque.size()));
        imageInfo->SetImages(imgUndo, imgRedo);
        imageInfo->SetImageMManager(imMManager);
        //Adding to deque
@@ -29,7 +28,9 @@ void Image3DDequeUR::AddImagesToURContainer(VTKImageDataPointerType imgUndo,
 //virtual
 ImageInfoUR* Image3DDequeUR::Undo() {
        ImageInfoUR* imgRet = NULL;
-       if ((this->m_ImgURDeque.size() > 0) && (this->m_CurrentURPos != -1)) {
+       int imgURDequeSize = this->m_ImgURDeque.size();
+       if ((this->m_ImgURDeque.size() > 0) && (this->m_CurrentURPos != -1)
+                       && (this->m_CurrentURPos < imgURDequeSize)) {
                imgRet = this->m_ImgURDeque[m_CurrentURPos];
                this->m_CurrentURPos--;
        } //fi
@@ -39,6 +40,15 @@ ImageInfoUR* Image3DDequeUR::Undo() {
 //virtual
 ImageInfoUR* Image3DDequeUR::Redo() {
        ImageInfoUR* imgRet = NULL;
+       this->m_CurrentURPos++;
+       int imgURDequeSize = this->m_ImgURDeque.size();
+       if ((this->m_ImgURDeque.size() > 0) && (this->m_CurrentURPos != -1)
+                       && (this->m_CurrentURPos < imgURDequeSize)) {
+               imgRet = this->m_ImgURDeque[m_CurrentURPos];
+       } //fi
+       else {
+               this->m_CurrentURPos--;
+       }
        return (imgRet);
 }
 //virtual
@@ -56,7 +66,8 @@ void Image3DDequeUR::CleanURContainerFromIndex(const int& index) {
 
 //virtual
 void Image3DDequeUR::ManageMemory() {
-       for (int i = 0; (unsigned int) i < this->m_ImgURDeque.size(); i++) {
+       int imgURDequeSize = this->m_ImgURDeque.size();
+       for (int i = 0; i < imgURDequeSize; i++) {
                if (this->m_ImgURDeque[i]->GetStatus()) {
                        this->m_ImgURDeque[i]->RemoveImagesFromMemory(this->m_GlobalPath);
                } //fi
@@ -67,6 +78,12 @@ void Image3DDequeUR::ManageMemory() {
                this->m_ImgURDeque[this->m_CurrentURPos]->LoadImagesToMemory(
                                this->m_GlobalPath);
        }
+       int currentRedoPos = this->m_CurrentURPos + 1;
+       if ((currentRedoPos < imgURDequeSize)
+                       && !(this->m_ImgURDeque[currentRedoPos]->GetStatus())) {
+               this->m_ImgURDeque[currentRedoPos]->LoadImagesToMemory(
+                               this->m_GlobalPath);
+       }
 }
 
 void Image3DDequeUR::SetGlobalPath(const StringType& globalPath) {
@@ -83,8 +100,7 @@ Image3DDequeUR::StringType Image3DDequeUR::GetGlobalPath() {
        return (this->m_GlobalPath);
 }
 
-Image3DDequeUR::StringType Image3DDequeUR::GetImageName(const int & pos,
-               const bool& undo) {
+Image3DDequeUR::StringType Image3DDequeUR::GetImageName(const int & pos) {
 //Giving a name to an image using the date and time
        if (this->m_IDImages.empty()) {
                time_t rawtime;