瀏覽代碼

Add parameterChanged() signal to ctkDICOMQueryWidget

This signal is emitted when any of the search parameters changed and idle for a certain amount of time
nherlambang 14 年之前
父節點
當前提交
59e8547978

+ 7 - 7
Libs/DICOM/Widgets/Resources/UI/ctkDICOMQueryWidget.ui

@@ -32,7 +32,7 @@
       </size>
      </property>
      <property name="currentIndex">
-      <number>0</number>
+      <number>3</number>
      </property>
      <widget class="QWidget" name="Name">
       <attribute name="title">
@@ -43,7 +43,7 @@
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_7">
        <item>
-        <widget class="QLineEdit" name="nameSearch"/>
+        <widget class="QLineEdit" name="NameSearch"/>
        </item>
       </layout>
      </widget>
@@ -56,7 +56,7 @@
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_8">
        <item>
-        <widget class="QLineEdit" name="studySearch"/>
+        <widget class="QLineEdit" name="StudySearch"/>
        </item>
       </layout>
      </widget>
@@ -69,7 +69,7 @@
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_9">
        <item>
-        <widget class="QLineEdit" name="seriesSearch"/>
+        <widget class="QLineEdit" name="SeriesSearch"/>
        </item>
       </layout>
      </widget>
@@ -82,7 +82,7 @@
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_10">
        <item>
-        <widget class="QLineEdit" name="idSearch"/>
+        <widget class="QLineEdit" name="IdSearch"/>
        </item>
       </layout>
      </widget>
@@ -107,7 +107,7 @@
         </property>
         <layout class="QVBoxLayout" name="verticalLayout_2">
          <item>
-          <widget class="ctkDateRangeWidget" name="dateRangeWidget" native="true"/>
+          <widget class="ctkDateRangeWidget" name="DateRangeWidget" native="true"/>
          </item>
          <item>
           <spacer name="verticalSpacer">
@@ -135,7 +135,7 @@
         </property>
         <layout class="QVBoxLayout" name="verticalLayout_5">
          <item>
-          <widget class="ctkModalityWidget" name="modalityWidget" native="true">
+          <widget class="ctkModalityWidget" name="ModalityWidget" native="true">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
              <horstretch>0</horstretch>

+ 57 - 19
Libs/DICOM/Widgets/ctkDICOMQueryWidget.cpp

@@ -7,6 +7,8 @@
 // STD includes
 #include <iostream>
 
+// Qt includes
+#include <QTimer>
 
 //logger
 #include <ctkLogger.h>
@@ -17,12 +19,30 @@ static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMQueryWidget");
 class ctkDICOMQueryWidgetPrivate: public Ui_ctkDICOMQueryWidget
 {
 public:
-  ctkDICOMQueryWidgetPrivate(){}
+  ctkDICOMQueryWidgetPrivate();
+  ~ctkDICOMQueryWidgetPrivate();
+
+  QTimer* SearchTimer;
+  int SearchIdleTime;
 };
 
 //----------------------------------------------------------------------------
 // ctkDICOMQueryWidgetPrivate methods
 
+//----------------------------------------------------------------------------
+ctkDICOMQueryWidgetPrivate::ctkDICOMQueryWidgetPrivate(){
+  // set default of search idle time to 500 ms
+  this->SearchIdleTime = 500;
+
+  // Initialize search timer
+  this->SearchTimer = new QTimer();
+  this->SearchTimer->setSingleShot(true);
+}
+
+//----------------------------------------------------------------------------
+ctkDICOMQueryWidgetPrivate::~ctkDICOMQueryWidgetPrivate(){
+  this->SearchTimer->deleteLater();
+}
 
 //----------------------------------------------------------------------------
 // ctkDICOMQueryWidget methods
@@ -35,21 +55,31 @@ ctkDICOMQueryWidget::ctkDICOMQueryWidget(QWidget* _parent):Superclass(_parent),
   
   d->setupUi(this);
 
-  connect(d->nameSearch, SIGNAL(textChanged(QString)), this, SIGNAL(nameSearchTextChanged(QString)));
-  connect(d->studySearch, SIGNAL(textChanged(QString)), this, SIGNAL(studySearchTextChanged(QString)));
-  connect(d->seriesSearch, SIGNAL(textChanged(QString)), this, SIGNAL(seriesSearchTextChanged(QString)));
-  connect(d->idSearch, SIGNAL(textChanged(QString)), this, SIGNAL(idSearchTextChanged(QString)));
+  connect(d->NameSearch, SIGNAL(textChanged(QString)), this, SLOT(startTimer()));
+  connect(d->StudySearch, SIGNAL(textChanged(QString)), this, SLOT(startTimer()));
+  connect(d->SeriesSearch, SIGNAL(textChanged(QString)), this, SLOT(startTimer()));
+  connect(d->IdSearch, SIGNAL(textChanged(QString)), this, SLOT(startTimer()));
+  connect(d->DateRangeWidget, SIGNAL(endDateTimeChanged(QDateTime)), this, SLOT(startTimer()));
+  connect(d->DateRangeWidget, SIGNAL(startDateTimeChanged(QDateTime)), this, SLOT(startTimer()));
+  connect(d->ModalityWidget, SIGNAL(selectedModalitiesChanged(QStringList)), this, SLOT(startTimer()));
+
+  connect(d->SearchTimer, SIGNAL(timeout()), this, SIGNAL(parameterChanged()));
 }
 
 //----------------------------------------------------------------------------
 ctkDICOMQueryWidget::~ctkDICOMQueryWidget()
 {
-    Q_D(ctkDICOMQueryWidget);
+  Q_D(ctkDICOMQueryWidget);
+
+  disconnect(d->NameSearch, SIGNAL(textChanged(QString)), this, SLOT(startTimer()));
+  disconnect(d->StudySearch, SIGNAL(textChanged(QString)), this, SLOT(startTimer()));
+  disconnect(d->SeriesSearch, SIGNAL(textChanged(QString)), this, SLOT(startTimer()));
+  disconnect(d->IdSearch, SIGNAL(textChanged(QString)), this, SLOT(startTimer()));
+  disconnect(d->DateRangeWidget, SIGNAL(endDateTimeChanged(QDateTime)), this, SLOT(startTimer()));
+  disconnect(d->DateRangeWidget, SIGNAL(startDateTimeChanged(QDateTime)), this, SLOT(startTimer()));
+  disconnect(d->ModalityWidget, SIGNAL(selectedModalitiesChanged(QStringList)), this, SLOT(startTimer()));
 
-    disconnect(d->nameSearch, SIGNAL(textChanged(QString)), this, SIGNAL(nameSearchTextChanged(QString)));
-    disconnect(d->studySearch, SIGNAL(textChanged(QString)), this, SIGNAL(studySearchTextChanged(QString)));
-    disconnect(d->seriesSearch, SIGNAL(textChanged(QString)), this, SIGNAL(seriesSearchTextChanged(QString)));
-    disconnect(d->idSearch, SIGNAL(textChanged(QString)), this, SIGNAL(idSearchTextChanged(QString)));
+  disconnect(d->SearchTimer, SIGNAL(timeout()), this, SIGNAL(parameterChanged()));
 }
 
 
@@ -60,25 +90,33 @@ QMap<QString,QVariant> ctkDICOMQueryWidget::parameters()
 
   QMap<QString,QVariant> parameters;
 
-  parameters["Name"] = d->nameSearch->text();
-  parameters["Study"] = d->studySearch->text();
-  parameters["Series"] = d->seriesSearch->text();
-  parameters["ID"] = d->idSearch->text();
+  parameters["Name"] = d->NameSearch->text();
+  parameters["Study"] = d->StudySearch->text();
+  parameters["Series"] = d->SeriesSearch->text();
+  parameters["ID"] = d->IdSearch->text();
 
-  if ( !d->modalityWidget->areAllModalitiesSelected() )
+  if ( !d->ModalityWidget->areAllModalitiesSelected() )
   { // some PACS (conquest) don't seem to accept list of modalities,
     // so don't include the list at all when all modalities are desired
     // TODO: think about how to fix this for conquest at the query level
-    parameters["Modalities"] = d->modalityWidget->selectedModalities();
+    parameters["Modalities"] = d->ModalityWidget->selectedModalities();
   }
 
-  if ( !d->dateRangeWidget->isAnyDate() )
+  if ( !d->DateRangeWidget->isAnyDate() )
   {
-    QDate startDate = d->dateRangeWidget->startDateTime().date();
-    QDate endDate = d->dateRangeWidget->endDateTime().date();
+    QDate startDate = d->DateRangeWidget->startDateTime().date();
+    QDate endDate = d->DateRangeWidget->endDateTime().date();
     parameters["StartDate"] = startDate.toString("yyyyMMdd");
     parameters["EndDate"] = endDate.toString("yyyyMMdd");
   }
 
   return parameters;
 }
+
+//----------------------------------------------------------------------------
+void ctkDICOMQueryWidget::startTimer(){
+  Q_D(ctkDICOMQueryWidget);
+
+  d->SearchTimer->stop();
+  d->SearchTimer->start(d->SearchIdleTime);
+}

+ 5 - 4
Libs/DICOM/Widgets/ctkDICOMQueryWidget.h

@@ -47,10 +47,11 @@ private:
   Q_DISABLE_COPY(ctkDICOMQueryWidget);
 
 signals:
-  void nameSearchTextChanged(const QString& text);
-  void studySearchTextChanged(const QString& text);
-  void seriesSearchTextChanged(const QString& text);
-  void idSearchTextChanged(const QString& text);
+  /// This signal is emitted when any of the search parameters changed.
+  void parameterChanged();
+
+protected slots:
+  void startTimer();
 };
 
 #endif