]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/imageUndoRedo/image3DDequeUR.cxx
2b7f1401bf39bd0123633f38afb439d03ee1f8df
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / imageUndoRedo / image3DDequeUR.cxx
1 #include "image3DDequeUR.h"
2 #include <iostream>
3 #include <sstream>
4
5 Image3DDequeUR::Image3DDequeUR() {
6         this->m_GlobalPath = "/home/caceres/temporal/";
7         this->m_CurrentUndoPos = -1;
8         this->m_CurrentRedoPos = -1;
9 }
10 //virtual
11 Image3DDequeUR::~Image3DDequeUR() {
12
13 }
14 //virtual
15 void Image3DDequeUR::AddImageToUndoContainer(VTKImageDataPointerType img,
16                 ImageMManagerType* imMManager) {
17         //Adding image
18         ImageInfoUR* imageInfo = new ImageInfoUR();
19         imageInfo->SetImageName(
20                         this->GetImageName(this->m_ImgUndoDeque.size(), true));
21         imageInfo->SetImage(img);
22         imageInfo->SetImageMManager(imMManager);
23         ///---------------------------------------------------------------------------------------------------
24         // Uncoment the following line
25         //imageInfo->SaveImageAsMHD(this->m_GlobalPath);
26         ///------------------------------------------------------------------------------------------------
27         //Adding to deque
28         this->m_ImgUndoDeque.push_back(imageInfo);
29         this->m_CurrentUndoPos = this->m_ImgUndoDeque.size() - 1;
30 }
31 //virtual
32 ImageInfoUR* Image3DDequeUR::Undo() {
33         ImageInfoUR* imgRet = NULL;
34         if ((this->m_ImgUndoDeque.size() > 0) && (this->m_CurrentUndoPos != -1)) {
35                 imgRet = this->m_ImgUndoDeque[m_CurrentUndoPos];
36                 this->m_CurrentUndoPos--;
37         } //fi
38         return (imgRet);
39 }
40 //virtual
41 void Image3DDequeUR::AddImageToRedoContainer(VTKImageDataPointerType img,
42                 ImageMManagerType* imMManager) {
43 }
44 //virtual
45 ImageInfoUR* Image3DDequeUR::Redo() {
46
47         ImageInfoUR* imgRet = new ImageInfoUR();
48         return (imgRet);
49 }
50 //virtual
51 void Image3DDequeUR::CleanUndoContainerFromIndex(const int& index) {
52         for (int i = index; i < this->m_ImgUndoDeque.size(); i++) {
53                 this->m_ImgUndoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
54                 this->m_ImgUndoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
55                 this->m_ImgUndoDeque.pop_back();
56         }
57 }
58 //virtual
59 void Image3DDequeUR::CleanRedoContainerFromIndex(const int& index) {
60         for (int i = index; i < this->m_ImgRedoDeque.size(); i++) {
61                 this->m_ImgRedoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
62                 this->m_ImgRedoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
63                 this->m_ImgRedoDeque.pop_back();
64         }
65 }
66 //virtual
67 void Image3DDequeUR::CleanContainers() {
68         for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) {
69                 this->m_ImgUndoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
70                 this->m_ImgUndoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
71         } //rof
72         for (unsigned int i = 0; i < this->m_ImgRedoDeque.size(); i++) {
73                 this->m_ImgRedoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
74                 this->m_ImgRedoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
75         } //rof
76         this->m_ImgRedoDeque.clear();
77         this->m_ImgUndoDeque.clear();
78 }
79
80 void Image3DDequeUR::SetGlobalPath(const StringType& globalPath) {
81         this->m_GlobalPath = globalPath;
82 }
83
84 Image3DDequeUR::StringType Image3DDequeUR::GetGlobalPath() {
85         return (this->m_GlobalPath);
86 }
87
88 Image3DDequeUR::StringType Image3DDequeUR::GetImageName(const int & pos,
89                 const bool& undo) {
90 //Giving a name to an image using the date and time
91         if (this->m_IDImages.empty()) {
92                 time_t rawtime;
93                 struct tm * timeinfo;
94                 char buffer[80];
95                 time(&rawtime);
96                 timeinfo = localtime(&rawtime);
97                 strftime(buffer, 80, "%H%M%S_%a_%d_%b_%y_", timeinfo);
98                 StringType date(buffer);
99                 StringType aux(buffer);
100                 this->m_IDImages = "img_" + aux;
101         }
102         std::stringstream ss; //create a stringstream
103         ss << pos; //add number to the stream
104         StringType imgType;
105         if (undo) {
106                 imgType = "undo";
107         } else {
108                 imgType = "redo";
109         }
110         StringType imageName = this->m_IDImages + imgType + ss.str();
111         imageName.append(".mhd");
112         return (imageName);
113 }