]> Creatis software - creaImageIO.git/blob - src/creaImageIOWxViewer.h
#3185 creaImageIO Feature New Normal - Clean code
[creaImageIO.git] / src / creaImageIOWxViewer.h
1 /*
2 # ---------------------------------------------------------------------
3 #
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image 
5 #                        pour la Santé)
6 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9 #
10 #  This software is governed by the CeCILL-B license under French law and 
11 #  abiding by the rules of distribution of free software. You can  use, 
12 #  modify and/ or redistribute the software under the terms of the CeCILL-B 
13 #  license as circulated by CEA, CNRS and INRIA at the following URL 
14 #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
15 #  or in the file LICENSE.txt.
16 #
17 #  As a counterpart to the access to the source code and  rights to copy,
18 #  modify and redistribute granted by the license, users are provided only
19 #  with a limited warranty  and the software's author,  the holder of the
20 #  economic rights,  and the successive licensors  have only  limited
21 #  liability. 
22 #
23 #  The fact that you are presently reading this means that you have had
24 #  knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------
26 */
27
28 #ifndef __creaImageIOWxViewer_h_INCLUDED__
29 #define __creaImageIOWxViewer_h_INCLUDED__
30
31 #ifdef USE_WXWIDGETS
32
33 // wx
34 #include <creaWx.h>
35 #include <wx/image.h>
36 #include <wx/imaglist.h>
37 #include <wx/splitter.h>
38
39
40 #include <creaImageIOImagePointerHolder.h>
41
42 // For image preview 
43 // vtk and wxvtk classes
44 #include "creawxVTKRenderWindowInteractor.h"
45 #include "vtkImageViewer2.h"
46
47 namespace creaImageIO
48 {
49
50   class WxViewerPlayer;
51
52   class WxViewer : public wxPanel
53   {
54  
55   public:
56     /// Ctors 
57     WxViewer();
58     WxViewer(wxWindow *parent, 
59                    const wxWindowID id,
60                    wxString title,
61                    const wxPoint& pos, 
62                    const wxSize& size);
63     /// Dtor
64     virtual ~WxViewer();
65     /// Shows the next image in the image vector
66     void ShowNextImage();
67         ///Starts the image player
68         void StartPlayer();
69         ///Stops the image player
70     void StopPlayer();
71         ///Refreshes the interface if the current image shown has changed
72     bool RefreshIfNecessary();
73         ///Sets a new image vector to be read
74         void SetImageVector(std::vector<boost::shared_ptr<ImagePointerHolder> > &pointers);
75
76         /// Set value of slider control
77         void SetValue();
78
79   private:
80
81     /// Event to resume or start cine loop
82         void OnCineLoop(wxCommandEvent &Event);
83
84         /// Event to change displayed frames with slide control
85         void OnSlide(wxCommandEvent &Event);
86
87
88     ///Shows the image passed as parameter
89     void ShowImage(vtkImageData* im);
90     /// Previewer
91     vtkImageViewer2* mViewer;
92
93         ///Slider
94         wxSlider *mslide ;
95
96         ///CheckBox to cine loop
97         wxCheckBox  *mcheck;
98
99     /// Associated wxvtk interactor
100         crea::creawxVTKRenderWindowInteractor  *mInteractor;
101         
102     /// Current extent 
103     int mx1,mx2,my1,my2,mz1,mz2;
104     /// Current spacing
105     double mspx,mspy,mspz;
106     /// Current image shown
107     int mCurrent;
108     ///The threaded movie player
109     WxViewerPlayer* mPlayer;
110     /// The mutex
111     wxMutex mMutex;
112     /// Boolean that declares if the player needs to be refreshed
113     bool mNeedRefresh;
114         ///Last image shown
115     vtkImageData* mLastImageShown;
116         ///The vectors of images to be shown
117         std::vector< boost::shared_ptr<ImagePointerHolder> > imagePointers;
118
119         /// Sizers to preview images 
120         wxFlexGridSizer *mflexSizer;
121         wxBoxSizer *mtopSizer;
122
123   };
124
125 }
126
127 #endif // USE_WIDGETS
128 // EOF
129 #endif