X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvMainWindow.cxx;h=995d3dee38a3cd2671a852619c5183acaa4b2c65;hb=1f07f247f34bf583d0228fbca5a44436d8f3f020;hp=e53841950d599b2b1b1f8d1d29db7a2658c8f2af;hpb=573d80d0f7a17607d2ee883c21c940c0ba020282;p=clitk.git diff --git a/vv/vvMainWindow.cxx b/vv/vvMainWindow.cxx index e538419..995d3de 100644 --- a/vv/vvMainWindow.cxx +++ b/vv/vvMainWindow.cxx @@ -21,10 +21,13 @@ #include #include #include "QTreePushButton.h" +#include +#include // VV include #include "vvMainWindow.h" #include "vvHelpDialog.h" +#include "vvRegisterForm.h" #include "vvDocumentation.h" #include "vvProgressDialog.h" #include "vvQDicomSeriesSelector.h" @@ -65,9 +68,11 @@ #include #include #include -#include +#ifdef VTK_USE_FFMPEG_ENCODER +# include +#endif #ifdef VTK_USE_MPEG2_ENCODER - #include +# include #endif #include #include @@ -86,7 +91,7 @@ #define COLUMN_RELOAD_IMAGE 6 #define COLUMN_IMAGE_NAME 7 -#define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.hdr *.vox *.his *.xdr *.SCAN )" +#define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.mha *.hdr *.vox *.his *.xdr *.SCAN )" /*Data Tree values 0,Qt::UserRole full filename @@ -249,6 +254,7 @@ vvMainWindow::vvMainWindow():vvMainWindowBase() connect(actionAdd_VF_to_current_Image,SIGNAL(triggered()),this,SLOT(OpenField())); connect(actionNavigation_Help,SIGNAL(triggered()),this,SLOT(ShowHelpDialog())); connect(actionDocumentation,SIGNAL(triggered()),this,SLOT(ShowDocumentation())); + connect(actionRegister_vv,SIGNAL(triggered()),this,SLOT(PopupRegisterForm())); /////////////////////////////////////////////// connect(actionSegmentation,SIGNAL(triggered()),this,SLOT(SegmentationOnCurrentImage())); @@ -306,21 +312,15 @@ vvMainWindow::vvMainWindow():vvMainWindowBase() //Recently opened files std::list recent_files = GetRecentlyOpenedImages(); + recentlyOpenedFilesMenu=NULL; if ( !recent_files.empty() ) { - QMenu * rmenu = new QMenu("Recently opened files..."); - rmenu->setIcon(QIcon(QString::fromUtf8(":/common/icons/open.png"))); - menuFile->insertMenu(actionOpen_Image_With_Time,rmenu); - menuFile->insertSeparator(actionOpen_Image_With_Time); - for (std::list::iterator i = recent_files.begin(); i!=recent_files.end(); i++) { - QAction* current=new QAction(QIcon(QString::fromUtf8(":/common/icons/open.png")), - (*i).c_str(),this); - rmenu->addAction(current); - connect(current,SIGNAL(triggered()),this,SLOT(OpenRecentImage())); - } + createRecentlyOpenedFilesMenu(); + updateRecentlyOpenedFilesMenu(recent_files); } // Adding all new tools (insertion in the menu) vvToolManager::GetInstance()->InsertToolsInMenu(this); + vvToolManager::GetInstance()->EnableToolsInMenu(this, false); if (!CLITK_EXPERIMENTAL) menuExperimental->menuAction()->setVisible(false); @@ -330,11 +330,13 @@ vvMainWindow::vvMainWindow():vvMainWindowBase() //timerMemory->setInterval(5); connect(timerMemory, SIGNAL(timeout()), this, SLOT(UpdateMemoryUsage())); timerMemory->start(2000); - } //------------------------------------------------------------------------------ - - +void vvMainWindow::show() +{ + vvMainWindowBase::show(); + PopupRegisterForm(true); +} //------------------------------------------------------------------------------ void vvMainWindow::UpdateMemoryUsage() { @@ -345,6 +347,35 @@ void vvMainWindow::UpdateMemoryUsage() //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +void vvMainWindow::createRecentlyOpenedFilesMenu() +{ + recentlyOpenedFilesMenu = new QMenu("Recently opened files..."); + recentlyOpenedFilesMenu->setIcon(QIcon(QString::fromUtf8(":/common/icons/open.png"))); + menuFile->insertMenu(actionOpen_Image_With_Time,recentlyOpenedFilesMenu); + menuFile->insertSeparator(actionOpen_Image_With_Time); +} +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ + +void vvMainWindow::updateRecentlyOpenedFilesMenu(const std::list &recent_files) +{ + if(recentlyOpenedFilesMenu==NULL) { + createRecentlyOpenedFilesMenu(); + } else { + recentlyOpenedFilesMenu->clear(); + } + for (std::list::const_iterator i = recent_files.begin(); i!=recent_files.end(); i++) { + QAction* current=new QAction(QIcon(QString::fromUtf8(":/common/icons/open.png")), i->c_str(),this); + recentlyOpenedFilesMenu->addAction(current); + connect(current,SIGNAL(triggered()),this,SLOT(OpenRecentImage())); + } +} +//------------------------------------------------------------------------------ + + //------------------------------------------------------------------------------ void vvMainWindow::ComputeMidPosition() { @@ -790,6 +821,7 @@ void vvMainWindow::LoadImages(std::vector files, vvImageReader::Loa if (files.size() == 1) { QFileInfo finfo=tr(files[0].c_str()); AddToRecentlyOpenedImages(finfo.absoluteFilePath().toStdString()); + updateRecentlyOpenedFilesMenu(GetRecentlyOpenedImages()); } //init the progress events QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); @@ -867,8 +899,8 @@ void vvMainWindow::LoadImages(std::vector files, vvImageReader::Loa connect(mSlicerManagers.back(), SIGNAL(currentImageChanged(std::string)), this,SLOT(CurrentImageChanged(std::string))); - connect(mSlicerManagers.back(), SIGNAL(currentPickedImageChanged(std::string)), - this, SLOT(CurrentPickedImageChanged(std::string))); + connect(mSlicerManagers.back(), SIGNAL(currentPickedImageChanged(std::string)), + this, SLOT(CurrentPickedImageChanged(std::string))); connect(mSlicerManagers.back(), SIGNAL(UpdatePosition(int, double, double, double, double, double, double, double)), this,SLOT(MousePositionChanged(int,double, double, double, double, double, double, double))); connect(mSlicerManagers.back(), SIGNAL(UpdateVector(int, double, double, double, double)), @@ -989,6 +1021,7 @@ void vvMainWindow::ImageInfoChanged() actionNorth_West_Window->setEnabled(1); actionSouth_East_Window->setEnabled(1); actionSouth_West_Window->setEnabled(1); + vvToolManager::GetInstance()->EnableToolsInMenu(this, true); inverseButton->setEnabled(1); goToCursorPushButton->setEnabled(1); @@ -1185,6 +1218,23 @@ void vvMainWindow::ShowDocumentation() { documentation->show(); } +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +void vvMainWindow::PopupRegisterForm(bool checkCanPush) +{ + vvRegisterForm* registerForm = new vvRegisterForm(QUrl("http://www.creatis.insa-lyon.fr/~dsarrut/vvregister/write.php"), getVVSettingsPath(), getSettingsOptionFormat()); + if(!checkCanPush) { + registerForm->show(); + } else { + if(registerForm->canPush()) { + registerForm->show(); + registerForm->acquitPushed();//too bad if there is not internet connection anymore. + } + } +} +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvMainWindow::ShowHelpDialog() { @@ -1195,41 +1245,37 @@ void vvMainWindow::ShowHelpDialog() //------------------------------------------------------------------------------ void vvMainWindow::ChangeViewMode() { - QListIterator it0(splitter_3->sizes()); - QListIterator it1(splitter_3->sizes()); - int max0 = 0; - int max1 = 1; - while (it0.hasNext()) { - max0 += it0.next(); - } - while (it1.hasNext()) { - max1 += it1.next(); - } - QList size0; - QList size1; + QList size; if (viewMode == 1) { viewMode = 0; - size0.push_back(max0); - size0.push_back(0); - size1.push_back(max1); - size1.push_back(0); - splitter_3->setSizes(size0); - OSplitter->setSizes(size1); + size.push_back(1); + size.push_back(0); + splitter_3->setSizes(size); + OSplitter->setSizes(size); DataTree->setColumnHidden(2,1); DataTree->setColumnHidden(3,1); DataTree->setColumnHidden(4,1); } else { viewMode = 1; - size0.push_back(int(max0/2)); - size0.push_back(int(max0/2)); - size1.push_back(int(max1/2)); - size1.push_back(int(max1/2)); - splitter_3->setSizes(size0); - OSplitter->setSizes(size1); + size.push_back(1); + size.push_back(1); + splitter_3->setSizes(size); + OSplitter->setSizes(size); DataTree->setColumnHidden(2,0); DataTree->setColumnHidden(3,0); DataTree->setColumnHidden(4,0); } + UpdateRenderWindows(); + /* + ** I don't know why but for both resized QVTKWidget we also need to render + ** the associated Slicer to redraw crosses. + */ + for (unsigned int i = 0; i < mSlicerManagers.size(); i++) { + if (DataTree->topLevelItem(i)->data(COLUMN_UL_VIEW,Qt::CheckStateRole).toInt() > 1) + mSlicerManagers[i]->GetSlicer(0)->Render(); + if (DataTree->topLevelItem(i)->data(COLUMN_DL_VIEW,Qt::CheckStateRole).toInt() > 1) + mSlicerManagers[i]->GetSlicer(2)->Render(); + } } //------------------------------------------------------------------------------ @@ -1358,6 +1404,7 @@ void vvMainWindow::DisplayChanged(QTreeWidgetItem *clicked_item, int column) } } else { //We don't allow simply desactivating a slicer clicked_item->setData(column,Qt::CheckStateRole,2); + DisplayChanged(clicked_item, column); return; } } @@ -2226,7 +2273,7 @@ void vvMainWindow::AddLink(QString image1,QString image2) { unsigned int sm1 = 0; unsigned int sm2 = 0; - + for (unsigned int i = 0; i < mSlicerManagers.size(); i++) { if (image1.toStdString() == mSlicerManagers[i]->GetId()) { mSlicerManagers[i]->AddLink(image2.toStdString()); @@ -2241,8 +2288,7 @@ void vvMainWindow::AddLink(QString image1,QString image2) if (linkPanel->isLinkAll()) { emit UpdateLinkedNavigation(mSlicerManagers[sm1]->GetId(), mSlicerManagers[mCurrentPickedImageIndex], mSlicerManagers[mCurrentPickedImageIndex]->GetSlicer(0)); emit UpdateLinkedNavigation(mSlicerManagers[sm2]->GetId(), mSlicerManagers[mCurrentPickedImageIndex], mSlicerManagers[mCurrentPickedImageIndex]->GetSlicer(0)); - } - else { + } else { emit UpdateLinkedNavigation(mSlicerManagers[sm2]->GetId(), mSlicerManagers[sm1], mSlicerManagers[sm1]->GetSlicer(0)); } } @@ -2273,8 +2319,8 @@ void vvMainWindow::ChangeImageWithIndexOffset(vvSlicerManager *sm, int slicer, i index = (index+offset) % mSlicerManagers.size(); QTreeWidgetItem* item = GetItemFromSlicerManager(mSlicerManagers[index]); - //CurrentImageChanged(mSlicerManagers[index]->GetId()); //select new image item->setData(slicer+1,Qt::CheckStateRole,2); //change checkbox + CurrentImageChanged(mSlicerManagers[index]->GetId()); //select new image DisplayChanged(item,slicer+1); } //------------------------------------------------------------------------------ @@ -2606,8 +2652,7 @@ void vvMainWindow::SaveScreenshot(QVTKWidget *widget) vvImage * vvImg = mSlicerManagers[smIndex]->GetImage(); int nSlice = vvImg->GetVTKImages().size(); - for(int i=0; iSetNextTSlice(0); vtkSmartPointer w2i = vtkSmartPointer::New(); w2i->SetInput(widget->GetRenderWindow()); @@ -2627,8 +2672,7 @@ void vvMainWindow::SaveScreenshot(QVTKWidget *widget) vvImage * vvImg = mSlicerManagers[smIndex]->GetImage(); int nSlice = vvImg->GetVTKImages().size(); - for(int i=0; iSetNextTSlice(0); vtkSmartPointer w2i = vtkSmartPointer::New(); w2i->SetInput(widget->GetRenderWindow());