2 # ---------------------------------------------------------------------
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
6 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
10 # This software is governed by the CeCILL-B license under French law and
11 # abiding by the rules of distribution of free software. You can use,
12 # modify and/ or redistribute the software under the terms of the CeCILL-B
13 # license as circulated by CEA, CNRS and INRIA at the following URL
14 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
15 # or in the file LICENSE.txt.
17 # As a counterpart to the access to the source code and rights to copy,
18 # modify and redistribute granted by the license, users are provided only
19 # with a limited warranty and the software's author, the holder of the
20 # economic rights, and the successive licensors have only limited
23 # The fact that you are presently reading this means that you have had
24 # knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------
27 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
28 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
31 <meta http-equiv="Content-Language" content="es-co" />
32 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
33 <title>Architecture</title>
38 <h1 id="head-854b062d360d04ce4f5012114afa9ff5f11f21ba">Architecture</h1>
39 <span class="anchor" id="line-6"></span><span class="anchor" id="line-7"></span>
40 <p class="line867"></p>
41 <h2 id="head-230b785b2112730d4f8aaffcda83ccd28c9c8d83">Generalities</h2>
42 <span class="anchor" id="line-8"></span><span class="anchor" id="line-9"></span>
44 <li>cvs : creatis/creaImageIO <span class="anchor" id="line-10"></span>
46 <li style="list-style-type: none;">
47 <p class="line862">cvs co -D
48 :PROTOCOL:USERNAME@cvs.creatis.insa-lyon.fr:/cvs/creatis creaImageIO
49 <span class="anchor" id="line-11"></span></p>
53 <li>09/02/09 : <span class="anchor" id="line-12"></span>
55 <li>new sources in src : create a lib called creaImageIO
56 <span class="anchor" id="line-13"></span></li>
57 <li>command line app : appli/gimmick <span class="anchor" id="line-14">
59 <li>cmake option : BUILD_V2 to build the new version
60 <span class="anchor" id="line-15"></span></li>
63 <li>All C++ files begin with creaImageIO <span class="anchor" id="line-16">
65 <li>All creaImageIO classes are in a namespace creaImageIO
66 <span class="anchor" id="line-17"></span><span class="anchor" id="line-18">
69 <p class="line867"></p>
70 <h2 id="head-fd2930d25892babc425be6c8bf5e10dd28f776bb">General stucture</h2>
71 <span class="anchor" id="line-19"></span><span class="anchor" id="line-20">
74 <li>The main data structure : attributed tree
75 <span class="anchor" id="line-21"></span>
77 <li>all related files are of the form : creaImageIOTree
78 <span class="anchor" id="line-22"></span></li>
79 <li>all related classes are in a namespace : creaImageIO::tree
80 <span class="anchor" id="line-23"></span></li>
84 <p class="line862">The abstract 'Model' : <a class="nonexistent">TreeHandler</a>
85 = manages a data source (read-only; read/write)
86 <span class="anchor" id="line-24"></span></p>
89 <p class="line862">Concrete models : now SQLiteTreeHandler; future
90 IRodsTreeHandler, <a class="nonexistent">FavoritesTreeHandler</a>?
91 <span class="anchor" id="line-25"></span></p>
96 <p class="line862">The controller 'Gimmick' : controls different
97 <a class="nonexistent">TreeHandlers</a>: <span class="anchor" id="line-26">
100 <li>Local database handler <span class="anchor" id="line-27"></span>
102 <li>Favorites handler <span class="anchor" id="line-28"></span></li>
103 <li>Other which are open on user demand
104 <span class="anchor" id="line-29"></span></li>
107 <li>The Views: <span class="anchor" id="line-30"></span>
110 <p class="line862">Abstract <a class="nonexistent">GimmickView</a> :
111 Dialog <span class="anchor" id="line-31"></span></p>
114 <p class="line862">Concrete <a class="nonexistent">GimmickView</a> : now
115 <a class="nonexistent">WxGimmickView</a>; future QGimmickView ?
116 <span class="anchor" id="line-32"></span></p>
119 <p class="line862">Do we need to have abstract classes for
120 <a class="nonexistent">GimmickView</a> components ?
121 <span class="anchor" id="line-33"></span></p>
124 <p class="line891"><a class="nonexistent">TreeView</a> : is
125 associated with a <a class="nonexistent">TreeHandler</a> to
126 visualize its Tree <span class="anchor" id="line-34"></span></p>
129 <p class="line891"><a class="nonexistent">AttributeView</a> :
130 visualizes a set of attributes (only one for a
131 <a class="nonexistent">GimmickView</a>)
132 <span class="anchor" id="line-35"></span></p>
135 <p class="line891"><a class="nonexistent">ImageView</a> : preview of
136 images <span class="anchor" id="line-36"></span>
137 <span class="anchor" id="line-37"></span>
138 <span class="anchor" id="line-38"></span></p>
145 <p class="line867"></p>
146 <h2 id="head-b16e3563d729255863452b289e971da6a51d945b">Classes</h2>
147 <span class="anchor" id="line-39"></span><span class="anchor" id="line-40">
149 <p class="line867"></p>
150 <h3 id="head-4b6a5f3be677d7dfd21607ab2394efda67858131">Data structure:
152 <span class="anchor" id="line-41"></span><span class="anchor" id="line-42">
154 <p class="line874">in namespace creaImageIO::tree
155 <span class="anchor" id="line-43"></span><span class="anchor" id="line-44">
158 <li>Tree <span class="anchor" id="line-45"></span>
160 <li>Attributed tree structure <span class="anchor" id="line-46"></span>
162 <li>inherits Node <span class="anchor" id="line-47"></span></li>
164 <p class="line862">holds a vector of root <a class="nonexistent">
165 TreeNode</a> <span class="anchor" id="line-48"></span></p>
170 <p class="line891"><a class="nonexistent">TreeData</a>
171 <span class="anchor" id="line-49"></span></p>
173 <li>Abstract class to store user data on a tree
174 <span class="anchor" id="line-50"></span></li>
177 <li>Node <span class="anchor" id="line-51"></span>
179 <li>belong to a Tree, <span class="anchor" id="line-52"></span></li>
180 <li>holds a pointer on parent Node, <span class="anchor" id="line-53">
182 <li>holds a vector of children Node <span class="anchor" id="line-54">
187 <p class="line891"><a class="nonexistent">NodeData</a>
188 <span class="anchor" id="line-55"></span></p>
190 <li>Abstract class to store user data on a tree node
191 <span class="anchor" id="line-56"></span></li>
194 <li>Descriptor <span class="anchor" id="line-57"></span>
196 <li>Descriptor of the structure a tree (number of levels, descriptors of
197 each level, ...) <span class="anchor" id="line-58"></span></li>
199 <p class="line862">holds a vector of <a class="nonexistent">
200 LevelDescriptor</a> <span class="anchor" id="line-59"></span></p>
205 <p class="line891"><a class="nonexistent">LevelDescriptor</a>
206 <span class="anchor" id="line-60"></span></p>
209 <p class="line862">holds a vector of <a class="nonexistent">
210 TreeAttributeDescriptor</a> <span class="anchor" id="line-61"></span>
216 <p class="line891"><a class="nonexistent">AttributeDescriptor</a>
217 <span class="anchor" id="line-62"></span></p>
219 <li>stores name, dicom group/elem, flags
220 <span class="anchor" id="line-63"></span></li>
223 <li>Comparator <span class="anchor" id="line-64"></span>
225 <li>Abstract definition of a comparator of Node
226 <span class="anchor" id="line-65"></span></li>
228 <p class="line862">Comparison is done by operator()(Node* const &, Node*
229 const &) <span class="anchor" id="line-66"></span></p>
234 <p class="line891"><a class="nonexistent">ComparatorWithOrder</a>
235 <span class="anchor" id="line-67"></span></p>
237 <li>Abstract Comparator whose order can be reversed
238 <span class="anchor" id="line-68"></span></li>
240 <p class="line862">Concrete comparison is done by method compare(Node*
241 const &, Node* const &) <span class="anchor" id="line-69"></span></p>
246 <p class="line891"><a class="nonexistent">LexicographicalComparator</a>
247 <span class="anchor" id="line-70"></span></p>
249 <li>A Comparator which stores a vector of Comparators and which performs
250 lexicographical comparison <span class="anchor" id="line-71"></span>
255 <p class="line891"><a class="nonexistent">IntComparator</a> : Compares the
256 values of a given Attribute of the Nodes which is decoded as an int value
257 <span class="anchor" id="line-72"></span></p>
260 <p class="line891"><a class="nonexistent">FloatComparator</a> : Compares the
261 values of a given Attribute of the Nodes which is decoded as a float value
262 <span class="anchor" id="line-73"></span></p>
265 <p class="line891"><a class="nonexistent">StringComparator</a> : Compares
266 the values of a given Attribute of the Nodes which is decoded as a string
267 value <span class="anchor" id="line-74"></span>
268 <span class="anchor" id="line-75"></span><span class="anchor" id="line-76">
272 <p class="line867"></p>
273 <h3 id="head-df11fea98849928d47fd0fca777300beeb1de441">Models : TreeHandler and
275 <span class="anchor" id="line-77"></span><span class="anchor" id="line-78">
279 <p class="line891"><a class="nonexistent">TreeHandler</a> : Abstract class
280 which 'handles' a Tree structure. <span class="anchor" id="line-79"></span>
283 <li style="list-style-type: none;">Can:
284 <span class="anchor" id="line-80"></span>Load the children of a given
285 Node <span class="anchor" id="line-81"></span>
286 <span class="anchor" id="line-82"></span></li>
290 <p class="line862">SQLiteTreeHandler : Concrete <a class="nonexistent">
291 TreeHandler</a> which manages a tree stored in a sqlite database
292 <span class="anchor" id="line-83"></span></p>
294 <li>CppSQLite3.h / CppSQLite3.cpp : C++ interface to sqlite db
295 <span class="anchor" id="line-84"></span></li>
297 <p class="line874">... <span class="anchor" id="line-85"></span>
298 <span class="anchor" id="line-86"></span></p>
301 <p class="line891"><a class="nonexistent">ImageFinder</a> : Parses (recursively)
302 a part of a filesystem to look for known images and load their attributes in
303 order to add the images to a Tree (submission via a <a class="nonexistent">
304 TreeHandler</a>::<a class="nonexistent">AddBranch</a>)
305 <span class="anchor" id="line-87"></span><span class="anchor" id="line-88">
306 </span><span class="anchor" id="line-89"></span></p>
309 <p class="line867"></p>
310 <h3 id="head-5d6e60823befe28469fe2d44ec8a889c06ea3b72">Image handling</h3>
311 <span class="anchor" id="line-90"></span><span class="anchor" id="line-91">
314 <li>creaImageIOImageReader.h/cpp : <span class="anchor" id="line-92"></span>
317 <p class="line891"><a class="nonexistent">SpecificImageReader</a>
318 <span class="anchor" id="line-93"></span></p>
321 <p class="line891"><a class="nonexistent">ImageReader</a>
322 <span class="anchor" id="line-94"></span></p>
326 <li>creaImageIOMultiThreadImageReader.h/cpp
327 <span class="anchor" id="line-95"></span></li>
328 <li>creaImageIOIndexedHeap.h/txx <span class="anchor" id="line-96"></span>
329 <span class="anchor" id="line-97"></span></li>
331 <p class="line867"></p>
332 <h3 id="head-6b69e886af29f9ef5bb7eb8b646980dd2963c2cf">Controller</h3>
333 <span class="anchor" id="line-98"></span><span class="anchor" id="line-99">
336 <li>Gimmick <span class="anchor" id="line-100"></span>
337 <span class="anchor" id="line-101"></span></li>
339 <p class="line867"></p>
340 <h3 id="head-4e100fce838267c2c7182a13a0137ed08ed1c75a">Views</h3>
341 <span class="anchor" id="line-102"></span><span class="anchor" id="line-103">
345 <p class="line891"><a class="nonexistent">GimmickView</a> : Abstract
346 <span class="anchor" id="line-104"></span></p>
349 <p class="line891"><a class="nonexistent">WxGimmickView</a>
350 <span class="anchor" id="line-105"></span></p>
353 <p class="line891"><a class="nonexistent">WxTreeVie</a>w</p>
356 <p class="line891"><a class="nonexistent">WxAttributeView</a>
357 <span class="anchor" id="line-107"></span></p>
360 <p class="line891"><a class="nonexistent">WxImageView</a>
361 <span class="anchor" id="line-108"></span></p>
365 <li>QGimmickView <span class="anchor" id="line-109"></span>