]> Creatis software - creaMaracasVisu.git/commitdiff
DFCH: ManualPaint (UNdo/Redo) changes
authorDiego Caceres <Diego.Caceres@creatis.insa-lyon.fr>
Tue, 4 Oct 2011 13:40:32 +0000 (13:40 +0000)
committerDiego Caceres <Diego.Caceres@creatis.insa-lyon.fr>
Tue, 4 Oct 2011 13:40:32 +0000 (13:40 +0000)
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.cxx
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.h
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageDequeUR.h

index 36dd0168350133c9c83991c0e0684269833b3a1b..809a3952ad8426620c22309038662e0dc6c34097 100644 (file)
@@ -9,45 +9,63 @@ Image3DDequeUR::~Image3DDequeUR() {
 
 }
 //virtual
-void Image3DDequeUR::addImageToContainer(ImageType* img,
+void Image3DDequeUR::addImageToUndoContainer(ImageType* img,
                const RegionS& region) {
        //managing memory
-       if (this->m_ImgDeque.size() > 0) {
-               this->m_ImgDeque.back().removeImageFromMemory();
-               this->m_ImgDeque.back().setStatus(false);
+       if (this->m_ImgUndoDeque.size() > 0) {
+               this->m_ImgUndoDeque.back().removeImageFromMemory();
        } //fi
-         //This is to take actual Date
-       time_t rawtime;
-       struct tm * timeinfo;
-       char buffer[80];
-       time(&rawtime);
-       timeinfo = localtime(&rawtime);
-       strftime(buffer, 80, "%a_%d_%b_%y_%H_%M_S", timeinfo);
-       std::string date(buffer);
-       //end
-       std::string aux(buffer);
-       std::string imageName = "img_" + aux;
        ImageInfoUR imageInfo;
-       imageInfo.setImageName(imageName);
+       imageInfo.setImageName(this->getImageName());
        imageInfo.setImage(img);
        imageInfo.setRegion(region);
-       imageInfo.setStatus(true);
        //saving to disk
-       std::string fullpath = this->m_globalPath + imageName;
+       std::string fullpath = this->m_globalPath + imageInfo.getImageName()
+                       + "_UNDO.MHD";
        this->saveImageAsMHD(img, fullpath);
        //Adding to deque
-       this->m_ImgDeque.push_back(imageInfo);
+       this->m_ImgUndoDeque.push_back(imageInfo);
+       this->m_currentUndoPos = this->m_ImgUndoDeque.size() - 1;
+}
+//virtual
+void Image3DDequeUR::addImageToRedoContainer(ImageType* img,
+               const RegionS& region) {
+       //managing memory
+       if (this->m_ImgRedoDeque.size() > 0) {
+               this->m_ImgRedoDeque.back().removeImageFromMemory();
+       } //fi
+       ImageInfoUR imageInfo;
+       imageInfo.setImageName(this->getImageName());
+       imageInfo.setImage(img);
+       imageInfo.setRegion(region);
+       //saving to disk
+       std::string fullpath = this->m_globalPath + imageInfo.getImageName()
+                       + "_REDO.MHD";
+       this->saveImageAsMHD(img, fullpath);
+       //Adding to deque
+       this->m_ImgRedoDeque.push_back(imageInfo);
+}
+//virtual
+void Image3DDequeUR::loadUndoImageToPMemory(const unsigned int& index) {
+       creaImageIO::ImageReader reader;
+       std::string fullPath = this->m_globalPath
+                       + this->m_ImgUndoDeque[index].getImageName();
+       this->m_ImgUndoDeque[index].setImage(reader.ReadImage(fullPath));
+}
+//virtual
+void Image3DDequeUR::removeUndoImageFromPMemory(const unsigned int& index) {
+       this->m_ImgUndoDeque[index].removeImageFromMemory();
 }
 //virtual
-void Image3DDequeUR::loadImageToPMemory(const unsigned int& index) {
+void Image3DDequeUR::loadRedoImageToPMemory(const unsigned int& index) {
        creaImageIO::ImageReader reader;
        std::string fullPath = this->m_globalPath
-                       + this->m_ImgDeque[index].getImageName();
-       this->m_ImgDeque[index].setImage(reader.ReadImage(fullPath));
+                       + this->m_ImgRedoDeque[index].getImageName();
+       this->m_ImgRedoDeque[index].setImage(reader.ReadImage(fullPath));
 }
 //virtual
-void Image3DDequeUR::removeImageFromPMemory(const unsigned int& index) {
-       this->m_ImgDeque[index].removeImageFromMemory();
+void Image3DDequeUR::removeRedoImageFromPMemory(const unsigned int& index) {
+       this->m_ImgRedoDeque[index].removeImageFromMemory();
 }
 //virtual
 void Image3DDequeUR::saveImageAsMHD(ImageType* img,
@@ -62,46 +80,74 @@ void Image3DDequeUR::saveImageAsMHD(ImageType* img,
        w->Delete();
 }
 
-//ATENCIIIOOOON TIENE QUE HACER POP PARA PONER EL REDO
 //virtual
 ImageInfoUR Image3DDequeUR::undo() {
-       if (this->m_currentUndoPos == -1) {
-               ImageInfoUR retAux;
-               return (retAux);
+       ImageInfoUR imgRet;
+       if (this->m_currentUndoPos < (this->m_ImgUndoDeque.size() + 1)) {
+               this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos + 1)].removeImageFromMemory();
+       } //fi
+       if (this->m_currentUndoPos != -1) {
+               //removing from memory
+               if ((this->m_currentUndoPos + 1) < this->m_ImgUndoDeque.size()) {
+                       this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos + 1)].removeImageFromMemory();
+               } //fi
+               ImageInfoUR imgRet =
+                               this->m_ImgUndoDeque[(unsigned int) m_currentUndoPos];
+               this->m_currentUndoPos--;
+               //adding to memory
+               if (this->m_currentUndoPos != -1) {
+                       this->loadUndoImageToPMemory((unsigned int) m_currentUndoPos);
+               } //fi
        } //fi
-       ImageInfoUR imgRet = m_ImgDeque[(unsigned int) m_currentUndoPos];
-       this->m_currentUndoPos--;
        return (imgRet);
 }
 //virtual
 ImageInfoUR Image3DDequeUR::redo() {
-       if (this->m_currentUndoPos != (this->m_ImgDeque.size() - 1)) {
+       ImageInfoUR imgRet;
+       if (this->m_currentUndoPos >= (this->m_ImgRedoDeque.size() - 1)
+                       && (this->m_ImgRedoDeque.size() > 0)) {
+               this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos)].removeImageFromMemory();
                this->m_currentUndoPos++;
-               return (m_ImgDeque[(unsigned int) m_currentUndoPos]);
+               this->loadUndoImageToPMemory((unsigned int) m_currentUndoPos);
+               imgRet = this->m_ImgRedoDeque.back();
+               this->m_ImgRedoDeque.pop_back();
+               if (this->m_ImgRedoDeque.size() > 0) {
+                       loadRedoImageToPMemory(
+                                       (unsigned int) (this->m_ImgRedoDeque.size() - 1));
+               } //fi
        } //fi
-       ImageInfoUR retAux;
-       return (retAux);
+       return (imgRet);
+}
+
+void Image3DDequeUR::cleanContainers() {
+       for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) {
+               this->m_ImgUndoDeque[i].removeImageFromMemory();
+       } //rof
+       for (unsigned int i = 0; i < this->m_ImgRedoDeque.size(); i++) {
+               this->m_ImgRedoDeque[i].removeImageFromMemory();
+       } //rof
+       this->m_ImgRedoDeque.clear();
+       this->m_ImgUndoDeque.clear();
 }
+
 void Image3DDequeUR::setGlobalPath(const std::string& globalPath) {
        this->m_globalPath = globalPath;
 }
-void Image3DDequeUR::removeFirstImageFromContainer() {
-       this->m_ImgDeque.pop_front();
-}
-void Image3DDequeUR::removeLastImageFromContainer() {
-       this->m_ImgDeque.pop_back();
-}
-void Image3DDequeUR::cleanContainer() {
-       this->m_ImgDeque.clear();
-}
-void Image3DDequeUR::cleanContainerFromIndex(const unsigned int& index) {
-       for (unsigned int i = this->m_ImgDeque.size(); i >= index; i--) {
-               this->m_ImgDeque.pop_back();
-       }
-}
+
 std::string Image3DDequeUR::getGlobalPath() {
        return (this->m_globalPath);
 }
-void Image3DDequeUR::setUndoPointerOnTop() {
-       this->m_currentUndoPos = this->m_ImgDeque.size() - 1;
+
+std::string Image3DDequeUR::getImageName() {
+       //Giving a name to an image using the date and time
+       time_t rawtime;
+       struct tm * timeinfo;
+       char buffer[80];
+       time(&rawtime);
+       timeinfo = localtime(&rawtime);
+       strftime(buffer, 80, "%a_%d_%b_%y_%H_%M_S", timeinfo);
+       std::string date(buffer);
+       std::string aux(buffer);
+       std::string imageName = "img_" + aux;
+       return (imageName);
 }
index a8ef891b0f6da3539ad73b292ba54c3e909bbb0f..39c04682f5b8b9195190bf0f042153d3ba58b912 100644 (file)
 class Image3DDequeUR : public ImageDequeUR
 {
 private:
-       ImageInfoDeque m_ImgDeque;
+       ImageInfoDeque m_ImgUndoDeque;
+       ImageInfoDeque m_ImgRedoDeque;
        int m_currentUndoPos;
        std::string m_globalPath;
 public:
        Image3DDequeUR();
        virtual ~Image3DDequeUR();
-       virtual void addImageToContainer(ImageType* img, const RegionS& region);
-       virtual void loadImageToPMemory( const unsigned int& index );
-       virtual void removeImageFromPMemory( const unsigned int& index );
+       virtual void addImageToUndoContainer(ImageType* img, const RegionS& region);
+       virtual void addImageToRedoContainer(ImageType* img, const RegionS& region);
+       virtual void loadUndoImageToPMemory( const unsigned int& index );
+       virtual void removeUndoImageFromPMemory( const unsigned int& index );
+       virtual void loadRedoImageToPMemory( const unsigned int& index );
+       virtual void removeRedoImageFromPMemory( const unsigned int& index );
        virtual void saveImageAsMHD( ImageType* img, const std::string& filename );
-       virtual ImageInfoUR undo();
-       virtual ImageInfoUR redo();
+       virtual ImageInfoUR undo( );
+       virtual ImageInfoUR redo( );
+       void cleanContainers();
        void setGlobalPath( const std::string& globalPath );
-       void removeFirstImageFromContainer();
-       void removeLastImageFromContainer();
-       void cleanContainer();
-       void setUndoPointerOnTop();
        std::string getGlobalPath( );
-private:
-       void cleanContainerFromIndex(const unsigned int& index);
+       std::string getImageName( );
 };
 
 
index 9d475d8643f43aaa07f7d5554d7fdb51e3d644f2..46b72bd71b1db053001bcbc9fee16ce5a5c3ce7e 100644 (file)
@@ -23,12 +23,15 @@ class ImageDequeUR {
 public:
        ImageDequeUR();
        virtual ~ImageDequeUR();
-       virtual void addImageToContainer(ImageType* img, const RegionS& region);
-       virtual void loadImageToPMemory( const unsigned int& index );
-       virtual void removeImageFromPMemory( const unsigned int& index );
+       virtual void addImageToUndoContainer(ImageType* img, const RegionS& region);
+       virtual void addImageToRedoContainer(ImageType* img, const RegionS& region);
+       virtual void loadUndoImageToPMemory( const unsigned int& index );
+       virtual void removeUndoImageFromPMemory( const unsigned int& index );
+       virtual void loadRedoImageToPMemory( const unsigned int& index );
+       virtual void removeRedoImageFromPMemory( const unsigned int& index );
        virtual void saveImageAsMHD( ImageType* img, const std::string& filename );
-       virtual ImageInfoUR undo();
-       virtual ImageInfoUR redo();
+       virtual ImageInfoUR undo( );
+       virtual ImageInfoUR redo( );
 private:
        void cleanContainerFromIndex(const unsigned int& index);
 };