diff --git a/Modules/USUI/Qmitk/QmitkUSNewVideoDeviceWidget.cpp b/Modules/USUI/Qmitk/QmitkUSNewVideoDeviceWidget.cpp index 738643af9a..9ec8b1e00d 100644 --- a/Modules/USUI/Qmitk/QmitkUSNewVideoDeviceWidget.cpp +++ b/Modules/USUI/Qmitk/QmitkUSNewVideoDeviceWidget.cpp @@ -1,169 +1,169 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ //#define _USE_MATH_DEFINES #include //QT headers //mitk headers //itk headers const std::string QmitkUSNewVideoDeviceWidget::VIEW_ID = "org.mitk.views.QmitkUSNewVideoDeviceWidget"; QmitkUSNewVideoDeviceWidget::QmitkUSNewVideoDeviceWidget(QWidget* parent, Qt::WindowFlags f): QWidget(parent, f) { m_Controls = NULL; CreateQtPartControl(this); //disable a few UI components which are not needed at the moment m_Controls->probe_label->setVisible(false); m_Controls->probe_label2->setVisible(false); m_Controls->zoom_label->setVisible(false); m_Controls->m_Probe->setVisible(false); m_Controls->m_Zoom->setVisible(false); } QmitkUSNewVideoDeviceWidget::~QmitkUSNewVideoDeviceWidget() { } //////////////////// INITIALIZATION ///////////////////// void QmitkUSNewVideoDeviceWidget::CreateQtPartControl(QWidget *parent) { if (!m_Controls) { // create GUI widgets m_Controls = new Ui::QmitkUSNewVideoDeviceWidgetControls; m_Controls->setupUi(parent); this->CreateConnections(); } } void QmitkUSNewVideoDeviceWidget::CreateConnections() { if ( m_Controls ) { connect( m_Controls->m_BtnDone, SIGNAL(clicked()), this, SLOT(OnClickedDone()) ); connect( m_Controls->m_BtnCancel, SIGNAL(clicked()), this, SLOT(OnClickedCancel()) ); connect( m_Controls->m_RadioDeviceSource, SIGNAL(clicked()), this, SLOT(OnDeviceTypeSelection()) ); connect( m_Controls->m_RadioFileSource, SIGNAL(clicked()), this, SLOT(OnDeviceTypeSelection()) ); } // Hide & show stuff m_Controls->m_FilePathSelector->setVisible(false); } ///////////// Methods & Slots Handling Direct Interaction ///////////////// void QmitkUSNewVideoDeviceWidget::OnClickedDone(){ m_Active = false; // Assemble Metadata mitk::USImageMetadata::Pointer metadata = mitk::USImageMetadata::New(); metadata->SetDeviceComment(m_Controls->m_Comment->text().toStdString()); metadata->SetDeviceModel(m_Controls->m_Model->text().toStdString()); metadata->SetDeviceManufacturer(m_Controls->m_Manufacturer->text().toStdString()); metadata->SetProbeName(m_Controls->m_Probe->text().toStdString()); metadata->SetZoom(m_Controls->m_Zoom->text().toStdString()); // Create Device mitk::USVideoDevice::Pointer newDevice; if (m_Controls->m_RadioDeviceSource->isChecked()){ int deviceID = m_Controls->m_DeviceSelector->value(); newDevice = mitk::USVideoDevice::New(deviceID, metadata); } else { std::string filepath = m_Controls->m_FilePathSelector->text().toStdString(); newDevice = mitk::USVideoDevice::New(filepath, metadata); } // Set Video Options newDevice->GetSource()->SetColorOutput(! m_Controls->m_CheckGreyscale->isChecked()); // If Resolution override is activated, apply it if (m_Controls->m_CheckResolutionOverride->isChecked()) { int width = m_Controls->m_ResolutionWidth->value(); int height = m_Controls->m_ResolutionHeight->value(); newDevice->GetSource()->OverrideResolution(width, height); newDevice->GetSource()->SetResolutionOverride(true); } newDevice->Connect(); emit Finished(); } void QmitkUSNewVideoDeviceWidget::OnClickedCancel(){ m_TargetDevice = 0; m_Active = false; emit Finished(); } void QmitkUSNewVideoDeviceWidget::OnDeviceTypeSelection(){ m_Controls->m_FilePathSelector->setVisible(m_Controls->m_RadioFileSource->isChecked()); m_Controls->m_DeviceSelector->setVisible(m_Controls->m_RadioDeviceSource->isChecked()); } ///////////////// Methods & Slots Handling Logic ////////////////////////// void QmitkUSNewVideoDeviceWidget::EditDevice(mitk::USDevice::Pointer device) { // If no VideoDevice is given, throw an exception if (device->GetDeviceClass().compare("org.mitk.modules.us.USVideoDevice") != 0){ // TODO Alert if bad path - mitkThrow() << "NewVideoDeviceWidget recieved an incompatible Device Type to edit. Devicetype was: " << device->GetDeviceClass(); + mitkThrow() << "NewVideoDeviceWidget recieved an incompatible device type to edit. Type was: " << device->GetDeviceClass(); } m_TargetDevice = static_cast (device.GetPointer()); m_Active = true; } void QmitkUSNewVideoDeviceWidget::CreateNewDevice() { m_TargetDevice = 0; InitFields(mitk::USImageMetadata::New()); m_Active = true; } /////////////////////// HOUSEHOLDING CODE /////////////////////////////// QListWidgetItem* QmitkUSNewVideoDeviceWidget::ConstructItemFromDevice(mitk::USDevice::Pointer device){ QListWidgetItem *result = new QListWidgetItem; std::string text = device->GetDeviceManufacturer() + "|" + device->GetDeviceModel(); result->setText(text.c_str()); return result; } void QmitkUSNewVideoDeviceWidget::InitFields(mitk::USImageMetadata::Pointer metadata){ this->m_Controls->m_Manufacturer->setText (metadata->GetDeviceManufacturer().c_str()); this->m_Controls->m_Model->setText (metadata->GetDeviceModel().c_str()); this->m_Controls->m_Comment->setText (metadata->GetDeviceComment().c_str()); this->m_Controls->m_Probe->setText (metadata->GetProbeName().c_str()); this->m_Controls->m_Zoom->setText (metadata->GetZoom().c_str()); } diff --git a/Modules/USUI/Qmitk/mitkUSDevicePersistence.cpp b/Modules/USUI/Qmitk/mitkUSDevicePersistence.cpp index fae0a09fe9..b038c4e2c9 100644 --- a/Modules/USUI/Qmitk/mitkUSDevicePersistence.cpp +++ b/Modules/USUI/Qmitk/mitkUSDevicePersistence.cpp @@ -1,186 +1,198 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkUSDevicePersistence.h" //Microservices -#include "usServiceReference.h" -#include "usModuleContext.h" +#include +#include #include #include +//QT +#include + mitk::USDevicePersistence::USDevicePersistence() : m_devices("MITK US","Device Settings") - { - } +{ +} void mitk::USDevicePersistence::StoreCurrentDevices() - { +{ mitk::ModuleContext* thisContext = mitk::GetModuleContext(); std::list services = thisContext->GetServiceReferences(); MITK_INFO << "Trying to save " << services.size() << " US devices."; int numberOfSavedDevices = 0; for(std::list::iterator it = services.begin(); it != services.end(); ++it) - { + { mitk::USDevice::Pointer currentDevice = thisContext->GetService(*it); //check if it is a USVideoDevice - if (currentDevice->GetDeviceClass()=="org.mitk.modules.us.USVideoDevice") - { + if (currentDevice->GetDeviceClass() == "org.mitk.modules.us.USVideoDevice") + { mitk::USVideoDevice::Pointer currentVideoDevice = dynamic_cast(currentDevice.GetPointer()); QString identifier = "device" + QString::number(numberOfSavedDevices); m_devices.setValue(identifier,USVideoDeviceToString(currentVideoDevice)); numberOfSavedDevices++; - } + } else - { + { MITK_WARN << "Saving of US devices of the type " << currentDevice->GetDeviceClass() << " is not supported at the moment. Skipping device."; - } } + } m_devices.setValue("numberOfSavedDevices",numberOfSavedDevices); MITK_INFO << "Successfully saved " << numberOfSavedDevices << " US devices."; - } +} void mitk::USDevicePersistence::RestoreLastDevices() - { +{ int numberOfSavedDevices = m_devices.value("numberOfSavedDevices").toInt(); for(int i=0; iConnect(); + } + catch (...) { - QString currentString = m_devices.value("device"+QString::number(i)).toString(); - mitk::USVideoDevice::Pointer currentDevice = StringToUSVideoDevice(currentString); - currentDevice->Connect(); + MITK_ERROR << "Error occured while loading a USVideoDevice from persistence. Device assumed corrupt, will be deleted."; + QMessageBox::warning(NULL, "Could not load device" ,"A stored ultrasound device is corrupted and could not be loaded. The device will be deleted."); } + } MITK_INFO << "Restoring " << numberOfSavedDevices << " US devices."; - } +} QString mitk::USDevicePersistence::USVideoDeviceToString(mitk::USVideoDevice::Pointer d) { -QString manufacturer = d->GetDeviceManufacturer().c_str(); -QString model = d->GetDeviceModel().c_str(); -QString comment = d->GetDeviceComment().c_str(); -int source = d->GetDeviceID(); -std::string file = d->GetFilePath(); -if (file == "") file = "none"; -int greyscale = d->GetSource()->GetIsGreyscale(); -int resOverride = d->GetSource()->GetResolutionOverride(); -int resWidth = d->GetSource()->GetResolutionOverrideWidth(); -int resHight = d->GetSource()->GetResolutionOverrideHeight(); -int cropRight = d->GetCropArea().cropRight; -int cropLeft = d->GetCropArea().cropLeft; -int cropBottom = d->GetCropArea().cropBottom; -int cropTop = d->GetCropArea().cropTop; -char seperator = '|'; - -QString returnValue = manufacturer + seperator - + model + seperator - + comment + seperator - + QString::number(source) + seperator - + file.c_str() + seperator - + QString::number(greyscale) + seperator - + QString::number(resOverride) + seperator - + QString::number(resWidth) + seperator - + QString::number(resHight) + seperator - + QString::number(cropRight) + seperator - + QString::number(cropLeft) + seperator - + QString::number(cropBottom) + seperator - + QString::number(cropTop) - ; - -MITK_INFO << "Output String: " << returnValue.toStdString(); -return returnValue; + QString manufacturer = d->GetDeviceManufacturer().c_str(); + QString model = d->GetDeviceModel().c_str(); + QString comment = d->GetDeviceComment().c_str(); + int source = d->GetDeviceID(); + std::string file = d->GetFilePath(); + if (file == "") file = "none"; + int greyscale = d->GetSource()->GetIsGreyscale(); + int resOverride = d->GetSource()->GetResolutionOverride(); + int resWidth = d->GetSource()->GetResolutionOverrideWidth(); + int resHight = d->GetSource()->GetResolutionOverrideHeight(); + int cropRight = d->GetCropArea().cropRight; + int cropLeft = d->GetCropArea().cropLeft; + int cropBottom = d->GetCropArea().cropBottom; + int cropTop = d->GetCropArea().cropTop; + char seperator = '|'; + + QString returnValue = manufacturer + seperator + + model + seperator + + comment + seperator + + QString::number(source) + seperator + + file.c_str() + seperator + + QString::number(greyscale) + seperator + + QString::number(resOverride) + seperator + + QString::number(resWidth) + seperator + + QString::number(resHight) + seperator + + QString::number(cropRight) + seperator + + QString::number(cropLeft) + seperator + + QString::number(cropBottom) + seperator + + QString::number(cropTop) + ; + + MITK_INFO << "Output String: " << returnValue.toStdString(); + return returnValue; } mitk::USVideoDevice::Pointer mitk::USDevicePersistence::StringToUSVideoDevice(QString s) { -MITK_INFO << "Input String: " << s.toStdString(); -std::vector data; -std::string seperators = "|"; -std::string text = s.toStdString(); -split(text,seperators,data); -if(data.size() != 13) + MITK_INFO << "Input String: " << s.toStdString(); + std::vector data; + std::string seperators = "|"; + std::string text = s.toStdString(); + split(text,seperators,data); + if(data.size() != 13) { - MITK_ERROR << "Cannot parse US device! (Size: " << data.size() << ")"; - return mitk::USVideoDevice::New("INVALID","INVALID","INVALID"); + MITK_ERROR << "Cannot parse US device! (Size: " << data.size() << ")"; + return mitk::USVideoDevice::New("INVALID","INVALID","INVALID"); } -std::string manufacturer = data.at(0); -std::string model = data.at(1); -std::string comment = data.at(2); -int source = (QString(data.at(3).c_str())).toInt(); -std::string file = data.at(4); -bool greyscale = (QString(data.at(5).c_str())).toInt(); -bool resOverride = (QString(data.at(6).c_str())).toInt(); -int resWidth = (QString(data.at(7).c_str())).toInt(); -int resHight = (QString(data.at(8).c_str())).toInt(); -mitk::USDevice::USImageCropArea cropArea; -cropArea.cropRight = (QString(data.at(9).c_str())).toInt(); -cropArea.cropLeft = (QString(data.at(10).c_str())).toInt(); -cropArea.cropBottom = (QString(data.at(11).c_str())).toInt(); -cropArea.cropTop = (QString(data.at(12).c_str())).toInt(); - -// Assemble Metadata -mitk::USImageMetadata::Pointer metadata = mitk::USImageMetadata::New(); -metadata->SetDeviceManufacturer(manufacturer); -metadata->SetDeviceComment(comment); -metadata->SetDeviceModel(model); -metadata->SetProbeName(""); -metadata->SetZoom(""); - -// Create Device -mitk::USVideoDevice::Pointer returnValue; -if (file == "none") + std::string manufacturer = data.at(0); + std::string model = data.at(1); + std::string comment = data.at(2); + int source = (QString(data.at(3).c_str())).toInt(); + std::string file = data.at(4); + bool greyscale = (QString(data.at(5).c_str())).toInt(); + bool resOverride = (QString(data.at(6).c_str())).toInt(); + int resWidth = (QString(data.at(7).c_str())).toInt(); + int resHight = (QString(data.at(8).c_str())).toInt(); + mitk::USDevice::USImageCropArea cropArea; + cropArea.cropRight = (QString(data.at(9).c_str())).toInt(); + cropArea.cropLeft = (QString(data.at(10).c_str())).toInt(); + cropArea.cropBottom = (QString(data.at(11).c_str())).toInt(); + cropArea.cropTop = (QString(data.at(12).c_str())).toInt(); + + // Assemble Metadata + mitk::USImageMetadata::Pointer metadata = mitk::USImageMetadata::New(); + metadata->SetDeviceManufacturer(manufacturer); + metadata->SetDeviceComment(comment); + metadata->SetDeviceModel(model); + metadata->SetProbeName(""); + metadata->SetZoom(""); + + // Create Device + mitk::USVideoDevice::Pointer returnValue; + if (file == "none") { - returnValue = mitk::USVideoDevice::New(source, metadata); + returnValue = mitk::USVideoDevice::New(source, metadata); } -else + else { - returnValue = mitk::USVideoDevice::New(file, metadata); + returnValue = mitk::USVideoDevice::New(file, metadata); } -// Set Video Options -returnValue->GetSource()->SetColorOutput(!greyscale); + // Set Video Options + returnValue->GetSource()->SetColorOutput(!greyscale); -// If Resolution override is activated, apply it -if (resOverride) - { - returnValue->GetSource()->OverrideResolution(resWidth, resHight); - returnValue->GetSource()->SetResolutionOverride(true); - } + // If Resolution override is activated, apply it + if (resOverride) + { + returnValue->GetSource()->OverrideResolution(resWidth, resHight); + returnValue->GetSource()->SetResolutionOverride(true); + } -// Set Crop Area -returnValue->SetCropArea(cropArea); + // Set Crop Area + returnValue->SetCropArea(cropArea); -return returnValue; + return returnValue; } void mitk::USDevicePersistence::split(std::string& text, std::string& separators, std::vector& words) - { +{ int n = text.length(); int start, stop; start = text.find_first_not_of(separators); while ((start >= 0) && (start < n)) { stop = text.find_first_of(separators, start); if ((stop < 0) || (stop > n)) stop = n; words.push_back(text.substr(start, stop - start)); - start = text.find_first_not_of(separators, stop+1); - } + start = text.find_first_not_of(separators, stop + 1); } +}