UBBoardView.h 5.57 KB
Newer Older
Claudio Valerio's avatar
Claudio Valerio committed
1
/*
2
 * Copyright (C) 2015-2018 Département de l'Instruction Publique (DIP-SEM)
Craig Watson's avatar
Craig Watson committed
3
 *
Claudio Valerio's avatar
Claudio Valerio committed
4
 * Copyright (C) 2013 Open Education Foundation
Claudio Valerio's avatar
Claudio Valerio committed
5
 *
Claudio Valerio's avatar
Claudio Valerio committed
6 7
 * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour
 * l'Education Numérique en Afrique (GIP ENA)
Claudio Valerio's avatar
Claudio Valerio committed
8
 *
Claudio Valerio's avatar
Claudio Valerio committed
9 10 11
 * This file is part of OpenBoard.
 *
 * OpenBoard is free software: you can redistribute it and/or modify
Claudio Valerio's avatar
Claudio Valerio committed
12 13 14 15 16 17
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, version 3 of the License,
 * with a specific linking exception for the OpenSSL project's
 * "OpenSSL" library (or with modified versions of it that use the
 * same license as the "OpenSSL" library).
 *
Claudio Valerio's avatar
Claudio Valerio committed
18
 * OpenBoard is distributed in the hope that it will be useful,
Claudio Valerio's avatar
Claudio Valerio committed
19
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Claudio Valerio's avatar
Claudio Valerio committed
20
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Claudio Valerio's avatar
Claudio Valerio committed
21 22 23
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
Claudio Valerio's avatar
Claudio Valerio committed
24
 * along with OpenBoard. If not, see <http://www.gnu.org/licenses/>.
Claudio Valerio's avatar
Claudio Valerio committed
25 26
 */

Claudio Valerio's avatar
Claudio Valerio committed
27

Claudio Valerio's avatar
Claudio Valerio committed
28

Claudio Valerio's avatar
Claudio Valerio committed
29 30 31
#ifndef UBBOARDVIEW_H_
#define UBBOARDVIEW_H_

32 33
#define CONTROLVIEW_OBJ_NAME "ControlView"

Claudio Valerio's avatar
Claudio Valerio committed
34
#include <QtGui>
35 36 37
#include <QGraphicsView>
#include <QRubberBand>

Claudio Valerio's avatar
Claudio Valerio committed
38 39 40 41 42 43 44 45 46 47 48 49
#include "core/UB.h"
#include "domain/UBGraphicsDelegateFrame.h"

class UBBoardController;
class UBGraphicsScene;
class UBGraphicsWidgetItem;
class UBRubberBand;

class UBBoardView : public QGraphicsView
{
    Q_OBJECT

Claudio Valerio's avatar
Claudio Valerio committed
50
public:
Claudio Valerio's avatar
Claudio Valerio committed
51

Claudio Valerio's avatar
Claudio Valerio committed
52 53 54
    UBBoardView(UBBoardController* pController, QWidget* pParent = 0, bool isControl = false, bool isDesktop = false);
    UBBoardView(UBBoardController* pController, int pStartLayer, int pEndLayer, QWidget* pParent = 0, bool isControl = false, bool isDesktop = false);
    virtual ~UBBoardView();
Claudio Valerio's avatar
Claudio Valerio committed
55

Claudio Valerio's avatar
Claudio Valerio committed
56
    UBGraphicsScene* scene();
Claudio Valerio's avatar
Claudio Valerio committed
57

Claudio Valerio's avatar
Claudio Valerio committed
58
    void forcedTabletRelease();
Claudio Valerio's avatar
Claudio Valerio committed
59

Claudio Valerio's avatar
Claudio Valerio committed
60
    void setToolCursor(int tool);
Claudio Valerio's avatar
Claudio Valerio committed
61

Claudio Valerio's avatar
Claudio Valerio committed
62 63
    void rubberItems();
    void moveRubberedItems(QPointF movingVector);
Claudio Valerio's avatar
Claudio Valerio committed
64

Claudio Valerio's avatar
Claudio Valerio committed
65 66 67
    void setMultiselection(bool enable);
    bool isMultipleSelectionEnabled() { return mMultipleSelectionIsEnabled; }
    // work around for handling tablet events on MAC OS with Qt 4.8.0 and above
68
#if defined(Q_OS_OSX)
Claudio Valerio's avatar
Claudio Valerio committed
69 70
    bool directTabletEvent(QEvent *event);
    QWidget *widgetForTabletEvent(QWidget *w, const QPoint &pos);
71
#endif
Claudio Valerio's avatar
Claudio Valerio committed
72 73 74
signals:
    void resized(QResizeEvent* event);
    void shown();
75
    void mouseReleased();
Claudio Valerio's avatar
Claudio Valerio committed
76

Claudio Valerio's avatar
Claudio Valerio committed
77
protected:
Claudio Valerio's avatar
Claudio Valerio committed
78

Claudio Valerio's avatar
Claudio Valerio committed
79 80 81 82 83 84 85 86 87 88 89 90
    bool itemIsLocked(QGraphicsItem *item);
    bool isUBItem(QGraphicsItem *item); // we should to determine items who is not UB and use general scene behavior for them.
    bool isCppTool(QGraphicsItem *item);
    void handleItemsSelection(QGraphicsItem *item);
    bool itemShouldReceiveMousePressEvent(QGraphicsItem *item);
    bool itemShouldReceiveSuspendedMousePressEvent(QGraphicsItem *item);
    bool itemHaveParentWithType(QGraphicsItem *item, int type);
    bool itemShouldBeMoved(QGraphicsItem *item);
    QGraphicsItem* determineItemToPress(QGraphicsItem *item);
    QGraphicsItem* determineItemToMove(QGraphicsItem *item);
    void handleItemMousePress(QMouseEvent *event);
    void handleItemMouseMove(QMouseEvent *event);
Claudio Valerio's avatar
Claudio Valerio committed
91

Claudio Valerio's avatar
Claudio Valerio committed
92
    virtual bool event (QEvent * e);
Claudio Valerio's avatar
Claudio Valerio committed
93

Claudio Valerio's avatar
Claudio Valerio committed
94 95 96 97 98 99 100 101 102
    virtual void keyPressEvent(QKeyEvent *event);
    virtual void keyReleaseEvent(QKeyEvent *event);
    virtual void tabletEvent(QTabletEvent * event);
    virtual void mouseDoubleClickEvent(QMouseEvent *event);
    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseMoveEvent(QMouseEvent *event);
    virtual void mouseReleaseEvent(QMouseEvent *event);
    virtual void wheelEvent(QWheelEvent *event);
    virtual void leaveEvent ( QEvent * event);
Claudio Valerio's avatar
Claudio Valerio committed
103

Claudio Valerio's avatar
Claudio Valerio committed
104
    virtual void focusOutEvent ( QFocusEvent * event );
Claudio Valerio's avatar
Claudio Valerio committed
105

Claudio Valerio's avatar
Claudio Valerio committed
106 107 108
    virtual void drawItems(QPainter *painter, int numItems,
                           QGraphicsItem *items[],
                           const QStyleOptionGraphicsItem options[]);
Claudio Valerio's avatar
Claudio Valerio committed
109

Claudio Valerio's avatar
Claudio Valerio committed
110 111
    virtual void dropEvent(QDropEvent *event);
    virtual void dragMoveEvent(QDragMoveEvent *event);
Claudio Valerio's avatar
Claudio Valerio committed
112

Claudio Valerio's avatar
Claudio Valerio committed
113
    virtual void resizeEvent(QResizeEvent * event);
Claudio Valerio's avatar
Claudio Valerio committed
114

Claudio Valerio's avatar
Claudio Valerio committed
115
    virtual void drawBackground(QPainter *painter, const QRectF &rect);
Claudio Valerio's avatar
Claudio Valerio committed
116

Claudio Valerio's avatar
Claudio Valerio committed
117
private:
Claudio Valerio's avatar
Claudio Valerio committed
118

Claudio Valerio's avatar
Claudio Valerio committed
119
    void init();
Claudio Valerio's avatar
Claudio Valerio committed
120

Claudio Valerio's avatar
Claudio Valerio committed
121 122 123 124 125 126
    inline bool shouldDisplayItem(QGraphicsItem *item)
    {
        bool ok;
        int itemLayerType = item->data(UBGraphicsItemData::ItemLayerType).toInt(&ok);
        return (ok && (itemLayerType >= mStartLayer && itemLayerType <= mEndLayer));
    }
Claudio Valerio's avatar
Claudio Valerio committed
127

Claudio Valerio's avatar
Claudio Valerio committed
128
    QList<QUrl> processMimeData(const QMimeData* pMimeData);
Claudio Valerio's avatar
Claudio Valerio committed
129

Claudio Valerio's avatar
Claudio Valerio committed
130
    UBBoardController* mController;
Claudio Valerio's avatar
Claudio Valerio committed
131

Claudio Valerio's avatar
Claudio Valerio committed
132 133
    int mStartLayer, mEndLayer;
    bool mFilterZIndex;
Claudio Valerio's avatar
Claudio Valerio committed
134

Claudio Valerio's avatar
Claudio Valerio committed
135 136
    bool mTabletStylusIsPressed;
    bool mUsingTabletEraser;
Claudio Valerio's avatar
Claudio Valerio committed
137

Claudio Valerio's avatar
Claudio Valerio committed
138
    bool mPendingStylusReleaseEvent;
Claudio Valerio's avatar
Claudio Valerio committed
139

Claudio Valerio's avatar
Claudio Valerio committed
140 141 142
    bool mMouseButtonIsPressed;
    QPointF mPreviousPoint;
    QPoint mMouseDownPos;
Claudio Valerio's avatar
Claudio Valerio committed
143

Claudio Valerio's avatar
Claudio Valerio committed
144 145 146
    bool mPenPressureSensitive;
    bool mMarkerPressureSensitive;
    bool mUseHighResTabletEvent;
Claudio Valerio's avatar
Claudio Valerio committed
147

Claudio Valerio's avatar
Claudio Valerio committed
148 149 150
    QRubberBand *mRubberBand;
    bool mIsCreatingTextZone;
    bool mIsCreatingSceneGrabZone;
Claudio Valerio's avatar
Claudio Valerio committed
151

Claudio Valerio's avatar
Claudio Valerio committed
152
    bool isAbsurdPoint(QPoint point);
Claudio Valerio's avatar
Claudio Valerio committed
153

Claudio Valerio's avatar
Claudio Valerio committed
154 155
    bool mVirtualKeyboardActive;
    bool mOkOnWidget;
Claudio Valerio's avatar
Claudio Valerio committed
156

Claudio Valerio's avatar
Claudio Valerio committed
157 158 159 160
    bool mWidgetMoved;
    QPointF mLastPressedMousePos;
    QGraphicsItem *movingItem;
    QMouseEvent *suspendedMousePressEvent;
Claudio Valerio's avatar
Claudio Valerio committed
161

Claudio Valerio's avatar
Claudio Valerio committed
162 163
    bool moveRubberBand;
    UBRubberBand *mUBRubberBand;
Claudio Valerio's avatar
Claudio Valerio committed
164

Claudio Valerio's avatar
Claudio Valerio committed
165 166
    QList<QGraphicsItem *> mRubberedItems;
    QSet<QGraphicsItem*> mJustSelectedItems;
167

Claudio Valerio's avatar
Claudio Valerio committed
168 169
    int mLongPressInterval;
    QTimer mLongPressTimer;
Claudio Valerio's avatar
Claudio Valerio committed
170

Claudio Valerio's avatar
Claudio Valerio committed
171 172 173 174 175
    bool mIsDragInProgress;
    bool mMultipleSelectionIsEnabled;
    bool bIsControl;
    bool bIsDesktop;
    bool mRubberBandInPlayMode;
Claudio Valerio's avatar
Claudio Valerio committed
176

Claudio Valerio's avatar
Claudio Valerio committed
177
    static bool hasSelectedParents(QGraphicsItem * item);
Claudio Valerio's avatar
Claudio Valerio committed
178

Claudio Valerio's avatar
Claudio Valerio committed
179
private slots:
Claudio Valerio's avatar
Claudio Valerio committed
180

Claudio Valerio's avatar
Claudio Valerio committed
181
    void settingChanged(QVariant newValue);
Claudio Valerio's avatar
Claudio Valerio committed
182

Claudio Valerio's avatar
Claudio Valerio committed
183
public slots:
Claudio Valerio's avatar
Claudio Valerio committed
184

Claudio Valerio's avatar
Claudio Valerio committed
185 186
    void virtualKeyboardActivated(bool b);
    void longPressEvent();
Claudio Valerio's avatar
Claudio Valerio committed
187 188 189 190

};

#endif /* UBBOARDVIEW_H_ */