13#include "ui_QmitkUSNavigationStepCombinedModality.h"
25#include "mitkBaseRenderer.h"
29 m_LastCalibrationFilename(
""),
30 m_CalibrationLoadedNecessary(true),
37 ui->combinedModalityCreateWidget->setVisible(
false);
38 ui->combinedModalityEditWidget->setVisible(
false);
40 connect(ui->combinedModalityListWidget, SIGNAL(ServiceSelectionChanged(us::ServiceReferenceU)),
this, SLOT(
OnDeviceSelectionChanged()));
41 connect(ui->combinedModalityListWidget, SIGNAL(ServiceModified(us::ServiceReferenceU)),
this, SLOT(
OnDeviceSelectionChanged()));
51 ui->combinedModalityListWidget->SetAutomaticallySelectFirstEntry(
true);
55 settings.beginGroup(QString::fromStdString(
"QmitkUSNavigationStepCombinedModality"));
63 ui->combinedModalityListWidget->blockSignals(
true);
66 settings.beginGroup(QString::fromStdString(
"QmitkUSNavigationStepCombinedModality"));
77 bool combinedModalitySelected = combinedModality.IsNotNull();
79 ui->calibrationGroupBox->setEnabled(combinedModalitySelected);
80 ui->combinedModalityDeleteButton->setEnabled(combinedModalitySelected);
81 ui->combinedModalitEditButton->setEnabled(combinedModalitySelected);
89 m_CombinedModality->GetUltrasoundDevice()->RemovePropertyChangedListener(m_ListenerDeviceChanged);
92 if (combinedModalitySelected && combinedModality->GetUltrasoundDevice().IsNotNull())
94 combinedModality->GetUltrasoundDevice()->RemovePropertyChangedListener(m_ListenerDeviceChanged);
99 if (combinedModalitySelected)
118 ui->combinedModalityDistconnectButton->setEnabled(
false);
119 ui->combinedModalityActivateButton->setEnabled(
false);
125 QString filename = QFileDialog::getOpenFileName(QApplication::activeWindow(),
128 "Calibration files *.cal");
132 if (combinedModality.IsNull())
134 ui->calibrationLoadStateLabel->setText(
"Selected device is no USCombinedModality.");
139 if (filename.isEmpty())
147 QFile file(filename);
148 if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
150 MITK_WARN <<
"Cannot open file '" << filename.toStdString() <<
"' for reading.";
151 ui->calibrationLoadStateLabel->setText(
"Cannot open file '" + filename +
"' for reading.");
156 QTextStream inStream(&file);
160 MITK_WARN <<
"Failed to load file. Unsupported format?";
161 ui->calibrationLoadStateLabel->setText(
"Failed to load file. Unsupported format?");
170 catch (
const mitk::Exception& )
172 MITK_WARN <<
"Failed to deserialize calibration. Unsuppoerted format?";
173 ui->calibrationLoadStateLabel->setText(
"Failed to deserialize calibration. Unsuppoerted format?");
178 ui->calibrationLoadStateLabel->setText(
"Loaded calibration : " + filename);
193 mitk::DataNode::Pointer usNode = mitk::RenderingManager::GetInstance()->GetDataStorage()->GetNamedNode(
"US Viewing Stream - Image 0");
194 if (usNode.IsNotNull())
196 mitk::RenderingManager::GetInstance()->InitializeViews(usNode->GetData()->GetTimeGeometry());
200 MITK_WARN <<
"No reinit possible";
207 ui->combinedModalityEditWidget->SetCombinedModality(
nullptr);
213 if (combinedModality.IsNotNull())
215 combinedModality->RemoveAllObservers();
216 combinedModality->UnregisterOnService();
229 if (combinedModality.IsNotNull())
231 if (!combinedModality->GetUltrasoundDevice()->GetIsConnected()) { combinedModality->GetUltrasoundDevice()->Connect(); }
232 if (!combinedModality->GetUltrasoundDevice()->GetIsActive()) { combinedModality->GetUltrasoundDevice()->Activate(); }
239 if (combinedModality.IsNotNull())
241 if (combinedModality->GetUltrasoundDevice()->GetIsActive()) { combinedModality->GetUltrasoundDevice()->Deactivate(); }
242 if (combinedModality->GetUltrasoundDevice()->GetIsConnected()) { combinedModality->GetUltrasoundDevice()->Disconnect(); }
259 if (combinedModality.IsNotNull())
261 QApplication::setOverrideCursor(Qt::WaitCursor);
263 if (combinedModality->GetUltrasoundDevice()->GetDeviceState() <
mitk::USDevice::State_Connected) { combinedModality->GetUltrasoundDevice()->Connect(); }
264 if (combinedModality->GetUltrasoundDevice()->GetDeviceState() <
mitk::USDevice::State_Activated) { combinedModality->GetUltrasoundDevice()->Activate(); }
265 QApplication::restoreOverrideCursor();
289 return "Selection of Combined Modality";
299 ui->combinedModalityLabel->setVisible(!enabled);
300 ui->combinedModalityListWidget->setVisible(!enabled);
301 ui->combinedModalityCreateButton->setVisible(!enabled);
302 ui->combinedModalityDeleteButton->setVisible(!enabled);
303 ui->combinedModalitEditButton->setVisible(!enabled);
304 ui->combinedModalityActivateButton->setVisible(!enabled);
305 ui->combinedModalityDistconnectButton->setVisible(!enabled);
306 ui->helpLabel->setVisible(!enabled);
307 ui->calibrationGroupBox->setVisible(!enabled);
308 ui->combinedModalityCreateWidget->setVisible(enabled);
313 ui->combinedModalityLabel->setVisible(!enabled);
314 ui->combinedModalityListWidget->setVisible(!enabled);
315 ui->combinedModalityCreateButton->setVisible(!enabled);
316 ui->combinedModalityDeleteButton->setVisible(!enabled);
317 ui->combinedModalitEditButton->setVisible(!enabled);
318 ui->combinedModalityActivateButton->setVisible(!enabled);
319 ui->combinedModalityDistconnectButton->setVisible(!enabled);
320 ui->helpLabel->setVisible(!enabled);
321 ui->calibrationGroupBox->setVisible(!enabled);
322 ui->combinedModalityEditWidget->setVisible(enabled);
327 mitk::AbstractUltrasoundTrackerDevice::Pointer combinedModality = this->
GetCombinedModality();
328 mitk::USDevice::Pointer usDevice = combinedModality->GetUltrasoundDevice();
331 mitk::DataNode::Pointer combinedModalityResult = mitk::DataNode::New();
332 combinedModalityResult->SetName(
"CombinedModalityResult");
333 combinedModalityResult->SetStringProperty(
"USNavigation::CombinedModality",
334 std::string(combinedModality->GetUltrasoundDevice()->GetManufacturer() +
": " + combinedModality->GetUltrasoundDevice()->GetName()
335 +
" (" + combinedModality->GetUltrasoundDevice()->GetComment() +
")").c_str());
336 combinedModalityResult->SetStringProperty(
"USNavigation::UltrasoundDevice",
337 std::string(usDevice->GetManufacturer() +
": " + usDevice->GetName()
338 +
" (" + usDevice->GetComment() +
")").c_str());
339 combinedModalityResult->SetStringProperty(
"USNavigation::TrackingDevice",
340 combinedModality->GetNavigationDataSource()->GetName().c_str());
341 combinedModalityResult->SetStringProperty(
"USNavigation::Calibration",
342 combinedModality->SerializeCalibration().c_str());
353 if (calibrated) { ui->calibrationLoadStateLabel->setText(
"Selected device contains at least one calibration."); }
354 else { ui->calibrationLoadStateLabel->setText(
"Selected device is not calibrated."); }
362 if (!ui->combinedModalityListWidget->GetIsServiceSelected()) {
return nullptr; }
366 if (combinedModality.IsNull())
368 MITK_WARN <<
"Selected device is no USCombinedModality.";
371 return combinedModality;
398 mitk::NavigationDataSource::Pointer navigationDataSource =
m_CombinedModality->GetNavigationDataSource();
399 if (navigationDataSource.IsNull()) {
return; }
404 std::string needleNames;
406 itk::ProcessObject::DataObjectPointerArray outputs = navigationDataSource->GetOutputs();
407 for (itk::ProcessObject::DataObjectPointerArray::iterator it = outputs.begin(); it != outputs.end(); ++it)
409 needleNames += std::string((
static_cast<mitk::NavigationData*
>(it->GetPointer()))->GetName()) +
";";
413 std::string oldProperty;
414 if (!settingsNode->GetStringProperty(
"settings.needle-names", oldProperty)
415 || oldProperty != needleNames
416 || !settingsNode->GetStringProperty(
"settings.reference-names", oldProperty)
417 || oldProperty != needleNames)
419 settingsNode->SetStringProperty(
"settings.needle-names", needleNames.c_str());
420 settingsNode->SetStringProperty(
"settings.reference-names", needleNames.c_str());
Abstract base class for navigation step widgets.
itk::SmartPointer< mitk::DataStorage > GetDataStorage(bool throwNull=true)
Returns the data storage set for the navigation step.
void SignalNoLongerReadyForNextStep()
Signals that it is no longer possible to proceed with following steps. This signal is emitted when th...
NavigationStepState GetNavigationStepState()
Get the current state of the navigation step.
void SignalSettingsNodeChanged(itk::SmartPointer< mitk::DataNode >)
Signals that the settings node was changed. This signal must not be emitted in an OnSettingsChanged()...
void SignalReadyForNextStep()
Signals that all necessary actions where done. The user can proceed with the next stept after this wa...
void SignalCombinedModalityChanged(itk::SmartPointer< mitk::AbstractUltrasoundTrackerDevice >)
Signals that the combined modality was changed by this step. This signal is mainly for steps which cr...
static const char * DATANAME_BASENODE
itk::SmartPointer< mitk::AbstractUltrasoundTrackerDevice > GetCombinedModality(bool throwNull=true)
Returns the combined modality set for the navigation step.
static const char * DATANAME_SETTINGS
void SignalIntermediateResult(const itk::SmartPointer< mitk::DataNode >)
Signals that an intermediate result was produced. The properties of the given data node must contain ...
itk::SmartPointer< mitk::DataNode > GetNamedDerivedNode(const char *name, const char *sourceName)
Returns node with the given name and the given source node (parent) from the data storage.
Navigation step for creating and selecting a combined modality. Already created combined modalities c...
void OnCombinedModalityCreateNewButtonClicked()
Triggered, when the button for creating a new combined modality was clicked.
void SetCombinedModalityEditWidgetEnabled(bool enabled)
void OnActivateButtonClicked()
bool m_CalibrationLoadedNecessary
std::string m_LoadedCalibration
bool GetIsRestartable() override
Indicates if it makes sense to be able to restart the step. This method must be implemented by concre...
void OnCombinedModalityCreationExit()
Triggered, when the dialog for creating a new combined modality was closed.
~QmitkUSNavigationStepCombinedModality() override
std::string m_LastCalibrationFilename
bool OnRestartStep() override
Called when restarting a navigation step. This method may be implemented by a concrete subclass to ha...
bool OnStartStep() override
Called when the navigation step gets started. This method has to be implemented by a concrete subclas...
QString GetTitle() override
Getter for the title of the navigation step. This title should be human readable and can be used to d...
void OnDisconnectButtonClicked()
Triggered, when the button for disconnecting a combined modality was clicked. The state of the combin...
void SetCombinedModalityCreateWidgetEnabled(bool enabled)
bool UpdateCalibrationState()
void OnCombinedModalityEditButtonClicked()
void CreateCombinedModalityResultAndSignalIt()
itk::SmartPointer< mitk::AbstractUltrasoundTrackerDevice > m_CombinedModality
The Combined Modality which was selected by the user.
void OnLoadCalibration()
Triggered, when the user has clicked "Load Calibration". Opens a file open dialog and sets the select...
void OnDeleteButtonClicked()
Triggered, when the button for deleting a combined modality was clicked. Unregisters the combined mod...
QmitkUSNavigationStepCombinedModality(QWidget *parent=nullptr)
void OnDeviceSelectionChanged()
Triggered, when the selection in the service list widget has changed.
void OnUpdate() override
Called periodically while a navigation step is active. This method has to be implemented by a concret...
bool OnFinishStep() override
Called when all necessary actions for the step where done. This method has to be implemented by a con...
mitk::AbstractUltrasoundTrackerDevice::Pointer GetSelectedCombinedModality()
void UpdateTrackingToolNames()
void OnCombinedModalityEditExit()
void OnDevicePropertyChanged(const std::string &, const std::string &)
bool OnActivateStep() override
Called when the navigation step gets activated. This method has to be implemented by a concrete subcl...
void SetCalibrationLoadedNecessary(bool)
Abstract class for an easy handling of a combination of an USDevice and a NavigationDataSource....
static const std::string US_PROPKEY_CLASS
static const std::string DeviceClassIdentifier
static mitk::USDevice::PropertyKeys GetPropertyKeys()