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,
|
||||
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) {
|
||||
setCurrentView(view);
|
||||
viewReload(id);
|
||||
});
|
||||
|
||||
connect(view, &DicomImageView::onSync,
|
||||
this, &ImageViewManager::viewSynced);
|
||||
// connect(view, &DicomImageView::onSync,
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
@@ -58,9 +65,26 @@ void ImageViewManager::remove(DicomImageView *view) {
|
||||
|
||||
void ImageViewManager::remove(int idx) {
|
||||
if (idx >= vList.size()) return;
|
||||
auto view = vList.at(idx);
|
||||
vList.removeOne(view);
|
||||
delete view;
|
||||
vList.takeAt(idx)->deleteLater();
|
||||
}
|
||||
|
||||
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;
|
||||
case VTKIS_IMAGE_PAN:
|
||||
if (SyncHelper::getSyncItem(ZOOM_PAN)) {
|
||||
this->smartDo([](auto v, auto callData) {
|
||||
if (v->hasSeries()) {
|
||||
double *d = (double *) callData;
|
||||
double vector[3] = {d[3] - d[0], d[4] - d[1], d[5] - d[2]};
|
||||
v->setPanOffset(vector);
|
||||
}
|
||||
}, src, data, ImageViewManager::EStudyEBoundsSeries);
|
||||
}
|
||||
}
|
||||
|
||||
void ImageViewManager::viewPaned(DicomImageView *src, void* offsetVector) {
|
||||
if (SyncHelper::getSyncItem(ZOOM_PAN)) {
|
||||
if (SyncHelper::getSyncState() == MANUAL_SYNC) {
|
||||
this->smartDo([](auto v, auto callData) {
|
||||
if (v->hasSeries()) {
|
||||
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;
|
||||
case VTKIS_IMAGE_ZOOM:
|
||||
if (SyncHelper::getSyncItem(ZOOM_PAN)) {
|
||||
this->smartDo([](auto v, auto callData) {
|
||||
if (v->hasSeries()) {
|
||||
double *d = (double *) callData;
|
||||
v->setZoomScale(d[1]);
|
||||
}
|
||||
}, src, data, ImageViewManager::EStudyEBoundsSeries);
|
||||
}, src, &scaleFactor, ImageViewManager::EStudyEBoundsSeries);
|
||||
}
|
||||
}
|
||||
|
||||
void ImageViewManager::viewEndWindowLeveL(DicomImageView *src, double level, double window) {
|
||||
double data[2] = {level, window};
|
||||
if (SyncHelper::getSyncItem(WIDTH_LEVEL)) {
|
||||
this->smartDo([](auto v, auto callData) {
|
||||
if (v->hasSeries()) {
|
||||
double *d = (double *) callData;
|
||||
v->setWindowLevel(d[0], d[1]);
|
||||
}
|
||||
break;
|
||||
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;
|
||||
}, src, data, ImageViewManager::EStudyEBoundsSeries);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,3 +349,4 @@ void ImageViewManager::checkCurrentViewFusion() {
|
||||
currentFusionView = nullptr;
|
||||
emit fusionCheckStateChanged(false);
|
||||
}
|
||||
|
||||
|
||||
@@ -30,11 +30,11 @@ public:
|
||||
|
||||
void remove(int idx);
|
||||
|
||||
void setCurrentView(DicomImageView *view);
|
||||
DicomImageView * takeAt(int idx);
|
||||
|
||||
void clear() {
|
||||
vList.clear();
|
||||
}
|
||||
void clear();
|
||||
|
||||
void setCurrentView(DicomImageView *view);
|
||||
|
||||
DicomImageView *getCurrentView() {
|
||||
return currentView;
|
||||
@@ -66,6 +66,12 @@ public:
|
||||
|
||||
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 viewCleared();
|
||||
|
||||
@@ -95,10 +95,7 @@ void ViewContainerWidget::viewLayoutChanged(int col, int row) {
|
||||
|
||||
void ViewContainerWidget::resetLayoutToSingle() {
|
||||
viewLayoutChanged(1, 1);
|
||||
while (mViewManager->getViewCount() > 1) {
|
||||
mViewManager->remove(1);
|
||||
}
|
||||
DicomImageView *v = mViewManager->getView(0);
|
||||
DicomImageView *v = mViewManager->takeAt(0);
|
||||
mViewManager->clear();
|
||||
mViewManager->add(v);
|
||||
mViewManager->setCurrentView(v);
|
||||
|
||||
Reference in New Issue
Block a user