Preventing too early interaction with puzzle pieces
[impuzzle] / src / puzzleitem.cpp
index ccf0b33..fd5ff88 100644 (file)
@@ -26,6 +26,7 @@
 #include <QFontMetrics>
 
 int PuzzleItem::moveCount_ = 0;
+bool PuzzleItem::manuallyMovable_ = false;
 
 PuzzleItem::PuzzleItem(QGraphicsItem *parent) :
         QGraphicsPixmapItem(parent)
@@ -33,6 +34,7 @@ PuzzleItem::PuzzleItem(QGraphicsItem *parent) :
     movable_ = true;
     moveAnimation_ = new QPropertyAnimation(this, "pos", this);
     pieceNumber_ = 0;
+    drawNumber_ = true;
 }
 
 QPointF PuzzleItem::correctPlace() const
@@ -74,7 +76,7 @@ void PuzzleItem::moveMeTo(const QPointF &location)
 
 void PuzzleItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
 {
-    if(movable_) {
+    if(movable_ && manuallyMovable_) {
         moveMeTo(GameView::instance()->emptyPlace());
         QPointF tmp = currentPlace();
         setCurrentPlace(GameView::instance()->emptyPlace());
@@ -114,29 +116,36 @@ void PuzzleItem::resetMoveCount()
     moveCount_ = 0;
 }
 
+void PuzzleItem::setManuallyMovable(const bool manuallyMovable)
+{
+    manuallyMovable_ = manuallyMovable;
+}
+
 void PuzzleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
 {
     QGraphicsPixmapItem::paint(painter, option, widget);
 
-    painter->save();
+    if(drawNumber_) {
+        painter->save();
 
-    QFont font = painter->font();
-    QFontMetrics metrics(font);
-    QRect numberRect(0, 0, metrics.height(), metrics.height());
+        QFont font = painter->font();
+        QFontMetrics metrics(font);
+        QRect numberRect(0, 0, metrics.height(), metrics.height());
 
-    painter->setPen(Qt::NoPen);
+        painter->setPen(Qt::NoPen);
 
-    painter->setBrush(QColor(255, 255, 255, 192));
-    painter->drawRect(numberRect);
+        painter->setBrush(QColor(255, 255, 255, 192));
+        painter->drawRect(numberRect);
 
-    painter->setPen(Qt::black);
+        painter->setPen(Qt::black);
 
-    QTextOption textOption;
-    textOption.setAlignment(Qt::AlignCenter);
+        QTextOption textOption;
+        textOption.setAlignment(Qt::AlignCenter);
 
-    painter->drawText(numberRect, QString::number(pieceNumber_), textOption);
+        painter->drawText(numberRect, QString::number(pieceNumber_), textOption);
 
-    painter->restore();
+        painter->restore();
+    }
 }
 
 int PuzzleItem::pieceNumber() const
@@ -148,3 +157,21 @@ void PuzzleItem::setPieceNumber(const int pieceNumber)
 {
     pieceNumber_ = pieceNumber;
 }
+
+void PuzzleItem::setDrawNumber(bool value)
+{
+    if(value != drawNumber_) {
+        drawNumber_ = value;
+        update();
+    }
+}
+
+bool PuzzleItem::drawNumber() const
+{
+    return drawNumber_;
+}
+
+void PuzzleItem::setMoveCount(int count)
+{
+    moveCount_ = count;
+}