]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/imageUndoRedo/image3DDequeUR.cxx
DFCH
[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         this->CleanHardDisk();
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         //Adding to deque
24         this->m_ImgUndoDeque.push_back(imageInfo);
25         this->m_CurrentUndoPos = this->m_ImgUndoDeque.size() - 1;
26         //Managing memory
27         this->ManageMemory();
28 }
29 //virtual
30 ImageInfoUR* Image3DDequeUR::Undo() {
31         ImageInfoUR* imgRet = NULL;
32         if ((this->m_ImgUndoDeque.size() > 0) && (this->m_CurrentUndoPos != -1)) {
33                 imgRet = this->m_ImgUndoDeque[m_CurrentUndoPos];
34                 this->m_CurrentUndoPos--;
35         } //fi
36         return (imgRet);
37 }
38 //virtual
39 void Image3DDequeUR::AddImageToRedoContainer(VTKImageDataPointerType img,
40                 ImageMManagerType* imMManager) {
41 }
42 //virtual
43 ImageInfoUR* Image3DDequeUR::Redo() {
44
45         ImageInfoUR* imgRet = new ImageInfoUR();
46         return (imgRet);
47 }
48 //virtual
49 void Image3DDequeUR::CleanUndoContainerFromIndex(const int& index) {
50         int count = 0;
51         for (unsigned int i = index; i < this->m_ImgUndoDeque.size(); i++) {
52                 this->m_ImgUndoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
53                 this->m_ImgUndoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
54                 count++;
55         }
56         for (int i = 0; i < count; i++) {
57                 this->m_ImgUndoDeque.pop_back();
58         } //rof
59
60 }
61 //virtual
62 void Image3DDequeUR::CleanRedoContainerFromIndex(const int& index) {
63 }
64 //virtual
65 void Image3DDequeUR::CleanContainers() {
66         for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) {
67                 this->m_ImgUndoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
68                 this->m_ImgUndoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
69         } //rof
70         for (unsigned int i = 0; i < this->m_ImgRedoDeque.size(); i++) {
71                 this->m_ImgRedoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
72                 this->m_ImgRedoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
73         } //rof
74         this->m_ImgRedoDeque.clear();
75         this->m_ImgUndoDeque.clear();
76 }
77
78 //virtual
79 void Image3DDequeUR::ManageMemory() {
80         for (int i = 0; (unsigned int) i < this->m_ImgUndoDeque.size(); i++) {
81                 if (this->m_ImgUndoDeque[i]->GetStatus()) {
82                         this->m_ImgUndoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
83                 } //fi
84         } //rof
85           //Adding CurrentUndoPos to memory
86         if ((this->m_CurrentUndoPos != -1)
87                         && !(this->m_ImgUndoDeque[this->m_CurrentUndoPos]->GetStatus())) {
88                 this->m_ImgUndoDeque[this->m_CurrentUndoPos]->LoadImageMHDToMemory(
89                                 this->m_GlobalPath);
90         }
91         //The same for the redo queue
92 }
93
94 void Image3DDequeUR::SetGlobalPath(const StringType& globalPath) {
95         this->m_GlobalPath = globalPath;
96 }
97
98 void Image3DDequeUR::CleanHardDisk() {
99         for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) {
100                 this->m_ImgUndoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
101         }
102 }
103
104 Image3DDequeUR::StringType Image3DDequeUR::GetGlobalPath() {
105         return (this->m_GlobalPath);
106 }
107
108 Image3DDequeUR::StringType Image3DDequeUR::GetImageName(const int & pos,
109                 const bool& undo) {
110 //Giving a name to an image using the date and time
111         if (this->m_IDImages.empty()) {
112                 time_t rawtime;
113                 struct tm * timeinfo;
114                 char buffer[80];
115                 time(&rawtime);
116                 timeinfo = localtime(&rawtime);
117                 strftime(buffer, 80, "%H%M%S_%a_%d_%b_%y_", timeinfo);
118                 StringType date(buffer);
119                 StringType aux(buffer);
120                 this->m_IDImages = "img_" + aux;
121         }
122         std::stringstream ss; //create a stringstream
123         ss << pos; //add number to the stream
124         StringType imgType;
125         if (undo) {
126                 imgType = "undo";
127         } else {
128                 imgType = "redo";
129         }
130         StringType imageName = this->m_IDImages + imgType + ss.str();
131         imageName.append(".mhd");
132         return (imageName);
133 }