Prechádzať zdrojové kódy

seqInsert and itemInsert modified

Alireza Mehrtash 11 rokov pred
rodič
commit
a7a9af8ae9

+ 3 - 10
Libs/DICOM/Core/Testing/Cpp/ctkDICOMModelObjectTest1.cpp

@@ -26,8 +26,6 @@
 // CTK Core
 // CTK Core
 #include "ctkDICOMModelObject.h"
 #include "ctkDICOMModelObject.h"
 
 
-
-
 // Qt includes
 // Qt includes
 #include <QApplication>
 #include <QApplication>
 #include <QFileDialog>
 #include <QFileDialog>
@@ -35,17 +33,10 @@
 #include <QTreeView>
 #include <QTreeView>
 #include <QHeaderView>
 #include <QHeaderView>
 
 
-
-
-
 int main(int argv, char** argc)
 int main(int argv, char** argc)
 {
 {
   QApplication app(argv, argc);
   QApplication app(argv, argc);
 
 
-  qApp->setOrganizationName("CTK");
-  qApp->setOrganizationDomain("commontk.org");
-  qApp->setApplicationName("ctkDICOMHeaderViewer");
-
   QString fileName;
   QString fileName;
 
 
   if( QApplication::argc() > 1)
   if( QApplication::argc() > 1)
@@ -64,9 +55,11 @@ int main(int argv, char** argc)
 	}
 	}
     }
     }
   
   
+
   ctkDICOMModelObject dcmInfoModel;
   ctkDICOMModelObject dcmInfoModel;
   dcmInfoModel.setFile(fileName);
   dcmInfoModel.setFile(fileName);
- 
+    
+
   QTreeView *viewer = new QTreeView();
   QTreeView *viewer = new QTreeView();
   viewer->setModel( &dcmInfoModel);
   viewer->setModel( &dcmInfoModel);
   viewer->expandAll();
   viewer->expandAll();

+ 52 - 64
Libs/DICOM/Core/ctkDICOMModelObject.cpp

@@ -51,6 +51,8 @@ public:
   void init();
   void init();
   void ctkDICOMModelObjectPrivate::itemInsert( DcmItem *dataset, QStandardItem *parent);
   void ctkDICOMModelObjectPrivate::itemInsert( DcmItem *dataset, QStandardItem *parent);
   void ctkDICOMModelObjectPrivate::seqInsert( DcmSequenceOfItems *dataset, QStandardItem *parent);
   void ctkDICOMModelObjectPrivate::seqInsert( DcmSequenceOfItems *dataset, QStandardItem *parent);
+  QString ctkDICOMModelObjectPrivate::getTagValue( DcmElement *dcmElem);
+  QStandardItem* ctkDICOMModelObjectPrivate::populateModelRow(const QString& tagName,const QString& tagValue, QStandardItem *parent);
 
 
   DcmFileFormat fileFormat;
   DcmFileFormat fileFormat;
   QStandardItem *rootItem;
   QStandardItem *rootItem;
@@ -100,48 +102,19 @@ void ctkDICOMModelObjectPrivate::itemInsert( DcmItem *dataset, QStandardItem *pa
 	  return;
 	  return;
 	}
 	}
 
 
-      //      std::cerr << "node is dcmElem=" << dcmElem << "\n";
+            std::cerr << "node is dcmElem=" << dcmElem << "\n";
 
 
       if( dcmElem)
       if( dcmElem)
 	{
 	{
-	  std::ostringstream value;
-	  OFString part;
-	  std::string sep;
-	  int mult = dcmElem->getVM();
-	  int pos;
-	  if( mult>1)
-	    {
-	      value << "[" << mult << "] ";
-	    }
-	  // TODO define max elem per line
-	  for( pos=0; pos < std::min(mult,10); pos++)
-	    {
-	      value << sep;
-	      OFCondition status = dcmElem->getOFString( part, pos);
-	      if( status.good())
-		{
-		  value << part.c_str();
-		  sep = ", ";
-		}
-	    }
-	  if( pos < mult-1)
-	    {
-	      value << " ...";
-	    }
-	  tagValue = value.str().c_str();
+     
+	  tagValue = getTagValue(dcmElem);
 	}
 	}
       // create items ...
       // create items ...
-      QStandardItem *tagItem = new QStandardItem( tagName);
-      QStandardItem *valItem = new QStandardItem( tagValue);
-      // ... and insert them
-      QList<QStandardItem *> modelRow;
-      modelRow.append( tagItem);
-      modelRow.append( valItem);
-      parent->appendRow( modelRow);
+     QStandardItem *tagItem = populateModelRow(tagName,tagValue,parent);
 
 
 
 
-      //      std::cerr << "    "
-      //		<< tagName.toStdString() << " " << tagValue.toStdString();
+           // std::cerr << "    "
+     	//	<< tagName.toStdString() << " " << tagValue.toStdString();
 
 
 
 
       if( dcmElem)
       if( dcmElem)
@@ -164,11 +137,12 @@ void ctkDICOMModelObjectPrivate::itemInsert( DcmItem *dataset, QStandardItem *pa
 void ctkDICOMModelObjectPrivate::seqInsert( DcmSequenceOfItems *dataset, QStandardItem *parent)
 void ctkDICOMModelObjectPrivate::seqInsert( DcmSequenceOfItems *dataset, QStandardItem *parent)
 {
 {
 
 
-  //  std::cerr << "Entering seqInsert" << "\n";
+   std::clog << "Entering seqInsert" << "\n";
+  
   DcmObject *dO = dataset->nextInContainer( NULL);
   DcmObject *dO = dataset->nextInContainer( NULL);
 
 
-  //  std::cerr << "Entered nested level   d0=" << dO << "\n";
-  //  std::cerr << "First node is dcmElem=" << dynamic_cast<DcmElement *> (dO) << "\n";
+  std::clog << "Entered nested level   d0=" << dO << "\n";
+  std::clog << "First node is dcmElem=" << dynamic_cast<DcmElement *> (dO) << "\n";
 
 
   for( ; dO; dO = dataset->nextInContainer(dO))
   for( ; dO; dO = dataset->nextInContainer(dO))
     {
     {
@@ -189,7 +163,37 @@ void ctkDICOMModelObjectPrivate::seqInsert( DcmSequenceOfItems *dataset, QStanda
 
 
       if( dcmElem)
       if( dcmElem)
 	{
 	{
-	  std::ostringstream value;
+	  tagValue = getTagValue(dcmElem);
+	}
+      
+      QStandardItem *tagItem = populateModelRow(tagName,tagValue,parent);
+
+      //      std::cerr << "    "
+      //		<< tagName.toStdString() << " " << tagValue.toStdString();
+
+
+      if( dcmElem)
+	{
+	  // 	  std::cerr << " >> l=" << dcmElem->isLeaf() 
+	  //		    << "  nx=" << dataset->nextInContainer( dcmElem);
+	  if( !dcmElem->isLeaf())
+	    {
+	      // now dcmElem  points to a sequenceOfItems
+			ctkDICOMModelObjectPrivate::seqInsert( dynamic_cast<DcmSequenceOfItems*> (dcmElem), tagItem);	 
+	    }
+	}
+      else if( tag.getXTag() == DCM_Item)
+	{
+	      itemInsert( dynamic_cast<DcmItem*> (dO), tagItem);	 
+	}
+      //      std::cerr  << "\n";
+    }
+}
+//------------------------------------------------------------------------------
+QString ctkDICOMModelObjectPrivate::getTagValue( DcmElement *dcmElem)
+{
+	QString tagValue = "";
+std::ostringstream value;
 	  OFString part;
 	  OFString part;
 	  std::string sep;
 	  std::string sep;
 	  int mult = dcmElem->getVM();
 	  int mult = dcmElem->getVM();
@@ -214,8 +218,13 @@ void ctkDICOMModelObjectPrivate::seqInsert( DcmSequenceOfItems *dataset, QStanda
 	      value << " ...";
 	      value << " ...";
 	    }
 	    }
 	  tagValue = value.str().c_str();
 	  tagValue = value.str().c_str();
-	}
-      // create items ...
+	  return tagValue;
+}
+
+//------------------------------------------------------------------------------
+ QStandardItem* ctkDICOMModelObjectPrivate::populateModelRow(const QString& tagName,const QString& tagValue, QStandardItem *parent)
+ {
+     // create items ...
       QStandardItem *tagItem = new QStandardItem( tagName);
       QStandardItem *tagItem = new QStandardItem( tagName);
       QStandardItem *valItem = new QStandardItem( tagValue);
       QStandardItem *valItem = new QStandardItem( tagValue);
       // ... and insert them
       // ... and insert them
@@ -223,29 +232,8 @@ void ctkDICOMModelObjectPrivate::seqInsert( DcmSequenceOfItems *dataset, QStanda
       modelRow.append( tagItem);
       modelRow.append( tagItem);
       modelRow.append( valItem);
       modelRow.append( valItem);
       parent->appendRow( modelRow);
       parent->appendRow( modelRow);
-
-
-      //      std::cerr << "    "
-      //		<< tagName.toStdString() << " " << tagValue.toStdString();
-
-
-      if( dcmElem)
-	{
-	  // 	  std::cerr << " >> l=" << dcmElem->isLeaf() 
-	  //		    << "  nx=" << dataset->nextInContainer( dcmElem);
-	  if( !dcmElem->isLeaf())
-	    {
-	      // now dcmElem  points to a sequenceOfItems
-			ctkDICOMModelObjectPrivate::seqInsert( dynamic_cast<DcmSequenceOfItems*> (dcmElem), tagItem);	 
-	    }
-	}
-      else if( tag.getXTag() == DCM_Item)
-	{
-	      itemInsert( dynamic_cast<DcmItem*> (dO), tagItem);	 
-	}
-      //      std::cerr  << "\n";
-    }
-}
+	  return tagItem;
+ }
 
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------