1 #include <ITKIO/DicomSeriesSelectorWidget.h>
5 #include <ITKIO/ui_DicomSeriesSelectorWidget.h>
10 // -------------------------------------------------------------------------
11 cpPluginsITKIO::DicomSeriesSelectorWidget::
12 DicomSeriesSelectorWidget( QWidget* parent )
14 m_UI( new Ui::DicomSeriesSelectorWidget )
16 this->m_UI->setupUi( this );
17 this->setStartDir( ".", false );
19 this->m_UI->ChooseButton, SIGNAL( clicked( ) ),
20 this, SLOT( _Choose( ) )
24 // -------------------------------------------------------------------------
25 cpPluginsITKIO::DicomSeriesSelectorWidget::
26 ~DicomSeriesSelectorWidget( )
31 // -------------------------------------------------------------------------
32 QString cpPluginsITKIO::DicomSeriesSelectorWidget::
35 return( this->m_UI->Directory->text( ) );
38 // -------------------------------------------------------------------------
39 void cpPluginsITKIO::DicomSeriesSelectorWidget::
40 setStartDir( const QString& dir, bool build )
42 this->m_Series.clear( );
44 this->m_UI->Directory->setText( dir );
49 QApplication::setOverrideCursor( Qt::WaitCursor );
51 this->m_UI->Series->clear( );
52 this->m_UI->Series->setColumnCount( 3 );
54 labels << "Images count" << "Series UID" << "Series path";
55 this->m_UI->Series->setHorizontalHeaderLabels( labels );
57 std::string main_dir_name = dir.toStdString( );
58 std::queue< std::string > q;
59 q.push( main_dir_name );
60 while( !( q.empty( ) ) )
62 std::string dir_name = q.front( );
66 QDir dir( dir_name.c_str( ) );
67 QFileInfoList contents = dir.entryInfoList( );
68 QFileInfoList::const_iterator i = contents.begin( );
69 std::set< std::string > files;
70 for( ; i != contents.end( ); ++i )
74 std::string new_dir_name = i->absoluteFilePath( ).toStdString( );
75 if( new_dir_name.size( ) > dir_name.size( ) )
76 q.push( new_dir_name );
79 files.insert( i->absoluteFilePath( ).toStdString( ) );
83 if( files.size( ) > 0 )
85 this->m_GDCMHelper.Clear( );
86 this->m_GDCMHelper.SetUseSeriesDetails( true );
87 this->m_GDCMHelper.SetLoadMode( 0 );
88 this->m_GDCMHelper.AddRestriction( "0008|0021" );
89 this->m_GDCMHelper.SetFileNames( files.begin( ), files.end( ) );
91 gdcm::FileList* flist =
92 this->m_GDCMHelper.GetFirstSingleSerieUIDFileSet( );
93 while( flist != NULL )
95 if( flist->size( ) > 0 )
97 this->m_GDCMHelper.OrderFileList( flist );
98 gdcm::File* file = ( *flist )[ 0 ];
100 this->m_GDCMHelper.CreateUniqueSeriesIdentifier( file ).c_str( );
102 gdcm::FileList::iterator it;
103 for( it = flist->begin( ); it != flist->end( ); ++it )
105 this->m_Series[ id ].push_back( ( *it )->filename );
108 flist = this->m_GDCMHelper.GetNextSingleSerieUIDFileSet( );
117 for( auto sIt = this->m_Series.begin( ); sIt != this->m_Series.end( ); ++sIt )
119 if( sIt->second.size( ) > 0 )
121 QFileInfo fdir( sIt->second[ 0 ].c_str( ) );
123 unsigned long rows = this->m_UI->Series->rowCount( );
124 this->m_UI->Series->insertRow( rows );
125 std::stringstream str_count;
126 str_count << sIt->second.size( );
127 QTableWidgetItem* count_item =
128 new QTableWidgetItem( str_count.str( ).c_str( ) );
129 QTableWidgetItem* uid_item =
130 new QTableWidgetItem( sIt->first.c_str( ) );
131 QTableWidgetItem* dir_item =
132 new QTableWidgetItem( fdir.dir( ).canonicalPath( ) );
133 count_item->setFlags( count_item->flags( ) & ~Qt::ItemIsEditable );
134 uid_item->setFlags( uid_item->flags( ) & ~Qt::ItemIsEditable );
135 dir_item->setFlags( dir_item->flags( ) & ~Qt::ItemIsEditable );
136 this->m_UI->Series->setItem( rows, 0, count_item );
137 this->m_UI->Series->setItem( rows, 1, uid_item );
138 this->m_UI->Series->setItem( rows, 2, dir_item );
145 QApplication::restoreOverrideCursor( );
148 // -------------------------------------------------------------------------
149 std::vector< std::string >* cpPluginsITKIO::DicomSeriesSelectorWidget::
152 auto items = this->m_UI->Series->selectedItems( );
153 if( items.size( ) > 0 )
157 item( items[ 0 ]->row( ), 1 )->text( ).toStdString( );
158 auto sIt = this->m_Series.find( uid );
159 if( sIt != this->m_Series.end( ) )
160 return( &( sIt->second ) );
166 // -------------------------------------------------------------------------
167 void cpPluginsITKIO::DicomSeriesSelectorWidget::
171 QFileDialog::getExistingDirectory(
172 this, tr( "Open Directory" ),
174 QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
176 if( qdir.toStdString( ) != "" )
177 this->setStartDir( qdir );
180 #endif // cpPlugins_QT4