]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracas_N_ViewersWidget.cxx
No newline at end of file
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracas_N_ViewersWidget.cxx
index d9d07c600e6c16fb17c76652f651eac9d7d08f0f..d791fd378dcf97b3149349b6cf986e22744b5458 100644 (file)
@@ -3,8 +3,8 @@
   Program:   wxMaracas
   Module:    $RCSfile: wxMaracas_N_ViewersWidget.cxx,v $
   Language:  C++
-  Date:      $Date: 2008/10/31 16:32:42 $
-  Version:   $Revision: 1.1 $
+  Date:      $Date: 2009/05/14 13:54:35 $
+  Version:   $Revision: 1.9 $
 
   Copyright: (c) 2002, 2003
   License:
        wxMaracas_N_ViewersWidget::wxMaracas_N_ViewersWidget(wxWindow *parent, vtkImageData* imagedata, std::vector<int> *nTypeView)
                : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
        {
-               wxPanel                         *panel          = this;
-               wxWindow                                *wxwindow       = NULL;
-                                                               wxwindow1       = NULL;
-                                                               wxwindow2       = NULL;
-                                                               wxwindow3       = NULL;
-                                                               wxwindow4       = NULL;
-
-               if (nTypeView->size()==1)
-               {
-               wxwindow1 = new wxMaracas_ViewerWidget(panel, imagedata, (*nTypeView)[0]);
-               wxwindow1->ConfigureVTK();
-               wxwindow = wxwindow1;
-               }
-
-
-               if (nTypeView->size()==2)
-               {
-                       wxSplitterWindow        *spliter        = new wxSplitterWindow( panel , -1);
-                       wxwindow1 = new wxMaracas_ViewerWidget(spliter, imagedata, (*nTypeView)[0]);
-                       wxwindow2 = new wxMaracas_ViewerWidget(spliter, imagedata, (*nTypeView)[1]);
-                       wxwindow1->ConfigureVTK();
-                       wxwindow2->ConfigureVTK();
-                       spliter -> SplitVertically( wxwindow1 , wxwindow2  );
-                       wxwindow = spliter;
-               }
-
-
-               if (nTypeView->size()==3)
-               {
-                       wxSplitterWindow        *spliter        = new wxSplitterWindow( panel , -1);
-                       wxSplitterWindow        *spliterA       = new wxSplitterWindow( spliter , -1);
-                       wxwindow1 = new wxMaracas_ViewerWidget(spliter , imagedata, (*nTypeView)[0]);
-                       wxwindow2 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[1]);
-                       wxwindow3 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[2]);
-                       wxwindow1->ConfigureVTK();
-                       wxwindow2->ConfigureVTK();
-                       wxwindow3->ConfigureVTK();
-                       spliter -> SplitVertically( wxwindow1 , spliterA   );
-                       spliterA-> SplitHorizontally( wxwindow2 , wxwindow3  );
-                       wxwindow = spliter;
+               wxwindow1       = NULL;
+               wxwindow2       = NULL;
+               wxwindow3       = NULL;
+               wxwindow4       = NULL;
+
+               _currentwxw = NULL;
+
+               wxSizer *sizer  = new wxBoxSizer(wxVERTICAL);
+               this->SetSizer(sizer);
+               this->SetAutoLayout(true);
+               
+               
+               if(imagedata!=NULL && nTypeView!=NULL ){
+                       this->SetType(nTypeView);
+                       this->UpdateLayout(imagedata);
                }
 
-               if (nTypeView->size()>=4)
-               {
-                       wxSplitterWindow        *spliter        = new wxSplitterWindow( panel , -1);
-                       wxSplitterWindow        *spliterA       = new wxSplitterWindow( spliter , -1);
-                       wxSplitterWindow        *spliterB       = new wxSplitterWindow( spliter , -1);
-                       wxwindow1 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[0]);
-                       wxwindow2 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[1]);
-                       wxwindow3 = new wxMaracas_ViewerWidget(spliterB, imagedata, (*nTypeView)[2]);
-                       wxwindow4 = new wxMaracas_ViewerWidget(spliterB, imagedata, (*nTypeView)[3]);
-                       wxwindow1->ConfigureVTK();
-                       wxwindow2->ConfigureVTK();
-                       wxwindow3->ConfigureVTK();
-                       wxwindow4->ConfigureVTK();
-                       spliter -> SplitVertically( spliterA , spliterB   );
-                       spliterA-> SplitHorizontally( wxwindow1 , wxwindow2  );
-                       spliterB-> SplitHorizontally( wxwindow3 , wxwindow4  );
-                       wxwindow = spliter;
-               }
-
-
-       wxBoxSizer *sizer       = new wxBoxSizer(wxVERTICAL);
-       sizer->Add( wxwindow , 1, wxEXPAND, 0);
-       panel->SetSizer(sizer);
-       panel->SetAutoLayout(true);
-       panel->Layout();
+               
        }
        //-------------------------------------------------------------------------
          
        wxMaracas_N_ViewersWidget::~wxMaracas_N_ViewersWidget()
        {
+               
        }
        //------------------------------------------------------------------------------------------------------------
        // Methods
         wxPanel::Refresh(false);
  }
 
+ void wxMaracas_N_ViewersWidget::UpdateLayout(vtkImageData* imagedata){
 
+               wxWindow                                *wxwindow       = NULL;
+               wxSizer *sizer  = this->GetSizer();     
+               
+               if(_currentwxw != NULL){
+                       _currentwxw->Show(false);
+                       delete _currentwxw;
+                       //sizer->Remove(currentwxwindow);                       
+                       //delete currentwxwindow;
+               }
+
+               //std::cout<<"size "<<nTypeView->size()<<std::endl;
+               if (nTypeView->size()==1)
+               {
+                       wxwindow1 = new wxMaracas_ViewerWidget(this, imagedata, (*nTypeView)[0]);
+
+                       wxwindow1->ConfigureVTK();
+                       wxwindow = wxwindow1;
+               }else   if (nTypeView->size()==2)       {
+
+                       
+                       wxSplitterWindow        *spliter        = new wxSplitterWindow( this , -1);
+                       wxwindow1 = new wxMaracas_ViewerWidget(spliter, imagedata, (*nTypeView)[0]);
+                       wxwindow2 = new wxMaracas_ViewerWidget(spliter, imagedata, (*nTypeView)[1]);
+                       wxwindow1->ConfigureVTK();
+                       wxwindow2->ConfigureVTK();
+                       spliter -> SplitVertically( wxwindow1 , wxwindow2  );
+                       wxwindow = spliter;
+               }else if (nTypeView->size()==3)
+               {
+                       wxSplitterWindow        *spliter        = new wxSplitterWindow( this , -1);
+                       wxSplitterWindow        *spliterA       = new wxSplitterWindow( spliter , -1);
+                       wxwindow1 = new wxMaracas_ViewerWidget(spliter , imagedata, (*nTypeView)[0]);
+                       wxwindow2 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[1]);
+                       wxwindow3 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[2]);
+                       wxwindow1->ConfigureVTK();
+                       wxwindow2->ConfigureVTK();
+                       wxwindow3->ConfigureVTK();
+                       spliter -> SplitVertically( wxwindow1 , spliterA   );
+                       spliterA-> SplitHorizontally( wxwindow2 , wxwindow3  );
+                       wxwindow = spliter;
+               }else if (nTypeView->size()>=4){
+                       wxSplitterWindow        *spliter        = new wxSplitterWindow( this , -1);
+                       wxSplitterWindow        *spliterA       = new wxSplitterWindow( spliter , -1);
+                       wxSplitterWindow        *spliterB       = new wxSplitterWindow( spliter , -1);
+                       wxwindow1 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[0]);
+                       wxwindow2 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[1]);
+                       wxwindow3 = new wxMaracas_ViewerWidget(spliterB, imagedata, (*nTypeView)[2]);
+                       wxwindow4 = new wxMaracas_ViewerWidget(spliterB, imagedata, (*nTypeView)[3]);
+                       wxwindow1->ConfigureVTK();
+                       wxwindow2->ConfigureVTK();
+                       wxwindow3->ConfigureVTK();
+                       wxwindow4->ConfigureVTK();
+                       spliter -> SplitVertically( spliterA , spliterB   );
+                       spliterA-> SplitHorizontally( wxwindow1 , wxwindow2  );
+                       spliterB-> SplitHorizontally( wxwindow3 , wxwindow4  );
+                       wxwindow = spliter;
+               }
+               
+               //panel->SetDimension()
+               sizer->Add( wxwindow , 1, wxEXPAND);
+               sizer->Layout();
+               _currentwxw = wxwindow;         
+               _currentwxw->Show(true);
+               
+               this->Layout();
+               this->Refresh();
+ }
+
+ void wxMaracas_N_ViewersWidget::SetType(std::vector<int>* type){
+        nTypeView = type;
+ }
  void wxMaracas_N_ViewersWidget::SetImage( vtkImageData *image )
  {
-        if (wxwindow1!=NULL) { wxwindow1->SetImage(image); }
-        if (wxwindow2!=NULL) { wxwindow2->SetImage(image); }
+        if (wxwindow1!=NULL) { 
+                
+               wxwindow1->SetImage(image); 
+       }
+        if (wxwindow2!=NULL) { wxwindow2->SetImage(image); } 
         if (wxwindow3!=NULL) { wxwindow3->SetImage(image); }
         if (wxwindow4!=NULL) { wxwindow4->SetImage(image); }
+
+
  }