Fix view[0] repeat connect slots bug.
This commit is contained in:
@@ -35,16 +35,23 @@ void ImageViewManager::add(DicomImageView *view) {
|
|||||||
connect(view, &DicomImageView::onViewDoubleClick,
|
connect(view, &DicomImageView::onViewDoubleClick,
|
||||||
this, &ImageViewManager::viewDoubleClicked);
|
this, &ImageViewManager::viewDoubleClicked);
|
||||||
|
|
||||||
connect(view, &DicomImageView::afterViewCleared,this, &ImageViewManager::viewCleared);
|
connect(view, &DicomImageView::afterViewCleared,
|
||||||
|
this, &ImageViewManager::viewCleared);
|
||||||
|
|
||||||
connect(view, &DicomImageView::onDragDrop, [=](DicomImageView *view, const std::string &id) {
|
connect(view, &DicomImageView::onDragDrop, [=](DicomImageView *view, const std::string &id) {
|
||||||
setCurrentView(view);
|
setCurrentView(view);
|
||||||
viewReload(id);
|
viewReload(id);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(view, &DicomImageView::onSync,
|
// connect(view, &DicomImageView::onSync,
|
||||||
this, &ImageViewManager::viewSynced);
|
// this, &ImageViewManager::viewSynced);
|
||||||
|
|
||||||
|
connect(view, &DicomImageView::onEndPan,
|
||||||
|
this, &ImageViewManager::viewPaned);
|
||||||
|
connect(view, &DicomImageView::onEndZoom,
|
||||||
|
this, &ImageViewManager::viewZoomed);
|
||||||
|
connect(view, &DicomImageView::onEndWindowLevel,
|
||||||
|
this, &ImageViewManager::viewEndWindowLeveL);
|
||||||
vList.push_back(view);
|
vList.push_back(view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -58,9 +65,26 @@ void ImageViewManager::remove(DicomImageView *view) {
|
|||||||
|
|
||||||
void ImageViewManager::remove(int idx) {
|
void ImageViewManager::remove(int idx) {
|
||||||
if (idx >= vList.size()) return;
|
if (idx >= vList.size()) return;
|
||||||
auto view = vList.at(idx);
|
vList.takeAt(idx)->deleteLater();
|
||||||
vList.removeOne(view);
|
}
|
||||||
delete view;
|
|
||||||
|
DicomImageView * ImageViewManager::takeAt(int idx){
|
||||||
|
if (idx >= vList.size()) return nullptr;
|
||||||
|
auto view = vList.takeAt(idx);
|
||||||
|
disconnect(view, &DicomImageView::onViewClick,nullptr,nullptr);
|
||||||
|
disconnect(view, &DicomImageView::onViewDoubleClick,nullptr,nullptr);
|
||||||
|
disconnect(view, &DicomImageView::afterViewCleared,nullptr,nullptr);
|
||||||
|
disconnect(view, &DicomImageView::onDragDrop,nullptr,nullptr);
|
||||||
|
disconnect(view, &DicomImageView::onEndPan,nullptr,nullptr);
|
||||||
|
disconnect(view, &DicomImageView::onEndZoom,nullptr,nullptr);
|
||||||
|
disconnect(view, &DicomImageView::onEndWindowLevel,nullptr,nullptr);
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImageViewManager::clear(){
|
||||||
|
while(!vList.isEmpty()){
|
||||||
|
vList.takeFirst()->deleteLater();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -179,39 +203,51 @@ void ImageViewManager::viewSynced(DicomImageView *src, int interactionMode, void
|
|||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VTKIS_IMAGE_PAN:
|
}
|
||||||
if (SyncHelper::getSyncItem(ZOOM_PAN)) {
|
}
|
||||||
this->smartDo([](auto v, auto callData) {
|
|
||||||
if (v->hasSeries()) {
|
void ImageViewManager::viewPaned(DicomImageView *src, void* offsetVector) {
|
||||||
double *d = (double *) callData;
|
if (SyncHelper::getSyncItem(ZOOM_PAN)) {
|
||||||
double vector[3] = {d[3] - d[0], d[4] - d[1], d[5] - d[2]};
|
if (SyncHelper::getSyncState() == MANUAL_SYNC) {
|
||||||
v->setPanOffset(vector);
|
this->smartDo([](auto v, auto callData) {
|
||||||
}
|
if (v->hasSeries()) {
|
||||||
}, src, data, ImageViewManager::EStudyEBoundsSeries);
|
double *d = (double *) callData;
|
||||||
|
double vector[3] = {d[3] - d[0], d[4] - d[1], d[5] - d[2]};
|
||||||
|
v->setPanOffset(vector);
|
||||||
|
}
|
||||||
|
}, src, offsetVector, ImageViewManager::EStudyEBoundsSeries);
|
||||||
|
} else if (SyncHelper::getSyncState() == AUTO_SYNC) {
|
||||||
|
this->smartDo([](auto v, auto callData) {
|
||||||
|
if (v->hasSeries()) {
|
||||||
|
double *d = (double *) callData;
|
||||||
|
double vector[3] = {d[3], d[4] , d[5]};
|
||||||
|
v->setPanFocalPoint(vector);
|
||||||
|
}
|
||||||
|
}, src, offsetVector, ImageViewManager::EStudyEBoundsSeries);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImageViewManager::viewZoomed(DicomImageView *src, double scaleFactor) {
|
||||||
|
if (SyncHelper::getSyncItem(ZOOM_PAN)) {
|
||||||
|
this->smartDo([](auto v, auto callData) {
|
||||||
|
if (v->hasSeries()) {
|
||||||
|
double d = *(double *) callData;
|
||||||
|
v->setZoomScale(d);
|
||||||
}
|
}
|
||||||
break;
|
}, src, &scaleFactor, ImageViewManager::EStudyEBoundsSeries);
|
||||||
case VTKIS_IMAGE_ZOOM:
|
}
|
||||||
if (SyncHelper::getSyncItem(ZOOM_PAN)) {
|
}
|
||||||
this->smartDo([](auto v, auto callData) {
|
|
||||||
if (v->hasSeries()) {
|
void ImageViewManager::viewEndWindowLeveL(DicomImageView *src, double level, double window) {
|
||||||
double *d = (double *) callData;
|
double data[2] = {level, window};
|
||||||
v->setZoomScale(d[1]);
|
if (SyncHelper::getSyncItem(WIDTH_LEVEL)) {
|
||||||
}
|
this->smartDo([](auto v, auto callData) {
|
||||||
}, src, data, ImageViewManager::EStudyEBoundsSeries);
|
if (v->hasSeries()) {
|
||||||
|
double *d = (double *) callData;
|
||||||
|
v->setWindowLevel(d[0], d[1]);
|
||||||
}
|
}
|
||||||
break;
|
}, src, data, ImageViewManager::EStudyEBoundsSeries);
|
||||||
case VTKIS_IMAGE_WINDOWLEVEL:
|
|
||||||
if (SyncHelper::getSyncItem(WIDTH_LEVEL)) {
|
|
||||||
this->smartDo([](auto v, auto callData) {
|
|
||||||
if (v->hasSeries()) {
|
|
||||||
double *d = (double *) callData;
|
|
||||||
v->setWindowLevel(d[1], d[0]);
|
|
||||||
}
|
|
||||||
}, src, data, ImageViewManager::EStudyEBoundsSeries);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,3 +349,4 @@ void ImageViewManager::checkCurrentViewFusion() {
|
|||||||
currentFusionView = nullptr;
|
currentFusionView = nullptr;
|
||||||
emit fusionCheckStateChanged(false);
|
emit fusionCheckStateChanged(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ public:
|
|||||||
|
|
||||||
void remove(int idx);
|
void remove(int idx);
|
||||||
|
|
||||||
void setCurrentView(DicomImageView *view);
|
DicomImageView * takeAt(int idx);
|
||||||
|
|
||||||
void clear() {
|
void clear();
|
||||||
vList.clear();
|
|
||||||
}
|
void setCurrentView(DicomImageView *view);
|
||||||
|
|
||||||
DicomImageView *getCurrentView() {
|
DicomImageView *getCurrentView() {
|
||||||
return currentView;
|
return currentView;
|
||||||
@@ -66,6 +66,12 @@ public:
|
|||||||
|
|
||||||
void viewSynced(DicomImageView *src, int interactionMode, void *data);
|
void viewSynced(DicomImageView *src, int interactionMode, void *data);
|
||||||
|
|
||||||
|
void viewPaned(DicomImageView *src, void* offsetVector);
|
||||||
|
|
||||||
|
void viewZoomed(DicomImageView *src, double scaleFactor);
|
||||||
|
|
||||||
|
void viewEndWindowLeveL(DicomImageView *src, double level, double window);
|
||||||
|
|
||||||
void viewReload(const std::string &unique_info);
|
void viewReload(const std::string &unique_info);
|
||||||
|
|
||||||
void viewCleared();
|
void viewCleared();
|
||||||
|
|||||||
@@ -95,10 +95,7 @@ void ViewContainerWidget::viewLayoutChanged(int col, int row) {
|
|||||||
|
|
||||||
void ViewContainerWidget::resetLayoutToSingle() {
|
void ViewContainerWidget::resetLayoutToSingle() {
|
||||||
viewLayoutChanged(1, 1);
|
viewLayoutChanged(1, 1);
|
||||||
while (mViewManager->getViewCount() > 1) {
|
DicomImageView *v = mViewManager->takeAt(0);
|
||||||
mViewManager->remove(1);
|
|
||||||
}
|
|
||||||
DicomImageView *v = mViewManager->getView(0);
|
|
||||||
mViewManager->clear();
|
mViewManager->clear();
|
||||||
mViewManager->add(v);
|
mViewManager->add(v);
|
||||||
mViewManager->setCurrentView(v);
|
mViewManager->setCurrentView(v);
|
||||||
|
|||||||
Reference in New Issue
Block a user