You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

423 lines
14 KiB

6 months ago
/******************************************************************
Copyright © Deng Zhimao Co., Ltd. 1990-2030. All rights reserved.
* @projectName radio
* @brief Radio.qml
* @author Deng Zhimao
* @email 1252699831@qq.com
* @date 2020-08-19
*******************************************************************/
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.5
import QtQuick.Controls 1.3
import QtQuick.Controls.Styles 1.4
import radio 1.0
import "../helpbutton"
Item {
id: myRadio
visible: false
property real iconsOpacity: 1.0
property bool muteFlag: true
HelpMessages {
anchors.fill: parent
z: 105
appIcon: WINStyle ? "" : "qrc:/desktop/androidstyleicons/radio.png"
appName: "收音机FM"
appVersion: "Version 1.0.1"
subtoolText: "1.App,tea57675VGND,SDASDLMP157IO PZ5PZ4
2."
versionText: "1.【Version 1.0.0 2020-10-15】。\n初始版本\n2.【Version 1.0.1 2020-12-09】。\n兼容480x272分辨率"
}
onVisibleChanged: {
formState.state == 'right' ? formState.state = '' : formState.state = 'right'
}
Component.onCompleted: {
myRadio.x = parent.width
}
Item {
id: formState
states: State {
name: "right"
PropertyChanges {
target: myRadio
x: 0
}
}
transitions: Transition {
NumberAnimation {
property: "x"
easing.type: Easing.InOutQuart
duration: 500
}
}
}
MyRadio {
id: radio
onLevelChanged: {
levelText.text = "信号等级为: " + readLevel
}
}
Flickable {
anchors.fill: parent
interactive: smallScreen ? true : false
contentWidth: smallScreen ? parent.width + 320 : parent.width
contentHeight: smallScreen ? parent.height + 208 : parent.height
ScrollBar.vertical: ScrollBar {
visible: smallScreen ? true : false
id: scrollBarVertical1
z: 20
width: 5
hoverEnabled: true
background: Rectangle {color: "#33bbbbbb"}
onActiveChanged: {
active = true;
}
Component.onCompleted: {
scrollBarVertical1.active = true;
}
contentItem: Rectangle{
implicitWidth: 5
implicitHeight: 100
radius: 2
color: scrollBarVertical1.hovered ? "#25cfea" : "#88bbbbbb"
}
}
ScrollBar.horizontal: ScrollBar {
visible: smallScreen ? true : false
id: scrollBarHorizontal1
z: 20
height: 5
hoverEnabled: true
background: Rectangle {color: "#33bbbbbb"}
onActiveChanged: {
active = true;
}
Component.onCompleted: {
scrollBarHorizontal1.active = true;
}
contentItem: Rectangle{
implicitWidth: 100
implicitHeight: 5
radius: 2
color: scrollBarHorizontal1.hovered ? "#25cfea" : "#88bbbbbb"
}
}
Timer{
id: timer
interval: 100
repeat: true
onTriggered:{
if (pre_button.checked)
slider.value -= 0.003125
if (next_button.checked)
slider.value += 0.003125
}
}
Button {
id: pre_button
anchors.top: parent.verticalCenter
anchors.topMargin: 20
anchors.right: parent.horizontalCenter
anchors.rightMargin: 150
width: 40
height: 40
style: ButtonStyle {
background:Rectangle{
anchors.fill: parent
color: "transparent"
Image {
id: preView
source: "qrc:/radio/images/preview.png"
}
}
}
MouseArea {
anchors.fill: parent
//hoverEnabled: true
onClicked: {
//pre_button.opacity = 0.5
slider.value -= 0.003125
}
//onEntered: pre_button.opacity = 0.8
onPressed: pre_button.opacity = 0.8
onReleased: {
pre_button.opacity = 1
pre_button.checked = false
timer.stop()
}
//onExited: pre_button.opacity = 1
onPressAndHold: {
pre_button.checked = true
timer.start()
}
}
}
Button {
id: next_button
anchors.top: parent.verticalCenter
anchors.topMargin: 20
anchors.left: parent.horizontalCenter
anchors.leftMargin: 150
width: 40
height: 40
checkable: true
style: ButtonStyle {
background:Rectangle{
anchors.fill: parent
color: "transparent"
Image {
id: next
source: "qrc:/radio/images/next.png"
}
}
}
MouseArea {
anchors.fill: parent
//hoverEnabled: true
onClicked: {
//next_button.opacity = 0.5
slider.value += 0.003125
}
//onEntered: next_button.opacity = 0.8
onPressed: next_button.opacity = 0.8
onReleased: {
next_button.opacity = 1
next_button.checked = false
timer.stop()
}
//onExited: next_button.opacity = 1
onPressAndHold: {
next_button.checked = true
timer.start()
}
}
}
Text {
id: levelText
text: qsTr("信号等级为: 0")
anchors.top: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 20
font.bold: true
font.pixelSize: 20
color: "white"
}
Text {
id: fm
text: qsTr("FM")
color: "white"
anchors.right: fmValue.left
anchors.rightMargin: 30
anchors.bottom: parent.verticalCenter
anchors.bottomMargin: 20
font.pixelSize: 30
}
Text {
id: fmUnit
text: qsTr("MHz")
color: "white"
anchors.left: fmValue.right
anchors.leftMargin: 30
anchors.bottom: parent.verticalCenter
anchors.bottomMargin: 20
font.pixelSize: 30
}
Text {
id: mute
text: !muteFlag ? "Mute" : "UnMute"
color: "white"
anchors.left: next_button.right
anchors.leftMargin: 50
anchors.bottom: parent.verticalCenter
anchors.bottomMargin: 20
font.pixelSize: 30
MouseArea {
anchors.fill: parent
onClicked: {
muteFlag = !muteFlag;
radio.setMuteFlag(muteFlag)
radio.setFrequency(fmValue.text)
}
}
}
Text {
id: fmValue
color: "white"
anchors.horizontalCenter : parent.horizontalCenter
anchors.bottom: parent.verticalCenter
anchors.bottomMargin: 20
font.pixelSize: 100
}
Image {
id: slidebg
source: "qrc:/radio/images/sliderbg.png"
anchors.horizontalCenter : parent.horizontalCenter
anchors.bottom: parent.verticalCenter
anchors.bottomMargin: 120
width: 800
height: 68
}
Slider {
id: slider
anchors.horizontalCenter : parent.horizontalCenter
anchors.bottom: parent.verticalCenter
anchors.bottomMargin: 120
width: 800
height: 68
value: 0.553125
stepSize: 0.003125
onValueChanged: {
fmValue.text = String(slider.value*32+76).indexOf(".") != -1
? String(slider.value*32+76).slice(0,5)
: String(slider.value*32+76).slice(0,5) + ".0"
radio.setMuteFlag(muteFlag)
radio.setFrequency(fmValue.text)
//console.log(fmValue.text)
}
style:SliderStyle{
groove:Rectangle{
color: "transparent"
}
handle: Rectangle{
anchors.centerIn: parent
Image {
id: handleImage
source: "qrc:/radio/images/handle.png"
anchors.centerIn: parent
opacity: control.pressed ? 0.8 : 1
}
width: 80
height: 80
color: "transparent"
}
}
}
ListModel {
id: fmModel
ListElement {name: ""}
ListElement {name: ""}
ListElement {name: ""}
ListElement {name: ""}
ListElement {name: ""}
ListElement {name: ""}
function getIcon(index, id) {
var data = [
["qrc:/radio/images/button.png"],
["qrc:/radio/images/button.png"],
["qrc:/radio/images/button.png"],
["qrc:/radio/images/button.png"],
["qrc:/radio/images/button.png"],
["qrc:/radio/images/button.png"],
]
return data[index][0];
}
function getAppName(index, id) {
var data = [
["93.6MHz"],
["95.4MHz"],
["100.5MHz"],
["103.6MHz"],
["105.6MHz"],
["107.7MHz"],
]
return data[index][0];
}
}
GridView {
id: fm_gridView
visible: true
anchors.top: parent.verticalCenter
anchors.topMargin: 80
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
focus: true
interactive: false
cellWidth: fm_gridView.width / 3
cellHeight: (fm_gridView.height) / 2
model: fmModel
delegate: delegateThumbnail
}
Component {
id: delegateThumbnail
Rectangle {
id: rectangel
width: fm_gridView.width / 3
height: fm_gridView.cellHeight
color: "transparent"
Rectangle {
width: rectangel.width - 20
height: 60
radius: 8
color: "#0195de"
anchors.centerIn: parent
opacity: fm_gridView.currentIndex == index ? iconsOpacity : 1
Image {
id: browse_img
visible: false
antialiasing: true
source: fm_gridView.model.getIcon(index, 0)
anchors.fill: parent
fillMode: Image.Stretch
opacity: fm_gridView.currentIndex == index ? iconsOpacity : 1
}
Text {
anchors.centerIn: parent
id: appName
text: qsTr(fm_gridView.model.getAppName(index, 0))
color: "white"
font.pixelSize: 30
font.bold: true
}
MouseArea {
anchors.fill: parent
hoverEnabled: true
onClicked: {
fm_gridView.currentIndex = index
var tmp = appName.text.split("MHz")
slider.value = (parseFloat(tmp) - 76) * 0.03125
//console.log(parseFloat(tmp) + " " + slider.value)
}
onEntered: {
fm_gridView.currentIndex = index
iconsOpacity = 0.5
}
onPressed:{
iconsOpacity = 0.8
fm_gridView.currentIndex = index
}
onReleased:{
iconsOpacity = 1
}
onExited: iconsOpacity = 1
}
}
}
}
}
}