Browse Source

Change slice position when dragging vertically on ctkDICOMDatasetView

nherlambang 14 years ago
parent
commit
19f56e9d95

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

@@ -123,6 +123,9 @@ ctkDICOMAppWidget::ctkDICOMAppWidget(QWidget* _parent):Superclass(_parent),
   connect(d->DICOMDatabase.data(), SIGNAL( databaseChanged() ), &(d->DICOMModel), SLOT( reset() ) );
   connect(d->QueryRetrieveWidget, SIGNAL( canceled() ), d->QueryRetrieveWidget, SLOT( hide() ) );
 
+  connect(d->imagePreview, SIGNAL(requestNextImage()), this, SLOT(onNextImage()));
+  connect(d->imagePreview, SIGNAL(requestPreviousImage()), this, SLOT(onPreviousImage()));
+
 }
 
 //----------------------------------------------------------------------------

+ 30 - 0
Libs/DICOM/Widgets/ctkDICOMDatasetView.cpp

@@ -39,6 +39,7 @@
 #include <QKeyEvent>
 #include <QPainter>
 #include <QFile>
+#include <QMouseEvent>
 
 static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMDatasetView");
 
@@ -60,6 +61,8 @@ public:
 
   QModelIndex currentImageIndex;
 
+  QPoint oldMousePos;
+
   void init();
 
   void onPatientModelSelected(const QModelIndex& index);
@@ -280,6 +283,33 @@ void ctkDICOMDatasetView::update( bool zoomChanged,
 }
 
 // -------------------------------------------------------------------------
+void ctkDICOMDatasetView::mousePressEvent(QMouseEvent* event){
+    Q_D(ctkDICOMDatasetView);
+
+    event->accept();
+
+    d->oldMousePos = event->pos();
+}
+
+// -------------------------------------------------------------------------
+void ctkDICOMDatasetView::mouseMoveEvent(QMouseEvent* event){
+    Q_D(ctkDICOMDatasetView);
+
+    if(event->buttons() == Qt::LeftButton){
+        Q_D(ctkDICOMDatasetView);
+        event->accept();
+        QPoint nowPos = event->pos();
+        if(nowPos.y() > d->oldMousePos.y()){
+            emit requestNextImage();
+            d->oldMousePos = event->pos();
+        }else if(nowPos.y() < d->oldMousePos.y()){
+            emit requestPreviousImage();
+            d->oldMousePos = event->pos();
+        }
+    }
+}
+
+// -------------------------------------------------------------------------
 void ctkDICOMDatasetView::onModelSelected(const QModelIndex &index){
     Q_D(ctkDICOMDatasetView);
 

+ 9 - 0
Libs/DICOM/Widgets/ctkDICOMDatasetView.h

@@ -57,6 +57,11 @@ public:
 
   QModelIndex currentImageIndex();
 
+signals:
+
+  void requestNextImage();
+  void requestPreviousImage();
+
 public slots:
 
   void addImage( const ctkDICOMImage & image );
@@ -72,6 +77,10 @@ protected:
   ctkDICOMDatasetView( ctkDICOMDatasetViewPrivate & pvt,
     QWidget* parent=0 );
 
+  /// re-implemented QWidget event functions
+  virtual void mousePressEvent( QMouseEvent * event );
+  virtual void	mouseMoveEvent( QMouseEvent * event );
+
 private:
 
   QScopedPointer< ctkDICOMDatasetViewPrivate > d_ptr;