qwt_panner.h 2.87 KB
Newer Older
pixhawk's avatar
pixhawk committed
1
2
3
4
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2002   Uwe Rathmann
5
 *
pixhawk's avatar
pixhawk committed
6
7
8
9
10
11
12
13
 * 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_PANNER_H
#define QWT_PANNER_H 1

#include "qwt_global.h"
Bryant's avatar
Bryant committed
14
15
#include <qwidget.h>
#include <qpixmap.h>
pixhawk's avatar
pixhawk committed
16
17
18
19
20
21
22
23
24

class QCursor;

/*!
  \brief QwtPanner provides panning of a widget

  QwtPanner grabs the contents of a widget, that can be dragged
  in all directions. The offset between the start and the end position
  is emitted by the panned signal.
25

pixhawk's avatar
pixhawk committed
26
27
  QwtPanner grabs the content of the widget into a pixmap and moves
  the pixmap around, without initiating any repaint events for the widget.
Bryant's avatar
Bryant committed
28
29
  Areas, that are not part of content are not painted  while panning.
  This makes panning fast enough for widgets, where
30
  repaints are too slow for mouse movements.
pixhawk's avatar
pixhawk committed
31
32
33
34
35
36
37
38
39

  For widgets, where repaints are very fast it might be better to
  implement panning manually by mapping mouse events into paint events.
*/
class QWT_EXPORT QwtPanner: public QWidget
{
    Q_OBJECT

public:
Bryant's avatar
Bryant committed
40
    QwtPanner( QWidget* parent );
pixhawk's avatar
pixhawk committed
41
42
    virtual ~QwtPanner();

Bryant's avatar
Bryant committed
43
    void setEnabled( bool );
pixhawk's avatar
pixhawk committed
44
45
    bool isEnabled() const;

Bryant's avatar
Bryant committed
46
47
48
49
50
51
52
    void setMouseButton( Qt::MouseButton, 
        Qt::KeyboardModifiers = Qt::NoModifier );
    void getMouseButton( Qt::MouseButton &button, 
        Qt::KeyboardModifiers & ) const;

    void setAbortKey( int key, Qt::KeyboardModifiers = Qt::NoModifier );
    void getAbortKey( int &key, Qt::KeyboardModifiers & ) const;
pixhawk's avatar
pixhawk committed
53

Bryant's avatar
Bryant committed
54
    void setCursor( const QCursor & );
pixhawk's avatar
pixhawk committed
55
56
    const QCursor cursor() const;

Bryant's avatar
Bryant committed
57
    void setOrientations( Qt::Orientations );
pixhawk's avatar
pixhawk committed
58
59
    Qt::Orientations orientations() const;

Bryant's avatar
Bryant committed
60
    bool isOrientationEnabled( Qt::Orientation ) const;
pixhawk's avatar
pixhawk committed
61

Bryant's avatar
Bryant committed
62
    virtual bool eventFilter( QObject *, QEvent * );
pixhawk's avatar
pixhawk committed
63

Bryant's avatar
Bryant committed
64
Q_SIGNALS:
pixhawk's avatar
pixhawk committed
65
66
67
68
69
70
    /*!
      Signal emitted, when panning is done

      \param dx Offset in horizontal direction
      \param dy Offset in vertical direction
    */
Bryant's avatar
Bryant committed
71
    void panned( int dx, int dy );
pixhawk's avatar
pixhawk committed
72
73
74
75
76
77
78
79

    /*!
      Signal emitted, while the widget moved, but panning
      is not finished.

      \param dx Offset in horizontal direction
      \param dy Offset in vertical direction
    */
Bryant's avatar
Bryant committed
80
    void moved( int dx, int dy );
pixhawk's avatar
pixhawk committed
81
82

protected:
Bryant's avatar
Bryant committed
83
84
85
86
87
88
89
    virtual void widgetMousePressEvent( QMouseEvent * );
    virtual void widgetMouseReleaseEvent( QMouseEvent * );
    virtual void widgetMouseMoveEvent( QMouseEvent * );
    virtual void widgetKeyPressEvent( QKeyEvent * );
    virtual void widgetKeyReleaseEvent( QKeyEvent * );

    virtual void paintEvent( QPaintEvent * );
pixhawk's avatar
pixhawk committed
90

Bryant's avatar
Bryant committed
91
92
    virtual QBitmap contentsMask() const;
    virtual QPixmap grab() const;
pixhawk's avatar
pixhawk committed
93
94
95

private:
#ifndef QT_NO_CURSOR
Bryant's avatar
Bryant committed
96
    void showCursor( bool );
pixhawk's avatar
pixhawk committed
97
98
99
100
101
102
103
#endif

    class PrivateData;
    PrivateData *d_data;
};

#endif