qwt_panner.h 2.79 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 14 15 16 17 18 19 20 21 22 23 24
 * 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 <qnamespace.h>
#include <qwidget.h>
#include "qwt_global.h"

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 28
  QwtPanner grabs the content of the widget into a pixmap and moves
  the pixmap around, without initiating any repaint events for the widget.
  Areas, that are not part of content are not painted  while panning
29 30
  in in process. This makes panning fast enough for widgets, where
  repaints are too slow for mouse movements.
pixhawk's avatar
pixhawk committed
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

  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:
    QwtPanner(QWidget* parent);
    virtual ~QwtPanner();

    void setEnabled(bool);
    bool isEnabled() const;

    void setMouseButton(int button, int buttonState = Qt::NoButton);
    void getMouseButton(int &button, int &buttonState) const;
    void setAbortKey(int key, int state = Qt::NoButton);
    void getAbortKey(int &key, int &state) const;

    void setCursor(const QCursor &);
    const QCursor cursor() const;

#if QT_VERSION >= 0x040000
    void setOrientations(Qt::Orientations);
    Qt::Orientations orientations() const;
#else
    void enableOrientation(Qt::Orientation, bool enable);
#endif

    bool isOrientationEnabled(Qt::Orientation) const;

    virtual bool eventFilter(QObject *, QEvent *);

signals:
    /*!
      Signal emitted, when panning is done

      \param dx Offset in horizontal direction
      \param dy Offset in vertical direction
    */
    void panned(int dx, int dy);

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

      \param dx Offset in horizontal direction
      \param dy Offset in vertical direction
    */
    void moved(int dx, int dy);

protected:
    virtual void widgetMousePressEvent(QMouseEvent *);
    virtual void widgetMouseReleaseEvent(QMouseEvent *);
    virtual void widgetMouseMoveEvent(QMouseEvent *);
    virtual void widgetKeyPressEvent(QKeyEvent *);
    virtual void widgetKeyReleaseEvent(QKeyEvent *);

    virtual void paintEvent(QPaintEvent *);

private:
#ifndef QT_NO_CURSOR
    void showCursor(bool);
#endif

    class PrivateData;
    PrivateData *d_data;
};

#endif