]> Creatis software - creaContours.git/blob - lib/Interface_Icons_NDimensions/interfToolsPanels.cxx
*** empty log message ***
[creaContours.git] / lib / Interface_Icons_NDimensions / interfToolsPanels.cxx
1 #include "interfToolsPanels.h"
2 #include "interfMainPanel.h"
3
4 interfConfigurationPanel::interfConfigurationPanel(wxWindow * parent)
5 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
6 {
7 //      wxPanel *panel                                                  = new wxPanel(parent,-1,wxDefaultPosition, wxDefaultSize,wxNO_BORDER, wxString(_T("")));
8         _withOfContourLine                                              = new wxSlider(this, -1, 1 , 1, 10, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
9
10         double range[2];
11         interfMainPanel::getInstance()->getImageRange(range);
12         //this->_theViewPanel->getSceneManager()->GetImageDataRange(range);
13
14         //wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)this->_theViewPanel->getWxVtkBaseView();
15         //vtkImageViewer2 *imageviewer = wxvtk2dbaseview->_imageViewer2XYZ->GetVtkImageViewer2();
16         //int colorwindow = (int)imageviewer->GetWindowLevel()->GetLevel();
17         //int windowlevel = (int)imageviewer->GetWindowLevel()->GetWindow();    
18
19         int colorwindow = interfMainPanel::getInstance()->getColorWindow();
20         int windowlevel = interfMainPanel::getInstance()->getWindowLevel();
21
22         int min = (int)floor (range[0]);
23         int max = (int)ceil (range[1]);
24
25         
26         _brithtnessWindowLevel                                  = new wxSlider(this, -1, windowlevel , min, max, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
27         _brithtnessColorLevel                                   = new wxSlider(this, -1, colorwindow , min, max, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
28
29         _interpolationCheckBox = new wxCheckBox(this, -1, _T("Image interpolation") );
30         _interpolationCheckBox->SetValue(true);         
31
32         Connect( _withOfContourLine->GetId(),     wxEVT_SCROLL_CHANGED,           (wxObjectEventFunction) &interfConfigurationPanel::onWidthOfContour); 
33         Connect( _withOfContourLine->GetId(),     wxEVT_SCROLL_THUMBTRACK,        (wxObjectEventFunction) &interfConfigurationPanel::onWidthOfContour); 
34
35         Connect( _brithtnessWindowLevel->GetId(), wxEVT_SCROLL_CHANGED,           (wxObjectEventFunction) &interfConfigurationPanel::onBrigthnessColorWindowLevel); 
36         Connect( _brithtnessWindowLevel->GetId(), wxEVT_SCROLL_THUMBTRACK,        (wxObjectEventFunction) &interfConfigurationPanel::onBrigthnessColorWindowLevel); 
37         Connect( _brithtnessColorLevel->GetId() , wxEVT_SCROLL_CHANGED,           (wxObjectEventFunction) &interfConfigurationPanel::onBrigthnessColorWindowLevel); 
38         Connect( _brithtnessColorLevel->GetId() , wxEVT_SCROLL_THUMBTRACK,        (wxObjectEventFunction) &interfConfigurationPanel::onBrigthnessColorWindowLevel); 
39         Connect( _interpolationCheckBox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &interfConfigurationPanel::OnInterpolation);
40
41         wxFlexGridSizer * sizer                                 = new wxFlexGridSizer(1);
42         sizer -> Add( new wxStaticText(this,-1,_T("Contour width"))  , 1, wxGROW );
43         sizer -> Add( _withOfContourLine                , 1, wxGROW );
44         sizer -> Add( new wxStaticText(this,-1,_T(" "))  , 1, wxGROW );
45         sizer -> Add( new wxStaticText(this,-1,_T(" "))  , 1, wxGROW );
46         sizer -> Add( new wxStaticText(this,-1,_T("Brightness of the image"))  , 1, wxGROW );
47         sizer -> Add( new wxStaticText(this,-1,_T("--Window level--"))  , 1, wxGROW );
48         sizer -> Add( _brithtnessWindowLevel            , 1, wxGROW );
49         sizer -> Add( new wxStaticText(this,-1,_T("--Color level--"))  , 1, wxGROW );
50         sizer -> Add( _brithtnessColorLevel, 1, wxGROW );
51         sizer -> Add( new wxStaticText(this,-1,_T(" "))  , 1, wxGROW );
52         sizer -> Add( new wxStaticText(this,-1,_T(" "))  , 1, wxGROW );
53         sizer -> Add( _interpolationCheckBox            , 1, wxGROW );
54
55         this->SetSizer( sizer );
56         //JCP 13-10-08
57         //panel->SetSize( sizepanel );
58         //13-10-08
59         this->SetAutoLayout( true );
60         this->Layout();
61         
62 }
63
64
65 interfConfigurationPanel::~interfConfigurationPanel()
66 {
67 }
68
69 void interfConfigurationPanel::onWidthOfContour(wxScrollEvent& event){
70
71     double width = (double)_withOfContourLine->GetValue() / 2.0;
72         interfMainPanel::getInstance()->onWidthOfContour(width);
73 }
74
75 void interfConfigurationPanel::onBrigthnessColorWindowLevel(wxScrollEvent& event){
76         int colorwindow                         = _brithtnessColorLevel->GetValue();
77         int windowlevel                         = _brithtnessWindowLevel->GetValue();
78
79
80         interfMainPanel::getInstance()->onBrigthnessColorWindowLevel(colorwindow, windowlevel);
81
82 }
83
84 void interfConfigurationPanel::OnInterpolation(wxCommandEvent& event)
85 {
86         
87         interfMainPanel::getInstance()->onInterpolation(_interpolationCheckBox->GetValue());
88         
89         
90 }
91
92 /**
93 ** Begin of the spread panel
94 **/
95
96 interfSpreadPanel::interfSpreadPanel(wxWindow* parent)
97 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
98 {
99
100         //wxPanel *panel                                = new wxPanel(parent,-1);
101
102         //_contourPropagation                   = new ContourPropagation();
103
104         //wxPanel *panel                                                        = new wxPanel(parent,-1,wxDefaultPosition, wxDefaultSize,wxNO_BORDER, wxString("",wxConvUTF8));
105
106         wxButton *spreadResetBtn        = new wxButton(this,-1,_T("Reset"),wxDefaultPosition, wxDefaultSize );
107         wxButton *spreadAddBtn          = new wxButton(this,-1,_T("Add"),wxDefaultPosition, wxDefaultSize);
108
109         wxString lstOptions[3];
110         lstOptions[0]=_T("A");
111         lstOptions[1]=_T("B");
112         lstOptions[2]=_T("C");
113         _spreadMethodRadiobox                                           = new wxRadioBox(this, -1, _T("Method (find ctrl. Points)"), wxDefaultPosition, wxDefaultSize, 3 , lstOptions,  3, wxRA_SPECIFY_COLS);
114         _spreadMethodRadiobox->SetSelection(2);
115
116         wxButton *spreadGoBtn           = new wxButton(this,-1,_T("Go"),wxDefaultPosition, wxDefaultSize);
117         _staticTextSpread                       = new wxStaticText(this,-1,_T("    "));
118
119         _wxtextctrlSpread           = new wxTextCtrl(this,-1, _T(""),wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
120         _wxtextctrlSpread->SetEditable(false);
121         
122         Connect( spreadResetBtn->GetId(),       wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfSpreadPanel::onSpreadReset ); 
123         Connect( spreadAddBtn->GetId(),         wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfSpreadPanel::onSpreadAdd ); 
124         Connect( spreadGoBtn->GetId(),          wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfSpreadPanel::onSpreadGo ); 
125
126         wxFlexGridSizer * sizer         = new wxFlexGridSizer(1);
127         sizer -> Add( spreadResetBtn            , 1, wxGROW );
128         sizer -> Add( spreadAddBtn                      , 1, wxGROW );
129         sizer -> Add( _spreadMethodRadiobox     , 1, wxGROW );
130         sizer -> Add( spreadGoBtn                       , 1, wxGROW );
131         sizer -> Add( _staticTextSpread         , 1, wxGROW );
132         sizer -> Add( _wxtextctrlSpread         , 1, wxGROW );
133
134
135         this->SetSizer( sizer );
136         //this->SetSize( wxDefaultSize );
137         this->SetAutoLayout( true );
138         this->Layout();
139         //return panel;
140 }
141
142 interfSpreadPanel::~interfSpreadPanel(){
143 }
144
145 void interfSpreadPanel::onSpreadReset(wxCommandEvent& event){
146         setStringSpread("   ");
147         _wxtextctrlSpread->SetValue(wxString("",wxConvUTF8));
148         interfMainPanel::getInstance()->resetAppend();  
149 }
150 void interfSpreadPanel::onSpreadAdd(wxCommandEvent& event){
151         interfMainPanel::getInstance()->onSpreadAdd();
152 }
153 void interfSpreadPanel::onSpreadGo(wxCommandEvent& event){
154
155
156         setStringSpread("   ");
157         int typeMethodFindCtrlPoints=_spreadMethodRadiobox->GetSelection();
158
159         interfMainPanel::getInstance()->onSpreadGo(typeMethodFindCtrlPoints);
160
161 }
162
163 void interfSpreadPanel::appendStringSpread(std::string val){
164         /* // if */
165         wxString newstring;
166         //newstring.Printf("%s %d -",_wxtextctrlSpread->GetValue(), actualSlice );
167         newstring.append(wxString(_wxtextctrlSpread->GetValue(),wxConvUTF8));
168         newstring.append(wxString(" ",wxConvUTF8));
169         newstring.append(wxString(val.c_str(),wxConvUTF8));
170         _wxtextctrlSpread->SetValue(newstring);
171 }
172
173 void interfSpreadPanel::setStringSpread(std::string stringtemp){
174
175         wxString newstring(stringtemp.c_str(),wxConvUTF8);
176         //_wxtextctrlSpread->SetEditable(true);
177         _staticTextSpread->SetLabel(newstring);
178         //_wxtextctrlSpread->SetEditable(false);
179 }
180
181 /**
182 ** Begin of information panel
183 **/
184 interfInformationPanel::interfInformationPanel(wxWindow * parent)
185 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
186 {
187         //wxPanel *panel                                                                        = new wxPanel(parent,-1,wxDefaultPosition, wxDefaultSize,wxTAB_TRAVERSAL);
188         wxString lstOptions[4];
189         lstOptions[0]=_T("Current Slice");
190         lstOptions[1]=_T("Range Slices");
191         lstOptions[2]=_T("All Slices");
192         _informationRadiobox                                                    = new wxRadioBox(this, -1, _T("Slice analysis"), wxDefaultPosition, wxSize(270,45), 3 , lstOptions,  3, wxRA_SPECIFY_COLS);
193
194         wxString lstOptContOperation[5];
195         lstOptContOperation[0]=_T("AND");
196         lstOptContOperation[1]=_T("OR");
197         lstOptContOperation[2]=_T("XOR");
198         lstOptContOperation[3]=_T("ALL");
199         _radiolstboxContourGroup                                                = new wxRadioBox(this, -1, _T("Contour group"), wxDefaultPosition, wxSize(270,45), 4 , lstOptContOperation,  4, wxRA_SPECIFY_COLS);
200
201         _XYZValues = new wxCheckBox(this, -1, _T("Save Contour Values") );
202         _XYZValues->SetValue(true);
203
204         _contourImage = new wxCheckBox(this, -1, _T("Extract Contours as Images") );
205         _contourImage->SetValue(true);  
206
207         _statistics = new wxCheckBox(this, -1, _T("Save Statistics") );
208         _statistics->SetValue(true);
209
210         wxButton *informationContourLabelsBtn                   = new wxButton(this,-1,_T("Contour labels"),wxDefaultPosition, wxSize(140,35) );
211         informationContourLabelsBtn->SetEventHandler( this );
212         Connect( informationContourLabelsBtn->GetId(),          wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfInformationPanel::onInformationContourLabels ); 
213
214         wxButton *statisticsContourBtn                                  = new wxButton(this,-1,_T("Contour statistics"),wxDefaultPosition, wxSize(140,35) );
215         statisticsContourBtn->SetEventHandler( this );
216         Connect( statisticsContourBtn->GetId(),         wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfInformationPanel::onExtractInformation ); 
217
218         wxButton *saveResultsBtn                                                = new wxButton(this,-1,_T("Save Results"),wxDefaultPosition, wxSize(140,35) );
219         saveResultsBtn->SetEventHandler( this );
220         Connect( saveResultsBtn->GetId(),               wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfInformationPanel::onSaveResults ); 
221
222
223         int sizeZ = interfMainPanel::getInstance()->GetImageDataSizeZ();
224         //_theViewPanel->getSceneManager()->GetImageDataSizeZ();                        
225         _mbarrangeSliceInformation                                      =  new mBarRange(this,65,65);
226         _mbarrangeSliceInformation->SetMin(0);
227         _mbarrangeSliceInformation->SetStart(0);
228         _mbarrangeSliceInformation-> SetOrientation( true );
229         _mbarrangeSliceInformation-> setActiveStateTo(true);
230         _mbarrangeSliceInformation-> setVisibleLabels( true );
231         _mbarrangeSliceInformation-> setDeviceEndMargin(10);
232         _mbarrangeSliceInformation-> setRepresentedValues( 0 , sizeZ-1 );
233         _mbarrangeSliceInformation-> setDeviceBlitStart(10,10); 
234         _mbarrangeSliceInformation-> setIfWithActualDrawed( false );
235         _mbarrangeSliceInformation-> SetStart( 0 );
236         _mbarrangeSliceInformation-> SetEnd( sizeZ-1 );  
237
238         double range[2];
239         interfMainPanel::getInstance()->getImageRange(range);
240
241         int min = (int)floor (range[0]);
242         int max = (int)ceil (range[1]);
243
244         _mbarrangeRangeInformation      =  new mBarRange(this,65,65);
245         _mbarrangeRangeInformation->SetMin(0);
246         _mbarrangeRangeInformation->SetStart(0);
247         _mbarrangeRangeInformation-> SetOrientation( true );
248         _mbarrangeRangeInformation-> setActiveStateTo(true);
249         _mbarrangeRangeInformation-> setVisibleLabels( true );
250         _mbarrangeRangeInformation-> setDeviceEndMargin(10);
251         _mbarrangeRangeInformation-> setRepresentedValues( min , max );
252         _mbarrangeRangeInformation-> setDeviceBlitStart(10,10); 
253         _mbarrangeRangeInformation-> setIfWithActualDrawed( false );
254         _mbarrangeRangeInformation-> SetStart( min );
255         _mbarrangeRangeInformation-> SetEnd( max );  
256
257         _staticTextInformation  = new wxStaticText(this,-1,_T("    "));
258
259         _grid = new wxGrid( this,
260                 wxID_ANY,
261                 wxPoint( 0, 0 ),
262                 wxSize( 200, 500 ) );
263
264         int i,gridCol=10,gridRow=sizeZ;
265         _grid->CreateGrid( 0, 0 );
266         _grid->AppendRows(gridRow);
267         _grid->AppendCols(gridCol);
268
269         for (i=0;i<gridRow;i++)
270         {
271                 _grid->SetRowLabelValue(i, _T(" ") );
272         }
273 //                      _grid->SetColLabelSize(0);
274
275
276         FillGridWithContoursInformation();
277
278         wxFlexGridSizer * sizerSave             = new wxFlexGridSizer(2,2);
279         sizerSave -> Add( new wxStaticText(this,-1,_T("Save Options: "))  , 1, wxGROW );
280         sizerSave->Add( _XYZValues, 1, wxALL ,2 );
281         sizerSave->Add( _statistics, 1, wxALL ,2 );
282         sizerSave->Add( _contourImage, 1, wxALL ,2 );
283
284         wxFlexGridSizer * sizerA                = new wxFlexGridSizer(10);
285         sizerA->Add( _informationRadiobox                       , 1, wxALL ,2 );
286         sizerA->Add( _radiolstboxContourGroup           , 1, wxALL ,2 );
287         sizerA->Add( sizerSave          , 1, wxALL ,2 );
288
289
290         wxFlexGridSizer * sizerB                = new wxFlexGridSizer(10);
291         sizerB->Add( informationContourLabelsBtn, 1, wxALL ,2 );
292         sizerB->Add( statisticsContourBtn, 1, wxALL ,2 );
293         sizerB->Add( saveResultsBtn, 1, wxALL ,2 );
294
295         wxFlexGridSizer * sizer         = new wxFlexGridSizer(1,8);
296         sizer->Add( sizerA                                              , 1, wxALL              , 0 );
297         sizer->Add( new wxStaticText(this               ,-1,_T("Slice Range"))  , 1, wxALL              , 0 );
298         sizer->Add( _mbarrangeSliceInformation  , 1, wxALL|wxGROW               , 2 );                  
299         sizer->Add( new wxStaticText(this               ,-1,_T("Gray Range"))   , 1, wxALL              , 0 );
300         sizer->Add( _mbarrangeRangeInformation  , 1, wxALL|wxGROW               , 2 );                  
301         sizer->Add( sizerB                                              , 1, wxEXPAND           , 0 );
302         sizer->Add( _staticTextInformation              , 1, wxEXPAND           , 0 );
303         sizer->Add( _grid                                               , 1, wxEXPAND   , 0 );
304
305         this->SetSizer( sizer );
306         this->SetSize( wxSize(1500,1500) );
307         //this->SetBackgroundColour( wxColour(100,100,100) );
308         this->SetAutoLayout( true );
309         this->Layout();
310         //return panel;
311 }
312 interfInformationPanel::~interfInformationPanel(){
313 }
314
315 void interfInformationPanel::onInformationContourLabels(wxCommandEvent& event){
316         wxBusyCursor wait;
317         FillGridWithContoursInformation();
318 }
319 void interfInformationPanel::onExtractInformation(wxCommandEvent& event){
320         wxBusyCursor wait;
321         _grid->ClearGrid();
322
323         int typeContourGroup = this->_radiolstboxContourGroup->GetSelection();
324         int selection = _informationRadiobox->GetSelection();
325         int minZ        = _mbarrangeSliceInformation->GetStart();
326         int maxZ        = _mbarrangeSliceInformation->GetEnd();
327
328         interfMainPanel::getInstance()->onInformationContourLabels(typeContourGroup, selection, minZ, maxZ);
329
330         
331 }
332 void interfInformationPanel::onSaveResults(wxCommandEvent& event)
333 {
334         wxFileDialog dialog(this, _T("Choose a filename"), _T(""), _T(""), wxFileSelectorDefaultWildcardStr, wxSAVE );
335         if (dialog.ShowModal() == wxID_OK)
336         {
337                 onExtractInformation( event );
338                 std::string directory=(const char *)(dialog.GetDirectory().mb_str());
339                 std::string namefile=(const char *)(dialog.GetFilename().mb_str());
340                 std::string filename = (const char *)(dialog.GetPath().mb_str() );
341                 int typeContourGroup = _radiolstboxContourGroup->GetSelection();
342                 interfMainPanel::getInstance()->onSaveResults(directory, namefile, filename, 
343                         typeContourGroup, _XYZValues->GetValue(), _contourImage->GetValue(), _statistics->GetValue());
344         }
345 }
346
347 void interfInformationPanel::FillGridWithContoursInformation(){
348
349         wxString tempString;
350         _grid->ClearGrid();
351         _grid->SetColLabelValue(0, _T("A") );
352         _grid->SetColLabelValue(1, _T("B") );
353         _grid->SetColLabelValue(2, _T("C") );
354         _grid->SetColLabelValue(3, _T("D") );
355         _grid->SetColLabelValue(4, _T("E") );
356         _grid->SetColLabelValue(5, _T("F") );
357         //_instantPanel->getInstant( tempVector );
358
359         int z,sizeZ = interfMainPanel::getInstance()->GetImageDataSizeZ();//->getSceneManager()->GetImageDataSizeZ();
360         int ii,sizeLstContourThings;
361         for ( z=0 ; z<sizeZ ; z++)
362         {               
363                 
364                 std::vector<std::string> lstContourThings = interfMainPanel::getInstance()->getOutlinesName(z);
365                         
366                         //this->_modelManager->getOutlinesAtInstant( &instant );
367
368                 sizeLstContourThings = lstContourThings.size();
369                 tempString.Printf(_T("%d - %d"),z, sizeLstContourThings);
370                 _grid->SetRowLabelValue(z, tempString );
371
372                 for (ii=0 ; ii<sizeLstContourThings ; ii++)
373                 {
374                         //ContourThing **contourthing = lstContourThings[ii];
375                         //tempString = wxString((*contourthing)->getName().c_str(),wxConvUTF8) ;
376                         tempString = wxString(lstContourThings[ii].c_str(),wxConvUTF8) ;
377                         _grid->SetCellValue( z, ii, tempString );
378                 }
379         }
380 }
381
382 void interfInformationPanel::setStringInfoPanel(wxString tmpString){
383         _staticTextInformation->SetLabel(tmpString);
384 }
385
386 void interfInformationPanel::setRowLabelInfoPanel(int z,wxString tempString){
387         _grid->SetRowLabelValue(z, tempString );
388 }
389
390 int interfInformationPanel::getNumberCols(){
391         return _grid->GetNumberCols();
392 }
393
394 void interfInformationPanel::appendCols(int numcols){
395     _grid->AppendCols(numcols);
396 }
397
398 void interfInformationPanel::setCellValue(int z,int tmpIntA,wxString tempString){
399         _grid->SetCellValue( z, tmpIntA , tempString );
400 }
401
402 void interfInformationPanel::setColLabel(int tmpIntB,wxString tmpTitleString){
403         _grid->SetColLabelValue(tmpIntB, tmpTitleString);
404 }
405
406 wxString interfInformationPanel::getCellValue(int j,int i){
407         return _grid->GetCellValue( j , i );
408 }
409