##// END OF EJS Templates
Initialisation de l'application multithread avec le spimpl....
perrinel -
r21:45edf6844d32
parent child
Show More
@@ -0,0 +1,147
1
2 ## sciqlop - CMakeLists.txt
3 SET(EXECUTABLE_NAME "sciqlop")
4 SET(SOURCES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/)
5 SET(INCLUDE_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/include)
6 SET(UI_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/src)
7 SET(RES_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/resources)
8
9 #
10 # Find Qt modules
11 #
12 SCIQLOP_FIND_QT(Core Widgets)
13
14 #
15 # Find dependent libraries
16 # ========================
17 find_package(sciqlop-gui)
18
19 message("Librairies inclues dans APP: ${SCIQLOP-GUI_LIBRARIES}")
20 SET(LIBRARIES ${SCIQLOP-GUI_LIBRARIES})
21 SET(EXTERN_SHARED_LIBRARIES)
22
23 INCLUDE_DIRECTORIES(${SCIQLOP-GUI_INCLUDE_DIR})
24
25 # Add sqpcore to the list of libraries to use
26 list(APPEND LIBRARIES ${SQPCORE_LIBRARY_NAME})
27
28 # Include core directory
29 include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../core/include")
30
31 # Add dependent shared libraries
32 list(APPEND SHARED_LIBRARIES ${SQPCORE_SHARED_LIBRARIES})
33
34 # Retrieve the location of the dynamic library to copy it to the output path
35 #get_property(sqpcoreLocation TARGET ${SQPCORE_LIBRARY_NAME} PROPERTY LOCATION)
36 list(APPEND SHARED_LIBRARIES_FROM_TARGETS ${sqpcoreLocation})
37
38 #
39 # Compile the application
40 #
41 FILE (GLOB_RECURSE APPLICATION_SOURCES
42 ${SOURCES_DIR}/*.c
43 ${SOURCES_DIR}/*.cpp
44 ${SOURCES_DIR}/*.h)
45
46 # Headers files (.h)
47 FILE (GLOB_RECURSE PROJECT_HEADERS ${INCLUDE_FOLDER}/*.h)
48
49 # Ui files
50 FILE (GLOB_RECURSE PROJECT_FORMS ${UI_FOLDER}/*.ui)
51
52 # Resources files
53 FILE (GLOB_RECURSE PROJECT_RESOURCES ${RES_FOLDER}/*.qrc)
54
55 # Retrieve resources files
56 FILE (GLOB_RECURSE APPLICATION_RESOURCES ${RES_FOLDER}/*.qrc)
57
58 QT5_ADD_RESOURCES(RCC_HDRS ${APPLICATION_RESOURCES} )
59
60 QT5_WRAP_UI(UIS_HDRS
61 ${PROJECT_FORMS}
62 )
63
64
65 ADD_EXECUTABLE(${EXECUTABLE_NAME} ${APPLICATION_SOURCES} ${RCC_HDRS} ${UIS_HDRS})
66 set_property(TARGET ${EXECUTABLE_NAME} PROPERTY CXX_STANDARD 14)
67 set_property(TARGET ${EXECUTABLE_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
68 target_link_libraries(${EXECUTABLE_NAME}
69 ${LIBRARIES})
70
71 # Link with Qt5 modules
72 qt5_use_modules(${EXECUTABLE_NAME} Core Widgets)
73
74
75 # Add the files to the list of files to be analyzed
76 LIST(APPEND CHECKSTYLE_INPUT_FILES ${APPLICATION_SOURCES})
77 SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_INPUT_FILES)
78 # Vera++ exclusion files
79 #LIST(APPEND CHECKSTYLE_EXCLUSION_FILES ${CMAKE_CURRENT_SOURCE_DIR}/path/to/exclusionFiles.tcl)
80 SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_EXCLUSION_FILES)
81
82 #
83 # Compile the tests
84 #
85 IF(BUILD_TESTS)
86 INCLUDE_DIRECTORIES(${SOURCES_DIR})
87 FILE (GLOB_RECURSE TESTS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Test*.cpp)
88 FILE (GLOB_RECURSE TESTS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/Test*.h)
89 SET( TEST_LIBRARIES ${LIBRARIES})
90
91 FOREACH( testFile ${TESTS_SOURCES} )
92 GET_FILENAME_COMPONENT( testDirectory ${testFile} DIRECTORY )
93 GET_FILENAME_COMPONENT( testName ${testFile} NAME_WE )
94
95 # Add to the list of sources files all the sources in the same
96 # directory that aren't another test
97 FILE (GLOB currentTestSources
98 ${testDirectory}/*.c
99 ${testDirectory}/*.cpp
100 ${testDirectory}/*.h)
101 LIST (REMOVE_ITEM currentTestSources ${TESTS_SOURCES})
102 LIST (REMOVE_ITEM currentTestSources ${TESTS_HEADERS})
103
104 ADD_EXECUTABLE(${testName} ${testFile} ${currentTestSources})
105 TARGET_LINK_LIBRARIES( ${testName} ${TEST_LIBRARIES} )
106 qt5_use_modules(${testName} Test)
107
108 ADD_TEST( NAME ${testName} COMMAND ${testName} )
109
110 SCIQLOP_COPY_TO_TARGET(RUNTIME ${testName})
111 ENDFOREACH( testFile )
112
113 LIST(APPEND testFilesToFormat ${TESTS_SOURCES})
114 LIST(APPEND testFilesToFormat ${TESTS_HEADERS})
115 LIST(APPEND FORMATTING_INPUT_FILES ${testFilesToFormat})
116 SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
117 ENDIF(BUILD_TESTS)
118
119 #
120 # Set the files that must be formatted by clang-format.
121 #
122 LIST (APPEND FORMATTING_INPUT_FILES ${APPLICATION_SOURCES})
123 SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
124
125 #
126 # Set the directories that doxygen must browse to generate the
127 # documentation.
128 #
129 # Source directories:
130 LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/docs")
131 LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
132 SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_INPUT_DIRS)
133 # Source directories to exclude from the documentation generation
134 #LIST (APPEND DOXYGEN_EXCLUDE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir/*")
135 SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_EXCLUDE_PATTERNS)
136
137 #
138 # Set the directories with the sources to analyze and propagate the
139 # modification to the parent scope
140 #
141 # Source directories to analyze:
142 LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
143 LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/tests")
144 SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_INPUT_DIRS)
145 # Source directories to exclude from the analysis
146 #LIST (APPEND ANALYSIS_EXCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir")
147 SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_EXCLUDE_DIRS)
@@ -0,0 +1,5
1 <RCC>
2 <qresource prefix="/">
3 <file>sciqlopLOGO.svg</file>
4 </qresource>
5 </RCC>
This diff has been collapsed as it changes many lines, (664 lines changed) Show them Hide them
@@ -0,0 +1,664
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4 <svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:xlink="http://www.w3.org/1999/xlink"
11 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13 width="284.61575"
14 height="315.51797"
15 id="svg4229"
16 version="1.1"
17 inkscape:version="0.48.5 r10040"
18 sodipodi:docname="Nouveau document 8">
19 <defs
20 id="defs4231">
21 <linearGradient
22 id="linearGradient4047">
23 <stop
24 style="stop-color:#bdbdbd;stop-opacity:1;"
25 offset="0"
26 id="stop4049" />
27 <stop
28 style="stop-color:#000000;stop-opacity:0.5106383;"
29 offset="1"
30 id="stop4051" />
31 </linearGradient>
32 <linearGradient
33 id="linearGradient3938">
34 <stop
35 style="stop-color:#0745d0;stop-opacity:1;"
36 offset="0"
37 id="stop3940" />
38 <stop
39 style="stop-color:#7888ab;stop-opacity:0.4609929;"
40 offset="1"
41 id="stop3942" />
42 </linearGradient>
43 <linearGradient
44 id="linearGradient3978">
45 <stop
46 style="stop-color:#0063c6;stop-opacity:1;"
47 offset="0"
48 id="stop3981" />
49 <stop
50 style="stop-color:#95a6b7;stop-opacity:0.53191489;"
51 offset="1"
52 id="stop3983" />
53 </linearGradient>
54 <linearGradient
55 inkscape:collect="always"
56 xlink:href="#linearGradient3898"
57 id="linearGradient3920"
58 gradientUnits="userSpaceOnUse"
59 gradientTransform="matrix(0.62671682,-0.29642431,0.475469,1.0351926,-233.44621,196.18433)"
60 x1="598.20306"
61 y1="339.17004"
62 x2="610.20306"
63 y2="339.17004" />
64 <linearGradient
65 id="linearGradient3898">
66 <stop
67 style="stop-color:#708aa4;stop-opacity:1;"
68 offset="0"
69 id="stop3900" />
70 <stop
71 style="stop-color:#9ca7bc;stop-opacity:0.81560284;"
72 offset="1"
73 id="stop3902" />
74 </linearGradient>
75 <linearGradient
76 gradientTransform="translate(-229.81291,651.73413)"
77 inkscape:collect="always"
78 xlink:href="#linearGradient4074"
79 id="linearGradient4080"
80 x1="256.52228"
81 y1="363.9075"
82 x2="975.78491"
83 y2="363.9075"
84 gradientUnits="userSpaceOnUse" />
85 <linearGradient
86 inkscape:collect="always"
87 id="linearGradient4074">
88 <stop
89 style="stop-color:#000000;stop-opacity:1;"
90 offset="0"
91 id="stop4076" />
92 <stop
93 style="stop-color:#000000;stop-opacity:0;"
94 offset="1"
95 id="stop4078" />
96 </linearGradient>
97 <linearGradient
98 inkscape:collect="always"
99 xlink:href="#linearGradient4457"
100 id="linearGradient3098"
101 gradientUnits="userSpaceOnUse"
102 x1="62.252197"
103 y1="282.51736"
104 x2="302.26953"
105 y2="282.51736" />
106 <linearGradient
107 id="linearGradient4457">
108 <stop
109 style="stop-color:#0c6c9b;stop-opacity:1;"
110 offset="0"
111 id="stop4459" />
112 <stop
113 id="stop4465"
114 offset="1"
115 style="stop-color:#656d84;stop-opacity:0.49803922;" />
116 </linearGradient>
117 <linearGradient
118 inkscape:collect="always"
119 xlink:href="#linearGradient3978"
120 id="linearGradient4496"
121 gradientUnits="userSpaceOnUse"
122 x1="764.78876"
123 y1="234.53206"
124 x2="836.61969"
125 y2="234.53206" />
126 <linearGradient
127 inkscape:collect="always"
128 xlink:href="#linearGradient3938"
129 id="linearGradient4498"
130 gradientUnits="userSpaceOnUse"
131 gradientTransform="matrix(0.60017085,0,0,0.56019332,103.0919,32.051732)"
132 x1="695.28296"
133 y1="239.59866"
134 x2="901.737"
135 y2="239.59866" />
136 <linearGradient
137 inkscape:collect="always"
138 xlink:href="#linearGradient4047"
139 id="linearGradient4500"
140 gradientUnits="userSpaceOnUse"
141 gradientTransform="matrix(0.60017085,0,0,0.56019332,101.70261,33.867182)"
142 x1="663.75446"
143 y1="226.18797"
144 x2="952.06952"
145 y2="226.18797" />
146 </defs>
147 <sodipodi:namedview
148 id="base"
149 pagecolor="#ffffff"
150 bordercolor="#666666"
151 borderopacity="1.0"
152 inkscape:pageopacity="0.0"
153 inkscape:pageshadow="2"
154 inkscape:zoom="0.71"
155 inkscape:cx="191.9085"
156 inkscape:cy="110.7835"
157 inkscape:document-units="px"
158 inkscape:current-layer="layer1"
159 showgrid="false"
160 fit-margin-top="0"
161 fit-margin-left="0"
162 fit-margin-right="0"
163 fit-margin-bottom="0"
164 inkscape:window-width="985"
165 inkscape:window-height="578"
166 inkscape:window-x="20"
167 inkscape:window-y="21"
168 inkscape:window-maximized="0" />
169 <metadata
170 id="metadata4234">
171 <rdf:RDF>
172 <cc:Work
173 rdf:about="">
174 <dc:format>image/svg+xml</dc:format>
175 <dc:type
176 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
177 <dc:title></dc:title>
178 </cc:Work>
179 </rdf:RDF>
180 </metadata>
181 <g
182 inkscape:label="Calque 1"
183 inkscape:groupmode="layer"
184 id="layer1"
185 transform="translate(-126.75347,-129.21718)">
186 <g
187 id="g3056"
188 transform="translate(109.09971,10.723333)">
189 <path
190 sodipodi:nodetypes="cccccccccccccccccccccssc"
191 inkscape:connector-curvature="0"
192 id="path3171"
193 d="m 162.74655,195.41626 c 20.46224,13.83655 26.45395,35.09754 81.15589,20.36055 18.13197,-4.85845 36.10056,-22.72216 31.07886,-41.46341 -11.36239,-19.68023 -27.12355,-13.76204 -60.34715,-8.53658 7.52931,-24.7285 6.83208,-28.92768 1.95734,-29.61824 -11.2681,-5.06193 -42.35833,-7.10916 -47.07929,4.00848 -1.59791,8.18816 3.05955,18.27113 4.87804,26.82927 -12.83032,1.52424 -39.52307,-2.63454 -48.23965,23.17073 8.28798,37.43692 40.33446,15.70914 45.20958,24.98129 20.23759,36.49335 55.43769,48.08083 68.88373,60.38457 16.52622,15.15346 15.07329,50.41353 14.63415,69.51219 C 243.93442,388.86809 220.77062,394.33329 200,399.92316 152.34644,407.83191 124.1974,388.92674 98.780488,364.55731 90.884519,349.28255 76.34261,338.2147 74.390243,316.99633 c 1.016849,-10.56793 12.773791,-20.99339 21.951218,-25.60976 14.335999,-8.27689 3.736999,-14.13876 -4.272031,-11.58911 -5.998031,4.30402 -22.250811,5.9818 -28.654796,29.8818 -1.132862,13.24133 6.447529,33.4464 15.853659,48.78049 14.707256,26.93494 39.754087,51.37773 69.512197,64.63414 12.80586,7.73433 65.84742,15.05937 102.43902,4.87805 38.71787,-19.24459 50.00001,-41.96161 50.00001,-91.46341 0,-39.22509 -16.90467,-53.62909 -45.12196,-75.60976 -22.74648,-17.71902 -68.57139,-19.72703 -57.31708,-36.58537 l 3.65107,-5.4691"
194 style="fill:url(#linearGradient3098);fill-opacity:1;stroke:#000000;stroke-width:2.0999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
195 <path
196 transform="matrix(1.3623131,0.57422751,-0.26556211,1.5344408,-25.181308,-242.18768)"
197 sodipodi:open="true"
198 sodipodi:end="6.2064134"
199 sodipodi:start="0"
200 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
201 sodipodi:ry="15.853659"
202 sodipodi:rx="12.195122"
203 sodipodi:cy="179.19145"
204 sodipodi:cx="195.12195"
205 id="path3173"
206 style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.33628261;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
207 sodipodi:type="arc" />
208 <path
209 transform="matrix(0.11293887,0.75414524,-0.0747065,0.55939022,183.90082,-99.972584)"
210 sodipodi:open="true"
211 sodipodi:end="6.2064134"
212 sodipodi:start="0"
213 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
214 sodipodi:ry="15.853659"
215 sodipodi:rx="12.195122"
216 sodipodi:cy="179.19145"
217 sodipodi:cx="195.12195"
218 id="path3173-0"
219 style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:5.35210037;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
220 sodipodi:type="arc" />
221 <path
222 sodipodi:nodetypes="cscscccsscsssccc"
223 inkscape:connector-curvature="0"
224 id="path3968"
225 d="m 292.63804,338.25175 c 0.55628,13.47612 -0.0761,25.18207 -3.61758,37.44163 -2.35516,8.15296 -9.06437,16.27943 -15.40082,24.52156 -4.51578,5.84829 -13.8964,11.99533 -20.7648,15.52076 -10.42485,5.35088 -19.56646,9.58714 -27.49944,12.0792 -6.43513,2.62036 -13.3538,2.62102 -19.93495,4.20827 l 1.91929,0 c 5.476,-0.49158 25.01921,0.81944 43.31036,-4.96433 8.56316,-2.70773 16.87952,-8.46547 26.11179,-17.16237 5.07163,-4.77753 11.2534,-13.01072 13.44438,-16.63943 1.53054,-2.94379 3.40564,-7.54702 4.52784,-11.38333 1.97103,-6.73804 3.60734,-14.74867 4.89879,-24.22313 0.7015,-5.14637 1.11591,-9.90301 1.0546,-15.62378 -0.0973,-9.08102 -0.79348,-22.07325 -3.75498,-30.76891 -5.94492,-22.34295 -15.9628,-26.49084 -25.76688,-37.13508 10.83965,20.94361 20.64916,42.09245 21.4724,64.12894 z"
226 style="fill:#eff0a7;fill-opacity:1;stroke:none" />
227 <path
228 sodipodi:nodetypes="cccc"
229 inkscape:connector-curvature="0"
230 id="path3970"
231 d="m 255.87944,210.93679 c 2.11201,4.59017 1.50684,6.28256 -2.27273,10.51137 7.84807,-1.091 8.8036,-9.3893 8.80683,-15.34091 z"
232 style="fill:#d6d6a9;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
233 <path
234 sodipodi:nodetypes="cscsccccccccc"
235 inkscape:connector-curvature="0"
236 id="path3972"
237 d="m 229.32735,214.61782 c 7.90145,9.74494 9.20718,18.08729 7.39006,19.88916 -2.0037,1.98692 -3.1338,2.5799 -3.63485,3.62733 0.13945,0.89181 1.5457,1.91481 3.5597,2.27363 7.0815,1.26165 13.95756,2.5836 14.03587,5.48036 l -4.22596,6.6464 0,0 8.02175,-4.75181 7.39033,4.27843 c -3.40899,-3.22169 -2.75333,-6.3782 -10.24681,-9.66539 -4.47359,-1.44777 -10.18759,-0.95764 -13.54707,-4.54397 6.47766,-8.67261 2.4666,-10.84161 -2.41227,-19.52305 z"
238 style="fill:#ff7e7d;fill-opacity:1;stroke:#000000;stroke-width:0.77647746px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
239 <path
240 transform="matrix(0.29416696,-0.08796001,0.11275105,0.22948727,189.50526,302.50374)"
241 sodipodi:open="true"
242 sodipodi:end="6.2064134"
243 sodipodi:start="0"
244 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
245 sodipodi:ry="15.853659"
246 sodipodi:rx="12.195122"
247 sodipodi:cy="179.19145"
248 sodipodi:cx="195.12195"
249 id="path3173-0-2"
250 style="fill:#981b92;fill-opacity:1;stroke:none"
251 sodipodi:type="arc" />
252 <path
253 transform="matrix(0.12698777,0.05326643,-0.0567639,0.12860129,256.19097,284.76495)"
254 sodipodi:open="true"
255 sodipodi:end="6.2064134"
256 sodipodi:start="0"
257 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
258 sodipodi:ry="15.853659"
259 sodipodi:rx="12.195122"
260 sodipodi:cy="179.19145"
261 sodipodi:cx="195.12195"
262 id="path3173-0-2-2"
263 style="fill:#981b92;fill-opacity:1;stroke:none"
264 sodipodi:type="arc" />
265 <path
266 transform="matrix(0.12698777,0.05326643,-0.0567639,0.12860129,259.10041,292.41586)"
267 sodipodi:open="true"
268 sodipodi:end="6.2064134"
269 sodipodi:start="0"
270 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
271 sodipodi:ry="15.853659"
272 sodipodi:rx="12.195122"
273 sodipodi:cy="179.19145"
274 sodipodi:cx="195.12195"
275 id="path3173-0-2-2-3"
276 style="fill:#981b92;fill-opacity:1;stroke:none"
277 sodipodi:type="arc" />
278 <path
279 transform="matrix(0.12698777,0.05326643,-0.0567639,0.12860129,257.59178,301.89862)"
280 sodipodi:open="true"
281 sodipodi:end="6.2064134"
282 sodipodi:start="0"
283 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
284 sodipodi:ry="15.853659"
285 sodipodi:rx="12.195122"
286 sodipodi:cy="179.19145"
287 sodipodi:cx="195.12195"
288 id="path3173-0-2-2-3-6"
289 style="fill:#981b92;fill-opacity:1;stroke:none"
290 sodipodi:type="arc" />
291 <path
292 transform="matrix(0.29416696,-0.08796001,0.11275105,0.22948727,169.56018,372.70851)"
293 sodipodi:open="true"
294 sodipodi:end="6.2064134"
295 sodipodi:start="0"
296 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
297 sodipodi:ry="15.853659"
298 sodipodi:rx="12.195122"
299 sodipodi:cy="179.19145"
300 sodipodi:cx="195.12195"
301 id="path3173-0-2-8"
302 style="fill:#981b92;fill-opacity:1;stroke:none"
303 sodipodi:type="arc" />
304 <path
305 transform="matrix(0.12698777,0.05326643,-0.0567639,0.12860129,224.17692,360.35765)"
306 sodipodi:open="true"
307 sodipodi:end="6.2064134"
308 sodipodi:start="0"
309 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
310 sodipodi:ry="15.853659"
311 sodipodi:rx="12.195122"
312 sodipodi:cy="179.19145"
313 sodipodi:cx="195.12195"
314 id="path3173-0-2-2-5"
315 style="fill:#981b92;fill-opacity:1;stroke:none"
316 sodipodi:type="arc" />
317 <path
318 transform="matrix(0.12698777,0.05326643,-0.0567639,0.12860129,239.58636,356.80166)"
319 sodipodi:open="true"
320 sodipodi:end="6.2064134"
321 sodipodi:start="0"
322 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
323 sodipodi:ry="15.853659"
324 sodipodi:rx="12.195122"
325 sodipodi:cy="179.19145"
326 sodipodi:cx="195.12195"
327 id="path3173-0-2-2-3-2"
328 style="fill:#981b92;fill-opacity:1;stroke:none"
329 sodipodi:type="arc" />
330 <path
331 transform="matrix(0.12698777,0.05326643,-0.0567639,0.12860129,238.07773,366.28442)"
332 sodipodi:open="true"
333 sodipodi:end="6.2064134"
334 sodipodi:start="0"
335 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
336 sodipodi:ry="15.853659"
337 sodipodi:rx="12.195122"
338 sodipodi:cy="179.19145"
339 sodipodi:cx="195.12195"
340 id="path3173-0-2-2-3-6-4"
341 style="fill:#981b92;fill-opacity:1;stroke:none"
342 sodipodi:type="arc" />
343 <path
344 transform="matrix(0.07991127,-0.11214898,0.11295311,0.08367812,207.70181,410.11257)"
345 sodipodi:open="true"
346 sodipodi:end="6.2064134"
347 sodipodi:start="0"
348 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
349 sodipodi:ry="15.853659"
350 sodipodi:rx="12.195122"
351 sodipodi:cy="179.19145"
352 sodipodi:cx="195.12195"
353 id="path3173-0-2-2-3-2-5"
354 style="fill:#981b92;fill-opacity:1;stroke:none"
355 sodipodi:type="arc" />
356 <path
357 transform="matrix(0.11369517,-0.18191773,0.16070603,0.13573493,195.57015,398.98838)"
358 sodipodi:open="true"
359 sodipodi:end="6.2064134"
360 sodipodi:start="0"
361 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
362 sodipodi:ry="15.853659"
363 sodipodi:rx="12.195122"
364 sodipodi:cy="179.19145"
365 sodipodi:cx="195.12195"
366 id="path3173-0-2-2-3-2-5-0"
367 style="fill:#981b92;fill-opacity:1;stroke:none"
368 sodipodi:type="arc" />
369 <path
370 transform="matrix(0.11369517,-0.18191773,0.16070603,0.13573493,148.44577,423.68104)"
371 sodipodi:open="true"
372 sodipodi:end="6.2064134"
373 sodipodi:start="0"
374 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
375 sodipodi:ry="15.853659"
376 sodipodi:rx="12.195122"
377 sodipodi:cy="179.19145"
378 sodipodi:cx="195.12195"
379 id="path3173-0-2-2-3-2-5-0-5"
380 style="fill:#981b92;fill-opacity:1;stroke:none"
381 sodipodi:type="arc" />
382 <path
383 transform="matrix(0.12698777,0.05326643,-0.0567639,0.12860129,179.64983,376.79011)"
384 sodipodi:open="true"
385 sodipodi:end="6.2064134"
386 sodipodi:start="0"
387 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
388 sodipodi:ry="15.853659"
389 sodipodi:rx="12.195122"
390 sodipodi:cy="179.19145"
391 sodipodi:cx="195.12195"
392 id="path3173-0-2-2-3-2-4"
393 style="fill:#981b92;fill-opacity:1;stroke:none"
394 sodipodi:type="arc" />
395 <path
396 transform="matrix(0.12698777,0.05326643,-0.0567639,0.12860129,183.31275,385.84191)"
397 sodipodi:open="true"
398 sodipodi:end="6.2064134"
399 sodipodi:start="0"
400 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
401 sodipodi:ry="15.853659"
402 sodipodi:rx="12.195122"
403 sodipodi:cy="179.19145"
404 sodipodi:cx="195.12195"
405 id="path3173-0-2-2-3-6-4-5"
406 style="fill:#981b92;fill-opacity:1;stroke:none"
407 sodipodi:type="arc" />
408 <path
409 transform="matrix(0.17764111,0.12026757,-0.1415174,0.15563812,154.66179,360.27145)"
410 sodipodi:open="true"
411 sodipodi:end="6.2064134"
412 sodipodi:start="0"
413 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
414 sodipodi:ry="15.853659"
415 sodipodi:rx="12.195122"
416 sodipodi:cy="179.19145"
417 sodipodi:cx="195.12195"
418 id="path3173-0-2-2-3-2-5-0-5-7"
419 style="fill:#981b92;fill-opacity:1;stroke:none"
420 sodipodi:type="arc" />
421 <path
422 transform="matrix(0.12698777,0.05326643,-0.0567639,0.12860129,147.85018,384.9618)"
423 sodipodi:open="true"
424 sodipodi:end="6.2064134"
425 sodipodi:start="0"
426 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
427 sodipodi:ry="15.853659"
428 sodipodi:rx="12.195122"
429 sodipodi:cy="179.19145"
430 sodipodi:cx="195.12195"
431 id="path3173-0-2-2-3-6-4-5-3"
432 style="fill:#981b92;fill-opacity:1;stroke:none"
433 sodipodi:type="arc" />
434 <path
435 inkscape:transform-center-y="148.91459"
436 inkscape:transform-center-x="-32.932564"
437 transform="matrix(0.29416696,-0.08796001,0.11275105,0.22948727,143.2296,230.92459)"
438 sodipodi:open="true"
439 sodipodi:end="6.2064134"
440 sodipodi:start="0"
441 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
442 sodipodi:ry="15.853659"
443 sodipodi:rx="12.195122"
444 sodipodi:cy="179.19145"
445 sodipodi:cx="195.12195"
446 id="path3173-0-2-8-5"
447 style="fill:#981b92;fill-opacity:1;stroke:none"
448 sodipodi:type="arc" />
449 <path
450 inkscape:transform-center-y="142.48609"
451 inkscape:transform-center-x="-39.962777"
452 transform="matrix(0.12698777,0.05326643,-0.0567639,0.12860129,212.39386,218.46544)"
453 sodipodi:open="true"
454 sodipodi:end="6.2064134"
455 sodipodi:start="0"
456 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
457 sodipodi:ry="15.853659"
458 sodipodi:rx="12.195122"
459 sodipodi:cy="179.19145"
460 sodipodi:cx="195.12195"
461 id="path3173-0-2-2-3-2-56"
462 style="fill:#981b92;fill-opacity:1;stroke:none"
463 sodipodi:type="arc" />
464 <path
465 inkscape:transform-center-y="142.48609"
466 inkscape:transform-center-x="-39.962777"
467 transform="matrix(0.12698777,0.05326643,-0.0567639,0.12860129,212.94152,224.66127)"
468 sodipodi:open="true"
469 sodipodi:end="6.2064134"
470 sodipodi:start="0"
471 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
472 sodipodi:ry="15.853659"
473 sodipodi:rx="12.195122"
474 sodipodi:cy="179.19145"
475 sodipodi:cx="195.12195"
476 id="path3173-0-2-2-3-2-56-6"
477 style="fill:#981b92;fill-opacity:1;stroke:none"
478 sodipodi:type="arc" />
479 <path
480 sodipodi:nodetypes="cc"
481 inkscape:connector-curvature="0"
482 id="path4163"
483 d="m 280.37179,293.46456 c 2.84837,0.33864 5.46579,-0.93678 7.15942,-4.15709"
484 style="fill:none;stroke:#805f25;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
485 <path
486 sodipodi:nodetypes="cc"
487 inkscape:connector-curvature="0"
488 id="path4163-6"
489 d="m 283.9515,301.05941 c 2.84837,0.33864 6.38959,-1.16773 8.08322,-4.38804"
490 style="fill:none;stroke:#805f25;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
491 <path
492 sodipodi:nodetypes="cc"
493 inkscape:connector-curvature="0"
494 id="path4163-6-8"
495 d="m 286.95383,309.03024 c 2.53495,0.67298 5.68634,-0.41753 8.08322,-4.38804"
496 style="fill:none;stroke:#805f25;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
497 <path
498 sodipodi:nodetypes="cc"
499 inkscape:connector-curvature="0"
500 id="path4163-6-8-4"
501 d="m 289.49427,317.04407 c 2.53495,0.67298 5.68634,-0.41753 8.08322,-4.38804"
502 style="fill:none;stroke:#805f25;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
503 <path
504 sodipodi:nodetypes="cc"
505 inkscape:connector-curvature="0"
506 id="path4163-6-8-4-0"
507 d="m 291.1109,324.66537 c 2.53495,0.67298 5.68634,-0.41753 8.08322,-4.38804"
508 style="fill:none;stroke:#805f25;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
509 <path
510 sodipodi:nodetypes="cc"
511 inkscape:connector-curvature="0"
512 id="path4163-6-8-4-0-7"
513 d="m 292.0347,334.59617 c 2.53495,0.67298 5.68634,-0.41753 8.08322,-4.38804"
514 style="fill:none;stroke:#805f25;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
515 <path
516 sodipodi:nodetypes="cc"
517 inkscape:connector-curvature="0"
518 id="path4163-6-8-4-0-7-8"
519 d="m 292.4966,344.98887 c 2.53495,0.67298 6.37919,-0.41753 8.77607,-4.38804"
520 style="fill:none;stroke:#805f25;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
521 <path
522 sodipodi:nodetypes="cc"
523 inkscape:connector-curvature="0"
524 id="path4163-6-8-4-0-7-8-3"
525 d="m 291.91923,357.69105 c 2.53495,0.67298 6.37919,-0.41753 8.77607,-4.38804"
526 style="fill:none;stroke:#805f25;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
527 <path
528 sodipodi:nodetypes="cc"
529 inkscape:connector-curvature="0"
530 id="path4163-6-8-4-0-7-8-3-1"
531 d="m 289.14784,373.85746 c 2.53495,0.67298 6.37919,-0.41753 8.77607,-4.38804"
532 style="fill:none;stroke:#805f25;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
533 <path
534 sodipodi:nodetypes="cc"
535 inkscape:connector-curvature="0"
536 id="path4163-6-8-4-0-7-8-3-1-0"
537 d="m 278.06229,393.48811 c 2.53495,0.67298 9.84343,-0.41753 14.54979,-5.08089"
538 style="fill:none;stroke:#805f25;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
539 <path
540 sodipodi:nodetypes="cc"
541 inkscape:connector-curvature="0"
542 id="path4163-6-8-4-0-7-8-3-1-0-0"
543 d="m 263.1661,409.0791 c 2.53495,0.67298 13.30766,1.43006 18.01402,-3.2333"
544 style="fill:none;stroke:#805f25;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
545 <path
546 sodipodi:nodetypes="cc"
547 inkscape:connector-curvature="0"
548 id="path4163-6-8-4-0-7-8-3-1-0-0-3"
549 d="m 240.1867,421.62064 c 2.53495,0.67298 16.54094,2.81575 22.86394,-0.46191"
550 style="fill:none;stroke:#805f25;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
551 <path
552 sodipodi:nodetypes="cccc"
553 inkscape:connector-curvature="0"
554 id="path3970-1"
555 d="m 217.1307,221.26922 c -0.0806,5.0521 -1.35806,6.31639 -6.59463,8.49499 7.54814,2.40999 11.99811,-4.65914 14.57465,-10.02413 z"
556 style="fill:#d6d6a9;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
557 <path
558 sodipodi:nodetypes="cccccc"
559 inkscape:connector-curvature="0"
560 id="path4409"
561 d="m 206.94813,218.90583 c -7.34133,-2.49985 -10.63839,-5.40956 -11.54553,-12.19905 0.65544,-10.33391 15.97326,-16.1699 35.72578,-16.33802 17.52544,-11.86472 34.73964,-8.39346 37.25067,-3.48543 3.03102,9.73019 0.31267,10.3111 -4.13897,15.90233 -16.25921,15.30677 -36.44124,16.88366 -57.29195,16.12017 z"
562 style="fill:#afa84f;fill-opacity:1;stroke:#805f25;stroke-opacity:1" />
563 <path
564 transform="matrix(0.18429483,0.23986638,-0.12190684,0.17792184,232.04402,123.66471)"
565 sodipodi:open="true"
566 sodipodi:end="6.2064134"
567 sodipodi:start="0"
568 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
569 sodipodi:ry="15.853659"
570 sodipodi:rx="12.195122"
571 sodipodi:cy="179.19145"
572 sodipodi:cx="195.12195"
573 id="path3173-0-9"
574 style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:5.35210037;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
575 sodipodi:type="arc" />
576 <path
577 transform="matrix(0.18429483,0.23986638,-0.12190684,0.17792184,209.6065,131.07128)"
578 sodipodi:open="true"
579 sodipodi:end="6.2064134"
580 sodipodi:start="0"
581 d="m 207.31707,179.19145 c 0,8.75574 -5.45994,15.85366 -12.19512,15.85366 -6.73518,0 -12.19512,-7.09792 -12.19512,-15.85366 0,-8.75573 5.45994,-15.85366 12.19512,-15.85366 6.37239,0 11.67046,6.37803 12.1592,14.63774"
582 sodipodi:ry="15.853659"
583 sodipodi:rx="12.195122"
584 sodipodi:cy="179.19145"
585 sodipodi:cx="195.12195"
586 id="path3173-0-9-2"
587 style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:5.35210037;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
588 sodipodi:type="arc" />
589 </g>
590 <path
591 sodipodi:nodetypes="ccccccc"
592 inkscape:connector-curvature="0"
593 id="path3111"
594 d="m 226.50388,403.12189 1.06383,-117.55319 c 1.32014,-10.5593 12.40035,-11.35853 23.40426,-12.23405 l 99.46808,13.29787 2.12766,87.76596 c -2.90019,8.93703 -9.38431,11.90085 -16.48936,13.82979 z"
595 style="fill:#8be860;fill-opacity:1;stroke:none" />
596 <path
597 sodipodi:nodetypes="cccccsccss"
598 inkscape:connector-curvature="0"
599 id="path3113"
600 d="m 262.66985,334.75483 c 1.5436,23.41563 6.06147,40.70799 29.8136,41.71675 22.95633,-1.58809 25.23359,-24.81272 27.08482,-35.94643 -0.0829,-32.34576 -10.79448,-43.09068 -31.11717,-42.32255 -15.71741,-0.26634 -25.38887,23.3986 -25.78125,36.55223 z m 28.86717,-25.26088 c 9.04483,-0.67665 12.31628,14.75844 11.625,28.3125 -0.68473,13.42568 -2.2405,26.75249 -13.375,26.0625 -10.57703,-1.12669 -15.35456,-52.91454 0.875,-54.25 0.30389,-0.0559 0.58323,-0.10317 0.875,-0.125 z"
601 style="fill:#ffffff;fill-opacity:1;stroke:none" />
602 <path
603 style="fill:url(#linearGradient3920);fill-opacity:1;fill-rule:nonzero;stroke:none"
604 d="m 296.23093,357.99298 c -3.71191,1.75566 -6.08673,4.49894 -5.32365,6.16034 l 0.17723,0.38544 c 0.76302,1.66138 4.36048,1.5799 8.07239,-0.17575 l 0.82236,-0.38948 6.23951,13.58465 c 0.70246,1.52938 2.94184,1.9604 5.02504,0.97508 2.08323,-0.98529 3.198,-3.00279 2.49551,-4.53221 l -6.23948,-13.58463 1.17508,-0.55581 c 3.71191,-1.75566 6.08673,-4.49894 5.32367,-6.16031 l -0.17723,-0.38545 c -0.76304,-1.66141 -4.3605,-1.57992 -8.0724,0.17574 l -9.51827,4.50195 z"
605 id="rect3894"
606 inkscape:connector-curvature="0" />
607 <g
608 id="g4486"
609 transform="matrix(0.77227446,0,0,0.7939706,-259.37674,106.23782)">
610 <path
611 sodipodi:open="true"
612 sodipodi:end="6.2064134"
613 sodipodi:start="0"
614 transform="matrix(0.60017085,0,0,0.56019332,103.39323,35.445182)"
615 d="m 836.61972,234.53206 c 0,19.05771 -16.07992,34.50704 -35.9155,34.50704 -19.83558,0 -35.91549,-15.44933 -35.91549,-34.50704 0,-19.05771 16.07991,-34.50704 35.91549,-34.50704 18.76715,0 34.37033,13.8824 35.80971,31.86047"
616 sodipodi:ry="34.507042"
617 sodipodi:rx="35.915493"
618 sodipodi:cy="234.53206"
619 sodipodi:cx="800.70422"
620 id="path3934"
621 style="fill:url(#linearGradient4496);fill-opacity:1;fill-rule:nonzero;stroke:none"
622 sodipodi:type="arc" />
623 <path
624 sodipodi:nodetypes="cccc"
625 inkscape:connector-curvature="0"
626 id="path3936"
627 d="m 559.60682,170.09774 c -10.81819,6.91658 -38.61836,24.22127 -34.93952,30.38397 20.68614,10.55178 126.70497,-51.93621 115.70586,-67.63888 -4.01467,-2.16973 -30.42127,11.68803 -39.44001,15.42212"
628 style="fill:none;stroke:url(#linearGradient4498);stroke-width:5.91434383;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
629 <path
630 sodipodi:nodetypes="cccc"
631 inkscape:connector-curvature="0"
632 id="path3946"
633 d="m 567.45079,151.48369 c -12.14355,-8.48992 -26.41764,-16.84268 -34.21689,-18.97692 -0.46419,13.46911 80.33523,70.6829 98.47874,70.22142 0.1058,-3.16928 -20.77334,-16.30919 -29.16323,-23.27564"
634 style="fill:none;stroke:#000000;stroke-width:1.15967524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.15967529, 1.15967529;stroke-dashoffset:0" />
635 <g
636 transform="matrix(1.2622979,0,0,2.076907,-358.29736,-413.56399)"
637 id="g3973">
638 <path
639 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
640 d="m 773.57497,296.07152 -12.5,-6.46552"
641 id="path3950"
642 inkscape:connector-curvature="0" />
643 <g
644 id="g3970">
645 <rect
646 ry="1.3714644"
647 rx="0"
648 y="291.36218"
649 x="764.19183"
650 height="3.0172222"
651 width="6.0344644"
652 id="rect3948-5"
653 style="fill:#d25f66;fill-opacity:1;fill-rule:nonzero;stroke:none" />
654 </g>
655 </g>
656 <path
657 style="fill:none;stroke:url(#linearGradient4500);stroke-width:1.15967524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.15967529, 1.15967529;stroke-dashoffset:0"
658 d="m 556.22224,79.451022 c -30.98443,48.276818 -74.46974,129.053438 -46.8426,151.662088 28.78868,24.99386 102.22422,-0.0643 163.21719,-15.71274"
659 id="path4045"
660 inkscape:connector-curvature="0"
661 sodipodi:nodetypes="ccc" />
662 </g>
663 </g>
664 </svg>
@@ -0,0 +1,39
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the QLop Software
3 -- Copyright (C) 2015, Plasma Physics Laboratory - CNRS
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 2 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------*/
19 /*-- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@member.fsf.org
21 ----------------------------------------------------------------------------*/
22 #include "mainwindow.h"
23 #include <QProcessEnvironment>
24 #include <QThread>
25 #include <SqpApplication.h>
26 #include <omp.h>
27 #include <qglobal.h>
28
29 int main(int argc, char *argv[])
30 {
31 SqpApplication a(argc, argv);
32 SqpApplication::setOrganizationName("LPP");
33 SqpApplication::setOrganizationDomain("lpp.fr");
34 SqpApplication::setApplicationName("SciQLop");
35 MainWindow w;
36 w.show();
37
38 return a.exec();
39 }
@@ -0,0 +1,104
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the QLop Software
3 -- Copyright (C) 2015, Plasma Physics Laboratory - CNRS
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 2 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------*/
19 /*-- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@member.fsf.org
21 ----------------------------------------------------------------------------*/
22 #include "mainwindow.h"
23 #include "ui_mainwindow.h"
24 #include <QAction>
25 #include <QDate>
26 #include <QDateTime>
27 #include <QDir>
28 #include <QFileDialog>
29 #include <omp.h>
30 //#include <network/filedownloader.h>
31 //#include <qlopdatabase.h>
32 //#include <qlopsettings.h>
33 //#include <qlopgui.h>
34 //#include <spacedata.h>
35 //#include "qlopcore.h"
36 //#include "qlopcodecmanager.h"
37 //#include "cdfcodec.h"
38 //#include "amdatxtcodec.h"
39 //#include <qlopplotmanager.h>
40
41
42 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
43 {
44 ui->setupUi(this);
45 /* QLopGUI::registerMenuBar(menuBar());
46 this->setWindowIcon(QIcon(":/sciqlopLOGO.svg"));
47 this->m_progressWidget = new QWidget();
48 this->m_progressLayout = new QVBoxLayout(this->m_progressWidget);
49 this->m_progressWidget->setLayout(this->m_progressLayout);
50 this->m_progressWidget->setWindowModality(Qt::WindowModal);
51 m_progressThreadIds = (int*) malloc(OMP_THREADS*sizeof(int));
52 for(int i=0;i<OMP_THREADS;i++)
53 {
54 this->m_progress.append(new QProgressBar(this->m_progressWidget));
55 this->m_progress.last()->setMinimum(0);
56 this->m_progress.last()->setMaximum(100);
57 this->m_progressLayout->addWidget(this->m_progress.last());
58 this->m_progressWidget->hide();
59 this->m_progressThreadIds[i] = -1;
60 }
61 this->m_progressWidget->setWindowTitle("Loading File");
62 const QList<QLopService*>ServicesToLoad=QList<QLopService*>()
63 << QLopCore::self()
64 << QLopPlotManager::self()
65 << QLopCodecManager::self()
66 << FileDownloader::self()
67 << QLopDataBase::self()
68 << SpaceData::self();
69
70 CDFCodec::registerToManager();
71 AMDATXTCodec::registerToManager();
72
73
74 for(int i=0;i<ServicesToLoad.count();i++)
75 {
76 qDebug()<<ServicesToLoad.at(i)->serviceName();
77 ServicesToLoad.at(i)->initialize(); //must be called before getGUI
78 QDockWidget* wdgt=ServicesToLoad.at(i)->getGUI();
79 if(wdgt)
80 {
81 wdgt->setAllowedAreas(Qt::AllDockWidgetAreas);
82 this->addDockWidget(Qt::TopDockWidgetArea,wdgt);
83 }
84 PythonQt::self()->getMainModule().addObject(ServicesToLoad.at(i)->serviceName(),(QObject*)ServicesToLoad.at(i));
85 }*/
86 }
87
88 MainWindow::~MainWindow()
89 {
90 delete ui;
91 }
92
93
94 void MainWindow::changeEvent(QEvent *e)
95 {
96 QMainWindow::changeEvent(e);
97 switch (e->type()) {
98 case QEvent::LanguageChange:
99 ui->retranslateUi(this);
100 break;
101 default:
102 break;
103 }
104 }
@@ -0,0 +1,60
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the QLop Software
3 -- Copyright (C) 2015, Plasma Physics Laboratory - CNRS
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 2 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------*/
19 /*-- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@member.fsf.org
21 ----------------------------------------------------------------------------*/
22 #ifndef MAINWINDOW_H
23 #define MAINWINDOW_H
24
25 #include <QListWidgetItem>
26 #include <QMainWindow>
27 #include <QProgressBar>
28 #include <QProgressDialog>
29 #include <QThread>
30 #include <QVBoxLayout>
31 #include <QWidget>
32 //#include "../Core/qlopservice.h"
33 //#include "../Core/qlopgui.h"
34
35
36 namespace Ui {
37 class MainWindow;
38 }
39
40 class MainWindow : public QMainWindow {
41 Q_OBJECT
42
43 public:
44 explicit MainWindow(QWidget *parent = 0);
45 ~MainWindow();
46 public slots:
47
48 protected:
49 void changeEvent(QEvent *e);
50
51 private:
52 Ui::MainWindow *ui;
53 QList<QProgressBar *> m_progress;
54 int *m_progressThreadIds;
55 QWidget *m_progressWidget;
56 QVBoxLayout *m_progressLayout;
57 // QList<QLopService*> m_qlopServices;
58 };
59
60 #endif // MAINWINDOW_H
@@ -0,0 +1,56
1 <?xml version="1.0" encoding="UTF-8"?>
2 <ui version="4.0">
3 <class>MainWindow</class>
4 <widget class="QMainWindow" name="MainWindow">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>800</width>
10 <height>600</height>
11 </rect>
12 </property>
13 <property name="windowTitle">
14 <string>QLop</string>
15 </property>
16 <property name="dockNestingEnabled">
17 <bool>true</bool>
18 </property>
19 <widget class="QWidget" name="centralWidget">
20 <property name="enabled">
21 <bool>true</bool>
22 </property>
23 <property name="sizePolicy">
24 <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
25 <horstretch>0</horstretch>
26 <verstretch>0</verstretch>
27 </sizepolicy>
28 </property>
29 <property name="maximumSize">
30 <size>
31 <width>16777215</width>
32 <height>16777215</height>
33 </size>
34 </property>
35 </widget>
36 <widget class="QMenuBar" name="menuBar">
37 <property name="geometry">
38 <rect>
39 <x>0</x>
40 <y>0</y>
41 <width>800</width>
42 <height>45</height>
43 </rect>
44 </property>
45 </widget>
46 <widget class="QStatusBar" name="statusBar"/>
47 <action name="actionIndex_Viewer">
48 <property name="text">
49 <string>Index Viewer</string>
50 </property>
51 </action>
52 </widget>
53 <layoutdefault spacing="6" margin="11"/>
54 <resources/>
55 <connections/>
56 </ui>
@@ -0,0 +1,128
1
2 ## core - CMakeLists.txt
3 STRING(TOLOWER ${CMAKE_PROJECT_NAME} LIBRARY_PREFFIX)
4 SET(SQPCORE_LIBRARY_NAME "${LIBRARY_PREFFIX}_core${DEBUG_SUFFIX}")
5 SET(SOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/")
6 SET(INCLUDES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include/")
7
8 # Include core directory
9 include_directories("${INCLUDES_DIR}")
10
11 # Set a variable to display a warning in the version files.
12 SET(SCIQLOP_CMAKE_GENERATION_WARNING "DON'T CHANGE THIS FILE. AUTOGENERATED BY CMAKE.")
13 # Generate the version file from the cmake version variables. The version
14 # variables are defined in the cmake/sciqlop_version.cmake file.
15 CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/resources/Version.h.in"
16 "${INCLUDES_DIR}/Version.h")
17 CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/resources/Version.cpp.in"
18 "${SOURCES_DIR}/Version.cpp")
19
20 #
21 # Find Qt modules
22 #
23 SCIQLOP_FIND_QT(Core)
24
25 #
26 # Compile the library library
27 #
28 FILE (GLOB_RECURSE MODULE_SOURCES
29 ${INCLUDES_DIR}/*.h
30 ${SOURCES_DIR}/*.c
31 ${SOURCES_DIR}/*.cpp
32 ${SOURCES_DIR}/*.h)
33
34 ADD_LIBRARY(${SQPCORE_LIBRARY_NAME} ${MODULE_SOURCES})
35 set_property(TARGET ${SQPCORE_LIBRARY_NAME} PROPERTY CXX_STANDARD 14)
36 set_property(TARGET ${SQPCORE_LIBRARY_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
37 TARGET_LINK_LIBRARIES(${SQPCORE_LIBRARY_NAME})
38 qt5_use_modules(${SQPCORE_LIBRARY_NAME} Core)
39
40 # From cmake documentation: http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html
41 # Entries in the COMPILE_DEFINITIONS are prefixed with -D or /D and added to the compile line in an unspecified order.
42 # The DEFINE_SYMBOL target property is also added as a compile definition as a special convenience case for SHARED and MODULE library targets
43 IF(BUILD_SHARED_LIBS)
44 SET_TARGET_PROPERTIES(${SQPCORE_LIBRARY_NAME} PROPERTIES COMPILE_DEFINITIONS "SCIQLOP_EXPORT")
45 ELSE()
46 TARGET_COMPILE_DEFINITIONS(${SQPCORE_LIBRARY_NAME} PUBLIC "SCIQLOP_STATIC_LIBRARIES")
47 ENDIF()
48
49 # Set the variable to parent scope so that the other projects can copy the
50 # dependent shared libraries
51 SCIQLOP_SET_TO_PARENT_SCOPE(SQPCORE_LIBRARY_NAME)
52
53 # Copy extern shared libraries to the lib folder
54 SCIQLOP_COPY_TO_TARGET(LIBRARY ${SQPCORE_LIBRARY_NAME} ${EXTERN_SHARED_LIBRARIES})
55
56 # Add the files to the list of files to be analyzed
57 LIST(APPEND CHECKSTYLE_INPUT_FILES ${MODULE_SOURCES})
58 SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_INPUT_FILES)
59 # Vera++ exclusion files
60 #LIST(APPEND CHECKSTYLE_EXCLUSION_FILES ${CMAKE_CURRENT_SOURCE_DIR}/path/to/exclusionFiles.tcl)
61 SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_EXCLUSION_FILES)
62
63 #
64 # Compile the tests
65 #
66 IF(BUILD_TESTS)
67 INCLUDE_DIRECTORIES(${SOURCES_DIR})
68 FILE (GLOB_RECURSE TESTS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Test*.cpp)
69 FILE (GLOB_RECURSE TESTS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/Test*.h)
70 SET( TEST_LIBRARIES ${SQPCORE_LIBRARY_NAME})
71
72 FOREACH( testFile ${TESTS_SOURCES} )
73 GET_FILENAME_COMPONENT( testDirectory ${testFile} DIRECTORY )
74 GET_FILENAME_COMPONENT( testName ${testFile} NAME_WE )
75
76 # Add to the list of sources files all the sources in the same
77 # directory that aren't another test
78 FILE (GLOB currentTestSources
79 ${testDirectory}/*.c
80 ${testDirectory}/*.cpp
81 ${testDirectory}/*.h)
82 LIST (REMOVE_ITEM currentTestSources ${TESTS_SOURCES})
83 LIST (REMOVE_ITEM currentTestSources ${TESTS_HEADERS})
84
85 ADD_EXECUTABLE(${testName} ${testFile} ${currentTestSources})
86 TARGET_LINK_LIBRARIES( ${testName} ${TEST_LIBRARIES} )
87 qt5_use_modules(${testName} Test)
88
89 ADD_TEST( NAME ${testName} COMMAND ${testName} )
90
91 SCIQLOP_COPY_TO_TARGET(RUNTIME ${testName} ${EXTERN_SHARED_LIBRARIES})
92 ENDFOREACH( testFile )
93
94 LIST(APPEND testFilesToFormat ${TESTS_SOURCES})
95 LIST(APPEND testFilesToFormat ${TESTS_HEADERS})
96 LIST(APPEND FORMATTING_INPUT_FILES ${testFilesToFormat})
97 SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
98 ENDIF(BUILD_TESTS)
99
100 #
101 # Set the files that must be formatted by clang-format.
102 #
103 LIST (APPEND FORMATTING_INPUT_FILES ${MODULE_SOURCES})
104 SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
105
106 #
107 # Set the directories that doxygen must browse to generate the
108 # documentation.
109 #
110 # Source directories:
111 LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/docs")
112 LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
113 SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_INPUT_DIRS)
114 # Source directories to exclude from the documentation generation
115 #LIST (APPEND DOXYGEN_EXCLUDE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir/*")
116 SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_EXCLUDE_PATTERNS)
117
118 #
119 # Set the directories with the sources to analyze and propagate the
120 # modification to the parent scope
121 #
122 # Source directories to analyze:
123 LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
124 LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/tests")
125 SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_INPUT_DIRS)
126 # Source directories to exclude from the analysis
127 #LIST (APPEND ANALYSIS_EXCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir")
128 SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_EXCLUDE_DIRS)
@@ -0,0 +1,21
1 # - Try to find sciqlop-core
2 # Once done this will define
3 # SCIQLOP-CORE_FOUND - System has sciqlop-core
4 # SCIQLOP-CORE_INCLUDE_DIR - The sciqlop-core include directories
5 # SCIQLOP-CORE_LIBRARIES - The libraries needed to use sciqlop-core
6
7 if(SCIQLOP-CORE_FOUND)
8 return()
9 endif(SCIQLOP-CORE_FOUND)
10
11 set(SCIQLOP-CORE_INCLUDE_DIR ${sciqlop-core_DIR}/../include)
12
13 set (OS_LIB_EXTENSION "so")
14
15 if(WIN32)
16 set (OS_LIB_EXTENSION "dll")
17 endif(WIN32)
18 # TODO: Add Mac Support
19 set(SCIQLOP-CORE_LIBRARIES ${LIBRARY_OUTPUT_PATH}/libsciqlop_core${DEBUG_SUFFIX}.${OS_LIB_EXTENSION})
20
21 set(SCIQLOP-CORE_FOUND TRUE)
@@ -0,0 +1,461
1 /*
2 ====================================================================
3 A Smart Pointer to IMPLementation (i.e. Smart PIMPL or just SPIMPL).
4 ====================================================================
5
6 Version: 1.1
7
8 Latest version:
9 https://github.com/oliora/samples/blob/master/spimpl.h
10 Rationale and description:
11 http://oliora.github.io/2015/12/29/pimpl-and-rule-of-zero.html
12
13 Copyright (c) 2015 Andrey Upadyshev (oliora@gmail.com)
14
15 Distributed under the Boost Software License, Version 1.0.
16 See http://www.boost.org/LICENSE_1_0.txt
17
18 Changes history
19 ---------------
20 v1.1:
21 - auto_ptr support is disabled by default for C++17 compatibility
22 v1.0:
23 - Released
24 */
25
26 #ifndef SPIMPL_H_
27 #define SPIMPL_H_
28
29 #include <cassert>
30 #include <memory>
31 #include <type_traits>
32
33
34 #if defined _MSC_VER && _MSC_VER < 1900 // MS Visual Studio before VS2015
35 #define SPIMPL_NO_CPP11_NOEXCEPT
36 #define SPIMPL_NO_CPP11_CONSTEXPR
37 #define SPIMPL_NO_CPP11_DEFAULT_MOVE_SPEC_FUNC
38 #endif
39
40 #if !defined SPIMPL_NO_CPP11_NOEXCEPT
41 #define SPIMPL_NOEXCEPT noexcept
42 #else
43 #define SPIMPL_NOEXCEPT
44 #endif
45
46 #if !defined SPIMPL_NO_CPP11_CONSTEXPR
47 #define SPIMPL_CONSTEXPR constexpr
48 #else
49 #define SPIMPL_CONSTEXPR
50 #endif
51
52 // define SPIMPL_HAS_AUTO_PTR to enable constructor and assignment operator that accept
53 // std::auto_ptr
54 // TODO: auto detect std::auto_ptr support
55
56
57 namespace spimpl {
58 namespace details {
59 template <class T>
60 T *default_copy(T *src)
61 {
62 static_assert(sizeof(T) > 0, "default_copy cannot copy incomplete type");
63 static_assert(!std::is_void<T>::value, "default_copy cannot copy incomplete type");
64 return new T(*src);
65 }
66
67 template <class T>
68 void default_delete(T *p) SPIMPL_NOEXCEPT
69 {
70 static_assert(sizeof(T) > 0, "default_delete cannot delete incomplete type");
71 static_assert(!std::is_void<T>::value, "default_delete cannot delete incomplete type");
72 delete p;
73 }
74
75 template <class T>
76 struct default_deleter {
77 using type = void (*)(T *);
78 };
79
80 template <class T>
81 using default_deleter_t = typename default_deleter<T>::type;
82
83 template <class T>
84 struct default_copier {
85 using type = T *(*)(T *);
86 };
87
88 template <class T>
89 using default_copier_t = typename default_copier<T>::type;
90
91 template <class T, class D, class C>
92 struct is_default_manageable
93 : public std::integral_constant<bool, std::is_same<D, default_deleter_t<T> >::value
94 && std::is_same<C, default_copier_t<T> >::value> {
95 };
96 }
97
98
99 template <class T, class Deleter = details::default_deleter_t<T>,
100 class Copier = details::default_copier_t<T> >
101 class impl_ptr {
102 private:
103 static_assert(!std::is_array<T>::value,
104 "impl_ptr specialization for arrays is not implemented");
105 struct dummy_t_ {
106 int dummy__;
107 };
108
109 public:
110 using pointer = T *;
111 using element_type = T;
112 using copier_type = typename std::decay<Copier>::type;
113 using deleter_type = typename std::decay<Deleter>::type;
114 using unique_ptr_type = std::unique_ptr<T, deleter_type>;
115 using is_default_manageable = details::is_default_manageable<T, deleter_type, copier_type>;
116
117 SPIMPL_CONSTEXPR impl_ptr() SPIMPL_NOEXCEPT : ptr_(nullptr, deleter_type{}),
118 copier_(copier_type{})
119 {
120 }
121
122 SPIMPL_CONSTEXPR impl_ptr(std::nullptr_t) SPIMPL_NOEXCEPT : impl_ptr() {}
123
124 template <class D, class C>
125 impl_ptr(pointer p, D &&d, C &&c,
126 typename std::enable_if<std::is_convertible<D, deleter_type>::value
127 && std::is_convertible<C, copier_type>::value,
128 dummy_t_>::type
129 = dummy_t_()) SPIMPL_NOEXCEPT : ptr_(std::move(p), std::forward<D>(d)),
130 copier_(std::forward<C>(c))
131 {
132 }
133
134 template <class U>
135 impl_ptr(U *u, typename std::enable_if<std::is_convertible<U *, pointer>::value
136 && is_default_manageable::value,
137 dummy_t_>::type
138 = dummy_t_()) SPIMPL_NOEXCEPT
139 : impl_ptr(u, &details::default_delete<T>, &details::default_copy<T>)
140 {
141 }
142
143 impl_ptr(const impl_ptr &r) : impl_ptr(r.clone()) {}
144
145 #ifndef SPIMPL_NO_CPP11_DEFAULT_MOVE_SPEC_FUNC
146 impl_ptr(impl_ptr &&r) SPIMPL_NOEXCEPT = default;
147 #else
148 impl_ptr(impl_ptr &&r) SPIMPL_NOEXCEPT : ptr_(std::move(r.ptr_)), copier_(std::move(r.copier_))
149 {
150 }
151 #endif
152
153 #ifdef SPIMPL_HAS_AUTO_PTR
154 template <class U>
155 impl_ptr(std::auto_ptr<U> &&u, typename std::enable_if<std::is_convertible<U *, pointer>::value
156 && is_default_manageable::value,
157 dummy_t_>::type
158 = dummy_t_()) SPIMPL_NOEXCEPT
159 : ptr_(u.release(), &details::default_delete<T>),
160 copier_(&details::default_copy<T>)
161 {
162 }
163 #endif
164
165 template <class U>
166 impl_ptr(std::unique_ptr<U> &&u,
167 typename std::enable_if<std::is_convertible<U *, pointer>::value
168 && is_default_manageable::value,
169 dummy_t_>::type
170 = dummy_t_()) SPIMPL_NOEXCEPT : ptr_(u.release(), &details::default_delete<T>),
171 copier_(&details::default_copy<T>)
172 {
173 }
174
175 template <class U, class D, class C>
176 impl_ptr(std::unique_ptr<U, D> &&u, C &&c,
177 typename std::enable_if<std::is_convertible<U *, pointer>::value
178 && std::is_convertible<D, deleter_type>::value
179 && std::is_convertible<C, copier_type>::value,
180 dummy_t_>::type
181 = dummy_t_()) SPIMPL_NOEXCEPT : ptr_(std::move(u)),
182 copier_(std::forward<C>(c))
183 {
184 }
185
186 template <class U, class D, class C>
187 impl_ptr(impl_ptr<U, D, C> &&u,
188 typename std::enable_if<std::is_convertible<U *, pointer>::value
189 && std::is_convertible<D, deleter_type>::value
190 && std::is_convertible<C, copier_type>::value,
191 dummy_t_>::type
192 = dummy_t_()) SPIMPL_NOEXCEPT : ptr_(std::move(u.ptr_)),
193 copier_(std::move(u.copier_))
194 {
195 }
196
197 impl_ptr &operator=(const impl_ptr &r)
198 {
199 if (this == &r)
200 return *this;
201
202 return operator=(r.clone());
203 }
204
205 #ifndef SPIMPL_NO_CPP11_DEFAULT_MOVE_SPEC_FUNC
206 impl_ptr &operator=(impl_ptr &&r) SPIMPL_NOEXCEPT = default;
207 #else
208 impl_ptr &operator=(impl_ptr &&r) SPIMPL_NOEXCEPT
209 {
210 ptr_ = std::move(r.ptr_);
211 copier_ = std::move(r.copier_);
212 return *this;
213 }
214 #endif
215
216 template <class U, class D, class C>
217 typename std::enable_if<std::is_convertible<U *, pointer>::value
218 && std::is_convertible<D, deleter_type>::value
219 && std::is_convertible<C, copier_type>::value,
220 impl_ptr &>::type
221 operator=(impl_ptr<U, D, C> &&u) SPIMPL_NOEXCEPT
222 {
223 ptr_ = std::move(u.ptr_);
224 copier_ = std::move(u.copier_);
225 return *this;
226 }
227
228 template <class U, class D, class C>
229 typename std::enable_if<std::is_convertible<U *, pointer>::value
230 && std::is_convertible<D, deleter_type>::value
231 && std::is_convertible<C, copier_type>::value,
232 impl_ptr &>::type
233 operator=(const impl_ptr<U, D, C> &u)
234 {
235 return operator=(u.clone());
236 }
237
238 //
239
240 #ifdef SPIMPL_HAS_AUTO_PTR
241 template <class U>
242 typename std::enable_if<std::is_convertible<U *, pointer>::value
243 && is_default_manageable::value,
244 impl_ptr &>::type
245 operator=(std::auto_ptr<U> &&u) SPIMPL_NOEXCEPT
246 {
247 return operator=(impl_ptr(std::move(u)));
248 }
249 #endif
250
251 template <class U>
252 typename std::enable_if<std::is_convertible<U *, pointer>::value
253 && is_default_manageable::value,
254 impl_ptr &>::type
255 operator=(std::unique_ptr<U> &&u) SPIMPL_NOEXCEPT
256 {
257 return operator=(impl_ptr(std::move(u)));
258 }
259
260 impl_ptr clone() const
261 {
262 return impl_ptr(ptr_ ? copier_(ptr_.get()) : nullptr, ptr_.get_deleter(), copier_);
263 }
264
265 typename std::remove_reference<T>::type &operator*() const { return *ptr_; }
266 pointer operator->() const SPIMPL_NOEXCEPT { return get(); }
267 pointer get() const SPIMPL_NOEXCEPT { return ptr_.get(); }
268
269 void swap(impl_ptr &u) SPIMPL_NOEXCEPT
270 {
271 using std::swap;
272 ptr_.swap(u.ptr_);
273 swap(copier_, u.copier_);
274 }
275
276 pointer release() SPIMPL_NOEXCEPT { return ptr_.release(); }
277
278 unique_ptr_type release_unique() SPIMPL_NOEXCEPT { return std::move(ptr_); }
279
280 explicit operator bool() const SPIMPL_NOEXCEPT { return static_cast<bool>(ptr_); }
281
282 typename std::remove_reference<deleter_type>::type &get_deleter() SPIMPL_NOEXCEPT
283 {
284 return ptr_.get_deleter();
285 }
286 const typename std::remove_reference<deleter_type>::type &get_deleter() const SPIMPL_NOEXCEPT
287 {
288 return ptr_.get_deleter();
289 }
290
291 typename std::remove_reference<copier_type>::type &get_copier() SPIMPL_NOEXCEPT
292 {
293 return copier_;
294 }
295 const typename std::remove_reference<copier_type>::type &get_copier() const SPIMPL_NOEXCEPT
296 {
297 return copier_;
298 }
299
300 private:
301 unique_ptr_type ptr_;
302 copier_type copier_;
303 };
304
305
306 template <class T, class D, class C>
307 inline void swap(impl_ptr<T, D, C> &l, impl_ptr<T, D, C> &r) SPIMPL_NOEXCEPT
308 {
309 l.swap(r);
310 }
311
312
313 template <class T1, class D1, class C1, class T2, class D2, class C2>
314 inline bool operator==(const impl_ptr<T1, D1, C1> &l, const impl_ptr<T2, D2, C2> &r)
315 {
316 return l.get() == r.get();
317 }
318
319 template <class T1, class D1, class C1, class T2, class D2, class C2>
320 inline bool operator!=(const impl_ptr<T1, D1, C1> &l, const impl_ptr<T2, D2, C2> &r)
321 {
322 return !(l == r);
323 }
324
325 template <class T1, class D1, class C1, class T2, class D2, class C2>
326 inline bool operator<(const impl_ptr<T1, D1, C1> &l, const impl_ptr<T2, D2, C2> &r)
327 {
328 using P1 = typename impl_ptr<T1, D1, C1>::pointer;
329 using P2 = typename impl_ptr<T2, D2, C2>::pointer;
330 using CT = typename std::common_type<P1, P2>::type;
331 return std::less<CT>()(l.get(), r.get());
332 }
333
334 template <class T1, class D1, class C1, class T2, class D2, class C2>
335 inline bool operator>(const impl_ptr<T1, D1, C1> &l, const impl_ptr<T2, D2, C2> &r)
336 {
337 return r < l;
338 }
339
340 template <class T1, class D1, class C1, class T2, class D2, class C2>
341 inline bool operator<=(const impl_ptr<T1, D1, C1> &l, const impl_ptr<T2, D2, C2> &r)
342 {
343 return !(r < l);
344 }
345
346 template <class T1, class D1, class C1, class T2, class D2, class C2>
347 inline bool operator>=(const impl_ptr<T1, D1, C1> &l, const impl_ptr<T2, D2, C2> &r)
348 {
349 return !(l < r);
350 }
351
352 template <class T, class D, class C>
353 inline bool operator==(const impl_ptr<T, D, C> &p, std::nullptr_t) SPIMPL_NOEXCEPT
354 {
355 return !p;
356 }
357
358 template <class T, class D, class C>
359 inline bool operator==(std::nullptr_t, const impl_ptr<T, D, C> &p) SPIMPL_NOEXCEPT
360 {
361 return !p;
362 }
363
364 template <class T, class D, class C>
365 inline bool operator!=(const impl_ptr<T, D, C> &p, std::nullptr_t) SPIMPL_NOEXCEPT
366 {
367 return static_cast<bool>(p);
368 }
369
370 template <class T, class D, class C>
371 inline bool operator!=(std::nullptr_t, const impl_ptr<T, D, C> &p) SPIMPL_NOEXCEPT
372 {
373 return static_cast<bool>(p);
374 }
375
376 template <class T, class D, class C>
377 inline bool operator<(const impl_ptr<T, D, C> &l, std::nullptr_t)
378 {
379 using P = typename impl_ptr<T, D, C>::pointer;
380 return std::less<P>()(l.get(), nullptr);
381 }
382
383 template <class T, class D, class C>
384 inline bool operator<(std::nullptr_t, const impl_ptr<T, D, C> &p)
385 {
386 using P = typename impl_ptr<T, D, C>::pointer;
387 return std::less<P>()(nullptr, p.get());
388 }
389
390 template <class T, class D, class C>
391 inline bool operator>(const impl_ptr<T, D, C> &p, std::nullptr_t)
392 {
393 return nullptr < p;
394 }
395
396 template <class T, class D, class C>
397 inline bool operator>(std::nullptr_t, const impl_ptr<T, D, C> &p)
398 {
399 return p < nullptr;
400 }
401
402 template <class T, class D, class C>
403 inline bool operator<=(const impl_ptr<T, D, C> &p, std::nullptr_t)
404 {
405 return !(nullptr < p);
406 }
407
408 template <class T, class D, class C>
409 inline bool operator<=(std::nullptr_t, const impl_ptr<T, D, C> &p)
410 {
411 return !(p < nullptr);
412 }
413
414 template <class T, class D, class C>
415 inline bool operator>=(const impl_ptr<T, D, C> &p, std::nullptr_t)
416 {
417 return !(p < nullptr);
418 }
419
420 template <class T, class D, class C>
421 inline bool operator>=(std::nullptr_t, const impl_ptr<T, D, C> &p)
422 {
423 return !(nullptr < p);
424 }
425
426
427 template <class T, class... Args>
428 inline impl_ptr<T> make_impl(Args &&... args)
429 {
430 return impl_ptr<T>(new T(std::forward<Args>(args)...), &details::default_delete<T>,
431 &details::default_copy<T>);
432 }
433
434
435 // Helpers to manage unique impl, stored in std::unique_ptr
436
437 template <class T, class Deleter = void (*)(T *)>
438 using unique_impl_ptr = std::unique_ptr<T, Deleter>;
439
440 template <class T, class... Args>
441 inline unique_impl_ptr<T> make_unique_impl(Args &&... args)
442 {
443 static_assert(!std::is_array<T>::value, "unique_impl_ptr does not support arrays");
444 return unique_impl_ptr<T>(new T(std::forward<Args>(args)...), &details::default_delete<T>);
445 }
446 }
447
448 namespace std {
449 template <class T, class D, class C>
450 struct hash<spimpl::impl_ptr<T, D, C> > {
451 using argument_type = spimpl::impl_ptr<T, D, C>;
452 using result_type = size_t;
453
454 result_type operator()(const argument_type &p) const SPIMPL_NOEXCEPT
455 {
456 return hash<typename argument_type::pointer>()(p.get());
457 }
458 };
459 }
460
461 #endif // SPIMPL_H_
@@ -0,0 +1,39
1 #ifndef SCIQLOP_DATASOURCECONTROLLER_H
2 #define SCIQLOP_DATASOURCECONTROLLER_H
3
4 #include "DataSourceController.h"
5
6 #include <QLoggingCategory>
7 #include <QObject>
8
9 #include <Common/spimpl.h>
10
11 Q_DECLARE_LOGGING_CATEGORY(LOG_DataSourceController)
12
13 /**
14 * @brief The DataSourceController class aims to make the link between SciQlop
15 * and its plugins. This is the intermediate class that SciQlop have to use
16 * in the way to connect a data source. Please first use load method to intialize
17 * a plugin specified by its metadata name (JSON plugin source) then others specifics
18 * method will ba able to access it.
19 * You can load a data source driver plugin then create a data source.
20 */
21 class DataSourceController : public QObject {
22 Q_OBJECT
23 public:
24 explicit DataSourceController(QObject *parent = 0);
25 virtual ~DataSourceController();
26
27 public slots:
28 /// Manage init/end of the controller
29 void initialize();
30 void finalize();
31
32 private:
33 void waitForFinish();
34
35 class DataSourceControllerPrivate;
36 spimpl::unique_impl_ptr<DataSourceControllerPrivate> impl;
37 };
38
39 #endif // SCIQLOP_DATASOURCECONTROLLER_H
@@ -0,0 +1,78
1 #include "Version.h"
2
3 /***************************************************
4 * @SCIQLOP_CMAKE_GENERATION_WARNING@ *
5 ***************************************************/
6
7 #include <QtCore/QDateTime>
8 #include <QtCore/QStringList>
9
10 namespace sciqlop {
11
12 const char *Version::VERSION_SUFFIX = "@SCIQLOP_VERSION_SUFFIX@";
13
14 /**
15 * From the C99 standard:
16 * __DATE__: The date of translation of the preprocessing translation unit:
17 * a character string literal of the form "Mmm dd yyyy", where the names of
18 * the months are the same as those generated by the asctime function, and
19 * the first character of dd is a space character if the value is less than
20 * 10. If the date of translation is not available, an
21 * implementation-defined valid date shall be supplied.
22 */
23 const char *Version::BUILD_DATE = __DATE__;
24 /**
25 * From the C99 standard:
26 * __TIME__: The time of translation of the preprocessing translation unit:
27 * a character string literal of the form "hh:mm:ss" as in the time
28 * generated by the asctime function. If the time of translation is not
29 * available, an implementation-defined valid time shall be supplied.
30 */
31 const char *Version::BUILD_TIME = __TIME__;
32
33 QDateTime Version::buildDateTime()
34 {
35 static QDateTime buildDateTime;
36 if (!buildDateTime.isValid()) {
37 // Convert BUILD_DATE to a QDate
38 // The __DATE__ macro return the month name with the asctime() function,
39 // which doesn't support localization, the month names returned are
40 // always the same. On the contrary, the "MMM" format on
41 // QDate::fromString() is localized, so this method can't be used to
42 // retrieve the month and we must manually do it instead.
43 QString buildDateStr = QString(BUILD_DATE);
44 QString buildMonthStr = buildDateStr.left(3);
45 QString buildDayAndYearStr = buildDateStr.mid(4).trimmed();
46
47 QDate buildDate = QDate::fromString(buildDayAndYearStr, "d yyyy");
48 QStringList monthList = QStringList() << "Jan"
49 << "Feb"
50 << "Mar"
51 << "Apr"
52 << "May"
53 << "Jun"
54 << "Jul"
55 << "Aug"
56 << "Sep"
57 << "Oct"
58 << "Nov"
59 << "Dec";
60 for (int i = 0; i < monthList.size(); ++i) {
61 if (buildMonthStr == monthList.at(i)) {
62 buildDate.setDate(buildDate.year(), i + 1, buildDate.day());
63 break;
64 }
65 }
66
67 // Convert BUILD_TIME to a QTime
68 QTime buildTime = QTime::fromString(BUILD_TIME, "hh:mm:ss");
69
70 // Set the buildDateTime
71 buildDateTime.setDate(buildDate);
72 buildDateTime.setTime(buildTime);
73 }
74
75 return buildDateTime;
76 }
77
78 } // namespace sciqlop
@@ -0,0 +1,98
1 // TODO copyright
2 /**
3 * @file Version.h
4 */
5 #ifndef SCIQLOP_VERSION_H
6 #define SCIQLOP_VERSION_H
7
8 /***************************************************
9 * @SCIQLOP_CMAKE_GENERATION_WARNING@ *
10 ***************************************************/
11
12 //#include "SciqlopExport.h"
13 #include <QtCore/QString>
14
15 class QDateTime;
16
17 namespace sciqlop {
18
19 /**
20 * Holds the version of Sciqlop.
21 *
22 * @attention Don't update this class directly, it is generated from the
23 * `resources/Version.h.in` and `resources/Version.cpp.in` files, along with
24 * the cmake variables defined in the `cmake/sciqlop_version.cmake` file.
25 *
26 * To change the Sciqlop version number, update the `cmake/sciqlop_version.cmake`
27 * file, and to change this class other than to change the version number,
28 * update the `resources/Version.h.in` and `resources/Version.cpp.in` files.
29 * @ingroup Utils
30 */
31 class /*SCIQLOP_API*/ Version {
32 public:
33 /**
34 * Retrieve the version of Sciqlop.
35 *
36 * The version is of the form MAJOR.MINOR.PATCH. If a suffix has been
37 * provided to the version, it is appended after the PATCH.
38 *
39 * The version can be modified by updating the cmake/sciqlop_version.cmake
40 * file.
41 *
42 * @return The version of Sciqlop as a QString.
43 */
44 static QString version()
45 {
46 static const QString v("@SCIQLOP_VERSION@");
47 return v;
48 }
49
50 /**
51 * @return The datetime of the build.
52 */
53 static QDateTime buildDateTime();
54
55 /**
56 * Major version.
57 */
58 static const int VERSION_MAJOR = @SCIQLOP_VERSION_MAJOR@;
59 /**
60 * Minor version.
61 */
62 static const int VERSION_MINOR = @SCIQLOP_VERSION_MINOR@;
63 /**
64 * Patch version.
65 */
66 static const int VERSION_PATCH = @SCIQLOP_VERSION_PATCH@;
67 /**
68 * Suffix version.
69 */
70 static const char *VERSION_SUFFIX;
71
72 /**
73 * Compile date computed with the __DATE__ macro.
74 *
75 * From the C99 standard:
76 * __DATE__: The date of translation of the preprocessing translation unit:
77 * a character string literal of the form "Mmm dd yyyy", where the names of
78 * the months are the same as those generated by the asctime function, and
79 * the first character of dd is a space character if the value is less than
80 * 10. If the date of translation is not available, an
81 * implementation-defined valid date shall be supplied.
82 */
83 static const char *BUILD_DATE;
84 /**
85 * Compile time computed with the __TIME__ macro.
86 *
87 * From the C99 standard:
88 * __TIME__: The time of translation of the preprocessing translation unit:
89 * a character string literal of the form "hh:mm:ss" as in the time
90 * generated by the asctime function. If the time of translation is not
91 * available, an implementation-defined valid time shall be supplied.
92 */
93 static const char *BUILD_TIME;
94 };
95
96 } // namespace sciqlop
97
98 #endif // SCIQLOP_VERSION_H
@@ -0,0 +1,47
1 #include "DataSource/DataSourceController.h"
2
3 #include <QMutex>
4 #include <QThread>
5
6 Q_LOGGING_CATEGORY(LOG_DataSourceController, "dataSourceController")
7
8 class DataSourceController::DataSourceControllerPrivate {
9 public:
10 DataSourceControllerPrivate() {}
11
12
13 QMutex m_WorkingMutex;
14 };
15
16 DataSourceController::DataSourceController(QObject *parent)
17 : impl{spimpl::make_unique_impl<DataSourceControllerPrivate>()}
18 {
19 qCInfo(LOG_DataSourceController()) << tr("Construction du DataSourceController");
20 }
21
22 DataSourceController::~DataSourceController()
23 {
24 // delete impl;
25 this->waitForFinish();
26 }
27
28 void DataSourceController::initialize()
29 {
30 qCInfo(LOG_DataSourceController()) << tr("initialize du DataSourceController");
31 impl->m_WorkingMutex.lock();
32 qCInfo(LOG_DataSourceController()) << tr("initialize du DataSourceController END");
33 }
34
35 void DataSourceController::finalize()
36 {
37 qCInfo(LOG_DataSourceController()) << tr("finalize du DataSourceController");
38 impl->m_WorkingMutex.unlock();
39 qCInfo(LOG_DataSourceController()) << tr("finalize du DataSourceController END");
40 }
41
42 void DataSourceController::waitForFinish()
43 {
44 qCInfo(LOG_DataSourceController()) << tr("waitForFinish du DataSourceController");
45 QMutexLocker locker(&impl->m_WorkingMutex);
46 qCInfo(LOG_DataSourceController()) << tr("waitForFinish du DataSourceController END");
47 }
@@ -0,0 +1,159
1
2 ## gui - CMakeLists.txt
3 STRING(TOLOWER ${CMAKE_PROJECT_NAME} LIBRARY_PREFFIX)
4 SET(SQPGUI_LIBRARY_NAME "${LIBRARY_PREFFIX}_gui${DEBUG_SUFFIX}")
5 SET(SOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
6 SET(INCLUDES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
7 SET(UI_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/ui")
8 SET(RES_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/resources")
9
10 # Include gui directory
11 include_directories("${INCLUDES_DIR}")
12 include_directories("${CMAKE_CURRENT_BINARY_DIR}")
13
14 # Set a variable to display a warning in the version files.
15 SET(SCIQLOP_CMAKE_GENERATION_WARNING "DON'T CHANGE THIS FILE. AUTOGENERATED BY CMAKE.")
16
17 #
18 # Find Qt modules
19 #
20 SCIQLOP_FIND_QT(Core Widgets)
21
22 #
23 # Find dependent libraries
24 # ========================
25 find_package(sciqlop-core)
26
27 message("Librairies inclues dans APP: ${SCIQLOP-CORE_LIBRARIES}")
28 SET(LIBRARIES ${SCIQLOP-CORE_LIBRARIES})
29
30 INCLUDE_DIRECTORIES(${SCIQLOP-CORE_INCLUDE_DIR})
31
32 # Add sqpcore to the list of libraries to use
33 list(APPEND LIBRARIES ${SQPCORE_LIBRARY_NAME})
34
35 # Add dependent shared libraries
36 list(APPEND SHARED_LIBRARIES ${SQPCORE_SHARED_LIBRARIES})
37
38
39 # Ui files
40 FILE (GLOB_RECURSE PROJECT_FORMS ${UI_FOLDER}/*.ui)
41
42 # Resources files
43 FILE (GLOB_RECURSE PROJECT_RESOURCES ${RES_FOLDER}/*.qrc)
44
45 #
46 # Compile the library library
47 #
48 FILE (GLOB_RECURSE MODULE_SOURCES
49 ${INCLUDES_DIR}/*.h
50 ${SOURCES_DIR}/*.c
51 ${SOURCES_DIR}/*.cpp
52 ${SOURCES_DIR}/*.h
53 ${PROJECT_FORMS})
54
55 QT5_ADD_RESOURCES(RCC_HDRS
56 ${PROJECT_RESOURCES}
57 )
58
59 QT5_WRAP_UI(UIS_HDRS
60 ${PROJECT_FORMS}
61 )
62
63
64 ADD_LIBRARY(${SQPGUI_LIBRARY_NAME} ${MODULE_SOURCES} ${UIS_HDRS} ${RCC_HDRS})
65 set_property(TARGET ${SQPGUI_LIBRARY_NAME} PROPERTY CXX_STANDARD 14)
66 set_property(TARGET ${SQPGUI_LIBRARY_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
67
68 TARGET_LINK_LIBRARIES(${SQPGUI_LIBRARY_NAME} ${LIBRARIES})
69 qt5_use_modules(${SQPGUI_LIBRARY_NAME} Core Widgets)
70
71 # From cmake documentation: http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html
72 # Entries in the COMPILE_DEFINITIONS are prefixed with -D or /D and added to the compile line in an unspecified order.
73 # The DEFINE_SYMBOL target property is also added as a compile definition as a special convenience case for SHARED and MODULE library targets
74 IF(BUILD_SHARED_LIBS)
75 SET_TARGET_PROPERTIES(${SQPGUI_LIBRARY_NAME} PROPERTIES COMPILE_DEFINITIONS "SCIQLOP_EXPORT")
76 ELSE()
77 TARGET_COMPILE_DEFINITIONS(${SQPGUI_LIBRARY_NAME} PUBLIC "SCIQLOP_STATIC_LIBRARIES")
78 ENDIF()
79
80 # Set the variable to parent scope so that the other projects can copy the
81 # dependent shared libraries
82 SCIQLOP_SET_TO_PARENT_SCOPE(SQPGUI_LIBRARY_NAME)
83
84 # Copy extern shared libraries to the lib folder
85 SCIQLOP_COPY_TO_TARGET(LIBRARY ${SQPGUI_LIBRARY_NAME})
86
87 # Add the files to the list of files to be analyzed
88 LIST(APPEND CHECKSTYLE_INPUT_FILES ${MODULE_SOURCES})
89 SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_INPUT_FILES)
90 # Vera++ exclusion files
91 #LIST(APPEND CHECKSTYLE_EXCLUSION_FILES ${CMAKE_CURRENT_SOURCE_DIR}/path/to/exclusionFiles.tcl)
92 SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_EXCLUSION_FILES)
93
94 #
95 # Compile the tests
96 #
97 IF(BUILD_TESTS)
98 INCLUDE_DIRECTORIES(${SOURCES_DIR})
99 FILE (GLOB_RECURSE TESTS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Test*.cpp)
100 FILE (GLOB_RECURSE TESTS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/Test*.h)
101 SET( TEST_LIBRARIES ${SQPGUI_LIBRARY_NAME})
102
103 FOREACH( testFile ${TESTS_SOURCES} )
104 GET_FILENAME_COMPONENT( testDirectory ${testFile} DIRECTORY )
105 GET_FILENAME_COMPONENT( testName ${testFile} NAME_WE )
106
107 # Add to the list of sources files all the sources in the same
108 # directory that aren't another test
109 FILE (GLOB currentTestSources
110 ${testDirectory}/*.c
111 ${testDirectory}/*.cpp
112 ${testDirectory}/*.h)
113 LIST (REMOVE_ITEM currentTestSources ${TESTS_SOURCES})
114 LIST (REMOVE_ITEM currentTestSources ${TESTS_HEADERS})
115
116 ADD_EXECUTABLE(${testName} ${testFile} ${currentTestSources})
117 TARGET_LINK_LIBRARIES( ${testName} ${TEST_LIBRARIES} )
118 qt5_use_modules(${testName} Test)
119
120 ADD_TEST( NAME ${testName} COMMAND ${testName} )
121
122 SCIQLOP_COPY_TO_TARGET(RUNTIME ${testName} ${EXTERN_SHARED_LIBRARIES})
123 ENDFOREACH( testFile )
124
125 LIST(APPEND testFilesToFormat ${TESTS_SOURCES})
126 LIST(APPEND testFilesToFormat ${TESTS_HEADERS})
127 LIST(APPEND FORMATTING_INPUT_FILES ${testFilesToFormat})
128 SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
129 ENDIF(BUILD_TESTS)
130
131 #
132 # Set the files that must be formatted by clang-format.
133 #
134 LIST (APPEND FORMATTING_INPUT_FILES ${MODULE_SOURCES})
135 SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
136
137 #
138 # Set the directories that doxygen must browse to generate the
139 # documentation.
140 #
141 # Source directories:
142 LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/docs")
143 LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
144 SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_INPUT_DIRS)
145 # Source directories to exclude from the documentation generation
146 #LIST (APPEND DOXYGEN_EXCLUDE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir/*")
147 SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_EXCLUDE_PATTERNS)
148
149 #
150 # Set the directories with the sources to analyze and propagate the
151 # modification to the parent scope
152 #
153 # Source directories to analyze:
154 LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
155 LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/tests")
156 SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_INPUT_DIRS)
157 # Source directories to exclude from the analysis
158 #LIST (APPEND ANALYSIS_EXCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir")
159 SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_EXCLUDE_DIRS)
@@ -0,0 +1,21
1 # - Try to find sciqlop-gui
2 # Once done this will define
3 # SCIQLOP-GUI_FOUND - System has sciqlop-gui
4 # SCIQLOP-GUI_INCLUDE_DIR - The sciqlop-gui include directories
5 # SCIQLOP-GUI_LIBRARIES - The libraries needed to use sciqlop-gui
6
7 if(SCIQLOP-GUI_FOUND)
8 return()
9 endif(SCIQLOP-GUI_FOUND)
10
11 set(SCIQLOP-GUI_INCLUDE_DIR ${sciqlop-gui_DIR}/../include)
12
13 set (OS_LIB_EXTENSION "so")
14
15 if(WIN32)
16 set (OS_LIB_EXTENSION "dll")
17 endif(WIN32)
18 # TODO: Add Mac Support
19 set(SCIQLOP-GUI_LIBRARIES ${LIBRARY_OUTPUT_PATH}/libsciqlop_gui${DEBUG_SUFFIX}.${OS_LIB_EXTENSION})
20
21 set(SCIQLOP-GUI_FOUND TRUE)
@@ -0,0 +1,33
1 #ifndef SCIQLOP_SQPAPPLICATION_H
2 #define SCIQLOP_SQPAPPLICATION_H
3
4 #include "SqpApplication.h"
5
6 #include <QApplication>
7 #include <QLoggingCategory>
8
9 #include <Common/spimpl.h>
10
11 Q_DECLARE_LOGGING_CATEGORY(LOG_SqpApplication)
12
13 /**
14 * @brief The SqpApplication class aims to make the link between SciQlop
15 * and its plugins. This is the intermediate class that SciQlop have to use
16 * in the way to connect a data source. Please first use load method to intialize
17 * a plugin specified by its metadata name (JSON plugin source) then others specifics
18 * method will ba able to access it.
19 * You can load a data source driver plugin then create a data source.
20 */
21 class SqpApplication : public QApplication {
22 Q_OBJECT
23 public:
24 explicit SqpApplication(int &argc, char **argv);
25 virtual ~SqpApplication();
26 void initialize();
27
28 private:
29 class SqpApplicationPrivate;
30 spimpl::unique_impl_ptr<SqpApplicationPrivate> impl;
31 };
32
33 #endif // SCIQLOP_SQPAPPLICATION_H
@@ -0,0 +1,40
1 #include "SqpApplication.h"
2
3 #include <DataSource/DataSourceController.h>
4 #include <QThread>
5
6 Q_LOGGING_CATEGORY(LOG_SqpApplication, "SqpApplication")
7
8 class SqpApplication::SqpApplicationPrivate {
9 public:
10 SqpApplicationPrivate() {}
11
12 std::unique_ptr<DataSourceController> m_DataSourceController;
13 QThread m_DataSourceControllerThread;
14 };
15
16
17 SqpApplication::SqpApplication(int &argc, char **argv)
18 : QApplication(argc, argv), impl{spimpl::make_unique_impl<SqpApplicationPrivate>()}
19 {
20 qCInfo(LOG_SqpApplication()) << tr("Construction du SqpApplication");
21
22 impl->m_DataSourceController = std::make_unique<DataSourceController>();
23 impl->m_DataSourceController->moveToThread(&impl->m_DataSourceControllerThread);
24
25 connect(&impl->m_DataSourceControllerThread, &QThread::started,
26 impl->m_DataSourceController.get(), &DataSourceController::initialize);
27 connect(&impl->m_DataSourceControllerThread, &QThread::finished,
28 impl->m_DataSourceController.get(), &DataSourceController::finalize);
29
30 impl->m_DataSourceControllerThread.start();
31 }
32
33 SqpApplication::~SqpApplication()
34 {
35 impl->m_DataSourceControllerThread.quit();
36 }
37
38 void SqpApplication::initialize()
39 {
40 }
@@ -4,18 +4,18
4 # Debug or release
4 # Debug or release
5 #
5 #
6 # As the "NMake Makefiles" forces by default the CMAKE_BUILD_TYPE variable to Debug, SCIQLOP_BUILD_TYPE variable is used to be sure that the debug mode is a user choice
6 # As the "NMake Makefiles" forces by default the CMAKE_BUILD_TYPE variable to Debug, SCIQLOP_BUILD_TYPE variable is used to be sure that the debug mode is a user choice
7 SET(SCIQLOP_BUILD_TYPE "Release" CACHE STRING "Choose to compile in Debug or Release mode")
7 #SET(SCIQLOP_BUILD_TYPE "Release" CACHE STRING "Choose to compile in Debug or Release mode")
8
8
9 IF(SCIQLOP_BUILD_TYPE MATCHES "Debug")
9 #IF(SCIQLOP_BUILD_TYPE MATCHES "Debug")
10 MESSAGE (STATUS "Build in Debug")
10 # MESSAGE (STATUS "Build in Debug")
11 SET (CMAKE_BUILD_TYPE "Debug")
11 # SET (CMAKE_BUILD_TYPE "Debug")
12 SET (DEBUG_SUFFIX "d")
12 # SET (DEBUG_SUFFIX "d")
13 ELSE()
13 #ELSE()
14 MESSAGE (STATUS "Build in Release")
14 # MESSAGE (STATUS "Build in Release")
15 SET (CMAKE_BUILD_TYPE "Release")
15 # SET (CMAKE_BUILD_TYPE "Release")
16 SET (SCIQLOP_BUILD_TYPE "Release")
16 # SET (SCIQLOP_BUILD_TYPE "Release")
17 SET (DEBUG_SUFFIX "")
17 # SET (DEBUG_SUFFIX "")
18 ENDIF()
18 #ENDIF()
19
19
20 #
20 #
21 # Need to compile tests?
21 # Need to compile tests?
General Comments 0
You need to be logged in to leave comments. Login now