fw4spl
InrImageWriterService.cpp
1 /* ***** BEGIN LICENSE BLOCK *****
2  * FW4SPL - Copyright (C) IRCAD, 2009-2018.
3  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
4  * published by the Free Software Foundation.
5  * ****** END LICENSE BLOCK ****** */
6 
7 #include "ioITK/InrImageWriterService.hpp"
8 
9 #include <fwCore/base.hpp>
10 
11 #include <fwData/Image.hpp>
12 #include <fwData/location/Folder.hpp>
13 #include <fwData/location/SingleFile.hpp>
14 
15 #include <fwGui/Cursor.hpp>
16 #include <fwGui/dialog/LocationDialog.hpp>
17 #include <fwGui/dialog/MessageDialog.hpp>
18 #include <fwGui/dialog/ProgressDialog.hpp>
19 
20 #include <fwIO/IWriter.hpp>
21 
22 #include <fwItkIO/ImageWriter.hpp>
23 
24 #include <fwServices/macros.hpp>
25 
26 namespace ioITK
27 {
28 
29 fwServicesRegisterMacro( ::fwIO::IWriter, ::ioITK::InrImageWriterService, ::fwData::Image );
30 
31 //------------------------------------------------------------------------------
32 
33 InrImageWriterService::InrImageWriterService() noexcept
34 {
35 }
36 
37 //------------------------------------------------------------------------------
38 
39 InrImageWriterService::~InrImageWriterService() noexcept
40 {
41 }
42 
43 //------------------------------------------------------------------------------
44 
46 {
47  return ::fwIO::FILE;
48 }
49 
50 //------------------------------------------------------------------------------
51 
53 {
55 }
56 
57 //------------------------------------------------------------------------------
58 
60 {
62  static ::boost::filesystem::path _sDefaultPath;
63 
65  dialogFile.setTitle(m_windowTitle.empty() ? "Choose an inrimage file to save image" : m_windowTitle);
66  dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
67  dialogFile.addFilter("Inrimage", "*.inr.gz");
68  dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
69 
70  ::fwData::location::SingleFile::sptr result;
71  result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
72  if (result)
73  {
74  _sDefaultPath = result->getPath().parent_path();
75  this->setFile( result->getPath() );
76  dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
77  }
78  else
79  {
80  this->clearLocations();
81  }
82 }
83 
84 //------------------------------------------------------------------------------
85 
87 {
89 }
90 
91 //------------------------------------------------------------------------------
92 
94 {
96 }
97 
98 //------------------------------------------------------------------------------
99 
100 void InrImageWriterService::info(std::ostream& _sstream )
101 {
102  _sstream << "InrImageWriterService::info";
103 }
104 
105 //------------------------------------------------------------------------------
106 
107 void InrImageWriterService::saveImage( const ::boost::filesystem::path& inrFile, const ::fwData::Image::csptr& image )
108 {
109  SLM_TRACE_FUNC();
110  ::fwItkIO::ImageWriter::sptr myWriter = ::fwItkIO::ImageWriter::New();
111 
112  myWriter->setObject(image);
113  myWriter->setFile(inrFile);
114 
115  try
116  {
117  ::fwGui::dialog::ProgressDialog progressMeterGUI("Saving Image ");
118  myWriter->addHandler( progressMeterGUI );
119  myWriter->write();
120 
121  }
122  catch (const std::exception& e)
123  {
124  std::stringstream ss;
125  ss << "Warning during saving : " << e.what();
127  ss.str(),
128  ::fwGui::dialog::IMessageDialog::WARNING);
129  }
130  catch( ... )
131  {
133  "Warning during saving",
134  ::fwGui::dialog::IMessageDialog::WARNING);
135  }
136 }
137 
138 //------------------------------------------------------------------------------
139 
141 {
142  SLM_TRACE_FUNC();
143 
144  if( this->hasLocationDefined() )
145  {
146  // Retrieve dataStruct associated with this service
147  ::fwData::Image::csptr image = this->getInput< ::fwData::Image >(::fwIO::s_DATA_KEY);
148  if (!image)
149  {
150  FW_DEPRECATED_KEY(::fwIO::s_DATA_KEY, "inout", "18.0");
151  image = this->getObject< ::fwData::Image >();
152  }
153  SLM_ASSERT("'" + ::fwIO::s_DATA_KEY + "' key is not defined", image);
154 
155  ::fwGui::Cursor cursor;
156  cursor.setCursor(::fwGui::ICursor::BUSY);
157  saveImage(this->getFile(), image);
158  cursor.setDefaultCursor();
159  }
160 }
161 
162 //------------------------------------------------------------------------------
163 
164 } // namespace ioITK
#define FW_DEPRECATED_KEY(newKey, access, version)
Use this macro when deprecating a service key to warn the developer.
Definition: spyLog.hpp:366
virtual FWGUI_API void setCursor(::fwGui::ICursor::CursorType cursor) override
Set the cursor.
#define SLM_TRACE_FUNC()
Trace contextual function signature.
Definition: spyLog.hpp:329
static FWGUI_API IMessageDialog::Buttons showMessageDialog(const std::string &title, const std::string &message,::fwGui::dialog::IMessageDialog::Icons icon=INFO)
virtual IOITK_API void stopping() override
Override.
virtual IOITK_API void configureWithIHM() override
Override.
virtual FWGUI_API void setDefaultLocation(::fwData::location::ILocation::sptr loc) override
Set the initial location for the dialog.
FWGUI_API::fwGui::dialog::ILocationDialog & setOption(::fwGui::dialog::ILocationDialog::Options option) override
allow to set option to the file dialog mode=READ/WRITE, check=FILE_MUST_EXIST
FWGUI_API::fwData::location::ILocation::sptr show() override
Display the dialog.
FWGUI_API void addFilter(const std::string &filterName, const std::string &wildcardList) override
specify some filtering when browsing files:
virtual IOITK_API void starting() override
Override.
Defines the generic progress dialog for IHM. Use the Delegate design pattern. The specific implementa...
FWIO_API void setFile(const ::boost::filesystem::path &file)
Sets file path.
Definition: IWriter.cpp:49
virtual FWIO_API void configuring() override
This method proposes to parse xml configuration to retrieve file/files/folder paths.
Definition: IWriter.cpp:122
FWIO_APIconst::boost::filesystem::path & getFile() const
Returns the file path set by the user or set during service configuration.
Definition: IWriter.cpp:40
IOITK_API void info(std::ostream &_sstream) override
Override.
FWIO_API void clearLocations()
Clear any location set by the setFile/setFiles/setFolder setter.
Definition: IWriter.cpp:115
#define SLM_ASSERT(message, cond)
work like &#39;assert&#39; from &#39;cassert&#39;, with in addition a message logged by spylog (with FATAL loglevel) ...
Definition: spyLog.hpp:308
IOITK_API void updating() override
Override.
IOPathType
IOPathType defines different type of paths used by service readers/writers.
Definition: ioTypes.hpp:19
Writer service API. It manages extension points definition and extension configuration.
Definition: IWriter.hpp:33
FWGUI_API void setTitle(const std::string &title) override
Set the title for the dialog.
Defines the generic file/folder selector dialog for IHM.
Defines the generic cursor for IHM. Use the Delegate design pattern.
This class defines an image.
Writer for .inr.gz image.
FWGUI_API void saveDefaultLocation(::fwData::location::ILocation::sptr loc) override
Save the specified default location for the dialog in preferences (if available)
The namespace ioITK contains services for reader, writer and helper for itk image.
FWIO_API bool hasLocationDefined() const
Returns if a location has been defined ( by the configuration process or directly by user ) ...
Definition: IWriter.cpp:184
virtual FWGUI_API void setDefaultCursor() override
Set the default cursor.
std::string m_windowTitle
Title of the window that will open when the configureWithIHM slot is called.
Definition: IWriter.hpp:171
IOITK_API::fwIO::IOPathType getIOPathType() const override
Return managed file type, here FILE.
virtual IOITK_API void configuring() override
Override.