summaryrefslogtreecommitdiff
path: root/src/libpcp_qwt/src/qwt_picker.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libpcp_qwt/src/qwt_picker.h')
-rw-r--r--src/libpcp_qwt/src/qwt_picker.h327
1 files changed, 327 insertions, 0 deletions
diff --git a/src/libpcp_qwt/src/qwt_picker.h b/src/libpcp_qwt/src/qwt_picker.h
new file mode 100644
index 0000000..c0b22dc
--- /dev/null
+++ b/src/libpcp_qwt/src/qwt_picker.h
@@ -0,0 +1,327 @@
+/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
+ * Qwt Widget Library
+ * Copyright (C) 1997 Josef Wilgen
+ * Copyright (C) 2002 Uwe Rathmann
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the Qwt License, Version 1.0
+ *****************************************************************************/
+
+#ifndef QWT_PICKER
+#define QWT_PICKER 1
+
+#include "qwt_global.h"
+#include "qwt_text.h"
+#include "qwt_event_pattern.h"
+#include <qobject.h>
+#include <qpen.h>
+#include <qfont.h>
+#include <qrect.h>
+
+class QWidget;
+class QMouseEvent;
+class QWheelEvent;
+class QKeyEvent;
+class QwtPickerMachine;
+
+/*!
+ \brief QwtPicker provides selections on a widget
+
+ QwtPicker filters all enter, leave, mouse and keyboard events of a widget
+ and translates them into an array of selected points.
+
+ The way how the points are collected depends on type of state machine
+ that is connected to the picker. Qwt offers a couple of predefined
+ state machines for selecting:
+
+ - Nothing\n
+ QwtPickerTrackerMachine
+ - Single points\n
+ QwtPickerClickPointMachine, QwtPickerDragPointMachine
+ - Rectangles\n
+ QwtPickerClickRectMachine, QwtPickerDragRectMachine
+ - Polygons\n
+ QwtPickerPolygonMachine
+
+ While these state machines cover the most common ways to collect points
+ it is also possible to implement individual machines as well.
+
+ QwtPicker translates the picked points into a selection using the
+ adjustedPoints method. adjustedPoints is intended to be reimplemented
+ to fixup the selection according to application specific requirements.
+ (F.e. when an application accepts rectangles of a fixed aspect ratio only.)
+
+ Optionally QwtPicker support the process of collecting points by a
+ rubberband and tracker displaying a text for the current mouse
+ position.
+
+ \par Example
+ \verbatim #include <qwt_picker.h>
+#include <qwt_picker_machine.h>
+
+QwtPicker *picker = new QwtPicker(widget);
+picker->setStateMachine(new QwtPickerDragRectMachine);
+picker->setTrackerMode(QwtPicker::ActiveOnly);
+picker->setRubberBand(QwtPicker::RectRubberBand); \endverbatim\n
+
+ The state machine triggers the following commands:
+
+ - begin()\n
+ Activate/Initialize the selection.
+ - append()\n
+ Add a new point
+ - move() \n
+ Change the position of the last point.
+ - remove()\n
+ Remove the last point.
+ - end()\n
+ Terminate the selection and call accept to validate the picked points.
+
+ The picker is active (isActive()), between begin() and end().
+ In active state the rubberband is displayed, and the tracker is visible
+ in case of trackerMode is ActiveOnly or AlwaysOn.
+
+ The cursor can be moved using the arrow keys. All selections can be aborted
+ using the abort key. (QwtEventPattern::KeyPatternCode)
+
+ \warning In case of QWidget::NoFocus the focus policy of the observed
+ widget is set to QWidget::WheelFocus and mouse tracking
+ will be manipulated while the picker is active,
+ or if trackerMode() is AlwayOn.
+*/
+
+class QWT_EXPORT QwtPicker: public QObject, public QwtEventPattern
+{
+ Q_OBJECT
+
+ Q_ENUMS( RubberBand )
+ Q_ENUMS( DisplayMode )
+ Q_ENUMS( ResizeMode )
+
+ Q_PROPERTY( bool isEnabled READ isEnabled WRITE setEnabled )
+ Q_PROPERTY( ResizeMode resizeMode READ resizeMode WRITE setResizeMode )
+
+ Q_PROPERTY( DisplayMode trackerMode READ trackerMode WRITE setTrackerMode )
+ Q_PROPERTY( QPen trackerPen READ trackerPen WRITE setTrackerPen )
+ Q_PROPERTY( QFont trackerFont READ trackerFont WRITE setTrackerFont )
+
+ Q_PROPERTY( RubberBand rubberBand READ rubberBand WRITE setRubberBand )
+ Q_PROPERTY( QPen rubberBandPen READ rubberBandPen WRITE setRubberBandPen )
+
+public:
+ /*!
+ Rubberband style
+
+ The default value is QwtPicker::NoRubberBand.
+ \sa setRubberBand(), rubberBand()
+ */
+
+ enum RubberBand
+ {
+ //! No rubberband.
+ NoRubberBand = 0,
+
+ //! A horizontal line ( only for QwtPicker::PointSelection )
+ HLineRubberBand,
+
+ //! A vertical line ( only for QwtPicker::PointSelection )
+ VLineRubberBand,
+
+ //! A crosshair ( only for QwtPicker::PointSelection )
+ CrossRubberBand,
+
+ //! A rectangle ( only for QwtPicker::RectSelection )
+ RectRubberBand,
+
+ //! An ellipse ( only for QwtPicker::RectSelection )
+ EllipseRubberBand,
+
+ //! A polygon ( only for QwtPicker::&PolygonSelection )
+ PolygonRubberBand,
+
+ /*!
+ Values >= UserRubberBand can be used to define additional
+ rubber bands.
+ */
+ UserRubberBand = 100
+ };
+
+ /*!
+ \brief Display mode
+ \sa setTrackerMode(), trackerMode(), isActive()
+ */
+ enum DisplayMode
+ {
+ //! Display never
+ AlwaysOff,
+
+ //! Display always
+ AlwaysOn,
+
+ //! Display only when the selection is active
+ ActiveOnly
+ };
+
+ /*!
+ Controls what to do with the selected points of an active
+ selection when the observed widget is resized.
+
+ The default value is QwtPicker::Stretch.
+ \sa setResizeMode()
+ */
+
+ enum ResizeMode
+ {
+ //! All points are scaled according to the new size,
+ Stretch,
+
+ //! All points remain unchanged.
+ KeepSize
+ };
+
+ explicit QwtPicker( QWidget *parent );
+ explicit QwtPicker( RubberBand rubberBand,
+ DisplayMode trackerMode, QWidget * );
+
+ virtual ~QwtPicker();
+
+ void setStateMachine( QwtPickerMachine * );
+ const QwtPickerMachine *stateMachine() const;
+ QwtPickerMachine *stateMachine();
+
+ void setRubberBand( RubberBand );
+ RubberBand rubberBand() const;
+
+ void setTrackerMode( DisplayMode );
+ DisplayMode trackerMode() const;
+
+ void setResizeMode( ResizeMode );
+ ResizeMode resizeMode() const;
+
+ void setRubberBandPen( const QPen & );
+ QPen rubberBandPen() const;
+
+ void setTrackerPen( const QPen & );
+ QPen trackerPen() const;
+
+ void setTrackerFont( const QFont & );
+ QFont trackerFont() const;
+
+ bool isEnabled() const;
+ bool isActive() const;
+
+ virtual bool eventFilter( QObject *, QEvent * );
+
+ QWidget *parentWidget();
+ const QWidget *parentWidget() const;
+
+ virtual QRect pickRect() const;
+
+ virtual void drawRubberBand( QPainter * ) const;
+ virtual void drawTracker( QPainter * ) const;
+
+ virtual QwtText trackerText( const QPoint &pos ) const;
+ QPoint trackerPosition() const;
+ virtual QRect trackerRect( const QFont & ) const;
+
+ QPolygon selection() const;
+
+public Q_SLOTS:
+ void setEnabled( bool );
+
+Q_SIGNALS:
+ /*!
+ A signal indicating, when the picker has been activated.
+ Together with setEnabled() it can be used to implement
+ selections with more than one picker.
+
+ \param on True, when the picker has been activated
+ */
+ void activated( bool on );
+
+ /*!
+ A signal emitting the selected points,
+ at the end of a selection.
+
+ \param polygon Selected points
+ */
+ void selected( const QPolygon &polygon );
+
+ /*!
+ A signal emitted when a point has been appended to the selection
+
+ \param pos Position of the appended point.
+ \sa append(). moved()
+ */
+ void appended( const QPoint &pos );
+
+ /*!
+ A signal emitted whenever the last appended point of the
+ selection has been moved.
+
+ \param pos Position of the moved last point of the selection.
+ \sa move(), appended()
+ */
+ void moved( const QPoint &pos );
+
+ /*!
+ A signal emitted whenever the last appended point of the
+ selection has been removed.
+
+ \sa remove(), appended()
+ */
+ void removed( const QPoint &pos );
+ /*!
+ A signal emitted when the active selection has been changed.
+ This might happen when the observed widget is resized.
+
+ \param selection Changed selection
+ \sa stretchSelection()
+ */
+ void changed( const QPolygon &selection );
+
+protected:
+ virtual QPolygon adjustedPoints( const QPolygon & ) const;
+
+ virtual void transition( const QEvent * );
+
+ virtual void begin();
+ virtual void append( const QPoint & );
+ virtual void move( const QPoint & );
+ virtual void remove();
+ virtual bool end( bool ok = true );
+
+ virtual bool accept( QPolygon & ) const;
+ virtual void reset();
+
+ virtual void widgetMousePressEvent( QMouseEvent * );
+ virtual void widgetMouseReleaseEvent( QMouseEvent * );
+ virtual void widgetMouseDoubleClickEvent( QMouseEvent * );
+ virtual void widgetMouseMoveEvent( QMouseEvent * );
+ virtual void widgetWheelEvent( QWheelEvent * );
+ virtual void widgetKeyPressEvent( QKeyEvent * );
+ virtual void widgetKeyReleaseEvent( QKeyEvent * );
+ virtual void widgetEnterEvent( QEvent * );
+ virtual void widgetLeaveEvent( QEvent * );
+
+ virtual void stretchSelection( const QSize &oldSize,
+ const QSize &newSize );
+
+ virtual void updateDisplay();
+
+ const QWidget *rubberBandWidget() const;
+ const QWidget *trackerWidget() const;
+
+ const QPolygon &pickedPoints() const;
+
+private:
+ void init( QWidget *, RubberBand rubberBand, DisplayMode trackerMode );
+
+ void setMouseTracking( bool );
+
+ class PickerWidget;
+ class PrivateData;
+ PrivateData *d_data;
+};
+
+#endif