mirror of
https://github.com/cmclark00/retro-imager.git
synced 2025-05-18 16:05:21 +01:00
Make osdelegate more flexible and robust
This commit is contained in:
parent
be40f05b50
commit
5cb57dae2b
1 changed files with 108 additions and 94 deletions
202
main.qml
202
main.qml
|
@ -541,98 +541,9 @@ ApplicationWindow {
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
width: window.width-100
|
width: window.width-100
|
||||||
height: image_download_size ? 100 : 60
|
height: contentLayout.implicitHeight + 24
|
||||||
Accessible.name: name+".\n"+description
|
Accessible.name: name+".\n"+description
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: bgrect
|
|
||||||
anchors.fill: parent
|
|
||||||
color: "#f5f5f5"
|
|
||||||
visible: mouseOver && parent.ListView.view.currentIndex !== index
|
|
||||||
property bool mouseOver: false
|
|
||||||
}
|
|
||||||
Rectangle {
|
|
||||||
id: borderrect
|
|
||||||
implicitHeight: 1
|
|
||||||
implicitWidth: parent.width
|
|
||||||
color: "#dcdcdc"
|
|
||||||
y: parent.height
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
|
||||||
leftPadding: 25
|
|
||||||
|
|
||||||
Column {
|
|
||||||
width: 64
|
|
||||||
|
|
||||||
Image {
|
|
||||||
source: icon == "icons/ic_build_48px.svg" ? "icons/cat_misc_utility_images.png": icon
|
|
||||||
verticalAlignment: Image.AlignVCenter
|
|
||||||
height: parent.parent.parent.height
|
|
||||||
fillMode: Image.Pad
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
text: " "
|
|
||||||
// visible: !icon
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Column {
|
|
||||||
width: parent.parent.width-64-50-25
|
|
||||||
|
|
||||||
Text {
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
height: parent.parent.parent.height
|
|
||||||
font.family: roboto.name
|
|
||||||
textFormat: Text.RichText
|
|
||||||
text: {
|
|
||||||
var txt = "<p style='margin-bottom: 5px; font-weight: bold;'>"+name
|
|
||||||
if (typeof(website) == "string" && website) {
|
|
||||||
txt += " <a href='"+website+"'> <img src='icons/ic_info_16px.png' align='top'></a>"
|
|
||||||
}
|
|
||||||
txt += "</p><font color='#1a1a1a'>"+description+"</font><font style='font-weight: 200' color='#646464'>"
|
|
||||||
if (typeof(release_date) == "string" && release_date)
|
|
||||||
txt += "<br>"+qsTr("Released: %1").arg(release_date)
|
|
||||||
if (typeof(url) == "string" && url != "" && url != "internal://format") {
|
|
||||||
if (typeof(extract_sha256) != "undefined" && imageWriter.isCached(url,extract_sha256)) {
|
|
||||||
txt += "<br>"+qsTr("Cached on your computer")
|
|
||||||
} else if (url.startsWith("file://")) {
|
|
||||||
txt += "<br>"+qsTr("Local file")
|
|
||||||
} else {
|
|
||||||
txt += "<br>"+qsTr("Online - %1 GB download").arg((image_download_size/1073741824).toFixed(1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
txt += "</font>";
|
|
||||||
|
|
||||||
return txt;
|
|
||||||
}
|
|
||||||
id: osText
|
|
||||||
|
|
||||||
/*
|
|
||||||
Accessible.role: Accessible.ListItem
|
|
||||||
Accessible.name: name+".\n"+description
|
|
||||||
Accessible.focusable: true
|
|
||||||
Accessible.focused: parent.parent.parent.ListView.view.currentIndex === index
|
|
||||||
*/
|
|
||||||
|
|
||||||
ToolTip {
|
|
||||||
visible: osMouseArea.containsMouse && typeof(tooltip) == "string" && tooltip != ""
|
|
||||||
delay: 1000
|
|
||||||
text: typeof(tooltip) == "string" ? tooltip : ""
|
|
||||||
clip: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Column {
|
|
||||||
Image {
|
|
||||||
source: "icons/ic_chevron_right_40px.svg"
|
|
||||||
visible: (typeof(subitems) == "object" && subitems.count) || (typeof(subitems_url) == "string" && subitems_url != "" && subitems_url != "internal://back")
|
|
||||||
height: parent.parent.parent.height
|
|
||||||
fillMode: Image.Pad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: osMouseArea
|
id: osMouseArea
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
@ -648,11 +559,114 @@ ApplicationWindow {
|
||||||
}
|
}
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (osText.hoveredLink) {
|
selectOSitem(model)
|
||||||
Qt.openUrlExternally(osText.hoveredLink)
|
}
|
||||||
} else {
|
}
|
||||||
selectOSitem(model)
|
|
||||||
|
Rectangle {
|
||||||
|
id: bgrect
|
||||||
|
anchors.fill: parent
|
||||||
|
color: "#f5f5f5"
|
||||||
|
visible: mouseOver && parent.ListView.view.currentIndex !== index
|
||||||
|
property bool mouseOver: false
|
||||||
|
}
|
||||||
|
Rectangle {
|
||||||
|
id: borderrect
|
||||||
|
implicitHeight: 1
|
||||||
|
implicitWidth: parent.width
|
||||||
|
color: "#dcdcdc"
|
||||||
|
y: parent.height
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
id: contentLayout
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
top: parent.top
|
||||||
|
right: parent.right
|
||||||
|
margins: 12
|
||||||
|
}
|
||||||
|
spacing: 12
|
||||||
|
|
||||||
|
Image {
|
||||||
|
source: icon == "icons/ic_build_48px.svg" ? "icons/cat_misc_utility_images.png": icon
|
||||||
|
Layout.preferredHeight: 40
|
||||||
|
Layout.preferredWidth: 40
|
||||||
|
sourceSize.width: 40
|
||||||
|
sourceSize.height: 40
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
verticalAlignment: Image.AlignVCenter
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
ColumnLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
spacing: 12
|
||||||
|
Text {
|
||||||
|
text: name
|
||||||
|
elide: Text.ElideRight
|
||||||
|
font.family: roboto.name
|
||||||
|
font.bold: true
|
||||||
|
}
|
||||||
|
Image {
|
||||||
|
source: "icons/ic_info_16px.png"
|
||||||
|
Layout.preferredHeight: 16
|
||||||
|
Layout.preferredWidth: 16
|
||||||
|
visible: typeof(website) == "string" && website
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: Qt.openUrlExternally(website)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Item {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
font.family: roboto.name
|
||||||
|
text: description
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
color: "#1a1a1a"
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
elide: Text.ElideRight
|
||||||
|
color: "#646464"
|
||||||
|
font.weight: Font.Light
|
||||||
|
visible: typeof(release_date) == "string" && release_date
|
||||||
|
text: qsTr("Released: %1").arg(release_date)
|
||||||
|
}
|
||||||
|
Text {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
elide: Text.ElideRight
|
||||||
|
color: "#646464"
|
||||||
|
font.weight: Font.Light
|
||||||
|
visible: typeof(url) == "string" && url != "" && url != "internal://format"
|
||||||
|
text: !url ? "" :
|
||||||
|
typeof(extract_sha256) != "undefined" && imageWriter.isCached(url,extract_sha256)
|
||||||
|
? qsTr("Cached on your computer")
|
||||||
|
: url.startsWith("file://")
|
||||||
|
? qsTr("Local file")
|
||||||
|
: qsTr("Online - %1 GB download").arg((image_download_size/1073741824).toFixed(1))
|
||||||
|
}
|
||||||
|
|
||||||
|
ToolTip {
|
||||||
|
visible: osMouseArea.containsMouse && typeof(tooltip) == "string" && tooltip != ""
|
||||||
|
delay: 1000
|
||||||
|
text: typeof(tooltip) == "string" ? tooltip : ""
|
||||||
|
clip: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Image {
|
||||||
|
source: "icons/ic_chevron_right_40px.svg"
|
||||||
|
visible: (typeof(subitems) == "object" && subitems.count) || (typeof(subitems_url) == "string" && subitems_url != "" && subitems_url != "internal://back")
|
||||||
|
Layout.preferredHeight: 40
|
||||||
|
Layout.preferredWidth: 40
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue