1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
5 <meta http-equiv="Content-Language" content="es-co" />
6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7 <title>Architecture</title>
12 <h1 id="head-854b062d360d04ce4f5012114afa9ff5f11f21ba">Architecture</h1>
13 <span class="anchor" id="line-6"></span><span class="anchor" id="line-7"></span>
14 <p class="line867"></p>
15 <h2 id="head-230b785b2112730d4f8aaffcda83ccd28c9c8d83">Generalities</h2>
16 <span class="anchor" id="line-8"></span><span class="anchor" id="line-9"></span>
18 <li>cvs : creatis/creaImageIO <span class="anchor" id="line-10"></span>
20 <li style="list-style-type: none;">
21 <p class="line862">cvs co -D
22 :PROTOCOL:USERNAME@cvs.creatis.insa-lyon.fr:/cvs/creatis creaImageIO
23 <span class="anchor" id="line-11"></span></p>
27 <li>09/02/09 : <span class="anchor" id="line-12"></span>
29 <li>new sources in src2 : create a lib called creaImageIO2
30 <span class="anchor" id="line-13"></span></li>
31 <li>command line app : appli/gimmick <span class="anchor" id="line-14">
33 <li>cmake option : BUILD_V2 to build the new version
34 <span class="anchor" id="line-15"></span></li>
37 <li>All C++ files begin with creaImageIO <span class="anchor" id="line-16">
39 <li>All creaImageIO classes are in a namespace creaImageIO
40 <span class="anchor" id="line-17"></span><span class="anchor" id="line-18">
43 <p class="line867"></p>
44 <h2 id="head-fd2930d25892babc425be6c8bf5e10dd28f776bb">General stucture</h2>
45 <span class="anchor" id="line-19"></span><span class="anchor" id="line-20">
48 <li>The main data structure : attributed tree
49 <span class="anchor" id="line-21"></span>
51 <li>all related files are of the form : creaImageIOTree
52 <span class="anchor" id="line-22"></span></li>
53 <li>all related classes are in a namespace : creaImageIO::tree
54 <span class="anchor" id="line-23"></span></li>
58 <p class="line862">The abstract 'Model' : <a class="nonexistent">TreeHandler</a>
59 = manages a data source (read-only; read/write)
60 <span class="anchor" id="line-24"></span></p>
63 <p class="line862">Concrete models : now SQLiteTreeHandler; future
64 IRodsTreeHandler, <a class="nonexistent">FavoritesTreeHandler</a>?
65 <span class="anchor" id="line-25"></span></p>
70 <p class="line862">The controller 'Gimmick' : controls different
71 <a class="nonexistent">TreeHandlers</a>: <span class="anchor" id="line-26">
74 <li>Local database handler <span class="anchor" id="line-27"></span>
76 <li>Favorites handler <span class="anchor" id="line-28"></span></li>
77 <li>Other which are open on user demand
78 <span class="anchor" id="line-29"></span></li>
81 <li>The Views: <span class="anchor" id="line-30"></span>
84 <p class="line862">Abstract <a class="nonexistent">GimmickView</a> :
85 Dialog <span class="anchor" id="line-31"></span></p>
88 <p class="line862">Concrete <a class="nonexistent">GimmickView</a> : now
89 <a class="nonexistent">WxGimmickView</a>; future QGimmickView ?
90 <span class="anchor" id="line-32"></span></p>
93 <p class="line862">Do we need to have abstract classes for
94 <a class="nonexistent">GimmickView</a> components ?
95 <span class="anchor" id="line-33"></span></p>
98 <p class="line891"><a class="nonexistent">TreeView</a> : is
99 associated with a <a class="nonexistent">TreeHandler</a> to
100 visualize its Tree <span class="anchor" id="line-34"></span></p>
103 <p class="line891"><a class="nonexistent">AttributeView</a> :
104 visualizes a set of attributes (only one for a
105 <a class="nonexistent">GimmickView</a>)
106 <span class="anchor" id="line-35"></span></p>
109 <p class="line891"><a class="nonexistent">ImageView</a> : preview of
110 images <span class="anchor" id="line-36"></span>
111 <span class="anchor" id="line-37"></span>
112 <span class="anchor" id="line-38"></span></p>
119 <p class="line867"></p>
120 <h2 id="head-b16e3563d729255863452b289e971da6a51d945b">Classes</h2>
121 <span class="anchor" id="line-39"></span><span class="anchor" id="line-40">
123 <p class="line867"></p>
124 <h3 id="head-4b6a5f3be677d7dfd21607ab2394efda67858131">Data structure:
126 <span class="anchor" id="line-41"></span><span class="anchor" id="line-42">
128 <p class="line874">in namespace creaImageIO::tree
129 <span class="anchor" id="line-43"></span><span class="anchor" id="line-44">
132 <li>Tree <span class="anchor" id="line-45"></span>
134 <li>Attributed tree structure <span class="anchor" id="line-46"></span>
136 <li>inherits Node <span class="anchor" id="line-47"></span></li>
138 <p class="line862">holds a vector of root <a class="nonexistent">
139 TreeNode</a> <span class="anchor" id="line-48"></span></p>
144 <p class="line891"><a class="nonexistent">TreeData</a>
145 <span class="anchor" id="line-49"></span></p>
147 <li>Abstract class to store user data on a tree
148 <span class="anchor" id="line-50"></span></li>
151 <li>Node <span class="anchor" id="line-51"></span>
153 <li>belong to a Tree, <span class="anchor" id="line-52"></span></li>
154 <li>holds a pointer on parent Node, <span class="anchor" id="line-53">
156 <li>holds a vector of children Node <span class="anchor" id="line-54">
161 <p class="line891"><a class="nonexistent">NodeData</a>
162 <span class="anchor" id="line-55"></span></p>
164 <li>Abstract class to store user data on a tree node
165 <span class="anchor" id="line-56"></span></li>
168 <li>Descriptor <span class="anchor" id="line-57"></span>
170 <li>Descriptor of the structure a tree (number of levels, descriptors of
171 each level, ...) <span class="anchor" id="line-58"></span></li>
173 <p class="line862">holds a vector of <a class="nonexistent">
174 LevelDescriptor</a> <span class="anchor" id="line-59"></span></p>
179 <p class="line891"><a class="nonexistent">LevelDescriptor</a>
180 <span class="anchor" id="line-60"></span></p>
183 <p class="line862">holds a vector of <a class="nonexistent">
184 TreeAttributeDescriptor</a> <span class="anchor" id="line-61"></span>
190 <p class="line891"><a class="nonexistent">AttributeDescriptor</a>
191 <span class="anchor" id="line-62"></span></p>
193 <li>stores name, dicom group/elem, flags
194 <span class="anchor" id="line-63"></span></li>
197 <li>Comparator <span class="anchor" id="line-64"></span>
199 <li>Abstract definition of a comparator of Node
200 <span class="anchor" id="line-65"></span></li>
202 <p class="line862">Comparison is done by operator()(Node* const &, Node*
203 const &) <span class="anchor" id="line-66"></span></p>
208 <p class="line891"><a class="nonexistent">ComparatorWithOrder</a>
209 <span class="anchor" id="line-67"></span></p>
211 <li>Abstract Comparator whose order can be reversed
212 <span class="anchor" id="line-68"></span></li>
214 <p class="line862">Concrete comparison is done by method compare(Node*
215 const &, Node* const &) <span class="anchor" id="line-69"></span></p>
220 <p class="line891"><a class="nonexistent">LexicographicalComparator</a>
221 <span class="anchor" id="line-70"></span></p>
223 <li>A Comparator which stores a vector of Comparators and which performs
224 lexicographical comparison <span class="anchor" id="line-71"></span>
229 <p class="line891"><a class="nonexistent">IntComparator</a> : Compares the
230 values of a given Attribute of the Nodes which is decoded as an int value
231 <span class="anchor" id="line-72"></span></p>
234 <p class="line891"><a class="nonexistent">FloatComparator</a> : Compares the
235 values of a given Attribute of the Nodes which is decoded as a float value
236 <span class="anchor" id="line-73"></span></p>
239 <p class="line891"><a class="nonexistent">StringComparator</a> : Compares
240 the values of a given Attribute of the Nodes which is decoded as a string
241 value <span class="anchor" id="line-74"></span>
242 <span class="anchor" id="line-75"></span><span class="anchor" id="line-76">
246 <p class="line867"></p>
247 <h3 id="head-df11fea98849928d47fd0fca777300beeb1de441">Models : TreeHandler and
249 <span class="anchor" id="line-77"></span><span class="anchor" id="line-78">
253 <p class="line891"><a class="nonexistent">TreeHandler</a> : Abstract class
254 which 'handles' a Tree structure. <span class="anchor" id="line-79"></span>
257 <li style="list-style-type: none;">Can:
258 <span class="anchor" id="line-80"></span>Load the children of a given
259 Node <span class="anchor" id="line-81"></span>
260 <span class="anchor" id="line-82"></span></li>
264 <p class="line862">SQLiteTreeHandler : Concrete <a class="nonexistent">
265 TreeHandler</a> which manages a tree stored in a sqlite database
266 <span class="anchor" id="line-83"></span></p>
268 <li>CppSQLite3.h / CppSQLite3.cpp : C++ interface to sqlite db
269 <span class="anchor" id="line-84"></span></li>
271 <p class="line874">... <span class="anchor" id="line-85"></span>
272 <span class="anchor" id="line-86"></span></p>
275 <p class="line891"><a class="nonexistent">ImageFinder</a> : Parses (recursively)
276 a part of a filesystem to look for known images and load their attributes in
277 order to add the images to a Tree (submission via a <a class="nonexistent">
278 TreeHandler</a>::<a class="nonexistent">AddBranch</a>)
279 <span class="anchor" id="line-87"></span><span class="anchor" id="line-88">
280 </span><span class="anchor" id="line-89"></span></p>
283 <p class="line867"></p>
284 <h3 id="head-5d6e60823befe28469fe2d44ec8a889c06ea3b72">Image handling</h3>
285 <span class="anchor" id="line-90"></span><span class="anchor" id="line-91">
288 <li>creaImageIOImageReader.h/cpp : <span class="anchor" id="line-92"></span>
291 <p class="line891"><a class="nonexistent">SpecificImageReader</a>
292 <span class="anchor" id="line-93"></span></p>
295 <p class="line891"><a class="nonexistent">ImageReader</a>
296 <span class="anchor" id="line-94"></span></p>
300 <li>creaImageIOMultiThreadImageReader.h/cpp
301 <span class="anchor" id="line-95"></span></li>
302 <li>creaImageIOIndexedHeap.h/txx <span class="anchor" id="line-96"></span>
303 <span class="anchor" id="line-97"></span></li>
305 <p class="line867"></p>
306 <h3 id="head-6b69e886af29f9ef5bb7eb8b646980dd2963c2cf">Controller</h3>
307 <span class="anchor" id="line-98"></span><span class="anchor" id="line-99">
310 <li>Gimmick <span class="anchor" id="line-100"></span>
311 <span class="anchor" id="line-101"></span></li>
313 <p class="line867"></p>
314 <h3 id="head-4e100fce838267c2c7182a13a0137ed08ed1c75a">Views</h3>
315 <span class="anchor" id="line-102"></span><span class="anchor" id="line-103">
319 <p class="line891"><a class="nonexistent">GimmickView</a> : Abstract
320 <span class="anchor" id="line-104"></span></p>
323 <p class="line891"><a class="nonexistent">WxGimmickView</a>
324 <span class="anchor" id="line-105"></span></p>
327 <p class="line891"><a class="nonexistent">WxTreeVie</a>w</p>
330 <p class="line891"><a class="nonexistent">WxAttributeView</a>
331 <span class="anchor" id="line-107"></span></p>
334 <p class="line891"><a class="nonexistent">WxImageView</a>
335 <span class="anchor" id="line-108"></span></p>
339 <li>QGimmickView <span class="anchor" id="line-109"></span>