#include "DicomSeriesReader.h" #ifdef cpPlugins_Interface_QT4 #include #include #include #include #include #include #include #include #include #include #endif // cpPlugins_Interface_QT4 #include // ------------------------------------------------------------------------- bool cpPlugins::IO::DicomSeriesReader:: ExecConfigurationDialog( QWidget* parent ) { bool r = false; #ifdef cpPlugins_Interface_QT4 // DICOM series analyzer itk::GDCMSeriesFileNames::GlobalWarningDisplayOff( ); itk::GDCMSeriesFileNames::Pointer series = itk::GDCMSeriesFileNames::New( ); typedef std::map< std::string, TStringList > _TSeries; typedef std::map< std::string, _TSeries > _TFilenames; _TSeries found_series; _TFilenames found_filenames; // Show dialog and check if it was accepted QFileDialog dialog( parent ); dialog.setFileMode( QFileDialog::DirectoryOnly ); dialog.setDirectory( QFileDialog::tr( "." ) ); if( dialog.exec( ) ) { std::string dir_name = dialog.selectedFiles( ).begin( )->toStdString( ); std::queue< std::string > q; q.push( dir_name ); while( !( q.empty( ) ) ) { 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 ) { TStringList::const_iterator sIt = seriesUID.begin( ); for( ; sIt != seriesUID.end( ); ++sIt ) { TStringList filenames = series->GetFileNames( *sIt ); if( filenames.size( ) > 0 ) { found_series[ dir_name ].push_back( *sIt ); found_filenames[ dir_name ][ *sIt ] = filenames; } // fi } // rof } // 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 ); } // fi } // rof } // elihw } // fi // Show second dialog if( found_series.size( ) > 0 ) { QDialog* tree_dialog = new QDialog( parent ); 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 ); QTreeWidget* tree = new QTreeWidget( tree_dialog ); QList< QTreeWidgetItem* > tree_items; _TSeries::const_iterator fsIt = found_series.begin( ); for( ; fsIt != found_series.end( ); ++fsIt ) { QTreeWidgetItem* new_item = new QTreeWidgetItem( ( QTreeWidgetItem* )( NULL ), QStringList( fsIt->first.c_str( ) ) ); TStringList::const_iterator sId = fsIt->second.begin( ); for( ; sId != fsIt->second.end( ); ++sId ) { QTreeWidgetItem* new_leaf = new QTreeWidgetItem( new_item, QStringList( sId->c_str( ) ) ); new_item->addChild( new_leaf ); } // rof tree_items.append( new_item ); } // rof tree->insertTopLevelItems( 0, tree_items ); toolsLayout->addWidget( tree ); 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 ); if( tree_dialog->exec( ) == 1 ) { QTreeWidgetItem* item = tree->currentItem( ); QTreeWidgetItem* parent = item->parent( ); if( parent != NULL ) { std::string serie_dir = parent->text( 0 ).toStdString( ); std::string serie_id = item->text( 0 ).toStdString( ); this->m_Parameters->ClearStringList( "FileNames" ); const TStringList& filenames = found_filenames[ serie_dir ][ serie_id ]; for( unsigned int f = 0; f < filenames.size( ); ++f ) this->m_Parameters->AddToStringList( "FileNames", filenames[ f ] ); r = true; } // fi } // fi } // fi itk::GDCMSeriesFileNames::GlobalWarningDisplayOn( ); #endif // cpPlugins_Interface_QT4 return( r ); } // ------------------------------------------------------------------------- cpPlugins::IO::DicomSeriesReader:: DicomSeriesReader( ) : Superclass( ) { } // ------------------------------------------------------------------------- cpPlugins::IO::DicomSeriesReader:: ~DicomSeriesReader( ) { } // eof - $RCSfile$