Update copyright headers
[qt:qt.git] / demos / declarative / samegame / qml / samegame / samegame.qml
1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the QtDeclarative module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 or version 3 as published by the Free
20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
22 ** following information to ensure the GNU Lesser General Public License
23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 **
26 ** As a special exception, The Qt Company gives you certain additional
27 ** rights. These rights are described in The Qt Company LGPL Exception
28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 **
30 ** GNU General Public License Usage
31 ** Alternatively, this file may be used under the terms of the GNU
32 ** General Public License version 3.0 as published by the Free Software
33 ** Foundation and appearing in the file LICENSE.GPL included in the
34 ** packaging of this file.  Please review the following information to
35 ** ensure the GNU General Public License version 3.0 requirements will be
36 ** met: http://www.gnu.org/copyleft/gpl.html.
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 }