##// END OF EJS Templates
Closed
Pull request !131 Created on Mon, 29 May 2017 15:06:38, by
- Ajout de la méthode wait pour éviter de détruire un thread en cours
- Initialisation de l'application multithread avec le spimpl.
- Mise à jour de la config pour plus de fonctionnel
Pull request versions not available.
ver Time Author Commit Description
latest r22:ac81b58d0bc3
Ajout de la méthode wait pour éviter de détruire un thread en cours d'éxécution
latest r21:45edf6844d32
Initialisation de l'application multithread avec le spimpl. Ajout du DataSourceController dans un thread dédié.
latest r20:e794669affc9
Mise à jour de la config pour plus de fonctionnel Changement de sqpXXX vers XXX Ajout des inclusions de dépendances dans les modules Création de la classe sqpapplication et de la classe DataSourceController dans le but de tester les loggers et QTest
@@ -9,39 +9,37 class DataSourceController::DataSourceControllerPrivate {
9 9 public:
10 10 DataSourceControllerPrivate() {}
11 11
12
13 12 QMutex m_WorkingMutex;
14 13 };
15 14
16 15 DataSourceController::DataSourceController(QObject *parent)
17 16 : impl{spimpl::make_unique_impl<DataSourceControllerPrivate>()}
18 17 {
19 qCInfo(LOG_DataSourceController()) << tr("Construction du DataSourceController");
18 qCDebug(LOG_DataSourceController()) << tr("Construction du DataSourceController")
19 << QThread::currentThread();
20 20 }
21 21
22 22 DataSourceController::~DataSourceController()
23 23 {
24 // delete impl;
24 qCDebug(LOG_DataSourceController()) << tr("Desctruction du DataSourceController")
25 << QThread::currentThread();
25 26 this->waitForFinish();
26 27 }
27 28
28 29 void DataSourceController::initialize()
29 30 {
30 qCInfo(LOG_DataSourceController()) << tr("initialize du DataSourceController");
31 qCDebug(LOG_DataSourceController()) << tr("initialize du DataSourceController")
32 << QThread::currentThread();
31 33 impl->m_WorkingMutex.lock();
32 qCInfo(LOG_DataSourceController()) << tr("initialize du DataSourceController END");
34 qCDebug(LOG_DataSourceController()) << tr("initialize du DataSourceController END");
33 35 }
34 36
35 37 void DataSourceController::finalize()
36 38 {
37 qCInfo(LOG_DataSourceController()) << tr("finalize du DataSourceController");
38 39 impl->m_WorkingMutex.unlock();
39 qCInfo(LOG_DataSourceController()) << tr("finalize du DataSourceController END");
40 40 }
41 41
42 42 void DataSourceController::waitForFinish()
43 43 {
44 qCInfo(LOG_DataSourceController()) << tr("waitForFinish du DataSourceController");
45 44 QMutexLocker locker(&impl->m_WorkingMutex);
46 qCInfo(LOG_DataSourceController()) << tr("waitForFinish du DataSourceController END");
47 45 }
@@ -8,6 +8,13 Q_LOGGING_CATEGORY(LOG_SqpApplication, "SqpApplication")
8 8 class SqpApplication::SqpApplicationPrivate {
9 9 public:
10 10 SqpApplicationPrivate() {}
11 ~SqpApplicationPrivate()
12 {
13 qCInfo(LOG_SqpApplication()) << tr("Desctruction du SqpApplicationPrivate");
14 ;
15 m_DataSourceControllerThread.quit();
16 m_DataSourceControllerThread.wait();
17 }
11 18
12 19 std::unique_ptr<DataSourceController> m_DataSourceController;
13 20 QThread m_DataSourceControllerThread;
@@ -32,7 +39,6 SqpApplication::SqpApplication(int &argc, char **argv)
32 39
33 40 SqpApplication::~SqpApplication()
34 41 {
35 impl->m_DataSourceControllerThread.quit();
36 42 }
37 43
38 44 void SqpApplication::initialize()
@@ -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 4 # Debug or release
5 5 #
6 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")
10 MESSAGE (STATUS "Build in Debug")
11 SET (CMAKE_BUILD_TYPE "Debug")
12 SET (DEBUG_SUFFIX "d")
13 ELSE()
14 MESSAGE (STATUS "Build in Release")
15 SET (CMAKE_BUILD_TYPE "Release")
16 SET (SCIQLOP_BUILD_TYPE "Release")
17 SET (DEBUG_SUFFIX "")
18 ENDIF()
9 #IF(SCIQLOP_BUILD_TYPE MATCHES "Debug")
10 # MESSAGE (STATUS "Build in Debug")
11 # SET (CMAKE_BUILD_TYPE "Debug")
12 # SET (DEBUG_SUFFIX "d")
13 #ELSE()
14 # MESSAGE (STATUS "Build in Release")
15 # SET (CMAKE_BUILD_TYPE "Release")
16 # SET (SCIQLOP_BUILD_TYPE "Release")
17 # SET (DEBUG_SUFFIX "")
18 #ENDIF()
19 19
20 20 #
21 21 # Need to compile tests?
@@ -10,9 +10,15 SET (LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE})
10 10 #
11 11 # Compile the diffents modules
12 12 #
13 ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/sqpcore")
14 #ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/sqpgui")
15 ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/sqpapp")
13 set(sciqlop-core_DIR "${CMAKE_SOURCE_DIR}/core/cmake")
14 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${sciqlop-core_DIR}")
15 ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/core")
16
17 set(sciqlop-gui_DIR "${CMAKE_SOURCE_DIR}/gui/cmake")
18 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${sciqlop-gui_DIR}")
19 ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/gui")
20
21 ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/app")
16 22
17 23 #
18 24 # Code formatting
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (664 lines changed) Show them Hide them
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
General Comments 4
Under Review
author

Auto status change to "Under Review"

note
author

ok

Approved
author

Status change > Approved

note
author

Pull request merged and closed