#include #ifdef cpExtensions_QT4 #include #include #include #include #include // ------------------------------------------------------------------------- cpExtensions::QT::DicomSeriesSelectorWidget:: DicomSeriesSelectorWidget( QWidget* parent ) : QWidget( parent ), m_UI( new Ui::DicomSeriesSelectorWidget ) { this->m_UI->setupUi( this ); this->setStartDir( ".", false ); this->connect( this->m_UI->ChooseButton, SIGNAL( clicked( ) ), this, SLOT( _Choose( ) ) ); } // ------------------------------------------------------------------------- cpExtensions::QT::DicomSeriesSelectorWidget:: ~DicomSeriesSelectorWidget( ) { delete this->m_UI; } // ------------------------------------------------------------------------- QString cpExtensions::QT::DicomSeriesSelectorWidget:: startDir( ) const { return( this->m_UI->Directory->text( ) ); } // ------------------------------------------------------------------------- void cpExtensions::QT::DicomSeriesSelectorWidget:: setStartDir( const QString& dir, bool build ) { this->m_UI->Directory->setText( dir ); if( !build ) return; // Process subdirs QApplication::setOverrideCursor( Qt::WaitCursor ); this->m_UI->Series->clear( ); this->m_UI->Series->setColumnCount( 3 ); QStringList labels; labels << "Images count" << "Series UID" << "Series path"; this->m_UI->Series->setHorizontalHeaderLabels( labels ); itk::GDCMSeriesFileNames::GlobalWarningDisplayOff( ); std::string main_dir_name = dir.toStdString( ); std::queue< std::string > q; q.push( main_dir_name ); while( !( q.empty( ) ) ) { std::string dir_name = q.front( ); q.pop( ); // Get series itk::GDCMSeriesFileNames::Pointer series = itk::GDCMSeriesFileNames::New( ); series->SetUseSeriesDetails( true ); series->AddSeriesRestriction( "0008|0021" ); series->SetDirectory( dir_name ); const std::vector< std::string >& seriesUID = series->GetSeriesUIDs( ); for( auto sIt = seriesUID.begin( ); sIt != seriesUID.end( ); ++sIt ) { unsigned long rows = this->m_UI->Series->rowCount( ); this->m_UI->Series->insertRow( rows ); std::stringstream str_count; str_count << series->GetFileNames( *sIt ).size( ); QTableWidgetItem* count_item = new QTableWidgetItem( str_count.str( ).c_str( ) ); QTableWidgetItem* uid_item = new QTableWidgetItem( sIt->c_str( ) ); QTableWidgetItem* dir_item = new QTableWidgetItem( dir_name.substr( dir.size( ) + 1 ).c_str( ) ); count_item->setFlags( count_item->flags( ) & ~Qt::ItemIsEditable ); uid_item->setFlags( uid_item->flags( ) & ~Qt::ItemIsEditable ); dir_item->setFlags( dir_item->flags( ) & ~Qt::ItemIsEditable ); this->m_UI->Series->setItem( rows, 0, count_item ); this->m_UI->Series->setItem( rows, 1, uid_item ); this->m_UI->Series->setItem( rows, 2, dir_item ); } // 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 ); } // fi } // rof } // elihw // Restore cursor QApplication::restoreOverrideCursor( ); itk::GDCMSeriesFileNames::GlobalWarningDisplayOn( ); } // ------------------------------------------------------------------------- std::vector< std::string > cpExtensions::QT::DicomSeriesSelectorWidget:: selectedFilenames( ) { std::vector< std::string > filenames; auto items = this->m_UI->Series->selectedItems( ); if( items.size( ) > 0 ) { std::string dir = this->m_UI->Series-> item( items[ 0 ]->row( ), 2 )->text( ).toStdString( ); dir = this->startDir( ).toStdString( ) + "/" + dir; itk::GDCMSeriesFileNames::GlobalWarningDisplayOff( ); itk::GDCMSeriesFileNames::Pointer series = itk::GDCMSeriesFileNames::New( ); series->SetUseSeriesDetails( true ); series->AddSeriesRestriction( "0008|0021" ); series->SetDirectory( dir ); filenames = series->GetFileNames( this->m_UI->Series->item( items[ 0 ]->row( ), 1 )->text( ).toStdString( ) ); itk::GDCMSeriesFileNames::GlobalWarningDisplayOn( ); } // fi return( filenames ); } // ------------------------------------------------------------------------- void cpExtensions::QT::DicomSeriesSelectorWidget:: _Choose( ) { QString qdir = QFileDialog::getExistingDirectory( this, tr( "Open Directory" ), this->startDir( ), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( qdir.toStdString( ) != "" ) this->setStartDir( qdir ); } #endif // cpExtensions_QT4 // eof - $RCSfile$