see changelog 0.04

This commit is contained in:
Dorian Zedler 2018-08-11 23:54:34 +02:00
parent bb8cd60a37
commit e8a0b237a7
9 changed files with 179 additions and 80 deletions

View file

@ -7,12 +7,15 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## [Unreleased] ## [Unreleased]
### Added ### Added
- added profiles dialog - added profiles dialog
## [0.04] - 2018-08-11
### Added
- buzzer icon in the upper left corner indicating that the buzzer is connected - buzzer icon in the upper left corner indicating that the buzzer is connected
### Fixed ### Fixed
- start seqnece continues in a buggy way when cancel is being pressed while 'at your marks' or 'ready' - start seqnece continues in a buggy way when cancel is being pressed while 'at your marks' or 'ready'
- bug that made the start sequence freeze if a delay of zero or lower or a non valid number was set as delay - bug that made the start sequence freeze if a delay of zero or lower or a non valid number was set as delay
### Changed ### Changed
- increased the size f the back buttons in settings / profiles dialog - increased the size of the back buttons in settings / profiles dialog
## [0.03 - BETA] - 2018-07-29 ## [0.03 - BETA] - 2018-07-29
### Added ### Added
@ -20,7 +23,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- new screen in landscape mode - new screen in landscape mode
- buttons for settings and profiles - buttons for settings and profiles
- the screen stays on now - the screen stays on now
- the volume sontrols control the media volume directly - the volume csontrols control the media volume directly
- settings dialog - settings dialog
- capabilitie to connect to a Buzzer via Wifi - capabilitie to connect to a Buzzer via Wifi
- it is now possible to setup an automatic start sequence that spells the command - it is now possible to setup an automatic start sequence that spells the command

View file

@ -1,5 +1,5 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<manifest package="com.itsblue.speedclimbing_stopwatchtest" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.03" android:versionCode="3" android:installLocation="auto"> <manifest package="com.itsblue.speedclimbing_stopwatch" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.04" android:versionCode="4" android:installLocation="auto">
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="speedclimbing stw" android:icon="@drawable/icon"> <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="speedclimbing stw" android:icon="@drawable/icon">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="com.itsblue.StayAwake" android:label="speedclimbing stw" android:screenOrientation="unspecified" android:launchMode="singleTop"> <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="com.itsblue.StayAwake" android:label="speedclimbing stw" android:screenOrientation="unspecified" android:launchMode="singleTop">
<intent-filter> <intent-filter>
@ -66,7 +66,7 @@
</application> </application>
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="16"/> <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="26"/>
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/> <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. <!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.

View file

@ -18,7 +18,9 @@ public:
QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE; QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;
QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE; QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE;
Q_INVOKABLE bool append(QString name); Q_INVOKABLE bool append(QString name);
Q_INVOKABLE void remove(int row);
signals: signals:
public slots: public slots:

View file

@ -204,28 +204,82 @@ Popup {
/*-----List of all profiles-----*/ /*-----List of all profiles-----*/
Component { Component {
id: profileListComp id: profileListComp
Tumbler {
id: control
property string title: "profiles"
property string secondButt: "add"
model: SqlProfileModel{}
delegate: Text {
text: model.name
color: control.visualFocus ? control.palette.highlight : control.palette.text
font: control.font
opacity: 1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
/*
ListView { ListView {
id: profileList id: profileList
model: profileModel.model model: profileModel.model
property string title: "profiles" property string title: "profiles"
property string secondButt: "add" property string secondButt: "add"
Label { Label {
visible: profileList.count <= 0 opacity: profileList.count <= 0 ? 1:0
text: "add a profile by clicking +" text: "add a profile by clicking +"
anchors.centerIn: parent anchors.centerIn: parent
font.pixelSize: parent.width*0.06 font.pixelSize: parent.width*0.06
Behavior on opacity {
NumberAnimation {
duration: 200
easing.type: Easing.InOutQuad
}
}
} }
delegate: SwipeDelegate { delegate: SwipeDelegate {
id: swipeDelegate id: swipeDelegate
text: model.name text: model.name
width: profileList.width width: profileList.width
font.pixelSize: profiles_stack.text_pixelSize
function remove() {
removeAnim.start()
}
background: Rectangle {
color: pressed ? Qt.darker("white", 1.1):"white"
}
Rectangle {
color: "grey"
height: 1
width: parent.width * 0.9
visible: index > 0
anchors {
horizontalCenter: parent.horizontalCenter
top: parent.top
}
}
NumberAnimation {
id: removeAnim
target: swipeDelegate
property: "height"
to: 0
easing.type: Easing.InOutQuad
onStopped: profileModel.model.remove(index)
}
Component { Component {
id: component id: component
Rectangle { Rectangle {
color: mouse.pressed ? "#333" : "#444" color: mouseAr.pressed ? "#333" : "#444"
width: parent.width width: parent.width
height: parent.height height: parent.height
clip: true clip: true
@ -235,24 +289,59 @@ Popup {
text: qsTr("Press me!") text: qsTr("Press me!")
color: "#21be2b" color: "#21be2b"
anchors.centerIn: parent anchors.centerIn: parent
} }
MouseArea { MouseArea {
id: mouseAr id: mouseAr
anchors.fill: parent anchors.fill: parent
onClicked: { onClicked: {
model.remove(index) swipeDelegate.remove()
} }
} }
} }
} }
swipe.left: component swipe.transition: Transition {
swipe.right: component SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic }
}
swipe.left: Row {
anchors.left: parent.left
height: parent.height
Label {
id: moveLabel
text: qsTr("Move")
color: "white"
verticalAlignment: Label.AlignVCenter
padding: 12
height: parent.height
SwipeDelegate.onClicked: console.log("Moving...")
background: Rectangle {
color: moveLabel.SwipeDelegate.pressed ? Qt.darker("#ffbf47", 1.1) : "#ffbf47"
}
}
Label {
id: deleteLabel
text: qsTr("Delete")
color: "white"
verticalAlignment: Label.AlignVCenter
padding: 12
height: parent.height
SwipeDelegate.onClicked: console.log("Deleting...")
background: Rectangle {
color: deleteLabel.SwipeDelegate.pressed ? Qt.darker("tomato", 1.1) : "tomato"
}
}
}
} }
ScrollIndicator.vertical: ScrollIndicator { } ScrollIndicator.vertical: ScrollIndicator { }
} }
*/
} }
/*-----Option to add a profile-----*/ /*-----Option to add a profile-----*/
@ -268,6 +357,11 @@ Popup {
onTextChanged: { onTextChanged: {
parent.newProfileName = text parent.newProfileName = text
} }
Keys.onReturnPressed: {
if(profileModel.model.append(text)){
profiles_stack.pop()
}
}
} }
} }
} }

View file

@ -129,7 +129,7 @@ Popup {
StackView { StackView {
id: options_stack id: options_stack
property int text_pixelSize: headlineUnderline.width * 0.08 property int text_pixelSize: root.height * 0.06
initialItem: settings initialItem: settings
width: headlineUnderline.width width: headlineUnderline.width
@ -137,7 +137,7 @@ Popup {
top: parent.top top: parent.top
left: parent.left left: parent.left
leftMargin: ( parent.width - headlineUnderline.width ) / 2 leftMargin: ( parent.width - headlineUnderline.width ) / 2
topMargin: parent.height * 0.12 topMargin: headlineUnderline.anchors.topMargin * 0.8
bottom: parent.bottom bottom: parent.bottom
} }
@ -194,6 +194,7 @@ Popup {
//make a short delay and go back to normal options //make a short delay and go back to normal options
shortDelay.start() shortDelay.start()
} }
Timer { Timer {
id: shortDelay id: shortDelay
running: false running: false
@ -247,53 +248,25 @@ Popup {
/*-----Page to setup automatc start sequence-----*/ /*-----Page to setup automatc start sequence-----*/
Component { Component {
id: autostart id: autostart
Column { Column {
id: autostart_col id: autostart_col
property string title: "Autostart" property string title: "Autostart"
property int delegateHeight: height*0.18
SwitchDelegate { SwitchDelegate {
id: ready_del id: ready_del
text: qsTr("say 'ready'") text: qsTr("say 'ready'")
checked: _cppAppSettings.loadSetting("ready_en") === "true" checked: _cppAppSettings.loadSetting("ready_en") === "true"
width: parent.width width: parent.width
height: parent.delegateHeight
font.pixelSize: options_stack.text_pixelSize font.pixelSize: options_stack.text_pixelSize
onCheckedChanged: { onCheckedChanged: {
_cppAppSettings.writeSetting("ready_en",checked) _cppAppSettings.writeSetting("ready_en",checked)
} }
indicator: Rectangle { indicator: SimpleIndicator{}
implicitWidth: 48
implicitHeight: 26
x: ready_del.width - width - ready_del.rightPadding
y: parent.height / 2 - height / 2
radius: 13
color: ready_del.checked ? "#17a81a" : "transparent"
border.color: ready_del.checked ? "#17a81a" : "#cccccc"
Behavior on color{
ColorAnimation{
duration: 200
}
}
Rectangle {
x: ready_del.checked ? parent.width - width : 0
width: 26
height: 26
radius: 13
color: ready_del.down ? "#cccccc" : "#ffffff"
border.color: ready_del.checked ? (ready_del.down ? "#17a81a" : "#21be2b") : "#999999"
Behavior on x{
NumberAnimation {
property: "x"
duration: 200
easing.type: Easing.InOutQuad
}
}
}
}
} }
ItemDelegate { ItemDelegate {
@ -302,12 +275,15 @@ Popup {
enabled: ready_del.checked enabled: ready_del.checked
width: parent.width width: parent.width
font.pixelSize: options_stack.text_pixelSize font.pixelSize: options_stack.text_pixelSize
height: parent.delegateHeight
TextField { TextField {
focus: true focus: true
placeholderText: "time" placeholderText: "time"
width: parent.width * 0.3 width: parent.width * 0.3
height: parent.height
anchors.right: parent.right anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
inputMethodHints: Qt.ImhFormattedNumbersOnly inputMethodHints: Qt.ImhFormattedNumbersOnly
text: _cppAppSettings.loadSetting("ready_delay") text: _cppAppSettings.loadSetting("ready_delay")
@ -323,42 +299,15 @@ Popup {
text: qsTr("say\n'at your marks'") text: qsTr("say\n'at your marks'")
checked: _cppAppSettings.loadSetting("at_marks_en") === "true" checked: _cppAppSettings.loadSetting("at_marks_en") === "true"
width: parent.width width: parent.width
//height: parent.delegateHeight * 1.5
font.pixelSize: options_stack.text_pixelSize font.pixelSize: options_stack.text_pixelSize
onCheckedChanged: { onCheckedChanged: {
_cppAppSettings.writeSetting("at_marks_en",at_marks_del.checked) _cppAppSettings.writeSetting("at_marks_en",at_marks_del.checked)
} }
indicator: Rectangle { indicator: SimpleIndicator{}
implicitWidth: 48
implicitHeight: 26
x: at_marks_del.width - width - at_marks_del.rightPadding
y: parent.height / 2 - height / 2
radius: 13
color: at_marks_del.checked ? "#17a81a" : "transparent"
border.color: at_marks_del.checked ? "#17a81a" : "#cccccc"
Behavior on color{
ColorAnimation{
duration: 200
}
}
Rectangle {
x: at_marks_del.checked ? parent.width - width : 0
width: 26
height: 26
radius: 13
color: at_marks_del.down ? "#cccccc" : "#ffffff"
border.color: at_marks_del.checked ? (at_marks_del.down ? "#17a81a" : "#21be2b") : "#999999"
Behavior on x{
NumberAnimation {
property: "x"
duration: 200
easing.type: Easing.InOutQuad
}
}
}
}
} }
ItemDelegate { ItemDelegate {
@ -366,13 +315,17 @@ Popup {
text: "delay (ms)" text: "delay (ms)"
enabled: at_marks_del.checked enabled: at_marks_del.checked
width: parent.width width: parent.width
height: parent.delegateHeight
font.pixelSize: options_stack.text_pixelSize font.pixelSize: options_stack.text_pixelSize
TextField { TextField {
focus: true focus: true
placeholderText: "time" placeholderText: "time"
width: parent.width * 0.3 width: parent.width * 0.3
height: parent.height
anchors.right: parent.right anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
inputMethodHints: Qt.ImhFormattedNumbersOnly inputMethodHints: Qt.ImhFormattedNumbersOnly
text: _cppAppSettings.loadSetting("at_marks_delay") text: _cppAppSettings.loadSetting("at_marks_delay")

35
qml/SimpleIndicator.qml Normal file
View file

@ -0,0 +1,35 @@
import QtQuick 2.0
Rectangle {
property bool checked: parent.checked
property bool down: parent.down
property int set_height: parent.font.pixelSize * 1.4
implicitWidth: set_height * 1.84
implicitHeight: set_height
x: ready_del.width - width - ready_del.rightPadding
y: parent.height / 2 - height / 2
radius: implicitHeight * 0.5
color: parent.checked ? "#17a81a" : "transparent"
border.color: parent.checked ? "#17a81a" : "#cccccc"
Behavior on color{
ColorAnimation{
duration: 200
}
}
Rectangle {
x: parent.checked ? parent.width - width : 0
width: parent.height
height: parent.height
radius: height * 0.5
color: parent.down ? "#cccccc" : "#ffffff"
border.color: parent.checked ? (parent.down ? "#17a81a" : "#21be2b") : "#999999"
Behavior on x{
NumberAnimation {
property: "x"
duration: 200
easing.type: Easing.InOutQuad
}
}
}
}

View file

@ -385,9 +385,9 @@ Window {
id: settingsDialog id: settingsDialog
} }
ProfilesDialog { // ProfilesDialog {
id: profilesDialog // id: profilesDialog
} // }
/*------------------- /*-------------------
lower line and menu lower line and menu
@ -423,9 +423,11 @@ Window {
left: root.landscape() ? undefined:parent.left left: root.landscape() ? undefined:parent.left
top: root.landscape() ? parent.top:undefined top: root.landscape() ? parent.top:undefined
//align in landscape mode //align in landscape mode
topMargin: root.landscape() ? (parent.height - (height * 2)) / 3:undefined //for two buttons: topMargin: root.landscape() ? (parent.height - (height * 2)) / 3:undefined
topMargin: root.landscape() ? (parent.height * 0.5 - (height * 0.5)):undefined
//align in portrait mode //align in portrait mode
leftMargin: root.landscape() ? undefined:(parent.width - width * 2) / 3 //for two buttons: leftMargin: root.landscape() ? undefined:(parent.width - width * 2) / 3
leftMargin: root.landscape() ? undefined:(parent.width * 0.5 - width * 0.5)
} }
height: root.landscape() ? parent.width * 0.7:parent.height * 0.7 height: root.landscape() ? parent.width * 0.7:parent.height * 0.7
@ -462,6 +464,7 @@ Window {
} }
} }
/*
RoundButton { RoundButton {
id: profilesButt id: profilesButt
@ -506,6 +509,8 @@ Window {
} }
} }
} }
*/
} }
/*---------------------- /*----------------------

View file

@ -5,5 +5,6 @@
<file>SettingsDialog.qml</file> <file>SettingsDialog.qml</file>
<file>ProgressCircle.qml</file> <file>ProgressCircle.qml</file>
<file>ProfilesDialog.qml</file> <file>ProfilesDialog.qml</file>
<file>SimpleIndicator.qml</file>
</qresource> </qresource>
</RCC> </RCC>

View file

@ -71,3 +71,9 @@ bool SqlProfileModel::append(QString name)
submitAll(); submitAll();
return(true); return(true);
} }
void SqlProfileModel::remove(int row)
{
removeRows(row, 1);
submitAll();
}