Qwt User's Guide
svn
|
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 "qwt_global.h" 00014 #include "qwt_text.h" 00015 #include "qwt_event_pattern.h" 00016 #include <qobject.h> 00017 #include <qpen.h> 00018 #include <qfont.h> 00019 #include <qrect.h> 00020 00021 class QWidget; 00022 class QMouseEvent; 00023 class QWheelEvent; 00024 class QKeyEvent; 00025 class QwtPickerMachine; 00026 00093 class QWT_EXPORT QwtPicker: public QObject, public QwtEventPattern 00094 { 00095 Q_OBJECT 00096 00097 Q_ENUMS( RubberBand ) 00098 Q_ENUMS( DisplayMode ) 00099 Q_ENUMS( ResizeMode ) 00100 00101 Q_PROPERTY( bool isEnabled READ isEnabled WRITE setEnabled ) 00102 Q_PROPERTY( ResizeMode resizeMode READ resizeMode WRITE setResizeMode ) 00103 00104 Q_PROPERTY( DisplayMode trackerMode READ trackerMode WRITE setTrackerMode ) 00105 Q_PROPERTY( QPen trackerPen READ trackerPen WRITE setTrackerPen ) 00106 Q_PROPERTY( QFont trackerFont READ trackerFont WRITE setTrackerFont ) 00107 00108 Q_PROPERTY( RubberBand rubberBand READ rubberBand WRITE setRubberBand ) 00109 Q_PROPERTY( QPen rubberBandPen READ rubberBandPen WRITE setRubberBandPen ) 00110 00111 public: 00119 enum RubberBand 00120 { 00122 NoRubberBand = 0, 00123 00125 HLineRubberBand, 00126 00128 VLineRubberBand, 00129 00131 CrossRubberBand, 00132 00134 RectRubberBand, 00135 00137 EllipseRubberBand, 00138 00140 PolygonRubberBand, 00141 00146 UserRubberBand = 100 00147 }; 00148 00153 enum DisplayMode 00154 { 00156 AlwaysOff, 00157 00159 AlwaysOn, 00160 00162 ActiveOnly 00163 }; 00164 00173 enum ResizeMode 00174 { 00176 Stretch, 00177 00179 KeepSize 00180 }; 00181 00182 explicit QwtPicker( QWidget *parent ); 00183 explicit QwtPicker( RubberBand rubberBand, 00184 DisplayMode trackerMode, QWidget * ); 00185 00186 virtual ~QwtPicker(); 00187 00188 void setStateMachine( QwtPickerMachine * ); 00189 const QwtPickerMachine *stateMachine() const; 00190 QwtPickerMachine *stateMachine(); 00191 00192 void setRubberBand( RubberBand ); 00193 RubberBand rubberBand() const; 00194 00195 void setTrackerMode( DisplayMode ); 00196 DisplayMode trackerMode() const; 00197 00198 void setResizeMode( ResizeMode ); 00199 ResizeMode resizeMode() const; 00200 00201 void setRubberBandPen( const QPen & ); 00202 QPen rubberBandPen() const; 00203 00204 void setTrackerPen( const QPen & ); 00205 QPen trackerPen() const; 00206 00207 void setTrackerFont( const QFont & ); 00208 QFont trackerFont() const; 00209 00210 bool isEnabled() const; 00211 bool isActive() const; 00212 00213 virtual bool eventFilter( QObject *, QEvent * ); 00214 00215 QWidget *parentWidget(); 00216 const QWidget *parentWidget() const; 00217 00218 virtual QRect pickRect() const; 00219 00220 virtual void drawRubberBand( QPainter * ) const; 00221 virtual void drawTracker( QPainter * ) const; 00222 00223 virtual QwtText trackerText( const QPoint &pos ) const; 00224 QPoint trackerPosition() const; 00225 virtual QRect trackerRect( const QFont & ) const; 00226 00227 QPolygon selection() const; 00228 00229 public Q_SLOTS: 00230 void setEnabled( bool ); 00231 00232 Q_SIGNALS: 00240 void activated( bool on ); 00241 00248 void selected( const QPolygon &polygon ); 00249 00256 void appended( const QPoint &pos ); 00257 00265 void moved( const QPoint &pos ); 00266 00273 void removed( const QPoint &pos ); 00281 void changed( const QPolygon &selection ); 00282 00283 protected: 00284 virtual QPolygon adjustedPoints( const QPolygon & ) const; 00285 00286 virtual void transition( const QEvent * ); 00287 00288 virtual void begin(); 00289 virtual void append( const QPoint & ); 00290 virtual void move( const QPoint & ); 00291 virtual void remove(); 00292 virtual bool end( bool ok = true ); 00293 00294 virtual bool accept( QPolygon & ) const; 00295 virtual void reset(); 00296 00297 virtual void widgetMousePressEvent( QMouseEvent * ); 00298 virtual void widgetMouseReleaseEvent( QMouseEvent * ); 00299 virtual void widgetMouseDoubleClickEvent( QMouseEvent * ); 00300 virtual void widgetMouseMoveEvent( QMouseEvent * ); 00301 virtual void widgetWheelEvent( QWheelEvent * ); 00302 virtual void widgetKeyPressEvent( QKeyEvent * ); 00303 virtual void widgetKeyReleaseEvent( QKeyEvent * ); 00304 virtual void widgetEnterEvent( QEvent * ); 00305 virtual void widgetLeaveEvent( QEvent * ); 00306 00307 virtual void stretchSelection( const QSize &oldSize, 00308 const QSize &newSize ); 00309 00310 virtual void updateDisplay(); 00311 00312 const QWidget *rubberBandWidget() const; 00313 const QWidget *trackerWidget() const; 00314 00315 const QPolygon &pickedPoints() const; 00316 00317 private: 00318 void init( QWidget *, RubberBand rubberBand, DisplayMode trackerMode ); 00319 00320 void setMouseTracking( bool ); 00321 00322 class PickerWidget; 00323 class PrivateData; 00324 PrivateData *d_data; 00325 }; 00326 00327 #endif