]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxViewer.cpp
No more cine loop, add a slider control by default to preview images
[creaImageIO.git] / src2 / creaImageIOWxViewer.cpp
index cf9f13cf32d38ae8d26227981e4cd82167bba15d..3aaf583e2a0ceb9d1dffadfe1363ec0108846452 100644 (file)
@@ -11,7 +11,7 @@
 #include <time.h>
 
 using namespace crea;
-
+// Memory tracking allocation
 namespace creaImageIO
 {
   
@@ -60,9 +60,12 @@ namespace creaImageIO
 
     wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
 
-       
-    // previewer
-       
+       mslide = new wxSlider(this,-1,0,0,1, wxDefaultPosition, wxSize(400,10), wxSL_HORIZONTAL | wxSL_LABELS);
+       Connect( mslide->GetId(), wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &WxViewer::OnSlide ); 
+       mcheck = new wxCheckBox(this,5123,crea::std2wx("Cine Loop"));
+       Connect( mcheck->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &WxViewer::OnCineLoop ); 
+       mcheck->SetValue(false);
+    // previewer       
     mInteractor = new crea::creawxVTKRenderWindowInteractor(this,-1);
     mInteractor->UseCaptureMouseOn();  
  
@@ -71,8 +74,10 @@ namespace creaImageIO
     
     mCurrent = 0;
        mPlayer = 0;
-         
+
+       topsizer-> Add( mslide,1,wxALIGN_CENTER  ,0);
     topsizer-> Add( mInteractor ,1,wxGROW  ,0);
+
     SetSizer( topsizer );     
     Layout(); 
   }
@@ -88,15 +93,24 @@ namespace creaImageIO
     // TO DO : desallocate cleanly
     //    delete mPlayer;
     //    delete mInteractor;
+       delete mslide;
   }
   //=====================================================================
 
   //================================================================
-  void WxViewer::SetImageVector(std::vector<ImagePointerHolder*>& pointers)
+   void WxViewer::SetImageVector(std::vector<boost::shared_ptr<ImagePointerHolder> >& pointers)
   {
        wxMutexLocker lock(mMutex);
        GimmickDebugMessage(6,"WxViewer::SetImageVector"<<std::endl);
        imagePointers=pointers;
+       
+       mslide->SetMax(pointers.size());
+       // Refresh don't work, TO MODIFY
+       mslide->Refresh();
+       mslide->ClearTicks();
+       mslide->Hide();
+       mslide->Show();
+       StartPlayer();
   }
 
   //================================================================
@@ -114,7 +128,8 @@ namespace creaImageIO
        {
                if (mCurrent<imagePointers.size()) 
                {
-                       ImagePointerHolder* iph=imagePointers[mCurrent];
+                       boost::shared_ptr<ImagePointerHolder> iph = imagePointers[mCurrent];
+                       //ImagePointerHolder* iph= imagePointers[mCurrent];
                        vtkImageData* currIm=iph->Get();
                        ShowImage(currIm);
                        if ( currIm != mLastImageShown ) 
@@ -127,7 +142,8 @@ namespace creaImageIO
                else
                {
                        mCurrent = 0;
-                       ImagePointerHolder* iph=imagePointers[mCurrent];
+                       //ImagePointerHolder* iph=imagePointers[mCurrent];
+                       boost::shared_ptr<ImagePointerHolder> iph = imagePointers[mCurrent];
                        vtkImageData* currIm=iph->Get();
                        ShowImage(currIm);
                        if ( currIm != mLastImageShown ) 
@@ -144,22 +160,34 @@ namespace creaImageIO
   //=====================================================================
   void WxViewer::ShowImage(vtkImageData* im)
   {
     GimmickDebugMessage(6,"WxViewer::ShowImage"
                        <<std::endl);
     if (im==0) return;
 
     mViewer->SetInput(im);
-       
+
     mViewer->SetSlice( 0 );
-    
+
     int x1,x2,y1,y2,z1,z2;
     double spx,spy,spz;
     im->Update();
-    
+
+//std::cout << "in WxViewer::ShowImage PrintSelf() =";
+//im->PrintSelf(std::cout, vtkIndent(2));
+
     im->GetSpacing(spx,spy,spz);
-    im->GetExtent (x1,x2,y1,y2,z1,z2);
-    
+    //im->GetExtent (x1,x2,y1,y2,z1,z2);  // JPR
+    im->GetWholeExtent (x1,x2,y1,y2,z1,z2); 
+/*       
+std::cout << "in WxViewer::ShowImage GetWholeExtent ext =";
+       std::cout << "   [x1]=" << x1;
+       std::cout << "   [x2]=" << x2;
+       std::cout << "   [y1]=" << y1;
+       std::cout << "   [y2]=" << y2;
+       std::cout << "   [z1]=" << z1;
+       std::cout << "   [z2]=" << z2;
+std::cout << std::endl; 
+*/   
     if ((x1!=mx1) ||
        (x2!=mx2) ||
        (y1!=my1) ||
@@ -180,27 +208,23 @@ namespace creaImageIO
        mspx = spx;
        mspy = spy;
        mspz = spz;
-       
+
        double *range = im->GetScalarRange();
-        mViewer->SetColorWindow(range[1] - range[0]);
-        mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
+       mViewer->SetColorWindow(range[1] - range[0]);
+       mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
 
-        mViewer->GetRenderer()->ResetCamera();
+       mViewer->GetRenderer()->ResetCamera();
        double bounds[6];
 
+       mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
 
-        mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
-
-         
-        mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
-
-         
-         }
-
+       mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
+       mViewer->GetRenderer()->SetBackground(0.1,0.1,0.2);  
+      }
   } 
   //================================================================
   
-   //================================================================
+  //================================================================
   bool WxViewer::RefreshIfNecessary()
   {
     if (mNeedRefresh)
@@ -228,13 +252,52 @@ namespace creaImageIO
   //==================================================
   void WxViewer::StartPlayer()
        {
-       //      wxMutexLocker lock(mMutex);
-               if (mPlayer != 0) return;
-               mPlayer = new WxViewerPlayer(this);
-               mPlayer->Create();
-               mPlayer->Run();  
+               if(mcheck->IsChecked())
+               {
+                       //      wxMutexLocker lock(mMutex);
+                       if (mPlayer != 0) return;
+                       mPlayer = new WxViewerPlayer(this);
+                       mPlayer->Create();
+                       mPlayer->Run();  
+               }
+               else
+               {
+                       ShowNextImage();
+               }
+       }
+
+  //================================================================
+  
+  //==================================================
+
+    void WxViewer::OnCineLoop(wxCommandEvent &Event)
+       {
+               if(!mcheck->IsChecked())
+               {
+                       mPlayer->Pause();
+                       mPlayer->Delete();
+                       mPlayer = 0;
+               }
+               StartPlayer();
        }
        
+ //================================================================
+  
+  //==================================================
+       
+       void WxViewer::OnSlide(wxCommandEvent &Event)
+        {
+                mCurrent = mslide->GetValue();
+                StartPlayer();
+        }
+        //================================================================
+  
+  //==================================================
+
+        void WxViewer::SetValue()
+        {
+                mslide->SetValue(mCurrent);
+        }
 
   //  BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
   //    END_EVENT_TABLE()
@@ -258,6 +321,7 @@ namespace creaImageIO
            { 
                        
                        mWxViewer->ShowNextImage();
+                       mWxViewer->SetValue();
                        ::wxWakeUpIdle();
                        clock_t endwait;
                        endwait = clock () + 0.2 * CLOCKS_PER_SEC ;