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
uiIO
uiGenericQt
uiMedDataQt
uiPreferences
2DVisualizationActivity
3DVisualizationActivity
......@@ -35,6 +36,8 @@ set( REQUIREMENTS
dicomPacsReaderActivity
dicomPacsWriterActivity
DicomWebReaderActivity
media
style
......
......@@ -42,11 +42,13 @@
<gui>
<layout>
<menu name="File" />
<menu name="Preferences" />
<menu name="Help" />
</layout>
</gui>
<registry>
<menu sid="menu_file" start="yes" />
<menu sid="menu_preferences" start="yes" />
<menu sid="menu_help" start="yes" />
</registry>
</service>
......@@ -66,6 +68,17 @@
</registry>
</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">
<gui>
<layout>
......@@ -84,6 +97,21 @@
<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">
<filename id="VRRender-${appVersion}/about/about.html" />
</service>
......@@ -119,6 +147,10 @@
<slot>dynamicView/createTab</slot>
</connect>
<connect channel="parametersChannel">
<signal>action_configuration/parametersModified</signal>
</connect>
<start uid="mainFrame" />
<start uid="progress_statusbar" />
......
......@@ -13,7 +13,7 @@
<object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref" />
<object uid="selections" type="::fwData::Vector" />
<service uid="mainview" type="::gui::view::SDefaultView" autoConnect="yes">
<service uid="mainview" type="::gui::view::SDefaultView">
<gui>
<layout type="::fwGui::CardinalLayoutManager">
<view caption="Information" align="center" minWidth="200" />
......@@ -46,6 +46,7 @@
<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 Filtering" icon="media-0.1/icons/icon-DICOM-Filtering.svg" />
<menuItem name="DICOM Web Reader" icon="media-0.1/icons/Pull.svg" />
</layout>
</gui>
<registry>
......@@ -59,6 +60,7 @@
<menuItem sid="action_dicomPacsReader" start="yes" />
<menuItem sid="action_dicomPacsWriter" start="yes" />
<menuItem sid="action_dicomFiltering" start="yes" />
<menuItem sid="action_dicomWebReader" start="yes" />
</registry>
</service>
......@@ -73,7 +75,8 @@
<service uid="activityCreator" type="::uiMedDataQt::editor::SActivityWizard">
<inout key="seriesDB" uid="${SERIESDB}" />
<ioSelectorConfig>FullSDBReaderIOSelectorConfig</ioSelectorConfig>
<ioSelectorConfig>SDBReaderIOSelectorConfig</ioSelectorConfig>
<sdbIoSelectorConfig>FullSDBReaderIOSelectorConfig</sdbIoSelectorConfig>
<icons>
<icon type="::fwMedData::ImageSeries" icon="media-0.1/icons/ImageSeries.svg" />
<icon type="::fwMedData::ModelSeries" icon="media-0.1/icons/ModelSeries.svg" />
......@@ -197,6 +200,21 @@
</config>
</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">
<in key="series" uid="selections" />
<filter>
......@@ -257,6 +275,7 @@
<signal>action_dicomPacsReader/activityLaunched</signal>
<signal>action_dicomPacsWriter/activityLaunched</signal>
<signal>action_dicomFiltering/activityLaunched</signal>
<signal>action_dicomWebReader/activityLaunched</signal>
</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 *****
* 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
* published by the Free Software Foundation.
* ****** END LICENSE BLOCK ****** */
#ifndef __ACTIVITIES_SSERIESSIGNAL_HPP__
#define __ACTIVITIES_SSERIESSIGNAL_HPP__
#pragma once
#include "activities/config.hpp"
......@@ -39,8 +38,8 @@ namespace activities
*
* @section XML XML Configuration
* @code{.xml}
<service uid="action_newActivity" type="::fwGui::IActionSrv" impl="::activities::action::SSeriesSignal"
* autoConnect="yes" >
<service uid="action_newActivity" type="::activities::action::SSeriesSignal" autoConnect="yes" >
<in key="seriesDB" uid="..." />
<!-- Filter mode 'include' allows all given types.
Filter mode 'exclude' allows all series excepted given ones. -->
<filter>
......@@ -50,6 +49,10 @@ namespace activities
</filter>
</service>
@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 mode: 'include' or 'exclude'. Defines if the series is notified (include) or not (exclude).
* - \b id: id of the activity
......@@ -95,6 +98,15 @@ protected:
/// Parse XML configuration
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:
typedef std::vector< std::string > TypesType;
......@@ -120,5 +132,3 @@ private:
};
} // gui
#endif // __ACTIVITIES_SSERIESSIGNAL_HPP__
/* ***** BEGIN LICENSE BLOCK *****
* FW4SPL - Copyright (C) IRCAD, 2009-2017.
* FW4SPL - Copyright (C) IRCAD, 2009-2018.
* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
* published by the Free Software Foundation.
* ****** END LICENSE BLOCK ****** */
#ifndef __ACTIVITIES_ACTION_SACTIVITYLAUNCHER_HPP__
#define __ACTIVITIES_ACTION_SACTIVITYLAUNCHER_HPP__
#pragma once
#include "activities/config.hpp"
......@@ -45,14 +44,13 @@ namespace action
*
* @section Signal Signal
* - \b activityLaunched(::fwActivities::registry::ActivityMsg) : This signal is emitted when the activity is created,
* it
* contains the activity information. It should be connected to the slot 'createTab' of the service
* '::guiQt::editor::DynamicView'.
* it contains the activity information. It should be connected to the slot 'createTab' of the service
* '::guiQt::editor::SDynamicView'.
*
* @section XML XML Configuration
* @code{.xml}
<service uid="action_newActivity" type="::fwGui::IActionSrv" impl="::activities::action::SActivityLauncher"
* autoConnect="yes" >
<service uid="action_newActivity" type="::activities::action::SActivityLauncher" autoConnect="yes" >
<in key="series" uid="..." />
<config>
<!-- SActivityLauncher mode : immediate or message(default)
Immediate mode starts and stop immediatly the activity's config -->
......@@ -80,7 +78,9 @@ namespace action
</config>
</service>
@endcode
*
* @subsection Input Input
* - \b series [::fwData::Vector]: vector containg series inherited from ::fwMedData::Series
* @subsection Configuration Configuration
* - \b mode (optional): there are two mode: "message" and "immediate"
* - \b message (used by défaut): the action send a signal containing the information needed to launch the
* choosen activity. The service '::guiQt::editor::DynamicView' allows to launch the activity in a new tab. For
......@@ -154,6 +154,15 @@ public:
protected:
/**
* @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 virtual KeyConnectionsMap getAutoConnections() const override;
///This method launches the IAction::starting method.
virtual void starting() override;
......@@ -171,9 +180,6 @@ protected:
*/
virtual void configuring() override;
/// Overrides
virtual void info( std::ostream& _sstream ) override;
typedef ::fwActivities::registry::ActivityAppConfig::ActivityAppConfigParamsType ParametersType;
typedef std::vector< std::string > KeysType;
......@@ -194,7 +200,7 @@ private:
* @brief Launches activity series if only ActivitySeries are selected.
* @return Returns true if only ActivitySeries are selected.
*/
bool launchAS(::fwData::Vector::sptr& selection);