UBBoardView.h 5.45 KB
Newer Older
Claudio Valerio's avatar
Claudio Valerio committed
1
/*
Claudio Valerio's avatar
Claudio Valerio committed
2
 * Copyright (C) 2013 Open Education Foundation
Claudio Valerio's avatar
Claudio Valerio committed
3
 *
Claudio Valerio's avatar
Claudio Valerio committed
4 5
 * 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
6
 *
Claudio Valerio's avatar
Claudio Valerio committed
7 8 9
 * This file is part of OpenBoard.
 *
 * OpenBoard is free software: you can redistribute it and/or modify
Claudio Valerio's avatar
Claudio Valerio committed
10 11 12 13 14 15
 * 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
16
 * OpenBoard is distributed in the hope that it will be useful,
Claudio Valerio's avatar
Claudio Valerio committed
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Claudio Valerio's avatar
Claudio Valerio committed
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Claudio Valerio's avatar
Claudio Valerio committed
19 20 21
 * 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
22
 * along with OpenBoard. If not, see <http://www.gnu.org/licenses/>.
Claudio Valerio's avatar
Claudio Valerio committed
23 24
 */

Claudio Valerio's avatar
Claudio Valerio committed
25

Claudio Valerio's avatar
Claudio Valerio committed
26

Claudio Valerio's avatar
Claudio Valerio committed
27 28 29
#ifndef UBBOARDVIEW_H_
#define UBBOARDVIEW_H_

30 31
#define CONTROLVIEW_OBJ_NAME "ControlView"

Claudio Valerio's avatar
Claudio Valerio committed
32 33 34 35 36 37 38 39 40 41 42 43 44
#include <QtGui>
#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
45
public:
Claudio Valerio's avatar
Claudio Valerio committed
46

Claudio Valerio's avatar
Claudio Valerio committed
47 48 49
    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
50

Claudio Valerio's avatar
Claudio Valerio committed
51
    UBGraphicsScene* scene();
Claudio Valerio's avatar
Claudio Valerio committed
52

Claudio Valerio's avatar
Claudio Valerio committed
53
    void forcedTabletRelease();
Claudio Valerio's avatar
Claudio Valerio committed
54

Claudio Valerio's avatar
Claudio Valerio committed
55
    void setToolCursor(int tool);
Claudio Valerio's avatar
Claudio Valerio committed
56

Claudio Valerio's avatar
Claudio Valerio committed
57 58
    void rubberItems();
    void moveRubberedItems(QPointF movingVector);
Claudio Valerio's avatar
Claudio Valerio committed
59

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

Claudio Valerio's avatar
Claudio Valerio committed
72
protected:
Claudio Valerio's avatar
Claudio Valerio committed
73

Claudio Valerio's avatar
Claudio Valerio committed
74 75 76 77 78 79 80 81 82 83 84 85
    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
86

Claudio Valerio's avatar
Claudio Valerio committed
87
    virtual bool event (QEvent * e);
Claudio Valerio's avatar
Claudio Valerio committed
88

Claudio Valerio's avatar
Claudio Valerio committed
89 90 91 92 93 94 95 96 97
    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
98

Claudio Valerio's avatar
Claudio Valerio committed
99
    virtual void focusOutEvent ( QFocusEvent * event );
Claudio Valerio's avatar
Claudio Valerio committed
100

Claudio Valerio's avatar
Claudio Valerio committed
101 102 103
    virtual void drawItems(QPainter *painter, int numItems,
                           QGraphicsItem *items[],
                           const QStyleOptionGraphicsItem options[]);
Claudio Valerio's avatar
Claudio Valerio committed
104

Claudio Valerio's avatar
Claudio Valerio committed
105 106
    virtual void dropEvent(QDropEvent *event);
    virtual void dragMoveEvent(QDragMoveEvent *event);
Claudio Valerio's avatar
Claudio Valerio committed
107

Claudio Valerio's avatar
Claudio Valerio committed
108
    virtual void resizeEvent(QResizeEvent * event);
Claudio Valerio's avatar
Claudio Valerio committed
109

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

Claudio Valerio's avatar
Claudio Valerio committed
112
private:
Claudio Valerio's avatar
Claudio Valerio committed
113

Claudio Valerio's avatar
Claudio Valerio committed
114
    void init();
Claudio Valerio's avatar
Claudio Valerio committed
115

Claudio Valerio's avatar
Claudio Valerio committed
116 117 118 119 120 121
    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
122

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

Claudio Valerio's avatar
Claudio Valerio committed
125
    UBBoardController* mController;
Claudio Valerio's avatar
Claudio Valerio committed
126

Claudio Valerio's avatar
Claudio Valerio committed
127 128
    int mStartLayer, mEndLayer;
    bool mFilterZIndex;
Claudio Valerio's avatar
Claudio Valerio committed
129

Claudio Valerio's avatar
Claudio Valerio committed
130 131
    bool mTabletStylusIsPressed;
    bool mUsingTabletEraser;
Claudio Valerio's avatar
Claudio Valerio committed
132

Claudio Valerio's avatar
Claudio Valerio committed
133
    bool mPendingStylusReleaseEvent;
Claudio Valerio's avatar
Claudio Valerio committed
134

Claudio Valerio's avatar
Claudio Valerio committed
135 136 137
    bool mMouseButtonIsPressed;
    QPointF mPreviousPoint;
    QPoint mMouseDownPos;
Claudio Valerio's avatar
Claudio Valerio committed
138

Claudio Valerio's avatar
Claudio Valerio committed
139 140 141
    bool mPenPressureSensitive;
    bool mMarkerPressureSensitive;
    bool mUseHighResTabletEvent;
Claudio Valerio's avatar
Claudio Valerio committed
142

Claudio Valerio's avatar
Claudio Valerio committed
143 144 145
    QRubberBand *mRubberBand;
    bool mIsCreatingTextZone;
    bool mIsCreatingSceneGrabZone;
Claudio Valerio's avatar
Claudio Valerio committed
146

Claudio Valerio's avatar
Claudio Valerio committed
147
    bool isAbsurdPoint(QPoint point);
Claudio Valerio's avatar
Claudio Valerio committed
148

Claudio Valerio's avatar
Claudio Valerio committed
149 150
    bool mVirtualKeyboardActive;
    bool mOkOnWidget;
Claudio Valerio's avatar
Claudio Valerio committed
151

Claudio Valerio's avatar
Claudio Valerio committed
152 153 154 155
    bool mWidgetMoved;
    QPointF mLastPressedMousePos;
    QGraphicsItem *movingItem;
    QMouseEvent *suspendedMousePressEvent;
Claudio Valerio's avatar
Claudio Valerio committed
156

Claudio Valerio's avatar
Claudio Valerio committed
157 158
    bool moveRubberBand;
    UBRubberBand *mUBRubberBand;
Claudio Valerio's avatar
Claudio Valerio committed
159

Claudio Valerio's avatar
Claudio Valerio committed
160 161
    QList<QGraphicsItem *> mRubberedItems;
    QSet<QGraphicsItem*> mJustSelectedItems;
162

Claudio Valerio's avatar
Claudio Valerio committed
163 164
    int mLongPressInterval;
    QTimer mLongPressTimer;
Claudio Valerio's avatar
Claudio Valerio committed
165

Claudio Valerio's avatar
Claudio Valerio committed
166 167 168 169 170
    bool mIsDragInProgress;
    bool mMultipleSelectionIsEnabled;
    bool bIsControl;
    bool bIsDesktop;
    bool mRubberBandInPlayMode;
Claudio Valerio's avatar
Claudio Valerio committed
171

Claudio Valerio's avatar
Claudio Valerio committed
172
    static bool hasSelectedParents(QGraphicsItem * item);
Claudio Valerio's avatar
Claudio Valerio committed
173

Claudio Valerio's avatar
Claudio Valerio committed
174
private slots:
Claudio Valerio's avatar
Claudio Valerio committed
175

Claudio Valerio's avatar
Claudio Valerio committed
176
    void settingChanged(QVariant newValue);
Claudio Valerio's avatar
Claudio Valerio committed
177

Claudio Valerio's avatar
Claudio Valerio committed
178
public slots:
Claudio Valerio's avatar
Claudio Valerio committed
179

Claudio Valerio's avatar
Claudio Valerio committed
180 181
    void virtualKeyboardActivated(bool b);
    void longPressEvent();
Claudio Valerio's avatar
Claudio Valerio committed
182 183 184 185

};

#endif /* UBBOARDVIEW_H_ */