]> Creatis software - clitk.git/blobdiff - vv/vvQDicomSeriesSelector.cxx
Debug RTStruct conversion with empty struc
[clitk.git] / vv / vvQDicomSeriesSelector.cxx
index 04e2aac5a96612de9db95cb138e52b916447a558..d5444cdbe5b168317880b97895b8f741f7379045 100644 (file)
@@ -1,9 +1,9 @@
 /*=========================================================================
   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
 
-  Authors belong to: 
+  Authors belong to:
   - University of LYON              http://www.universite-lyon.fr/
-  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
   This software is distributed WITHOUT ANY WARRANTY; without even
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+===========================================================================**/
 #ifndef VVDICOMSERIESSELECTOR_CXX
 #define VVDICOMSERIESSELECTOR_CXX
 #include <itkGDCMImageIO.h>
 #include <itkGDCMSeriesFileNames.h>
 #include <gdcmFile.h>
+#if GDCM_MAJOR_VERSION >= 2
+#include <gdcmImageReader.h>
+#include <gdcmDataSetHelper.h>
+#include <gdcmStringFilter.h>
+#include <gdcmImageHelper.h>
+#else
 #include <gdcmDocEntry.h>
+#endif
 
 #include "vvQDicomSeriesSelector.h"
 //#include "vvUserConfig.h"
 
 //====================================================================
 vvDicomSeriesSelector::vvDicomSeriesSelector(QWidget* parent)
-        :QDialog(parent) {
-    // Set GUI
-    ui.setupUi(this);
-    // Correct GUI for splitter ...
-    //   QSplitter * splitter = new QSplitter(this);
-    //   splitter->setOrientation(Qt::Horizontal);
-    //   ui.gridLayout1->addWidget(splitter, 0, 0, 1, 1);
-    //   ui.mFrameLeft->setParent(splitter);
-    //   ui.mFrameRight->setParent(splitter);
-    //  ui.toolBox->setCurrentIndex(0);
-
-
-
-    ui.mButtonBox->button(QDialogButtonBox::Open)->setEnabled(false);
-
-    connect(ui.mBrowseButton, SIGNAL(released()),
-            this, SLOT(BrowseButtonRelease()));
-    connect(ui.mSearchButton, SIGNAL(released()),
-            this, SLOT(SearchButtonRelease()));
-    connect(ui.mListWidget, SIGNAL(itemSelectionChanged()),
-            this, SLOT(itemSelectionChanged()));
-    connect(ui.mDicomDetailsListWidget, SIGNAL(itemSelectionChanged()),
-            this, SLOT(itemDetailsSelectionChanged()));
-
-    // Initialization
-    /* if (config::get_current_path() != QString(0))
-      mFoldername = config::get_current_path();
-      else*/
-    mFoldername = QFileInfo("./").absolutePath();
-
-    mPreviousPath = mFoldername;
-    ui.mFolderLineEdit->setText(mFoldername);
-    //  ui.mTableWidget->setRowCount(0);
+  :QDialog(parent)
+{
+  // Set GUI
+  ui.setupUi(this);
+  // Correct GUI for splitter ...
+  //   QSplitter * splitter = new QSplitter(this);
+  //   splitter->setOrientation(Qt::Horizontal);
+  //   ui.gridLayout1->addWidget(splitter, 0, 0, 1, 1);
+  //   ui.mFrameLeft->setParent(splitter);
+  //   ui.mFrameRight->setParent(splitter);
+  //  ui.toolBox->setCurrentIndex(0);
+
+
+
+  ui.mButtonBox->button(QDialogButtonBox::Open)->setEnabled(false);
+
+  connect(ui.mBrowseButton, SIGNAL(released()),
+          this, SLOT(BrowseButtonRelease()));
+  connect(ui.mSearchButton, SIGNAL(released()),
+          this, SLOT(SearchButtonRelease()));
+  connect(ui.mListWidget, SIGNAL(itemSelectionChanged()),
+          this, SLOT(itemSelectionChanged()));
+  connect(ui.mDicomDetailsListWidget, SIGNAL(itemSelectionChanged()),
+          this, SLOT(itemDetailsSelectionChanged()));
+  connect(ui.mIsMatrixCheckBox, SIGNAL(stateChanged(int)),
+          this, SLOT(itemMatrixSelectionChanged(int)));
+
+  // Initialization
+  /*   if (config::get_current_path() != QString(0))
+    mFoldername = config::get_current_path();
+    else*/
+  mFoldername = QFileInfo("./").absolutePath();
+
+  mPreviousPath = mFoldername;
+  ui.mFolderLineEdit->setText(mFoldername);
+  ui.mIsMatrixCheckBox->setChecked(0);
+  mPatientCoordinateSystem = false;
+  //  ui.mTableWidget->setRowCount(0);
 }
 //====================================================================
 
 //====================================================================
-void vvDicomSeriesSelector::show() {
-    QDialog::show();
-    //grabKeyboard();
-    // ui.mListWidget->grabKeyboard();
-    //  ui.mDicomDetailsListWidget->grabKeyboard();
+void vvDicomSeriesSelector::show()
+{
+  QDialog::show();
+  //grabKeyboard();
+  // ui.mListWidget->grabKeyboard();
+  //  ui.mDicomDetailsListWidget->grabKeyboard();
 }
 //====================================================================
 
 //====================================================================
-void vvDicomSeriesSelector::close() {
-    QDialog::close();
-    // ui.mListWidget->releaseKeyboard()
-    //releaseKeyboard();
+void vvDicomSeriesSelector::close()
+{
+  QDialog::close();
+  // ui.mListWidget->releaseKeyboard()
+  //releaseKeyboard();
 }
 //====================================================================
 
 //====================================================================
-void vvDicomSeriesSelector::BrowseButtonRelease() {
-    QFileDialog dialog(this);
-    dialog.setFileMode(QFileDialog::AnyFile);
-    dialog.setFilter("DICOM files (*.dcm); All files (*)");
-    mFoldername = dialog.getExistingDirectory(this,
-                  "Select a folder to find DICOM image",
-                  mPreviousPath);
-    ui.mFolderLineEdit->setText(mFoldername);
-    mPreviousPath = QFileInfo(mFoldername).absolutePath();
-    // config::set_current_path(mPreviousPath);
+void vvDicomSeriesSelector::BrowseButtonRelease()
+{
+  QFileDialog dialog(this);
+  QStringList filters;
+  filters << "DICOM files (*.dcm)"
+          << "All files (*)";
+  dialog.setFileMode(QFileDialog::AnyFile);
+  dialog.setNameFilters(filters);
+  //dialog.setFilter(tr("DICOM files (*.dcm); All files (*)"));
+  mFoldername = dialog.getExistingDirectory(this,
+                "Select a folder to find DICOM image",
+                mPreviousPath);
+  ui.mFolderLineEdit->setText(mFoldername);
+  mPreviousPath = QFileInfo(mFoldername).absolutePath();
+  //   config::set_current_path(mPreviousPath);
 }
 //====================================================================
 
 //====================================================================
-void vvDicomSeriesSelector::SearchButtonRelease() {
-    typedef itk::GDCMSeriesFileNames NamesGeneratorType;
-    NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();
-    nameGenerator->SetUseSeriesDetails(true);
-    //nameGenerator->SetDirectory(mFoldername.toStdString());
-    nameGenerator->SetRecursive(ui.mIsRecursiveCheckBox->checkState() == Qt::Checked);
-
-    //ds gérer recursive moi-meme pour progress ...
-    nameGenerator->SetInputDirectory(mFoldername.toStdString());
-
-    // insert in table
-    typedef std::vector<std::string> SeriesIdContainer;
-    const SeriesIdContainer & seriesUID = nameGenerator->GetSeriesUIDs();
-
-    for (unsigned int i=0; i<seriesUID.size(); i++) {
-        // std::cout << seriesUID[i] << std::endl; //ds verif existe pas déja
-
-        if (mListOfSeriesFilenames[seriesUID[i]]) {
-            std::cout << seriesUID[i] << " exist" << std::endl;
-        }
-        else {
-            // store filenames
-            std::vector<std::string> * filenames = new std::vector<std::string>;
-            const std::vector<std::string> & temp = nameGenerator->GetFileNames(seriesUID[i]);
-            for (unsigned int j=0; j<temp.size(); j++) {
-                filenames->push_back(temp[j]);
-            }
-            mListOfSeriesFilenames[seriesUID[i]] = filenames;
-
-            // store first header
-            gdcm::File *header = new gdcm::File();
-            header->SetFileName((*filenames)[0]);
-            header->SetMaxSizeLoadEntry(16384);
-            header->SetLoadMode(gdcm::LD_NOSHADOW);// don't load shadow tags (in order to save memory)
-            header->Load();
-
-
-            //
-            DD(header->GetEntryValue(0x0028,0x0030).c_str());
-
-            //DS TEST DAVID
-            DD(header->GetXSize());
-            DD(header->GetYSize());
-            DD(header->GetZSize());
-            DD(header->GetXSpacing());
-            DD(header->GetYSpacing());
-            DD(header->GetZSpacing());
-            DD(header->GetXOrigin());
-            DD(header->GetYOrigin());
-            DD(header->GetZOrigin());
-            DD("\n");
-            /*
-              QString size = QString("%1x%2x%3")
-              .arg(header->GetXSize())
-              .arg(header->GetYSize())
-              .arg(header->GetZSize());
-              QString spacing = QString("%1x%2x%3")
-              .arg(header->GetXSpacing())
-              .arg(header->GetYSpacing())
-              .arg(header->GetZSpacing());
-              QString origin = QString("%1x%2x%3")
-              .arg(header->GetXOrigin())
-              .arg(header->GetYOrigin())
-              .arg(header->GetZOrigin());
-            */
-
-
-            mDicomHeader[seriesUID[i]] = header;
-
-            // new item
-            QListWidgetItem *newItem = new QListWidgetItem;
-            newItem->setText(seriesUID[i].c_str());
-            ui.mListWidget->insertItem(i, newItem);
-
-            //AddSerieToTheTable(i, *filenames);
-        }
+void vvDicomSeriesSelector::SearchButtonRelease()
+{
+  typedef itk::GDCMSeriesFileNames NamesGeneratorType;
+  NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();
+  nameGenerator->SetUseSeriesDetails(true);
+  //nameGenerator->SetDirectory(mFoldername.toStdString());
+  nameGenerator->SetRecursive(ui.mIsRecursiveCheckBox->checkState() == Qt::Checked);
+
+  //ds gérer recursive moi-meme pour progress ...
+  nameGenerator->SetInputDirectory(mFoldername.toStdString());
+
+  // insert in table
+  typedef std::vector<std::string> SeriesIdContainer;
+  const SeriesIdContainer & seriesUID = nameGenerator->GetSeriesUIDs();
+
+  for (unsigned int i=0; i<seriesUID.size(); i++) {
+    // std::cout << seriesUID[i] << std::endl; //ds verif existe pas déja
+
+    if (mListOfSeriesFilenames[seriesUID[i]]) {
+      std::cout << seriesUID[i] << " exist" << std::endl;
+    } else {
+      // store filenames
+      std::vector<std::string> * filenames = new std::vector<std::string>;
+      const std::vector<std::string> & temp = nameGenerator->GetFileNames(seriesUID[i]);
+      for (unsigned int j=0; j<temp.size(); j++) {
+        filenames->push_back(temp[j]);
+      }
+      mListOfSeriesFilenames[seriesUID[i]] = filenames;
+
+      // store first header
+#if GDCM_MAJOR_VERSION >= 2
+      mDicomHeader[seriesUID[i]].SetFileName( (*filenames)[0].c_str() );
+      mDicomHeader[seriesUID[i]].Read();
+#else
+      gdcm::File *header = new gdcm::File();
+      header->SetFileName((*filenames)[0]);
+      header->SetMaxSizeLoadEntry(16384);
+      header->SetLoadMode(gdcm::LD_NOSHADOW);// don't load shadow tags (in order to save memory)
+      header->Load();
+
+
+      //
+      DD(header->GetEntryValue(0x0028,0x0030).c_str());
+
+      //DS TEST DAVID
+      DD(header->GetXSize());
+      DD(header->GetYSize());
+      DD(header->GetZSize());
+      DD(header->GetXSpacing());
+      DD(header->GetYSpacing());
+      DD(header->GetZSpacing());
+      DD(header->GetXOrigin());
+      DD(header->GetYOrigin());
+      DD(header->GetZOrigin());
+      DD("\n");
+      /*
+        QString size = QString("%1x%2x%3")
+        .arg(header->GetXSize())
+        .arg(header->GetYSize())
+        .arg(header->GetZSize());
+        QString spacing = QString("%1x%2x%3")
+        .arg(header->GetXSpacing())
+        .arg(header->GetYSpacing())
+        .arg(header->GetZSpacing());
+        QString origin = QString("%1x%2x%3")
+        .arg(header->GetXOrigin())
+        .arg(header->GetYOrigin())
+        .arg(header->GetZOrigin());
+      */
+
+
+      mDicomHeader[seriesUID[i]] = header;
+#endif
+
+      // new item
+      QListWidgetItem *newItem = new QListWidgetItem;
+      newItem->setText(seriesUID[i].c_str());
+      ui.mListWidget->insertItem(i, newItem);
+
+      //AddSerieToTheTable(i, *filenames);
     }
+  }
 }
 //====================================================================
 
 //====================================================================
-void vvDicomSeriesSelector::itemSelectionChanged() {
-    //  mLabelSelected.setText(
-    mCurrentSerie = ui.mListWidget->selectedItems()[0]->text().toStdString();
-    mFilenames = mListOfSeriesFilenames[mCurrentSerie];
-    ui.mButtonBox->button(QDialogButtonBox::Open)->setEnabled(true);
-
-    if (mDicomInfo[mCurrentSerie] == "") {
-        //     QString m;
-        //     m = QString("Patient : <font color=\"blue\">%1</font><br>").arg(mDicomHeader[s]->GetEntryValue(0x0010,0x0010).c_str()); // Patient's name
-        mDicomInfo[mCurrentSerie] = MakeDicomInfo(mCurrentSerie, mDicomHeader[mCurrentSerie]);
-    }
-    ui.mDicomInfoPanel->setText(mDicomInfo[mCurrentSerie]);
-
-    // Detail tab
-    ui.mDicomDetailsListWidget->clear();
-    for (unsigned int i=0; i<mFilenames->size(); i++) {
-        QListWidgetItem * newItem = new QListWidgetItem;
-        newItem->setText(QFileInfo((*mFilenames)[i].c_str()).fileName());
-        ui.mDicomDetailsListWidget->insertItem(i, newItem);
-    }
+void vvDicomSeriesSelector::itemSelectionChanged()
+{
+  //  mLabelSelected.setText(
+  mCurrentSerie = ui.mListWidget->selectedItems()[0]->text().toStdString();
+  mFilenames = mListOfSeriesFilenames[mCurrentSerie];
+  ui.mButtonBox->button(QDialogButtonBox::Open)->setEnabled(true);
+
+  if (mDicomInfo[mCurrentSerie] == "") {
+    //         QString m;
+    //         m = QString("Patient : <font color=\"blue\">%1</font><br>").arg(mDicomHeader[s]->GetEntryValue(0x0010,0x0010).c_str()); // Patient's name
+
+    mDicomInfo[mCurrentSerie] = MakeDicomInfo(mCurrentSerie, mDicomHeader[mCurrentSerie]);
+  }
+  ui.mDicomInfoPanel->setText(mDicomInfo[mCurrentSerie]);
+
+  // Detail tab
+  ui.mDicomDetailsListWidget->clear();
+  for (unsigned int i=0; i<mFilenames->size(); i++) {
+    QListWidgetItem * newItem = new QListWidgetItem;
+    newItem->setText(QFileInfo((*mFilenames)[i].c_str()).fileName());
+    ui.mDicomDetailsListWidget->insertItem(i, newItem);
+  }
 
 }
 //====================================================================
 
 //====================================================================
-void vvDicomSeriesSelector::itemDetailsSelectionChanged() {
-    unsigned int i = ui.mDicomDetailsListWidget->currentRow();
-    if (i<mFilenames->size()) {
-        if (mDicomDetails[(*mFilenames)[i]] == "") {
-            std::ostringstream s;
-            mDicomHeader[mCurrentSerie]->Print(s);
-
-            QString l;
-            gdcm::File * header = mDicomHeader[mCurrentSerie];
-            gdcm::DocEntry * e = header->GetFirstEntry();
-            while (e) {
-                if (e->GetName() != "gdcm::Unknown") {
-                    l += QString("%1 : %2\n")
-                         .arg(e->GetName().c_str())
-                         .arg((header->GetEntryValue(e->GetGroup(), e->GetElement())).c_str());
-                }
-                e = header->GetNextEntry();
+void vvDicomSeriesSelector::itemDetailsSelectionChanged()
+{
+  unsigned int i = ui.mDicomDetailsListWidget->currentRow();
+  if (i<mFilenames->size()) {
+    if (mDicomDetails[(*mFilenames)[i]] == "") {
+      std::ostringstream s;
+      QString l;
+
+#if GDCM_MAJOR_VERSION >= 2
+      mDicomHeader[mCurrentSerie].GetFile().Print(s);
+      const gdcm::File& header = mDicomHeader[mCurrentSerie].GetFile();
+      gdcm::StringFilter sf;
+      sf.SetFile( header );
+      const gdcm::DataSet &ds = header.GetDataSet();
+      gdcm::DataSet::ConstIterator it = ds.Begin();
+      for (; it != ds.End(); ++it )
+        {
+        const gdcm::DataElement & ref = *it;
+        const gdcm::Tag &         tag = ref.GetTag();
+        gdcm::VR vr = gdcm::DataSetHelper::ComputeVR(header, ds, tag);
+        if ( vr & ( gdcm::VR::OB | gdcm::VR::OF | gdcm::VR::OW | gdcm::VR::SQ | gdcm::VR::UN ) )
+          {
+          // What is the behavior for binary stuff ?
+          }
+        else /* if ( vr & gdcm::VR::VRASCII ) */
+          {
+          if ( tag.IsPublic() )
+            {
+            std::pair<std::string, std::string> p = sf.ToStringPair(tag);
+            l += QString("%1 : %2\n")
+              .arg( p.first.c_str() )
+              .arg( p.second.c_str() );
             }
-
-            mDicomDetails[(*mFilenames)[i]] = l.toStdString();
+          }
         }
-        ui.mDicomDetailsLabel->setText(mDicomDetails[(*mFilenames)[i]].c_str());
+#else
+      mDicomHeader[mCurrentSerie]->Print(s);
+      gdcm::File * header = mDicomHeader[mCurrentSerie];
+      gdcm::DocEntry * e = header->GetFirstEntry();
+      while (e) {
+        if (e->GetName() != "gdcm::Unknown") {
+          l += QString("%1 : %2\n")
+               .arg(e->GetName().c_str())
+               .arg((header->GetEntryValue(e->GetGroup(), e->GetElement())).c_str());
+        }
+        e = header->GetNextEntry();
+      }
+#endif
+
+      mDicomDetails[(*mFilenames)[i]] = l.toStdString();
     }
+    ui.mDicomDetailsLabel->setText(mDicomDetails[(*mFilenames)[i]].c_str());
+  }
 }
 //====================================================================
 
 //====================================================================
-QString vvDicomSeriesSelector::MakeDicomInfo(std::string & s, gdcm::File *header) {
-    QString n = QString("%1").arg(mListOfSeriesFilenames[s]->size());
-    QString size = QString("%1x%2x%3")
-                   .arg(header->GetXSize())
-                   .arg(header->GetYSize())
-                   .arg(header->GetZSize());
-    QString spacing = QString("%1x%2x%3")
-                      .arg(header->GetXSpacing())
-                      .arg(header->GetYSpacing())
-                      .arg(header->GetZSpacing());
-    QString origin = QString("%1x%2x%3")
-                     .arg(header->GetXOrigin())
-                     .arg(header->GetYOrigin())
-                     .arg(header->GetZOrigin());
-    QString ss =
-        //AddInfo(        "Serie ID   : ", s)+
-        AddInfo(header, "Patient : ", 0x0010,0x0010)+
-        AddInfo(        "Folder : ", QFileInfo((*mFilenames)[0].c_str()).canonicalPath().toStdString())+
-        AddInfo(header, "Series Description : ", 0x0008,0x103e)+
-        AddInfo(header, "Modality : ", 0x0008,0x0060)+
-        AddInfo(header, "# images : ", 0x0020,0x0013)+
-        AddInfo(        "# files : ", n.toStdString())+
-        AddInfo(        "Size : ", size.toStdString())+
-        AddInfo(        "Spacing : ", spacing.toStdString())+
-        AddInfo(        "Origin : ", origin.toStdString())+
-        AddInfo(header, "Pixel size : ", 0x0028,0x0100)+
-        AddInfo(        "Pixel type : ", header->GetPixelType());
-    return ss;
+#if GDCM_MAJOR_VERSION >= 2
+QString vvDicomSeriesSelector::MakeDicomInfo(std::string & s, const gdcm::Reader& header)
+{
+  QString n = QString("%1").arg(mListOfSeriesFilenames[s]->size());
+  const gdcm::File &f = header.GetFile();
+  std::vector<double> thespacing = gdcm::ImageHelper::GetSpacingValue(f);
+  std::vector<double> theorigin = gdcm::ImageHelper::GetOriginValue(f);
+
+  QString size = QString("%1x%2x%3")
+                 .arg(0)
+                 .arg(0)
+                 .arg(0);
+  QString spacing = QString("%1x%2x%3")
+                    .arg(thespacing[0])
+                    .arg(thespacing[1])
+                    .arg(thespacing[2]);
+  QString origin = QString("%1x%2x%3")
+                   .arg(theorigin[0])
+                   .arg(theorigin[1])
+                   .arg(theorigin[2]);
+
+  QString ss =
+    //AddInfo(        "Serie ID   : ", s)+
+    AddInfo(&header.GetFile(), "Patient : ", 0x0010,0x0010)+
+    AddInfo(        "Folder : ", QFileInfo((*mFilenames)[0].c_str()).canonicalPath().toStdString())+
+    AddInfo(&header.GetFile(), "Series Description : ", 0x0008,0x103e)+
+    AddInfo(&header.GetFile(), "Modality : ", 0x0008,0x0060)+
+    AddInfo(&header.GetFile(), "# images : ", 0x0020,0x0013)+
+    AddInfo(        "# files : ", n.toStdString())+
+    AddInfo(        "Size : ", size.toStdString())+
+    AddInfo(        "Spacing : ", spacing.toStdString())+
+    AddInfo(        "Origin : ", origin.toStdString())+
+    AddInfo(&header.GetFile(), "Pixel size : ", 0x0028,0x0100)+
+    AddInfo(        "Pixel type : ", "");
+  return ss;
+}
+#else
+QString vvDicomSeriesSelector::MakeDicomInfo(std::string & s, gdcm::File *header)
+{
+  QString n = QString("%1").arg(mListOfSeriesFilenames[s]->size());
+  QString size = QString("%1x%2x%3")
+                 .arg(header->GetXSize())
+                 .arg(header->GetYSize())
+                 .arg(header->GetZSize());
+  QString spacing = QString("%1x%2x%3")
+                    .arg(header->GetXSpacing())
+                    .arg(header->GetYSpacing())
+                    .arg(header->GetZSpacing());
+  QString origin = QString("%1x%2x%3")
+                   .arg(header->GetXOrigin())
+                   .arg(header->GetYOrigin())
+                   .arg(header->GetZOrigin());
+  QString ss =
+    //AddInfo(        "Serie ID   : ", s)+
+    AddInfo(header, "Patient : ", 0x0010,0x0010)+
+    AddInfo(        "Folder : ", QFileInfo((*mFilenames)[0].c_str()).canonicalPath().toStdString())+
+    AddInfo(header, "Series Description : ", 0x0008,0x103e)+
+    AddInfo(header, "Modality : ", 0x0008,0x0060)+
+    AddInfo(header, "# images : ", 0x0020,0x0013)+
+    AddInfo(        "# files : ", n.toStdString())+
+    AddInfo(        "Size : ", size.toStdString())+
+    AddInfo(        "Spacing : ", spacing.toStdString())+
+    AddInfo(        "Origin : ", origin.toStdString())+
+    AddInfo(header, "Pixel size : ", 0x0028,0x0100)+
+    AddInfo(        "Pixel type : ", header->GetPixelType());
+  return ss;
 }
+#endif
 //====================================================================
 
 //====================================================================
-QString vvDicomSeriesSelector::AddInfo(gdcm::File *header, QString n, uint16_t group, uint16_t elem) {
-    return AddInfo(n.toStdString(), header->GetEntryValue(group, elem));
+QString vvDicomSeriesSelector::AddInfo(const gdcm::File *header, QString n, uint16_t group, uint16_t elem)
+{
+#if GDCM_MAJOR_VERSION >= 2
+  gdcm::StringFilter sf;
+  sf.SetFile( *header );
+  gdcm::Tag t( group, elem );
+  std::string s = sf.ToString( t );
+  return AddInfo(n.toStdString(), s);
+#else
+  return AddInfo(n.toStdString(), const_cast<gdcm::File*>(header)->GetEntryValue(group, elem));
+#endif
 }
 //====================================================================
 
 //====================================================================
-QString vvDicomSeriesSelector::AddInfo(std::string n, std::string m) {
-    QString s = QString("%1 <font color=\"blue\">%2</font><br>").
-                arg(n.c_str()).arg(m.c_str());
-    return s;
+QString vvDicomSeriesSelector::AddInfo(std::string n, std::string m)
+{
+  QString s = QString("%1 <font color=\"blue\">%2</font><br>").
+              arg(n.c_str()).arg(m.c_str());
+  return s;
 }
 //====================================================================
 
 //====================================================================
-void vvDicomSeriesSelector::AddSerieToTheTable(int i, std::vector<std::string> & filenames) {
-    gdcm::File *header = new gdcm::File();
-    header->SetFileName(filenames[0]);
-    header->SetMaxSizeLoadEntry(16384);
-    header->SetLoadMode(gdcm::LD_NOSHADOW);// don't load shadow tags (in order to save memory)
-    header->Load();
-    //header->Print(cout);
-    // ->GetValEntry
-    //  mDicomHeader[] = header;
-
-    /*
-
-    QTableWidgetItem *newItem = new
-    QTableWidgetItem(QString("# images = %1").arg(header->GetImageNumber()));
-    //  newItem->setCheckState(Qt::Checked);
-    //newItem->setFlags(!Qt::ItemIsEditable);
-    DD(ui.mTableWidget->rowCount());
-    ui.mTableWidget->setItem(i, 0, newItem);
-    */
+void vvDicomSeriesSelector::AddSerieToTheTable(int i, std::vector<std::string> & filenames)
+{
+#if GDCM_MAJOR_VERSION >= 2
+#else
+  gdcm::File *header = new gdcm::File();
+  header->SetFileName(filenames[0]);
+  header->SetMaxSizeLoadEntry(16384);
+  header->SetLoadMode(gdcm::LD_NOSHADOW);// don't load shadow tags (in order to save memory)
+  header->Load();
+  //header->Print(cout);
+  // ->GetValEntry
+  //  mDicomHeader[] = header;
+
+  /*
+
+  QTableWidgetItem *newItem = new
+  QTableWidgetItem(QString("# images = %1").arg(header->GetImageNumber()));
+  //  newItem->setCheckState(Qt::Checked);
+  //newItem->setFlags(!Qt::ItemIsEditable);
+  DD(ui.mTableWidget->rowCount());
+  ui.mTableWidget->setItem(i, 0, newItem);
+  */
+#endif
 }
 //====================================================================
 
+
+//====================================================================
+void vvDicomSeriesSelector::itemMatrixSelectionChanged(int state)
+{
+  mPatientCoordinateSystem = state;
+}
+//====================================================================
+
+
 #endif // VVDICOMSERIESSELECTOR_CXX