소스 검색

Add image auto-play function

nherlambang 14 년 전
부모
커밋
7a1acab5c3
3개의 변경된 파일75개의 추가작업 그리고 3개의 파일을 삭제
  1. 41 0
      Libs/DICOM/Widgets/Resources/UI/ctkDICOMAppWidget.ui
  2. 28 3
      Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp
  3. 6 0
      Libs/DICOM/Widgets/ctkDICOMAppWidget.h

+ 41 - 0
Libs/DICOM/Widgets/Resources/UI/ctkDICOMAppWidget.ui

@@ -290,6 +290,30 @@
             </property>
            </widget>
           </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_2">
+            <item>
+             <widget class="QCheckBox" name="autoPlayCheckbox">
+              <property name="text">
+               <string>auto-play</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QSlider" name="playSlider">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
          </layout>
         </widget>
        </item>
@@ -512,6 +536,22 @@
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>autoPlayCheckbox</sender>
+   <signal>stateChanged(int)</signal>
+   <receiver>ctkDICOMAppWidget</receiver>
+   <slot>onAutoPlayCheckboxStateChanged(int)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>430</x>
+     <y>596</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>369</x>
+     <y>318</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
  <slots>
   <signal>signal1()</signal>
@@ -525,5 +565,6 @@
   <slot>onPreviousSeries()</slot>
   <slot>onNextStudy()</slot>
   <slot>onPreviousStudy()</slot>
+  <slot>onAutoPlayCheckboxStateChanged(int)</slot>
  </slots>
 </ui>

+ 28 - 3
Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp

@@ -31,6 +31,7 @@
 #include <QAction>
 #include <QModelIndex>
 #include <QCheckBox>
+#include <QTimer>
 
 // ctkWidgets includes
 #include "ctkDirectoryButton.h"
@@ -61,7 +62,10 @@ static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMAppWidget");
 class ctkDICOMAppWidgetPrivate: public Ui_ctkDICOMAppWidget
 {
 public:
-  ctkDICOMAppWidgetPrivate();
+  ctkDICOMAppWidget* const q_ptr;
+  Q_DECLARE_PUBLIC(ctkDICOMAppWidget);
+
+  ctkDICOMAppWidgetPrivate(ctkDICOMAppWidget* );
 
   ctkFileDialog* importDIalog;
   ctkDICOMQueryRetrieveWidget* QueryRetrieveWidget;
@@ -72,17 +76,20 @@ public:
   ctkDICOMFilterProxyModel dicomProxyModel;
   QSharedPointer<ctkDICOMIndexer> dicomIndexer;
 
+  bool isAutoPlay;
+  QTimer* autoPlayTimer;
 };
 
 //----------------------------------------------------------------------------
 // ctkDICOMAppWidgetPrivate methods
 
-ctkDICOMAppWidgetPrivate::ctkDICOMAppWidgetPrivate(){
+ctkDICOMAppWidgetPrivate::ctkDICOMAppWidgetPrivate(ctkDICOMAppWidget* parent): q_ptr(parent){
   dicomDatabase = QSharedPointer<ctkDICOMDatabase> (new ctkDICOMDatabase);
   thumbnailGenerator = QSharedPointer <ctkDICOMThumbnailGenerator> (new ctkDICOMThumbnailGenerator);
   dicomDatabase->setThumbnailGenerator(thumbnailGenerator.data());
   dicomIndexer = QSharedPointer<ctkDICOMIndexer> (new ctkDICOMIndexer);
   dicomIndexer->setThumbnailGenerator(thumbnailGenerator.data());
+  this->isAutoPlay = false;
 }
 
 //----------------------------------------------------------------------------
@@ -90,7 +97,7 @@ ctkDICOMAppWidgetPrivate::ctkDICOMAppWidgetPrivate(){
 
 //----------------------------------------------------------------------------
 ctkDICOMAppWidget::ctkDICOMAppWidget(QWidget* _parent):Superclass(_parent), 
-  d_ptr(new ctkDICOMAppWidgetPrivate)
+    d_ptr(new ctkDICOMAppWidgetPrivate(this))
 {
   Q_D(ctkDICOMAppWidget);  
 
@@ -512,3 +519,21 @@ void ctkDICOMAppWidget::onTreeExpanded(const QModelIndex &index){
     Q_D(ctkDICOMAppWidget);
     d->treeView->resizeColumnToContents(0);
 }
+
+//----------------------------------------------------------------------------
+void ctkDICOMAppWidget::onAutoPlayCheckboxStateChanged(int state){
+    Q_D(ctkDICOMAppWidget);
+
+    if(state == 0){ //OFF
+        disconnect(d->autoPlayTimer, SIGNAL(timeout()), this, SLOT(onAutoPlayTimer()));
+        d->autoPlayTimer->deleteLater();
+    }else if(state == 2){ //ON
+        d->autoPlayTimer = new QTimer(this);
+        connect(d->autoPlayTimer, SIGNAL(timeout()), this, SLOT(onAutoPlayTimer()));
+        d->autoPlayTimer->start(50);
+    }
+}
+
+void ctkDICOMAppWidget::onAutoPlayTimer(){
+    this->onNextImage();
+}

+ 6 - 0
Libs/DICOM/Widgets/ctkDICOMAppWidget.h

@@ -80,6 +80,12 @@ protected slots:
     /// To be called when an entry of the tree list is expanded
     void onTreeExpanded(const QModelIndex& index);
 
+    /// To be called when auto-play checkbox state changed
+    void onAutoPlayCheckboxStateChanged(int state);
+
+
+    void onAutoPlayTimer();
+
 private:
   Q_DECLARE_PRIVATE(ctkDICOMAppWidget);
   Q_DISABLE_COPY(ctkDICOMAppWidget);