added structure
This commit is contained in:
parent
e1ae773ec0
commit
565ae69709
20 changed files with 279 additions and 1188 deletions
|
@ -1,12 +0,0 @@
|
|||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.4
|
||||
import "./"
|
||||
|
||||
Page {
|
||||
id: cal
|
||||
signal pageOpened()
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "red"
|
||||
}
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.4
|
||||
import "./"
|
||||
|
||||
Page {
|
||||
id: root
|
||||
|
||||
signal pageOpened()
|
||||
RoundButton {
|
||||
id: calenderButton
|
||||
text: "calender"
|
||||
height: parent.width * 0.2
|
||||
width: height
|
||||
font.pixelSize: parent.width * 0.03
|
||||
anchors {
|
||||
left: parent.left
|
||||
top: parent.top
|
||||
leftMargin: parent.width * 0.5 - width * 0.5
|
||||
topMargin: parent.height * 0.3 - height * 0.5
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
game.calender()
|
||||
}
|
||||
}
|
||||
|
||||
RoundButton {
|
||||
id: calculatorButton
|
||||
text: "calculator"
|
||||
height: parent.width * 0.2
|
||||
width: height
|
||||
font.pixelSize: parent.width * 0.03
|
||||
anchors {
|
||||
left: parent.left
|
||||
top: parent.top
|
||||
leftMargin: parent.width * 0.5 - width * 0.5
|
||||
topMargin: parent.height * 0.6 - height * 0.5
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
game.calculator()
|
||||
}
|
||||
}
|
||||
}
|
82
android-sources/AndroidManifest.xml
Normal file
82
android-sources/AndroidManifest.xml
Normal file
|
@ -0,0 +1,82 @@
|
|||
<?xml version="1.0"?>
|
||||
<manifest package="com.max.mathtrainingstuff" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
|
||||
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="mathtrainingstuff" android:icon="@drawable/icon">
|
||||
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="mathtrainingstuff" android:screenOrientation="unspecified" android:launchMode="singleTop">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
|
||||
<!-- Application arguments -->
|
||||
<!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
|
||||
<!-- Application arguments -->
|
||||
|
||||
<meta-data android:name="android.app.lib_name" android:value="mathtrainingstuff"/>
|
||||
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
|
||||
<meta-data android:name="android.app.repository" android:value="default"/>
|
||||
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
|
||||
<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
|
||||
<!-- Deploy Qt libs as part of package -->
|
||||
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="1"/>
|
||||
<meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
|
||||
<meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
|
||||
<!-- Run with local libs -->
|
||||
<meta-data android:name="android.app.use_local_qt_libs" android:value="1"/>
|
||||
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
|
||||
<meta-data android:name="android.app.load_local_libs" android:value="plugins/platforms/android/libqtforandroid.so:plugins/bearer/libqandroidbearer.so:lib/libQt5QuickParticles.so"/>
|
||||
<meta-data android:name="android.app.load_local_jars" android:value="jar/QtAndroid.jar:jar/QtAndroidBearer.jar"/>
|
||||
<meta-data android:name="android.app.static_init_classes" android:value=""/>
|
||||
<!-- Used to specify custom system library path to run with local system libs -->
|
||||
<!-- <meta-data android:name="android.app.system_libs_prefix" android:value="/system/lib/"/> -->
|
||||
<!-- Messages maps -->
|
||||
<meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
|
||||
<meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
|
||||
<meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
|
||||
<!-- Messages maps -->
|
||||
|
||||
<!-- Splash screen -->
|
||||
<!-- meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/logo"/ -->
|
||||
<!-- meta-data android:name="android.app.splash_screen_sticky" android:value="true"/ -->
|
||||
<!-- Splash screen -->
|
||||
|
||||
<!-- Background running -->
|
||||
<!-- Warning: changing this value to true may cause unexpected crashes if the
|
||||
application still try to draw after
|
||||
"applicationStateChanged(Qt::ApplicationSuspended)"
|
||||
signal is sent! -->
|
||||
<meta-data android:name="android.app.background_running" android:value="false"/>
|
||||
<!-- Background running -->
|
||||
|
||||
<!-- auto screen scale factor -->
|
||||
<meta-data android:name="android.app.auto_screen_scale_factor" android:value="false"/>
|
||||
<!-- auto screen scale factor -->
|
||||
|
||||
<!-- extract android style -->
|
||||
<!-- available android:values :
|
||||
* full - useful QWidget & Quick Controls 1 apps
|
||||
* minimal - useful for Quick Controls 2 apps, it is much faster than "full"
|
||||
* none - useful for apps that don't use any of the above Qt modules
|
||||
-->
|
||||
<meta-data android:name="android.app.extract_android_style" android:value="full"/>
|
||||
<!-- extract android style -->
|
||||
</activity>
|
||||
|
||||
<!-- For adding service(s) please check: https://wiki.qt.io/AndroidServices -->
|
||||
|
||||
</application>
|
||||
|
||||
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="28"/>
|
||||
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
|
||||
|
||||
<!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.
|
||||
Remove the comment if you do not require these default permissions. -->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
|
||||
|
||||
<!-- The following comment will be replaced upon deployment with default features based on the dependencies of the application.
|
||||
Remove the comment if you do not require these default features. -->
|
||||
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
|
||||
|
||||
</manifest>
|
|
@ -1,152 +0,0 @@
|
|||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.4
|
||||
import "./"
|
||||
|
||||
Item {
|
||||
id: calculator
|
||||
|
||||
property int sum: 0
|
||||
property int nextNum: 0
|
||||
property int lastNum: 0
|
||||
property int actualNumCount: 0
|
||||
property int min: 1
|
||||
property int max: 9
|
||||
property int tickInterval: 1000
|
||||
property int numCount: 10
|
||||
property bool endPageVisibility: false
|
||||
property string endPageLabelText: "You Lose!"
|
||||
|
||||
signal pageOpened()
|
||||
|
||||
onPageOpened: {
|
||||
calculator.start()
|
||||
}
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "starting"
|
||||
PropertyChanges {
|
||||
target: calculatorStack
|
||||
currPage: calculatorStartPageComp
|
||||
}
|
||||
},
|
||||
|
||||
State {
|
||||
name: "running"
|
||||
PropertyChanges {
|
||||
target: calculatorStack
|
||||
currPage: calculatorRunningPageComp
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "gameOver"
|
||||
PropertyChanges {
|
||||
target: calculatorStack
|
||||
currPage: calculatorGameOverPageComp
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
StackView {
|
||||
id: calculatorStack
|
||||
|
||||
property var currPage;
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
onCurrPageChanged: {
|
||||
calculatorStack.replace(currPage)
|
||||
}
|
||||
onCurrentItemChanged: {
|
||||
calculatorStack.currentItem.pageOpened()
|
||||
}
|
||||
|
||||
Component {
|
||||
id: calculatorStartPageComp
|
||||
CalculatorStartPage {
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: calculatorRunningPageComp
|
||||
CalculatorRunningPage {
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: calculatorGameOverPageComp
|
||||
CalculatorGameOverPage {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
replaceExit: Transition {
|
||||
NumberAnimation {
|
||||
from: 1
|
||||
to: 0
|
||||
property: "opacity"
|
||||
duration: 200
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
|
||||
replaceEnter: Transition {
|
||||
NumberAnimation {
|
||||
from: 0
|
||||
to: 1
|
||||
property: "opacity"
|
||||
duration: 200
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------
|
||||
---------functions---------
|
||||
-------------------------*/
|
||||
|
||||
function start() {
|
||||
calculator.reset()
|
||||
calculator.state = "starting"
|
||||
}
|
||||
|
||||
function run() {
|
||||
calculator.nextNumber()
|
||||
calculator.state = "running"
|
||||
}
|
||||
|
||||
function gameOver() {
|
||||
calculator.state = "gameOver"
|
||||
}
|
||||
|
||||
function reset() {
|
||||
calculator.sum = 0
|
||||
calculator.actualNumCount = 0
|
||||
calculator.endPageLabelText = "You Lose!"
|
||||
calculator.endPageVisibility = false
|
||||
calculator.lastNum = 0
|
||||
calculator.nextNum = 0
|
||||
}
|
||||
|
||||
function nextNumber(){
|
||||
var randNum = 0
|
||||
var range = calculator.max - calculator.min
|
||||
lastNum = nextNum
|
||||
while(randNum===0 || randNum === lastNum){
|
||||
randNum = Math.floor((Math.random()*(range+1))+min)
|
||||
}
|
||||
nextNum = randNum
|
||||
calculator.sum += randNum
|
||||
actualNumCount += 1
|
||||
}
|
||||
|
||||
function checkSum(sumInputText) {
|
||||
if (sumInputText !== "") {
|
||||
if (calculator.sum === parseInt(sumInputText)) {
|
||||
calculator.endPageLabelText = "You Won!"
|
||||
}
|
||||
calculator.endPageVisibility = true
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,96 +0,0 @@
|
|||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.4
|
||||
import "./"
|
||||
|
||||
Page {
|
||||
id: root
|
||||
|
||||
signal pageOpened()
|
||||
|
||||
TextField {
|
||||
id: sumInput
|
||||
placeholderText: "sum"
|
||||
visible: !endPageVisibility
|
||||
validator: IntValidator {bottom: -1000000; top: 1000000;}
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
top: parent.top
|
||||
topMargin: parent.height * 0.1
|
||||
}
|
||||
Keys.onReturnPressed: calculator.checkSum(sumInput.text)
|
||||
}
|
||||
|
||||
RoundButton {
|
||||
id: checkButton
|
||||
height: parent.width * 0.2
|
||||
width: height
|
||||
text: "check"
|
||||
font.pixelSize: parent.width * 0.03
|
||||
visible: !calculator.endPageVisibility
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
top: parent.top
|
||||
topMargin: parent.height * 0.3
|
||||
}
|
||||
onClicked: {
|
||||
calculator.checkSum(sumInput.text)
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
id: won
|
||||
text: calculator.endPageLabelText
|
||||
font.pixelSize: parent.width * 0.2
|
||||
visible: calculator.endPageVisibility
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
top: parent.top
|
||||
topMargin: parent.height * 0.05
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
id: sum
|
||||
text: "Sum: " + calculator.sum
|
||||
font.pixelSize: parent.width * 0.1
|
||||
visible: calculator.endPageVisibility ? ( won.text==="You Lose!" ? true:false):false
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
top: parent.top
|
||||
topMargin: parent.height * 0.4
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
id: buttonRow
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
bottom: parent.bottom
|
||||
bottomMargin: parent.height * 0.15
|
||||
}
|
||||
height: childrenRect.height
|
||||
width: childrenRect.width
|
||||
spacing: parent.width * 0.1
|
||||
visible: calculator.endPageVisibility ? true:false
|
||||
|
||||
RoundButton {
|
||||
id: homeButton
|
||||
height: root.width * 0.2
|
||||
width: height
|
||||
text: "home"
|
||||
onClicked: {
|
||||
game.start()
|
||||
}
|
||||
}
|
||||
|
||||
RoundButton {
|
||||
id: startButtons
|
||||
height: root.width * 0.2
|
||||
width: height
|
||||
text: "start"
|
||||
onClicked: {
|
||||
calculator.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,110 +0,0 @@
|
|||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.4
|
||||
import "./"
|
||||
|
||||
Page {
|
||||
id: root
|
||||
|
||||
signal pageOpened()
|
||||
|
||||
Label {
|
||||
id: num
|
||||
anchors.centerIn: parent
|
||||
font.pixelSize: parent.height * 0.6
|
||||
text: calculator.nextNum
|
||||
}
|
||||
|
||||
Label {
|
||||
id: gameProcess
|
||||
text: calculator.actualNumCount + " of " + calculator.numCount
|
||||
font.pixelSize: parent.width * 0.05
|
||||
anchors {
|
||||
right: parent.right
|
||||
rightMargin: parent.width * 0.025
|
||||
bottom: parent.bottom
|
||||
bottomMargin: parent.height * 0.05
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ProgressBar {
|
||||
id: prog
|
||||
property int progress: 0
|
||||
property string color: "green"
|
||||
value: progress/100
|
||||
anchors {
|
||||
bottom: parent.bottom
|
||||
bottomMargin: parent.height * 0.02
|
||||
left: parent.left
|
||||
leftMargin: parent.width * 0.01
|
||||
right: parent.right
|
||||
rightMargin: parent.width * 0.01
|
||||
}
|
||||
|
||||
contentItem: Item {
|
||||
Rectangle {
|
||||
width: prog.visualPosition * parent.width
|
||||
height: parent.height
|
||||
color: prog.color
|
||||
}
|
||||
}
|
||||
|
||||
NumberAnimation {
|
||||
id: progNumAnim
|
||||
target: prog
|
||||
property: "progress"
|
||||
from: 100
|
||||
to: 0
|
||||
duration: tick.interval
|
||||
easing.type: Easing.Linear
|
||||
}
|
||||
|
||||
SequentialAnimation {
|
||||
id: progColAnim
|
||||
loops: 1
|
||||
ColorAnimation {
|
||||
id: progColAnim1
|
||||
target: prog
|
||||
property: "color"
|
||||
from: "green"
|
||||
to: "goldenrod"
|
||||
duration: tick.interval/2
|
||||
easing.type: Easing.Linear
|
||||
}
|
||||
ColorAnimation {
|
||||
id: progColAnim2
|
||||
target: prog
|
||||
property: "color"
|
||||
from: "goldenrod"
|
||||
to: "darkRed"
|
||||
duration: tick.interval/2
|
||||
easing.type: Easing.Linear
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: tick
|
||||
interval: calculator.tickInterval
|
||||
repeat: false
|
||||
running: calculator.state === "running"
|
||||
|
||||
onTriggered: {
|
||||
if (calculator.actualNumCount < calculator.numCount) {
|
||||
nextNumber()
|
||||
tick.start()
|
||||
}
|
||||
else {
|
||||
calculator.state = "gameOver"
|
||||
}
|
||||
}
|
||||
|
||||
onRunningChanged: {
|
||||
if(running){
|
||||
progNumAnim.start()
|
||||
progColAnim.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,133 +0,0 @@
|
|||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.4
|
||||
import QtQuick.Layouts 1.3
|
||||
import "./"
|
||||
|
||||
Page {
|
||||
id: root
|
||||
|
||||
signal pageOpened()
|
||||
|
||||
ColumnLayout {
|
||||
id: column
|
||||
//spacing: height / 40
|
||||
width: parent.width
|
||||
anchors.fill: parent
|
||||
anchors.topMargin: parent.height * 0.02
|
||||
anchors.bottomMargin: parent.height * 0.02
|
||||
|
||||
Label {
|
||||
id: heading
|
||||
font.pixelSize: parent.width * 0.075
|
||||
text: "Calculator"
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: parent.width * 0.5 - width * 0.5
|
||||
Layout.rightMargin: parent.width * 0.5 - width * 0.5
|
||||
}
|
||||
|
||||
Label {
|
||||
id: tickIntervalInfo
|
||||
text: "Interval:"
|
||||
font.pixelSize: parent.height * 0.05
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
}
|
||||
|
||||
|
||||
TextField {
|
||||
id: tickInterval
|
||||
text: calculator.tickInterval
|
||||
placeholderText: "interval"
|
||||
validator: IntValidator {bottom: 1; top: 100000;}
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
Layout.rightMargin: parent.width * 0.05
|
||||
Keys.onReturnPressed: root.start()
|
||||
}
|
||||
|
||||
Label {
|
||||
id: numCountInfo
|
||||
text: "Summands:"
|
||||
font.pixelSize: parent.height * 0.05
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: numCount
|
||||
text: calculator.numCount
|
||||
placeholderText: "summands"
|
||||
validator: IntValidator {bottom: 1; top: 100000;}
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
Layout.rightMargin: parent.width * 0.05
|
||||
Keys.onReturnPressed: root.start()
|
||||
}
|
||||
|
||||
Label {
|
||||
id: minInfo
|
||||
text: "Minimum:"
|
||||
font.pixelSize: parent.height * 0.05
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: min
|
||||
text: calculator.min
|
||||
placeholderText: "minimum"
|
||||
validator: IntValidator {bottom: -100000; top: 100000;}
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
Layout.rightMargin: parent.width * 0.05
|
||||
Keys.onReturnPressed: root.start()
|
||||
}
|
||||
|
||||
Label {
|
||||
id: maxInfo
|
||||
text: "Maximum:"
|
||||
font.pixelSize: parent.height * 0.05
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: max
|
||||
text: calculator.max
|
||||
placeholderText: "maximum"
|
||||
validator: IntValidator {bottom: -100000; top: 100000;}
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
Layout.rightMargin: parent.width * 0.05
|
||||
Keys.onReturnPressed: root.start()
|
||||
}
|
||||
|
||||
RoundButton {
|
||||
id: startButton
|
||||
text: "start"
|
||||
height: parent.width * 0.1
|
||||
width: height
|
||||
//font.pixelSize: parent.width * 0.03
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
Layout.rightMargin: parent.width * 0.05
|
||||
onClicked: {
|
||||
root.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
function start() {
|
||||
if (tickInterval.text > 0 && numCount.text > 0 && max.text > min.text) {
|
||||
root.updateVars()
|
||||
calculator.run()
|
||||
}
|
||||
}
|
||||
|
||||
function updateVars() {
|
||||
calculator.tickInterval = tickInterval.text
|
||||
calculator.numCount = numCount.text
|
||||
calculator.min = min.text
|
||||
calculator.max = max.text
|
||||
|
||||
}
|
||||
}
|
|
@ -1,197 +0,0 @@
|
|||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.4
|
||||
import "./"
|
||||
|
||||
Item {
|
||||
id: calender
|
||||
|
||||
property string nextDate: "31.12.1799"
|
||||
property string lastDate: "30.12.1799"
|
||||
property int actualDateCount: 0
|
||||
property int min: 1800
|
||||
property int max: 2199
|
||||
property int tickInterval: 10000
|
||||
property int dateCount: 10
|
||||
property int correct: 0
|
||||
property int wrong: 0
|
||||
property int weekDay: 1
|
||||
property bool runningPageState: true
|
||||
|
||||
signal pageOpened()
|
||||
|
||||
onPageOpened: {
|
||||
calender.start()
|
||||
}
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "starting"
|
||||
PropertyChanges {
|
||||
target: calenderStack
|
||||
currPage: calenderStartPageComp
|
||||
}
|
||||
},
|
||||
|
||||
State {
|
||||
name: "running"
|
||||
PropertyChanges {
|
||||
target: calenderStack
|
||||
currPage: calenderRunningPageComp
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "gameOver"
|
||||
PropertyChanges {
|
||||
target: calenderStack
|
||||
currPage: calenderGameOverPageComp
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
StackView {
|
||||
id: calenderStack
|
||||
|
||||
property var currPage;
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
onCurrPageChanged: {
|
||||
calenderStack.replace(currPage)
|
||||
}
|
||||
onCurrentItemChanged: {
|
||||
calenderStack.currentItem.pageOpened()
|
||||
}
|
||||
|
||||
Component {
|
||||
id: calenderStartPageComp
|
||||
CalenderStartPage {
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: calenderRunningPageComp
|
||||
CalenderRunningPage {
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: calenderGameOverPageComp
|
||||
CalenderGameOverPage {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
replaceExit: Transition {
|
||||
NumberAnimation {
|
||||
from: 1
|
||||
to: 0
|
||||
property: "opacity"
|
||||
duration: 200
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
|
||||
replaceEnter: Transition {
|
||||
NumberAnimation {
|
||||
from: 0
|
||||
to: 1
|
||||
property: "opacity"
|
||||
duration: 200
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------
|
||||
---------functions---------
|
||||
-------------------------*/
|
||||
|
||||
function start() {
|
||||
calender.reset()
|
||||
calender.state = "starting"
|
||||
}
|
||||
|
||||
function run() {
|
||||
calender.generateNextDate()
|
||||
calender.state = "running"
|
||||
}
|
||||
|
||||
function gameOver() {
|
||||
calender.state = "gameOver"
|
||||
}
|
||||
|
||||
function reset() {
|
||||
calender.actualDateCount = 0
|
||||
calender.lastDate = 0
|
||||
calender.nextDate = 0
|
||||
calender.correct = 0
|
||||
calender.wrong = 0
|
||||
}
|
||||
|
||||
function generateNextDate() {
|
||||
var daysPerMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
||||
var monthCodes = [6, 2, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]
|
||||
var yearCode = 0
|
||||
var randDate = calender.nextDate
|
||||
var randDay = 31
|
||||
var randMonth = 12
|
||||
var randYear = 1799
|
||||
var range = calender.max - calender.min
|
||||
var century = 17
|
||||
var weekDay = 1
|
||||
calender.lastDate = calender.nextDate
|
||||
while (randDate === calender.lastDate) {
|
||||
//console.log("entered mainwhile " + "yearCode: " + yearCode + " randDate: " + randDate + " randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + " century: " + century + " weekDay: " + weekDay)
|
||||
randYear = Math.floor((Math.random()*(range+1))+calender.min)
|
||||
//console.log("generated year " + "yearCode: " + yearCode + " randDate: " + randDate + " randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + " century: " + century + " weekDay: " + weekDay)
|
||||
century = Math.floor(randYear/100)
|
||||
//console.log("calculated century " + "yearCode: " + yearCode + " randDate: " + randDate + " randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + " century: " + century + " weekDay: " + weekDay)
|
||||
yearCode = (randYear - century * 100) + Math.floor((randYear - century * 100)/4)
|
||||
//console.log("generated yearCode " + "yearCode: " + yearCode + " randDate: " + randDate + " randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + " century: " + century + " weekDay: " + weekDay)
|
||||
while (century > 21) {
|
||||
century -= 4
|
||||
//console.log("down count century " + "yearCode: " + yearCode + " randDate: " + randDate + " randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + " century: " + century + " weekDay: " + weekDay)
|
||||
}
|
||||
switch (century) {
|
||||
case 18:
|
||||
yearCode += 3
|
||||
break
|
||||
case 19:
|
||||
yearCode += 1
|
||||
break
|
||||
case 21:
|
||||
yearCode += 5
|
||||
break
|
||||
default:
|
||||
//console.log("added century specified value to yearCode " + "yearCode: " + yearCode + " randDate: " + randDate + " randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + " century: " + century + " weekDay: " + weekDay)
|
||||
}
|
||||
randMonth = Math.floor((Math.random()*(12))+1)
|
||||
//console.log("generated month " + "yearCode: " + yearCode + " randDate: " + randDate + " randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + " century: " + century + " weekDay: " + weekDay)
|
||||
if (randYear % 4 === 0 && randMonth <= 2) {
|
||||
yearCode += 6
|
||||
//console.log("if leap-year " + "yearCode: " + yearCode + " randDate: " + randDate + " randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + " century: " + century + " weekDay: " + weekDay)
|
||||
}
|
||||
while (yearCode >= 7) {
|
||||
yearCode -= 7
|
||||
//console.log("down count yearCode " + "yearCode: " + yearCode + " randDate: " + randDate + " randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + " century: " + century + " weekDay: " + weekDay)
|
||||
}
|
||||
randDay = Math.floor((Math.random()*(daysPerMonth[randMonth-1]))+1)
|
||||
//console.log("generated Day " + "yearCode: " + yearCode + " randDate: " + randDate + " randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + " century: " + century + " weekDay: " + weekDay)
|
||||
randDate = String(randDay) + "." + String(randMonth) + "." + String(randYear)
|
||||
//console.log("generated randDate " + "yearCode: " + yearCode + " randDate: " + randDate + " randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + " century: " + century + " weekDay: " + weekDay)
|
||||
}
|
||||
weekDay = (yearCode + monthCodes[randMonth-1] + randDay) // - 7*Math.floor((yearCode + monthCodes[randMonth-1] + randDay)/7)
|
||||
//console.log("generated weekday " + "yearCode: " + yearCode + " randDate: " + randDate + " randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + " century: " + century + " weekDay: " + weekDay)
|
||||
//weekDay -= 7*Math.floor(weekDay/7)
|
||||
while (weekDay >= 7) {
|
||||
weekDay -= 7
|
||||
//console.log("down count weekday " + "yearCode: " + yearCode + " randDate: " + randDate + /*" randDay: " + randDay + " randMonth: " + randMonth + " randYear: " + randYear + " Range: " + range + */ " century: " + century + " weekDay: " + weekDay)
|
||||
}
|
||||
console.log("randDate: " + randDate + " yearCode: " + yearCode + " century: " + century + " weekDay: " + weekDay)
|
||||
calender.weekDay = weekDay
|
||||
calender.nextDate = randDate
|
||||
calender.actualDateCount += 1
|
||||
}
|
||||
}
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.4
|
||||
import "./"
|
||||
|
||||
Page {
|
||||
id: root
|
||||
|
||||
signal pageOpened()
|
||||
|
||||
Label {
|
||||
id: percent
|
||||
text: "You had " + calender.dateCount/calender.correct*100 + "% right!"
|
||||
font.pixelSize: parent.width * 0.05
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
top: parent.top
|
||||
topMargin: parent.height * 0.2
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
id: buttonRow
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
bottom: parent.bottom
|
||||
bottomMargin: parent.height * 0.15
|
||||
}
|
||||
height: childrenRect.height
|
||||
width: childrenRect.width
|
||||
spacing: parent.width * 0.1
|
||||
|
||||
RoundButton {
|
||||
id: homeButton
|
||||
height: root.width * 0.2
|
||||
width: height
|
||||
text: "home"
|
||||
onClicked: {
|
||||
game.start()
|
||||
}
|
||||
}
|
||||
|
||||
RoundButton {
|
||||
id: startButtons
|
||||
height: root.width * 0.2
|
||||
width: height
|
||||
text: "start"
|
||||
onClicked: {
|
||||
calender.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,138 +0,0 @@
|
|||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.4
|
||||
import "./"
|
||||
|
||||
Page {
|
||||
id: root
|
||||
|
||||
signal pageOpened()
|
||||
|
||||
Label {
|
||||
id: date
|
||||
anchors.centerIn: parent
|
||||
font.pixelSize: parent.height * 0.2
|
||||
text: calender.nextDate
|
||||
visible: calender.runningPageState ? true:false
|
||||
}
|
||||
|
||||
Label {
|
||||
id: gameProcess
|
||||
text: calender.actualDateCount + " of " + calender.dateCount
|
||||
font.pixelSize: parent.width * 0.05
|
||||
anchors {
|
||||
right: parent.right
|
||||
rightMargin: parent.width * 0.025
|
||||
bottom: parent.bottom
|
||||
bottomMargin: parent.height * 0.05
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ProgressBar {
|
||||
id: prog
|
||||
property int progress: 0
|
||||
property string color: "green"
|
||||
value: progress/100
|
||||
anchors {
|
||||
bottom: parent.bottom
|
||||
bottomMargin: parent.height * 0.02
|
||||
left: parent.left
|
||||
leftMargin: parent.width * 0.01
|
||||
right: parent.right
|
||||
rightMargin: parent.width * 0.01
|
||||
}
|
||||
visible: calender.runningPageState ? true:false
|
||||
contentItem: Item {
|
||||
Rectangle {
|
||||
width: prog.visualPosition * parent.width
|
||||
height: parent.height
|
||||
color: prog.color
|
||||
}
|
||||
}
|
||||
|
||||
NumberAnimation {
|
||||
id: progNumAnim
|
||||
target: prog
|
||||
property: "progress"
|
||||
from: 100
|
||||
to: 0
|
||||
duration: tick.interval
|
||||
easing.type: Easing.Linear
|
||||
}
|
||||
|
||||
SequentialAnimation {
|
||||
id: progColAnim
|
||||
loops: 1
|
||||
ColorAnimation {
|
||||
id: progColAnim1
|
||||
target: prog
|
||||
property: "color"
|
||||
from: "green"
|
||||
to: "goldenrod"
|
||||
duration: tick.interval/2
|
||||
easing.type: Easing.Linear
|
||||
}
|
||||
ColorAnimation {
|
||||
id: progColAnim2
|
||||
target: prog
|
||||
property: "color"
|
||||
from: "goldenrod"
|
||||
to: "darkRed"
|
||||
duration: tick.interval/2
|
||||
easing.type: Easing.Linear
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ComboBox {
|
||||
id: comboBox
|
||||
model: ["None", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
|
||||
anchors.centerIn: parent
|
||||
visible: calender.runningPageState ? false:true
|
||||
onCurrentTextChanged: {
|
||||
if (currentIndex !== 0) {
|
||||
if (currentIndex === calender.weekDay) {
|
||||
calender.correct += 1
|
||||
}
|
||||
else {
|
||||
calender.wrong += 1
|
||||
}
|
||||
/*
|
||||
Timer, {
|
||||
id: pause
|
||||
interval: 200
|
||||
repeat: false
|
||||
}
|
||||
*/
|
||||
|
||||
if (calender.actualDateCount < calender.dateCount) {
|
||||
calender.generateNextDate()
|
||||
tick.start()
|
||||
calender.runningPageState = true
|
||||
}
|
||||
else {
|
||||
calender.state = "gameOver"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: tick
|
||||
interval: calender.tickInterval
|
||||
repeat: false
|
||||
running: calender.state === "running"
|
||||
|
||||
onTriggered: {
|
||||
calender.runningPageState = false
|
||||
comboBox.currentIndex = 0
|
||||
}
|
||||
|
||||
onRunningChanged: {
|
||||
if(running){
|
||||
progNumAnim.start()
|
||||
progColAnim.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,132 +0,0 @@
|
|||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.4
|
||||
import QtQuick.Layouts 1.3
|
||||
import "./"
|
||||
|
||||
Page {
|
||||
id: root
|
||||
|
||||
signal pageOpened()
|
||||
|
||||
ColumnLayout {
|
||||
id: column
|
||||
//spacing: height / 40
|
||||
width: parent.width
|
||||
anchors.fill: parent
|
||||
anchors.topMargin: parent.height * 0.02
|
||||
anchors.bottomMargin: parent.height * 0.02
|
||||
|
||||
Label {
|
||||
id: heading
|
||||
font.pixelSize: parent.width * 0.075
|
||||
text: "Calender"
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: parent.width * 0.5 - width * 0.5
|
||||
Layout.rightMargin: parent.width * 0.5 - width * 0.5
|
||||
}
|
||||
|
||||
Label {
|
||||
id: tickIntervalInfo
|
||||
text: "Interval:"
|
||||
font.pixelSize: parent.height * 0.05
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
}
|
||||
|
||||
|
||||
TextField {
|
||||
id: tickInterval
|
||||
text: calender.tickInterval
|
||||
placeholderText: "interval"
|
||||
validator: IntValidator {bottom: 1; top: 1000000;}
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
Layout.rightMargin: parent.width * 0.05
|
||||
Keys.onReturnPressed: root.start()
|
||||
}
|
||||
|
||||
Label {
|
||||
id: dateCountInfo
|
||||
text: "Dates:"
|
||||
font.pixelSize: parent.height * 0.05
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: dateCount
|
||||
text: calender.dateCount
|
||||
placeholderText: "dates"
|
||||
validator: IntValidator {bottom: 1; top: 100000;}
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
Layout.rightMargin: parent.width * 0.05
|
||||
Keys.onReturnPressed: root.start()
|
||||
}
|
||||
|
||||
Label {
|
||||
id: minInfo
|
||||
text: "Minimum:"
|
||||
font.pixelSize: parent.height * 0.05
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: min
|
||||
text: calender.min
|
||||
placeholderText: "minimum"
|
||||
validator: IntValidator {bottom: 1800; top: 10000;}
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
Layout.rightMargin: parent.width * 0.05
|
||||
Keys.onReturnPressed: root.start()
|
||||
}
|
||||
|
||||
Label {
|
||||
id: maxInfo
|
||||
text: "Maximum:"
|
||||
font.pixelSize: parent.height * 0.05
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: max
|
||||
text: calender.max
|
||||
placeholderText: "maximum"
|
||||
validator: IntValidator {bottom: 1800; top: 10000;}
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
Layout.rightMargin: parent.width * 0.05
|
||||
Keys.onReturnPressed: root.start()
|
||||
}
|
||||
|
||||
RoundButton {
|
||||
id: startButton
|
||||
text: "start"
|
||||
height: parent.width * 0.1
|
||||
width: height
|
||||
//font.pixelSize: parent.width * 0.03
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: parent.width * 0.05
|
||||
Layout.rightMargin: parent.width * 0.05
|
||||
onClicked: {
|
||||
root.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
function start() {
|
||||
if (tickInterval.text > 0 && dateCount.text > 0 && min.text >= 1800 && max.text >= min.text) {
|
||||
root.updateVars()
|
||||
calender.run()
|
||||
}
|
||||
}
|
||||
|
||||
function updateVars() {
|
||||
calender.tickInterval = tickInterval.text
|
||||
calender.dateCount = dateCount.text
|
||||
calender.min = min.text
|
||||
calender.max = max.text
|
||||
}
|
||||
}
|
42
headers/appsettings.h
Normal file
42
headers/appsettings.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
#ifndef APPSETTINGS_H
|
||||
#define APPSETTINGS_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QtDebug>
|
||||
#include <QSettings>
|
||||
#include <QStandardPaths>
|
||||
|
||||
class AppSettings : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit AppSettings(QObject *parent = nullptr);
|
||||
// This is the Constructor of the AppSettings class
|
||||
|
||||
~AppSettings();
|
||||
// This is the Destructor of the AppSettings class
|
||||
|
||||
private:
|
||||
QSettings *settingsManager;
|
||||
// QSettings object which cares about our settings.ini file
|
||||
QSettings *themeSettingsManager;
|
||||
// QSettings object which cares about our themes
|
||||
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
Q_INVOKABLE QString read(const QString &key);
|
||||
// function to read values from the settings file
|
||||
|
||||
Q_INVOKABLE void write(const QString &key, const QVariant &value);
|
||||
// function to write values from the settings file
|
||||
|
||||
Q_INVOKABLE void setDefault(const QString &key, const QVariant &defaultValue);
|
||||
// function to create a key (/ setting) with a default value if it hasn't been created yet
|
||||
|
||||
Q_INVOKABLE QString theme(QString key);
|
||||
// function to get style settings from a theme file
|
||||
};
|
||||
|
||||
#endif // APPSETTINGS_H
|
106
main.qml
106
main.qml
|
@ -1,106 +0,0 @@
|
|||
import QtQuick 2.9
|
||||
import QtQuick.Window 2.3
|
||||
import QtQuick.Controls 2.4
|
||||
import "./calender"
|
||||
import "./calculator"
|
||||
|
||||
|
||||
Window {
|
||||
visible: true
|
||||
width: 640
|
||||
height: 480
|
||||
title: qsTr("Training")
|
||||
Item {
|
||||
id: game
|
||||
anchors.fill: parent
|
||||
|
||||
state: "starting"
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "starting"
|
||||
PropertyChanges {
|
||||
target: mainStack
|
||||
currPage: startPageComp
|
||||
}
|
||||
},
|
||||
|
||||
State {
|
||||
name: "calender"
|
||||
PropertyChanges {
|
||||
target: mainStack
|
||||
currPage: calenderPageComp
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "calculator"
|
||||
PropertyChanges {
|
||||
target: mainStack
|
||||
currPage: calculatorPageComp
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
StackView {
|
||||
id: mainStack
|
||||
|
||||
property var currPage
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
onCurrPageChanged: {
|
||||
mainStack.replace(currPage)
|
||||
}
|
||||
onCurrentItemChanged: {
|
||||
mainStack.currentItem.pageOpened()
|
||||
}
|
||||
|
||||
Component {
|
||||
id: startPageComp
|
||||
StartPage {
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: calenderPageComp
|
||||
Calender {
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: calculatorPageComp
|
||||
Calculator {
|
||||
}
|
||||
}
|
||||
|
||||
replaceExit: Transition {
|
||||
NumberAnimation {
|
||||
from: 1
|
||||
to: 0
|
||||
property: "opacity"
|
||||
duration: 200
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
|
||||
replaceEnter: Transition {
|
||||
NumberAnimation {
|
||||
from: 0
|
||||
to: 1
|
||||
property: "opacity"
|
||||
duration: 200
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
}
|
||||
function start() {
|
||||
game.state = "starting"
|
||||
}
|
||||
function calender() {
|
||||
game.state = "calender"
|
||||
}
|
||||
function calculator() {
|
||||
game.state = "calculator"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -13,9 +13,16 @@ DEFINES += QT_DEPRECATED_WARNINGS
|
|||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
SOURCES += \
|
||||
sources\main.cpp
|
||||
sources/main.cpp \
|
||||
sources/appsettings.cpp
|
||||
|
||||
RESOURCES += qml/qml.qrc \
|
||||
shared/shared.qrc
|
||||
|
||||
HEADERS += \
|
||||
headers/ \
|
||||
headers/appsettings.h
|
||||
|
||||
RESOURCES += qml.qrc
|
||||
|
||||
# Additional import path used to resolve QML modules in Qt Creator's code model
|
||||
QML_IMPORT_PATH =
|
||||
|
@ -27,3 +34,10 @@ QML_DESIGNER_IMPORT_PATH =
|
|||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
||||
|
||||
DISTFILES += \
|
||||
android-sources/AndroidManifest.xml
|
||||
|
||||
android {
|
||||
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources
|
||||
}
|
||||
|
|
14
qml.qrc
14
qml.qrc
|
@ -1,14 +0,0 @@
|
|||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>main.qml</file>
|
||||
<file>calender/Calender.qml</file>
|
||||
<file>StartPage.qml</file>
|
||||
<file>calculator/CalculatorRunningPage.qml</file>
|
||||
<file>calculator/CalculatorStartPage.qml</file>
|
||||
<file>calculator/CalculatorGameOverPage.qml</file>
|
||||
<file>calculator/Calculator.qml</file>
|
||||
<file>calender/CalenderStartPage.qml</file>
|
||||
<file>calender/CalenderRunningPage.qml</file>
|
||||
<file>calender/CalenderGameOverPage.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
37
qml/components/GameButton.qml
Normal file
37
qml/components/GameButton.qml
Normal file
|
@ -0,0 +1,37 @@
|
|||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.2
|
||||
|
||||
Button {
|
||||
id: control
|
||||
|
||||
width: height
|
||||
|
||||
font.pixelSize: width * 0.15
|
||||
|
||||
scale: pressed ? 0.8:1
|
||||
|
||||
contentItem: Text {
|
||||
text: control.text
|
||||
font: control.font
|
||||
opacity: enabled ? 1.0 : 0.3
|
||||
color: settings.theme("ButtonTextColor")
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
color: settings.theme("ButtonBackgroundColor")
|
||||
radius: width * 0.5
|
||||
border.color: settings.theme("ButtonBorderColor")
|
||||
border.width: parseInt(settings.theme("ButtonBorderWidth"))
|
||||
}
|
||||
|
||||
Behavior on scale {
|
||||
NumberAnimation {
|
||||
easing.type: Easing.InOutQuad
|
||||
duration: 200
|
||||
}
|
||||
}
|
||||
}
|
||||
|
5
shared/shared.qrc
Normal file
5
shared/shared.qrc
Normal file
|
@ -0,0 +1,5 @@
|
|||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>themes/default.ini</file>
|
||||
</qresource>
|
||||
</RCC>
|
8
shared/themes/default.ini
Normal file
8
shared/themes/default.ini
Normal file
|
@ -0,0 +1,8 @@
|
|||
[MathTrainingStuffTheme]
|
||||
PageBackgroundColor=white
|
||||
PageTextColor=black
|
||||
|
||||
ButtonBackgroundColor=black
|
||||
ButtonTextColor=white
|
||||
ButtonBorderWidth=0
|
||||
ButtonBorderColor=
|
86
sources/appsettings.cpp
Normal file
86
sources/appsettings.cpp
Normal file
|
@ -0,0 +1,86 @@
|
|||
#include "headers/appsettings.h"
|
||||
|
||||
AppSettings::AppSettings(QObject* parent)
|
||||
:QObject(parent)
|
||||
{
|
||||
// This is the Constructor of the AppSettings class
|
||||
|
||||
// get writable path to store the settings.ini file
|
||||
QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
|
||||
|
||||
qDebug() << "app settings path: " << path;
|
||||
|
||||
// create or open the settings.ini file
|
||||
this->settingsManager = new QSettings(path+"/settings.ini", QSettings::IniFormat);
|
||||
|
||||
// set the values to their defaults if they haven't been created yet
|
||||
this->setDefault("highscore", "0");
|
||||
|
||||
// create or open the settings.ini file
|
||||
this->themeSettingsManager = new QSettings(":/themes/default.ini", QSettings::IniFormat);
|
||||
}
|
||||
|
||||
QString AppSettings::read(const QString &key)
|
||||
{
|
||||
// function to read values from the settings file
|
||||
|
||||
// open the value-group
|
||||
this->settingsManager->beginGroup("AppSettings");
|
||||
// read the value
|
||||
QString value = this->settingsManager->value(key , false).toString();
|
||||
// close the value-group
|
||||
this->settingsManager->endGroup();
|
||||
// return the value
|
||||
return(value);
|
||||
}
|
||||
|
||||
QString AppSettings::theme(QString key)
|
||||
{
|
||||
// function to get style settings from a theme file
|
||||
|
||||
// open the value-group
|
||||
this->themeSettingsManager->beginGroup("MathTrainingStuffTheme");
|
||||
// read the value
|
||||
QString value = this->themeSettingsManager->value(key, false).toString();
|
||||
// close the value-group
|
||||
this->themeSettingsManager->endGroup();
|
||||
// return the value
|
||||
return(value);
|
||||
}
|
||||
|
||||
void AppSettings::write(const QString &key, const QVariant &value)
|
||||
{
|
||||
// function to write values to the settings file
|
||||
|
||||
// open the value-group
|
||||
this->settingsManager->beginGroup("AppSettings");
|
||||
// write the value
|
||||
this->settingsManager->setValue(key, value);
|
||||
// close the value-group
|
||||
this->settingsManager->endGroup();
|
||||
}
|
||||
|
||||
void AppSettings::setDefault(const QString &key, const QVariant &defaultValue)
|
||||
{
|
||||
// function to create a key (/ setting) with a default value if it hasnt been ceated yet
|
||||
|
||||
// read the current value
|
||||
QString value = this->read(key);
|
||||
if(value == "false"){
|
||||
// if it is not defined yet, the read function will return "false" (as a string)
|
||||
// -> if that is the case -> create the key with the default value
|
||||
this->write(key, defaultValue);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
AppSettings::~AppSettings()
|
||||
{
|
||||
// This is the Destructor of the AppSettings class
|
||||
|
||||
// delete the settings manager
|
||||
delete settingsManager;
|
||||
|
||||
// delete the theme Manager
|
||||
delete themeSettingsManager;
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
#include <QGuiApplication>
|
||||
#include <QQmlApplicationEngine>
|
||||
#include "headers/appsettings.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
|
@ -7,6 +8,8 @@ int main(int argc, char *argv[])
|
|||
|
||||
QGuiApplication app(argc, argv);
|
||||
|
||||
qmlRegisterType<AppSettings>("com.max.mathtrainingstuff", 1, 0, "AppSettings");
|
||||
|
||||
QQmlApplicationEngine engine;
|
||||
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
|
||||
if (engine.rootObjects().isEmpty())
|
||||
|
|
Loading…
Reference in a new issue