added some new components and a font

This commit is contained in:
Dorian Zedler 2020-05-26 17:16:49 +02:00
parent c75bbc2c65
commit 305656ab1e
Signed by: dorian
GPG key ID: 989DE36109AFA354
12 changed files with 289 additions and 72 deletions

View file

@ -6,8 +6,11 @@ ScStwLibraries::ScStwLibraries(QObject *parent) : QObject(parent)
} }
void ScStwLibraries::init() { void ScStwLibraries::init() {
qmlRegisterType<ScStw>("de.itsblue.ScStw", 2, 0, "ScStw");
qRegisterMetaType<ScStw::BaseStationSetting>("ScStw::BaseStationSetting");
qRegisterMetaType<ScStw::SocketCommand>("ScStw::SocketCommand");
qmlRegisterType<ScStwRace>("de.itsblue.ScStw", 2, 0, "ScStwRace"); qmlRegisterType<ScStwRace>("de.itsblue.ScStw", 2, 0, "ScStwRace");
qmlRegisterType<ScStwTimer>("de.itsblue.ScStw", 2, 0, "ScStwTimer"); qmlRegisterType<ScStwTimer>("de.itsblue.ScStw", 2, 0, "ScStwTimer");
qmlRegisterType<ScStw>("de.itsblue.ScStw", 2, 0, "ScStw");
qmlRegisterType<ScStwClient>("de.itsblue.ScStw", 2, 0, "ScStwClient"); qmlRegisterType<ScStwClient>("de.itsblue.ScStw", 2, 0, "ScStwClient");
} }

View file

@ -3,5 +3,8 @@
<file>lib/ScStwQmlComponents/qmldir</file> <file>lib/ScStwQmlComponents/qmldir</file>
<file>lib/ScStwQmlComponents/Test.qml</file> <file>lib/ScStwQmlComponents/Test.qml</file>
<file>lib/ScStwQmlComponents/BusyIndicator.qml</file> <file>lib/ScStwQmlComponents/BusyIndicator.qml</file>
<file>lib/ScStwQmlComponents/Icon.qml</file>
<file>lib/ScStwQmlComponents/TimerColumn.qml</file>
<file>lib/ScStwQmlComponents/FadeAnimation.qml</file>
</qresource> </qresource>
</RCC> </RCC>

View file

@ -1,65 +1,26 @@
import QtQuick 2.3 import QtQuick 2.0
import QtQuick.Controls 2.4 import QtQuick.Templates 2.0 as T
import QtQuick.Controls.Styles 1.2 import QtQuick.Controls 2.0
BusyIndicator { T.BusyIndicator {
id: control id: control
property double animationSpeed: 1000
property double formFactor: 4.5
property color lineColor: "#21be2b"
contentItem: Item { contentItem: Item {
implicitWidth: 64 Image {
implicitHeight: 64 id: holdImage
Item {
id: item
anchors.fill: parent anchors.fill: parent
source: "qrc:/images/SpeedHold.png"
fillMode: Image.PreserveAspectFit
}
property int currentHeight: 0 RotationAnimation {
target: holdImage
SequentialAnimation { running: control.running
running: control.running duration: 1000
loops: Animation.Infinite loops: Animation.Infinite
from: 0
NumberAnimation { to: 360
target: item easing.type: Easing.InOutQuad
property: "currentHeight"
from: 0
to: 800
duration: control.animationSpeed
}
}
Row {
anchors.fill: parent
spacing: item.width / 9
Repeater {
id: repeater
model: 5
Rectangle {
property double heightMultiplier: Math.abs( Math.sin( ( ((item.currentHeight/100) + (index*(control.formFactor/repeater.model)))) * (Math.PI/8) ) )
anchors.verticalCenter: parent.verticalCenter
width: item.width / 9
height: ( heightMultiplier ) * ( item.height - 1 ) + 1
radius: width * 0.5
color: control.lineColor
}
}
}
} }
} }
} }

View file

@ -0,0 +1,72 @@
/*
Speed Climbing Stopwatch - Simple Stopwatch for Climbers
Copyright (C) 2018 Itsblue Development - Dorian Zeder
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, version 3 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick 2.0
SequentialAnimation {
id: root
property QtObject target
property int fadeDuration: 150
property int fadeDuration_in: fadeDuration
property int fadeDuration_out: fadeDuration
property alias outValueScale: outAnimationScale.to
property alias inValueScale: inAnimationScale.to
property alias outValueOpacity: outAnimationOpacity.to
property alias inValueOpacity: inAnimationOpacity.to
property string easingType: "Quad"
ParallelAnimation {
NumberAnimation { // in the default case, fade scale to 0
id: outAnimationScale
target: root.target
property: "scale"
duration: root.fadeDuration_in
to: 0.9
easing.type: Easing["In"+root.easingType]
}
NumberAnimation { // in the default case, fade scale to 0
id: outAnimationOpacity
target: root.target
property: "opacity"
duration: root.fadeDuration_in
to: 0
easing.type: Easing["In"+root.easingType]
}
}
PropertyAction { } // actually change the property targeted by the Behavior between the 2 other animations
ParallelAnimation {
NumberAnimation { // in the default case, fade scale back to 1
id: inAnimationScale
target: root.target
property: "scale"
duration: root.fadeDuration_out
to: 1
easing.type: Easing["Out"+root.easingType]
}
NumberAnimation { // in the default case, fade scale to 0
id: inAnimationOpacity
target: root.target
property: "opacity"
duration: root.fadeDuration_in
to: 1
easing.type: Easing["In"+root.easingType]
}
}
}

View file

@ -0,0 +1,27 @@
import QtQuick 2.0
import QtQuick.Controls 2.0
Item {
id: control
property string fontName
property color color
property string icon: "\uf850"
Label {
anchors.fill: parent
text: control.icon
font.styleName: control.fontName
color: control.color
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
fontSizeMode: Text.Fit
font.pixelSize: height
minimumPixelSize: 1
}
}

View file

@ -0,0 +1,144 @@
import QtQuick 2.0
import QtQuick.Controls 2.0
import de.itsblue.ScStw 2.0
import de.itsblue.ScStwMonitor 2.0
Column {
id: control
property var timers
property var colors
property var fontName
opacity: backend.scStwClient.state === ScStwClient.CONNECTED ? 1:0
spacing: 0
Repeater {
id: timerRep
property var clearedTimers: removeDisabledTimers(control.timers)
function removeDisabledTimers(timers) {
var ret = []
for(var i = 0; i < timers.length; i++) {
if(timers[i]["state"] !== ScStwTimer.DISABLED)
ret.push(timers[i])
}
return ret
}
model: clearedTimers.length
delegate: Item {
id: timerDel
width: parent.width
height: control.height / timerRep.model
Label {
id: laneNameLa
anchors {
left: parent.left
}
leftPadding: parent.width * 0.03
width: parent.width * 0.15
height: parent.height * 0.5
fontSizeMode: Text.Fit
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignLeft
text: ""//index === 0 ? "A":"B"
color: control.colors.text
font.pixelSize: height
font.styleName: control.fontName
}
Label {
id: timerTextLa
anchors.centerIn: parent
anchors.horizontalCenterOffset: laneNameLa.text !== "" ? parent.width * 0.06:0
anchors.verticalCenterOffset: -(parent.height * 0.04 * reactTimeLa.opacity)
width: parent.width * 0.8
height: parent.height * 0.8
elide: "ElideRight"
color: ([ScStwTimer.WON].indexOf(timerRep.clearedTimers[index]["state"]) >= 0 ? control.colors.success :
[ScStwTimer.FAILED,ScStwTimer.LOST].indexOf(timerRep.clearedTimers[index]["state"]) >= 0 ? control.colors.error:
control.colors.text)
text: timerRep.clearedTimers[index]["text"]
fontSizeMode: Text.Fit
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
font.pixelSize: height
font.styleName: control.fontName
minimumPixelSize: 1
}
Label {
id: reactTimeLa
property int rtime: timerRep.clearedTimers[index]["reactionTime"]
anchors {
centerIn: parent
verticalCenterOffset: timerTextLa.contentHeight * 0.4 + reactTimeLa.contentHeight * 0.4 + timerTextLa.anchors.verticalCenterOffset
horizontalCenterOffset: parent.width * 0.06
}
width: parent.width * 0.6
height: parent.height * 0.15
scale: enabled ? 1:0.9
opacity: enabled ? 1:0
enabled: timerRep.clearedTimers[index]["state"] >= ScStwTimer.STARTING && rtime !== 0
fontSizeMode: Text.Fit
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
text: "reaction time (ms): " + Math.round(rtime)
color: control.colors.text
font.pixelSize: timerTextLa.font.pixelSize * 0.5
font.styleName: control.fontName
minimumPixelSize: 1
Behavior on opacity {
NumberAnimation {
duration: 200
}
}
Behavior on scale {
NumberAnimation {
duration: 200
}
}
}
}
}
Behavior on opacity {
NumberAnimation {
duration: 200
}
}
}

View file

@ -1,3 +1,5 @@
module ScStwQmlComponents module ScStwQmlComponents
Test 1.0 Test.qml
BusyIndicator 1.0 BusyIndicator.qml BusyIndicator 1.0 BusyIndicator.qml
Icon 1.0 Icon.qml
TimerColumn 1.0 TimerColumn.qml
FadeAnimation 1.0 FadeAnimation.qml

View file

@ -3,5 +3,7 @@
<file>fonts/fa5solid.woff</file> <file>fonts/fa5solid.woff</file>
<file>images/BaseStationBlack.png</file> <file>images/BaseStationBlack.png</file>
<file>images/BaseStationWhite.png</file> <file>images/BaseStationWhite.png</file>
<file>images/SpeedHold.png</file>
<file>fonts/PTMono-Regular.ttf</file>
</qresource> </qresource>
</RCC> </RCC>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -3,6 +3,7 @@
ScStwAppThemeManager::ScStwAppThemeManager(QObject *parent) : QObject(parent) ScStwAppThemeManager::ScStwAppThemeManager(QObject *parent) : QObject(parent)
{ {
QFontDatabase::addApplicationFont(":/fonts/fa5solid.woff"); QFontDatabase::addApplicationFont(":/fonts/fa5solid.woff");
QFontDatabase::addApplicationFont(":/fonts/PTMono-Regular.ttf");
QVariantMap icons = { QVariantMap icons = {
{"back", "\uf053"}, {"back", "\uf053"},
@ -10,7 +11,14 @@ ScStwAppThemeManager::ScStwAppThemeManager(QObject *parent) : QObject(parent)
{"toppad", "\uf10a"}, {"toppad", "\uf10a"},
{"startpad", "\uf3fa"}, {"startpad", "\uf3fa"},
{"profiles", "\uf007"}, {"profiles", "\uf007"},
{"confirm", "\uf00c"} {"confirm", "\uf00c"},
{"volumeUp", "\uf028"},
{"volumeDown", "\uf027"}
};
QVariantMap fonts= {
{"icons", "Font Awesome 5 Free"},
{"timers", "PT Mono"}
}; };
ScStwAppTheme * lightTheme = new ScStwAppTheme ( ScStwAppTheme * lightTheme = new ScStwAppTheme (
@ -43,14 +51,12 @@ ScStwAppThemeManager::ScStwAppThemeManager(QObject *parent) : QObject(parent)
{"success", "#60de26"}, {"success", "#60de26"},
{"error", "#ff0000"}, {"error", "#ff0000"},
{"warning", "#e0b928"},
{"line", "grey"}, {"line", "grey"},
}, },
icons icons,
, fonts,
{
{"icons", "Font Awesome 5 Free"}
},
{ {
{"backIcon", "qrc:/graphics/icons/back_black.png"}, {"backIcon", "qrc:/graphics/icons/back_black.png"},
{"settIcon", "qrc:/graphics/icons/settings_black.png"}, {"settIcon", "qrc:/graphics/icons/settings_black.png"},
@ -91,17 +97,14 @@ ScStwAppThemeManager::ScStwAppThemeManager(QObject *parent) : QObject(parent)
{"success", "#6bd43b"}, {"success", "#6bd43b"},
{"error", "#e03b2f"}, {"error", "#e03b2f"},
{"warning", "#e0b928"},
{"line", "grey"}, {"line", "grey"},
{"iconFontName", "Font Awesome 5 Free"}, {"iconFontName", "Font Awesome 5 Free"},
}, },
{ icons,
icons fonts,
},
{
{"icons", "Font Awesome 5 Free"}
},
{ {
{"backIcon", "qrc:/graphics/icons/back.png"}, {"backIcon", "qrc:/graphics/icons/back.png"},
{"settIcon", "qrc:/graphics/icons/settings.png"}, {"settIcon", "qrc:/graphics/icons/settings.png"},

View file

@ -6,7 +6,7 @@ ScStwStyling::ScStwStyling(QObject *parent) : QObject(parent)
} }
void ScStwStyling::init(QQmlApplicationEngine *engine) { void ScStwStyling::init(QQmlApplicationEngine *engine) {
qmlRegisterUncreatableType<ScStwAppTheme>("de.itsblue.ScStw.styling", 2, 0, "ScStwAppTheme", "The ScStwAppTheme has to be managed by a ScStwAppTheme manager and is therefore not creatable"); qmlRegisterUncreatableType<ScStwAppTheme>("de.itsblue.ScStw.Styling", 2, 0, "ScStwAppTheme", "The ScStwAppTheme has to be managed by a ScStwAppTheme manager and is therefore not creatable");
qmlRegisterType<ScStwAppThemeManager>("de.itsblue.ScStw.styling", 2, 0, "ScStwAppThemeManager"); qmlRegisterType<ScStwAppThemeManager>("de.itsblue.ScStw.Styling", 2, 0, "ScStwAppThemeManager");
engine->addImportPath(":/lib"); engine->addImportPath(":/lib");
} }