]> Creatis software - clitk.git/blob - vv/vvMainWindow.h
e01bcec1d55763f0786a7e622408e69522f2abc7
[clitk.git] / vv / vvMainWindow.h
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to: 
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://www.centreleonberard.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ===========================================================================**/
18
19 #ifndef VVMAINWINDOW_H
20 #define VVMAINWINDOW_H
21
22 #include <iostream>
23 #include <vector>
24 #include "ui_vvMainWindow.h"
25 #include "vvMainWindowBase.h"
26 #include "vvToolManager.h"
27 #include "vvImageReader.h"
28 #include "vvMesh.h"
29 #include "clitkMemoryUsage.h"
30
31 #include "vtkSmartPointer.h"
32
33
34 class vvSlicerManager;
35 class vvHelpDialog;
36 class vvDocumentation;
37 class vtkRenderWindowInteractor;
38 class vtkImageData;
39 class vtkRenderer;
40 class vtkMatrix4x4;
41 class vvDicomSeriesSelector;
42 class vvSlicer;
43
44 //------------------------------------------------------------------------------
45 class vvMainWindow: public vvMainWindowBase,
46                     private Ui::vvMainWindow
47 {
48   Q_OBJECT
49
50   public:
51   vvMainWindow();
52   ~vvMainWindow();
53   void LoadImages(std::vector<std::string> filenames, vvImageReader::LoadedImageType type);
54   vvSlicerManager * AddImage(vvImage::Pointer image,std::string filename);
55   void AddField(QString file,int index);
56   void AddOverlayImage(int index, QString filename);
57   void AddFusionImage(int index, QString filename);
58   void AddROI(int index, QString filename);
59   ///Adds a mesh to a SlicerManager, with optional warping by vector field
60   void AddContour(int image_index, vvMesh::Pointer contour, bool propagation);
61   ///This is used to show an image when opened or computed
62   void ShowLastImage();
63
64   virtual void UpdateCurrentSlicer();
65   virtual QTabWidget * GetTab();
66   //vvMainWindowToolInfo * GetInfoForTool();
67 //   void AddRunningTool(vvToolCreatorBase * tool);
68
69 public slots:
70   ///Allows the user to open and select various surfaces contained in a dicom-struct file
71   void OpenDCStructContour();
72   ///Computes the midposition image of a 4D sequence with a VF and displays it
73   void ComputeMidPosition();
74   void OpenImages();
75   ///Slot triggered by the dynamically-generated recent file menu actions
76   void OpenRecentImage();
77   void OpenImageWithTime();
78   void MergeImages();
79   void SliceImages();
80   void MergeImagesWithTime();
81   void OpenDicom();
82   ///Open a vtkPolyData surface mesh and display it over the current image
83   void OpenVTKContour();
84   void SaveAs();
85   void CurrentImageChanged(std::string id);
86   void CurrentPickedImageChanged(std::string id);
87   void ImageInfoChanged();
88   void ShowHelpDialog();
89   void ShowDocumentation();
90   void ComputeDeformableRegistration();
91   void WarpImage();
92   void ChangeViewMode();
93   void DisplayChanged(QTreeWidgetItem *item, int column);
94   void CloseImage(QTreeWidgetItem* item, int column);
95   void ReloadImage(QTreeWidgetItem* item, int column);
96   void MousePositionChanged(int visibility, double x, double y, double z, double X, double Y, double Z , double value);
97   void VectorChanged(int visibility, double x, double y, double z, double value);
98   void OverlayChanged(int visibility, double valueOver, double valueRef);
99   void FusionChanged(int visibility, double value);
100   void SegmentationOnCurrentImage();
101   void SurfaceViewerLaunch();
102
103   void WindowsChanged(int window, int view, int slice);
104   void WindowLevelChanged(double window, double level,int preset, int colormap);
105   void UpdateSlice(int slicer, int slice);
106   void UpdateTSlice(int slicer, int slice);
107   void UpdateSliceRange(int slicer, int min, int max, int tmin, int tmax);
108   void WindowLevelEdited();
109   void UpdateColorMap();
110   void UpdateWindowLevel();
111   void SwitchWindowLevel();
112   void ApplyWindowLevelToAllImages();
113   void UpdateLinkManager(std::string id, int slicer, double x, double y, double z, int temps);
114   void UpdateLinkedNavigation(std::string id, vvSlicerManager *sm, vvSlicer* refSlicer);
115   void AddLink(QString image1,QString image2);
116   void RemoveLink(QString image1,QString image2);
117   void ChangeImageWithIndexOffset(vvSlicerManager *sm, int slicer, int offset);
118
119   ///Generic method called when any one of the horizontal sliders is moved
120   void HorizontalSliderMoved(int value,int column, int slicer_index);
121   void NOHorizontalSliderMoved();
122   void NEHorizontalSliderMoved();
123   void SOHorizontalSliderMoved();
124   void SEHorizontalSliderMoved();
125
126   void NOVerticalSliderChanged();
127   void NEVerticalSliderChanged();
128   void SOVerticalSliderChanged();
129   void SEVerticalSliderChanged();
130
131   void SaveNEScreenshot();
132   void SaveNOScreenshot();
133   void SaveSEScreenshot();
134   void SaveSOScreenshot();
135
136   void ShowContextMenu(QPoint point);
137   void CloseImage();
138   void ReloadImage();
139   void OpenField();
140   void SelectOverlayImage();
141   void SelectFusionImage();
142
143   void SetVFProperty(int subsampling,int scale,int lut, int width, double r, double g, double b);
144   void SetOverlayProperty(int color);
145   void SetFusionProperty(int opacity,int colormap,double window,double level);
146
147   void GoToCursor();
148   void PlayPause();
149   void PlayNext();
150   void ChangeFrameRate(int rate) {
151     mFrameRate = rate;
152   }
153   void UpdateRenderWindows();
154   void UpdateMemoryUsage();
155   
156 protected:
157   
158   void createRecentlyOpenedFilesMenu();
159   void updateRecentlyOpenedFilesMenu(const std::list<std::string> &files);
160   
161 private:
162
163   //variables
164   // std::vector<vvSlicerManager*> mSlicerManagers;
165   vvHelpDialog *help_dialog;
166   vvDocumentation *documentation;
167   vvDicomSeriesSelector *dicomSeriesSelector;
168
169   bool viewMode;
170   bool playMode;
171
172   //functions
173   void UpdateTree();
174   ///Adds a vector field to slicer manager index
175   void WarpImage(vvSlicerManager* selected_slicer,int reference_phase);
176   void AddFieldEntry(QString filename,int index,bool from_disk);
177   void AddField(vvImage::Pointer vf,QString file,int index);
178   void InitDisplay();
179   ///Sets the render window and LUT for the last SlicerManager
180   void InitSlicers();
181   void DisplaySliders(int slicer, int window);
182   QString GetSizeInBytes(unsigned long size);
183   QString GetVectorDoubleAsString(std::vector<double> vectorDouble);
184   QString GetVectorIntAsString(std::vector<int> vectorInt);
185   QString Get4x4MatrixDoubleAsString(vtkSmartPointer<vtkMatrix4x4> matrix);
186   int GetSlicerIndexFromItem(QTreeWidgetItem* item);
187   QTreeWidgetItem* GetItemFromSlicerManager(vvSlicerManager* sm);
188   void SaveScreenshot(QVTKWidget *widget);
189   int GetImageDuplicateFilenameNumber(std::string filename);
190
191   QMenu contextMenu;
192   QMenu* recentlyOpenedFilesMenu;
193   //QMenu *AddSubImageMenu;
194   std::vector<QAction*> contextActions;
195   std::vector<QSlider*> horizontalSliders;
196   std::vector<QSlider*> verticalSliders;
197   int mFrameRate;
198   
199   std::string mCurrentSelectedImageId;
200   std::string mCurrentPickedImageId;
201   unsigned int mCurrentPickedImageIndex;
202
203   // vvMainWindowToolInfo * mCurrentToolInfo;
204   // std::vector<vvToolCreatorBase*> mListOfRunningTool;
205
206   static vvMainWindow * mSingleton;
207
208   int mCurrentTime;
209   
210 };
211
212 #include "vvMainWindow.txx"
213
214 #endif