harbour-allradio/qml/delegates/FavoriteStations.qml
2025-05-28 20:47:14 +02:00

254 lines
10 KiB
QML

import QtQuick 2.0
import Sailfish.Silica 1.0
import QtGraphicalEffects 1.0
import "../helpers/jsFunctions.js" as JS
ListItem {
id: delegate
property alias favIcon: favIcon
property alias contextMenuHeight: contextMenu.height
property bool favo: favorite ? true : false
property variant view
// property bool favorite: false
height: menuOpen ? contextMenu.height + Theme.itemSizeExtraLarge : Theme.itemSizeExtraLarge
menu: contextMenu
contentHeight: Theme.itemSizeExtraLarge
showMenuOnPressAndHold: true
ContextMenu {
id: contextMenu
MenuItem {
Row {
anchors.centerIn: parent
spacing: Theme.paddingMedium
Image {
source: "image://theme/icon-m-like"
anchors.verticalCenter: parent.verticalCenter
height: Theme.itemSizeExtraSmall * 0.5
width: height
fillMode: Image.PreserveAspectFit
}
Label {
font.pixelSize: Theme.fontSizeSmall
text: qsTr("Vote on Community Radio Browser")
}
}
onClicked: console.log("LIKE!!!") //remove()//listView.currentItem.remove(rpindex,rpsource) //listView.remorseAction();
}
MenuItem {
Row {
anchors.centerIn: parent
spacing: Theme.paddingMedium
Image {
source: favo ? "image://theme/icon-m-favorite-selected" : "image://theme/icon-m-favorite"
anchors.verticalCenter: parent.verticalCenter
height: Theme.itemSizeExtraSmall * 0.5
width: height
fillMode: Image.PreserveAspectFit
}
Label {
font.pixelSize: Theme.fontSizeSmall
text: favo ? qsTr("Remove from favorites") : qsTr("Add to favorites")
}
}
onClicked: {
favo ? favo = false : favo = true
//radioPlayer._favorite = favo
radioPlayer.setStationFavorite(stationuuid,name,countrycode,homepage,url_resolved,favicon,tags,codec,bitrate,hls,favo)
}
}
/* MenuItem {
Row {
anchors.centerIn: parent
spacing: Theme.paddingMedium
Image {
source: "image://theme/icon-m-delete"
anchors.verticalCenter: parent.verticalCenter
height: Theme.itemSizeExtraSmall * 0.5
width: height
fillMode: Image.PreserveAspectFit
}
Label {
font.pixelSize: Theme.fontSizeSmall
text: qsTr("Remove from AllRadio2")
}
}
onClicked: remove()//console.log("DELETE!!!") //remove()//listView.currentItem.remove(rpindex,rpsource) //listView.remorseAction();
} */
}
/* Rectangle {
id: stationLogo
anchors.top: header.bottom
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width - (Theme.paddingLarge * 2)
height: width
radius: 20
color: "transparent" //Theme.rgba(Theme.highlightDimmerColor,0.8)
border.color: Theme.rgba(Theme.highlightDimmerColor,0.8)
border.width: Theme.paddingSmall
} */
Rectangle {
id: favIcon
property alias source: stationimage.source
anchors.left: parent.left
anchors.leftMargin: Theme.paddingMedium
anchors.verticalCenter: parent.verticalCenter
height: Theme.itemSizeLarge//nameLabel.height + codecLabel.height + tagLabel.height
width: height
radius: 20
color: "transparent" //Theme.rgba(Theme.highlightDimmerColor,0.8)
border.color: Theme.rgba(Theme.highlightDimmerColor,0.8)
border.width: Theme.paddingSmall
}
Image {
id: stationimage
anchors.fill: favIcon
anchors.margins: favIcon.border.width
fillMode: Image.PreserveAspectFit
source: favicon ? favicon : "../images/community.png"
// layer.enabled: true
// layer.effect: OpacityMask {
// maskSource: parent
// }
// layer {
// enabled: false
// effect: ColorOverlay {
// color: Theme.highlightBackgroundColor
// }
// }
BusyIndicator {
size: BusyIndicatorSize.Medium
anchors.centerIn: stationimage
//running: appActive && stationimage.status != Image.Ready
}
onStatusChanged:
switch(stationimage.status){
case Image.Null:
//console.log("no image has been set: "+ name);
source = "../images/community.png"
break;
case Image.Ready:
//console.log("the image has been loaded: "+name+"\n"
// + stationimage.width + " x " + stationimage.height);
break;
case Image.Loading:
break;
case Image.Error:
//console.log("an error occurred while loading the image: "+name);
source = "../images/community.png"
break;
}
}
/* Image {
height: stationimage.height * 0.50
fillMode: Image.PreserveAspectFit
opacity: 0.9
anchors.right: favIcon.right
anchors.bottom: favIcon.bottom
source: "../flags/"+countrycode.toLowerCase()+".png"
} */
// }
Label {
id: nameLabel
anchors.bottom: countryLabel.top
// anchors.bottomMargin: Theme.paddingSmall
anchors.left: favIcon.right
anchors.right: fav.left
anchors.leftMargin: Theme.paddingLarge
anchors.rightMargin: Theme.paddingMedium
elide: Text.ElideRight
width: parent.width - (favIcon.width + (Theme.paddingLarge * 2))
text: lastcheckok == "1" ? name : " [DOWN] "+name
color: lastcheckok == "1" ? Theme.primaryColor : Theme.secondaryColor
font.strikeout: lastcheckok == "1" ? false : true
font.pixelSize: Theme.fontSizeSmall
}
Image {
id:countryImage
height: countryLabel.height * 0.8
anchors.leftMargin: Theme.paddingLarge
fillMode: Image.PreserveAspectFit
opacity: 0.7
anchors.left: favIcon.right
anchors.bottom: countryLabel.bottom
source: "../flags/"+countrycode.toLowerCase()+".png"
}
Label {
id: countryLabel
anchors.verticalCenter: parent.verticalCenter
anchors.left: countryImage.right
anchors.leftMargin: Theme.paddingMedium
font.pixelSize: Theme.fontSizeExtraSmall
text: radioBrowser.getCountryName(countrycode)//"Country name"//getAll(hls,codec,bitrate)
color: delegate.highlighted ? Theme.highlightColor : Theme.secondaryColor
}
Label {
id: codecLabel
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
anchors.leftMargin: Theme.paddingLarge
font.pixelSize: Theme.fontSizeExtraSmall
text: JS.getAll(hls,codec,bitrate)
color: delegate.highlighted ? Theme.highlightColor : Theme.secondaryColor
}
Label {
id: tagLabel
anchors.top: countryLabel.bottom
//anchors.topMargin: Theme.paddingSmall
anchors.left: favIcon.right
anchors.leftMargin: Theme.paddingLarge
font.pixelSize: Theme.fontSizeExtraSmall
width: parent.width - (favIcon.width + (Theme.paddingLarge * 2))
elide: Text.ElideRight
text: tags
color: delegate.highlighted ? Theme.highlightColor : Theme.secondaryColor
}
Image {
id: fav
height: nameLabel.height * 0.8
width: height
fillMode: Image.PreserveAspectFit
opacity: 0.8
visible: favo
anchors.right: parent.right
anchors.verticalCenter: nameLabel.verticalCenter
//anchors.top: nameLabel.top
anchors.rightMargin: Theme.paddingMedium
source: "image://theme/icon-m-favorite-selected" //favo ? "image://theme/icon-m-favorite-selected" : "image://theme/icon-m-favorite"
}
//onFavoChanged: if (favo) setRadioData()
onClicked: {
if (model.url_resolved !== radioPlayer._url_resolved) {
radioPlayer._favicon = model.favicon
radioPlayer._name = model.name
radioPlayer._countrycode = model.countrycode
radioPlayer._tags = model.tags
radioPlayer._codec = model.codec//getCodec(model.codec)
radioPlayer._bitrate = model.bitrate //getBitrate(model.bitrate)
radioPlayer._hls = model.hls
radioPlayer._url_resolved = model.url_resolved
radioPlayer._homepage = model.homepage
radioPlayer._stationuuid = model.stationuuid
radioPlayer._favorite = favo
radioPlayer.clicked = false
} else radioPlayer.clicked = true
}
}