/* * This program 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, either version 2 of the License, or * (at your option) any later version. * * This program 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 this program. If not, see . */ #ifndef UBBOARDVIEW_H_ #define UBBOARDVIEW_H_ #include #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 pIsControl = false); UBBoardView(UBBoardController* pController, int pStartLayer, int pEndLayer, QWidget* pParent = 0, bool pIscontrol = 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; } signals: void resized(QResizeEvent* event); void hidden(); void shown(); void clickOnBoard(); 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. 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 dragEnterEvent(QDragEnterEvent * event); virtual void dropEvent(QDropEvent *event); virtual void dragMoveEvent(QDragMoveEvent *event); virtual void resizeEvent(QResizeEvent * event); virtual void drawBackground(QPainter *painter, const QRectF &rect); virtual void showEvent(QShowEvent * event); virtual void hideEvent(QHideEvent * event); 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 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 mRubberedItems; QSet mJustSelectedItems; int mLongPressInterval; QTimer mLongPressTimer; bool mIsDragInProgress; bool mMultipleSelectionIsEnabled; bool isControl; bool mRubberBandInPlayMode; static bool hasSelectedParents(QGraphicsItem * item); private slots: void settingChanged(QVariant newValue); public slots: void virtualKeyboardActivated(bool b); void longPressEvent(); }; #endif /* UBBOARDVIEW_H_ */