Преглед изворни кода

Query change of the tableview is now emitted

Andreas Fetzer пре 12 година
родитељ
комит
d93e8fae42
2 измењених фајлова са 44 додато и 17 уклоњено
  1. 36 14
      Libs/DICOM/Widgets/ctkDICOMTableView.cpp
  2. 8 3
      Libs/DICOM/Widgets/ctkDICOMTableView.h

+ 36 - 14
Libs/DICOM/Widgets/ctkDICOMTableView.cpp

@@ -92,7 +92,8 @@ void ctkDICOMTableViewPrivate::setUpTableView()
   Q_Q(ctkDICOMTableView);
   if (this->DICOMDatabase)
   {
-    this->DICOMSQLModel.setQuery("select * from Patients", this->DICOMDatabase->database());
+    QString query = "select * from "+this->queryTableName;
+    this->DICOMSQLModel.setQuery(query, this->DICOMDatabase->database());
     this->DICOMSQLFilterModel->setSourceModel(&this->DICOMSQLModel);
     this->DICOMSQLFilterModel->setFilterKeyColumn(-1);
     this->DICOMSQLFilterModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
@@ -102,6 +103,7 @@ void ctkDICOMTableViewPrivate::setUpTableView()
     QObject::connect(this->tblDicomDatabaseView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
                      q, SLOT(onSelectionChanged()));
     QObject::connect(this->leSearchBox, SIGNAL(textChanged(QString)), this->DICOMSQLFilterModel, SLOT(setFilterWildcard(QString)));
+    QObject::connect(this->leSearchBox, SIGNAL(textChanged(QString)), q, SLOT(onFilterChanged()));
     QObject::connect(this->DICOMDatabase.data(), SIGNAL(databaseChanged()), q, SLOT(onDatabaseChanged()));
   }
 }
@@ -110,21 +112,25 @@ void ctkDICOMTableViewPrivate::setUpTableView()
 // ctkDICOMTableView methods
 
 //----------------------------------------------------------------------------
-ctkDICOMTableView::ctkDICOMTableView(QWidget *parent)
+ctkDICOMTableView::ctkDICOMTableView(QWidget *parent, QString queryTableName)
   :Superclass(parent)
   , d_ptr(new ctkDICOMTableViewPrivate(*this))
 {
   Q_D(ctkDICOMTableView);
+  d->queryTableName = queryTableName;
   d->init();
+  d->lblTableName->setText(queryTableName);
 }
 
-ctkDICOMTableView::ctkDICOMTableView(QWidget *parent, QSharedPointer<ctkDICOMDatabase> ctkDicomDataBase)
+ctkDICOMTableView::ctkDICOMTableView(QSharedPointer<ctkDICOMDatabase> ctkDicomDataBase, QWidget *parent, QString queryTableName)
   : Superclass(parent)
   , d_ptr(new ctkDICOMTableViewPrivate(*this))
 {
   this->setCTKDicomDataBase(ctkDicomDataBase);
   Q_D(ctkDICOMTableView);
+  d->queryTableName = queryTableName;
   d->init();
+  d->lblTableName->setText(queryTableName);
 }
 
 ctkDICOMTableView::~ctkDICOMTableView()
@@ -161,7 +167,6 @@ void ctkDICOMTableView::onSelectionChanged()
   Q_D(ctkDICOMTableView);
 
   QModelIndexList currentSelection = d->tblDicomDatabaseView->selectionModel()->selectedRows(0);
-//  QString query;
   QStringList uids;
   if (currentSelection.empty())
   {
@@ -171,29 +176,25 @@ void ctkDICOMTableView::onSelectionChanged()
   {
     foreach(QModelIndex i, currentSelection)
     {
-      qDebug() << i.data();
       uids << (QString("'") + i.data().toString() +"'");
     }
-    //    query.append(inExpression.join(",")).append(");");
     emit signalSelectionChanged(uids);
   }
-  foreach(QString s, uids)
-  {
-    qDebug() << s;
-  }
 }
 
 void ctkDICOMTableView::onDatabaseChanged()
 {
   Q_D(ctkDICOMTableView);
-  d->DICOMSQLModel.setQuery("select * from Patients", d->DICOMDatabase->database());
+  QString query = "select * from " + d->queryTableName;
+  d->DICOMSQLModel.setQuery(query, d->DICOMDatabase->database());
 }
 
-void ctkDICOMTableView::onQueryChanged(const QStringList& uids)
+void ctkDICOMTableView::onUpdateQuery(const QStringList& uids)
 {
   Q_D(ctkDICOMTableView);
   QString query;
-  if (uids.empty())
+
+  if (uids.empty() || d->queryForeignKey.length() == 0)
   {
     query = "select * from " + d->queryTableName;
   }
@@ -202,7 +203,28 @@ void ctkDICOMTableView::onQueryChanged(const QStringList& uids)
     query = "select * from "+d->queryTableName+" where "+d->queryForeignKey+" in ( ";
     query.append(uids.join(",")).append(");");
   }
-  qDebug() << query;
   d->DICOMSQLModel.setQuery(query, d->DICOMDatabase->database());
+  QStringList newUIDS = this->getUIDsForAllRows();
+  emit signalQueryChanged(newUIDS);
+}
+
+void ctkDICOMTableView::onFilterChanged()
+{
+  Q_D(ctkDICOMTableView);
+
+  QStringList uids = this->getUIDsForAllRows();
+  emit signalFilterChanged(uids);
+}
+
+QStringList ctkDICOMTableView::getUIDsForAllRows()
+{
+  Q_D(ctkDICOMTableView);
+  int numberOfRows = d->tblDicomDatabaseView->model()->rowCount();
+  QStringList uids;
+  for(int i = 0; i < numberOfRows; ++i)
+  {
+    uids << (QString("'") + d->tblDicomDatabaseView->model()->index(i,0).data().toString() +"'");
+  }
+  return uids;
 }
 

+ 8 - 3
Libs/DICOM/Widgets/ctkDICOMTableView.h

@@ -41,8 +41,8 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMTableView : public QWidget
 public:
   typedef QWidget Superclass;
 
-  explicit ctkDICOMTableView(QWidget* parent = 0);
-  ctkDICOMTableView (QWidget* parent, QSharedPointer<ctkDICOMDatabase> ctkDicomDataBase);
+  explicit ctkDICOMTableView(QWidget* parent = 0, QString queryTableName = "Patients");
+  ctkDICOMTableView (QSharedPointer<ctkDICOMDatabase> ctkDicomDataBase, QWidget* parent = 0, QString queryTableName = "Patients");
   virtual ~ctkDICOMTableView();
 
   void setCTKDicomDataBase(QSharedPointer<ctkDICOMDatabase> dicomDataBase);
@@ -54,18 +54,23 @@ public:
 
 public Q_SLOTS:
   void onSelectionChanged();
-  void onQueryChanged(const QStringList &uids);
+  void onUpdateQuery(const QStringList &uids);
 
 protected Q_SLOTS:
   void onDatabaseChanged();
+  void onFilterChanged();
 
 Q_SIGNALS:
   void signalSelectionChanged(const QStringList &uids);
+  void signalFilterChanged(const QStringList &uids);
+  void signalQueryChanged(const QStringList &uids);
 
 protected:
   QScopedPointer<ctkDICOMTableViewPrivate> d_ptr;
 
 private:
+  QStringList getUIDsForAllRows();
+
   Q_DECLARE_PRIVATE(ctkDICOMTableView)
   Q_DISABLE_COPY(ctkDICOMTableView)
 };