File indexing completed on 2024-05-19 04:07:52
0001 /* 0002 SPDX-FileCopyrightText: 2009, 2010 Stefan Majewsky <majewsky@gmx.net> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef PALAPELI_VIEW_H 0008 #define PALAPELI_VIEW_H 0009 0010 #include <QGraphicsView> 0011 0012 namespace Palapeli 0013 { 0014 class InteractorManager; 0015 class Scene; 0016 class Piece; 0017 0018 class View : public QGraphicsView 0019 { 0020 Q_OBJECT 0021 friend class GamePlay; 0022 Q_PROPERTY(QRectF viewportRect READ viewportRect WRITE setViewportRect) 0023 public: 0024 View(); 0025 0026 void puzzleStarted(); 0027 Palapeli::InteractorManager* interactorManager() const; 0028 Palapeli::Scene* scene() const; 0029 0030 QRectF viewportRect() const; 0031 void setViewportRect(const QRectF& viewportRect); 0032 void teleportPieces(Piece* piece, const QPointF& scPos); 0033 void toggleCloseUp(); 0034 void setCloseUp(bool onOff); 0035 void handleNewPieceSelection(); 0036 0037 static const int MinimumZoomLevel; 0038 static const int MaximumZoomLevel; 0039 public Q_SLOTS: 0040 void logSceneChange(const QRectF &r); // IDW test. 0041 void setScene(Palapeli::Scene* scene); 0042 0043 void moveViewportBy(const QPointF& sceneDelta); 0044 void zoomSliderInput(int level); 0045 void zoomIn(); 0046 void zoomOut(); 0047 void zoomBy(int delta); //delta = 0 -> no change, delta < 0 -> zoom out, delta > 0 -> zoom in 0048 void zoomTo(int level); //level = 100 -> actual size 0049 protected: 0050 void keyPressEvent(QKeyEvent* event) override; 0051 void keyReleaseEvent(QKeyEvent* event) override; 0052 void mouseMoveEvent(QMouseEvent* event) override; 0053 void mousePressEvent(QMouseEvent* event) override; 0054 void mouseReleaseEvent(QMouseEvent* event) override; 0055 void wheelEvent(QWheelEvent* event) override; 0056 Q_SIGNALS: 0057 void zoomLevelChanged(int level); 0058 void zoomAdjustable(bool adjustable); 0059 void teleport(Piece* p, const QPointF& scPos, View* v); 0060 void newPieceSelectionSeen(View* v); 0061 protected: 0062 virtual int calculateZoomRange(qreal distantScale, 0063 bool distantView); 0064 virtual qreal calculateCloseUpScale(); 0065 private Q_SLOTS: 0066 void startVictoryAnimation(); 0067 void adjustPointer(); 0068 private: 0069 Palapeli::InteractorManager* m_interactorManager; 0070 Palapeli::Scene* m_scene; 0071 QPointF m_dragPrevPos; 0072 int m_zoomLevel; 0073 int m_closeUpLevel; 0074 int m_distantLevel; 0075 bool m_isCloseUp; 0076 qreal m_dZoom; 0077 qreal m_minScale; 0078 QPoint m_mousePos; 0079 QPointF m_scenePos; 0080 bool m_adjustPointer; 0081 }; 0082 } 0083 0084 #endif // PALAPELI_VIEW_H