1 // Copyright (c) 2008 INRIA Sophia Antipolis, INRIA Nancy (France).
2 // All rights reserved.
3 //
4 // This file is part of CGAL (www.cgal.org).
5 //
6 // $URL: https://github.com/CGAL/cgal/blob/v5.3/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/include/internal/Qt/TriangulationConflictZone.h $
7 // $Id: TriangulationConflictZone.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot
8 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
9 //
10 // Author(s) : Andreas Fabri <Andreas.Fabri@geometryfactory.com>
11 //
12
13 #ifndef CGAL_QT_TRIANGULATION_CONFLICT_ZONE
14 #define CGAL_QT_TRIANGULATION_CONFLICT_ZONE
15
16 #include <CGAL/Qt/GraphicsViewInput.h>
17 #include <CGAL/Qt/Converter.h>
18 #include <CGAL/Qt/TriangulationGraphicsItem.h>
19 #include <QGraphicsSceneMouseEvent>
20 #include <QEvent>
21 #include <list>
22
23 namespace CGAL {
24 namespace Qt {
25
26 template <typename DT>
27 class TriangulationConflictZone : public GraphicsViewInput
28 {
29 public:
30 typedef typename DT::Geom_traits K;
31 typedef typename DT::Face_handle Face_handle;
32 typedef typename DT::Point Point;
33 typedef typename DT::Hyperbolic_translation Hyperbolic_translation;
34 typedef typename DT::Hyperbolic_triangle Triangle;
35
36 TriangulationConflictZone(QGraphicsScene* s, DT * dt_, QObject* parent);
37
38 protected:
39
40 void mousePressEvent(QGraphicsSceneMouseEvent *event);
41 void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
42 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
43 bool eventFilter(QObject *obj, QEvent *event);
44
45 Point p;
46
47 DT * dt;
48 Converter<K> convert;
49 QGraphicsScene *scene_;
50 };
51
52
53 template <typename T>
TriangulationConflictZone(QGraphicsScene * s,T * dt_,QObject * parent)54 TriangulationConflictZone<T>::TriangulationConflictZone(QGraphicsScene* s,
55 T * dt_,
56 QObject* parent)
57 : GraphicsViewInput(parent), dt(dt_), scene_(s)
58 {}
59
60
61
62 template <typename T>
63 void
mouseMoveEvent(QGraphicsSceneMouseEvent * event)64 TriangulationConflictZone<T>::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
65 {
66 p = convert(event->scenePos());
67 emit(generate(CGAL::make_object(p)));
68 }
69
70
71 template <typename T>
72 bool
eventFilter(QObject * obj,QEvent * event)73 TriangulationConflictZone<T>::eventFilter(QObject *obj, QEvent *event)
74 {
75 if(event->type() == QEvent::GraphicsSceneMouseMove) {
76 QGraphicsSceneMouseEvent *mouseEvent = static_cast<QGraphicsSceneMouseEvent *>(event);
77 mouseMoveEvent(mouseEvent);
78 return false; // don't consume the event
79 } else {
80 // standard event processing
81 return QObject::eventFilter(obj, event);
82 }
83 }
84
85
86 } // namespace Qt
87 } // namespace CGAL
88
89 #endif // CGAL_QT_TRIANGULATION_CONFLICT_ZONE
90