Piece place numbers, temporary random image fix and changelog update
authortimoph <timop.harkonen@gmail.com>
Sat, 23 Jan 2010 21:11:27 +0000 (21:11 +0000)
committertimoph <timop.harkonen@gmail.com>
Sat, 23 Jan 2010 21:11:27 +0000 (21:11 +0000)
git-svn-id: file:///svnroot/impuzzle/trunk@10 e6bec12f-0854-4cc4-ad26-6875f1509f77

debian/changelog
src/imageimporter.cpp
src/mainwindow.cpp
src/mainwindow.h
src/puzzleitem.cpp
src/puzzleitem.h
src/settingsdialog.cpp
src/settingsdialog.h

index 149fe01..f015f99 100644 (file)
@@ -1,8 +1,15 @@
+impuzzle (0.3-1maemo0) unstable; urgency=low
+
+  * Implemented: Show location numbers on the pieces
+  * Fixes: Random image not random after first game
+
+ -- Timo Härkönen <timop.harkonen@gmail.com>  Sat, 23 Jan 2010 22:59:42 +0200
+
 impuzzle (0.2-1maemo0) unstable; urgency=low
 
-  * Implements: User specified image used in puzzle
-  * Implements: Random image used in puzzle
-  * Implements: Difficulty settings
+  * Implemented: User specified image used in puzzle
+  * Implemented: Random image used in puzzle
+  * Implemented: Difficulty settings
   * Fixes: All pieces movable after shuffle
 
  -- Timo Härkönen <timop.harkonen@gmail.com>  Sun, 3 Jan 2010 10:32:42 +0200
index dab504b..ab341e9 100644 (file)
@@ -75,11 +75,15 @@ QList<PuzzleItem *> ImageImporter::newPieces(const QPixmap &pixmap, const int co
     int verticalStep = IMAGE_HEIGHT / verticalCount;
     int horizontalStep = IMAGE_WIDTH / horizontalCount;
 
+    int pieceNo = 1;
+
     for(int i = 0; i < verticalCount; ++i) {
         for(int j = 0; j < horizontalCount; ++j) {
             PuzzleItem *item = new PuzzleItem;
             item->setPixmap(tmp.copy(QRect(QPoint(j * horizontalStep, i * verticalStep),
                                            QPoint(horizontalStep + j * horizontalStep, verticalStep + i * verticalStep))));
+            item->setPieceNumber(pieceNo);
+            pieceNo++;
             list.append(item);
         }
     }
index b728d4d..2f1f644 100644 (file)
@@ -34,6 +34,7 @@ MainWindow::MainWindow(QWidget *parent) :
     createMenu();
 
     setCentralWidget(GameView::instance());
+    settingsDialog_ = new SettingsDialog(this);
 }
 
 void MainWindow::createMenu()
@@ -63,8 +64,9 @@ void MainWindow::importClicked()
 
 void MainWindow::newGameClicked()
 {
-    SettingsDialog dialog(this);
-    dialog.exec();
+    //SettingsDialog dialog(this);
+    //dialog.exec();
+    settingsDialog_->exec();
 
     GameView::instance()->setPieces(ImageImporter::instance()->newPieces(Settings::instance()->image(), Settings::instance()->pieceCount()));
 }
index f101b5b..df704e4 100644 (file)
@@ -23,6 +23,7 @@
 
 class QAction;
 class QMenu;
+class SettingsDialog;
 
 class MainWindow : public QMainWindow
 {
@@ -45,5 +46,7 @@ private:
     QAction *settingsAction_;
 
     QMenu *menu_;
+
+    SettingsDialog *settingsDialog_;
 };
 #endif
index 500b475..ccf0b33 100644 (file)
@@ -21,6 +21,9 @@
 
 #include <QGraphicsSceneMouseEvent>
 #include <QPropertyAnimation>
+#include <QPainter>
+#include <QFont>
+#include <QFontMetrics>
 
 int PuzzleItem::moveCount_ = 0;
 
@@ -29,6 +32,7 @@ PuzzleItem::PuzzleItem(QGraphicsItem *parent) :
 {
     movable_ = true;
     moveAnimation_ = new QPropertyAnimation(this, "pos", this);
+    pieceNumber_ = 0;
 }
 
 QPointF PuzzleItem::correctPlace() const
@@ -109,3 +113,38 @@ void PuzzleItem::resetMoveCount()
 {
     moveCount_ = 0;
 }
+
+void PuzzleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+    QGraphicsPixmapItem::paint(painter, option, widget);
+
+    painter->save();
+
+    QFont font = painter->font();
+    QFontMetrics metrics(font);
+    QRect numberRect(0, 0, metrics.height(), metrics.height());
+
+    painter->setPen(Qt::NoPen);
+
+    painter->setBrush(QColor(255, 255, 255, 192));
+    painter->drawRect(numberRect);
+
+    painter->setPen(Qt::black);
+
+    QTextOption textOption;
+    textOption.setAlignment(Qt::AlignCenter);
+
+    painter->drawText(numberRect, QString::number(pieceNumber_), textOption);
+
+    painter->restore();
+}
+
+int PuzzleItem::pieceNumber() const
+{
+    return pieceNumber_;
+}
+
+void PuzzleItem::setPieceNumber(const int pieceNumber)
+{
+    pieceNumber_ = pieceNumber;
+}
index 8cf4819..af4aca3 100644 (file)
@@ -40,6 +40,9 @@ public:
     void moveMeTo(const QPointF &location);
     static int moveCount();
     static void resetMoveCount();
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+    void setPieceNumber(const int pieceNumber);
+    int pieceNumber() const;
 
 protected:
     void mousePressEvent(QGraphicsSceneMouseEvent *event);
@@ -51,5 +54,6 @@ private:
     bool movable_;
     QPropertyAnimation *moveAnimation_;
     static int moveCount_;
+    int pieceNumber_;
 };
 #endif
index 985dfb6..6507153 100644 (file)
@@ -51,6 +51,16 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
     connect(imageCombo_, SIGNAL(currentIndexChanged(QString)), this, SLOT(imageSelectionChanged(QString)));
 }
 
+int SettingsDialog::exec()
+{
+    // Making sure that a random image is picked when starting a new game after the first game (fix me)
+    if(imageCombo_->currentText() == RANDOM_IMAGE_TXT) {
+        imageSelectionChanged(RANDOM_IMAGE_TXT);
+    }
+
+    return QDialog::exec();
+}
+
 void SettingsDialog::difficultySelectionChanged(bool value)
 {
     if(value) {
index 6d2babc..757a489 100644 (file)
@@ -17,6 +17,9 @@ class SettingsDialog : public QDialog
 public:
     SettingsDialog(QWidget *parent = 0);
 
+public slots:
+    int exec();
+
 private slots:
     void difficultySelectionChanged(bool value);
     void imageSelectionChanged(const QString &txt);