Changing settings dialog logic and menu changes
[impuzzle] / src / gameview.h
1 /*
2   Image Puzzle - A set your pieces straight game
3   Copyright (C) 2009  Timo Härkönen
4
5   This program is free software: you can redistribute it and/or modify
6   it under the terms of the GNU General Public License as published by
7   the Free Software Foundation, either version 3 of the License, or
8   (at your option) any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU General Public License for more details.
14
15   You should have received a copy of the GNU General Public License
16   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #ifndef GAMEVIEW_H
20 #define GAMEVIEW_H
21
22 #include <QGraphicsView>
23
24 class GraphicsScene;
25 class PuzzleItem;
26 class IntroItem;
27
28 class GameView : public QGraphicsView
29 {
30     Q_OBJECT
31
32 public:
33     static GameView *instance();
34     QList<PuzzleItem *> pieces() const;
35     QPointF emptyPlace();
36     void setEmptyPlace(const QPointF &place);
37     bool areAllPiecesOk();
38     void setMovingPieces();
39
40 public slots:
41     void setPieces(const QList<PuzzleItem *> pieces, bool shuffle = true);
42     void shufflePieces();
43     bool restoreGame();
44     void saveGame();
45
46 private slots:
47     void shuffleAnimationFinished();
48
49 signals:
50     void gameWon();
51     void gameRestored();
52
53 protected:
54     void closeEvent(QCloseEvent *event);
55
56 private:
57     GameView(QWidget *parent = 0);
58     int correctPlaces() const;
59     QList<int> movingPlaces() const;
60
61     static GameView *instance_;
62     QGraphicsScene *scene_;
63     QList<PuzzleItem *> pieces_;
64     QPointF emptyPlace_;
65     int hiddenIndex_;
66     IntroItem *introItem_;
67
68     int verticalStep_;
69     int horizontalStep_;
70 };
71 #endif