00001
00002 #ifndef wx_Reading_Priority_Panel_H
00003 #define wx_Reading_Priority_Panel_H
00004
00005 #include <wx/wx.h>
00006 #include <wx/slider.h>
00007 #include <wx/panel.h>
00008
00009
00010
00011
00012 #include "InterfaceVtkPanelWidgets.h"
00013
00014 #include "marGdcmDicom.h"
00015 #include "pPlotter/mBarRange.h"
00016
00017
00018
00019
00020
00021
00022 #define PriorityLoadImage_MAX_P 5
00023
00024 class PriorityLoop {
00025 public:
00026 PriorityLoop();
00027 virtual ~PriorityLoop();
00028 void SetStartEndActualMax(int start,int end, int actual,int deltaImg, int maxImages);
00029 void Iteration();
00030 void InitLoop();
00031
00032 void StopLoop();
00033 bool IsLoop();
00034 void WaitUntil_i_isDone(int i);
00035 void WaitUntil_segment_isDone(int start, int end,bool forceEndLoopRegion=true);
00036 void ForceEndLoopRegion();
00037 virtual void Action_i( int i );
00038 virtual void RefreshForce() {};
00039
00040 private:
00041
00042
00043 int _start;
00044 int _end;
00045 int _actual;
00046 int _deltaImg;
00047 int _maxImages;
00048 int _tstart;
00049 int _tend;
00050 int _tactual;
00051 int _tdeltaImg;
00052 int _tmaxImages;
00053
00054 int _counterReading;
00055 int _max_p;
00056 bool _loadingSerie;
00057 int _forceReadRegion;
00058 int _i_forceReadReagion;
00059 bool _needToChange;
00060
00061 int _priority;
00062 int _priorityType;
00063 bool _dg[PriorityLoadImage_MAX_P];
00064 int _counterActual[PriorityLoadImage_MAX_P];
00065 bool *_vecIdImage;
00066
00067 int Get_i_image();
00068 int Geti(int id,int step,int start,int actualg,int actuald,int end);
00069 bool _Action_i( int i );
00070 void Create_Empty_Vector();
00071 void InitConfiguration();
00072 bool _ForceEndLoopRegion();
00073 void NeedToChange();
00074 };
00075
00076
00077
00078
00079
00080 class BarLoading :public wxPanel{
00081 public:
00082 BarLoading(wxWindow *parent, int w, int h);
00083 virtual ~BarLoading();
00084 void SetI(int i);
00085 void Reset();
00086 void Paint();
00087 virtual void OnPaint( wxPaintEvent &WXUNUSED(event) );
00088 void SetSizeData(int sizeData);
00089 void RefreshForce();
00090 private:
00091 std::vector<int> lstInt;
00092 int _w;
00093 int _h;
00094 int _sizeData;
00095 wxBitmap *_bitmap;
00096 bool _flag_bitmap;
00097 bool _flag2_bitmap;
00098 DECLARE_CLASS(BarLoading)
00099
00100 DECLARE_EVENT_TABLE()
00101 };
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139 class PriorityLoadImageBar : public PriorityLoop{
00140 public:
00141 PriorityLoadImageBar(marFilesBase *marfilesbase, BarLoading *bar);
00142 virtual ~PriorityLoadImageBar();
00143 void Action_i(int i);
00144 virtual void RefreshForce();
00145
00146 private:
00147 marFilesBase *_marfilesbase;
00148 BarLoading *_bar;
00149 };
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174 WX_DEFINE_ARRAY(wxThread *, wxArrayThread);
00175
00176 class AdminThreadEED{
00177 public:
00178 AdminThreadEED();
00179 ~AdminThreadEED();
00180
00181 wxCriticalSection m_critsect;
00182
00183
00184 wxArrayThread m_threads;
00185
00186
00187 bool m_waitingUntilAllDone;
00188 wxCondition m_condAllDone;
00189
00190
00191 wxMutex m_mutexAllDone;
00192
00193 private:
00194 };
00195
00196
00197
00198
00199
00200 class MyThread : public wxThread{
00201 public:
00202 MyThread(PriorityLoop *priorityLoop, AdminThreadEED *adminThreadEED);
00203 virtual void* Entry();
00204 virtual void OnExit();
00205 private:
00206 PriorityLoop *_priorityLoop;
00207 AdminThreadEED *_adminThreadEED;
00208 };
00209
00210
00211
00212
00213
00214
00215 class LoadRangeImage : public wxPanel, InterfaceVtkPanelWidgets{
00216 public:
00217 LoadRangeImage(wxWindow *parent,marFilesBase *marfilesbase);
00218 virtual ~LoadRangeImage();
00219
00220
00221
00222 void OnSliceActual(wxScrollEvent& event);
00223 void OnBtnStart(wxCommandEvent& event);
00224 void OnBtnEnd(wxCommandEvent& event);
00225
00226 void Reset();
00227
00228 void RefreshSlice();
00229 void SetActualSlice(int actual);
00230 int GetActualSlice();
00231 void ResetActualSlice();
00232
00233 virtual void CallBackOnMouseWheel( wxMouseEvent& event );
00234 void Start();
00235 void ForceToFinisReadActiveImages();
00236 void GetROI( int extent[6] );
00237 void SetStartEnd( int start, int end );
00238
00239
00240
00241
00242
00243 void OnBarrange(wxCommandEvent& event);
00244 void OnActualChange_BarRange(wxCommandEvent& event);
00245 void OnStartChange_BarRange(wxCommandEvent& event);
00246 void OnEndChange_BarRange(wxCommandEvent& event);
00247 void OnBarMoved_BarRange(wxCommandEvent& event);
00248 void OnSelectionEnd_BarRange(wxCommandEvent& event);
00249
00250 void OnTimer(wxTimerEvent& event);
00251
00252 private:
00253
00254 wxTimer *_timer;
00255 bool reseteableActual;
00256 int _toShowSlice;
00257 int _maxZ;
00258 marFilesBase *_marfilesbase;
00259
00260
00261
00262 int _startSlice;
00263 int _endSlice;
00264
00265 BarLoading *_bar;
00266
00267
00268
00269
00270
00271 mBarRange *_sl_barRange_ROI;
00272 PriorityLoadImageBar *_priorityLoadImageBar;
00273 AdminThreadEED *_adminThreadEED;
00274 MyThread *_mythread;
00275
00276 wxFlexGridSizer *_sizer1a;
00277 wxButton *_btnStart;
00278 wxButton *_btnEnd;
00279 wxStaticText *_textActual;
00280
00281
00282
00283 void ResetLoadRegion();
00284 void _Start();
00285 void _Stop();
00286
00287 void SetStartSlice(int value);
00288 void SetEndSlice(int value);
00289
00290
00291 };
00292
00293
00294
00295
00296
00297
00298
00299 #endif // wx_Reading_Priority_Panel_H