summaryrefslogtreecommitdiffstats
path: root/resizeuihelper.h
blob: 18ebb2289d7261bcf04383eebdb3eb0199ad5cb2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
#ifndef RESIZEUIHELPER_H
#define RESIZEUIHELPER_H

#include <QObject>
#include <QWidget>
#include <QGraphicsItem>
#include <QEvent>

class ResizeUiHelper : public QObject, public QGraphicsItem
{
    Q_OBJECT

public:
    enum GripId {
        NoGrip = -1,
        TopLeft = 0,
        Top,
        TopRight,
        Right,
        BottomRight,
        Bottom,
        BottomLeft,
        Left
    };

    ResizeUiHelper(QGraphicsItem *item, QObject *parent = 0);
    ResizeUiHelper(QWidget *widget, QObject *parent = 0);

    QRectF rect() const;

    void setResizeGripEnabled(GripId grip, bool enabled);
    bool resizeGripEnabled(GripId grip) const;
    void setAllResizeGripsEnabled(bool enabled);

    void setGripSize(QSizeF sz);
    QSizeF gripSize() const;

    virtual QRectF gripRect(GripId grip) const;
    virtual QCursor gripCursor(GripId grip) const;

    bool sceneEventFilter(QGraphicsItem* watched, QEvent* event);
    bool eventFilter(QObject *watched, QEvent * event);
    bool genericEventFilter(QEvent::Type eventType, QPointF eventPos);

    QRectF rectResize(QRectF originalRect, GripId activeGrip, QPointF originalPoint, QPointF newPoint);

    QRectF boundingRect() const; // dummy
    void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget); // dummy

    void reset();
    bool resizeEnabled() const;

public slots:
    void setResizeEnabled(bool enabled);
    void setRect(const QRectF &rect);

signals:
    void rectResized(const QRectF &rect);

private:
    void setWatchedCursor(QCursor cursor);

    QGraphicsItem *m_item;
    QWidget *m_widget;
    bool m_isResizeEnabled;

    QVector<bool> m_gripsEnabled;
    QRectF m_rect;
    QSizeF m_gripSize;

    QPointF m_buttonDownPos;
    QRectF m_buttonDownRect;
    GripId m_activeResizeGrip;
    bool m_isResizeInProgress;
};

#endif // RESIZEUIHELPER_H