void DataManagerImpl::removeData(const QString& uid, QString basePath) { DataPtr dataToBeRemoved = this->getData(uid); mActiveData->remove(dataToBeRemoved); mData.erase(uid); this->deleteFiles(dataToBeRemoved, basePath); emit dataAddedOrRemoved(); // this should alert everybody interested in the data as a collection. report("Removed data [" + uid + "]."); }
void DataManagerImpl::clear() { mData.clear(); mCenter = Vector3D(0, 0, 0); mLandmarkProperties.clear(); m_rMpr_History->clear(); mPatientLandmarks->clear(); emit dataAddedOrRemoved(); emit centerChanged(); emit landmarkPropertiesChanged(); }
FrameTreeWidget::FrameTreeWidget(PatientModelServicePtr patientService, QWidget* parent) : BaseWidget(parent, "frame_tree_widget", "Frame Tree"), mPatientService(patientService) { QVBoxLayout* layout = new QVBoxLayout(this); //layout->setMargin(0); this->setToolTip("A tree displaying relations between coordinate spaces"); mTreeWidget = new QTreeWidget(this); layout->addWidget(mTreeWidget); mTreeWidget->setHeaderLabels(QStringList() << "Frame"); // TODO this must also listen to all changed() in all data connect(mPatientService.get(), SIGNAL(dataAddedOrRemoved()), this, SLOT(dataLoadedSlot())); }
void DataManagerImpl::loadData(DataPtr data) { if (data->getUid().contains('%')) { QString uid = data->getUid(); QString name = data->getName(); this->generateUidAndName(&uid, &name); data->setName(name); data->setUid(uid); } if (data) { if (mData.count(data->getUid()) && mData[data->getUid()]!=data) reportError(QString("Overwriting Data with uid=%1 with new object into PasM").arg(data->getUid())); // this->verifyParentFrame(data); mData[data->getUid()] = data; emit dataAddedOrRemoved(); } }
PostOpControllWorkflowState::PostOpControllWorkflowState(QState* parent, StateServiceBackendPtr backend) : WorkflowState(parent, "PostOpControllUid", "Postoperative Control", backend) { connect(mBackend->getPatientService().get(), SIGNAL(dataAddedOrRemoved()), this, SLOT(canEnterSlot())); }
PreOpPlanningWorkflowState::PreOpPlanningWorkflowState(QState* parent, StateServiceBackendPtr backend) : WorkflowState(parent, "PreOpPlanningUid", "Preoperative Planning", backend) { connect(mBackend->getPatientService().get(), SIGNAL(dataAddedOrRemoved()), this, SLOT(canEnterSlot())); }
void DataManagerImpl::parseXml(QDomNode& dataManagerNode, QString rootPath) { // look in the toolmanager, for backwards compatibility (2014-02-21) QDomNode toolManagerNode = dataManagerNode.parentNode().namedItem("toolManager"); QDomNode registrationHistory = dataManagerNode.namedItem("registrationHistory"); if (registrationHistory.isNull()) registrationHistory = toolManagerNode.namedItem("registrationHistory"); m_rMpr_History->parseXml(registrationHistory); QDomNode landmarksNode = dataManagerNode.namedItem("landmarkprops"); QDomElement landmarkNode = landmarksNode.firstChildElement("landmarkprop"); for (; !landmarkNode.isNull(); landmarkNode = landmarkNode.nextSiblingElement("landmarkprop")) { LandmarkProperty landmarkProp; landmarkProp.parseXml(landmarkNode); mLandmarkProperties[landmarkProp.getUid()] = landmarkProp; //std::cout << "Loaded landmarkprop with name: " << landmarkProp.getName() << std::endl; emit landmarkPropertiesChanged(); } QDomNode patientLandmarksNode = dataManagerNode.namedItem("landmarks"); if (patientLandmarksNode.isNull()) patientLandmarksNode = toolManagerNode.namedItem("landmarks"); mPatientLandmarks->parseXml(patientLandmarksNode); // All images must be created from the DataManager, so the image nodes are parsed here std::map<DataPtr, QDomNode> datanodes; QDomNode child = dataManagerNode.firstChild(); for (; !child.isNull(); child = child.nextSibling()) { if (child.nodeName() == "data") { DataPtr data = this->loadData(child.toElement(), rootPath); if (data) datanodes[data] = child.toElement(); } } // parse xml data separately: we want to first load all data // because there might be interdependencies (cx::DistanceMetric) for (std::map<DataPtr, QDomNode>::iterator iter = datanodes.begin(); iter != datanodes.end(); ++iter) { iter->first->parseXml(iter->second); } emit dataAddedOrRemoved(); //we need to make sure all images are loaded before we try to set an active image child = dataManagerNode.firstChild(); while (!child.isNull()) { if (child.toElement().tagName() == "center") { const QString centerString = child.toElement().text(); if (!centerString.isEmpty()) { Vector3D center = Vector3D::fromString(centerString); this->setCenter(center); } } child = child.nextSibling(); } }
PreOpPlanningWorkflowState::PreOpPlanningWorkflowState(QState* parent, CoreServicesPtr services) : WorkflowState(parent, "PreOpPlanningUid", "Preoperative Planning", services) { connect(mServices->patient().get(), SIGNAL(dataAddedOrRemoved()), this, SLOT(canEnterSlot())); }
PostOpControllWorkflowState::PostOpControllWorkflowState(QState* parent, CoreServicesPtr services) : WorkflowState(parent, "PostOpControllUid", "Postoperative Control", services) { connect(mServices->patient().get(), SIGNAL(dataAddedOrRemoved()), this, SLOT(canEnterSlot())); }