#include <QTreeWidget>
#include <QVBoxLayout>
-#endif // cpPlugins_Interface_QT4
+#include <cpPlugins/Interface/ParametersQtDialog.h>
#include <itkGDCMSeriesFileNames.h>
-// -------------------------------------------------------------------------
-bool cpPlugins::IO::DicomSeriesReader::
-ExecConfigurationDialog( QWidget* parent )
+/**
+ */
+class cpPlugins_IO_DicomSeriesReader_ParametersQtDialog
+ : public cpPlugins::Interface::ParametersQtDialog
{
- bool r = false;
-
-#ifdef cpPlugins_Interface_QT4
+public:
+ cpPlugins_IO_DicomSeriesReader_ParametersQtDialog(
+ QWidget* parent = 0, Qt::WindowFlags f = 0
+ )
+ : cpPlugins::Interface::ParametersQtDialog( parent, f )
+ {
+ }
+ virtual ~cpPlugins_IO_DicomSeriesReader_ParametersQtDialog( )
+ {
+ }
- // DICOM series analyzer
- itk::GDCMSeriesFileNames::GlobalWarningDisplayOff( );
- itk::GDCMSeriesFileNames::Pointer series =
- itk::GDCMSeriesFileNames::New( );
-
- // Show dialog and check if it was accepted
- QFileDialog dialog( parent );
- dialog.setFileMode( QFileDialog::DirectoryOnly );
- dialog.setDirectory( QFileDialog::tr( "." ) );
- if( !dialog.exec( ) )
- return( false );
-
- // Prepare dialog
- QApplication::setOverrideCursor( Qt::WaitCursor );
- if( parent != NULL )
- parent->setEnabled( false );
-
- QDialog* tree_dialog = new QDialog( parent );
- QTreeWidget* tree_widget = new QTreeWidget( tree_dialog );
- QList< QTreeWidgetItem* > tree_items;
- std::map< std::string, std::map< std::string, TStringList > > found_files;
-
- std::string main_dir_name =
- dialog.selectedFiles( ).begin( )->toStdString( );
- std::queue< std::string > q;
- q.push( main_dir_name );
- while( !( q.empty( ) ) )
- {
- std::string dir_name = q.front( );
- q.pop( );
-
- // Get DICOM information
- series->SetUseSeriesDetails( true );
- series->AddSeriesRestriction( "0008|0021" );
- series->SetDirectory( dir_name );
- const TStringList& seriesUID = series->GetSeriesUIDs( );
- if( seriesUID.size( ) > 0 )
+protected:
+ virtual void _dlg_OpenMultipleFiles( )
{
- QTreeWidgetItem* new_item = new QTreeWidgetItem(
- ( QTreeWidgetItem* )( NULL ),
- QStringList( dir_name.c_str( ) )
- );
- QTreeWidgetItem* new_leaf = NULL;
- TStringList::const_iterator sIt = seriesUID.begin( );
- for( ; sIt != seriesUID.end( ); ++sIt )
+ // DICOM series analyzer
+ itk::GDCMSeriesFileNames::GlobalWarningDisplayOff( );
+ itk::GDCMSeriesFileNames::Pointer series =
+ itk::GDCMSeriesFileNames::New( );
+
+ // Show dialog and check if it was accepted
+ QWidget* parent = dynamic_cast< QWidget* >( this->parent( ) );
+ QFileDialog dialog( parent );
+ dialog.setFileMode( QFileDialog::DirectoryOnly );
+ dialog.setDirectory( QFileDialog::tr( "." ) );
+ if( !dialog.exec( ) )
+ return;
+
+ // Prepare dialog
+ QApplication::setOverrideCursor( Qt::WaitCursor );
+ if( parent != NULL )
+ parent->setEnabled( false );
+
+ QDialog* tree_dialog = new QDialog( parent );
+ QTreeWidget* tree_widget = new QTreeWidget( tree_dialog );
+ QList< QTreeWidgetItem* > tree_items;
+ std::map<
+ std::string,
+ std::map< std::string, std::vector< std::string > >
+ > found_files;
+
+ std::string main_dir_name =
+ dialog.selectedFiles( ).begin( )->toStdString( );
+ std::queue< std::string > q;
+ q.push( main_dir_name );
+ while( !( q.empty( ) ) )
{
- TStringList filenames = series->GetFileNames( *sIt );
- if( filenames.size( ) > 0 )
+ std::string dir_name = q.front( );
+ q.pop( );
+
+ // Get DICOM information
+ series->SetUseSeriesDetails( true );
+ series->AddSeriesRestriction( "0008|0021" );
+ series->SetDirectory( dir_name );
+ const std::vector< std::string >& seriesUID = series->GetSeriesUIDs( );
+ if( seriesUID.size( ) > 0 )
{
- std::stringstream ss;
- ss << "(" << filenames.size( ) << "): " << *sIt;
- new_leaf =
- new QTreeWidgetItem(
- new_item, QStringList( ss.str( ).c_str( ) )
- );
- new_item->addChild( new_leaf );
- found_files[ dir_name ][ *sIt ] = filenames;
+ QTreeWidgetItem* new_item = new QTreeWidgetItem(
+ ( QTreeWidgetItem* )( NULL ),
+ QStringList( dir_name.c_str( ) )
+ );
+ QTreeWidgetItem* new_leaf = NULL;
+ std::vector< std::string >::const_iterator sIt = seriesUID.begin( );
+ for( ; sIt != seriesUID.end( ); ++sIt )
+ {
+ std::vector< std::string > filenames = series->GetFileNames( *sIt );
+ if( filenames.size( ) > 0 )
+ {
+ std::stringstream ss;
+ ss << "(" << filenames.size( ) << "): " << *sIt;
+ new_leaf =
+ new QTreeWidgetItem(
+ new_item, QStringList( ss.str( ).c_str( ) )
+ );
+ new_item->addChild( new_leaf );
+ found_files[ dir_name ][ *sIt ] = filenames;
+
+ } // fi
+
+ } // rof
+
+ if( new_leaf != NULL )
+ tree_items.append( new_item );
+ else
+ delete new_item;
} // fi
- } // 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 );
- if( new_leaf != NULL )
- tree_items.append( new_item );
- else
- delete new_item;
-
- } // fi
+ } // fi
- // 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 );
+ } // rof
- } // fi
+ } // elihw
- } // rof
+ // Show second dialog
+ if( tree_items.size( ) == 0 )
+ {
+ delete tree_widget;
+ delete tree_dialog;
+ return;
- } // elihw
+ } // fi
- // Show second dialog
- if( tree_items.size( ) == 0 )
- {
- delete tree_widget;
- delete tree_dialog;
- return( false );
+ QLabel* title = new QLabel( tree_dialog );
+ title->setText( "Choose a DICOM series" );
+ QGridLayout* mainLayout = new QGridLayout( tree_dialog );
+ QVBoxLayout* toolsLayout = new QVBoxLayout( );
+ toolsLayout->addWidget( title );
+ mainLayout->addLayout( toolsLayout, 0, 0, 1, 1 );
- } // fi
+ tree_widget->insertTopLevelItems( 0, tree_items );
+ toolsLayout->addWidget( tree_widget );
- QLabel* title = new QLabel( tree_dialog );
- title->setText( "Choose a DICOM series" );
- QGridLayout* mainLayout = new QGridLayout( tree_dialog );
- QVBoxLayout* toolsLayout = new QVBoxLayout( );
- toolsLayout->addWidget( title );
- mainLayout->addLayout( toolsLayout, 0, 0, 1, 1 );
-
- tree_widget->insertTopLevelItems( 0, tree_items );
- toolsLayout->addWidget( tree_widget );
-
- QDialogButtonBox* bb = new QDialogButtonBox(
- QDialogButtonBox::Ok | QDialogButtonBox::Cancel
- );
- tree_dialog->connect(
- bb, SIGNAL( accepted( ) ), tree_dialog, SLOT( accept( ) )
- );
- tree_dialog->connect(
- bb, SIGNAL( rejected( ) ), tree_dialog, SLOT( reject( ) )
- );
- toolsLayout->addWidget( bb );
-
- QApplication::restoreOverrideCursor( );
- if( parent != NULL )
- parent->setEnabled( true );
-
- if( tree_dialog->exec( ) == 0 )
- return( false );
-
- QTreeWidgetItem* item = tree_widget->currentItem( );
- if( item != NULL )
- {
- QTreeWidgetItem* item_parent = item->parent( );
- if( item_parent != NULL )
- {
- QApplication::setOverrideCursor( Qt::WaitCursor );
- if( parent != NULL )
- parent->setEnabled( false );
-
- std::string serie_dir = item_parent->text( 0 ).toStdString( );
- std::string serie_id = item->text( 0 ).toStdString( );
- serie_id = serie_id.substr( serie_id.find_first_of( " " ) + 1 );
- this->m_Parameters->ClearOpenFileNameList( "FileNames" );
- const TStringList& names = found_files[ serie_dir ][ serie_id ];
- for( unsigned int f = 0; f < names.size( ); ++f )
- this->m_Parameters->AddToOpenFileNameList( "FileNames", names[ f ] );
-
- r = true;
+ QDialogButtonBox* bb = new QDialogButtonBox(
+ QDialogButtonBox::Ok | QDialogButtonBox::Cancel
+ );
+ tree_dialog->connect(
+ bb, SIGNAL( accepted( ) ), tree_dialog, SLOT( accept( ) )
+ );
+ tree_dialog->connect(
+ bb, SIGNAL( rejected( ) ), tree_dialog, SLOT( reject( ) )
+ );
+ toolsLayout->addWidget( bb );
QApplication::restoreOverrideCursor( );
if( parent != NULL )
parent->setEnabled( true );
- } // fi
+ if( tree_dialog->exec( ) == 0 )
+ return;
- } // fi
+ QTreeWidgetItem* item = tree_widget->currentItem( );
+ if( item != NULL )
+ {
+ QTreeWidgetItem* item_parent = item->parent( );
+ if( item_parent != NULL )
+ {
+ QApplication::setOverrideCursor( Qt::WaitCursor );
+ if( parent != NULL )
+ parent->setEnabled( false );
+
+ std::string serie_dir = item_parent->text( 0 ).toStdString( );
+ std::string serie_id = item->text( 0 ).toStdString( );
+ serie_id = serie_id.substr( serie_id.find_first_of( " " ) + 1 );
+ this->m_Parameters->ClearOpenFileNameList( "FileNames" );
+ const std::vector< std::string >& names =
+ found_files[ serie_dir ][ serie_id ];
+ for( unsigned int f = 0; f < names.size( ); ++f )
+ this->m_Parameters->AddToOpenFileNameList( "FileNames", names[ f ] );
+ this->updateView( );
+
+ QApplication::restoreOverrideCursor( );
+ if( parent != NULL )
+ parent->setEnabled( true );
- itk::GDCMSeriesFileNames::GlobalWarningDisplayOn( );
+ } // fi
-#endif // cpPlugins_Interface_QT4
+ } // fi
+ itk::GDCMSeriesFileNames::GlobalWarningDisplayOn( );
+ }
+};
- return( r );
-}
+#endif // cpPlugins_Interface_QT4
// -------------------------------------------------------------------------
cpPlugins::IO::DicomSeriesReader::
DicomSeriesReader( )
: Superclass( )
{
+#ifdef cpPlugins_Interface_QT4
+ if( QApplication::instance( ) != NULL )
+ {
+ this->m_ParametersDialog =
+ new cpPlugins_IO_DicomSeriesReader_ParametersQtDialog( );
+ this->m_ParametersDialog->setParameters( this->m_Parameters );
+
+ } // fi
+#endif // cpPlugins_Interface_QT4
}
// -------------------------------------------------------------------------