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