void DicomSelectorDialog::exec() { typedef itk::ImageFileReader< CTImageType > ReaderType; int index = 0; bool canceled = false; QProgressDialog indexProgress(tr("Indexing Files..."), tr("Abort"), 0, m_fileNames.size(), this); indexProgress.setMinimumDuration(1000); indexProgress.setWindowModality(Qt::ApplicationModal); while( index < m_fileNames.size() ) { indexProgress.setValue(index + 1); if (indexProgress.wasCanceled()) break; if ( boost::filesystem::is_directory( m_fileNames[index].toAscii().data() ) ) { boost::filesystem::path fpath( m_fileNames.takeAt(index).toAscii().data() ); QList< boost::filesystem::path > pathList; boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end pathList.push_back( fpath ); indexProgress.setMaximum(m_fileNames.size() + pathList.size()); while( !pathList.isEmpty() ) { if (indexProgress.wasCanceled()) break; boost::filesystem::path currentPath = pathList.takeFirst(); for ( boost::filesystem::directory_iterator itr( currentPath ); itr != end_itr; ++itr ) { if (indexProgress.wasCanceled()) break; if ( boost::filesystem::is_directory(itr->status()) ) { pathList.push_back( itr->path() ); indexProgress.setMaximum(m_fileNames.size() + pathList.size()); indexProgress.setValue(index); } else if ( boost::filesystem::is_regular_file( itr->status() )) { m_fileNames.push_back( itr->path().directory_string().c_str() ); } } } } else { index++; } } canceled = indexProgress.wasCanceled(); m_fileNames.removeDuplicates(); if (!canceled ) { QProgressDialog metaReadProgress(tr("Reading MetaData..."), tr("Abort"), 0, m_fileNames.size(), this); metaReadProgress.setMinimumDuration(1000); metaReadProgress.setWindowModality(Qt::ApplicationModal); for(int i = 0; i < m_fileNames.size(); i++) { metaReadProgress.setValue(i); if (metaReadProgress.wasCanceled()) break; boost::filesystem::path fpath( m_fileNames[i].toAscii().data() ); if ( boost::filesystem::is_regular_file( fpath ) ) { try { ReaderType::Pointer reader = ReaderType::New(); reader->SetFileName( fpath.string() ); reader->GenerateOutputInformation(); m_ctImageModel.appendFilename( reader->GetMetaDataDictionary(), fpath.string() ); } catch (itk::ImageFileReaderException &ifrExep) { std::cerr << "Exception caught !" << std::endl; std::cerr << ifrExep << std::endl; } catch (itk::ExceptionObject & excep) { std::cerr << "Exception caught !" << std::endl; std::cerr << excep << std::endl; } } } } if (m_ctImageModel.rowCount(QModelIndex())==0) return; treeView->setModel( &m_ctImageModel ); treeView->selectAll(); for(unsigned int t=0; t < m_HeaderFields.size(); t++) treeView->resizeColumnToContents(t); treeView->setSortingEnabled(true); treeView->sortByColumn(2,Qt::AscendingOrder); QDialog::exec(); }