+++ /dev/null
-#include <ITKIO/DicomSeriesSelectorWidget.h>
-
-#ifdef cpPlugins_QT4
-
-#include <ITKIO/ui_DicomSeriesSelectorWidget.h>
-#include <queue>
-#include <string>
-#include <QFileDialog>
-
-// -------------------------------------------------------------------------
-cpPluginsITKIO::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( ) )
- );
-}
-
-// -------------------------------------------------------------------------
-cpPluginsITKIO::DicomSeriesSelectorWidget::
-~DicomSeriesSelectorWidget( )
-{
- delete this->m_UI;
-}
-
-// -------------------------------------------------------------------------
-QString cpPluginsITKIO::DicomSeriesSelectorWidget::
-startDir( ) const
-{
- return( this->m_UI->Directory->text( ) );
-}
-
-// -------------------------------------------------------------------------
-void cpPluginsITKIO::DicomSeriesSelectorWidget::
-setStartDir( const QString& dir, bool build )
-{
- this->m_Series.clear( );
-
- 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 );
-
- 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( );
-
- // Update queue
- QDir dir( dir_name.c_str( ) );
- QFileInfoList contents = dir.entryInfoList( );
- QFileInfoList::const_iterator i = contents.begin( );
- std::set< std::string > files;
- 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 );
- }
- else
- files.insert( i->absoluteFilePath( ).toStdString( ) );
-
- } // rof
-
- if( files.size( ) > 0 )
- {
- this->m_GDCMHelper.Clear( );
- this->m_GDCMHelper.SetUseSeriesDetails( true );
- this->m_GDCMHelper.SetLoadMode( 0 );
- this->m_GDCMHelper.AddRestriction( "0008|0021" );
- this->m_GDCMHelper.SetFileNames( files.begin( ), files.end( ) );
-
- gdcm::FileList* flist =
- this->m_GDCMHelper.GetFirstSingleSerieUIDFileSet( );
- while( flist != NULL )
- {
- if( flist->size( ) > 0 )
- {
- this->m_GDCMHelper.OrderFileList( flist );
- gdcm::File* file = ( *flist )[ 0 ];
- std::string id =
- this->m_GDCMHelper.CreateUniqueSeriesIdentifier( file ).c_str( );
-
- gdcm::FileList::iterator it;
- for( it = flist->begin( ); it != flist->end( ); ++it )
- if( *it != NULL )
- this->m_Series[ id ].push_back( ( *it )->filename );
-
- } // fi
- flist = this->m_GDCMHelper.GetNextSingleSerieUIDFileSet( );
-
- } // elihw
-
- } // fi
-
- } // elihw
-
- // Show series
- for( auto sIt = this->m_Series.begin( ); sIt != this->m_Series.end( ); ++sIt )
- {
- if( sIt->second.size( ) > 0 )
- {
- QFileInfo fdir( sIt->second[ 0 ].c_str( ) );
-
- unsigned long rows = this->m_UI->Series->rowCount( );
- this->m_UI->Series->insertRow( rows );
- std::stringstream str_count;
- str_count << sIt->second.size( );
- QTableWidgetItem* count_item =
- new QTableWidgetItem( str_count.str( ).c_str( ) );
- QTableWidgetItem* uid_item =
- new QTableWidgetItem( sIt->first.c_str( ) );
- QTableWidgetItem* dir_item =
- new QTableWidgetItem( fdir.dir( ).canonicalPath( ) );
- 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 );
-
- } // fi
-
- } // rof
-
- // Restore cursor
- QApplication::restoreOverrideCursor( );
-}
-
-// -------------------------------------------------------------------------
-std::vector< std::string >* cpPluginsITKIO::DicomSeriesSelectorWidget::
-selectedFilenames( )
-{
- auto items = this->m_UI->Series->selectedItems( );
- if( items.size( ) > 0 )
- {
- std::string uid =
- this->m_UI->Series->
- item( items[ 0 ]->row( ), 1 )->text( ).toStdString( );
- auto sIt = this->m_Series.find( uid );
- if( sIt != this->m_Series.end( ) )
- return( &( sIt->second ) );
-
- } // fi
- return( NULL );
-}
-
-// -------------------------------------------------------------------------
-void cpPluginsITKIO::DicomSeriesSelectorWidget::
-_Choose( )
-{
- QString qdir =
- QFileDialog::getExistingDirectory(
- this, tr( "Open Directory" ),
- this->startDir( ),
- QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
- );
- if( qdir.toStdString( ) != "" )
- this->setStartDir( qdir );
-}
-
-#endif // cpPlugins_QT4
-
-// eof - $RCSfile$