comparison Framework/Applications/BasicApplicationContext.cpp @ 0:351ab0da0150

initial commit
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 14 Oct 2016 15:34:11 +0200
parents
children 9aace933cb64
comparison
equal deleted inserted replaced
-1:000000000000 0:351ab0da0150
1 /**
2 * Stone of Orthanc
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
4 * Department, University Hospital of Liege, Belgium
5 *
6 * This program is free software: you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation, either version 3 of the
9 * License, or (at your option) any later version.
10 *
11 * In addition, as a special exception, the copyright holders of this
12 * program give permission to link the code of its release with the
13 * OpenSSL project's "OpenSSL" library (or with modified versions of it
14 * that use the same license as the "OpenSSL" library), and distribute
15 * the linked executables. You must obey the GNU General Public License
16 * in all respects for all of the code used other than "OpenSSL". If you
17 * modify file(s) with this exception, you may extend this exception to
18 * your version of the file(s), but you are not obligated to do so. If
19 * you do not wish to do so, delete this exception statement from your
20 * version. If you delete this exception statement from all source files
21 * in the program, then also delete it here.
22 *
23 * This program is distributed in the hope that it will be useful, but
24 * WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26 * General Public License for more details.
27 *
28 * You should have received a copy of the GNU General Public License
29 * along with this program. If not, see <http://www.gnu.org/licenses/>.
30 **/
31
32
33 #include "BasicApplicationContext.h"
34
35 #include "../Toolbox/OrthancSeriesLoader.h"
36 #include "../Volumes/VolumeImageSimplePolicy.h"
37 #include "../Volumes/VolumeImageProgressivePolicy.h"
38
39 namespace OrthancStone
40 {
41 BasicApplicationContext::BasicApplicationContext(IOrthancConnection& orthanc) :
42 orthanc_(orthanc)
43 {
44 }
45
46
47 BasicApplicationContext::~BasicApplicationContext()
48 {
49 for (Interactors::iterator it = interactors_.begin(); it != interactors_.end(); ++it)
50 {
51 assert(*it != NULL);
52 delete *it;
53 }
54
55 for (Volumes::iterator it = volumes_.begin(); it != volumes_.end(); ++it)
56 {
57 assert(*it != NULL);
58 delete *it;
59 }
60
61 for (StructureSets::iterator it = structureSets_.begin(); it != structureSets_.end(); ++it)
62 {
63 assert(*it != NULL);
64 delete *it;
65 }
66 }
67
68
69 IWidget& BasicApplicationContext::SetCentralWidget(IWidget* widget) // Takes ownership
70 {
71 viewport_.SetCentralWidget(widget);
72 return *widget;
73 }
74
75
76 VolumeImage& BasicApplicationContext::AddSeriesVolume(const std::string& series,
77 bool isProgressiveDownload,
78 size_t downloadThreadCount)
79 {
80 std::auto_ptr<VolumeImage> volume(new VolumeImage(new OrthancSeriesLoader(orthanc_, series)));
81
82 if (isProgressiveDownload)
83 {
84 volume->SetDownloadPolicy(new VolumeImageProgressivePolicy);
85 }
86 else
87 {
88 volume->SetDownloadPolicy(new VolumeImageSimplePolicy);
89 }
90
91 volume->SetThreadCount(downloadThreadCount);
92
93 VolumeImage& result = *volume;
94 volumes_.push_back(volume.release());
95
96 return result;
97 }
98
99
100 DicomStructureSet& BasicApplicationContext::AddStructureSet(const std::string& instance)
101 {
102 std::auto_ptr<DicomStructureSet> structureSet(new DicomStructureSet(orthanc_, instance));
103
104 DicomStructureSet& result = *structureSet;
105 structureSets_.push_back(structureSet.release());
106
107 return result;
108 }
109
110
111 IWorldSceneInteractor& BasicApplicationContext::AddInteractor(IWorldSceneInteractor* interactor)
112 {
113 if (interactor == NULL)
114 {
115 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
116 }
117
118 interactors_.push_back(interactor);
119
120 return *interactor;
121 }
122
123
124 void BasicApplicationContext::Start()
125 {
126 for (Volumes::iterator it = volumes_.begin(); it != volumes_.end(); ++it)
127 {
128 assert(*it != NULL);
129 (*it)->Start();
130 }
131
132 viewport_.Start();
133 }
134
135
136 void BasicApplicationContext::Stop()
137 {
138 viewport_.Stop();
139
140 for (Volumes::iterator it = volumes_.begin(); it != volumes_.end(); ++it)
141 {
142 assert(*it != NULL);
143 (*it)->Stop();
144 }
145 }
146 }