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/03/24 10:49:21 $
+ Version: $Revision: 1.3 $
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;
+ wxwindow1 = NULL;
+ wxwindow2 = NULL;
+ wxwindow3 = NULL;
+ wxwindow4 = NULL;
+ currentwxwindow = 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()==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;
- }
-
- 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();
+
}
//-------------------------------------------------------------------------
wxPanel::Refresh(false);
}
+ void wxMaracas_N_ViewersWidget::UpdateLayout(vtkImageData* imagedata){
+
+ wxPanel *panel = this;
+ wxWindow *wxwindow = NULL;
+ wxSizer *sizer = panel->GetSizer();
+
+ if(currentwxwindow!=NULL){
+ sizer->Remove(currentwxwindow);
+ delete currentwxwindow;
+ }
+
+ //std::cout<<"size "<<nTypeView->size()<<std::endl;
+ if (nTypeView->size()==1)
+ {
+ std::cout<<"type "<<(*nTypeView)[0]<<std::endl;
+ wxwindow1 = new wxMaracas_ViewerWidget(panel, imagedata, (*nTypeView)[0]);
+ wxwindow1->ConfigureVTK();
+ wxwindow = wxwindow1;
+ }else 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;
+ }else 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;
+ }else 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;
+ }
+
+ //panel->SetDimension()
+ sizer->Add( wxwindow , 1, wxGROW);
+ sizer->Layout();
+ currentwxwindow = wxwindow;
+ currentwxwindow->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); }
+
+
}