Warning, /education/kanagram/src/ui/Blackboard.qml is written in an unsupported language. File is not indexed.
0001 /***************************************************************************
0002 * This file is part of the Kanagram project *
0003 * Copyright 2014 Debjit Mondal <debjitmondal05@gmail.com> *
0004 * Copyright 2014 Jeremy Whiting <jpwhiting@kde.org> *
0005 * *
0006 * This program is free software; you can redistribute it and/or modify *
0007 * it under the terms of the GNU General Public License as published by *
0008 * the Free Software Foundation; either version 2 of the License, or *
0009 * (at your option) any later version. *
0010 * *
0011 * This program is distributed in the hope that it will be useful, *
0012 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
0013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
0014 * GNU General Public License for more details. *
0015 * *
0016 * You should have received a copy of the GNU General Public License *
0017 * along with this program; if not, write to the *
0018 * Free Software Foundation, Inc., *
0019 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
0020 ***************************************************************************/
0021
0022 import QtQuick
0023 import QtQuick.Controls
0024
0025 Rectangle {
0026
0027 id: blackboard
0028 radius: 4
0029 property alias showHintTimeInterval: hintButton.countDownTimerValue
0030 property alias activeTimer: scoreTimer.running
0031
0032 signal showWiki
0033 signal nextAnagram
0034
0035 function wikiClosed() {
0036 wikiButton.wikiLinkActivated = false
0037 if (activeTimer) {
0038 kanagramGame.answerRevealed();
0039 }
0040 revealButton.countDownTimerValue = 2
0041 showAnswerTimer.repeat = true
0042 showAnswerTimer.start()
0043 }
0044
0045 function letterButtonClicked(index) {
0046 kanagramGame.moveLetterToUserAnswer(index);
0047 checkSolved();
0048 }
0049
0050 Item {
0051 width: parent.width
0052 height: parent.height
0053
0054 Image {
0055 id: background
0056 smooth: true
0057 anchors.fill: parent
0058 source: "images/chalkboard.png"
0059 }
0060 }
0061
0062 Item {
0063 id: categoryBar
0064 anchors.top: parent.top
0065 width: parent.width
0066 height: Math.min(parent.height / 5, 4 * categoryName.height)
0067 Rectangle {
0068 anchors.fill: parent
0069 opacity: .25
0070 color: "black"
0071 }
0072
0073 ToolButton {
0074 height: categoryBar.height
0075 width: categoryBar.height
0076 id: nextVocabularyButton
0077 anchors {
0078 verticalCenter: categoryBar.verticalCenter
0079 right: categoryBar.right
0080 rightMargin: parent.width / 20
0081 }
0082 action: Action {
0083 shortcut: "PgDown"
0084 onTriggered: {
0085 kanagramGame.nextVocabulary();
0086 nextAnagram();
0087 }
0088 text: i18n("Next Vocabulary")
0089 }
0090 Image {
0091 source: "icons/right-arrow.png"
0092 anchors.fill: parent
0093 anchors.margins: 4
0094 fillMode: Image.PreserveAspectFit
0095 }
0096 background: Rectangle { color: "transparent" }
0097 }
0098
0099 Text {
0100 id: categoryName
0101 anchors {
0102 verticalCenter: categoryBar.verticalCenter
0103 horizontalCenter: categoryBar.horizontalCenter
0104 }
0105 color: "white"
0106 text: kanagramGame.title
0107 font.pixelSize: Math.min(parent.width / 19.5, 32)
0108 }
0109
0110 ToolButton {
0111 id: previousVocabularyButton
0112 height: categoryBar.height
0113 width: categoryBar.height
0114 anchors {
0115 verticalCenter: categoryBar.verticalCenter
0116 left: categoryBar.left
0117 leftMargin: parent.width / 20
0118 }
0119 action: Action {
0120 shortcut: "PgUp"
0121 onTriggered: {
0122 kanagramGame.previousVocabulary();
0123 nextAnagram();
0124 }
0125 text: i18n("Previous Vocabulary")
0126 }
0127 Image {
0128 source: "icons/left-arrow.png"
0129 anchors.fill: parent
0130 anchors.margins: 4
0131 fillMode: Image.PreserveAspectFit
0132 }
0133 background: Rectangle { color: "transparent" }
0134 }
0135 }
0136
0137 Item {
0138 id: optionsBar
0139 width: parent.width
0140 height: categoryBar.height
0141 anchors.bottom: parent.bottom
0142 Rectangle {
0143 anchors.fill: parent
0144 opacity: .25
0145 color: "black"
0146 }
0147
0148 ToolButton {
0149 id: scoreButton
0150 height: optionsBar.height
0151 width: optionsBar.height
0152 anchors {
0153 verticalCenter: optionsBar.verticalCenter
0154 left: optionsBar.left
0155 }
0156 property int countDownTimerValue: 0
0157 property bool flagToggleTimer: false
0158 action: Action {
0159 id: scoreAction
0160 shortcut: "Ctrl+S"
0161 onTriggered: {
0162 if (!scoreButton.flagToggleTimer) {
0163 scoreButton.countDownTimerValue = kanagramGame.scoreTime();
0164 scoreTimer.repeat = true;
0165 scoreTimer.start();
0166 kanagramGame.resetTotalScore();
0167 scoreSection.opacity = 0.35;
0168 score.opacity = 1;
0169 } else {
0170 scoreButton.countDownTimerValue = 1
0171 }
0172 scoreButton.flagToggleTimer = !scoreButton.flagToggleTimer;
0173 }
0174 text: i18n("Start Timer");
0175 }
0176 Image {
0177 source: "icons/timer.png"
0178 anchors.fill: parent
0179 anchors.margins: 4
0180 fillMode: Image.PreserveAspectFit
0181 }
0182 background: Rectangle { color: "transparent" }
0183 }
0184
0185 ToolButton {
0186 id: hintButton
0187 action: Action {
0188 id: hintAction
0189 shortcut: "Ctrl+H"
0190 onTriggered: {
0191 hintButton.countDownTimerValue = kanagramGame.hintHideTime()
0192 hintTimer.repeat = true
0193 hintTimer.start()
0194 }
0195 text: i18n("Show Hint")
0196 }
0197 width: optionsBar.height
0198 height: optionsBar.height
0199 property int countDownTimerValue: 0
0200 anchors {
0201 verticalCenter: optionsBar.verticalCenter
0202 horizontalCenter: optionsBar.horizontalCenter
0203 }
0204 Image {
0205 source: "icons/hint.png"
0206 anchors.fill: parent
0207 anchors.margins: 4
0208 fillMode: Image.PreserveAspectFit
0209 }
0210 background: Rectangle { color: "transparent" }
0211 }
0212
0213 Action {
0214 id: revealAction
0215 shortcut: "Ctrl+R"
0216 onTriggered: {
0217 kanagramGame.revealWord();
0218 if (blackboard.activeTimer) {
0219 kanagramGame.answerRevealed();
0220 }
0221 revealButton.countDownTimerValue = 2
0222 showAnswerTimer.repeat = true
0223 showAnswerTimer.start()
0224 }
0225 text: i18n("Reveal Word")
0226 }
0227
0228 ToolButton {
0229 id: revealButton
0230 action: revealAction
0231 width: optionsBar.height
0232 height: optionsBar.height
0233 anchors {
0234 verticalCenter: optionsBar.verticalCenter
0235 right: optionsBar.right
0236 }
0237 property int countDownTimerValue: 0
0238 Image {
0239 source: "icons/reveal.png"
0240 anchors.fill: parent
0241 anchors.margins: 4
0242 fillMode: Image.PreserveAspectFit
0243 }
0244 background: Rectangle { color: "transparent" }
0245 }
0246
0247 Rectangle {
0248 id: timerSection
0249 width: blackboard.width / 9
0250 height: blackboard.height / 7
0251 anchors {
0252 top: blackboard.top
0253 topMargin: blackboard.height / 7
0254 right: blackboard.left
0255 rightMargin: blackboard.width / 68.5
0256 }
0257 color: "black"
0258 opacity: 0
0259 }
0260 }
0261
0262 Text {
0263 id: timeRemaining
0264 anchors {
0265 verticalCenter: timerSection.verticalCenter
0266 horizontalCenter: timerSection.horizontalCenter
0267 }
0268 opacity: 0
0269 text: i18n(" ")
0270 color: "white"
0271 font.pixelSize: parent.width / 32
0272 }
0273
0274 Rectangle {
0275 id: hintSection
0276 width: parent.width / 3
0277 height: parent.height / 3
0278 opacity: 0
0279 color: "black"
0280 anchors {
0281 verticalCenter: blackboard.verticalCenter
0282 right: blackboard.left
0283 rightMargin: blackboard.width / 70
0284 leftMargin: blackboard.width / 70
0285 }
0286 }
0287
0288 Grid {
0289 id: currentWordGrid;
0290 anchors {
0291 centerIn: parent;
0292 }
0293 spacing: 5;
0294 columns: 10;
0295 Repeater {
0296 model: kanagramGame.anagram
0297 LetterButton {
0298 text: modelData
0299 onClicked: letterButtonClicked( index );
0300 }
0301 }
0302 }
0303
0304 Rectangle {
0305 id: wikiSection
0306 width: parent.width / 9
0307 height: parent.height / 7
0308 opacity: 0
0309 // FIXME: Set to visible false to avoid crash in WebView
0310 visible: false
0311 color: "black"
0312 anchors {
0313 verticalCenter: hintSection.verticalCenter
0314 right: hintSection.left
0315 }
0316 }
0317
0318 Text {
0319 id: anagramHint
0320 anchors {
0321 verticalCenter: hintSection.verticalCenter
0322 horizontalCenter: hintSection.horizontalCenter
0323 }
0324 color: "white"
0325 width: hintSection.width
0326 wrapMode: Text.WordWrap
0327 text: kanagramGame.hint
0328 opacity: 0
0329 font.pixelSize: hintSection.width / 10
0330 }
0331
0332 Image {
0333 id: wikiButton
0334 smooth: true
0335 height: wikiSection.height / 2
0336 anchors {
0337 verticalCenter: wikiSection.verticalCenter
0338 horizontalCenter: wikiSection.horizontalCenter
0339 }
0340 source: "icons/wikipedia.png"
0341 opacity: 0
0342 // FIXME: Set to visible false to avoid crash in WebView
0343 visible: false
0344 fillMode: Image.PreserveAspectFit
0345 property bool wikiLinkActivated: false
0346
0347 MouseArea {
0348 anchors.fill: parent
0349 hoverEnabled: true
0350 onEntered: wikiButton.state = "onEntered"
0351 onExited: wikiButton.state = "onExited"
0352 onClicked: {
0353 wikiButton.wikiLinkActivated = true
0354 showWiki()
0355 }
0356 }
0357
0358 states: State {
0359 name: "onEntered"
0360 PropertyChanges {
0361 target: wikiText
0362 opacity: 1
0363 }
0364 }
0365 State {
0366 name: "onExited"
0367 }
0368
0369 transitions: Transition {
0370 PropertyAnimation {
0371 properties: "x,y,opacity"
0372 easing.type: Easing.Linear
0373 easing.amplitude: 5.0
0374 easing.period: 1
0375 }
0376 }
0377 }
0378
0379 Text {
0380 id: wikiText
0381 anchors {
0382 bottom: hintSection.bottom
0383 horizontalCenter: hintSection.horizontalCenter
0384 }
0385 color: "white"
0386 text: i18n("Show Wiki Content")
0387 opacity: 0
0388 font.pixelSize: parent.width / 55
0389 }
0390
0391 Rectangle {
0392 id: scoreSection
0393 width: blackboard.width / 5
0394 height: blackboard.height / 7
0395 anchors {
0396 bottom: blackboard.bottom
0397 bottomMargin: blackboard.height / 7
0398 right: blackboard.left
0399 rightMargin: blackboard.width / 68.5
0400 }
0401 color: "black"
0402 opacity: 0
0403 }
0404
0405 Text {
0406 id: score
0407 anchors {
0408 verticalCenter: scoreSection.verticalCenter
0409 horizontalCenter: scoreSection.horizontalCenter
0410 }
0411 color: "white"
0412 text: kanagramGame.currentPlayer == 1 ? i18n("Score : ") + kanagramGame.score : i18n("Score : ") + kanagramGame.score2
0413 opacity: 0
0414 font.pixelSize: parent.width / 40
0415 }
0416
0417 Timer {
0418 id: hintTimer
0419 interval: 1000
0420 repeat: true
0421 running: false
0422 triggeredOnStart: false
0423
0424 onTriggered: {
0425 if (--hintButton.countDownTimerValue == 0) {
0426 hintSection.opacity = 0
0427 wikiSection.opacity = 0
0428 anagramHint.opacity = 0
0429 wikiText.opacity = 0
0430 wikiButton.opacity = 0
0431 stop()
0432 } else {
0433 hintSection.opacity = 0.35
0434 wikiSection.opacity = 0.35
0435 wikiButton.opacity = 1
0436 anagramHint.opacity = 1
0437 }
0438 }
0439 }
0440
0441 Timer {
0442 id: scoreTimer
0443 interval: 1000
0444 repeat: true
0445 running: false
0446 triggeredOnStart: false
0447
0448 onTriggered: {
0449
0450 if (!wikiButton.wikiLinkActivated) {
0451 if (--scoreButton.countDownTimerValue == 0) {
0452 stop()
0453 timerSection.opacity = 0
0454 timeRemaining.opacity = 0
0455 scoreTimer.running = false
0456
0457 if(!(kanagramGame.singlePlayerMode())) {
0458 if((kanagramGame.getPlayerNumber())==1) {
0459 kanagramGame.setPlayerNumber(2);
0460 score2Box.visible = true;
0461 showTurnText.visible = true;
0462 score2BoxText.visible = false;
0463 }
0464
0465 else {
0466 kanagramGame.setPlayerNumber(1);
0467 score2Box.visible = true;
0468 showTurnText.visible = false;
0469 score2BoxText.visible = true;
0470 }
0471 }
0472
0473 } else {
0474 scoreTimer.running = true
0475 timerSection.opacity = 0.35
0476 if (scoreButton.countDownTimerValue > 9) {
0477 timeRemaining.text = '00:' + scoreButton.countDownTimerValue
0478 } else {
0479 timeRemaining.text = '00:0' + scoreButton.countDownTimerValue
0480 }
0481 timeRemaining.opacity = 1
0482 }
0483 }
0484 }
0485 }
0486
0487 Item {
0488 id: score2Box
0489 anchors {
0490 top: blackboard.top
0491 topMargin: 150
0492 left: blackboard.left
0493 leftMargin: 130
0494 }
0495 visible: false
0496
0497 Rectangle {
0498 id: score2Button
0499 width: blackboard.width / 2
0500 height: blackboard.height / 5
0501 MouseArea {
0502 anchors.fill: parent
0503 }
0504 radius: 8
0505 color: "black"
0506 }
0507
0508 Text {
0509 id: score2BoxText
0510 anchors {
0511 verticalCenter: score2Button.verticalCenter
0512 horizontalCenter: score2Button.horizontalCenter
0513 }
0514 color: "white"
0515 text: i18n(" Player 1 : ") + kanagramGame.score + i18n("\n Player 2 : ") + kanagramGame.score2 + i18n("\n Close dialog for new game ")
0516 }
0517
0518 Text {
0519 id: showTurnText
0520 anchors {
0521 verticalCenter: score2Button.verticalCenter
0522 horizontalCenter: score2Button.horizontalCenter
0523 }
0524 color: "white"
0525 text: i18n(" Time Up. \n Player 2's Turn")
0526 }
0527
0528 ToolButton {
0529 id: closeButton
0530 action: closeAction
0531 width: score2Button.width / 6
0532 height: score2Button.height / 2
0533 anchors {
0534 top: score2Button.top
0535 right: score2Button.right
0536 }
0537
0538 Image {
0539 source: "icons/close.png"
0540 anchors.fill: parent
0541 anchors.margins: 4
0542 fillMode: Image.PreserveAspectFit
0543 }
0544 background: Rectangle { color: "transparent" }
0545 }
0546
0547 Action {
0548 id: closeAction
0549 onTriggered: {
0550 score2Box.visible = false;
0551 }
0552 text: i18n("Close")
0553 }
0554 }
0555
0556 Timer {
0557 id: showAnswerTimer
0558 interval: 1000
0559 repeat: true
0560 running: false
0561 triggeredOnStart: false
0562
0563 onTriggered: {
0564 if (--revealButton.countDownTimerValue == 0) {
0565 kanagramGame.nextAnagram();
0566 if (kanagramGame.hintHideTime())
0567 blackboard.showHintTimeInterval = 1
0568 stop()
0569 }
0570 }
0571 }
0572 }