# qwt_picker.h

    00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
    00002  * Qwt Widget Library
    00003  * Copyright (C) 1997   Josef Wilgen
    00004  * Copyright (C) 2002   Uwe Rathmann
    00005  *
    00006  * This library is free software; you can redistribute it and/or
    00007  * modify it under the terms of the Qwt License, Version 1.0
    00008  *****************************************************************************/
    00009
    00010 #ifndef QWT_PICKER
    00011 #define QWT_PICKER 1
    00012
    00013 #include <qobject.h>
    00014 #include <qpen.h>
    00015 #include <qfont.h>
    00016 #include <qrect.h>
    00017 #include "qwt_global.h"
    00018 #include "qwt_text.h"
    00019 #include "qwt_polygon.h"
    00020 #include "qwt_event_pattern.h"
    00021
    00022 class QWidget;
    00023 class QMouseEvent;
    00024 class QWheelEvent;
    00025 class QKeyEvent;
    00026 class QwtPickerMachine;
    00027
    00080 class QWT_EXPORT QwtPicker: public QObject, public QwtEventPattern
    00081 {
    00082     Q_OBJECT
    00083
    00084     Q_ENUMS(RubberBand)
    00085     Q_ENUMS(DisplayMode)
    00086     Q_ENUMS(ResizeMode)
    00087
    00088     Q_PROPERTY(int selectionFlags READ selectionFlags WRITE setSelectionFlags)
    00089     Q_PROPERTY(DisplayMode trackerMode READ trackerMode WRITE setTrackerMode)
    00090     Q_PROPERTY(QFont trackerFont READ trackerFont WRITE setTrackerFont)
    00091     Q_PROPERTY(RubberBand rubberBand READ rubberBand WRITE setRubberBand)
    00092     Q_PROPERTY(ResizeMode resizeMode READ resizeMode WRITE setResizeMode)
    00093     Q_PROPERTY(bool isEnabled READ isEnabled WRITE setEnabled)
    00094
    00095     Q_PROPERTY(QPen trackerPen READ trackerPen WRITE setTrackerPen)
    00096     Q_PROPERTY(QPen rubberBandPen READ rubberBandPen WRITE setRubberBandPen)
    00097
    00098 public:
    00117     enum SelectionType
    00118     {
    00119         NoSelection = 0,
    00120         PointSelection = 1,
    00121         RectSelection = 2,
    00122         PolygonSelection = 4
    00123     };
    00124
    00143     enum RectSelectionType
    00144     {
    00145         CornerToCorner = 64,
    00146         CenterToCorner = 128,
    00147         CenterToRadius = 256
    00148     };
    00149
    00157     enum SelectionMode
    00158     {
    00159         ClickSelection = 1024,
    00160         DragSelection = 2048
    00161     };
    00162
    00187     enum RubberBand
    00188     {
    00189         NoRubberBand = 0,
    00190
    00191         // Point
    00192         HLineRubberBand,
    00193         VLineRubberBand,
    00194         CrossRubberBand,
    00195
    00196         // Rect
    00197         RectRubberBand,
    00198         EllipseRubberBand,
    00199
    00200         // Polygon
    00201         PolygonRubberBand,
    00202
    00203         UserRubberBand = 100
    00204     };
    00205
    00217     enum DisplayMode
    00218     {
    00219         AlwaysOff,
    00220         AlwaysOn,
    00221         ActiveOnly
    00222     };
    00223
    00236     enum ResizeMode
    00237     {
    00238         Stretch,
    00239         KeepSize
    00240     };
    00241
    00242     explicit QwtPicker(QWidget *parent);
    00243     explicit QwtPicker(int selectionFlags, RubberBand rubberBand,
    00244         DisplayMode trackerMode, QWidget *);
    00245
    00246     virtual ~QwtPicker();
    00247
    00248     virtual void setSelectionFlags(int);
    00249     int selectionFlags() const;
    00250
    00251     virtual void setRubberBand(RubberBand);
    00252     RubberBand rubberBand() const;
    00253
    00254     virtual void setTrackerMode(DisplayMode);
    00255     DisplayMode trackerMode() const;
    00256
    00257     virtual void setResizeMode(ResizeMode);
    00258     ResizeMode resizeMode() const;
    00259
    00260     virtual void setRubberBandPen(const QPen &);
    00261     QPen rubberBandPen() const;
    00262
    00263     virtual void setTrackerPen(const QPen &);
    00264     QPen trackerPen() const;
    00265
    00266     virtual void setTrackerFont(const QFont &);
    00267     QFont trackerFont() const;
    00268
    00269     bool isEnabled() const;
    00270     virtual void setEnabled(bool);
    00271
    00272     bool isActive() const;
    00273
    00274     virtual bool eventFilter(QObject *, QEvent *);
    00275
    00276     QWidget *parentWidget();
    00277     const QWidget *parentWidget() const;
    00278
    00279     virtual QRect pickRect() const;
    00280     const QwtPolygon &selection() const;
    00281
    00282     virtual void drawRubberBand(QPainter *) const;
    00283     virtual void drawTracker(QPainter *) const;
    00284
    00285     virtual QwtText trackerText(const QPoint &pos) const;
    00286     QPoint trackerPosition() const;
    00287     QRect trackerRect(const QFont &) const;
    00288
    00289
    00290 signals:
    00297     void selected(const QwtPolygon &pa);
    00298
    00305     void appended(const QPoint &pos);
    00306
    00314     void moved(const QPoint &pos);
    00315
    00323     void changed(const QwtPolygon &pa);
    00324
    00325 protected:
    00334     virtual bool accept(QwtPolygon &selection) const;
    00335
    00336     virtual void transition(const QEvent *);
    00337
    00338     virtual void begin();
    00339     virtual void append(const QPoint &);
    00340     virtual void move(const QPoint &);
    00341     virtual bool end(bool ok = true);
    00342
    00343     virtual void reset();
    00344
    00345     virtual void widgetMousePressEvent(QMouseEvent *);
    00346     virtual void widgetMouseReleaseEvent(QMouseEvent *);
    00347     virtual void widgetMouseDoubleClickEvent(QMouseEvent *);
    00348     virtual void widgetMouseMoveEvent(QMouseEvent *);
    00349     virtual void widgetWheelEvent(QWheelEvent *);
    00350     virtual void widgetKeyPressEvent(QKeyEvent *);
    00351     virtual void widgetKeyReleaseEvent(QKeyEvent *);
    00352     virtual void widgetLeaveEvent(QEvent *);
    00353
    00354     virtual void stretchSelection(const QSize &oldSize,
    00355         const QSize &newSize);
    00356
    00357     virtual QwtPickerMachine *stateMachine(int) const;
    00358
    00359     virtual void updateDisplay();
    00360
    00361     const QWidget *rubberBandWidget() const;
    00362     const QWidget *trackerWidget() const;
    00363
    00364 private:
    00365     void init(QWidget *, int selectionFlags, RubberBand rubberBand,
    00366         DisplayMode trackerMode);
    00367
    00368     void setStateMachine(QwtPickerMachine *);
    00369     void setMouseTracking(bool);
    00370
    00371     class PickerWidget;
    00372     class PrivateData;
    00373     PrivateData *d_data;
    00374 };
    00375
    00376 #endif