##// END OF EJS Templates
Fixed Drag&Drop issue on some platforms and made more consistent plugin install path with Meson...
jeandet -
r1397:348e733132e4
parent child
Show More
@@ -1,45 +1,46
1
1
2 app_moc_headers = [
2 app_moc_headers = [
3 'include/MainWindow.h'
3 'include/MainWindow.h'
4 ]
4 ]
5
5
6 app_ui_files = [
6 app_ui_files = [
7 'ui/MainWindow.ui'
7 'ui/MainWindow.ui'
8 ]
8 ]
9
9
10 app_qresources = ['resources/qlopapp.qrc']
10 app_qresources = ['resources/qlopapp.qrc']
11
11
12 app_moc_files = qt5.preprocess(moc_headers : app_moc_headers,
12 app_moc_files = qt5.preprocess(moc_headers : app_moc_headers,
13 ui_files : app_ui_files,
13 ui_files : app_ui_files,
14 qresources : app_qresources)
14 qresources : app_qresources)
15
15
16 app_sources = [
16 app_sources = [
17 'src/Main.cpp',
17 'src/Main.cpp',
18 'src/MainWindow.cpp'
18 'src/MainWindow.cpp'
19 ]
19 ]
20
20
21 app_inc = include_directories(['include'])
21 app_inc = include_directories(['include'])
22
22
23 if host_machine.system()=='windows' or build_machine.system()=='windows'
23 if host_machine.system()=='windows' or build_machine.system()=='windows'
24 winmod = import('windows')
24 winmod = import('windows')
25 rc = winmod.compile_resources('resources/qlopapp.rc')
25 rc = winmod.compile_resources('resources/qlopapp.rc')
26 else
26 else
27 rc = []
27 rc = []
28 endif
28 endif
29
29
30 app_libs = []
30 app_libs = []
31
31 cpp_args = []
32 if 'static' == get_option('default_library')
32 if 'static' == get_option('default_library')
33 app_libs = [ sciqlop_amdaplugin, sciqlop_mockplugin]
33 app_libs = [ sciqlop_amdaplugin, sciqlop_mockplugin]
34 cpp_args += ['-DQT_STATICPLUGIN']
34 endif
35 endif
35
36
36 sciqlop_app = executable('sciqlop',
37 sciqlop_app = executable('sciqlop',
37 app_sources,
38 app_sources,
38 app_moc_files,
39 app_moc_files,
39 rc,
40 rc,
40 include_directories : [ app_inc],
41 include_directories : [ app_inc],
41 link_with: app_libs,
42 link_with: app_libs,
43 cpp_args: cpp_args,
42 dependencies : [sciqlop_gui, sciqlop_core],
44 dependencies : [sciqlop_gui, sciqlop_core],
43 install : true
45 install : true
44 )
46 )
45
@@ -1,11 +1,10
1 #!/bin/bash
1 #!/bin/bash
2 mkdir build
2 mkdir build
3 cd build
3 cd build
4 meson --prefix=/usr ..
4 meson --prefix=/usr ..
5 ninja
5 ninja
6 DESTDIR=AppDir ninja install
6 DESTDIR=AppDir ninja install
7 mv AppDir/usr/lib64 AppDir/usr/lib
7 mv AppDir/usr/lib64 AppDir/usr/lib
8 mv AppDir/usr/lib/*plugin.so AppDir/usr/bin/
9 wget https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
8 wget https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
10 chmod +x linuxdeployqt-continuous-x86_64.AppImage && ./linuxdeployqt-continuous-x86_64.AppImage --appimage-extract
9 chmod +x linuxdeployqt-continuous-x86_64.AppImage && ./linuxdeployqt-continuous-x86_64.AppImage --appimage-extract
11 LD_LIBRARY_PATH=AppDir/usr/lib64/ ./squashfs-root/AppRun AppDir/usr/share/applications/*.desktop -appimage
10 LD_LIBRARY_PATH=AppDir/usr/lib64/ ./squashfs-root/AppRun AppDir/usr/share/applications/*.desktop -appimage
@@ -1,496 +1,554
1 #include "Visualization/VisualizationDragDropContainer.h"
1 #include "Visualization/VisualizationDragDropContainer.h"
2 #include "DragAndDrop/DragDropGuiController.h"
2 #include "DragAndDrop/DragDropGuiController.h"
3 #include "SqpApplication.h"
3 #include "SqpApplication.h"
4 #include "Visualization/VisualizationDragWidget.h"
4 #include "Visualization/VisualizationDragWidget.h"
5
5
6 #include "Common/VisualizationDef.h"
6 #include "Common/VisualizationDef.h"
7
7
8 #include <QDrag>
8 #include <QDrag>
9 #include <QDragEnterEvent>
9 #include <QDragEnterEvent>
10 #include <QVBoxLayout>
10 #include <QVBoxLayout>
11
11
12 #include <cmath>
12 #include <cmath>
13 #include <memory>
13 #include <memory>
14
14
15 Q_LOGGING_CATEGORY(LOG_VisualizationDragDropContainer, "VisualizationDragDropContainer")
15 Q_LOGGING_CATEGORY(LOG_VisualizationDragDropContainer, "VisualizationDragDropContainer")
16
16
17 auto DRAGGED_MINIATURE_WIDTH = 200; // in pixels
17 auto DRAGGED_MINIATURE_WIDTH = 200; // in pixels
18
18
19 struct VisualizationDragDropContainer::VisualizationDragDropContainerPrivate {
19 struct VisualizationDragDropContainer::VisualizationDragDropContainerPrivate
20 {
20
21
21 QVBoxLayout *m_Layout;
22 QVBoxLayout* m_Layout;
22 QHash<QString, VisualizationDragDropContainer::DropBehavior> m_AcceptedMimeTypes;
23 QHash<QString, VisualizationDragDropContainer::DropBehavior> m_AcceptedMimeTypes;
23 QString m_PlaceHolderText;
24 QString m_PlaceHolderText;
24 DragDropGuiController::PlaceHolderType m_PlaceHolderType;
25 DragDropGuiController::PlaceHolderType m_PlaceHolderType;
25
26
26 VisualizationDragDropContainer::AcceptMimeDataFunction m_AcceptMimeDataFun
27 VisualizationDragDropContainer::AcceptMimeDataFunction m_AcceptMimeDataFun
27 = [](auto mimeData) { return true; };
28 = [](auto mimeData) { return true; };
28 VisualizationDragDropContainer::AcceptDragWidgetFunction m_AcceptDragWidgetFun
29 VisualizationDragDropContainer::AcceptDragWidgetFunction m_AcceptDragWidgetFun
29 = [](auto dragWidget, auto mimeData) { return true; };
30 = [](auto dragWidget, auto mimeData) { return true; };
30
31
31 int m_MinContainerHeight = 0;
32 int m_MinContainerHeight = 0;
32
33
33 explicit VisualizationDragDropContainerPrivate(QWidget *widget)
34 explicit VisualizationDragDropContainerPrivate(QWidget* widget)
34 : m_PlaceHolderType(DragDropGuiController::PlaceHolderType::Graph)
35 : m_PlaceHolderType(DragDropGuiController::PlaceHolderType::Graph)
35 {
36 {
36 m_Layout = new QVBoxLayout(widget);
37 m_Layout = new QVBoxLayout(widget);
37 m_Layout->setContentsMargins(0, 0, 0, 0);
38 m_Layout->setContentsMargins(0, 0, 0, 0);
38 }
39 }
39
40
40 bool acceptMimeData(const QMimeData *data) const
41 bool acceptMimeData(const QMimeData* data) const
41 {
42 {
42 auto accepted = false;
43 auto accepted = false;
43 for (auto it = m_AcceptedMimeTypes.constBegin(); it != m_AcceptedMimeTypes.constEnd();
44 for (auto it = m_AcceptedMimeTypes.constBegin(); it != m_AcceptedMimeTypes.constEnd(); ++it)
44 ++it) {
45 {
45 const auto &type = it.key();
46 const auto& type = it.key();
46 const auto &behavior = it.value();
47 const auto& behavior = it.value();
47
48
48 if (data->hasFormat(type)) {
49 if (data->hasFormat(type))
49 if (behavior != DropBehavior::Forbidden) {
50 {
51 if (behavior != DropBehavior::Forbidden)
52 {
50 accepted = true;
53 accepted = true;
51 }
54 }
52 else {
55 else
56 {
53 accepted = false;
57 accepted = false;
54 break;
58 break;
55 }
59 }
56 }
60 }
57 }
61 }
58
62
59 if (accepted) {
63 if (accepted)
64 {
60 accepted = m_AcceptMimeDataFun(data);
65 accepted = m_AcceptMimeDataFun(data);
61 }
66 }
62
67
63 return accepted;
68 return accepted;
64 }
69 }
65
70
66 bool allowMergeForMimeData(const QMimeData *data) const
71 bool allowMergeForMimeData(const QMimeData* data) const
67 {
72 {
68 auto result = false;
73 auto result = false;
69 for (auto it = m_AcceptedMimeTypes.constBegin(); it != m_AcceptedMimeTypes.constEnd();
74 for (auto it = m_AcceptedMimeTypes.constBegin(); it != m_AcceptedMimeTypes.constEnd(); ++it)
70 ++it) {
75 {
71
76
72 if (data->hasFormat(it.key())
77 if (data->hasFormat(it.key())
73 && (it.value() == VisualizationDragDropContainer::DropBehavior::Merged
78 && (it.value() == VisualizationDragDropContainer::DropBehavior::Merged
74 || it.value()
79 || it.value()
75 == VisualizationDragDropContainer::DropBehavior::InsertedAndMerged)) {
80 == VisualizationDragDropContainer::DropBehavior::InsertedAndMerged))
81 {
76 result = true;
82 result = true;
77 }
83 }
78 else if (data->hasFormat(it.key())
84 else if (data->hasFormat(it.key())
79 && it.value() == VisualizationDragDropContainer::DropBehavior::Inserted) {
85 && it.value() == VisualizationDragDropContainer::DropBehavior::Inserted)
86 {
80 // Merge is forbidden if the mime data contain an acceptable type which cannot be
87 // Merge is forbidden if the mime data contain an acceptable type which cannot be
81 // merged
88 // merged
82 result = false;
89 result = false;
83 break;
90 break;
84 }
91 }
85 }
92 }
86
93
87 return result;
94 return result;
88 }
95 }
89
96
90 bool allowInsertForMimeData(const QMimeData *data) const
97 bool allowInsertForMimeData(const QMimeData* data) const
91 {
98 {
92 for (auto it = m_AcceptedMimeTypes.constBegin(); it != m_AcceptedMimeTypes.constEnd();
99 for (auto it = m_AcceptedMimeTypes.constBegin(); it != m_AcceptedMimeTypes.constEnd(); ++it)
93 ++it) {
100 {
94 if (data->hasFormat(it.key())
101 if (data->hasFormat(it.key())
95 && (it.value() == VisualizationDragDropContainer::DropBehavior::Inserted
102 && (it.value() == VisualizationDragDropContainer::DropBehavior::Inserted
96 || it.value()
103 || it.value()
97 == VisualizationDragDropContainer::DropBehavior::InsertedAndMerged)) {
104 == VisualizationDragDropContainer::DropBehavior::InsertedAndMerged))
105 {
98 return true;
106 return true;
99 }
107 }
100 }
108 }
101
109
102 return false;
110 return false;
103 }
111 }
104
112
105 bool hasPlaceHolder() const
113 bool hasPlaceHolder() const
106 {
114 {
107 return sqpApp->dragDropGuiController().placeHolder().parentWidget()
115 return sqpApp->dragDropGuiController().placeHolder().parentWidget()
108 == m_Layout->parentWidget();
116 == m_Layout->parentWidget();
109 }
117 }
110
118
111 VisualizationDragWidget *getChildDragWidgetAt(const QWidget *parent, const QPoint &pos) const
119 VisualizationDragWidget* getChildDragWidgetAt(const QWidget* parent, const QPoint& pos) const
112 {
120 {
113 VisualizationDragWidget *dragWidget = nullptr;
121 VisualizationDragWidget* dragWidget = nullptr;
114
122
115 for (auto child : parent->children()) {
123 for (auto child : parent->children())
124 {
116 auto widget = qobject_cast<VisualizationDragWidget *>(child);
125 auto widget = qobject_cast<VisualizationDragWidget*>(child);
117 if (widget && widget->isVisible()) {
126 if (widget && widget->isVisible())
118 if (widget->frameGeometry().contains(pos)) {
127 {
128 if (widget->frameGeometry().contains(pos))
129 {
119 dragWidget = widget;
130 dragWidget = widget;
120 break;
131 break;
121 }
132 }
122 }
133 }
123 }
134 }
124
135
125 return dragWidget;
136 return dragWidget;
126 }
137 }
127
138
128 bool cursorIsInContainer(QWidget *container) const
139 bool cursorIsInContainer(QWidget* container) const
129 {
140 {
130 auto widgetUnderMouse = sqpApp->widgetAt(QCursor::pos());
141 auto widgetUnderMouse = sqpApp->widgetAt(QCursor::pos());
131 return container->isAncestorOf(widgetUnderMouse) && widgetUnderMouse != container
142 return container->isAncestorOf(widgetUnderMouse) && widgetUnderMouse != container
132 && sqpApp->dragDropGuiController().placeHolder().isAncestorOf(widgetUnderMouse);
143 && sqpApp->dragDropGuiController().placeHolder().isAncestorOf(widgetUnderMouse);
133 }
144 }
134
145
135 int countDragWidget(const QWidget *parent, bool onlyVisible = false) const
146 int countDragWidget(const QWidget* parent, bool onlyVisible = false) const
136 {
147 {
137 auto nbGraph = 0;
148 auto nbGraph = 0;
138 for (auto child : parent->children()) {
149 for (auto child : parent->children())
139 if (qobject_cast<VisualizationDragWidget *>(child)) {
150 {
140 if (!onlyVisible || qobject_cast<VisualizationDragWidget *>(child)->isVisible()) {
151 if (qobject_cast<VisualizationDragWidget*>(child))
152 {
153 if (!onlyVisible || qobject_cast<VisualizationDragWidget*>(child)->isVisible())
154 {
141 nbGraph += 1;
155 nbGraph += 1;
142 }
156 }
143 }
157 }
144 }
158 }
145
159
146 return nbGraph;
160 return nbGraph;
147 }
161 }
148
162
149 bool findPlaceHolderPosition(const QPoint &pos, const QMimeData *mimeData, bool canInsert,
163 bool findPlaceHolderPosition(const QPoint& pos, const QMimeData* mimeData, bool canInsert,
150 bool canMerge, const VisualizationDragDropContainer *container);
164 bool canMerge, const VisualizationDragDropContainer* container);
151 };
165 };
152
166
153 VisualizationDragDropContainer::VisualizationDragDropContainer(QWidget *parent)
167 VisualizationDragDropContainer::VisualizationDragDropContainer(QWidget* parent)
154 : QFrame{parent},
168 : QFrame { parent }
155 impl{spimpl::make_unique_impl<VisualizationDragDropContainerPrivate>(this)}
169 , impl { spimpl::make_unique_impl<VisualizationDragDropContainerPrivate>(this) }
156 {
170 {
157 setAcceptDrops(true);
171 setAcceptDrops(true);
158 }
172 }
159
173
160 void VisualizationDragDropContainer::addDragWidget(VisualizationDragWidget *dragWidget)
174 void VisualizationDragDropContainer::addDragWidget(VisualizationDragWidget* dragWidget)
161 {
175 {
162 impl->m_Layout->addWidget(dragWidget);
176 impl->m_Layout->addWidget(dragWidget);
163 disconnect(dragWidget, &VisualizationDragWidget::dragDetected, nullptr, nullptr);
177 disconnect(dragWidget, &VisualizationDragWidget::dragDetected, nullptr, nullptr);
164 connect(dragWidget, &VisualizationDragWidget::dragDetected, this,
178 connect(dragWidget, &VisualizationDragWidget::dragDetected, this,
165 &VisualizationDragDropContainer::startDrag);
179 &VisualizationDragDropContainer::startDrag);
166 }
180 }
167
181
168 void VisualizationDragDropContainer::insertDragWidget(int index,
182 void VisualizationDragDropContainer::insertDragWidget(
169 VisualizationDragWidget *dragWidget)
183 int index, VisualizationDragWidget* dragWidget)
170 {
184 {
171 impl->m_Layout->insertWidget(index, dragWidget);
185 impl->m_Layout->insertWidget(index, dragWidget);
172 disconnect(dragWidget, &VisualizationDragWidget::dragDetected, nullptr, nullptr);
186 disconnect(dragWidget, &VisualizationDragWidget::dragDetected, nullptr, nullptr);
173 connect(dragWidget, &VisualizationDragWidget::dragDetected, this,
187 connect(dragWidget, &VisualizationDragWidget::dragDetected, this,
174 &VisualizationDragDropContainer::startDrag);
188 &VisualizationDragDropContainer::startDrag);
175 }
189 }
176
190
177 void VisualizationDragDropContainer::setMimeType(
191 void VisualizationDragDropContainer::setMimeType(
178 const QString &mimeType, VisualizationDragDropContainer::DropBehavior behavior)
192 const QString& mimeType, VisualizationDragDropContainer::DropBehavior behavior)
179 {
193 {
180 impl->m_AcceptedMimeTypes[mimeType] = behavior;
194 impl->m_AcceptedMimeTypes[mimeType] = behavior;
181 }
195 }
182
196
183 int VisualizationDragDropContainer::countDragWidget() const
197 int VisualizationDragDropContainer::countDragWidget() const
184 {
198 {
185 return impl->countDragWidget(this);
199 return impl->countDragWidget(this);
186 }
200 }
187
201
188 void VisualizationDragDropContainer::setAcceptMimeDataFunction(
202 void VisualizationDragDropContainer::setAcceptMimeDataFunction(
189 VisualizationDragDropContainer::AcceptMimeDataFunction fun)
203 VisualizationDragDropContainer::AcceptMimeDataFunction fun)
190 {
204 {
191 impl->m_AcceptMimeDataFun = fun;
205 impl->m_AcceptMimeDataFun = fun;
192 }
206 }
193
207
194 void VisualizationDragDropContainer::setAcceptDragWidgetFunction(
208 void VisualizationDragDropContainer::setAcceptDragWidgetFunction(
195 VisualizationDragDropContainer::AcceptDragWidgetFunction fun)
209 VisualizationDragDropContainer::AcceptDragWidgetFunction fun)
196 {
210 {
197 impl->m_AcceptDragWidgetFun = fun;
211 impl->m_AcceptDragWidgetFun = fun;
198 }
212 }
199
213
200 void VisualizationDragDropContainer::setPlaceHolderType(DragDropGuiController::PlaceHolderType type,
214 void VisualizationDragDropContainer::setPlaceHolderType(
201 const QString &placeHolderText)
215 DragDropGuiController::PlaceHolderType type, const QString& placeHolderText)
202 {
216 {
203 impl->m_PlaceHolderType = type;
217 impl->m_PlaceHolderType = type;
204 impl->m_PlaceHolderText = placeHolderText;
218 impl->m_PlaceHolderText = placeHolderText;
205 }
219 }
206
220
207 void VisualizationDragDropContainer::startDrag(VisualizationDragWidget *dragWidget,
221 void VisualizationDragDropContainer::startDrag(
208 const QPoint &dragPosition)
222 VisualizationDragWidget* dragWidget, const QPoint& dragPosition)
209 {
223 {
210 auto &helper = sqpApp->dragDropGuiController();
224 auto& helper = sqpApp->dragDropGuiController();
211 helper.resetDragAndDrop();
225 helper.resetDragAndDrop();
212
226
213 // Note: The management of the drag object is done by Qt
227 // Note: The management of the drag object is done by Qt
214 auto drag = new QDrag{dragWidget};
228 auto drag = new QDrag { dragWidget };
215
229
216 auto mimeData = dragWidget->mimeData(dragPosition);
230 auto mimeData = dragWidget->mimeData(dragPosition);
217 drag->setMimeData(mimeData);
231 drag->setMimeData(mimeData);
218
232
219 auto pixmap = dragWidget->customDragPixmap(dragPosition);
233 auto pixmap = dragWidget->customDragPixmap(dragPosition);
220 if (pixmap.isNull()) {
234 if (pixmap.isNull())
235 {
221 pixmap = QPixmap{dragWidget->size()};
236 pixmap = QPixmap { dragWidget->size() };
222 dragWidget->render(&pixmap);
237 dragWidget->render(&pixmap);
223 }
238 }
224
239
225 drag->setPixmap(pixmap.scaled(DRAGGED_MINIATURE_WIDTH, DRAGGED_MINIATURE_WIDTH,
240 drag->setPixmap(pixmap.scaled(DRAGGED_MINIATURE_WIDTH, DRAGGED_MINIATURE_WIDTH,
226 Qt::KeepAspectRatio, Qt::SmoothTransformation));
241 Qt::KeepAspectRatio, Qt::SmoothTransformation));
227
242
228 auto image = pixmap.toImage();
243 auto image = pixmap.toImage();
229 mimeData->setImageData(image);
244 mimeData->setImageData(image);
230 mimeData->setUrls({helper.imageTemporaryUrl(image)});
245 mimeData->setUrls({ helper.imageTemporaryUrl(image) });
231
246
232 if (impl->m_Layout->indexOf(dragWidget) >= 0) {
247 if (impl->m_Layout->indexOf(dragWidget) >= 0)
248 {
233
249
234 if (impl->acceptMimeData(mimeData) && impl->allowInsertForMimeData(mimeData)) {
250 if (impl->acceptMimeData(mimeData) && impl->allowInsertForMimeData(mimeData))
251 {
235 helper.setCurrentDragWidget(dragWidget);
252 helper.setCurrentDragWidget(dragWidget);
236
253
237 if (impl->cursorIsInContainer(this)) {
254 if (impl->cursorIsInContainer(this))
255 {
238 auto dragWidgetIndex = impl->m_Layout->indexOf(dragWidget);
256 auto dragWidgetIndex = impl->m_Layout->indexOf(dragWidget);
239 helper.insertPlaceHolder(impl->m_Layout, dragWidgetIndex, impl->m_PlaceHolderType,
257 helper.insertPlaceHolder(impl->m_Layout, dragWidgetIndex, impl->m_PlaceHolderType,
240 impl->m_PlaceHolderText);
258 impl->m_PlaceHolderText);
241 dragWidget->setVisible(false);
259 dragWidget->setVisible(false);
242 }
260 }
243 else {
261 else
262 {
244 // The drag starts directly outside the drop zone
263 // The drag starts directly outside the drop zone
245 // do not add the placeHolder
264 // do not add the placeHolder
246 }
265 }
247 }
266 }
248
267
249 drag->exec(Qt::MoveAction | Qt::CopyAction, Qt::MoveAction);
268 drag->exec(Qt::MoveAction | Qt::CopyAction, Qt::MoveAction);
250
269
251 helper.doCloseWidgets();
270 helper.doCloseWidgets();
252 }
271 }
253 else {
272 else
273 {
254 qCWarning(LOG_VisualizationDragDropContainer())
274 qCWarning(LOG_VisualizationDragDropContainer())
255 << tr("VisualizationDragDropContainer::startDrag, drag aborted, the specified "
275 << tr("VisualizationDragDropContainer::startDrag, drag aborted, the specified "
256 "VisualizationDragWidget is not found in this container.");
276 "VisualizationDragWidget is not found in this container.");
257 }
277 }
258 }
278 }
259
279
260 void VisualizationDragDropContainer::dragEnterEvent(QDragEnterEvent *event)
280 void VisualizationDragDropContainer::dragEnterEvent(QDragEnterEvent* event)
261 {
281 {
262 if (impl->acceptMimeData(event->mimeData())) {
282 if (impl->acceptMimeData(event->mimeData()))
283 {
263 event->acceptProposedAction();
284 event->acceptProposedAction();
264
285
265 auto &helper = sqpApp->dragDropGuiController();
286 auto& helper = sqpApp->dragDropGuiController();
266
287
267 if (!impl->hasPlaceHolder()) {
288 if (!impl->hasPlaceHolder())
289 {
268 auto dragWidget = helper.getCurrentDragWidget();
290 auto dragWidget = helper.getCurrentDragWidget();
269
291
270 if (dragWidget) {
292 if (dragWidget)
293 {
271 // If the drag&drop is internal to the visualization, entering the container hide
294 // If the drag&drop is internal to the visualization, entering the container hide
272 // the dragWidget which was made visible by the dragLeaveEvent
295 // the dragWidget which was made visible by the dragLeaveEvent
273 auto parentWidget
296 auto parentWidget
274 = qobject_cast<VisualizationDragDropContainer *>(dragWidget->parentWidget());
297 = qobject_cast<VisualizationDragDropContainer*>(dragWidget->parentWidget());
275 if (parentWidget) {
298 if (parentWidget)
299 {
276 dragWidget->setVisible(false);
300 dragWidget->setVisible(false);
277 }
301 }
278 }
302 }
279
303
280 auto canMerge = impl->allowMergeForMimeData(event->mimeData());
304 auto canMerge = impl->allowMergeForMimeData(event->mimeData());
281 auto canInsert = impl->allowInsertForMimeData(event->mimeData());
305 auto canInsert = impl->allowInsertForMimeData(event->mimeData());
282 if (!impl->findPlaceHolderPosition(event->pos(), event->mimeData(), canInsert, canMerge,
306 if (!impl->findPlaceHolderPosition(
283 this)) {
307 event->pos(), event->mimeData(), canInsert, canMerge, this))
308 {
284 event->ignore();
309 event->ignore();
285 }
310 }
286 }
311 }
287 else {
312 else
313 {
288 // do nothing
314 // do nothing
289 }
315 }
290 }
316 }
291 else {
317 else
318 {
292 event->ignore();
319 event->ignore();
293 }
320 }
294
321
295 QWidget::dragEnterEvent(event);
322 QWidget::dragEnterEvent(event);
296 }
323 }
297
324
298 void VisualizationDragDropContainer::dragLeaveEvent(QDragLeaveEvent *event)
325 void VisualizationDragDropContainer::dragLeaveEvent(QDragLeaveEvent* event)
299 {
326 {
300 Q_UNUSED(event);
327 Q_UNUSED(event);
301
328
302 auto &helper = sqpApp->dragDropGuiController();
329 auto& helper = sqpApp->dragDropGuiController();
303
330
304 if (!impl->cursorIsInContainer(this)) {
331 if (!impl->cursorIsInContainer(this))
332 {
305 helper.removePlaceHolder();
333 helper.removePlaceHolder();
306 helper.setHightlightedDragWidget(nullptr);
334 helper.setHightlightedDragWidget(nullptr);
307 impl->m_MinContainerHeight = 0;
335 impl->m_MinContainerHeight = 0;
308
336
309 auto dragWidget = helper.getCurrentDragWidget();
337 auto dragWidget = helper.getCurrentDragWidget();
310 if (dragWidget) {
338 if (dragWidget)
339 {
311 // dragWidget has a value only if the drag is started from the visualization
340 // dragWidget has a value only if the drag is started from the visualization
312 // In that case, shows the drag widget at its original place
341 // In that case, shows the drag widget at its original place
313 // So the drag widget doesn't stay hidden if the drop occurs outside the visualization
342 // So the drag widget doesn't stay hidden if the drop occurs outside the visualization
314 // drop zone (It is not possible to catch a drop event outside of the application)
343 // drop zone (It is not possible to catch a drop event outside of the application)
315
344
316 if (dragWidget) {
345 if (dragWidget)
346 {
317 dragWidget->setVisible(true);
347 dragWidget->setVisible(true);
318 }
348 }
319 }
349 }
320 }
350 }
321 else {
351 else
352 {
322 // Leave event probably received for a child widget.
353 // Leave event probably received for a child widget.
323 // Do nothing.
354 // Do nothing.
324 // Note: The DragLeave event, doesn't have any mean to determine who sent it.
355 // Note: The DragLeave event, doesn't have any mean to determine who sent it.
325 }
356 }
326
357
327 QWidget::dragLeaveEvent(event);
358 QWidget::dragLeaveEvent(event);
328 }
359 }
329
360
330 void VisualizationDragDropContainer::dragMoveEvent(QDragMoveEvent *event)
361 void VisualizationDragDropContainer::dragMoveEvent(QDragMoveEvent* event)
331 {
362 {
332 if (impl->acceptMimeData(event->mimeData())) {
363 if (impl->acceptMimeData(event->mimeData()))
364 {
365 event->acceptProposedAction();
333 auto canMerge = impl->allowMergeForMimeData(event->mimeData());
366 auto canMerge = impl->allowMergeForMimeData(event->mimeData());
334 auto canInsert = impl->allowInsertForMimeData(event->mimeData());
367 auto canInsert = impl->allowInsertForMimeData(event->mimeData());
335 impl->findPlaceHolderPosition(event->pos(), event->mimeData(), canInsert, canMerge, this);
368 impl->findPlaceHolderPosition(event->pos(), event->mimeData(), canInsert, canMerge, this);
336 }
369 }
337 else {
370 else
371 {
338 event->ignore();
372 event->ignore();
339 }
373 }
340
374
341 QWidget::dragMoveEvent(event);
375 QWidget::dragMoveEvent(event);
342 }
376 }
343
377
344 void VisualizationDragDropContainer::dropEvent(QDropEvent *event)
378 void VisualizationDragDropContainer::dropEvent(QDropEvent* event)
345 {
379 {
346 auto &helper = sqpApp->dragDropGuiController();
380 auto& helper = sqpApp->dragDropGuiController();
347
381
348 if (impl->acceptMimeData(event->mimeData())) {
382 if (impl->acceptMimeData(event->mimeData()))
383 {
349 auto dragWidget = helper.getCurrentDragWidget();
384 auto dragWidget = helper.getCurrentDragWidget();
350 if (impl->hasPlaceHolder()) {
385 if (impl->hasPlaceHolder())
386 {
351 // drop where the placeHolder is located
387 // drop where the placeHolder is located
352
388
353 auto canInsert = impl->allowInsertForMimeData(event->mimeData());
389 auto canInsert = impl->allowInsertForMimeData(event->mimeData());
354 if (canInsert) {
390 if (canInsert)
391 {
355 auto droppedIndex = impl->m_Layout->indexOf(&helper.placeHolder());
392 auto droppedIndex = impl->m_Layout->indexOf(&helper.placeHolder());
356
393
357 if (dragWidget) {
394 if (dragWidget)
395 {
358 auto dragWidgetIndex = impl->m_Layout->indexOf(dragWidget);
396 auto dragWidgetIndex = impl->m_Layout->indexOf(dragWidget);
359 if (dragWidgetIndex >= 0 && dragWidgetIndex < droppedIndex) {
397 if (dragWidgetIndex >= 0 && dragWidgetIndex < droppedIndex)
398 {
360 // Correction of the index if the drop occurs in the same container
399 // Correction of the index if the drop occurs in the same container
361 // and if the drag is started from the visualization (in that case, the
400 // and if the drag is started from the visualization (in that case, the
362 // dragWidget is hidden)
401 // dragWidget is hidden)
363 droppedIndex -= 1;
402 droppedIndex -= 1;
364 }
403 }
365
404
366 dragWidget->setVisible(true);
405 dragWidget->setVisible(true);
367 }
406 }
368
407
369 event->acceptProposedAction();
408 event->acceptProposedAction();
370
409
371 helper.removePlaceHolder();
410 helper.removePlaceHolder();
372
411
373 emit dropOccuredInContainer(droppedIndex, event->mimeData());
412 emit dropOccuredInContainer(droppedIndex, event->mimeData());
374 }
413 }
375 else {
414 else
415 {
376 qCWarning(LOG_VisualizationDragDropContainer()) << tr(
416 qCWarning(LOG_VisualizationDragDropContainer()) << tr(
377 "VisualizationDragDropContainer::dropEvent, dropping on the placeHolder, but "
417 "VisualizationDragDropContainer::dropEvent, dropping on the placeHolder, but "
378 "the insertion is forbidden.");
418 "the insertion is forbidden.");
379 Q_ASSERT(false);
419 Q_ASSERT(false);
380 }
420 }
381 }
421 }
382 else if (helper.getHightlightedDragWidget()) {
422 else if (helper.getHightlightedDragWidget())
423 {
383 // drop on the highlighted widget
424 // drop on the highlighted widget
384
425
385 auto canMerge = impl->allowMergeForMimeData(event->mimeData());
426 auto canMerge = impl->allowMergeForMimeData(event->mimeData());
386 if (canMerge) {
427 if (canMerge)
428 {
387 event->acceptProposedAction();
429 event->acceptProposedAction();
388 emit dropOccuredOnWidget(helper.getHightlightedDragWidget(), event->mimeData());
430 emit dropOccuredOnWidget(helper.getHightlightedDragWidget(), event->mimeData());
389 }
431 }
390 else {
432 else
433 {
391 qCWarning(LOG_VisualizationDragDropContainer())
434 qCWarning(LOG_VisualizationDragDropContainer())
392 << tr("VisualizationDragDropContainer::dropEvent, dropping on a widget, but "
435 << tr("VisualizationDragDropContainer::dropEvent, dropping on a widget, but "
393 "the merge is forbidden.");
436 "the merge is forbidden.");
394 Q_ASSERT(false);
437 Q_ASSERT(false);
395 }
438 }
396 }
439 }
397 }
440 }
398 else {
441 else
442 {
399 event->ignore();
443 event->ignore();
400 }
444 }
401
445
402 sqpApp->dragDropGuiController().setHightlightedDragWidget(nullptr);
446 sqpApp->dragDropGuiController().setHightlightedDragWidget(nullptr);
403 impl->m_MinContainerHeight = 0;
447 impl->m_MinContainerHeight = 0;
404
448
405 QWidget::dropEvent(event);
449 QWidget::dropEvent(event);
406 }
450 }
407
451
408
452
409 bool VisualizationDragDropContainer::VisualizationDragDropContainerPrivate::findPlaceHolderPosition(
453 bool VisualizationDragDropContainer::VisualizationDragDropContainerPrivate::findPlaceHolderPosition(
410 const QPoint &pos, const QMimeData *mimeData, bool canInsert, bool canMerge,
454 const QPoint& pos, const QMimeData* mimeData, bool canInsert, bool canMerge,
411 const VisualizationDragDropContainer *container)
455 const VisualizationDragDropContainer* container)
412 {
456 {
413 auto &helper = sqpApp->dragDropGuiController();
457 auto& helper = sqpApp->dragDropGuiController();
414
458
415 auto absPos = container->mapToGlobal(pos);
459 auto absPos = container->mapToGlobal(pos);
416 auto isOnPlaceHolder = helper.placeHolder().isAncestorOf(sqpApp->widgetAt(absPos));
460 auto isOnPlaceHolder = helper.placeHolder().isAncestorOf(sqpApp->widgetAt(absPos));
417
461
418 if (countDragWidget(container, true) == 0) {
462 if (countDragWidget(container, true) == 0)
463 {
419 // Drop on an empty container, just add the placeHolder at the top
464 // Drop on an empty container, just add the placeHolder at the top
420 helper.insertPlaceHolder(m_Layout, 0, m_PlaceHolderType, m_PlaceHolderText);
465 helper.insertPlaceHolder(m_Layout, 0, m_PlaceHolderType, m_PlaceHolderText);
421 }
466 }
422 else if (!isOnPlaceHolder) {
467 else if (!isOnPlaceHolder)
468 {
423 auto nbDragWidget = countDragWidget(container);
469 auto nbDragWidget = countDragWidget(container);
424 if (nbDragWidget > 0) {
470 if (nbDragWidget > 0)
471 {
425
472
426 if (m_MinContainerHeight == 0) {
473 if (m_MinContainerHeight == 0)
474 {
427 m_MinContainerHeight = container->size().height();
475 m_MinContainerHeight = container->size().height();
428 }
476 }
429
477
430 m_MinContainerHeight = qMin(m_MinContainerHeight, container->size().height());
478 m_MinContainerHeight = qMin(m_MinContainerHeight, container->size().height());
431 auto graphHeight = qMax(m_MinContainerHeight / nbDragWidget, GRAPH_MINIMUM_HEIGHT);
479 auto graphHeight = qMax(m_MinContainerHeight / nbDragWidget, GRAPH_MINIMUM_HEIGHT);
432
480
433 auto posY = pos.y();
481 auto posY = pos.y();
434 auto dropIndex = floor(posY / graphHeight);
482 auto dropIndex = floor(posY / graphHeight);
435 auto zoneSize = graphHeight / 4.0;
483 auto zoneSize = graphHeight / 4.0;
436
484
437
485
438 auto isOnTop = posY < dropIndex * graphHeight + zoneSize;
486 auto isOnTop = posY < dropIndex * graphHeight + zoneSize;
439 auto isOnBottom = posY > (dropIndex + 1) * graphHeight - zoneSize;
487 auto isOnBottom = posY > (dropIndex + 1) * graphHeight - zoneSize;
440
488
441 auto placeHolderIndex = m_Layout->indexOf(&(helper.placeHolder()));
489 auto placeHolderIndex = m_Layout->indexOf(&(helper.placeHolder()));
442
490
443 auto dragWidgetHovered = getChildDragWidgetAt(container, pos);
491 auto dragWidgetHovered = getChildDragWidgetAt(container, pos);
444
492
445 auto acceptMerge = m_AcceptDragWidgetFun(dragWidgetHovered, mimeData);
493 auto acceptMerge = m_AcceptDragWidgetFun(dragWidgetHovered, mimeData);
446
494
447 if (canInsert && (isOnTop || isOnBottom || !canMerge || !acceptMerge)) {
495 if (canInsert && (isOnTop || isOnBottom || !canMerge || !acceptMerge))
448 if (posY > (dropIndex + 1) * graphHeight - graphHeight / 2.0) {
496 {
497 if (posY > (dropIndex + 1) * graphHeight - graphHeight / 2.0)
498 {
449 dropIndex += 1;
499 dropIndex += 1;
450 }
500 }
451
501
452 if (helper.getCurrentDragWidget()) {
502 if (helper.getCurrentDragWidget())
503 {
453 auto dragWidgetIndex = m_Layout->indexOf(helper.getCurrentDragWidget());
504 auto dragWidgetIndex = m_Layout->indexOf(helper.getCurrentDragWidget());
454 if (dragWidgetIndex >= 0 && dragWidgetIndex <= dropIndex) {
505 if (dragWidgetIndex >= 0 && dragWidgetIndex <= dropIndex)
506 {
455 // Correction of the index if the drop occurs in the same container
507 // Correction of the index if the drop occurs in the same container
456 // and if the drag is started from the visualization (in that case, the
508 // and if the drag is started from the visualization (in that case, the
457 // dragWidget is hidden)
509 // dragWidget is hidden)
458 dropIndex += 1;
510 dropIndex += 1;
459 }
511 }
460 }
512 }
461
513
462 if (dropIndex != placeHolderIndex) {
514 if (dropIndex != placeHolderIndex)
463 helper.insertPlaceHolder(m_Layout, dropIndex, m_PlaceHolderType,
515 {
464 m_PlaceHolderText);
516 helper.insertPlaceHolder(
517 m_Layout, dropIndex, m_PlaceHolderType, m_PlaceHolderText);
465 }
518 }
466
519
467 helper.setHightlightedDragWidget(nullptr);
520 helper.setHightlightedDragWidget(nullptr);
468 }
521 }
469 else if (canMerge && dragWidgetHovered) {
522 else if (canMerge && dragWidgetHovered)
523 {
470 // drop on the middle -> merge
524 // drop on the middle -> merge
471 if (hasPlaceHolder()) {
525 if (hasPlaceHolder())
526 {
472 helper.removePlaceHolder();
527 helper.removePlaceHolder();
473 }
528 }
474
529
475 helper.setHightlightedDragWidget(dragWidgetHovered);
530 helper.setHightlightedDragWidget(dragWidgetHovered);
476 }
531 }
477 else {
532 else
533 {
478 qCWarning(LOG_VisualizationDragDropContainer())
534 qCWarning(LOG_VisualizationDragDropContainer())
479 << tr("VisualizationDragDropContainer::findPlaceHolderPosition, no valid drop "
535 << tr("VisualizationDragDropContainer::findPlaceHolderPosition, no valid drop "
480 "action.");
536 "action.");
481 }
537 }
482 }
538 }
483 else {
539 else
540 {
484 qCInfo(LOG_VisualizationDragDropContainer())
541 qCInfo(LOG_VisualizationDragDropContainer())
485 << tr("VisualizationDragDropContainer::findPlaceHolderPosition, no widget "
542 << tr("VisualizationDragDropContainer::findPlaceHolderPosition, no widget "
486 "found in the "
543 "found in the "
487 "container");
544 "container");
488 }
545 }
489 }
546 }
490 else {
547 else
548 {
491 // the mouse is hover the placeHolder
549 // the mouse is hover the placeHolder
492 // Do nothing
550 // Do nothing
493 }
551 }
494
552
495 return true;
553 return true;
496 }
554 }
1 NO CONTENT: modified file
NO CONTENT: modified file
@@ -1,70 +1,78
1
1
2 amdaplugin_moc_headers = [
2 amdaplugin_moc_headers = [
3 'include/AmdaPlugin.h',
3 'include/AmdaPlugin.h',
4 'include/AmdaProvider.h'
4 'include/AmdaProvider.h'
5 ]
5 ]
6
6
7 amdaplugin_sources = [
7 amdaplugin_sources = [
8 'src/AmdaDefs.cpp',
8 'src/AmdaDefs.cpp',
9 'src/AmdaParser.cpp',
9 'src/AmdaParser.cpp',
10 'src/AmdaPlugin.cpp',
10 'src/AmdaPlugin.cpp',
11 'src/AmdaProvider.cpp',
11 'src/AmdaProvider.cpp',
12 'src/AmdaResultParser.cpp',
12 'src/AmdaResultParser.cpp',
13 'src/AmdaResultParserDefs.cpp',
13 'src/AmdaResultParserDefs.cpp',
14 'src/AmdaResultParserHelper.cpp',
14 'src/AmdaResultParserHelper.cpp',
15 'src/AmdaServer.cpp'
15 'src/AmdaServer.cpp'
16 ]
16 ]
17
17
18 amdaplugin_ui_files = []
18 amdaplugin_ui_files = []
19 amdaplugin_resources_files = [
19 amdaplugin_resources_files = [
20 'resources/amdaresources.qrc'
20 'resources/amdaresources.qrc'
21 ]
21 ]
22
22
23 amdaplugin_inc = include_directories(['include'])
23 amdaplugin_inc = include_directories(['include'])
24
24
25 amdaplugin_prep_files = qt5.preprocess(moc_headers : amdaplugin_moc_headers,
25 amdaplugin_prep_files = qt5.preprocess(moc_headers : amdaplugin_moc_headers,
26 moc_extra_arguments: ['-DSCIQLOP_PLUGIN_JSON_FILE_PATH="'+
26 moc_extra_arguments: ['-DSCIQLOP_PLUGIN_JSON_FILE_PATH="'+
27 meson.source_root()+
27 meson.source_root()+
28 '/plugins/amda/resources/amda.json"'],
28 '/plugins/amda/resources/amda.json"'],
29 include_directories: [amdaplugin_inc, core_inc],
29 include_directories: [amdaplugin_inc, core_inc],
30 qresources : amdaplugin_resources_files,
30 qresources : amdaplugin_resources_files,
31 ui_files : amdaplugin_ui_files)
31 ui_files : amdaplugin_ui_files)
32
32
33 cpp_args = ['-DAMDA_LIB','-DQT_PLUGIN']
34 message('======================='+get_option('default_library')+'==========================')
35 if(get_option('default_library') == 'static')
36 message('building amda plugin as static lib')
37 cpp_args += ['-DQT_STATICPLUGIN']
38 endif
39
33 sciqlop_amdaplugin = library('amdaplugin',
40 sciqlop_amdaplugin = library('amdaplugin',
34 amdaplugin_sources,
41 amdaplugin_sources,
35 amdaplugin_prep_files,
42 amdaplugin_prep_files,
36 cpp_args : ['-DAMDA_LIB','-DQT_PLUGIN'],
43 cpp_args : cpp_args,
37 include_directories : [amdaplugin_inc],
44 include_directories : [amdaplugin_inc],
38 dependencies : [sciqlop_core, sciqlop_gui],
45 dependencies : [sciqlop_core, sciqlop_gui],
39 install : true
46 install : true,
47 install_dir : join_paths(get_option('libdir'), 'SciQLop')
40 )
48 )
41
49
42
50
43 tests = [
51 tests = [
44 [['tests/TestAmdaParser.cpp'],'test_amda_parser','AMDA parser test'],
52 [['tests/TestAmdaParser.cpp'],'test_amda_parser','AMDA parser test'],
45 [['tests/TestAmdaResultParser.cpp'],'test_amda_result_parser','AMDA result parser test'],
53 [['tests/TestAmdaResultParser.cpp'],'test_amda_result_parser','AMDA result parser test'],
46 [['tests/TestAmdaAcquisition.cpp'],'test_amda_acquisition','AMDA Acquisition test'],
54 [['tests/TestAmdaAcquisition.cpp'],'test_amda_acquisition','AMDA Acquisition test'],
47 [['tests/TestAmdaFuzzing.cpp'],'test_amda_fuzzing','AMDA fuzzing test']
55 [['tests/TestAmdaFuzzing.cpp'],'test_amda_fuzzing','AMDA fuzzing test']
48 ]
56 ]
49
57
50 tests_sources = [
58 tests_sources = [
51 'tests/FuzzingDefs.h',
59 'tests/FuzzingDefs.h',
52 'tests/FuzzingDefs.cpp',
60 'tests/FuzzingDefs.cpp',
53 'tests/FuzzingOperations.h',
61 'tests/FuzzingOperations.h',
54 'tests/FuzzingOperations.cpp',
62 'tests/FuzzingOperations.cpp',
55 'tests/FuzzingUtils.h',
63 'tests/FuzzingUtils.h',
56 'tests/FuzzingUtils.cpp',
64 'tests/FuzzingUtils.cpp',
57 'tests/FuzzingValidators.h',
65 'tests/FuzzingValidators.h',
58 'tests/FuzzingValidators.cpp'
66 'tests/FuzzingValidators.cpp'
59 ]
67 ]
60
68
61 foreach unit_test : tests
69 foreach unit_test : tests
62 test_moc_files = qt5.preprocess(moc_sources : unit_test[0])
70 test_moc_files = qt5.preprocess(moc_sources : unit_test[0])
63 test_exe = executable(unit_test[1],unit_test[0] , test_moc_files,
71 test_exe = executable(unit_test[1],unit_test[0] , test_moc_files,
64 link_with : [sciqlop_amdaplugin],
72 link_with : [sciqlop_amdaplugin],
65 include_directories : [amdaplugin_inc],
73 include_directories : [amdaplugin_inc],
66 cpp_args : ['-DAMDA_TESTS_RESOURCES_DIR="'+meson.current_source_dir()+'/tests-resources"'],
74 cpp_args : ['-DAMDA_TESTS_RESOURCES_DIR="'+meson.current_source_dir()+'/tests-resources"'],
67 sources : [tests_sources],
75 sources : [tests_sources],
68 dependencies : [sciqlop_core, sciqlop_gui, qt5test])
76 dependencies : [sciqlop_core, sciqlop_gui, qt5test])
69 test(unit_test[2], test_exe, args: ['-teamcity', '-o', '@0@.teamcity.txt'.format(unit_test[1])], timeout: 3 * 60)
77 test(unit_test[2], test_exe, args: ['-teamcity', '-o', '@0@.teamcity.txt'.format(unit_test[1])], timeout: 3 * 60)
70 endforeach
78 endforeach
@@ -1,32 +1,38
1
1
2 mockplugin_moc_headers = [
2 mockplugin_moc_headers = [
3 'include/MockPlugin.h'
3 'include/MockPlugin.h'
4 ]
4 ]
5
5
6 mockplugin_sources = [
6 mockplugin_sources = [
7 'src/MockDefs.cpp',
7 'src/MockDefs.cpp',
8 'src/CosinusProvider.cpp',
8 'src/CosinusProvider.cpp',
9 'src/MockPlugin.cpp'
9 'src/MockPlugin.cpp'
10 ]
10 ]
11
11
12 mockplugin_inc = include_directories(['include'])
12 mockplugin_inc = include_directories(['include'])
13
13
14
14
15 gen = generator(moc,
15 gen = generator(moc,
16 output : 'moc_@BASENAME@.cpp',
16 output : 'moc_@BASENAME@.cpp',
17 arguments : ['@INPUT@',
17 arguments : ['@INPUT@',
18 '-DPLUGIN_JSON_FILE_PATH="'+meson.source_root()+'/plugins/mockplugin/resources/mockplugin.json"',
18 '-DPLUGIN_JSON_FILE_PATH="'+meson.source_root()+'/plugins/mockplugin/resources/mockplugin.json"',
19 '-I', meson.current_source_dir()+'/include',
19 '-I', meson.current_source_dir()+'/include',
20 '-I', meson.current_source_dir()+'/../../core/include/',
20 '-I', meson.current_source_dir()+'/../../core/include/',
21 '-o', '@OUTPUT@'])
21 '-o', '@OUTPUT@'])
22
22
23 mockplugin_moc_files = gen.process(mockplugin_moc_headers)
23 mockplugin_moc_files = gen.process(mockplugin_moc_headers)
24
24
25 cpp_args = ['-DMOCKPLUGIN_LIB','-DQT_PLUGIN']
26 if(get_option('default_library')=='static')
27 cpp_args += ['-DQT_STATICPLUGIN']
28 endif
29
25 sciqlop_mockplugin = library('mockplugin',
30 sciqlop_mockplugin = library('mockplugin',
26 mockplugin_sources,
31 mockplugin_sources,
27 mockplugin_moc_files,
32 mockplugin_moc_files,
28 cpp_args : '-DMOCKPLUGIN_LIB',
33 cpp_args : cpp_args,
29 include_directories : [mockplugin_inc],
34 include_directories : [mockplugin_inc],
30 dependencies : [sciqlop_core, sciqlop_gui],
35 dependencies : [sciqlop_core, sciqlop_gui],
31 install : true
36 install : true,
37 install_dir : join_paths(get_option('libdir'), 'SciQLop')
32 )
38 )
General Comments 0
You need to be logged in to leave comments. Login now