]> Creatis software - clitk.git/blobdiff - vv/vvMainWindow.cxx
- autotool
[clitk.git] / vv / vvMainWindow.cxx
index 2cb28703e381aa1d6600aae56ca0170f90e3e07a..89319bc17f4aca000f4d05c19f1eaab0ae9507e8 100644 (file)
@@ -3,8 +3,8 @@
   Program:   vv
   Module:    $RCSfile: vvMainWindow.cxx,v $
   Language:  C++
-  Date:      $Date: 2010/02/06 15:38:13 $
-  Version:   $Revision: 1.7 $
+  Date:      $Date: 2010/03/01 15:38:09 $
+  Version:   $Revision: 1.14 $
   Author :   Pierre Seroul (pierre.seroul@gmail.com)
 
   Copyright (C) 200COLUMN_IMAGE_NAME
@@ -39,7 +39,7 @@
 #include "vvProgressDialog.h"
 #include "vvQDicomSeriesSelector.h"
 #include "vvSlicerManager.h"
-#include "clitkIOCommon.h"
+#include "clitkImageCommon.h"
 #include "vvSlicer.h"
 #include "vvInteractorStyleNavigator.h"
 #include "vvImageWriter.h"
@@ -54,8 +54,8 @@
 #include "vvMesh.h"
 #include "vvStructSelector.h"
 #include "vvMeshReader.h"
-#include "vvCropDialog.h"
 #include "vvConstants.h"
+
 #ifdef CLITK_VV_USE_BDCM
 #include <bdcmDicomFilesSelectorDialog.h>
 #endif
@@ -94,6 +94,8 @@
 #define COLUMN_RELOAD_IMAGE 6
 #define COLUMN_IMAGE_NAME 7
 
+#define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.hdr *.vox *.his *.xdr)"
+
 /*Data Tree values
   0,Qt::UserRole full filename
   1,Qt::CheckStateRole checkbutton UL View
   5,Qt::UserRole mSlicerManager id*/
 
 //------------------------------------------------------------------------------
-vvMainWindow::vvMainWindow() {
+vvMainWindow::vvMainWindow():vvMainWindowBase() {
   setupUi(this); // this sets up the GUI
 
   mInputPathName = "";
-  mCurrentToolInfo = 0;
+  mMenuTools = menuTools;
+  mMainWidget = this;
 
   //Init the contextMenu
   this->setContextMenuPolicy(Qt::CustomContextMenu);
   contextActions.resize(0);
   QAction* actionOpen_new_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/fileopen.png")),
-                                                        tr("Open new Image"));
+                                                        tr("O&pen new Image"));
+  actionOpen_new_image->setShortcut(QKeySequence(tr("Ctrl+O")));
   connect(actionOpen_new_image,SIGNAL(triggered()),this,SLOT(OpenImages()));
   contextActions.push_back(actionOpen_new_image);
-  actionOpen_new_image->setShortcut("Ctrl+O");//Qt::CTRL & Qt::Key_O);
   contextMenu.addSeparator();
 
   QAction* actionClose_Image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/exit.png")),
@@ -138,10 +141,10 @@ vvMainWindow::vvMainWindow() {
 
   contextMenu.addSeparator();
 
-  QAction* actionCrop_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/crop.png")),
-                                                    tr("Crop Current Image"));
-  connect(actionCrop_image,SIGNAL(triggered()),this,SLOT(CropImage()));
-  contextActions.push_back(actionCrop_image);
+  // QAction* actionCrop_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/crop.png")),
+  //                                                   tr("Crop Current Image"));
+  // connect(actionCrop_image,SIGNAL(triggered()),this,SLOT(CropImage()));
+  // contextActions.push_back(actionCrop_image);
 
   QAction* actionSplit_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/cut.png")),
                                                      tr("Split Current Image"));
@@ -164,7 +167,6 @@ vvMainWindow::vvMainWindow() {
   connect(actionAdd_fusion_image,SIGNAL(triggered()),this,SLOT(AddFusionImage()));
   contextActions.push_back(actionAdd_fusion_image);
 
-
   //init the DataTree
   mSlicerManagers.resize(0);
 
@@ -317,7 +319,7 @@ vvMainWindow::vvMainWindow() {
     }
 
   // Adding all new tools (insertion in the menu)
-  vvToolManager::GetInstance()->Initialize(this);
+  vvToolManager::GetInstance()->InsertToolsInMenu(this);
 }
 //------------------------------------------------------------------------------
 
@@ -358,7 +360,10 @@ void vvMainWindow::ComputeMidPosition()
       QApplication::restoreOverrideCursor();
     }
 }
+//------------------------------------------------------------------------------
+
 
+//------------------------------------------------------------------------------
 void vvMainWindow::AddContour(int image_index, vvMesh::Pointer contour, bool propagation)
 {
   QTreeWidgetItem *item = new QTreeWidgetItem();
@@ -402,6 +407,8 @@ void vvMainWindow::AddContour(int image_index, vvMesh::Pointer contour, bool pro
   mSlicerManagers[image_index]->AddContour(contour,propagation);
   mSlicerManagers[image_index]->Render();
 }
+//------------------------------------------------------------------------------
+
 
 //------------------------------------------------------------------------------
 void vvMainWindow::OpenVTKContour()
@@ -423,6 +430,9 @@ void vvMainWindow::OpenVTKContour()
       QApplication::restoreOverrideCursor();
     }
 }
+//------------------------------------------------------------------------------
+
+
 //------------------------------------------------------------------------------
 void vvMainWindow::OpenDCStructContour()
 {
@@ -456,6 +466,8 @@ void vvMainWindow::OpenDCStructContour()
         }
     }
 }
+//------------------------------------------------------------------------------
+
 
 //------------------------------------------------------------------------------
 void vvMainWindow::ComputeDeformableRegistration()
@@ -475,6 +487,8 @@ void vvMainWindow::ComputeDeformableRegistration()
     }
   else QMessageBox::information(this, "Need to open image","You must open an image first.");
 }
+//------------------------------------------------------------------------------
+
 
 //------------------------------------------------------------------------------
 void vvMainWindow::WarpImage()
@@ -493,6 +507,8 @@ void vvMainWindow::WarpImage()
   else
     QMessageBox::warning(this,tr("No vector field"),tr("Sorry, can't warp without a vector field"));
 }
+//------------------------------------------------------------------------------
+
 
 //------------------------------------------------------------------------------
 void vvMainWindow::WarpImage(vvSlicerManager* selected_slicer,int reference_phase)
@@ -519,6 +535,8 @@ void vvMainWindow::WarpImage(vvSlicerManager* selected_slicer,int reference_phas
   else
     QMessageBox::warning(this,tr("No vector field"),tr("Sorry, can't warp without a vector field."));
 }
+//------------------------------------------------------------------------------
+
 
 //------------------------------------------------------------------------------
 vvMainWindow::~vvMainWindow() {
@@ -530,9 +548,10 @@ vvMainWindow::~vvMainWindow() {
 }
 //------------------------------------------------------------------------------
 
+
 //------------------------------------------------------------------------------
 void vvMainWindow::MergeImages() {
-  QString Extensions = "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.hdr *.vox)";
+  QString Extensions = EXTENSIONS;
   Extensions += ";;All Files (*)";
   QStringList files = QFileDialog::getOpenFileNames(this,tr("Merge Images"),mInputPathName,Extensions);
   if (files.isEmpty())
@@ -594,9 +613,10 @@ void vvMainWindow::MergeImages() {
 }
 //------------------------------------------------------------------------------
 
+
 //------------------------------------------------------------------------------
 void vvMainWindow::MergeImagesWithTime() {
-  QString Extensions = "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.hdr *.vox)";
+  QString Extensions = EXTENSIONS;
   Extensions += ";;All Files (*)";
   QStringList files = QFileDialog::getOpenFileNames(this,tr("Merge Images With Time"),mInputPathName,Extensions);
   if (files.isEmpty())
@@ -666,6 +686,7 @@ void vvMainWindow::MergeImagesWithTime() {
 }
 //------------------------------------------------------------------------------
 
+
 //------------------------------------------------------------------------------
 void vvMainWindow::OpenDicom() {
   std::vector<std::string> files;
@@ -702,7 +723,7 @@ void vvMainWindow::OpenDicom() {
 
 //------------------------------------------------------------------------------
 void vvMainWindow::OpenImages() {
-  QString Extensions = "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.hdr *.vox)";
+  QString Extensions = EXTENSIONS;
   Extensions += ";;All Files (*)";
 
   QStringList files = QFileDialog::getOpenFileNames(this,tr("Load Images"),mInputPathName,Extensions);
@@ -726,7 +747,7 @@ void vvMainWindow::OpenRecentImage()
 
 //------------------------------------------------------------------------------
 void vvMainWindow::OpenImageWithTime() {
-  QString Extensions = "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.hdr *.vox)";
+  QString Extensions = EXTENSIONS;
   Extensions += ";;All Files (*)";
 
   QStringList files = QFileDialog::getOpenFileNames(this,tr("Load Images With Time"),mInputPathName,Extensions);
@@ -871,9 +892,6 @@ void vvMainWindow::LoadImages(std::vector<std::string> files, LoadedImageType fi
     }
   QApplication::restoreOverrideCursor();
 
-
-  // vvToolManager::GetInstance()->UpdateEnabledTool();
-  // emit SlicerManagersHasChanged();
 }
 //------------------------------------------------------------------------------
 
@@ -1069,74 +1087,74 @@ void vvMainWindow::ImageInfoChanged() {
       }
     windowSpinBox->setValue(mSlicerManagers[index]->GetColorWindow());
     levelSpinBox->setValue(mSlicerManagers[index]->GetColorLevel());
-    DD(mSlicerManagers[index]->GetColorMap());
-    DD(mSlicerManagers[index]->GetPreset());
+    // DD(mSlicerManagers[index]->GetColorMap());
+    // DD(mSlicerManagers[index]->GetPreset());
     presetComboBox->setCurrentIndex(mSlicerManagers[index]->GetPreset());
     colorMapComboBox->setCurrentIndex(mSlicerManagers[index]->GetColorMap());
 
-        infoPanel->setFileName(image);
-        infoPanel->setDimension(dim);
-        infoPanel->setSizePixel(GetVectorIntAsString(inputSize));
-        infoPanel->setSizeMM(GetVectorDoubleAsString(sizeMM));
-        infoPanel->setOrigin(GetVectorDoubleAsString(origin));
-        infoPanel->setSpacing(GetVectorDoubleAsString(inputSpacing));
-        infoPanel->setNPixel(QString::number(NPixel)+" ("+inputSizeInBytes+")");
-
-        landmarksPanel->SetCurrentLandmarks(mSlicerManagers[index]->GetLandmarks(),
-                                            mSlicerManagers[index]->GetSlicer(0)->GetImage()->GetVTKImages().size());
-        landmarksPanel->SetCurrentPath(mInputPathName.toStdString());
-        landmarksPanel->SetCurrentImage(mSlicerManagers[index]->GetFileName().c_str());
-
-        overlayPanel->getCurrentImageName(mSlicerManagers[index]->GetFileName().c_str());
-        for (int i = 0; i < 4;i++)
-        {
-            if (DataTree->selectedItems()[0]->data(i+1,Qt::CheckStateRole).toInt() > 0 || i == 3)
-            {
-                mSlicerManagers[index]->UpdateInfoOnCursorPosition(i);
-                break;
-            }
-        }
-        windowSpinBox->setValue(mSlicerManagers[index]->GetColorWindow());
-        levelSpinBox->setValue(mSlicerManagers[index]->GetColorLevel());
-        presetComboBox->setCurrentIndex(mSlicerManagers[index]->GetPreset());
-        colorMapComboBox->setCurrentIndex(mSlicerManagers[index]->GetColorMap());
+    infoPanel->setFileName(image);
+    infoPanel->setDimension(dim);
+    infoPanel->setSizePixel(GetVectorIntAsString(inputSize));
+    infoPanel->setSizeMM(GetVectorDoubleAsString(sizeMM));
+    infoPanel->setOrigin(GetVectorDoubleAsString(origin));
+    infoPanel->setSpacing(GetVectorDoubleAsString(inputSpacing));
+    infoPanel->setNPixel(QString::number(NPixel)+" ("+inputSizeInBytes+")");
 
-        if (mSlicerManagers[index]->GetSlicer(0)->GetVF())
-        {
-            overlayPanel->getVFName(mSlicerManagers[index]->GetVFName().c_str());
-            overlayPanel->getVFProperty(mSlicerManagers[index]->GetSlicer(0)->GetVFSubSampling(),
-                                        mSlicerManagers[index]->GetSlicer(0)->GetVFScale(),
-                                        mSlicerManagers[index]->GetSlicer(0)->GetVFLog());
-        }
-        else
-        {
-            overlayPanel->getVFName(mSlicerManagers[index]->GetVFName().c_str());
-            overlayPanel->getVFProperty(-1,-1,-1);
-        }
-        if (mSlicerManagers[index]->GetSlicer(0)->GetOverlay())
-        {
-            overlayPanel->getOverlayName(mSlicerManagers[index]->GetOverlayName().c_str());
-            overlayPanel->getOverlayProperty(mSlicerManagers[index]->GetOverlayColor());
-        }
-        else
-        {
-            overlayPanel->getOverlayName(mSlicerManagers[index]->GetOverlayName().c_str());
-            overlayPanel->getOverlayProperty(-1);
-        }
-        if (mSlicerManagers[index]->GetSlicer(0)->GetFusion())
-        {
-            overlayPanel->getFusionName(mSlicerManagers[index]->GetFusionName().c_str());
-            overlayPanel->getFusionProperty(mSlicerManagers[index]->GetFusionOpacity(),
-                                            mSlicerManagers[index]->GetFusionColorMap(),
-                                            mSlicerManagers[index]->GetFusionWindow(),
-                                            mSlicerManagers[index]->GetFusionLevel());
-        }
-        else
-        {
-            overlayPanel->getFusionName(mSlicerManagers[index]->GetFusionName().c_str());
-            overlayPanel->getFusionProperty(-1, -1,-1,-1);
-        }
-    }
+    landmarksPanel->SetCurrentLandmarks(mSlicerManagers[index]->GetLandmarks(),
+                                        mSlicerManagers[index]->GetSlicer(0)->GetImage()->GetVTKImages().size());
+    landmarksPanel->SetCurrentPath(mInputPathName.toStdString());
+    landmarksPanel->SetCurrentImage(mSlicerManagers[index]->GetFileName().c_str());
+
+    overlayPanel->getCurrentImageName(mSlicerManagers[index]->GetFileName().c_str());
+    for (int i = 0; i < 4;i++)
+      {
+        if (DataTree->selectedItems()[0]->data(i+1,Qt::CheckStateRole).toInt() > 0 || i == 3)
+          {
+            mSlicerManagers[index]->UpdateInfoOnCursorPosition(i);
+            break;
+          }
+      }
+    windowSpinBox->setValue(mSlicerManagers[index]->GetColorWindow());
+    levelSpinBox->setValue(mSlicerManagers[index]->GetColorLevel());
+    presetComboBox->setCurrentIndex(mSlicerManagers[index]->GetPreset());
+    colorMapComboBox->setCurrentIndex(mSlicerManagers[index]->GetColorMap());
+
+    if (mSlicerManagers[index]->GetSlicer(0)->GetVF())
+      {
+        overlayPanel->getVFName(mSlicerManagers[index]->GetVFName().c_str());
+        overlayPanel->getVFProperty(mSlicerManagers[index]->GetSlicer(0)->GetVFSubSampling(),
+                                    mSlicerManagers[index]->GetSlicer(0)->GetVFScale(),
+                                    mSlicerManagers[index]->GetSlicer(0)->GetVFLog());
+      }
+    else
+      {
+        overlayPanel->getVFName(mSlicerManagers[index]->GetVFName().c_str());
+        overlayPanel->getVFProperty(-1,-1,-1);
+      }
+    if (mSlicerManagers[index]->GetSlicer(0)->GetOverlay())
+      {
+        overlayPanel->getOverlayName(mSlicerManagers[index]->GetOverlayName().c_str());
+        overlayPanel->getOverlayProperty(mSlicerManagers[index]->GetOverlayColor());
+      }
+    else
+      {
+        overlayPanel->getOverlayName(mSlicerManagers[index]->GetOverlayName().c_str());
+        overlayPanel->getOverlayProperty(-1);
+      }
+    if (mSlicerManagers[index]->GetSlicer(0)->GetFusion())
+      {
+        overlayPanel->getFusionName(mSlicerManagers[index]->GetFusionName().c_str());
+        overlayPanel->getFusionProperty(mSlicerManagers[index]->GetFusionOpacity(),
+                                        mSlicerManagers[index]->GetFusionColorMap(),
+                                        mSlicerManagers[index]->GetFusionWindow(),
+                                        mSlicerManagers[index]->GetFusionLevel());
+      }
+    else
+      {
+        overlayPanel->getFusionName(mSlicerManagers[index]->GetFusionName().c_str());
+        overlayPanel->getFusionProperty(-1, -1,-1,-1);
+      }
+  }
 }
 //------------------------------------------------------------------------------
 
@@ -1486,6 +1504,10 @@ void vvMainWindow::CloseImage(QTreeWidgetItem* item, int column) {
       msgBox.addButton(tr("Cancel"), QMessageBox::RejectRole);
       if (msgBox.exec() == QMessageBox::AcceptRole)
         {
+
+          // Tell tools that we close an image
+          emit AnImageIsBeingClosed(mSlicerManagers[index]);
+
           std::vector<vvSlicerManager*>::iterator Manageriter = mSlicerManagers.begin();
           DataTree->takeTopLevelItem(index);
           for (int i = 0; i < index; i++)
@@ -1496,25 +1518,24 @@ void vvMainWindow::CloseImage(QTreeWidgetItem* item, int column) {
           mSlicerManagers[index]->RemoveActors();
           delete mSlicerManagers[index];
           mSlicerManagers.erase(Manageriter);
+          
+          //
           InitDisplay();
         }
     }
-
-  // vvToolManager::GetInstance()->UpdateEnabledTool();
-  // emit SlicerManagersHasChanged();
 }
 //------------------------------------------------------------------------------
 
 //------------------------------------------------------------------------------
 void vvMainWindow::ReloadImage(QTreeWidgetItem* item, int column) {
   // int index = GetSlicerIndexFromItem(item);
-//   QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-//   if (item->data(1,Qt::UserRole).toString() == "vector")
-//     mSlicerManagers[index]->ReloadVF();
-//   else
-//     mSlicerManagers[index]->Reload();
+  //   QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+  //   if (item->data(1,Qt::UserRole).toString() == "vector")
+  //     mSlicerManagers[index]->ReloadVF();
+  //   else
+  //     mSlicerManagers[index]->Reload();
 
-//   QApplication::restoreOverrideCursor();
+  //   QApplication::restoreOverrideCursor();
   int index = GetSlicerIndexFromItem(item);
   QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
   QString role=item->data(1,Qt::UserRole).toString();
@@ -1530,13 +1551,13 @@ void vvMainWindow::ReloadImage(QTreeWidgetItem* item, int column) {
 }
 //------------------------------------------------------------------------------
 
-void vvMainWindow::CropImage()
-{
-  int index = GetSlicerIndexFromItem(DataTree->selectedItems()[0]);
-  vvCropDialog crop(mSlicerManagers,index);
-  if(crop.exec())
-    AddImage(crop.GetOutput(),"cropped.mhd");
-}
+// void vvMainWindow::CropImage()
+// {
+//   int index = GetSlicerIndexFromItem(DataTree->selectedItems()[0]);
+//   vvCropDialog crop(mSlicerManagers,index);
+//   if(crop.exec())
+//     AddImage(crop.GetOutput(),"cropped.mhd");
+// }
 
 //------------------------------------------------------------------------------
 void vvMainWindow::SplitImage() {
@@ -1819,7 +1840,7 @@ void vvMainWindow::SelectOverlayImage() {
         return;
       }
 
-  QString Extensions = "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.hdr *.vox)";
+  QString Extensions = EXTENSIONS;
   Extensions += ";;All Files (*)";
   QString file = QFileDialog::getOpenFileName(this,tr("Load Overlay image"),mInputPathName,Extensions);
   if (!file.isEmpty())
@@ -1912,7 +1933,7 @@ void vvMainWindow::AddFusionImage()
         return;
       }
 
-  QString Extensions = "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.hdr *.vox)";
+  QString Extensions = EXTENSIONS;
   Extensions += ";;All Files (*)";
   QString file = QFileDialog::getOpenFileName(this,tr("Load Fusion image"),mInputPathName,Extensions);
   if (!file.isEmpty())
@@ -2328,6 +2349,7 @@ void vvMainWindow::NOVerticalSliderChanged() {
       if (DataTree->topLevelItem(i)->data(COLUMN_UL_VIEW,Qt::CheckStateRole).toInt() > 1)
         {
           mSlicerManagers[i]->GetSlicer(0)->SetSlice(value);
+          mSlicerManagers[i]->UpdateSlice(0); // <-- DS add this. Not too much update ? 
           break;
         }
     }
@@ -2378,8 +2400,10 @@ void vvMainWindow::SEVerticalSliderChanged() {
 
 //------------------------------------------------------------------------------
 void vvMainWindow::UpdateSlice(int slicer, int slice) {
-  if (slicer == 0)
-    NOVerticalSlider->setValue(slice);
+  if (slicer == 0) {
+    if (slice != NOVerticalSlider->value())
+      NOVerticalSlider->setValue(slice);
+  }
   else if (slicer == 1)
     NEVerticalSlider->setValue(slice);
   else if (slicer == 2)
@@ -2741,31 +2765,17 @@ void vvMainWindow::AddImage(vvSlicerManager * slicer_manager) {
   ShowLastImage();
   InitDisplay();
   qApp->processEvents();
-
-  // vvToolManager::GetInstance()->UpdateEnabledTool();
-  // emit SlicerManagersHasChanged();
 }
 //------------------------------------------------------------------------------
 
 
 //------------------------------------------------------------------------------
-vvMainWindowToolInfo * vvMainWindow::GetInfoForTool() {
-  DD("GetInfoForTool");
-  if (mCurrentToolInfo ==0) mCurrentToolInfo = new vvMainWindowToolInfo;
-
-  mCurrentToolInfo->mMenuTools = menuTools;
-  mCurrentToolInfo->mSlicerManagers = &mSlicerManagers;
+void vvMainWindow::UpdateCurrentSlicer() {
   int index = -1;
-  DD(DataTree->selectedItems().size());
   if (DataTree->selectedItems().size() > 0) {
     index = GetSlicerIndexFromItem(DataTree->selectedItems()[0]);
-    DD(DataTree->selectedItems()[0]);
-    DD(index);
   }
-  mCurrentToolInfo->mSlicerManagerCurrentIndex = index;    
-
-  return mCurrentToolInfo;
+  mSlicerManagerCurrentIndex = index;    
 }
 //------------------------------------------------------------------------------
 
-