Forráskód Böngészése

Added sql query conditions to subordinate tables when selection or filter changed

Andreas Fetzer 11 éve
szülő
commit
10839fd835

+ 48 - 0
Libs/DICOM/Widgets/Resources/UI/ctkDICOMTableManager.ui

@@ -54,6 +54,38 @@ QSplitter::handle:vertical {height: 2px;}</string>
  <connections>
  <connection>
    <sender>patientsTable</sender>
+   <signal>selectionChanged(QStringList)</signal>
+   <receiver>ctkDICOMTableManager</receiver>
+   <slot>onPatientsSelectionChanged(QStringList)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>220</x>
+     <y>186</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>343</x>
+     <y>166</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>studiesTable</sender>
+   <signal>selectionChanged(QStringList)</signal>
+   <receiver>ctkDICOMTableManager</receiver>
+   <slot>onStudiesSelectionChanged(QStringList)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>220</x>
+     <y>186</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>343</x>
+     <y>166</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>patientsTable</sender>
    <signal>queryChanged(QStringList)</signal>
    <receiver>ctkDICOMTableManager</receiver>
    <slot>onPatientsQueryChanged(QStringList)</slot>
@@ -69,6 +101,22 @@ QSplitter::handle:vertical {height: 2px;}</string>
    </hints>
   </connection>
   <connection>
+   <sender>studiesTable</sender>
+   <signal>queryChanged(QStringList)</signal>
+   <receiver>ctkDICOMTableManager</receiver>
+   <slot>onStudiesQueryChanged(QStringList)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>220</x>
+     <y>186</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>343</x>
+     <y>166</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
    <sender>patientsTable</sender>
    <signal>queryChanged(QStringList)</signal>
    <receiver>studiesTable</receiver>

+ 37 - 7
Libs/DICOM/Widgets/ctkDICOMTableManager.cpp

@@ -74,9 +74,6 @@ void ctkDICOMTableManagerPrivate::init()
   this->seriesTable->setQueryTableName("Series");
   this->seriesTable->setQueryForeignKey("StudyInstanceUID");
 
-//  QObject::connect(this->patientsTable, SIGNAL(queryChanged(const QStringList&)),
-//                   q, SLOT(onPatientsQueryChanged(const QStringList&)));
-
   // For propagating patient selection changes
   QObject::connect(this->patientsTable, SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),
                    q, SIGNAL(patientsSelectionChanged(const QItemSelection&, const QItemSelection&)));
@@ -186,15 +183,48 @@ QStringList ctkDICOMTableManager::currentSeriesSelection()
 
 void ctkDICOMTableManager::onPatientsQueryChanged(const QStringList &uids)
 {
-  qDebug()<<"###PatientQUERY";
+  Q_D(ctkDICOMTableManager);
+  const std::pair<QString, QStringList> patientCondition("Patients.UID", uids);
+  d->seriesTable->addSqlWhereCondition(patientCondition);
+  d->studiesTable->addSqlWhereCondition(patientCondition);
 }
 
 void ctkDICOMTableManager::onStudiesQueryChanged(const QStringList &uids)
 {
-
+  Q_D(ctkDICOMTableManager);
+  const std::pair<QString, QStringList> studiesCondition("Studies.StudyInstanceUID", uids);
+  d->seriesTable->addSqlWhereCondition(studiesCondition);
 }
 
-void ctkDICOMTableManager::onSeriesQueryChanged(const QStringList &uids)
+void ctkDICOMTableManager::onPatientsSelectionChanged(const QStringList &uids)
 {
-
+  std::pair<QString, QStringList> patientCondition;
+  patientCondition.first = "Patients.UID";
+  Q_D(ctkDICOMTableManager);
+  if (!uids.empty())
+    {
+      patientCondition.second = uids;
+    }
+  else
+    {
+      patientCondition.second = d->patientsTable->uidsForAllRows();
+    }
+  d->studiesTable->addSqlWhereCondition(patientCondition);
+  d->seriesTable->addSqlWhereCondition(patientCondition);
+}
+
+void ctkDICOMTableManager::onStudiesSelectionChanged(const QStringList &uids)
+{
+  std::pair<QString, QStringList> studiesCondition;
+  studiesCondition.first = "Studies.StudyInstanceUID";
+  Q_D(ctkDICOMTableManager);
+  if (!uids.empty())
+    {
+      studiesCondition.second = uids;
+    }
+  else
+    {
+      studiesCondition.second = d->studiesTable->uidsForAllRows();
+    }
+  d->seriesTable->addSqlWhereCondition(studiesCondition);
 }

+ 2 - 1
Libs/DICOM/Widgets/ctkDICOMTableManager.h

@@ -73,7 +73,8 @@ public Q_SLOTS:
 
   void onPatientsQueryChanged(const QStringList&);
   void onStudiesQueryChanged(const QStringList&);
-  void onSeriesQueryChanged(const QStringList&);
+  void onPatientsSelectionChanged(const QStringList&);
+  void onStudiesSelectionChanged(const QStringList&);
 
 Q_SIGNALS:
   /// Signals for propagating selection changes of the different tables

+ 6 - 13
Libs/DICOM/Widgets/ctkDICOMTableView.cpp

@@ -232,12 +232,7 @@ void ctkDICOMTableView::onSelectionChanged()
 
   foreach(QModelIndex i, selectedRows)
     {
-      uids<< (QString("'") + i.data().toString() +"'");
-    }
-
-  if (uids.empty())
-    {
-      uids = d->quotedUidsForAllRows();
+      uids<< i.data().toString();
     }
   emit selectionChanged(uids);
 }
@@ -267,22 +262,20 @@ void ctkDICOMTableView::onFilterChanged()
 
   const QStringList uids = this->uidsForAllRows();
   d->tblDicomDatabaseView->clearSelection();
-//  emit filterChanged(uids);
   emit queryChanged(uids);
 }
 
 //------------------------------------------------------------------------------
 void ctkDICOMTableView::setQuery(const QStringList &uids)
 {
-  qDebug()<<"###PatientSEtQUERY";
   Q_D(ctkDICOMTableView);
   QString query = ("select distinct %1.* from Patients, Series, Studies where "
                    "Patients.UID = Studies.PatientsUID and Studies.StudyInstanceUID = Series.StudyInstanceUID");
 
   if (!uids.empty() && d->queryForeignKey.length() != 0)
     {
-      query += " and %1."+d->queryForeignKey+" in ( ";
-      query.append(uids.join(",")).append(")");
+      query += " and %1."+d->queryForeignKey+" in ( '";
+      query.append(uids.join("','")).append("')");
     }
   if (!d->sqlWhereConditions.empty())
     {
@@ -291,8 +284,8 @@ void ctkDICOMTableView::setQuery(const QStringList &uids)
         {
           if (!i.value().empty())
             {
-              query += " and "+i.key()+" in ( ";
-              query.append(i.value().join(",")).append(")");
+              query += " and "+i.key()+" in ( '";
+              query.append(i.value().join("','")).append("')");
             }
           ++i;
         }
@@ -339,7 +332,7 @@ QStringList ctkDICOMTableView::currentSelection() const
 
   foreach(QModelIndex i, currentSelection)
     {
-      uids<< /*(QString("'") + */i.data().toString() /*+"'")*/;
+      uids<< i.data().toString();
     }
 
   return  uids;