summaryrefslogtreecommitdiffstats
path: root/demos/declarative/minehunt
diff options
context:
space:
mode:
Diffstat (limited to 'demos/declarative/minehunt')
-rw-r--r--demos/declarative/minehunt/main.cpp34
-rw-r--r--demos/declarative/minehunt/minehunt.qml14
2 files changed, 28 insertions, 20 deletions
diff --git a/demos/declarative/minehunt/main.cpp b/demos/declarative/minehunt/main.cpp
index 0e99731..e7a1d7c 100644
--- a/demos/declarative/minehunt/main.cpp
+++ b/demos/declarative/minehunt/main.cpp
@@ -100,8 +100,8 @@ public:
MyWidget(int = 370, int = 480, QWidget *parent=0, Qt::WindowFlags flags=0);
~MyWidget();
- Q_PROPERTY(QList<Tile *> *tiles READ tiles CONSTANT);
- QList<Tile *> *tiles() { return &_tiles; }
+ Q_PROPERTY(QDeclarativeListProperty<Tile> tiles READ tiles CONSTANT);
+ QDeclarativeListProperty<Tile> tiles() { return _tilesProperty; }
Q_PROPERTY(bool isPlaying READ isPlaying NOTIFY isPlayingChanged);
bool isPlaying() {return playing;}
@@ -116,8 +116,8 @@ public:
int numFlags() const{return nFlags;}
public slots:
- Q_INVOKABLE void flip(int row, int col);
- Q_INVOKABLE void flag(int row, int col);
+ Q_INVOKABLE bool flip(int row, int col);
+ Q_INVOKABLE bool flag(int row, int col);
void setBoard();
void reset();
@@ -136,6 +136,7 @@ private:
QDeclarativeView *canvas;
QList<Tile *> _tiles;
+ QDeclarativeListProperty<Tile> _tilesProperty;
int numCols;
int numRows;
bool playing;
@@ -145,6 +146,7 @@ private:
int nFlags;
};
+Q_DECLARE_METATYPE(QList<Tile*>)
MyWidget::MyWidget(int width, int height, QWidget *parent, Qt::WindowFlags flags)
: QWidget(parent, flags), canvas(0), numCols(9), numRows(9), playing(true), won(false)
{
@@ -155,7 +157,6 @@ MyWidget::MyWidget(int width, int height, QWidget *parent, Qt::WindowFlags flags
for(int ii = 0; ii < numRows * numCols; ++ii) {
_tiles << new Tile;
}
-
reset();
QVBoxLayout *vbox = new QVBoxLayout;
@@ -166,9 +167,10 @@ MyWidget::MyWidget(int width, int height, QWidget *parent, Qt::WindowFlags flags
canvas->setFixedSize(width, height);
vbox->addWidget(canvas);
+ _tilesProperty = QDeclarativeListProperty<Tile>(this, _tiles);
+
QDeclarativeContext *ctxt = canvas->rootContext();
ctxt->addDefaultObject(this);
- ctxt->setContextProperty("tiles", QVariant::fromValue<QList<Tile*>*>(&_tiles));//QTBUG-5675
canvas->setSource(QUrl::fromLocalFile(fileName));
}
@@ -235,14 +237,14 @@ int MyWidget::getHint(int row, int col)
return hint;
}
-void MyWidget::flip(int row, int col)
+bool MyWidget::flip(int row, int col)
{
if(!playing)
- return;
+ return false;
Tile *t = tile(row, col);
if (!t || t->hasFlag())
- return;
+ return false;
if(t->flipped()){
int flags = 0;
@@ -255,7 +257,7 @@ void MyWidget::flip(int row, int col)
flags++;
}
if(!t->hint() || t->hint() != flags)
- return;
+ return false;
for (int c = col-1; c <= col+1; c++)
for (int r = row-1; r <= row+1; r++) {
Tile *nearT = tile(r, c);
@@ -263,7 +265,7 @@ void MyWidget::flip(int row, int col)
flip( r, c );
}
}
- return;
+ return true;
}
t->flip();
@@ -297,22 +299,28 @@ void MyWidget::flip(int row, int col)
hasWonChanged();
setPlaying(false);
}
+ return true;
}
-void MyWidget::flag(int row, int col)
+bool MyWidget::flag(int row, int col)
{
Tile *t = tile(row, col);
if(!t)
- return;
+ return false;
t->setHasFlag(!t->hasFlag());
nFlags += (t->hasFlag()?1:-1);
emit numFlagsChanged();
+ return true;
}
/////////////////////////////////////////////////////////
int main(int argc, char ** argv)
{
+#ifdef Q_WS_X11
+ // native on X11 is terrible for this demo.
+ QApplication::setGraphicsSystem("raster");
+#endif
QApplication app(argc, argv);
bool frameless = false;
diff --git a/demos/declarative/minehunt/minehunt.qml b/demos/declarative/minehunt/minehunt.qml
index 617a6ed..8a3cab1 100644
--- a/demos/declarative/minehunt/minehunt.qml
+++ b/demos/declarative/minehunt/minehunt.qml
@@ -31,7 +31,7 @@ Item {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
source: "pics/flag.png"
- opacity: model.hasFlag
+ opacity: modelData.hasFlag
opacity: Behavior {
NumberAnimation {
property: "opacity"
@@ -47,16 +47,16 @@ Item {
Text {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
- text: model.hint
+ text: modelData.hint
color: "white"
font.bold: true
- opacity: !model.hasMine && model.hint > 0
+ opacity: !modelData.hasMine && modelData.hint > 0
}
Image {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
source: "pics/bomb.png"
- opacity: model.hasMine
+ opacity: modelData.hasMine
}
Explosion {
id: expl
@@ -65,7 +65,7 @@ Item {
states: [
State {
name: "back"
- when: model.flipped
+ when: modelData.flipped
PropertyChanges { target: flipable; angle: 180 }
}
]
@@ -81,7 +81,7 @@ Item {
else
ret = 0;
if (ret > 0) {
- if (model.hasMine && model.flipped) {
+ if (modelData.hasMine && modelData.flipped) {
ret*3;
} else {
ret;
@@ -96,7 +96,7 @@ Item {
properties: "angle"
}
ScriptAction{
- script: if(model.hasMine && model.flipped){expl.explode = true;}
+ script: if(modelData.hasMine && modelData.flipped){expl.explode = true;}
}
}
}