1 #include <cpExtensions/QT/DicomSeriesSelectorWidget.h>
3 #ifdef cpExtensions_QT4
5 #include <cpExtensions/QT/ui_DicomSeriesSelectorWidget.h>
9 #include <itkGDCMSeriesFileNames.h>
11 // -------------------------------------------------------------------------
12 cpExtensions::QT::DicomSeriesSelectorWidget::
13 DicomSeriesSelectorWidget( QWidget* parent )
15 m_UI( new Ui::DicomSeriesSelectorWidget )
17 this->m_UI->setupUi( this );
18 this->setStartDir( ".", false );
20 this->m_UI->ChooseButton, SIGNAL( clicked( ) ),
21 this, SLOT( _Choose( ) )
25 // -------------------------------------------------------------------------
26 cpExtensions::QT::DicomSeriesSelectorWidget::
27 ~DicomSeriesSelectorWidget( )
32 // -------------------------------------------------------------------------
33 QString cpExtensions::QT::DicomSeriesSelectorWidget::
36 return( this->m_UI->Directory->text( ) );
39 // -------------------------------------------------------------------------
40 void cpExtensions::QT::DicomSeriesSelectorWidget::
41 setStartDir( const QString& dir, bool build )
43 this->m_UI->Directory->setText( dir );
48 QApplication::setOverrideCursor( Qt::WaitCursor );
50 this->m_UI->Series->clear( );
51 this->m_UI->Series->setColumnCount( 3 );
53 labels << "Images count" << "Series UID" << "Series path";
54 this->m_UI->Series->setHorizontalHeaderLabels( labels );
56 itk::GDCMSeriesFileNames::GlobalWarningDisplayOff( );
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 itk::GDCMSeriesFileNames::Pointer series =
67 itk::GDCMSeriesFileNames::New( );
68 series->SetUseSeriesDetails( true );
69 series->AddSeriesRestriction( "0008|0021" );
70 series->SetDirectory( dir_name );
71 const std::vector< std::string >& seriesUID = series->GetSeriesUIDs( );
72 for( auto sIt = seriesUID.begin( ); sIt != seriesUID.end( ); ++sIt )
74 unsigned long rows = this->m_UI->Series->rowCount( );
75 this->m_UI->Series->insertRow( rows );
76 std::stringstream str_count;
77 str_count << series->GetFileNames( *sIt ).size( );
78 QTableWidgetItem* count_item =
79 new QTableWidgetItem( str_count.str( ).c_str( ) );
80 QTableWidgetItem* uid_item =
81 new QTableWidgetItem( sIt->c_str( ) );
82 QTableWidgetItem* dir_item =
83 new QTableWidgetItem( dir_name.substr( dir.size( ) + 1 ).c_str( ) );
84 count_item->setFlags( count_item->flags( ) & ~Qt::ItemIsEditable );
85 uid_item->setFlags( uid_item->flags( ) & ~Qt::ItemIsEditable );
86 dir_item->setFlags( dir_item->flags( ) & ~Qt::ItemIsEditable );
87 this->m_UI->Series->setItem( rows, 0, count_item );
88 this->m_UI->Series->setItem( rows, 1, uid_item );
89 this->m_UI->Series->setItem( rows, 2, dir_item );
94 QDir dir( dir_name.c_str( ) );
95 QFileInfoList contents = dir.entryInfoList( );
96 QFileInfoList::const_iterator i = contents.begin( );
97 for( ; i != contents.end( ); ++i )
101 std::string new_dir_name = i->absoluteFilePath( ).toStdString( );
102 if( new_dir_name.size( ) > dir_name.size( ) )
103 q.push( new_dir_name );
112 QApplication::restoreOverrideCursor( );
113 itk::GDCMSeriesFileNames::GlobalWarningDisplayOn( );
116 // -------------------------------------------------------------------------
117 std::vector< std::string > cpExtensions::QT::DicomSeriesSelectorWidget::
120 std::vector< std::string > filenames;
121 auto items = this->m_UI->Series->selectedItems( );
122 if( items.size( ) > 0 )
126 item( items[ 0 ]->row( ), 2 )->text( ).toStdString( );
127 dir = this->startDir( ).toStdString( ) + "/" + dir;
128 itk::GDCMSeriesFileNames::GlobalWarningDisplayOff( );
130 itk::GDCMSeriesFileNames::Pointer series =
131 itk::GDCMSeriesFileNames::New( );
132 series->SetUseSeriesDetails( true );
133 series->AddSeriesRestriction( "0008|0021" );
134 series->SetDirectory( dir );
135 filenames = series->GetFileNames(
136 this->m_UI->Series->item(
137 items[ 0 ]->row( ), 1
138 )->text( ).toStdString( )
140 itk::GDCMSeriesFileNames::GlobalWarningDisplayOn( );
146 // -------------------------------------------------------------------------
147 void cpExtensions::QT::DicomSeriesSelectorWidget::
151 QFileDialog::getExistingDirectory(
152 this, tr( "Open Directory" ),
154 QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
156 if( qdir.toStdString( ) != "" )
157 this->setStartDir( qdir );
160 #endif // cpExtensions_QT4