]> Creatis software - clitk.git/blobdiff - vv/vvMainWindow.cxx
Problem with slot in previous commit. Corrected based on overlay example
[clitk.git] / vv / vvMainWindow.cxx
index 1948e791eed57439f08e4d428ea467281e01dcf1..22d75bea432ca7d4a26dc8b61e2f01cd57b1f94f 100644 (file)
@@ -79,7 +79,7 @@
 #define COLUMN_RELOAD_IMAGE 6
 #define COLUMN_IMAGE_NAME 7
 
-#define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.hdr *.vox *.his *.xdr)"
+#define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.hdr *.vox *.his *.xdr *.SCAN )"
 
 /*Data Tree values
   0,Qt::UserRole full filename
@@ -98,6 +98,7 @@ vvMainWindow::vvMainWindow():vvMainWindowBase()
 
   mInputPathName = "";
   mMenuTools = menuTools;
+  //  mMenuSegmentation = menuSegmentation;
   mContextMenu = &contextMenu;
   mMenuExperimentalTools = menuExperimental;
   mMainWidget = this;
@@ -154,7 +155,7 @@ vvMainWindow::vvMainWindow():vvMainWindowBase()
   connect(actionAdd_Overlay_to_current_Image,SIGNAL(triggered()), this,SLOT(SelectOverlayImage()));
 
   contextMenu.addAction(actionAdd_fusion_image);
-  connect(actionAdd_fusion_image,SIGNAL(triggered()),this,SLOT(AddFusionImage()));
+  connect(actionAdd_fusion_image,SIGNAL(triggered()),this,SLOT(SelectFusionImage()));
   contextActions.push_back(actionAdd_fusion_image);
 
   // TRIAL DS
@@ -440,7 +441,7 @@ void vvMainWindow::OpenVTKContour()
 void vvMainWindow::OpenDCStructContour()
 {
   if (mSlicerManagers.size() > 0) {
-    QString Extensions = "Dicom Files ( *.dcm; RS*)";
+    QString Extensions = "Dicom Files ( *.dcm RS*)";
     Extensions += ";;All Files (*)";
     QString file = QFileDialog::getOpenFileName(this,tr("Merge Images"),mInputPathName,Extensions);
     if (file.isNull())
@@ -754,7 +755,7 @@ void vvMainWindow::LoadImages(std::vector<std::string> files, LoadedImageType fi
   //open images as 1 or multiples
   for (int i = 0; i < fileSize; i++) {
 
-    progress.Update("Opening " + files[i]);
+    progress.SetText("Opening " + files[i]);
     progress.SetProgress(i,fileSize);
     qApp->processEvents();
 
@@ -765,18 +766,7 @@ void vvMainWindow::LoadImages(std::vector<std::string> files, LoadedImageType fi
     bool SetImageSucceed=false;
 
     // Change filename if an image with the same already exist
-    //    DD(files[i]);
-    int number=0;
-    for(unsigned int l=0; l<mSlicerManagers.size(); l++) {
-      vvSlicerManager * v = mSlicerManagers[l];
-      //      DD(v->GetBaseFileName());
-      // DD(v->GetFileName());
-      if (v->GetBaseFileName() ==
-          vtksys::SystemTools::GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(files[i]))) {
-        number = std::max(number, v->GetBaseFileNameNumber()+1);
-      }
-    }
-
+    int number = GetImageDuplicateFilenameNumber(files[i]);
 
     if (filetype == IMAGE || filetype == IMAGEWITHTIME)
       SetImageSucceed = imageManager->SetImage(files[i],filetype, number);
@@ -1912,7 +1902,7 @@ void vvMainWindow::AddROI(int index, QString file)
 //------------------------------------------------------------------------------
 
 //------------------------------------------------------------------------------
-void vvMainWindow::AddFusionImage()
+void vvMainWindow::SelectFusionImage()
 {
   int index = GetSlicerIndexFromItem(DataTree->selectedItems()[0]);
 
@@ -1929,74 +1919,80 @@ void vvMainWindow::AddFusionImage()
   QString Extensions = EXTENSIONS;
   Extensions += ";;All Files (*)";
   QString file = QFileDialog::getOpenFileName(this,tr("Load Fusion image"),mInputPathName,Extensions);
-  if (!file.isEmpty()) {
-    mInputPathName = itksys::SystemTools::GetFilenamePath(file.toStdString()).c_str();
-    itk::ImageIOBase::Pointer reader = itk::ImageIOFactory::CreateImageIO(
-                                         file.toStdString().c_str(), itk::ImageIOFactory::ReadMode);
-    reader->SetFileName(file.toStdString().c_str());
-    reader->ReadImageInformation();
-    std::string component = reader->GetComponentTypeAsString(reader->GetComponentType());
-    if (reader) {
-      QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-      vvProgressDialog progress("Opening fusion");
-      qApp->processEvents();
+  if (!file.isEmpty())
+    AddFusionImage(index,file);
+}
+//------------------------------------------------------------------------------
 
-      std::string filename = itksys::SystemTools::GetFilenameWithoutExtension(file.toStdString()).c_str();
-      if (mSlicerManagers[index]->SetFusion(file.toStdString(),
-                                            reader->GetNumberOfDimensions(), component)) {
-        //create an item in the tree with good settings
-        QTreeWidgetItem *item = new QTreeWidgetItem();
-        item->setData(0,Qt::UserRole,file.toStdString().c_str());
-        item->setData(1,Qt::UserRole,tr("fusion"));
-        item->setData(COLUMN_IMAGE_NAME,Qt::DisplayRole,filename.c_str());
-        qApp->processEvents();
+//------------------------------------------------------------------------------
+void vvMainWindow::AddFusionImage(int index, QString file)
+{
+  mInputPathName = itksys::SystemTools::GetFilenamePath(file.toStdString()).c_str();
+  itk::ImageIOBase::Pointer reader = itk::ImageIOFactory::CreateImageIO(
+                                       file.toStdString().c_str(), itk::ImageIOFactory::ReadMode);
+  reader->SetFileName(file.toStdString().c_str());
+  reader->ReadImageInformation();
+  std::string component = reader->GetComponentTypeAsString(reader->GetComponentType());
+  if (reader) {
+    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+    vvProgressDialog progress("Opening fusion");
+    qApp->processEvents();
 
-        for (int j = 1; j <= 4; j++) {
-          item->setData(j,Qt::CheckStateRole,DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole));
-          mSlicerManagers[index]->GetSlicer(j-1)->SetActorVisibility("fusion",0,
-              DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole).toInt());
-        }
+    std::string filename = itksys::SystemTools::GetFilenameWithoutExtension(file.toStdString()).c_str();
+    if (mSlicerManagers[index]->SetFusion(file.toStdString(),
+                                          reader->GetNumberOfDimensions(), component)) {
+      //create an item in the tree with good settings
+      QTreeWidgetItem *item = new QTreeWidgetItem();
+      item->setData(0,Qt::UserRole,file.toStdString().c_str());
+      item->setData(1,Qt::UserRole,tr("fusion"));
+      item->setData(COLUMN_IMAGE_NAME,Qt::DisplayRole,filename.c_str());
+      qApp->processEvents();
 
-        //Create the buttons for reload and close
-        qApp->processEvents();
-        QTreePushButton* cButton = new QTreePushButton;
-        cButton->setItem(item);
-        cButton->setColumn(COLUMN_CLOSE_IMAGE);
-        cButton->setToolTip(tr("close image"));
-        cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png")));
-        connect(cButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)),
-                this,SLOT(CloseImage(QTreeWidgetItem*, int)));
+      for (int j = 1; j <= 4; j++) {
+        item->setData(j,Qt::CheckStateRole,DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole));
+        mSlicerManagers[index]->GetSlicer(j-1)->SetActorVisibility("fusion",0,
+            DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole).toInt());
+      }
 
-        QTreePushButton* rButton = new QTreePushButton;
-        rButton->setItem(item);
-        rButton->setColumn(COLUMN_RELOAD_IMAGE);
-        rButton->setToolTip(tr("reload image"));
-        rButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/rotateright.png")));
-        connect(rButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)),
-                this,SLOT(ReloadImage(QTreeWidgetItem*, int)));
+      //Create the buttons for reload and close
+      qApp->processEvents();
+      QTreePushButton* cButton = new QTreePushButton;
+      cButton->setItem(item);
+      cButton->setColumn(COLUMN_CLOSE_IMAGE);
+      cButton->setToolTip(tr("close image"));
+      cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png")));
+      connect(cButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)),
+              this,SLOT(CloseImage(QTreeWidgetItem*, int)));
 
-        DataTree->topLevelItem(index)->setExpanded(1);
-        DataTree->topLevelItem(index)->addChild(item);
-        DataTree->setItemWidget(item, COLUMN_CLOSE_IMAGE, cButton);
-        DataTree->setItemWidget(item, COLUMN_RELOAD_IMAGE, rButton);
+      QTreePushButton* rButton = new QTreePushButton;
+      rButton->setItem(item);
+      rButton->setColumn(COLUMN_RELOAD_IMAGE);
+      rButton->setToolTip(tr("reload image"));
+      rButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/rotateright.png")));
+      connect(rButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)),
+              this,SLOT(ReloadImage(QTreeWidgetItem*, int)));
 
-        //set the id of the image
-        QString id = DataTree->topLevelItem(index)->data(COLUMN_IMAGE_NAME,Qt::UserRole).toString();
-        item->setData(COLUMN_IMAGE_NAME,Qt::UserRole,id.toStdString().c_str());
-        UpdateTree();
-        qApp->processEvents();
-        ImageInfoChanged();
-        QApplication::restoreOverrideCursor();
-      } else {
-        QApplication::restoreOverrideCursor();
-        QString error = "Cannot import the new image.\n";
-        error += mSlicerManagers[index]->GetLastError().c_str();
-        QMessageBox::information(this,tr("Problem reading image !"),error);
-      }
+      DataTree->topLevelItem(index)->setExpanded(1);
+      DataTree->topLevelItem(index)->addChild(item);
+      DataTree->setItemWidget(item, COLUMN_CLOSE_IMAGE, cButton);
+      DataTree->setItemWidget(item, COLUMN_RELOAD_IMAGE, rButton);
+
+      //set the id of the image
+      QString id = DataTree->topLevelItem(index)->data(COLUMN_IMAGE_NAME,Qt::UserRole).toString();
+      item->setData(COLUMN_IMAGE_NAME,Qt::UserRole,id.toStdString().c_str());
+      UpdateTree();
+      qApp->processEvents();
+      ImageInfoChanged();
+      QApplication::restoreOverrideCursor();
     } else {
+      QApplication::restoreOverrideCursor();
       QString error = "Cannot import the new image.\n";
+      error += mSlicerManagers[index]->GetLastError().c_str();
       QMessageBox::information(this,tr("Problem reading image !"),error);
     }
+  } else {
+    QString error = "Cannot import the new image.\n";
+    QMessageBox::information(this,tr("Problem reading image !"),error);
   }
 }
 //------------------------------------------------------------------------------
@@ -2715,13 +2711,36 @@ void vvMainWindow::SurfaceViewerLaunch()
   vvSurfaceViewerDialog surfaceViewer;
   surfaceViewer.exec();
 }
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+int vvMainWindow::GetImageDuplicateFilenameNumber(std::string filename)
+{
+  int number=0;
+  for(unsigned int l=0; l<mSlicerManagers.size(); l++) {
+    vvSlicerManager * v = mSlicerManagers[l];
+    if (v->GetBaseFileName() ==
+       vtksys::SystemTools::GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename))) {
+      number = std::max(number, v->GetBaseFileNameNumber()+1);
+    }
+  }
+  return number;
+}
+//------------------------------------------------------------------------------
+
 
 //------------------------------------------------------------------------------
 vvSlicerManager* vvMainWindow::AddImage(vvImage::Pointer image,std::string filename)
 {
+  // Change filename if another image exist with the same name
+  int number = GetImageDuplicateFilenameNumber(filename);
+
+  // Create new SliceManager
   vvSlicerManager* slicer_manager = new vvSlicerManager(4);
-  slicer_manager->SetImage(image);
-  slicer_manager->SetFilename(filename);
+  slicer_manager->SetImage(image);//, IMAGE, number);
+  //  filename = filename+"_"+clitk::toString(number);
+  slicer_manager->SetFilename(filename, number);
   mSlicerManagers.push_back(slicer_manager);
 
   //create an item in the tree with good settings