Commit b0284a85 authored by fw4splbot's avatar fw4splbot
Browse files

merge(dev): release 16.1.0

parents 21f2efdc 40cdf748
...@@ -24,6 +24,7 @@ set( REQUIREMENTS ...@@ -24,6 +24,7 @@ set( REQUIREMENTS
uiIO uiIO
uiGenericQt uiGenericQt
uiMedDataQt uiMedDataQt
uiPreferences
2DVisualizationActivity 2DVisualizationActivity
3DVisualizationActivity 3DVisualizationActivity
...@@ -35,6 +36,8 @@ set( REQUIREMENTS ...@@ -35,6 +36,8 @@ set( REQUIREMENTS
dicomPacsReaderActivity dicomPacsReaderActivity
dicomPacsWriterActivity dicomPacsWriterActivity
DicomWebReaderActivity
media media
style style
......
...@@ -42,11 +42,13 @@ ...@@ -42,11 +42,13 @@
<gui> <gui>
<layout> <layout>
<menu name="File" /> <menu name="File" />
<menu name="Preferences" />
<menu name="Help" /> <menu name="Help" />
</layout> </layout>
</gui> </gui>
<registry> <registry>
<menu sid="menu_file" start="yes" /> <menu sid="menu_file" start="yes" />
<menu sid="menu_preferences" start="yes" />
<menu sid="menu_help" start="yes" /> <menu sid="menu_help" start="yes" />
</registry> </registry>
</service> </service>
...@@ -66,6 +68,17 @@ ...@@ -66,6 +68,17 @@
</registry> </registry>
</service> </service>
<service uid="menu_preferences" type="::gui::aspect::SDefaultMenu">
<gui>
<layout>
<menuItem name="Preferences configuration"/>
</layout>
</gui>
<registry>
<menuItem sid="action_configuration" start="yes" />
</registry>
</service>
<service uid="menu_help" type="::gui::aspect::SDefaultMenu"> <service uid="menu_help" type="::gui::aspect::SDefaultMenu">
<gui> <gui>
<layout> <layout>
...@@ -84,6 +97,21 @@ ...@@ -84,6 +97,21 @@
<service uid="action_quit" type="::gui::action::SQuit" /> <service uid="action_quit" type="::gui::action::SQuit" />
<service uid="action_configuration" type="::uiPreferences::action::SPreferencesConfiguration">
<preference>
<type>text</type>
<name>Pacs Server Hostname</name>
<key>PACS_SERVER_HOSTNAME</key>
<default_value>127.0.0.1</default_value>
</preference>
<preference>
<type>number</type>
<name>Pacs Server Port</name>
<key>PACS_SERVER_PORT</key>
<default_value>80</default_value>
</preference>
</service>
<service uid="action_about" type="::uiGenericQt::action::SShowAbout"> <service uid="action_about" type="::uiGenericQt::action::SShowAbout">
<filename id="VRRender-${appVersion}/about/about.html" /> <filename id="VRRender-${appVersion}/about/about.html" />
</service> </service>
...@@ -119,6 +147,10 @@ ...@@ -119,6 +147,10 @@
<slot>dynamicView/createTab</slot> <slot>dynamicView/createTab</slot>
</connect> </connect>
<connect channel="parametersChannel">
<signal>action_configuration/parametersModified</signal>
</connect>
<start uid="mainFrame" /> <start uid="mainFrame" />
<start uid="progress_statusbar" /> <start uid="progress_statusbar" />
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref" /> <object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref" />
<object uid="selections" type="::fwData::Vector" /> <object uid="selections" type="::fwData::Vector" />
<service uid="mainview" type="::gui::view::SDefaultView" autoConnect="yes"> <service uid="mainview" type="::gui::view::SDefaultView">
<gui> <gui>
<layout type="::fwGui::CardinalLayoutManager"> <layout type="::fwGui::CardinalLayoutManager">
<view caption="Information" align="center" minWidth="200" /> <view caption="Information" align="center" minWidth="200" />
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
<menuItem name="DICOM PACS Reader" icon="media-0.1/icons/Pull.svg" /> <menuItem name="DICOM PACS Reader" icon="media-0.1/icons/Pull.svg" />
<menuItem name="DICOM PACS Writer" icon="media-0.1/icons/Push.svg" /> <menuItem name="DICOM PACS Writer" icon="media-0.1/icons/Push.svg" />
<menuItem name="DICOM Filtering" icon="media-0.1/icons/icon-DICOM-Filtering.svg" /> <menuItem name="DICOM Filtering" icon="media-0.1/icons/icon-DICOM-Filtering.svg" />
<menuItem name="DICOM Web Reader" icon="media-0.1/icons/Pull.svg" />
</layout> </layout>
</gui> </gui>
<registry> <registry>
...@@ -59,6 +60,7 @@ ...@@ -59,6 +60,7 @@
<menuItem sid="action_dicomPacsReader" start="yes" /> <menuItem sid="action_dicomPacsReader" start="yes" />
<menuItem sid="action_dicomPacsWriter" start="yes" /> <menuItem sid="action_dicomPacsWriter" start="yes" />
<menuItem sid="action_dicomFiltering" start="yes" /> <menuItem sid="action_dicomFiltering" start="yes" />
<menuItem sid="action_dicomWebReader" start="yes" />
</registry> </registry>
</service> </service>
...@@ -73,7 +75,8 @@ ...@@ -73,7 +75,8 @@
<service uid="activityCreator" type="::uiMedDataQt::editor::SActivityWizard"> <service uid="activityCreator" type="::uiMedDataQt::editor::SActivityWizard">
<inout key="seriesDB" uid="${SERIESDB}" /> <inout key="seriesDB" uid="${SERIESDB}" />
<ioSelectorConfig>FullSDBReaderIOSelectorConfig</ioSelectorConfig> <ioSelectorConfig>SDBReaderIOSelectorConfig</ioSelectorConfig>
<sdbIoSelectorConfig>FullSDBReaderIOSelectorConfig</sdbIoSelectorConfig>
<icons> <icons>
<icon type="::fwMedData::ImageSeries" icon="media-0.1/icons/ImageSeries.svg" /> <icon type="::fwMedData::ImageSeries" icon="media-0.1/icons/ImageSeries.svg" />
<icon type="::fwMedData::ModelSeries" icon="media-0.1/icons/ModelSeries.svg" /> <icon type="::fwMedData::ModelSeries" icon="media-0.1/icons/ModelSeries.svg" />
...@@ -197,6 +200,21 @@ ...@@ -197,6 +200,21 @@
</config> </config>
</service> </service>
<service uid="action_dicomWebReader" type="::activities::action::SActivityLauncher">
<in key="series" uid="selections" />
<config>
<parameters>
<parameter replace="SERIESDB" by="${SERIESDB}" />
<parameter replace="ICON_PATH" by="${ICON_PATH}" />
<parameter replace="APP_NAME" by="VRRender" />
</parameters>
<filter>
<mode>include</mode>
<id>DicomWebReaderActivity</id>
</filter>
</config>
</service>
<service uid="action_createActivity" type="::activities::action::SCreateActivity"> <service uid="action_createActivity" type="::activities::action::SCreateActivity">
<in key="series" uid="selections" /> <in key="series" uid="selections" />
<filter> <filter>
...@@ -257,6 +275,7 @@ ...@@ -257,6 +275,7 @@
<signal>action_dicomPacsReader/activityLaunched</signal> <signal>action_dicomPacsReader/activityLaunched</signal>
<signal>action_dicomPacsWriter/activityLaunched</signal> <signal>action_dicomPacsWriter/activityLaunched</signal>
<signal>action_dicomFiltering/activityLaunched</signal> <signal>action_dicomFiltering/activityLaunched</signal>
<signal>action_dicomWebReader/activityLaunched</signal>
</connect> </connect>
<connect> <connect>
......
set( NAME DicomWebReaderActivity )
set( VERSION 0.1 )
set( TYPE BUNDLE )
set( DEPENDENCIES)
set( REQUIREMENTS
2DVisualizationActivity
activities
ctrlMemory
ctrlSelection
dataReg
gui
guiQt
ioGdcm
ioVtkGdcm
ioDicomWeb
media
servicesReg
visuVTK
visuVTKAdaptor
visuVTKQt
)
<extension implements="::fwServices::registry::AppConfig">
<id>2DDicomWebPreviewConfig</id>
<parameters>
<param name="WID_PARENT" />
<param name="objectID" />
</parameters>
<config>
<object uid="${objectID}" type="::fwMedData::DicomSeries" src="ref" />
<object uid="image" type="::fwData::Image" src="deferred" />
<service uid="mainview" type="::gui::view::SDefaultView">
<gui>
<layout type="::fwGui::CardinalLayoutManager">
<view align="center" />
<view align="bottom" minWidth="200" minHeight="40" resizable="no" />
</layout>
</gui>
<registry>
<parent wid="${WID_PARENT}" />
<view sid="gs" start="yes" />
<view sid="sliderIndexDicomPullerEditor" start="yes" />
</registry>
</service>
<!-- *************************** Begin generic scene *************************** -->
<service uid="gs" type="::fwRenderVTK::SRender" >
<scene>
<picker id="picker" vtkclass="fwVtkCellPicker" />
<vtkObject id="imageBlend" class="vtkImageBlend" />
<renderer id="default" background="0.0" />
<adaptor uid="interactor4Negato" />
<adaptor uid="imageText" />
<adaptor uid="seriesAdaptor" />
<adaptor uid="nameAdaptor" />
</scene>
</service>
<service uid="interactor4Negato" type="::visuVTKAdaptor::SInteractorStyle">
<config renderer="default" style="InteractorStyle2DForNegato" />
</service>
<service uid="imageText" type="::visuVTKAdaptor::SImageText" autoConnect="yes">
<inout key="image" uid="image" />
<config renderer="default" picker="picker" text="" color="#FFFFFF" />
</service>
<service uid="seriesAdaptor" type="::visuVTKAdaptor::SNegatoMPR" autoConnect="yes">
<inout key="image" uid="image" />
<config renderer="default" picker="picker" mode="2D" slices="1" sliceIndex="axial" />
</service>
<service uid="nameAdaptor" type="::visuVTKAdaptor::SText" autoConnect="yes">
<in key="object" uid="${objectID}" />
<config renderer="default" text="@patient.name" fontSize="15" hAlign="right" vAlign="top" />
</service>
<!-- *************************** End generic scene *************************** -->
<service uid="imageDumpLocker" type="::ctrlMemory::LockDumpSrv">
<in key="image" uid="image" />
</service>
<service uid="medicalImgConverter" type="::ctrlSelection::MedicalImageSrv">
<inout key="image" uid="image" />
</service>
<service uid="sliderIndexDicomPullerEditor" type="::ioDicomWeb::SSliceIndexDicomPullerEditor" autoConnect="yes">
<inout key="series" uid="${objectID}" />
<out key="image" uid="image" />
<server>%PACS_SERVER_HOSTNAME%:%PACS_SERVER_PORT%</server>
<config dicomReader="::ioGdcm::SSeriesDBReader">
<dicomReaderConfig>
<config>
<showLogDialog>no</showLogDialog>
<enableBufferRotation>no</enableBufferRotation>
<dicomdirSupport>never</dicomdirSupport>
</config>
</dicomReaderConfig>
</config>
</service>
<start uid="mainview" />
<!-- Deferred start -->
<start uid="medicalImgConverter" />
<start uid="imageDumpLocker" />
<!-- VTK scene 'gs' -->
<start uid="interactor4Negato" />
<start uid="imageText" />
<start uid="seriesAdaptor" />
<start uid="nameAdaptor" />
</config>
</extension>
<extension implements="::fwServices::registry::AppConfig">
<id>DicomWebReaderActivity</id>
<parameters>
<param name="WID_PARENT" />
<param name="SERIESDB" />
<param name="AS_UID" />
<param name="APP_NAME" />
</parameters>
<config>
<!-- ******************************* UI declaration *********************************** -->
<object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref" />
<object uid="previewSeriesDB" type="::fwMedData::SeriesDB" />
<object uid="previewSelections" type="::fwData::Vector" />
<object uid="localSeriesDB" type="::fwMedData::SeriesDB" />
<object uid="localSelections" type="::fwData::Vector" />
<service uid="mainView" type="::gui::view::SDefaultView" >
<gui>
<layout type="::fwGui::CardinalLayoutManager">
<view align="top"/>
<view align="center" minWidth="200" />
<view align="bottom"/>
</layout>
<toolBar />
</gui>
<registry>
<parent wid="${WID_PARENT}" />
<toolBar sid="toolBar" start="yes" />
<view sid="topView" start="yes" />
<view sid="centerView" start="yes" />
<view sid="bottomView" start="yes" />
</registry>
</service>
<service uid="toolBar" type="::gui::aspect::SDefaultToolBar" >
<gui>
<layout>
<menuItem name="Pull selected series from Pacs" icon="media-0.1/icons/Pull.svg" />
<menuItem name="Push selected series to the main SeriesDB" icon="media-0.1/icons/Push.svg" />
</layout>
</gui>
<registry>
<menuItem sid="action_pullSeries" start="yes" />
<menuItem sid="action_pushSeries" start="yes" />
</registry>
</service>
<service uid="topView" type="::gui::view::SDefaultView" >
<gui>
<layout type="::fwGui::CardinalLayoutManager">
<orientation value="horizontal" />
<view caption="DICOM Query" align="center" minWidth="200" />
</layout>
</gui>
<registry>
<view sid="queryEditor" start="yes" />
</registry>
</service>
<service uid="centerView" type="::gui::view::SDefaultView" >
<gui>
<layout type="::fwGui::CardinalLayoutManager">
<orientation value="horizontal" />
<view caption="Pacs Information" align="center" minWidth="200" />
<view caption="Pacs Preview" align="right" minWidth="200" />
</layout>
</gui>
<registry>
<view sid="previewSelector" start="yes" />
<view wid="pacsPreview" start="yes" />
</registry>
</service>
<service uid="bottomView" type="::gui::view::SDefaultView" >
<gui>
<layout type="::fwGui::CardinalLayoutManager">
<orientation value="horizontal" />
<view caption="Local Series" align="center" minWidth="200" />
<view caption="Local Preview" align="right" minWidth="200" />
</layout>
</gui>
<registry>
<view sid="localSelector" start="yes" />
<view wid="localPreview" start="yes" />
</registry>
</service>
<!-- ******************************* Actions ****************************************** -->
<service uid="action_pullSeries" type="::gui::action::SSlotCaller" >
<slots>
<slot>action_pullSeries/setInexecutable</slot>
<slot>pullSeriesController/update</slot>
</slots>
</service>
<service uid="action_pushSeries" type="::ioDicom::SSeriesDBMerger">
<in key="selectedSeries" uid="localSelections" />
<inout key="seriesDB" uid="${SERIESDB}" />
</service>
<!-- ******************************* Services ***************************************** -->
<!-- PREVIEW -->
<service uid="previewSelector" type="::uiMedDataQt::editor::SSelector" autoConnect="yes">
<inout key="selection" uid="previewSelections" />
<inout key="seriesDB" uid="previewSeriesDB" />
</service>
<service uid="queryEditor" type="::ioDicomWeb::SQueryEditor" autoConnect="yes">
<inout key="seriesDB" uid="previewSeriesDB" />
<server>%PACS_SERVER_HOSTNAME%:%PACS_SERVER_PORT%</server>
</service>
<service uid="pullSeriesController" type="::ioDicomWeb::SSeriesPuller" >
<in key="selectedSeries" uid="previewSelections" />
<inout key="seriesDB" uid="localSeriesDB" />
<config dicomReader="::ioGdcm::SSeriesDBReader" dicomReaderConfig="DicomWebReaderConfig" />
<server>%PACS_SERVER_HOSTNAME%:%PACS_SERVER_PORT%</server>
</service>
<service uid="pacsViewer" type="::uiMedDataQt::SSeriesViewer" autoConnect="yes">
<in key="series" uid="previewSelections" />
<parentView wid="pacsPreview" />
<configs>
<config id="2DDicomWebPreviewConfig" type="::fwMedData::DicomSeries" />
</configs>
</service>
<!-- LOCAL -->
<service uid="localSelector" type="::uiMedDataQt::editor::SSelector" autoConnect="yes">
<inout key="seriesDB" uid="localSeriesDB" />
<inout key="selection" uid="localSelections" />
</service>
<service uid="localViewer" type="::uiMedDataQt::SSeriesViewer" autoConnect="yes">
<in key="series" uid="localSelections" />
<parentView wid="localPreview" />
<configs>
<config id="2DSimpleConfig2" type="::fwMedData::ImageSeries">
<extract path="@image" pattern="imageID" />
</config>
</configs>
</service>
<service uid="seriesDBReader" type="::ioGdcm::SSeriesDBReader" >
<inout key="data" uid="localSeriesDB" />
<config filterType="::fwDicomIOFilter::sorter::ImagePositionPatientSorter" />
</service>
<!-- ******************************* Connections ************************************** -->
<connect>
<signal>pullSeriesController/updated</signal>
<slot>action_pullSeries/setExecutable</slot>
</connect>
<!-- START AND STOP SERVICES -->
<start uid="mainView" />
<start uid="pullSeriesController" />
<start uid="localViewer" />
<start uid="pacsViewer" />
<start uid="seriesDBReader" />
</config>
</extension>
<plugin id="DicomWebReaderActivity" version="@PROJECT_VERSION@" >
<requirement id="activities" />
<requirement id="dataReg" />
<requirement id="guiQt" />
<requirement id="visuVTKQt" />
<requirement id="ioDicomWeb" />
<xi:include href="configurations/DicomWebReader.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
<xi:include href="configurations/2DDicomWebPreviewConfig.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
<extension implements="::fwActivities::registry::Activities">
<id>DicomWebReaderActivity</id>
<title>DicomWeb Reader</title>
<desc>DicomWeb Reader activity</desc>
<icon>media-0.1/icons/Pull.svg</icon>
<requirements>
</requirements>
<builder>::fwActivities::builder::ActivitySeries</builder>
<appConfig id="DicomWebReaderActivity">
</appConfig>
</extension>
<extension implements="::fwServices::registry::ServiceConfig">
<id>DicomWebReaderConfig</id>
<desc>Reader configuration to convert retrieved DicomSeries to ImageSeries</desc>
<config>
<config filterType="::fwDicomIOFilter::custom::DefaultDicomFilter" />
</config>
</extension>
</plugin>
/* ***** BEGIN LICENSE BLOCK ***** /* ***** BEGIN LICENSE BLOCK *****
* FW4SPL - Copyright (C) IRCAD, 2016-2017. * FW4SPL - Copyright (C) IRCAD, 2016-2018.
* Distributed under the terms of the GNU Lesser General Public License (LGPL) as * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
* published by the Free Software Foundation. * published by the Free Software Foundation.
* ****** END LICENSE BLOCK ****** */ * ****** END LICENSE BLOCK ****** */
#ifndef __ACTIVITIES_SSERIESSIGNAL_HPP__ #pragma once
#define __ACTIVITIES_SSERIESSIGNAL_HPP__
#include "activities/config.hpp" #include "activities/config.hpp"
...@@ -39,8 +38,8 @@ namespace activities ...@@ -39,8 +38,8 @@ namespace activities
* *
* @section XML XML Configuration * @section XML XML Configuration
* @code{.xml} * @code{.xml}
<service uid="action_newActivity" type="::fwGui::IActionSrv" impl="::activities::action::SSeriesSignal" <service uid="action_newActivity" type="::activities::action::SSeriesSignal" autoConnect="yes" >
* autoConnect="yes" > <in key="seriesDB" uid="..." />
<!-- Filter mode 'include' allows all given types. <!-- Filter mode 'include' allows all given types.
Filter mode 'exclude' allows all series excepted given ones. --> Filter mode 'exclude' allows all series excepted given ones. -->
<filter> <filter>
...@@ -50,6 +49,10 @@ namespace activities ...@@ -50,6 +49,10 @@ namespace activities
</filter> </filter>
</service> </service>
@endcode @endcode
* @subsection Input Input
* - \b seriesDB [::fwMedData::SeriesDB]: seriesDB to listen to forward the added series signal.
*
* @subsection Configuration Configuration
* - \b filter (optional): it allows to filter the series that can be notified. * - \b filter (optional): it allows to filter the series that can be notified.
* - \b mode: 'include' or 'exclude'. Defines if the series is notified (include) or not (exclude). * - \b mode: 'include' or 'exclude'. Defines if the series is notified (include) or not (exclude).
* - \b id: id of the activity * - \b id: id of the activity
...@@ -95,6 +98,15 @@ protected: ...@@ -95,6 +98,15 @@ protected:
/// Parse XML configuration /// Parse XML configuration
virtual void configuring() override; virtual void configuring() override;
/**
* @brief Returns proposals to connect service slots to associated object signals,
* this method is used for obj/srv auto connection
*
* Connect Vector::s_ADDED_OBJECTS_SIG to this::s_UPDATE_STATE_SLOT
* Connect Vector::s_REMOVED_OBJECTS_SIG to this::s_UPDATE_STATE_SLOT
*/
ACTIVITIES_API KeyConnectionsMap getAutoConnections() const override;
private: private: