Initial import from the monolithic Qt.
[profile/ivi/qtdeclarative.git] / demos / declarative / samegame / samegame.qml
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the QtDeclarative module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
14 ** this package.
15 **
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file.  Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23 **
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27 **
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
30 **
31 **
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 import QtQuick 1.1
43 import "SamegameCore"
44 import "SamegameCore/samegame.js" as Logic
45
46 Rectangle {
47     id: screen
48     width: 490; height: 720
49     property bool inAnotherDemo: false //Samegame often is just plonked straight into other demos
50
51     SystemPalette { id: activePalette }
52
53     Item {
54         width: parent.width
55         anchors { top: parent.top; bottom: toolBar.top }
56
57         Image {
58             id: background
59             anchors.fill: parent
60             source: "SamegameCore/pics/background.png"
61             fillMode: Image.PreserveAspectCrop
62         }
63
64         Item {
65             id: gameCanvas
66             property int score: 0
67             property int blockSize: 40
68
69             z: 20; anchors.centerIn: parent
70             width: parent.width - (parent.width % blockSize);
71             height: parent.height - (parent.height % blockSize);
72
73             MouseArea {
74                 anchors.fill: parent; onClicked: Logic.handleClick(mouse.x,mouse.y);
75             }
76         }
77     }
78
79     Dialog { id: dialog; anchors.centerIn: parent; z: 21 }
80
81     Dialog {
82         id: nameInputDialog
83
84         property int initialWidth: 0
85         property alias name: nameInputText.text
86
87         anchors.centerIn: parent
88         z: 22;
89
90         Behavior on width {
91             NumberAnimation {} 
92             enabled: nameInputDialog.initialWidth != 0
93         }
94
95         onClosed: {
96             if (nameInputText.text != "")
97                 Logic.saveHighScore(nameInputText.text);
98         }
99         Text {
100             id: dialogText
101             anchors { left: nameInputDialog.left; leftMargin: 20; verticalCenter: parent.verticalCenter }
102             text: "You won! Please enter your name: "
103         }
104         MouseArea {
105             anchors.fill: parent
106             onClicked: {
107                 if (nameInputText.text == "")
108                     nameInputText.openSoftwareInputPanel();
109                 else
110                     nameInputDialog.forceClose();
111             }
112         }
113
114         TextInput {
115             id: nameInputText
116             anchors { verticalCenter: parent.verticalCenter; left: dialogText.right }
117             focus: visible
118             autoScroll: false
119             maximumLength: 24
120             onTextChanged: {
121                 var newWidth = nameInputText.width + dialogText.width + 40;
122                 if ( (newWidth > nameInputDialog.width && newWidth < screen.width) 
123                         || (nameInputDialog.width > nameInputDialog.initialWidth) )
124                     nameInputDialog.width = newWidth;
125             }
126             onAccepted: {
127                 nameInputDialog.forceClose();
128             }
129         }
130     }
131
132     Rectangle {
133         id: toolBar
134         width: parent.width; height: 58
135         color: activePalette.window
136         anchors.bottom: screen.bottom
137
138         Button {
139             id: newGameButton
140             anchors { left: parent.left; leftMargin: 3; verticalCenter: parent.verticalCenter }
141             text: "New Game" 
142             onClicked: Logic.startNewGame()
143         }
144
145         Button {
146             visible: !inAnotherDemo
147             text: "Quit"
148             anchors { left: newGameButton.right; leftMargin: 3; verticalCenter: parent.verticalCenter }
149             onClicked: Qt.quit();
150         }
151
152         Text {
153             id: score
154             anchors { right: parent.right; rightMargin: 3; verticalCenter: parent.verticalCenter }
155             text: "Score: " + gameCanvas.score
156             font.bold: true
157             font.pixelSize: 24
158             color: activePalette.windowText
159         }
160     }
161 }