示例#1
0
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 + "].");
}
示例#2
0
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()));
}
示例#4
0
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();
	}
}
示例#5
0
PostOpControllWorkflowState::PostOpControllWorkflowState(QState* parent, StateServiceBackendPtr backend) :
				WorkflowState(parent, "PostOpControllUid", "Postoperative Control", backend)
{
	connect(mBackend->getPatientService().get(), SIGNAL(dataAddedOrRemoved()), this, SLOT(canEnterSlot()));
}
示例#6
0
PreOpPlanningWorkflowState::PreOpPlanningWorkflowState(QState* parent, StateServiceBackendPtr backend) :
				WorkflowState(parent, "PreOpPlanningUid", "Preoperative Planning", backend)
{
	connect(mBackend->getPatientService().get(), SIGNAL(dataAddedOrRemoved()), this, SLOT(canEnterSlot()));
}
示例#7
0
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();
	}
}
示例#8
0
PreOpPlanningWorkflowState::PreOpPlanningWorkflowState(QState* parent, CoreServicesPtr services) :
				WorkflowState(parent, "PreOpPlanningUid", "Preoperative Planning", services)
{
	connect(mServices->patient().get(), SIGNAL(dataAddedOrRemoved()), this, SLOT(canEnterSlot()));
}
示例#9
0
PostOpControllWorkflowState::PostOpControllWorkflowState(QState* parent, CoreServicesPtr services) :
				WorkflowState(parent, "PostOpControllUid", "Postoperative Control", services)
{
	connect(mServices->patient().get(), SIGNAL(dataAddedOrRemoved()), this, SLOT(canEnterSlot()));
}