новые иконки в OpenBoard
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
OpenBoard/src/board/UBBoardView.h

190 lines
5.6 KiB

/*
* Copyright (C) 2015-2018 Département de l'Instruction Publique (DIP-SEM)
*
* Copyright (C) 2013 Open Education Foundation
*
* Copyright (C) 2010-2013 Groupement d'Intérêt Public pour
* l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of OpenBoard.
*
* OpenBoard is free software: you can redistribute it and/or modify
* 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).
*
* OpenBoard is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenBoard. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef UBBOARDVIEW_H_
#define UBBOARDVIEW_H_
#define CONTROLVIEW_OBJ_NAME "ControlView"
#include <QtGui>
#include <QGraphicsView>
#include <QRubberBand>
#include "core/UB.h"
#include "domain/UBGraphicsDelegateFrame.h"
class UBBoardController;
class UBGraphicsScene;
class UBGraphicsWidgetItem;
class UBRubberBand;
class UBBoardView : public QGraphicsView
{
Q_OBJECT
public:
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();
UBGraphicsScene* scene();
void forcedTabletRelease();
void setToolCursor(int tool);
void rubberItems();
void moveRubberedItems(QPointF movingVector);
void setMultiselection(bool enable);
bool isMultipleSelectionEnabled() { return mMultipleSelectionIsEnabled; }
// work around for handling tablet events on MAC OS with Qt 4.8.0 and above
#if defined(Q_OS_OSX)
bool directTabletEvent(QEvent *event);
QWidget *widgetForTabletEvent(QWidget *w, const QPoint &pos);
#endif
signals:
void resized(QResizeEvent* event);
void shown();
void mouseReleased();
protected:
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);
virtual bool event (QEvent * e);
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);
virtual void focusOutEvent ( QFocusEvent * event );
virtual void drawItems(QPainter *painter, int numItems,
QGraphicsItem *items[],
const QStyleOptionGraphicsItem options[]);
virtual void dropEvent(QDropEvent *event);
virtual void dragMoveEvent(QDragMoveEvent *event);
virtual void resizeEvent(QResizeEvent * event);
virtual void drawBackground(QPainter *painter, const QRectF &rect);
private:
void init();
inline bool shouldDisplayItem(QGraphicsItem *item)
{
bool ok;
int itemLayerType = item->data(UBGraphicsItemData::ItemLayerType).toInt(&ok);
return (ok && (itemLayerType >= mStartLayer && itemLayerType <= mEndLayer));
}
QList<QUrl> processMimeData(const QMimeData* pMimeData);
UBBoardController* mController;
int mStartLayer, mEndLayer;
bool mFilterZIndex;
bool mTabletStylusIsPressed;
bool mUsingTabletEraser;
bool mPendingStylusReleaseEvent;
bool mMouseButtonIsPressed;
QPointF mPreviousPoint;
QPoint mMouseDownPos;
bool mPenPressureSensitive;
bool mMarkerPressureSensitive;
bool mUseHighResTabletEvent;
QRubberBand *mRubberBand;
bool mIsCreatingTextZone;
bool mIsCreatingSceneGrabZone;
bool isAbsurdPoint(QPoint point);
bool mVirtualKeyboardActive;
bool mOkOnWidget;
bool mWidgetMoved;
QPointF mLastPressedMousePos;
QGraphicsItem *movingItem;
QMouseEvent *suspendedMousePressEvent;
bool moveRubberBand;
UBRubberBand *mUBRubberBand;
QList<QGraphicsItem *> mRubberedItems;
QSet<QGraphicsItem*> mJustSelectedItems;
int mLongPressInterval;
QTimer mLongPressTimer;
bool mIsDragInProgress;
bool mMultipleSelectionIsEnabled;
bool bIsControl;
bool bIsDesktop;
bool mRubberBandInPlayMode;
static bool hasSelectedParents(QGraphicsItem * item);
private slots:
void settingChanged(QVariant newValue);
public slots:
void virtualKeyboardActivated(bool b);
void longPressEvent();
};
#endif /* UBBOARDVIEW_H_ */