]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/include/wxMaracasFrame.cxx
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / include / wxMaracasFrame.cxx
diff --git a/lib/maracasVisuLib/src/interface/wxWindows/include/wxMaracasFrame.cxx b/lib/maracasVisuLib/src/interface/wxWindows/include/wxMaracasFrame.cxx
new file mode 100644 (file)
index 0000000..27b3afa
--- /dev/null
@@ -0,0 +1,476 @@
+/*=========================================================================
+
+ Program:   wxMaracas
+ Module:    $RCSfile: wxMaracasFrame.cxx,v $
+ Language:  C++
+ Date:      $Date: 2009/05/14 13:54:54 $
+ Version:   $Revision: 1.1 $
+
+  Copyright: (c) 2002, 2003
+  License:
+
+   This software is distributed WITHOUT ANY WARRANTY; without even
+   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+   PURPOSE.  See the above copyright notice for more information.
+
+=========================================================================*/
+
+// PS -> #include "wxMaracasDataBrowser.h"
+#include "wxMaracasParametersDialog.h"
+#include "wxMaracasImageBrowser.h"
+#include "wxMaracasHelpDialog.h"
+#include "wxMaracasFrame.h"
+#include "marDictionary.h"
+
+#include <wx/panel.h>
+#include <wx/toolbar.h>
+#include <wx/dialog.h>
+#include <wx/colordlg.h>
+// ----------------------------------------------------------------------------
+// Maracas "logic world" headers
+// ----------------------------------------------------------------------------
+
+
+//#ifndef __WXMSW__
+#   include "res/bitmaps/connect.xpm"
+#   include "res/bitmaps/params.xpm"
+#   include "res/bitmaps/imagebrowser.xpm"
+#   include "res/bitmaps/3D.xpm"
+#   include "res/bitmaps/plans.xpm"
+#   include "res/bitmaps/quant.xpm"
+#   include "res/bitmaps/rotate.xpm"
+#   include "res/bitmaps/bright.xpm"
+#   include "res/bitmaps/pan.xpm"
+#   include "res/bitmaps/zoom.xpm"
+#   include "res/bitmaps/clear.xpm"
+#   include "res/bitmaps/intensity.xpm"
+#   include "res/bitmaps/help.xpm"
+#   include "res/bitmaps/creatis_logo.xpm"
+#   include "res/icons/maracas.xpm"
+//#endif
+
+BEGIN_EVENT_TABLE( wxMaracasFrame, wxFrame )
+       // PS -> EVT_MENU( ID_TOOLBAR_DATA_BROWSER, wxMaracasFrame::OnLoadPatientData )
+       EVT_MENU( ID_TOOLBAR_PARAMETERS, wxMaracasFrame::OnParameters )
+       // PS -> EVT_MENU( ID_TOOLBAR_IMAGE_BROWSER, wxMaracasFrame::OnLoadImageData )
+       EVT_MENU( ID_TOOLBAR_3D_BROWSER, wxMaracasFrame::OnStartExperiment )
+       // PS -> EVT_MENU( ID_TOOLBAR_HELP, wxMaracasFrame::OnHelp )
+       EVT_MENU( ID_TOOLBAR_PLANS, wxMaracasFrame::OnQuant )
+
+// EED : This is not top  !!!!!!!!!!!
+       EVT_TOOL( 19999, wxMaracasFrame::OnRegenerateAll                )
+       EVT_TOOL( 19998, wxMaracasFrame::OnRegenerateSplineAxe  )
+       EVT_TOOL( 19997, wxMaracasFrame::OnCleanContours                )
+       EVT_TOOL( 19996, wxMaracasFrame::OnRegenerateSignal             )
+
+
+       EVT_CLOSE( wxMaracasFrame::OnQuit )
+
+       EVT_TOOL(wxSurfaceWidget::ID_BUTTON_NEW_AXIS, wxMaracasFrame::OnNewAxis )
+       EVT_TOOL(wxSurfaceWidget::ID_BUTTON_DELETE_AXIS, wxMaracasFrame::OnDeleteAxis )
+END_EVENT_TABLE( );
+
+//----------------------------------------------------------------------------
+wxMaracasFrame::wxMaracasFrame( wxFrame *parent, wxWindowID id,
+                                                          marInterface *mar,marSimpleDicom *simpleDicom, char *dictionaryFileName,
+                                                          const wxString& title, const wxPoint& pos,
+                                                          const wxSize& size, long style)
+                                                          : wxFrame( parent, id, title, pos, size, style)
+{
+    _mar                                               = mar;
+       _marSimpleDicom                         = simpleDicom;
+       _wxmaracasquantification        = NULL;
+       _wxmaracas3dbrowser                     = NULL;
+
+       marDictionary marDict;
+//     marDict.LoadDictionary_French();
+       marDict.LoadDictionary_English();
+//     marDict.LoadDictionary_Japanese();
+       
+
+/*
+       if (!marDict.LoadDictionaryFile(dictionaryFileName)){
+                       wxMessageBox( "Error: File(s) marDict.txt not found...",
+                                         "DxMM : MARACAS", wxOK | wxCENTRE | wxICON_ERROR , this);
+       }
+*/
+
+    //good luck !
+    vtkObject *a = vtkObject::New();
+    a->GlobalWarningDisplayOff();
+    a->Delete();
+
+    // At the begining, there were nothing, just a window...
+    _actual_panel = NULL;
+
+    // And the programmer said: let there be a status bar
+    this->CreateStatusBar( );
+
+    this->GetStatusBar()->SetFieldsCount( 2 );
+    wxRect rect;
+    this->GetStatusBar()->GetFieldRect(1, rect);
+    //wxPoint pos;
+    //wxSize size;
+    //_progressGauge = new wxGauge( this->GetStatusBar(), -1, 100);
+       //    _progressGauge = new wxGauge( this->GetStatusBar(), -1, 50,
+       //    rect.GetPosition(), rect.GetSize());
+    this->GetStatusBar()->Show();
+    this->PositionStatusBar();
+
+    // And an icon (to be unique)
+    //TODO change the icon to the real one!
+    this->SetIcon( wxICON( maracas_icon ) );
+
+    // And a toolbar (for dummy users)
+    this->RecreateToolbar( );
+
+}
+//----------------------------------------------------------------------------
+void wxMaracasFrame::RecreateToolbar( )
+{
+    wxToolBar* toolBar = this->GetToolBar( );
+    delete toolBar;
+    this->SetToolBar( NULL );
+
+    toolBar = this->CreateToolBar( TOOLBAR_STYLE, ID_TOOLBAR );
+
+    // Set up toolbar
+    wxBitmap toolBarBitmaps[ 22+1 ];
+
+       /**
+       * wxBitmap vs. wxBITMAP -> add _xpm at the end of the file
+       */
+    toolBarBitmaps[  0 ] = wxBITMAP( toolbar_connect );
+    toolBarBitmaps[  4 ] = wxBITMAP( toolbar_params );
+    toolBarBitmaps[  7 ] = wxBITMAP( toolbar_imagebrowser );
+    toolBarBitmaps[  9 ] = wxBITMAP( toolbar_triD );
+
+    toolBarBitmaps[ 10 ] = wxBITMAP( toolbar_plans );
+    toolBarBitmaps[ 11 ] = wxBITMAP( toolbar_quant );
+    toolBarBitmaps[ 12 ] = wxBITMAP( toolbar_rotate );
+    toolBarBitmaps[ 13 ] = wxBITMAP( toolbar_bright );
+    toolBarBitmaps[ 14 ] = wxBITMAP( toolbar_pan );
+    toolBarBitmaps[ 15 ] = wxBITMAP( toolbar_zoom );
+    toolBarBitmaps[ 16 ] = wxBITMAP( toolbar_clear );
+    toolBarBitmaps[ 17 ] = wxBITMAP( toolbar_intensity );
+    toolBarBitmaps[ 20 ] = wxBITMAP( toolbar_help );
+    toolBarBitmaps[ 22 ] = wxBITMAP( creatis_logo );
+
+    /*
+       toolBarBitmaps[  1 ] = wxBitmap( toolbar_loadexp );
+       toolBarBitmaps[  2 ] = wxBitmap( toolbar_save );
+       toolBarBitmaps[  3 ] = wxBitmap( toolbar_excel );
+       toolBarBitmaps[  5 ] = wxBitmap( toolbar_wizard );
+       toolBarBitmaps[  6 ] = wxBitmap( toolbar_back );
+       toolBarBitmaps[  8 ] = wxBitmap( toolbar_subtract );
+
+        toolBarBitmaps[ 18 ] = wxBitmap( toolbar_linear );
+        toolBarBitmaps[ 19 ] = wxBitmap( toolbar_area );
+    */
+    // Set size & margins
+    toolBar->SetMargins( 4, 4 );
+// PS -> #ifdef DXMM
+    toolBar->SetToolBitmapSize( wxSize( toolBarBitmaps[ 4 ].GetWidth( ), toolBarBitmaps[ 4 ].GetHeight( ) ) );
+// PS -> #else
+// PS ->     toolBar->SetToolBitmapSize( wxSize( toolBarBitmaps[ 0 ].GetWidth( ), toolBarBitmaps[ 0 ].GetHeight( ) ) );
+// PS -> #endif
+
+    // Adding tools
+// PS -> #ifndef DXMM
+// PS ->     toolBar->AddTool( ID_TOOLBAR_DATA_BROWSER, toolBarBitmaps[ 0 ], "Patient data", "Load patient data: studies & series" );
+// PS ->     toolBar->AddSeparator( );
+// PS ->     toolBar->AddTool( ID_TOOLBAR_IMAGE_BROWSER, toolBarBitmaps[ 7 ], "Load image data", "Load DICOM images from disk" );
+// PS ->     toolBar->AddSeparator( );
+// PS -> #endif
+    toolBar->AddTool( ID_TOOLBAR_3D_BROWSER, toolBarBitmaps[ 9 ], _T("Start 3D"), _T("Load 3D representation") );
+    toolBar->AddSeparator( );
+    toolBar->AddTool( ID_TOOLBAR_PLANS, toolBarBitmaps[ 10 ], _T("Plan"), _T("Planes") );
+    toolBar->AddSeparator( );
+//    toolBar->AddTool( ID_TOOLBAR_QUANT, toolBarBitmaps[ 11 ], "Quant", "Quant" );
+//    toolBar->AddSeparator( );
+    //The following has been commented out temporarlily
+    /*
+    toolBar->AddTool( ID_TOOLBAR_ROTATE, toolBarBitmaps[ 12 ], "Rotate", "Rotate" );
+    toolBar->AddSeparator( );
+    toolBar->AddTool( ID_TOOLBAR_BRIGHT, toolBarBitmaps[ 13 ], "Bright", "Bright" );
+    toolBar->AddSeparator( );
+    toolBar->AddTool( ID_TOOLBAR_PAN, toolBarBitmaps[ 14 ], "Pan", "Pan" );
+    toolBar->AddSeparator( );
+    toolBar->AddTool( ID_TOOLBAR_ZOOM, toolBarBitmaps[ 15 ], "Zoom", "Zoom" );
+    toolBar->AddSeparator( );
+    toolBar->AddTool( ID_TOOLBAR_CLEAR, toolBarBitmaps[ 16 ], "Clear", "Clear" );
+    toolBar->AddSeparator( );
+    toolBar->AddTool( ID_TOOLBAR_INTENSITY, toolBarBitmaps[ 17 ], "Intensity", "Intensity" );
+    toolBar->AddSeparator( );*/
+    toolBar->AddTool( ID_TOOLBAR_PARAMETERS, toolBarBitmaps[ 4 ], _T("Parameters"), _T("Load parameters for modifying") );
+    //toolBar->AddTool( ID_TOOLBAR_HELP, toolBarBitmaps[ 20 ], "Help", "Help" );
+    toolBar->AddSeparator( );
+
+       wxBitmapButton *btnCreatisLogo = new wxBitmapButton(toolBar,-1,toolBarBitmaps[ 22 ] );
+       btnCreatisLogo->SetSize(81+10,20+10);
+       btnCreatisLogo->SetBackgroundColour(wxColour(0,0,153));
+       Connect(btnCreatisLogo->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxMaracasFrame::OnAboutCreatis );
+
+       toolBar->AddControl(btnCreatisLogo);
+
+
+
+    toolBar->Realize( );
+    toolBar->SetRows( 1 );
+    toolBar->EnableTool(ID_TOOLBAR_3D_BROWSER, true);
+    toolBar->EnableTool(ID_TOOLBAR_PLANS, false);
+    toolBar->EnableTool(ID_TOOLBAR_QUANT, false);
+}
+
+//----------------------------------------------------------------------------
+void wxMaracasFrame::OnAboutCreatis( wxCommandEvent& event ){
+       wxMaracasHelpDialog *dlg = new wxMaracasHelpDialog(this, -1, "Creatis", wxPoint(200,200), wxDefaultSize, wxDEFAULT_DIALOG_STYLE);
+       dlg->ShowModal();
+       dlg->Close();
+}
+
+//----------------------------------------------------------------------------
+void wxMaracasFrame::OnQuit( wxCloseEvent& event ){
+
+       DeletePanels();
+       if (_mar!=NULL) { delete _mar; }
+       _mar=NULL;
+       marDictionary marDict;
+       marDict.FreeDictionary();
+
+
+//     this->Show(FALSE);
+       this->Destroy();
+       delete this;
+}
+//----------------------------------------------------------------------------
+// PS -> void wxMaracasFrame::OnLoadPatientData( wxCommandEvent& event )
+// PS -> {
+// PS ->       wxBusyCursor wait;
+// PS ->     wxToolBar* toolBar = this->GetToolBar( );
+// PS ->     //Disabling tool
+// PS ->     //wxToolBar::EnableTool This function should only be called after Realize.
+// PS ->     toolBar->EnableTool(ID_TOOLBAR_IMAGE_BROWSER, false);
+// PS ->     toolBar->EnableTool(ID_TOOLBAR_3D_BROWSER, true);
+// PS ->     toolBar->EnableTool(ID_TOOLBAR_PLANS, true);
+// PS ->     toolBar->EnableTool(ID_TOOLBAR_QUANT, false);
+// PS -> 
+// PS ->       //  Create panel
+// PS ->       if( _actual_panel != NULL ) delete _actual_panel;
+// PS ->       wxMaracasDataBrowser* pnl = new wxMaracasDataBrowser( this, _mar, -1 );
+// PS -> 
+// PS ->       _actual_panel = pnl;
+// PS -> 
+// PS ->       // cf.: http://www.wxwindows.org/manuals/2.4.0/wx490.htm
+// PS ->       // Force a resize. This should probably be replaced by a call to a wxFrame
+// PS ->       // function that lays out default decorations and the remaining content window.
+// PS ->       wxSizeEvent myevent(wxSize(-1, -1), this->GetId());
+// PS ->       this->OnSize(myevent);
+// PS ->       this->Show(true);
+// PS -> 
+// PS ->       // Load panel data
+// PS ->       pnl->LoadData( );
+// PS ->       //this->GetToolBar()->EnableTool(ID_TOOLBAR_3D_BROWSER, false);
+// PS -> }
+//----------------------------------------------------------------------------
+void wxMaracasFrame::OnParameters( wxCommandEvent& event )
+{
+/* EED Photo Maracas
+  //-- 
+       wxWindowDC *wxwindc =new wxWindowDC(this);
+       wxCoord w, h;
+       wxwindc->GetSize(&w, &h);
+       wxBitmap *wxbitmap =new wxBitmap(w, h);
+       wxMemoryDC *wxmemorydc = new wxMemoryDC();
+
+       wxmemorydc->SelectObject(*wxbitmap);
+       wxmemorydc->Blit(0,0,w,h,wxwindc,0,0);
+
+       wxbitmap->SaveFile("c:/tmp/MaracasPlamavic.bmp", wxBITMAP_TYPE_BMP  );
+       delete wxwindc;
+       delete wxbitmap;
+       delete wxmemorydc;
+  //-- 
+*/
+       wxMaracasParametersDialog *d = new wxMaracasParametersDialog( this, _mar );
+       d->ShowModal( );
+       d->Close(true);
+/*
+       if (d->IfInitContour()==true){
+       } else {
+       }
+       if (d->GetInitContour()==true){
+       }
+       wxmaracasquantification;
+       if (wxmaracas3dbrowser!=NULL){ 
+       }
+*/
+}
+//----------------------------------------------------------------------------
+// PS -> void wxMaracasFrame::OnLoadImageData( wxCommandEvent& event )
+// PS -> {
+// PS ->       wxBusyCursor wait;
+// PS -> 
+// PS ->       //  Create panel
+// PS ->       if( _actual_panel != NULL ) delete _actual_panel;
+// PS ->       wxMaracasImageBrowser* pnl = new wxMaracasImageBrowser( this, _mar, -1 );
+// PS -> 
+// PS ->       // Resize
+// PS ->       _actual_panel = pnl;
+// PS -> 
+// PS ->       // Load panel data
+// PS ->       wxSizeEvent myevent(wxSize(-1, -1), this->GetId());
+// PS ->       this->OnSize(myevent);
+// PS ->       //this->Show(true);
+// PS -> 
+// PS ->       //wxDialog dialog(this, -1, "coucou");
+// PS ->       //dialog.ShowModal();
+// PS ->       //dialog.Show(true);
+// PS ->       //wxGauge gauge( this, -1, 50);
+// PS -> 
+// PS ->     /**
+// PS ->       AS a first step I'll pass a wxGauge as parameter this doesn't
+// PS ->       sound very good, should use EVT_TIMER instead...
+// PS ->     */
+// PS ->     _mar->_dicom->loadActualSerie( this->_progressGauge );
+// PS ->     vtkImageData *dummy = _mar->_dicom->getVolume( )->castVtk();
+// PS ->     //float range[2];
+// PS ->     //dummy->GetScalarRange( range );
+// PS -> 
+// PS ->     pnl->LoadData( dummy );
+// PS ->     //_view_image->ConstructVTK(  (vtkImageData *)_mar->_dicom->getVolume( ));
+// PS ->     //^ this is not working ??? I don't understand why, some VTK pipeline mystery
+// PS -> 
+// PS ->     this->GetToolBar()->EnableTool(ID_TOOLBAR_IMAGE_BROWSER, false);
+// PS ->     this->GetToolBar()->EnableTool(ID_TOOLBAR_3D_BROWSER, true);
+// PS ->       //Add patient name to the frame title
+// PS ->     this->SetTitle( "Patient Name : " + _mar->_dicom->GetPatientName() );
+// PS -> }
+//----------------------------------------------------------------------------
+void wxMaracasFrame::OnStartExperiment( wxCommandEvent& event )
+{
+       
+       wxBusyCursor wait;
+
+       int voi[ 6 ];
+// PS -> #ifndef DXMM
+// PS ->     ((wxMaracasImageBrowser*)_actual_panel )->GetROI( voi );
+// PS -> #else
+
+       _marSimpleDicom->loadActualSerie( this->_progressGauge );
+       _mar->_dicom->SetVolume( _marSimpleDicom->getVolume() );
+
+
+       voi[0] = 0;
+       voi[1] = (_mar->_dicom->getVolume( )->getXdim( ))-1;
+       voi[2] = 0;
+       voi[3] = (_mar->_dicom->getVolume( )->getYdim( ))-1;
+       voi[4] = 0;
+       voi[5] = (_mar->_dicom->getVolume( )->getZdim( ))-1;
+// PS -> #endif
+
+       _mar->_experiment->setVOI( voi );
+       _mar->initExperiment( );
+
+       //  Create panel
+    DeletePanels();
+       _wxmaracas3dbrowser = new wxMaracas3DBrowser( this, _mar, -1 ,ID_TOOLBAR_PLANS);
+
+       // Resize
+       _actual_panel = _wxmaracas3dbrowser;
+
+       wxSizeEvent myevent(wxSize(-1, -1), this->GetId());
+       this->OnSize(myevent);
+       //this->Show(true);
+
+       // Load panel data
+       _wxmaracas3dbrowser->LoadData( );
+
+// PS -> #ifndef DXMM
+// PS ->       this->GetToolBar()->EnableTool(ID_TOOLBAR_IMAGE_BROWSER, true);
+// PS ->       this->GetToolBar()->EnableTool(ID_TOOLBAR_3D_BROWSER, false);
+// PS -> #else
+       this->GetToolBar()->EnableTool(ID_TOOLBAR_PLANS, false);
+       this->GetToolBar()->EnableTool(ID_TOOLBAR_3D_BROWSER, false);
+       this->GetToolBar()->EnableTool(ID_TOOLBAR_QUANT, false);
+// PS -> #endif
+}
+//----------------------------------------------------------------------------
+// PS -> void wxMaracasFrame::OnHelp (wxCommandEvent& event )
+// PS -> {
+// PS ->       wxMaracasHelpDialog* help = new wxMaracasHelpDialog(this, -1);
+// PS -> 
+// PS ->       help->ShowModal();
+// PS -> }
+
+//----------------------------------------------------------------------------
+void wxMaracasFrame::DeletePanels ( ){
+       if (_wxmaracasquantification!=NULL){ 
+               delete _wxmaracasquantification;
+               _wxmaracasquantification=NULL;
+       }
+       if (_wxmaracas3dbrowser!=NULL){ 
+               delete _wxmaracas3dbrowser;
+               _wxmaracas3dbrowser=NULL;
+       }
+}
+//----------------------------------------------------------------------------
+void wxMaracasFrame::OnQuant (wxCommandEvent& event ){
+       int isovalue = 50;
+       int opacity  = 50;
+
+       if (_wxmaracas3dbrowser!=NULL){ 
+               isovalue = _wxmaracas3dbrowser->GetIsovalue();
+               opacity  = _wxmaracas3dbrowser->GetOpacity();
+       }
+
+    DeletePanels();
+       _wxmaracasquantification = new wxMaracasQuantification( this, _mar, -1 );
+       _actual_panel = _wxmaracasquantification;
+
+       wxSizeEvent myevent(wxSize(-1, -1), this->GetId());
+       this->OnSize(myevent);
+       this->Show(true);
+
+       // Load panel data
+       _wxmaracasquantification->LoadData( );
+       _wxmaracasquantification->SetSlider_Isovalue_Opacity(isovalue,opacity);
+       this->GetToolBar()->EnableTool(ID_TOOLBAR_PLANS, false);
+       this->GetToolBar()->EnableTool(ID_TOOLBAR_3D_BROWSER, true);
+}
+//----------------------------------------------------------------------------
+void wxMaracasFrame::OnNewAxis(wxCommandEvent &WXUNUSED(event))
+{
+       this->GetToolBar()->EnableTool(ID_TOOLBAR_PLANS, true);
+       this->GetToolBar()->EnableTool(ID_TOOLBAR_3D_BROWSER, false);
+       this->GetToolBar()->EnableTool(ID_TOOLBAR_QUANT, true);
+}
+//----------------------------------------------------------------------------
+void wxMaracasFrame::OnDeleteAxis(wxCommandEvent &WXUNUSED(event))
+{
+       this->GetToolBar()->EnableTool(ID_TOOLBAR_PLANS, false);
+       this->GetToolBar()->EnableTool(ID_TOOLBAR_3D_BROWSER, false);
+       this->GetToolBar()->EnableTool(ID_TOOLBAR_QUANT, false);
+}
+//----------------------------------------------------------------------------
+void wxMaracasFrame::OnRegenerateAll(  wxCommandEvent& event  ){
+       if (_wxmaracas3dbrowser!=NULL)          { _wxmaracas3dbrowser->RegenerateAll(true);             }
+       if (_wxmaracasquantification!=NULL) { _wxmaracasquantification->RegenerateAll(true);}
+}
+//----------------------------------------------------------------------------
+void wxMaracasFrame::OnRegenerateSplineAxe(  wxCommandEvent& event  ){
+       if (_wxmaracas3dbrowser!=NULL)          { _wxmaracas3dbrowser->RegenerateAll(false);            }
+       if (_wxmaracasquantification!=NULL) { _wxmaracasquantification->RegenerateAll(false);   }
+}
+//----------------------------------------------------------------------------
+void wxMaracasFrame::OnCleanContours(  wxCommandEvent& event  ){
+       if (_wxmaracasquantification!=NULL) { _wxmaracasquantification->CleanContours();        }
+}
+//----------------------------------------------------------------------------
+void wxMaracasFrame::OnRegenerateSignal(  wxCommandEvent& event  ){
+       if (_wxmaracasquantification!=NULL) { _wxmaracasquantification->RegenerateSignal();     }
+}
+//----------------------------------------------------------------------------
+
+
+