67 lines
1.4 KiB
C++
67 lines
1.4 KiB
C++
// Ruler class definition
|
|
//
|
|
// A QWidget displaying a ruler and allowing user zooming and shifting
|
|
//
|
|
// QATSH Copyright 2009 Jean-Philippe MEURET <jpmeuret@free.fr>
|
|
|
|
#ifndef RULER_H
|
|
#define RULER_H
|
|
|
|
#include <QtGui/QWidget>
|
|
|
|
class RulerSpec;
|
|
|
|
|
|
class Ruler : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
Ruler(QWidget *parent = 0);
|
|
|
|
void zoom(double dRelativeAnchor, double dRelativeFactor);
|
|
void zoomAll();
|
|
|
|
signals:
|
|
|
|
void zoomShift(double dRelFactor, double dShiftValue);
|
|
|
|
public slots:
|
|
|
|
void onSpecChanged(const RulerSpec* pSpec);
|
|
|
|
protected:
|
|
|
|
virtual void mousePressEvent(QMouseEvent *pqEvent);
|
|
virtual void mouseMoveEvent(QMouseEvent *pqEvent);
|
|
virtual void mouseReleaseEvent(QMouseEvent *pqEvent);
|
|
virtual void wheelEvent(QWheelEvent* pqEvent);
|
|
virtual void paintEvent(QPaintEvent* pqEvent);
|
|
virtual void resizeEvent(QResizeEvent *pqEvent);
|
|
|
|
void propagateZoomShift(int nViewLength);
|
|
void zoom(const QPoint& qpAnchorPos, double dRelativeFactor);
|
|
void shift(const QPoint& qpNewPos);
|
|
void resize(const QSize& qSize);
|
|
|
|
void draw(QPainter& qPainter);
|
|
|
|
private:
|
|
|
|
// Specification of the ruler.
|
|
const RulerSpec* _pSpec;
|
|
|
|
// Shifting (=translating) data
|
|
bool _bShifting;
|
|
QPoint _qpLastShiftingPos;
|
|
|
|
// Current absolute zoom factor
|
|
double _dZoomFactor;
|
|
|
|
// Current offset from rulerSpec.min
|
|
double _dValueOffset;
|
|
};
|
|
|
|
#endif // RULER_H
|