00001
00002
00003
00004
00005
00006
00007
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 <qpointarray.h>
00018 #include "qwt_event_pattern.h"
00019 #include "qwt_global.h"
00020
00021 class QWidget;
00022 class QMouseEvent;
00023 class QWheelEvent;
00024 class QKeyEvent;
00025 class QwtPickerMachine;
00026
00079 class QWT_EXPORT QwtPicker: public QObject, public QwtEventPattern
00080 {
00081 Q_OBJECT
00082
00083 Q_ENUMS(RubberBand)
00084 Q_ENUMS(DisplayMode)
00085 Q_ENUMS(ResizeMode)
00086
00087 Q_PROPERTY(int selectionFlags READ selectionFlags WRITE setSelectionFlags)
00088 Q_PROPERTY(DisplayMode cursorLabelMode
00089 READ cursorLabelMode WRITE setCursorLabelMode)
00090 Q_PROPERTY(QFont cursorLabelFont
00091 READ cursorLabelFont WRITE setCursorLabelFont)
00092 Q_PROPERTY(RubberBand rubberBand READ rubberBand WRITE setRubberBand)
00093 Q_PROPERTY(ResizeMode resizeMode READ resizeMode WRITE setResizeMode)
00094 Q_PROPERTY(bool isEnabled READ isEnabled WRITE setEnabled)
00095
00096 #if QT_VERSION >= 300
00097
00098
00099
00100
00101
00102 #endif
00103
00104 public:
00123 enum SelectionType
00124 {
00125 NoSelection = 0,
00126 PointSelection = 1,
00127 RectSelection = 2,
00128 PolygonSelection = 4
00129 };
00130
00149 enum RectSelectionType
00150 {
00151 CornerToCorner = 64,
00152 CenterToCorner = 128,
00153 CenterToRadius = 256
00154 };
00155
00163 enum SelectionMode
00164 {
00165 ClickSelection = 1024,
00166 DragSelection = 2048
00167 };
00168
00193 enum RubberBand
00194 {
00195 NoRubberBand = 0,
00196
00197
00198 HLineRubberBand,
00199 VLineRubberBand,
00200 CrossRubberBand,
00201
00202
00203 RectRubberBand,
00204 EllipseRubberBand,
00205
00206
00207 PolygonRubberBand,
00208
00209 UserRubberBand = 100
00210 };
00211
00223 enum DisplayMode
00224 {
00225 AlwaysOff,
00226 AlwaysOn,
00227 ActiveOnly
00228 };
00229
00242 enum ResizeMode
00243 {
00244 Stretch,
00245 KeepSize
00246 };
00247
00248 QwtPicker(QWidget *, const char *name = 0);
00249 QwtPicker(int selectionFlags, RubberBand rubberBand,
00250 DisplayMode cursorLabelMode, QWidget *, const char *name = 0);
00251
00252 virtual ~QwtPicker();
00253
00254 virtual void setSelectionFlags(int);
00255 int selectionFlags() const;
00256
00257 virtual void setRubberBand(RubberBand);
00258 RubberBand rubberBand() const;
00259
00260 virtual void setCursorLabelMode(DisplayMode);
00261 DisplayMode cursorLabelMode() const;
00262
00263 virtual void setResizeMode(ResizeMode);
00264 ResizeMode resizeMode() const;
00265
00266 virtual void setRubberBandPen(const QPen &);
00267 QPen rubberBandPen() const;
00268
00269 virtual void setCursorLabelPen(const QPen &);
00270 QPen cursorLabelPen() const;
00271
00272 virtual void setCursorLabelFont(const QFont &);
00273 QFont cursorLabelFont() const;
00274
00275 bool isEnabled() const;
00276 virtual void setEnabled(bool);
00277
00278 bool isActive() const;
00279
00280 virtual bool eventFilter(QObject *, QEvent *);
00281
00282 QWidget *parentWidget();
00283 const QWidget *parentWidget() const;
00284
00285 virtual QRect pickRect() const;
00286 const QPointArray &selection() const;
00287
00288 virtual bool event(QEvent *);
00289
00290 signals:
00297 void selected(const QPointArray &pa);
00298
00305 void appended(const QPoint &pos);
00306
00314 void moved(const QPoint &pos);
00315
00323 void changed(const QPointArray &pa);
00324
00325 protected:
00334 virtual bool accept(QPointArray &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 widgetMousePressEvent(QMouseEvent *);
00344 virtual void widgetMouseReleaseEvent(QMouseEvent *);
00345 virtual void widgetMouseDoubleClickEvent(QMouseEvent *);
00346 virtual void widgetMouseMoveEvent(QMouseEvent *);
00347 virtual void widgetWheelEvent(QWheelEvent *);
00348 virtual void widgetKeyPressEvent(QKeyEvent *);
00349 virtual void widgetKeyReleaseEvent(QKeyEvent *);
00350
00351 virtual void drawRubberBand(const QRect &clipRect = QRect()) const;
00352 virtual void drawRubberBand(QPainter *,
00353 const QRect &rect, const QPointArray &) const;
00354
00355 virtual void drawCursorLabel(const QRect &clipRect = QRect()) const;
00356 virtual void drawCursorLabel(QPainter *, const QRect &rect,
00357 const QPoint &, const QPointArray &) const;
00358
00359 virtual void stretchSelection(const QSize &oldSize,
00360 const QSize &newSize);
00361
00362 virtual QString cursorLabel(const QPoint &pos) const;
00363
00364 virtual QwtPickerMachine *stateMachine(int) const;
00365
00366 void repaint(const QRect &rect = QRect());
00367
00368 private:
00369 void init(QWidget *, int selectionFlags, RubberBand rubberBand,
00370 DisplayMode cursorLabelMode);
00371
00372 void setStateMachine(QwtPickerMachine *);
00373 void setMouseTracking(bool);
00374
00375 bool d_enabled;
00376
00377 QwtPickerMachine *d_stateMachine;
00378
00379 int d_selectionFlags;
00380 ResizeMode d_resizeMode;
00381
00382 RubberBand d_rubberBand;
00383 QPen d_rubberBandPen;
00384
00385 DisplayMode d_cursorLabelMode;
00386 QPen d_cursorLabelPen;
00387 QFont d_cursorLabelFont;
00388
00389 QPointArray d_selection;
00390 bool d_isActive;
00391 QPoint d_labelPosition;
00392
00393 bool d_mouseTracking;
00394 };
00395
00396 #endif