]> Creatis software - clitk.git/blobdiff - vv/vvMainWindow.cxx
Added linked navigation (zoom and pan)
[clitk.git] / vv / vvMainWindow.cxx
index 8225ece82813bc69d8d440f45660362f154f23c0..abdbd1ae45393729c662180780208c0373505500 100644 (file)
 #include "vvMeshReader.h"
 #include "vvConstants.h"
 
-#ifdef CLITK_VV_USE_BDCM
-#include <bdcmDicomFilesSelectorDialog.h>
-#endif
-
 // ITK include
 #include "itkImage.h"
 #include "itkImageFileReader.h"
@@ -678,32 +674,11 @@ void vvMainWindow::OpenDicom()
 {
   std::vector<std::string> files;
 
-#ifdef CLITK_VV_USE_BDCM
-  bool r = bdcm::OpenDicomFilesSelectorDialog(files,
-           "DicomFilesSelectorDialog test",
-           0,0,800,800,1);
-
-  if (r) {
-    std::cout << "$$$$ main : user clicked 'OK' $$$$"<<std::endl;
-    std::cout << "$$$$ selected files : "<<std::endl;
-    std::vector<std::string>::iterator i;
-    for (i=files.begin(); i!=files.end(); ++i) {
-      std::cout << *i << std::endl;
-    }
-    std::cout << "$$$$ "<<std::endl;
-
-    LoadImages(files,DICOM);
-  } else {
-    std::cout << "$$$$ main : user clicked 'CANCEL' $$$$"<<std::endl;
-  }
-#else
   std::cout << "dicomSeriesSelector " << std::endl;
   if (dicomSeriesSelector->exec() == QDialog::Accepted) {
     files = *(dicomSeriesSelector->GetFilenames());
     LoadImages(files,DICOM);
   }
-#endif
-
 }
 //------------------------------------------------------------------------------
 
@@ -874,6 +849,8 @@ void vvMainWindow::LoadImages(std::vector<std::string> files, LoadedImageType fi
               this,SLOT(UpdateSliceRange(int,int,int,int,int)));
       connect(mSlicerManagers.back(), SIGNAL(UpdateLinkManager(std::string,int,double,double,double,int)),
               this,SLOT(UpdateLinkManager(std::string,int,double,double,double,int)));
+      connect(mSlicerManagers.back(), SIGNAL(UpdateLinkedNavigation(std::string,vvSlicerManager*)),
+              this,SLOT(UpdateLinkedNavigation(std::string,vvSlicerManager*)));
       connect(mSlicerManagers.back(), SIGNAL(ChangeImageWithIndexOffset(vvSlicerManager*,int,int)),
               this,SLOT(ChangeImageWithIndexOffset(vvSlicerManager*,int,int)));
       connect(mSlicerManagers.back(),SIGNAL(LandmarkAdded()),landmarksPanel,SLOT(AddPoint()));
@@ -889,19 +866,19 @@ void vvMainWindow::LoadImages(std::vector<std::string> files, LoadedImageType fi
     UpdateTree();
     InitDisplay();
     ShowLastImage();
-  }
-  QApplication::restoreOverrideCursor();
 
-  // Try to guess default WindowLevel
-  double range[2];
-  mSlicerManagers.back()->GetImage()->GetFirstVTKImageData()->GetScalarRange(range);
-  // DD(range[0]);
-  //   DD(range[1]);
-  if ((range[0] == 0) && (range[1] == 1)) {
-    presetComboBox->setCurrentIndex(5);// binary
-  } else {
-    // TODO
+    // Try to guess default WindowLevel
+    double range[2];
+    mSlicerManagers.back()->GetImage()->GetFirstVTKImageData()->GetScalarRange(range);
+    // DD(range[0]);
+    //   DD(range[1]);
+    if ((range[0] == 0) && (range[1] == 1)) {
+      presetComboBox->setCurrentIndex(5);// binary
+    } else {
+      // TODO
+    }
   }
+  QApplication::restoreOverrideCursor();
 }
 //------------------------------------------------------------------------------
 
@@ -1631,6 +1608,8 @@ void vvMainWindow::SplitImage()
                 this,SLOT(UpdateSliceRange(int,int,int,int,int)));
         connect(mSlicerManagers.back(),SIGNAL(UpdateLinkManager(std::string,int,double,double,double,int)),
                 this,SLOT(UpdateLinkManager(std::string,int,double,double,double,int)));
+        connect(mSlicerManagers.back(), SIGNAL(UpdateLinkedNavigation(std::string,vvSlicerManager*)),
+                this,SLOT(UpdateLinkedNavigation(std::string,vvSlicerManager*)));
         connect(mSlicerManagers.back(),SIGNAL(LandmarkAdded()),landmarksPanel,SLOT(AddPoint()));
         UpdateTree();
         qApp->processEvents();
@@ -1750,6 +1729,17 @@ void vvMainWindow::UpdateLinkManager(std::string id, int slicer, double x, doubl
 }
 //------------------------------------------------------------------------------
 
+//------------------------------------------------------------------------------
+void vvMainWindow::UpdateLinkedNavigation(std::string id, vvSlicerManager * sm)
+{
+  for (unsigned int i = 0; i < mSlicerManagers.size(); i++) {
+    if (id == mSlicerManagers[i]->GetId()) {
+      mSlicerManagers[i]->UpdateLinkedNavigation(sm->GetSlicer(0));
+    }
+  }
+}
+//------------------------------------------------------------------------------
+
 //------------------------------------------------------------------------------
 void vvMainWindow::ShowContextMenu(QPoint point)
 {
@@ -2326,23 +2316,21 @@ void vvMainWindow::NOVerticalSliderChanged()
   if (value == NOVerticalSlider->value()) return;
   else value = NOVerticalSlider->value();
   //  int value = NOVerticalSlider->value();
-  for (unsigned int i = 0; i < mSlicerManagers.size(); i++)
-    {
-      if (DataTree->topLevelItem(i)->data(COLUMN_UL_VIEW,Qt::CheckStateRole).toInt() > 1)
-        {
-          if (mSlicerManagers[i]->GetSlicer(0)->GetSlice() != value) {
-            mSlicerManagers[i]->GetSlicer(0)->SetSlice(value);
-            mSlicerManagers[i]->VerticalSliderHasChanged(0, value);
-            
-            // If nor Update/Render -> slider not work
-            // only render = ok navigation, but for contour Update needed but slower ? 
-
-            mSlicerManagers[i]->UpdateSlice(0);  // <-- DS add this. Not too much update ? YES. but needed for ImageContour ...
-            //mSlicerManagers[i]->GetSlicer(0)->Render(); // <-- DS add this, needed for contour, seems ok ? not too slow ? 
-          }
-          break;
-        }
+  for (unsigned int i = 0; i < mSlicerManagers.size(); i++) {
+    if (DataTree->topLevelItem(i)->data(COLUMN_UL_VIEW,Qt::CheckStateRole).toInt() > 1) {
+      if (mSlicerManagers[i]->GetSlicer(0)->GetSlice() != value) {
+        mSlicerManagers[i]->GetSlicer(0)->SetSlice(value);
+        mSlicerManagers[i]->VerticalSliderHasChanged(0, value);
+
+        // If nor Update/Render -> slider not work
+        // only render = ok navigation, but for contour Update needed but slower ?
+
+        mSlicerManagers[i]->UpdateSlice(0);  // <-- DS add this. Not too much update ? YES. but needed for ImageContour ...
+        //mSlicerManagers[i]->GetSlicer(0)->Render(); // <-- DS add this, needed for contour, seems ok ? not too slow ?
+      }
+      break;
     }
+  }
 }
 //------------------------------------------------------------------------------
 
@@ -2759,6 +2747,8 @@ void vvMainWindow::AddImage(vvImage::Pointer image,std::string filename)
           this,SLOT(UpdateSliceRange(int,int,int,int,int)));
   connect(mSlicerManagers.back(), SIGNAL(UpdateLinkManager(std::string,int,double,double,double,int)),
           this,SLOT(UpdateLinkManager(std::string,int,double,double,double,int)));
+  connect(mSlicerManagers.back(), SIGNAL(UpdateLinkedNavigation(std::string,vvSlicerManager*)),
+          this,SLOT(UpdateLinkedNavigation(std::string,vvSlicerManager*)));
   connect(mSlicerManagers.back(), SIGNAL(ChangeImageWithIndexOffset(vvSlicerManager*,int,int)),
           this,SLOT(ChangeImageWithIndexOffset(vvSlicerManager*,int,int)));
   connect(mSlicerManagers.back(), SIGNAL(LandmarkAdded()),landmarksPanel,SLOT(AddPoint()));