X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FPlugins%2FIO%2FDicomSeriesReader.cxx;h=4710e59a3905ca257a7e1b472464afffb9f02577;hb=7e29f3aec097ba1bff1894fed6eb1094276c5b72;hp=4841bcf0fdd3a5948ece446dacf65df46d8d9774;hpb=19a9e1774044cc32c415ad38695800c1d169820d;p=cpPlugins.git diff --git a/lib/cpPlugins/Plugins/IO/DicomSeriesReader.cxx b/lib/cpPlugins/Plugins/IO/DicomSeriesReader.cxx index 4841bcf..4710e59 100644 --- a/lib/cpPlugins/Plugins/IO/DicomSeriesReader.cxx +++ b/lib/cpPlugins/Plugins/IO/DicomSeriesReader.cxx @@ -15,182 +15,204 @@ #include #include -#endif // cpPlugins_Interface_QT4 +#include #include -// ------------------------------------------------------------------------- -bool cpPlugins::IO::DicomSeriesReader:: -ExecConfigurationDialog( QWidget* parent ) +/** + */ +class cpPlugins_IO_DicomSeriesReader_ParametersQtDialog + : public cpPlugins::Interface::ParametersQtDialog { - bool r = false; - -#ifdef cpPlugins_Interface_QT4 +public: + cpPlugins_IO_DicomSeriesReader_ParametersQtDialog( + QWidget* parent = 0, Qt::WindowFlags f = 0 + ) + : cpPlugins::Interface::ParametersQtDialog( parent, f ) + { + } + virtual ~cpPlugins_IO_DicomSeriesReader_ParametersQtDialog( ) + { + } - // DICOM series analyzer - itk::GDCMSeriesFileNames::GlobalWarningDisplayOff( ); - itk::GDCMSeriesFileNames::Pointer series = - itk::GDCMSeriesFileNames::New( ); - - // Show dialog and check if it was accepted - QFileDialog dialog( parent ); - dialog.setFileMode( QFileDialog::DirectoryOnly ); - dialog.setDirectory( QFileDialog::tr( "." ) ); - if( !dialog.exec( ) ) - return( false ); - - // Prepare dialog - QApplication::setOverrideCursor( Qt::WaitCursor ); - if( parent != NULL ) - parent->setEnabled( false ); - - QDialog* tree_dialog = new QDialog( parent ); - QTreeWidget* tree_widget = new QTreeWidget( tree_dialog ); - QList< QTreeWidgetItem* > tree_items; - std::map< std::string, std::map< std::string, TStringList > > found_files; - - std::string main_dir_name = - dialog.selectedFiles( ).begin( )->toStdString( ); - std::queue< std::string > q; - q.push( main_dir_name ); - while( !( q.empty( ) ) ) - { - std::string dir_name = q.front( ); - q.pop( ); - - // Get DICOM information - series->SetUseSeriesDetails( true ); - series->AddSeriesRestriction( "0008|0021" ); - series->SetDirectory( dir_name ); - const TStringList& seriesUID = series->GetSeriesUIDs( ); - if( seriesUID.size( ) > 0 ) +protected: + virtual void _dlg_OpenMultipleFiles( ) { - QTreeWidgetItem* new_item = new QTreeWidgetItem( - ( QTreeWidgetItem* )( NULL ), - QStringList( dir_name.c_str( ) ) - ); - QTreeWidgetItem* new_leaf = NULL; - TStringList::const_iterator sIt = seriesUID.begin( ); - for( ; sIt != seriesUID.end( ); ++sIt ) + // DICOM series analyzer + itk::GDCMSeriesFileNames::GlobalWarningDisplayOff( ); + itk::GDCMSeriesFileNames::Pointer series = + itk::GDCMSeriesFileNames::New( ); + + // Show dialog and check if it was accepted + QWidget* parent = dynamic_cast< QWidget* >( this->parent( ) ); + QFileDialog dialog( parent ); + dialog.setFileMode( QFileDialog::DirectoryOnly ); + dialog.setDirectory( QFileDialog::tr( "." ) ); + if( !dialog.exec( ) ) + return; + + // Prepare dialog + QApplication::setOverrideCursor( Qt::WaitCursor ); + if( parent != NULL ) + parent->setEnabled( false ); + + QDialog* tree_dialog = new QDialog( parent ); + QTreeWidget* tree_widget = new QTreeWidget( tree_dialog ); + QList< QTreeWidgetItem* > tree_items; + std::map< + std::string, + std::map< std::string, std::vector< std::string > > + > found_files; + + std::string main_dir_name = + dialog.selectedFiles( ).begin( )->toStdString( ); + std::queue< std::string > q; + q.push( main_dir_name ); + while( !( q.empty( ) ) ) { - TStringList filenames = series->GetFileNames( *sIt ); - if( filenames.size( ) > 0 ) + std::string dir_name = q.front( ); + q.pop( ); + + // Get DICOM information + series->SetUseSeriesDetails( true ); + series->AddSeriesRestriction( "0008|0021" ); + series->SetDirectory( dir_name ); + const std::vector< std::string >& seriesUID = series->GetSeriesUIDs( ); + if( seriesUID.size( ) > 0 ) { - std::stringstream ss; - ss << "(" << filenames.size( ) << "): " << *sIt; - new_leaf = - new QTreeWidgetItem( - new_item, QStringList( ss.str( ).c_str( ) ) - ); - new_item->addChild( new_leaf ); - found_files[ dir_name ][ *sIt ] = filenames; + QTreeWidgetItem* new_item = new QTreeWidgetItem( + ( QTreeWidgetItem* )( NULL ), + QStringList( dir_name.c_str( ) ) + ); + QTreeWidgetItem* new_leaf = NULL; + std::vector< std::string >::const_iterator sIt = seriesUID.begin( ); + for( ; sIt != seriesUID.end( ); ++sIt ) + { + std::vector< std::string > filenames = series->GetFileNames( *sIt ); + if( filenames.size( ) > 0 ) + { + std::stringstream ss; + ss << "(" << filenames.size( ) << "): " << *sIt; + new_leaf = + new QTreeWidgetItem( + new_item, QStringList( ss.str( ).c_str( ) ) + ); + new_item->addChild( new_leaf ); + found_files[ dir_name ][ *sIt ] = filenames; + + } // fi + + } // rof + + if( new_leaf != NULL ) + tree_items.append( new_item ); + else + delete new_item; } // fi - } // rof + // Update queue + QDir dir( dir_name.c_str( ) ); + QFileInfoList contents = dir.entryInfoList( ); + QFileInfoList::const_iterator i = contents.begin( ); + for( ; i != contents.end( ); ++i ) + { + if( i->isDir( ) ) + { + std::string new_dir_name = i->absoluteFilePath( ).toStdString( ); + if( new_dir_name.size( ) > dir_name.size( ) ) + q.push( new_dir_name ); - if( new_leaf != NULL ) - tree_items.append( new_item ); - else - delete new_item; - - } // fi + } // fi - // Update queue - QDir dir( dir_name.c_str( ) ); - QFileInfoList contents = dir.entryInfoList( ); - QFileInfoList::const_iterator i = contents.begin( ); - for( ; i != contents.end( ); ++i ) - { - if( i->isDir( ) ) - { - std::string new_dir_name = i->absoluteFilePath( ).toStdString( ); - if( new_dir_name.size( ) > dir_name.size( ) ) - q.push( new_dir_name ); + } // rof - } // fi + } // elihw - } // rof + // Show second dialog + if( tree_items.size( ) == 0 ) + { + delete tree_widget; + delete tree_dialog; + return; - } // elihw + } // fi - // Show second dialog - if( tree_items.size( ) == 0 ) - { - delete tree_widget; - delete tree_dialog; - return( false ); + QLabel* title = new QLabel( tree_dialog ); + title->setText( "Choose a DICOM series" ); + QGridLayout* mainLayout = new QGridLayout( tree_dialog ); + QVBoxLayout* toolsLayout = new QVBoxLayout( ); + toolsLayout->addWidget( title ); + mainLayout->addLayout( toolsLayout, 0, 0, 1, 1 ); - } // fi + tree_widget->insertTopLevelItems( 0, tree_items ); + toolsLayout->addWidget( tree_widget ); - QLabel* title = new QLabel( tree_dialog ); - title->setText( "Choose a DICOM series" ); - QGridLayout* mainLayout = new QGridLayout( tree_dialog ); - QVBoxLayout* toolsLayout = new QVBoxLayout( ); - toolsLayout->addWidget( title ); - mainLayout->addLayout( toolsLayout, 0, 0, 1, 1 ); - - tree_widget->insertTopLevelItems( 0, tree_items ); - toolsLayout->addWidget( tree_widget ); - - QDialogButtonBox* bb = new QDialogButtonBox( - QDialogButtonBox::Ok | QDialogButtonBox::Cancel - ); - tree_dialog->connect( - bb, SIGNAL( accepted( ) ), tree_dialog, SLOT( accept( ) ) - ); - tree_dialog->connect( - bb, SIGNAL( rejected( ) ), tree_dialog, SLOT( reject( ) ) - ); - toolsLayout->addWidget( bb ); - - QApplication::restoreOverrideCursor( ); - if( parent != NULL ) - parent->setEnabled( true ); - - if( tree_dialog->exec( ) == 0 ) - return( false ); - - QTreeWidgetItem* item = tree_widget->currentItem( ); - if( item != NULL ) - { - QTreeWidgetItem* item_parent = item->parent( ); - if( item_parent != NULL ) - { - QApplication::setOverrideCursor( Qt::WaitCursor ); - if( parent != NULL ) - parent->setEnabled( false ); - - std::string serie_dir = item_parent->text( 0 ).toStdString( ); - std::string serie_id = item->text( 0 ).toStdString( ); - serie_id = serie_id.substr( serie_id.find_first_of( " " ) + 1 ); - this->m_Parameters->ClearOpenFileNameList( "FileNames" ); - const TStringList& names = found_files[ serie_dir ][ serie_id ]; - for( unsigned int f = 0; f < names.size( ); ++f ) - this->m_Parameters->AddToOpenFileNameList( "FileNames", names[ f ] ); - - r = true; + QDialogButtonBox* bb = new QDialogButtonBox( + QDialogButtonBox::Ok | QDialogButtonBox::Cancel + ); + tree_dialog->connect( + bb, SIGNAL( accepted( ) ), tree_dialog, SLOT( accept( ) ) + ); + tree_dialog->connect( + bb, SIGNAL( rejected( ) ), tree_dialog, SLOT( reject( ) ) + ); + toolsLayout->addWidget( bb ); QApplication::restoreOverrideCursor( ); if( parent != NULL ) parent->setEnabled( true ); - } // fi + if( tree_dialog->exec( ) == 0 ) + return; - } // fi + QTreeWidgetItem* item = tree_widget->currentItem( ); + if( item != NULL ) + { + QTreeWidgetItem* item_parent = item->parent( ); + if( item_parent != NULL ) + { + QApplication::setOverrideCursor( Qt::WaitCursor ); + if( parent != NULL ) + parent->setEnabled( false ); + + std::string serie_dir = item_parent->text( 0 ).toStdString( ); + std::string serie_id = item->text( 0 ).toStdString( ); + serie_id = serie_id.substr( serie_id.find_first_of( " " ) + 1 ); + this->m_Parameters->ClearOpenFileNameList( "FileNames" ); + const std::vector< std::string >& names = + found_files[ serie_dir ][ serie_id ]; + for( unsigned int f = 0; f < names.size( ); ++f ) + this->m_Parameters->AddToOpenFileNameList( "FileNames", names[ f ] ); + this->updateView( ); + + QApplication::restoreOverrideCursor( ); + if( parent != NULL ) + parent->setEnabled( true ); - itk::GDCMSeriesFileNames::GlobalWarningDisplayOn( ); + } // fi -#endif // cpPlugins_Interface_QT4 + } // fi + itk::GDCMSeriesFileNames::GlobalWarningDisplayOn( ); + } +}; - return( r ); -} +#endif // cpPlugins_Interface_QT4 // ------------------------------------------------------------------------- cpPlugins::IO::DicomSeriesReader:: DicomSeriesReader( ) : Superclass( ) { +#ifdef cpPlugins_Interface_QT4 + if( QApplication::instance( ) != NULL ) + { + this->m_ParametersDialog = + new cpPlugins_IO_DicomSeriesReader_ParametersQtDialog( ); + this->m_ParametersDialog->setParameters( this->m_Parameters ); + + } // fi +#endif // cpPlugins_Interface_QT4 } // -------------------------------------------------------------------------