Fréchet View  1.6.0
A Tool for Exploring Fréchet Distance Algorithms
baseview.h
Go to the documentation of this file.
1 #ifndef BASEVIEW_H
2 #define BASEVIEW_H
3 
4 #include <QFrame>
5 #include <QGraphicsView>
6 #include <QLabel>
7 #include <QToolButton>
8 #include <QSlider>
9 #include <QSettings>
10 #include <QAbstractGraphicsShapeItem>
11 #include <QGestureEvent>
12 //#include <poly/types.h>
13 
14 namespace frechet { namespace view {
15 
16 class BaseView;
17 class GraphicsHoverLineItem;
18 
23 class GraphicsView : public QGraphicsView
24 {
25  Q_OBJECT
26 public:
32 
33 protected:
34  bool event(QEvent*) override;
35  void mousePressEvent(QMouseEvent *event) override;
36  void wheelEvent(QWheelEvent*) override;
37  void keyPressEvent(QKeyEvent*) override;
38  bool gestureEvent(QGestureEvent*);
39  void mouseMoveEvent(QMouseEvent *event);
40 
44  int rot0;
45 };
46 
51 void singleStep(QAbstractSlider*, double factor);
56 void pageStep(QAbstractSlider*, double factor);
57 
62 double normalizedValue(QAbstractSlider* slider);
68 void setNormalizedValue(QAbstractSlider* slider, double nval);
69 
79 class BaseView : public QFrame
80 {
81  Q_OBJECT
82 public:
89  BaseView(QWidget *parent = 0, QString title="", bool showRotate=true);
90 
92  QGraphicsView *view() const;
93 
97  virtual void segmentSelected(GraphicsHoverLineItem *item) {}
98 
99 public slots:
102  void zoomIn(int level = -1);
105  void zoomOut(int level = -1);
106 
112  virtual void saveSettings(QSettings& settings, QString group);
118  virtual void restoreSettings(QSettings& settings, QString group);
119 
124  void flipVertical(bool flip);
125 
130  void mouseMoveEvent(QMouseEvent *event);
131 
135  QPoint mapSceneToGlobal(QPointF p) const;
136 
137 protected slots:
139  void resetView();
141  void setResetButtonEnabled();
143  void setupMatrix();
145  void print();
147  void saveAs();
150  void rotateLeft(double angle=10);
153  void rotateRight(double angle=10);
154 
156  int rotation() const;
159  void setRotation(double angle);
160 
161 protected:
163  static const QPen PEN_SELECT;
164 
165  friend class GraphicsView;
166  //static const int ZOOM_DEFAULT_VALUE = 250;
168  static const int ROTATE_DEFAULT_VALUE = 0;
170  static const QStringList OUTPUT_FILTERS;
172  QGraphicsView *graphicsView;
174  QGraphicsScene* scene;
176  bool isFlipped;
181 
183  QToolButton *resetButton;
185  QSlider *zoomSlider;
187  QSlider *rotateSlider;
190 
192  void resizeEvent(QResizeEvent *) override;
193 
196  void saveAsPdf(QString file);
199  void saveAsSvg(QString file);
200 
203  virtual void dropUnusedItems() { };
208  virtual void render(QPainter* painter, QRectF target=QRectF());
209 
211  QMatrix baseMatrix();
212 
216  static void setPenWidth(QGraphicsItem* item, double width);
220  static void addLine(QPainterPath& ppath, const QLineF& line);
224  static void addPolygon(QPainterPath& ppath, const QPolygonF& poly);
229  static void addPoint(QPainterPath& ppath, const QPointF& point, double diameter=1.0);
230 };
231 
239 class GraphicsHoverLineItem : public QGraphicsLineItem
240 {
241 public:
243  enum Location { None,
244  P,
245  Q,
248  FS
249  };
251  const Location loc;
257  const int a, b;
258 
267  GraphicsHoverLineItem(QLineF line,
268  Location loc, int a, int b,
269  QGraphicsItemGroup* group);
271  void update(int a, int b);
278  bool is_close_to(QPointF scene_pos, int distance) const;
279 };
280 
281 } } // namespace frechet
282 #endif // BASEVIEW_H
void singleStep(QAbstractSlider *, double factor)
perform a single step on a slider
Definition: baseview.cpp:158
base class for view widgets.
Definition: baseview.h:79
GraphicsView(BaseView *view)
default constructor
Definition: baseview.cpp:35
void saveAs()
save the contents of the graphics scene to disk (as PDF, or SVG)
Definition: baseview.cpp:413
void zoomIn(int level=-1)
zoom in; connected to the zomm controls
Definition: baseview.cpp:500
used for segments that are not mouse sensitive
Definition: baseview.h:243
void saveAsPdf(QString file)
save content of scene to a PDF file
Definition: baseview.cpp:445
void resetView()
reset zoom to default
Definition: baseview.cpp:307
void mouseMoveEvent(QMouseEvent *event)
Definition: baseview.cpp:68
bool event(QEvent *) override
Definition: baseview.cpp:42
static int distance(int a, int b, int n)
Definition: poly_utils.cpp:210
BaseView(QWidget *parent=0, QString title="", bool showRotate=true)
constructore with parent and title
Definition: baseview.cpp:170
int rot0
initial rotation angle
Definition: baseview.h:44
void keyPressEvent(QKeyEvent *) override
Definition: baseview.cpp:90
bool gestureEvent(QGestureEvent *)
Definition: baseview.cpp:115
QGraphicsView * view() const
Definition: baseview.cpp:302
int zoomStepMouse
zoom step for mouse wheel
Definition: baseview.h:178
global definitions for all algorithms.
void zoomOut(int level=-1)
connected to the zomm controls
Definition: baseview.cpp:506
bool is_close_to(QPointF scene_pos, int distance) const
check if the mouse is close to the line segment
Definition: baseview.cpp:674
double normalizedValue(QAbstractSlider *slider)
Definition: baseview.cpp:643
void wheelEvent(QWheelEvent *) override
Definition: baseview.cpp:74
void pageStep(QAbstractSlider *, double factor)
perform a page step on a slider
Definition: baseview.cpp:163
QSlider * rotateSlider
the slider control for rotate
Definition: baseview.h:187
a segment of the feasible paht (displayed in the free-space diagram)
Definition: baseview.h:248
void rotateLeft(double angle=10)
rotate the scene to the left
Definition: baseview.cpp:556
a QGraphicsView with additional support for mouse and gesture events. re-implements a couple of event...
Definition: baseview.h:23
static void addPolygon(QPainterPath &ppath, const QPolygonF &poly)
add a polygon curve segment to a QPainterPath
Definition: baseview.cpp:622
bool isFlipped
true if the scene should be flipped vertically
Definition: baseview.h:176
void setupMatrix()
set up transformation matrix to account for zoom,rotate,scroll
Definition: baseview.cpp:374
const Location loc
location on screen
Definition: baseview.h:251
static const int ROTATE_DEFAULT_VALUE
what this?
Definition: baseview.h:168
QPoint mapSceneToGlobal(QPointF p) const
map scene coordinates to window coordinate
Definition: baseview.cpp:360
void setNormalizedValue(QAbstractSlider *slider, double nval)
update slider with a normalized value
Definition: baseview.cpp:652
QGraphicsScene * scene
scene that is displayed by graphicsView
Definition: baseview.h:174
static const QPen PEN_SELECT
pen for drawing selected polygon segment
Definition: baseview.h:163
GraphicsHoverLineItem * selected_item
the currently selected mouse sensitve polyon segment (or nullptr)
Definition: baseview.h:189
a QGraphicsLitem that can handle mouse hover events. It is used to highlight mouse sensitve polygon s...
Definition: baseview.h:239
void update(int a, int b)
update identifiers
Definition: baseview.cpp:669
void resizeEvent(QResizeEvent *) override
handles window resizes; adjusts controls to new window size
Definition: baseview.cpp:368
void flipVertical(bool flip)
flip graphics scene vertically
Definition: baseview.cpp:322
static void addPoint(QPainterPath &ppath, const QPointF &point, double diameter=1.0)
add a dot to a QPainterPath
Definition: baseview.cpp:638
void mouseMoveEvent(QMouseEvent *event)
handles a mouse move event and detects mouse sensitve polygon segments
Definition: baseview.cpp:334
void setRotation(double angle)
update rotation angle
Definition: baseview.cpp:570
const int a
parameters loc,a, and b identify a segment.
Definition: baseview.h:257
virtual void segmentSelected(GraphicsHoverLineItem *item)
called when the mouse hovers over a polygon segment; implemented by derived classes.
Definition: baseview.h:97
void rotateRight(double angle=10)
rotate the scene to the right
Definition: baseview.cpp:561
virtual void restoreSettings(QSettings &settings, QString group)
load view settings to application prefs
Definition: baseview.cpp:533
BaseView * view
parent widget
Definition: baseview.h:42
QGraphicsView * graphicsView
the embedded QGraphicsView
Definition: baseview.h:172
void print()
print the contents of the graphics scene
Definition: baseview.cpp:400
QToolButton * resetButton
the reset button
Definition: baseview.h:183
void mousePressEvent(QMouseEvent *event) override
Definition: baseview.cpp:63
void saveAsSvg(QString file)
save content of scene to an SVG file
Definition: baseview.cpp:461
virtual void saveSettings(QSettings &settings, QString group)
store view settings to application prefs
Definition: baseview.cpp:512
virtual void render(QPainter *painter, QRectF target=QRectF())
render the scene into a QPainter used for printing and saving to disk
Definition: baseview.cpp:479
void setResetButtonEnabled()
enabled reset button
Definition: baseview.cpp:317
QSlider * zoomSlider
the slider control for zoom
Definition: baseview.h:185
GraphicsHoverLineItem(QLineF line, Location loc, int a, int b, QGraphicsItemGroup *group)
default constructor
Definition: baseview.cpp:661
virtual void dropUnusedItems()
clean up graphics scene items after free-space is modified implemented by FreeSpaceView.
Definition: baseview.h:203
Location
location of the polygon segment
Definition: baseview.h:243
int zoomStepDefault
default zoom step
Definition: baseview.h:180
static void setPenWidth(QGraphicsItem *item, double width)
update the pen width of a graphics item
Definition: baseview.cpp:579
static const QStringList OUTPUT_FILTERS
file name filters for save dialog
Definition: baseview.h:170
static void addLine(QPainterPath &ppath, const QLineF &line)
add a line segment to a QPainterPath
Definition: baseview.cpp:608