first commit
[flip] / src / mainwidget.cpp
1 #include <QtGui/QGraphicsView>
2 #include <QtGui/QHBoxLayout>
3 #include <QtGui/QLabel>
4 #include <QtGui/QLineEdit>
5 #include <QtGui/QMessageBox>
6 #include <QtGui/QPushButton>
7 #include <QtGui/QVBoxLayout>
8 #include "flipscene.h"
9 #include "mainwidget.h"
10
11 class MainWidgetPrivate
12 {
13 public:
14     MainWidgetPrivate(MainWidget *widget) : widget_(widget)
15     {
16         setupUi();
17     }
18
19     FlipScene *scene_;
20     MainWidget *widget_;
21     QGraphicsView *graphicsView_;
22     QLineEdit *columnEdit_;
23     QLineEdit *rowEdit_;
24     QPushButton *startButton_;
25
26 private:
27     void setupUi()
28     {
29         widget_->setWindowTitle(QObject::tr("Flip"));
30
31         QHBoxLayout *layout = new QHBoxLayout(widget_);
32         layout->setAlignment(Qt::AlignCenter);
33
34         QVBoxLayout *leftLayout = new QVBoxLayout;
35         layout->addLayout(leftLayout);
36         leftLayout->addWidget(new QLabel(QObject::tr("Columns (2-9):")));
37         columnEdit_ = new QLineEdit;
38         columnEdit_->setInputMask("D");
39         leftLayout->addWidget(columnEdit_);
40         leftLayout->addWidget(new QLabel(QObject::tr("Rows (2-9):")));
41         rowEdit_ = new QLineEdit;
42         rowEdit_->setInputMask("D");
43         leftLayout->addWidget(rowEdit_);
44         startButton_ = new QPushButton(QObject::tr("Start"));
45         leftLayout->addWidget(startButton_);
46
47         scene_ = new FlipScene(widget_);
48         graphicsView_ = new QGraphicsView(scene_);
49         layout->addWidget(graphicsView_);
50     }
51 };
52
53 MainWidget::MainWidget(QWidget *parent) :
54     QWidget(parent),
55     d_(new MainWidgetPrivate(this))
56 {
57     connect(d_->startButton_, SIGNAL(clicked()), this, SLOT(startGame()));
58     connect(d_->scene_, SIGNAL(win(int)), this, SLOT(winGame(int)));
59
60     d_->columnEdit_->setText("5");
61     d_->rowEdit_->setText("5");
62     startGame();
63 }
64
65 MainWidget::~MainWidget()
66 {
67     delete d_;
68 }
69
70 void MainWidget::startGame()
71 {
72     d_->scene_->setBoard(d_->columnEdit_->text().toInt(), d_->rowEdit_->text().toInt());
73 }
74
75 void MainWidget::winGame(int clicks)
76 {
77     QMessageBox::information(NULL, tr("You Win!"),
78         tr(QString().sprintf("Congratulations! You made it with only %d clicks!", clicks).toLocal8Bit().data()));
79 }